PPC: Add math.abs/deg/rad/min/max() fast functions.

This commit is contained in:
Mike Pall 2010-10-05 19:35:04 +02:00
parent 3418512862
commit 52b67fd3ea

View File

@ -1206,7 +1206,7 @@ static void build_subroutines(BuildCtx *ctx)
|//-- Math library ------------------------------------------------------- |//-- Math library -------------------------------------------------------
| |
|.ffunc_n math_abs |.ffunc_n math_abs
| NYI | efdabs CRET1, CARG1
| // Fallthrough. | // Fallthrough.
| |
|->fff_restv: |->fff_restv:
@ -1241,12 +1241,30 @@ static void build_subroutines(BuildCtx *ctx)
| |
|.macro math_extern, func |.macro math_extern, func
| .ffunc math_ .. 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 |.endmacro
| |
|.macro math_extern2, func |.macro math_extern2, func
| .ffunc math_ .. 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 |.endmacro
| |
| math_extern floor | math_extern floor
@ -1271,7 +1289,9 @@ static void build_subroutines(BuildCtx *ctx)
| |
|->ff_math_deg: |->ff_math_deg:
|.ffunc_1 math_rad |.ffunc_1 math_rad
| NYI | evldd CARG2, CFUNC:RB->upvalue[0]
| efdmul CRET1, CARG1, CARG2
| b ->fff_restv
| |
|.ffunc_nn math_ldexp; NYI |.ffunc_nn math_ldexp; NYI
|.ffunc_n math_frexp; NYI |.ffunc_n math_frexp; NYI
@ -1279,7 +1299,20 @@ static void build_subroutines(BuildCtx *ctx)
| |
|.macro math_minmax, name, cmpop |.macro math_minmax, name, cmpop
| .ffunc_1 name | .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 |.endmacro
| |
| math_minmax math_min, efdtstlt | math_minmax math_min, efdtstlt