|//-- Math library -------------------------------------------------------
|
|.ffunc_n math_abs
- | NYI
+ | efdabs CRET1, CARG1
| // Fallthrough.
|
|->fff_restv:
|
|.macro math_extern, func
| .ffunc math_ .. func
- | NYI
+ | cmplwi NARGS8:RC, 8
+ | evldd CARG2, 0(BASE)
+ | blt ->fff_fallback
+ | checknum CARG2
+ | evmergehi CARG1, CARG2, CARG2
+ | checkfail ->fff_fallback
+ | bl extern func
+ | evmergelo CRET1, CRET1, CRET2
+ | b ->fff_restv
|.endmacro
|
|.macro math_extern2, func
| .ffunc math_ .. func
- | NYI
+ | cmplwi NARGS8:RC, 16
+ | evldd CARG2, 0(BASE)
+ | evldd CARG4, 8(BASE)
+ | blt ->fff_fallback
+ | evmergehi CARG1, CARG4, CARG2
+ | checknum CARG1
+ | evmergehi CARG3, CARG4, CARG4
+ | checkanyfail ->fff_fallback
+ | bl extern func
+ | evmergelo CRET1, CRET1, CRET2
+ | b ->fff_restv
|.endmacro
|
| math_extern floor
|
|->ff_math_deg:
|.ffunc_1 math_rad
- | NYI
+ | evldd CARG2, CFUNC:RB->upvalue[0]
+ | efdmul CRET1, CARG1, CARG2
+ | b ->fff_restv
|
|.ffunc_nn math_ldexp; NYI
|.ffunc_n math_frexp; NYI
|
|.macro math_minmax, name, cmpop
| .ffunc_1 name
- | NYI
+ | checknum CARG1
+ | li TMP1, 8
+ | checkfail ->fff_fallback
+ |1:
+ | evlddx CARG2, BASE, TMP1
+ | cmplw cr1, TMP1, NARGS8:RC
+ | checknum CARG2
+ | bge cr1, ->fff_restv // Ok, since CRET1 = CARG1.
+ | checkfail ->fff_fallback
+ | cmpop CARG2, CARG1
+ | addi TMP1, TMP1, 8
+ | crmove 4*cr0+lt, 4*cr0+gt
+ | evsel CARG1, CARG2, CARG1
+ | b <1
|.endmacro
|
| math_minmax math_min, efdtstlt