Home | History | Annotate | Download | only in mips
      1 %include "mips/funopWide.S" {"instr":"b d2l_doconv", "st_result":"SET_VREG64(rRESULT0, rRESULT1, rOBJ)"}
      2 %break
      3 
      4 d2l_doconv:
      5 #ifdef MIPS32REVGE6
      6     la        t0, .LDOUBLE_TO_LONG_max
      7     LOAD64_F(fa1, fa1f, t0)
      8     cmp.ule.d ft2, fa1, fa0
      9     la        t0, .LDOUBLE_TO_LONG_ret_max
     10     LOAD64(rRESULT0, rRESULT1, t0)
     11     bc1nez    ft2, .L${opcode}_set_vreg
     12 
     13     la        t0, .LDOUBLE_TO_LONG_min
     14     LOAD64_F(fa1, fa1f, t0)
     15     cmp.ule.d ft2, fa0, fa1
     16     la        t0, .LDOUBLE_TO_LONG_ret_min
     17     LOAD64(rRESULT0, rRESULT1, t0)
     18     bc1nez    ft2, .L${opcode}_set_vreg
     19 
     20     mov.d     fa1, fa0
     21     cmp.un.d  ft2, fa0, fa1
     22     li        rRESULT0, 0
     23     li        rRESULT1, 0
     24     bc1nez    ft2, .L${opcode}_set_vreg
     25 #else
     26     la        t0, .LDOUBLE_TO_LONG_max
     27     LOAD64_F(fa1, fa1f, t0)
     28     c.ole.d   fcc0, fa1, fa0
     29     la        t0, .LDOUBLE_TO_LONG_ret_max
     30     LOAD64(rRESULT0, rRESULT1, t0)
     31     bc1t      .L${opcode}_set_vreg
     32 
     33     la        t0, .LDOUBLE_TO_LONG_min
     34     LOAD64_F(fa1, fa1f, t0)
     35     c.ole.d   fcc0, fa0, fa1
     36     la        t0, .LDOUBLE_TO_LONG_ret_min
     37     LOAD64(rRESULT0, rRESULT1, t0)
     38     bc1t      .L${opcode}_set_vreg
     39 
     40     mov.d     fa1, fa0
     41     c.un.d    fcc0, fa0, fa1
     42     li        rRESULT0, 0
     43     li        rRESULT1, 0
     44     bc1t      .L${opcode}_set_vreg
     45 #endif
     46     JAL(__fixdfdi)
     47     b         .L${opcode}_set_vreg
     48 
     49 .LDOUBLE_TO_LONG_max:
     50     .dword 0x43e0000000000000              #  maxlong, as a double (high word)
     51 .LDOUBLE_TO_LONG_min:
     52     .dword 0xc3e0000000000000              #  minlong, as a double (high word)
     53 .LDOUBLE_TO_LONG_ret_max:
     54     .dword 0x7fffffffffffffff
     55 .LDOUBLE_TO_LONG_ret_min:
     56     .dword 0x8000000000000000
     57