OP_FLOAT_TO_LONG.S revision a8b91c52fd8a90b784835dfe1f8898035266c4dd
1%verify "executed"
2%include "mips/unflopWider.S" {"instr":"b f2l_doconv", "instr_f":"b f2l_doconv", "st_result":"STORE64(rRESULT0, rRESULT1, rOBJ)"}
3%break
4
5f2l_doconv:
6#ifdef SOFT_FLOAT
7    li        a1, 0x5f000000
8    move      rBIX, a0
9    JAL(__gesf2)
10
11    move      t0, v0
12    li        rRESULT0, ~0
13    li        rRESULT1, ~0x80000000
14    bgez      t0, .L${opcode}_set_vreg
15
16    move      a0, rBIX
17    li        a1, 0xdf000000
18    JAL(__lesf2)
19
20    move      t0, v0
21    li        rRESULT0, 0
22    li        rRESULT1, 0x80000000
23    blez      t0, .L${opcode}_set_vreg
24
25    move      a0, rBIX
26    move      a1, rBIX
27    JAL(__nesf2)
28
29    move      t0, v0
30    li        rRESULT0, 0
31    li        rRESULT1, 0
32    bnez      t0, .L${opcode}_set_vreg
33
34    move      a0, rBIX
35    JAL(__fixsfdi)
36
37#else
38    l.s       fa1, .LLONG_TO_max
39    c.ole.s   fcc0, fa1, fa0
40    li        rRESULT0, ~0
41    li        rRESULT1, ~0x80000000
42    bc1t      .L${opcode}_set_vreg
43
44    l.s       fa1, .LLONG_TO_min
45    c.ole.s   fcc0, fa0, fa1
46    li        rRESULT0, 0
47    li        rRESULT1, 0x80000000
48    bc1t      .L${opcode}_set_vreg
49
50    mov.s     fa1, fa0
51    c.un.s    fcc0, fa0, fa1
52    li        rRESULT0, 0
53    li        rRESULT1, 0
54    bc1t      .L${opcode}_set_vreg
55
56    JAL(__fixsfdi)
57#endif
58
59    b         .L${opcode}_set_vreg
60
61.LLONG_TO_max:
62    .word 0x5f000000
63
64.LLONG_TO_min:
65    .word 0xdf000000
66