mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
ARM: Add math.* fast functions.
This commit is contained in:
parent
1f4f805c96
commit
83e302938b
@ -679,12 +679,15 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|
|
||||
|.macro .ffunc_n, name
|
||||
| .ffunc_1 name
|
||||
| NYI
|
||||
| checktp CARG2, LJ_TISNUM
|
||||
| bhs ->fff_fallback
|
||||
|.endmacro
|
||||
|
|
||||
|.macro .ffunc_nn, name
|
||||
| .ffunc_2 name
|
||||
| NYI
|
||||
| checktp CARG2, LJ_TISNUM
|
||||
| cmnlo CARG4, #-LJ_TISNUM
|
||||
| bhs ->fff_fallback
|
||||
|.endmacro
|
||||
|
|
||||
|.macro ffgccheck
|
||||
@ -947,8 +950,19 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|
|
||||
|//-- Math library -------------------------------------------------------
|
||||
|
|
||||
|.ffunc_n math_abs
|
||||
| NYI
|
||||
|.align 8
|
||||
|1:
|
||||
| .long 0x00000000, 0x41e00000 // 2^31.
|
||||
|
|
||||
|.ffunc_1 math_abs
|
||||
| checktp CARG2, LJ_TISNUM
|
||||
| bhi ->fff_fallback
|
||||
| bicne CARG2, CARG2, #0x80000000
|
||||
| bne ->fff_restv
|
||||
| cmp CARG1, #0
|
||||
| rsbslt CARG1, CARG1, #0
|
||||
| ldrdvs CARG12, <1
|
||||
| // Fallthrough.
|
||||
|
|
||||
|->fff_restv:
|
||||
| // CARG12 = TValue result.
|
||||
@ -983,13 +997,15 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
| b <5
|
||||
|
|
||||
|.macro math_extern, func
|
||||
| .ffunc math_ .. func
|
||||
| NYI
|
||||
| .ffunc_n math_ .. func
|
||||
| bl extern func
|
||||
| b ->fff_restv
|
||||
|.endmacro
|
||||
|
|
||||
|.macro math_extern2, func
|
||||
| .ffunc math_ .. func
|
||||
| NYI
|
||||
| .ffunc_nn math_ .. func
|
||||
| bl extern func
|
||||
| b ->fff_restv
|
||||
|.endmacro
|
||||
|
|
||||
|.macro math_round, func
|
||||
@ -1019,24 +1035,84 @@ static void build_subroutines(BuildCtx *ctx)
|
||||
|
|
||||
|->ff_math_deg:
|
||||
|.ffunc_n math_rad
|
||||
| NYI
|
||||
| ldrd CARG34, CFUNC:CARG3->upvalue[0]
|
||||
| bl extern __aeabi_dmul
|
||||
| b ->fff_restv
|
||||
|
|
||||
|.ffunc math_ldexp
|
||||
| NYI
|
||||
|.ffunc_2 math_ldexp
|
||||
| checktp CARG2, LJ_TISNUM
|
||||
| bhs ->fff_fallback
|
||||
| checktp CARG4, LJ_TISNUM
|
||||
| bne ->fff_fallback
|
||||
| bl extern ldexp // (double x, int exp)
|
||||
| b ->fff_restv
|
||||
|
|
||||
|.ffunc math_frexp
|
||||
| NYI
|
||||
|.ffunc_n math_frexp
|
||||
| mov CARG3, sp
|
||||
| bl extern frexp
|
||||
| ldr CARG3, [sp]
|
||||
| mvn CARG4, #~LJ_TISNUM
|
||||
| ldr PC, [BASE, FRAME_PC]
|
||||
| strd CARG12, [BASE, #-8]
|
||||
| mov RC, #(2+1)*8
|
||||
| strd CARG34, [BASE]
|
||||
| b ->fff_res
|
||||
|
|
||||
|.ffunc math_modf
|
||||
| NYI
|
||||
|.ffunc_n math_modf
|
||||
| sub CARG3, BASE, #8
|
||||
| ldr PC, [BASE, FRAME_PC]
|
||||
| bl extern modf
|
||||
| mov RC, #(2+1)*8
|
||||
| strd CARG12, [BASE]
|
||||
| b ->fff_res
|
||||
|
|
||||
|.macro math_minmax, name, cmpop
|
||||
|.macro math_minmax, name, cond, fcond
|
||||
| .ffunc_1 name
|
||||
| NYI
|
||||
| checktp CARG2, LJ_TISNUM
|
||||
| mov RA, #8
|
||||
| bne >4
|
||||
|1: // Handle integers.
|
||||
| ldrd CARG34, [BASE, RA]
|
||||
| cmp RA, RC
|
||||
| bhs ->fff_restv
|
||||
| checktp CARG4, LJ_TISNUM
|
||||
| bne >3
|
||||
| cmp CARG1, CARG3
|
||||
| add RA, RA, #8
|
||||
| mov..cond CARG1, CARG3
|
||||
| b <1
|
||||
|3:
|
||||
| bhi ->fff_fallback
|
||||
| // Convert intermediate result to number and continue below.
|
||||
| bl extern __aeabi_i2d
|
||||
| ldrd CARG34, [BASE, RA]
|
||||
| b >6
|
||||
|
|
||||
|4:
|
||||
| bhi ->fff_fallback
|
||||
|5: // Handle numbers.
|
||||
| ldrd CARG34, [BASE, RA]
|
||||
| cmp RA, RC
|
||||
| bhs ->fff_restv
|
||||
| checktp CARG4, LJ_TISNUM
|
||||
| bhs >7
|
||||
|6:
|
||||
| bl extern __aeabi_cdcmple
|
||||
| add RA, RA, #8
|
||||
| mov..fcond CARG1, CARG3
|
||||
| mov..fcond CARG2, CARG4
|
||||
| b <5
|
||||
|7: // Convert integer to number and continue above.
|
||||
| bhi ->fff_fallback
|
||||
| strd CARG12, TMPD
|
||||
| mov CARG1, CARG3
|
||||
| bl extern __aeabi_i2d
|
||||
| ldrd CARG34, TMPD
|
||||
| b <6
|
||||
|.endmacro
|
||||
|
|
||||
| math_minmax math_min, NYI
|
||||
| math_minmax math_max, NYI
|
||||
| math_minmax math_min, gt, hi
|
||||
| math_minmax math_max, lt, lo
|
||||
|
|
||||
|//-- String library -----------------------------------------------------
|
||||
|
|
||||
|
Loading…
Reference in New Issue
Block a user