summaryrefslogtreecommitdiff
path: root/src/buildvm_ppc.dasc
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_ppc.dasc')
-rw-r--r--src/buildvm_ppc.dasc17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/buildvm_ppc.dasc b/src/buildvm_ppc.dasc
index b9564621..c257de45 100644
--- a/src/buildvm_ppc.dasc
+++ b/src/buildvm_ppc.dasc
@@ -1963,14 +1963,14 @@ static void build_subroutines(BuildCtx *ctx)
1963 |// 1963 |//
1964 |.macro vm_round, name, mode 1964 |.macro vm_round, name, mode
1965 | // Used temporaries: TMP0, TMP1, TMP2, TMP3. 1965 | // Used temporaries: TMP0, TMP1, TMP2, TMP3.
1966 |->name: // Input: CARG2, output: CRET2 1966 |->name.._efd: // Input: CARG2, output: CRET2
1967 | evmergehi CARG1, CARG2, CARG2 1967 | evmergehi CARG1, CARG2, CARG2
1968 |->name.._hilo: 1968 |->name.._hilo:
1969 | // Input: CARG1 (hi), CARG2 (hi, lo), output: CRET2 1969 | // Input: CARG1 (hi), CARG2 (hi, lo), output: CRET2
1970 | rlwinm TMP2, CARG1, 12, 21, 31 1970 | rlwinm TMP2, CARG1, 12, 21, 31
1971 | addic. TMP2, TMP2, -1023 // exp = exponent(x) - 1023 1971 | addic. TMP2, TMP2, -1023 // exp = exponent(x) - 1023
1972 | li TMP1, -1 1972 | li TMP1, -1
1973 | cmplwi cr1, TMP2, 51 // 0 <= exp < 51? 1973 | cmplwi cr1, TMP2, 51 // 0 <= exp <= 51?
1974 | subfic TMP0, TMP2, 52 1974 | subfic TMP0, TMP2, 52
1975 | bgt cr1, >1 1975 | bgt cr1, >1
1976 | lus TMP3, 0xfff0 1976 | lus TMP3, 0xfff0
@@ -2022,12 +2022,19 @@ static void build_subroutines(BuildCtx *ctx)
2022 | blr 2022 | blr
2023 |.endmacro 2023 |.endmacro
2024 | 2024 |
2025 |->vm_floor:
2026 | mflr CARG3
2027 | bl ->vm_floor_hilo
2028 | mtlr CARG3
2029 | evmergehi CRET1, CRET2, CRET2
2030 | blr
2031 |
2025 | vm_round vm_floor, 0 2032 | vm_round vm_floor, 0
2026 | vm_round vm_ceil, 1 2033 | vm_round vm_ceil, 1
2027#if LJ_HASJIT 2034#if LJ_HASJIT
2028 | vm_round vm_trunc, 2 2035 | vm_round vm_trunc, 2
2029#else 2036#else
2030 |->vm_trunc: 2037 |->vm_trunc_efd:
2031 |->vm_trunc_hilo: 2038 |->vm_trunc_hilo:
2032#endif 2039#endif
2033 | 2040 |
@@ -2060,7 +2067,7 @@ static void build_subroutines(BuildCtx *ctx)
2060 |2: 2067 |2:
2061 | cmplwi CARG5, 5; beq >1; bgt >2 2068 | cmplwi CARG5, 5; beq >1; bgt >2
2062 | evmr CARG3, CARG2; efddiv CRET2, CARG2, CARG4; evmr RB, CARG4 2069 | evmr CARG3, CARG2; efddiv CRET2, CARG2, CARG4; evmr RB, CARG4
2063 | mflr RC; bl ->vm_floor; mtlr RC 2070 | mflr RC; bl ->vm_floor_efd; mtlr RC
2064 | efdmul CRET2, CRET2, RB; efdsub CRET2, CARG3, CRET2 2071 | efdmul CRET2, CRET2, RB; efdsub CRET2, CARG3, CRET2
2065 | evmergehi CRET1, CRET2, CRET2; blr 2072 | evmergehi CRET1, CRET2, CRET2; blr
2066 |1: 2073 |1:
@@ -2387,7 +2394,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2387 | ins_arithpre RD, SAVE0 2394 | ins_arithpre RD, SAVE0
2388 |->BC_MODVN_Z: 2395 |->BC_MODVN_Z:
2389 | efddiv CARG2, RD, SAVE0 2396 | efddiv CARG2, RD, SAVE0
2390 | bl ->vm_floor // floor(b/c) 2397 | bl ->vm_floor_efd // floor(b/c)
2391 | efdmul TMP0, CRET2, SAVE0 2398 | efdmul TMP0, CRET2, SAVE0
2392 | ins_next1 2399 | ins_next1
2393 | efdsub TMP0, RD, TMP0 // b - floor(b/c)*c 2400 | efdsub TMP0, RD, TMP0 // b - floor(b/c)*c