blob: 77b2c46b4e3e23297773c67cbca370b9abc18cbe [file] [log] [blame]
%include "mips/funopWider.S" {"instr":"b f2l_doconv", "st_result":"SET_VREG64(rRESULT0, rRESULT1, rOBJ)"}
%break
f2l_doconv:
#ifdef MIPS32REVGE6
l.s fa1, .LLONG_TO_max
cmp.ule.s ft2, fa1, fa0
li rRESULT0, ~0
li rRESULT1, ~0x80000000
bc1nez ft2, .L${opcode}_set_vreg
l.s fa1, .LLONG_TO_min
cmp.ule.s ft2, fa0, fa1
li rRESULT0, 0
li rRESULT1, 0x80000000
bc1nez ft2, .L${opcode}_set_vreg
mov.s fa1, fa0
cmp.un.s ft2, fa0, fa1
li rRESULT0, 0
li rRESULT1, 0
bc1nez ft2, .L${opcode}_set_vreg
#else
l.s fa1, .LLONG_TO_max
c.ole.s fcc0, fa1, fa0
li rRESULT0, ~0
li rRESULT1, ~0x80000000
bc1t .L${opcode}_set_vreg
l.s fa1, .LLONG_TO_min
c.ole.s fcc0, fa0, fa1
li rRESULT0, 0
li rRESULT1, 0x80000000
bc1t .L${opcode}_set_vreg
mov.s fa1, fa0
c.un.s fcc0, fa0, fa1
li rRESULT0, 0
li rRESULT1, 0
bc1t .L${opcode}_set_vreg
#endif
JAL(__fixsfdi)
b .L${opcode}_set_vreg
.LLONG_TO_max:
.word 0x5f000000
.LLONG_TO_min:
.word 0xdf000000