Home | History | Annotate | Download | only in mips
      1 %include "mips/funop.S" {"instr":"b f2i_doconv"}
      2 %break
      3 
      4 /*
      5  * Not an entry point as it is used only once !!
      6  */
      7 f2i_doconv:
      8 #ifdef MIPS32REVGE6
      9     l.s       fa1, .LFLOAT_TO_INT_max
     10     cmp.ule.s ft2, fa1, fa0
     11     l.s       fv0, .LFLOAT_TO_INT_ret_max
     12     bc1nez    ft2, .L${opcode}_set_vreg_f
     13 
     14     l.s       fa1, .LFLOAT_TO_INT_min
     15     cmp.ule.s ft2, fa0, fa1
     16     l.s       fv0, .LFLOAT_TO_INT_ret_min
     17     bc1nez    ft2, .L${opcode}_set_vreg_f
     18 
     19     mov.s     fa1, fa0
     20     cmp.un.s  ft2, fa0, fa1
     21     li.s      fv0, 0
     22     bc1nez    ft2, .L${opcode}_set_vreg_f
     23 #else
     24     l.s       fa1, .LFLOAT_TO_INT_max
     25     c.ole.s   fcc0, fa1, fa0
     26     l.s       fv0, .LFLOAT_TO_INT_ret_max
     27     bc1t      .L${opcode}_set_vreg_f
     28 
     29     l.s       fa1, .LFLOAT_TO_INT_min
     30     c.ole.s   fcc0, fa0, fa1
     31     l.s       fv0, .LFLOAT_TO_INT_ret_min
     32     bc1t      .L${opcode}_set_vreg_f
     33 
     34     mov.s     fa1, fa0
     35     c.un.s    fcc0, fa0, fa1
     36     li.s      fv0, 0
     37     bc1t      .L${opcode}_set_vreg_f
     38 #endif
     39 
     40     trunc.w.s  fv0, fa0
     41     b         .L${opcode}_set_vreg_f
     42 
     43 .LFLOAT_TO_INT_max:
     44     .word 0x4f000000
     45 .LFLOAT_TO_INT_min:
     46     .word 0xcf000000
     47 .LFLOAT_TO_INT_ret_max:
     48     .word 0x7fffffff
     49 .LFLOAT_TO_INT_ret_min:
     50     .word 0x80000000
     51