%include "mips/funop.S" {"instr":"b f2i_doconv"} %break /* * Not an entry point as it is used only once !! */ f2i_doconv: #ifdef MIPS32REVGE6 l.s fa1, .LFLOAT_TO_INT_max cmp.ule.s ft2, fa1, fa0 l.s fv0, .LFLOAT_TO_INT_ret_max bc1nez ft2, .L${opcode}_set_vreg_f l.s fa1, .LFLOAT_TO_INT_min cmp.ule.s ft2, fa0, fa1 l.s fv0, .LFLOAT_TO_INT_ret_min bc1nez ft2, .L${opcode}_set_vreg_f mov.s fa1, fa0 cmp.un.s ft2, fa0, fa1 li.s fv0, 0 bc1nez ft2, .L${opcode}_set_vreg_f #else l.s fa1, .LFLOAT_TO_INT_max c.ole.s fcc0, fa1, fa0 l.s fv0, .LFLOAT_TO_INT_ret_max bc1t .L${opcode}_set_vreg_f l.s fa1, .LFLOAT_TO_INT_min c.ole.s fcc0, fa0, fa1 l.s fv0, .LFLOAT_TO_INT_ret_min bc1t .L${opcode}_set_vreg_f mov.s fa1, fa0 c.un.s fcc0, fa0, fa1 li.s fv0, 0 bc1t .L${opcode}_set_vreg_f #endif trunc.w.s fv0, fa0 b .L${opcode}_set_vreg_f .LFLOAT_TO_INT_max: .word 0x4f000000 .LFLOAT_TO_INT_min: .word 0xcf000000 .LFLOAT_TO_INT_ret_max: .word 0x7fffffff .LFLOAT_TO_INT_ret_min: .word 0x80000000