powerpc: Move load/store align helpers to common file
authorDoug Nazar <nazard@nazar.ca>
Fri, 13 Sep 2019 23:52:58 +0000 (19:52 -0400)
committerDoug Nazar <nazard@nazar.ca>
Fri, 13 Sep 2019 23:55:24 +0000 (19:55 -0400)
orc/orcpowerpc.c
orc/orcpowerpc.h
orc/orcrules-altivec.c

index 0b84134..ed98437 100644 (file)
@@ -740,3 +740,42 @@ void powerpc_emit_label (OrcCompiler *compiler, int label)
   powerpc_add_label (compiler, compiler->codeptr, label);
 }
 
+void
+powerpc_load_align (OrcCompiler *compiler, int vector_reg, int offset_reg, int src_reg)
+{
+  if (IS_POWERPC_BE (compiler)) {
+    ORC_ASM_CODE(compiler,"  lvsl %s, %s, %s\n",
+        powerpc_get_regname (vector_reg),
+        offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
+        powerpc_get_regname (src_reg));
+    powerpc_emit_X (compiler, 0x7c00000c, powerpc_regnum(vector_reg),
+        offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
+  } else {
+    ORC_ASM_CODE(compiler,"  lvsr %s, %s, %s\n",
+        powerpc_get_regname (vector_reg),
+        offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
+        powerpc_get_regname (src_reg));
+    powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(vector_reg),
+        offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
+  }
+}
+
+void
+powerpc_store_align (OrcCompiler *compiler, int vector_reg, int offset_reg, int src_reg)
+{
+  if (IS_POWERPC_BE (compiler)) {
+    ORC_ASM_CODE(compiler,"  lvsr %s, %s, %s\n",
+        powerpc_get_regname (vector_reg),
+        offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
+        powerpc_get_regname (src_reg));
+    powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(vector_reg),
+        offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
+  } else {
+    ORC_ASM_CODE(compiler,"  lvsl %s, %s, %s\n",
+        powerpc_get_regname (vector_reg),
+        offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
+        powerpc_get_regname (src_reg));
+    powerpc_emit_X (compiler, 0x7c00000c, powerpc_regnum(vector_reg),
+        offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
+  }
+}
index e6b315a..a4b6c06 100644 (file)
@@ -138,6 +138,9 @@ void powerpc_emit_full_constants (OrcCompiler* p);
 void powerpc_emit_load_address (OrcCompiler* compiler, int regd, int rega, int imm);
 void powerpc_load_constant (OrcCompiler* p, int i, int reg);
 
+void powerpc_load_align (OrcCompiler *compiler, int vector_reg, int offset_reg, int src_reg);
+void powerpc_store_align (OrcCompiler *compiler, int vector_reg, int offset_reg, int src_reg);
+
 /* instructions */
 #define powerpc_emit_vand(p,a,b,c)         powerpc_emit_VX_2 (p, "vand", 0x10000404, a, b, c)
 #define powerpc_emit_vandc(p,a,b,c)        powerpc_emit_VX_2 (p, "vandc", 0x10000444, a, b, c)
index a17e024..b453d64 100644 (file)
 
 /* rules */
 
-static void
-powerpc_load_align (OrcCompiler *compiler, int vector_reg, int offset_reg, int src_reg)
-{
-  if (IS_POWERPC_BE (compiler)) {
-    ORC_ASM_CODE(compiler,"  lvsl %s, %s, %s\n",
-      powerpc_get_regname (vector_reg),
-      offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
-      powerpc_get_regname (src_reg));
-    powerpc_emit_X (compiler, 0x7c00000c, powerpc_regnum(vector_reg),
-      offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
-  } else {
-    ORC_ASM_CODE(compiler,"  lvsr %s, %s, %s\n",
-      powerpc_get_regname (vector_reg),
-      offset_reg == 0 ? "0" : powerpc_get_regname (offset_reg),
-      powerpc_get_regname (src_reg));
-    powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(vector_reg),
-      offset_reg == 0 ? 0 : powerpc_regnum(offset_reg), powerpc_regnum(src_reg));
-  }
-}
-
 static inline int
 powerpc_select_value (OrcCompiler *compiler, int be_value, int le_value)
 {
@@ -322,19 +302,7 @@ powerpc_rule_storeX (OrcCompiler *compiler, void *user, OrcInstruction *insn)
   int perm = orc_compiler_get_temp_reg (compiler);
   int tmp = orc_compiler_get_temp_reg (compiler);
 
-  if (IS_POWERPC_BE (compiler)) {
-    ORC_ASM_CODE(compiler,"  lvsr %s, 0, %s\n",
-        powerpc_get_regname (perm),
-        powerpc_get_regname (dest->ptr_register));
-    powerpc_emit_X (compiler, 0x7c00004c, powerpc_regnum(perm),
-        0, powerpc_regnum(dest->ptr_register));
-  } else {
-    ORC_ASM_CODE(compiler,"  lvsl %s, 0, %s\n",
-        powerpc_get_regname (perm),
-        powerpc_get_regname (dest->ptr_register));
-    powerpc_emit_X (compiler, 0x7c00000c, powerpc_regnum(perm),
-        0, powerpc_regnum(dest->ptr_register));
-  }
+  powerpc_store_align (compiler, perm, 0, dest->ptr_register);
   powerpc_emit_vperm (compiler, tmp, src->alloc, src->alloc, perm);
 
   switch (size) {