diff options
| author | Mike Pall <mike> | 2012-06-12 17:25:52 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2012-06-12 17:25:52 +0200 |
| commit | c2159f8624c99d18e2c5b8a090e741008062a0c1 (patch) | |
| tree | f5c7330b5adf9a017763487cdbc562a4e5e6dfed /src | |
| parent | 46dc6d347cc82bd1548ed83b7b5597d9cf3a2259 (diff) | |
| download | luajit-c2159f8624c99d18e2c5b8a090e741008062a0c1.tar.gz luajit-c2159f8624c99d18e2c5b8a090e741008062a0c1.tar.bz2 luajit-c2159f8624c99d18e2c5b8a090e741008062a0c1.zip | |
ARM/PPC: Remove assembler code for lj_vm_foldarith().
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_vmmath.c | 4 | ||||
| -rw-r--r-- | src/vm_arm.dasc | 43 | ||||
| -rw-r--r-- | src/vm_ppc.dasc | 56 |
3 files changed, 1 insertions, 102 deletions
diff --git a/src/lj_vmmath.c b/src/lj_vmmath.c index 1416b600..9b2235f3 100644 --- a/src/lj_vmmath.c +++ b/src/lj_vmmath.c | |||
| @@ -10,9 +10,7 @@ | |||
| 10 | #include <math.h> | 10 | #include <math.h> |
| 11 | 11 | ||
| 12 | #include "lj_obj.h" | 12 | #include "lj_obj.h" |
| 13 | #if LJ_HASJIT || LJ_TARGET_MIPS | ||
| 14 | #include "lj_ir.h" | 13 | #include "lj_ir.h" |
| 15 | #endif | ||
| 16 | #include "lj_vm.h" | 14 | #include "lj_vm.h" |
| 17 | 15 | ||
| 18 | /* -- Helper functions for generated machine code ------------------------- */ | 16 | /* -- Helper functions for generated machine code ------------------------- */ |
| @@ -24,7 +22,7 @@ LJ_FUNCA double lj_vm_cosh(double x) { return cosh(x); } | |||
| 24 | LJ_FUNCA double lj_vm_tanh(double x) { return tanh(x); } | 22 | LJ_FUNCA double lj_vm_tanh(double x) { return tanh(x); } |
| 25 | #endif | 23 | #endif |
| 26 | 24 | ||
| 27 | #if LJ_TARGET_MIPS | 25 | #if !LJ_TARGET_X86ORX64 |
| 28 | double lj_vm_foldarith(double x, double y, int op) | 26 | double lj_vm_foldarith(double x, double y, int op) |
| 29 | { | 27 | { |
| 30 | switch (op) { | 28 | switch (op) { |
diff --git a/src/vm_arm.dasc b/src/vm_arm.dasc index aa5fbc88..8ddce49e 100644 --- a/src/vm_arm.dasc +++ b/src/vm_arm.dasc | |||
| @@ -2141,49 +2141,6 @@ static void build_subroutines(BuildCtx *ctx) | |||
| 2141 | | rsbmi CARG1, CARG1, #0 // if (sign(divisor) != sign(y)) y = -y | 2141 | | rsbmi CARG1, CARG1, #0 // if (sign(divisor) != sign(y)) y = -y |
| 2142 | | bx lr | 2142 | | bx lr |
| 2143 | | | 2143 | | |
| 2144 | |// Callable from C: double lj_vm_foldarith(double x, double y, int op) | ||
| 2145 | |// Compute x op y for basic arithmetic operators (+ - * / % ^ and unary -) | ||
| 2146 | |// and basic math functions. ORDER ARITH | ||
| 2147 | |->vm_foldarith: | ||
| 2148 | | ldr OP, [sp] | ||
| 2149 | | cmp OP, #1 | ||
| 2150 | | blo extern __aeabi_dadd | ||
| 2151 | | beq extern __aeabi_dsub | ||
| 2152 | | cmp OP, #3 | ||
| 2153 | | blo extern __aeabi_dmul | ||
| 2154 | | beq extern __aeabi_ddiv | ||
| 2155 | | cmp OP, #5 | ||
| 2156 | | blo ->vm_mod | ||
| 2157 | | beq extern pow | ||
| 2158 | | cmp OP, #7 | ||
| 2159 | | eorlo CARG2, CARG2, #0x80000000 | ||
| 2160 | | biceq CARG2, CARG2, #0x80000000 | ||
| 2161 | | bxls lr | ||
| 2162 | |.if JIT | ||
| 2163 | | cmp OP, #9 | ||
| 2164 | | blo extern atan2 | ||
| 2165 | | beq >9 // No support needed for IR_LDEXP. | ||
| 2166 | | cmp OP, #11 | ||
| 2167 | | bhi >9 | ||
| 2168 | | push {r4, lr} | ||
| 2169 | | beq >1 | ||
| 2170 | | // IR_MIN | ||
| 2171 | | bl extern __aeabi_cdcmple | ||
| 2172 | | movhi CARG1, CARG3 | ||
| 2173 | | movhi CARG2, CARG4 | ||
| 2174 | | pop {r4, pc} | ||
| 2175 | |9: | ||
| 2176 | | NYI // Bad op. | ||
| 2177 | | | ||
| 2178 | |1: // IR_MAX | ||
| 2179 | | bl extern __aeabi_cdcmple | ||
| 2180 | | movlo CARG1, CARG3 | ||
| 2181 | | movlo CARG2, CARG4 | ||
| 2182 | | pop {r4, pc} | ||
| 2183 | |.else | ||
| 2184 | | NYI // Other operations only needed by JIT compiler. | ||
| 2185 | |.endif | ||
| 2186 | | | ||
| 2187 | |//----------------------------------------------------------------------- | 2144 | |//----------------------------------------------------------------------- |
| 2188 | |//-- Miscellaneous functions -------------------------------------------- | 2145 | |//-- Miscellaneous functions -------------------------------------------- |
| 2189 | |//----------------------------------------------------------------------- | 2146 | |//----------------------------------------------------------------------- |
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc index d2d10b3e..bf46f694 100644 --- a/src/vm_ppc.dasc +++ b/src/vm_ppc.dasc | |||
| @@ -2474,62 +2474,6 @@ static void build_subroutines(BuildCtx *ctx) | |||
| 2474 | | mcrxr cr0 // Clear SO for -2147483648 % -1 and return 0. | 2474 | | mcrxr cr0 // Clear SO for -2147483648 % -1 and return 0. |
| 2475 | | blr | 2475 | | blr |
| 2476 | | | 2476 | | |
| 2477 | |// Callable from C: double lj_vm_foldarith(double x, double y, int op) | ||
| 2478 | |// Compute x op y for basic arithmetic operators (+ - * / % ^ and unary -) | ||
| 2479 | |// and basic math functions. ORDER ARITH | ||
| 2480 | |->vm_foldarith: | ||
| 2481 | | cmplwi CARG1, 1 | ||
| 2482 | | beq >1; bgt >2 | ||
| 2483 | | fadd FARG1, FARG1, FARG2; blr | ||
| 2484 | |1: | ||
| 2485 | | fsub FARG1, FARG1, FARG2; blr | ||
| 2486 | |2: | ||
| 2487 | | cmplwi CARG1, 3; beq >1; bgt >2 | ||
| 2488 | | fmul FARG1, FARG1, FARG2; blr | ||
| 2489 | |1: | ||
| 2490 | | fdiv FARG1, FARG1, FARG2; blr | ||
| 2491 | |2: | ||
| 2492 | | cmplwi CARG1, 5; beq >1; bgt >2 | ||
| 2493 | | // NYI: Use internal implementation of floor and avoid spills. | ||
| 2494 | | stwu sp, -32(sp); stfd f14, 16(sp); stfd f15, 24(sp) | ||
| 2495 | | mflr r0 | ||
| 2496 | | fmr f14, FARG1 | ||
| 2497 | | fdiv FARG1, FARG1, FARG2 | ||
| 2498 | | stw r0, 36(sp) | ||
| 2499 | | fmr f15, FARG2 | ||
| 2500 | | bl extern floor | ||
| 2501 | | lwz r0, 36(sp) | ||
| 2502 | | fmul FARG1, FARG1, f15 | ||
| 2503 | | mtlr r0 | ||
| 2504 | | fsub FARG1, f14, FARG1 | ||
| 2505 | | lfd f14, 16(sp); lfd f15, 24(sp); addi sp, sp, 32; blr | ||
| 2506 | |1: | ||
| 2507 | | b extern pow | ||
| 2508 | |2: | ||
| 2509 | | cmplwi CARG1, 7; beq >1; bgt >2 | ||
| 2510 | | fneg FARG1, FARG1; blr | ||
| 2511 | |1: | ||
| 2512 | | fabs FARG1, FARG1; blr | ||
| 2513 | |2: | ||
| 2514 | |.if JIT | ||
| 2515 | | cmplwi CARG1, 9; beq >9; bgt >2 | ||
| 2516 | | b extern atan2 | ||
| 2517 | | // No support needed for IR_LDEXP. | ||
| 2518 | |2: | ||
| 2519 | | cmplwi CARG1, 11; bgt >9 | ||
| 2520 | | fsub f0, FARG1, FARG2 | ||
| 2521 | | beq >1 | ||
| 2522 | | fsel FARG1, f0, FARG2, FARG1 // IR_MAX | ||
| 2523 | | blr | ||
| 2524 | |1: | ||
| 2525 | | fsel FARG1, f0, FARG1, FARG2 // IR_MIN | ||
| 2526 | | blr | ||
| 2527 | |9: | ||
| 2528 | | NYI // Bad op. | ||
| 2529 | |.else | ||
| 2530 | | NYI // Other operations only needed by JIT compiler. | ||
| 2531 | |.endif | ||
| 2532 | | | ||
| 2533 | |//----------------------------------------------------------------------- | 2477 | |//----------------------------------------------------------------------- |
| 2534 | |//-- Miscellaneous functions -------------------------------------------- | 2478 | |//-- Miscellaneous functions -------------------------------------------- |
| 2535 | |//----------------------------------------------------------------------- | 2479 | |//----------------------------------------------------------------------- |
