@@ -541,7 +541,41 @@ impl MacroAssembler {
541
541
542
542
pub fn float_cmp_nan ( & mut self , mode : MachineMode , dest : Reg , src : FReg ) { }
543
543
544
- pub fn float_srt ( & mut self , _mode : MachineMode , _dest : Reg , _lhs : FReg , _rhs : FReg ) { }
544
+ pub fn float_srt ( & mut self , mode : MachineMode , dest : Reg , lhs : FReg , rhs : FReg ) {
545
+ match mode {
546
+ MachineMode :: Float64 => {
547
+ self . asm . fmv_x_d ( R10 . into ( ) , lhs. into ( ) ) ;
548
+ self . asm . fmv_x_d ( R11 . into ( ) , rhs. into ( ) ) ;
549
+ self . asm . srai ( R12 . into ( ) , R10 . into ( ) , 63 ) ;
550
+ self . asm . srli ( R12 . into ( ) , R12 . into ( ) , 1 ) ;
551
+ self . asm . xor ( R10 . into ( ) , R10 . into ( ) , R12 . into ( ) ) ;
552
+ self . asm . srai ( R12 . into ( ) , R11 . into ( ) , 63 ) ;
553
+ self . asm . srli ( R12 . into ( ) , R12 . into ( ) , 1 ) ;
554
+ self . asm . xor ( R11 . into ( ) , R11 . into ( ) , R12 . into ( ) ) ;
555
+ self . asm . slt ( R12 . into ( ) , R10 . into ( ) , R11 . into ( ) ) ;
556
+ self . asm . xor ( R10 . into ( ) , R10 . into ( ) , R11 . into ( ) ) ;
557
+ self . asm . snez ( R10 . into ( ) , R10 . into ( ) ) ;
558
+ self . asm . neg ( R11 . into ( ) , R12 . into ( ) ) ;
559
+ self . asm . or ( dest. into ( ) , R10 . into ( ) , R11 . into ( ) )
560
+ }
561
+ MachineMode :: Float32 => {
562
+ self . asm . fmv_x_w ( R10 . into ( ) , lhs. into ( ) ) ;
563
+ self . asm . fmv_x_w ( R11 . into ( ) , rhs. into ( ) ) ;
564
+ self . asm . sraiw ( R12 . into ( ) , R10 . into ( ) , 31 ) ;
565
+ self . asm . srliw ( R12 . into ( ) , R12 . into ( ) , 1 ) ;
566
+ self . asm . xor ( R10 . into ( ) , R10 . into ( ) , R12 . into ( ) ) ;
567
+ self . asm . sraiw ( R12 . into ( ) , R11 . into ( ) , 31 ) ;
568
+ self . asm . srliw ( R12 . into ( ) , R12 . into ( ) , 1 ) ;
569
+ self . asm . xor ( R11 . into ( ) , R11 . into ( ) , R12 . into ( ) ) ;
570
+ self . asm . slt ( R12 . into ( ) , R10 . into ( ) , R11 . into ( ) ) ;
571
+ self . asm . xor ( R10 . into ( ) , R10 . into ( ) , R11 . into ( ) ) ;
572
+ self . asm . snez ( R10 . into ( ) , R10 . into ( ) ) ;
573
+ self . asm . neg ( R11 . into ( ) , R12 . into ( ) ) ;
574
+ self . asm . or ( dest. into ( ) , R10 . into ( ) , R11 . into ( ) )
575
+ }
576
+ _ => unreachable ! ( ) ,
577
+ }
578
+ }
545
579
546
580
pub fn load_float_const ( & mut self , mode : MachineMode , dest : FReg , imm : f64 ) { }
547
581
0 commit comments