changeset 6034:5ad4c0916974 icedtea-2.6pre15

Add support for A53 multiply accumulate
author adinn
date Thu, 11 Dec 2014 16:42:03 +0000
parents 6aed71db871e
children e9e3fcbb11f9 7891f0e7ae10
files src/cpu/aarch64/vm/assembler_aarch64.cpp src/cpu/aarch64/vm/assembler_aarch64.hpp src/cpu/aarch64/vm/interp_masm_aarch64.cpp
diffstat 3 files changed, 12 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/assembler_aarch64.cpp	Thu Dec 11 15:08:13 2014 +0000
+++ b/src/cpu/aarch64/vm/assembler_aarch64.cpp	Thu Dec 11 16:42:03 2014 +0000
@@ -3056,7 +3056,7 @@
     sdivw(result, ra, rb);
   } else {
     sdivw(scratch, ra, rb);
-    msubw(result, scratch, rb, ra);
+    Assembler::msubw(result, scratch, rb, ra);
   }
 
   return idivl_offset;
--- a/src/cpu/aarch64/vm/assembler_aarch64.hpp	Thu Dec 11 15:08:13 2014 +0000
+++ b/src/cpu/aarch64/vm/assembler_aarch64.hpp	Thu Dec 11 16:42:03 2014 +0000
@@ -2643,6 +2643,16 @@
     umaddl(Rd, Rn, Rm, zr);
   }
 
+#define WRAP(INSN)                                                \
+  void INSN(Register Rd, Register Rn, Register Rm, Register Ra) { \
+    if (Ra != zr) nop();                                          \
+    Assembler::INSN(Rd, Rn, Rm, Ra);                              \
+  }
+
+  WRAP(madd) WRAP(msub) WRAP(maddw) WRAP(msubw)
+  WRAP(smaddl) WRAP(smsubl) WRAP(umaddl) WRAP(umsubl)
+#undef WRAP
+
   // macro assembly operations needed for aarch64
 
   // first two private routines for loading 32 bit or 64 bit constants
--- a/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Thu Dec 11 15:08:13 2014 +0000
+++ b/src/cpu/aarch64/vm/interp_masm_aarch64.cpp	Thu Dec 11 16:42:03 2014 +0000
@@ -1295,7 +1295,7 @@
     // case_array_offset_in_bytes()
     movw(reg2, in_bytes(MultiBranchData::per_case_size()));
     movw(rscratch1, in_bytes(MultiBranchData::case_array_offset()));
-    maddw(index, index, reg2, rscratch1);
+    Assembler::maddw(index, index, reg2, rscratch1);
 
     // Update the case count
     increment_mdp_data_at(mdp,