ソースを参照

PPC: Compile math.sqrt() to fsqrt instruction.

Mike Pall 13 年 前
コミット
a58b86dad3
2 ファイル変更5 行追加1 行削除
  1. 4 1
      src/lj_asm_ppc.h
  2. 1 0
      src/lj_target_ppc.h

+ 4 - 1
src/lj_asm_ppc.h

@@ -2026,7 +2026,10 @@ static void asm_ir(ASMState *as, IRIns *ir)
   case IR_FPMATH:
     if (ir->op2 == IRFPM_EXP2 && asm_fpjoin_pow(as, ir))
       break;
-    asm_callid(as, ir, IRCALL_lj_vm_floor + ir->op2);
+    if (ir->op2 == IRFPM_SQRT && (as->flags & JIT_F_SQRT))
+      asm_fpunary(as, ir, PPCI_FSQRT);
+    else
+      asm_callid(as, ir, IRCALL_lj_vm_floor + ir->op2);
     break;
 
   /* Overflow-checking arithmetic ops. */

+ 1 - 0
src/lj_target_ppc.h

@@ -263,6 +263,7 @@ typedef enum PPCIns {
   PPCI_FSUB = 0xfc000028,
   PPCI_FMUL = 0xfc000032,
   PPCI_FDIV = 0xfc000024,
+  PPCI_FSQRT = 0xfc00002c,
 
   PPCI_FMADD = 0xfc00003a,
   PPCI_FMSUB = 0xfc000038,