]> git.ipfire.org Git - thirdparty/LuaJIT.git/commitdiff
PPC: Add helper function for folding arithmetic ops.
authorMike Pall <mike>
Tue, 7 Sep 2010 22:14:36 +0000 (00:14 +0200)
committerMike Pall <mike>
Tue, 7 Sep 2010 22:14:36 +0000 (00:14 +0200)
src/buildvm_ppc.dasc

index 9cdc3643041432f23a84c7dd2b2f6dad0395908b..9c5bc437be67050ec7830d85efe7b5a419ad392f 100644 (file)
@@ -981,7 +981,33 @@ static void build_subroutines(BuildCtx *ctx)
   |// Compute x op y for basic arithmetic operators (+ - * / % ^ and unary -)
   |// and basic math functions. ORDER ARITH
   |->vm_foldarith:
-  |  NYI
+  |  evmergelo CARG2, CARG1, CARG2
+  |   cmplwi CARG5, 1
+  |  evmergelo CARG4, CARG3, CARG4
+  |   beq >1; bgt >2
+  |  efdadd CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |1:
+  |  efdsub CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |2:
+  |   cmplwi CARG5, 3; beq >1; bgt >2
+  |  efdmul CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |1:
+  |  efddiv CRET2, CARG2, CARG4; evmergehi CRET1, CRET2, CRET2; blr
+  |2:
+  |   cmplwi CARG5, 5; beq >1; bgt >2
+  |  evmr CARG3, CARG2; efddiv CRET2, CARG2, CARG4
+  |  mflr SAVE0; bl ->vm_floor; mtlr SAVE0
+  |  efdmul CRET2, CRET2, CARG4; efdsub CRET2, CARG3, CRET2
+  |  evmergehi CRET1, CRET2, CRET2; blr
+  |1:
+  |  b extern pow
+  |2:
+  |   cmplwi CARG5, 7; beq >1; bgt >2
+  |  xoris CARG1, CARG1, 0x8000; blr
+  |1:
+  |  rlwinm CARG1, CARG1, 0, 1, 31; blr
+  |2:
+  |  NYI  // Other operations only needed by JIT compiler.
   |
   |//-----------------------------------------------------------------------
   |//-- Miscellaneous functions --------------------------------------------