x86: cpuinsn cleanup
authorDavid Schleef <ds@schleef.org>
Sun, 7 Nov 2010 23:46:31 +0000 (15:46 -0800)
committerDavid Schleef <ds@schleef.org>
Mon, 8 Nov 2010 03:25:22 +0000 (19:25 -0800)
orc/orccpuinsn.h [moved from orc/orcsysinsn.h with 100% similarity]
orc/orcsse.h
orc/orcx86.c
orc/orcx86.h

similarity index 100%
rename from orc/orcsysinsn.h
rename to orc/orccpuinsn.h
index 5d544d4..fe21b9c 100644 (file)
@@ -66,28 +66,6 @@ void orc_sse_restore_mxcsr (OrcCompiler *compiler);
 void orc_sse_load_constant (OrcCompiler *compiler, int reg, int size,
     orc_uint64 value);
 
-void orc_x86_emit_cpuinsn (OrcCompiler *p, int opcode, int src, int dest,
-    int imm);
-void orc_x86_emit_cpuinsn_load_memoffset (OrcCompiler *p, int size, int index,
-    int offset, int src, int dest, int imm);
-void orc_x86_emit_cpuinsn_store_memoffset (OrcCompiler *p, int size, int index,
-    int src, int offset, int dest, int imm);
-void orc_x86_emit_cpuinsn_load_memindex (OrcCompiler *p, int index, int size,
-    int imm, int offset, int src, int src_index, int shift, int dest);
-void orc_x86_emit_cpuinsn_load_register (OrcCompiler *p, int index, int imm,
-    int src, int dest);
-void orc_x86_emit_cpuinsn_imm_reg (OrcCompiler *p, int index, int size, int imm,
-    int dest);
-void orc_x86_emit_cpuinsn_imm_memoffset (OrcCompiler *p, int index, int size,
-    int imm, int offset, int dest);
-void orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src,
-    int offset, int dest);
-void orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size,
-    int offset, int src, int dest);
-void orc_x86_emit_cpuinsn_branch (OrcCompiler *p, int index, int label);
-void orc_x86_emit_cpuinsn_label (OrcCompiler *p, int index, int label);
-void orc_x86_emit_cpuinsn_none (OrcCompiler *p, int index);
-
 unsigned int orc_sse_get_cpu_flags (void);
 
 
index 4c32512..c003165 100644 (file)
@@ -308,79 +308,6 @@ orc_x86_emit_mov_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int o
 }
 
 void
-orc_x86_emit_mov_imm_reg (OrcCompiler *compiler, int size, int value, int reg1)
-{
-  orc_x86_emit_cpuinsn_imm_reg (compiler, ORC_X86_mov_imm32_r, 4, value, reg1);
-}
-
-void orc_x86_emit_mov_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2)
-{
-  orc_x86_emit_cpuinsn (compiler, ORC_X86_mov_r_rm, 0, reg1, reg2);
-}
-
-void
-orc_x86_emit_test_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2)
-{
-  orc_x86_emit_cpuinsn (compiler, ORC_X86_test, 0, reg1, reg2);
-}
-
-void
-orc_x86_emit_sar_imm_reg (OrcCompiler *compiler, int size, int value, int reg)
-{
-  if (value == 0) return;
-
-  if (value == 1) {
-    orc_x86_emit_cpuinsn_imm_reg (compiler, ORC_X86_sar, 4, value, reg);
-  } else {
-    orc_x86_emit_cpuinsn_imm_reg (compiler, ORC_X86_sar_imm, 4, value, reg);
-  }
-}
-
-void
-orc_x86_emit_and_imm_memoffset (OrcCompiler *compiler, int size, int value,
-    int offset, int reg)
-{
-  if (value >= -128 && value < 128) {
-    orc_x86_emit_cpuinsn_imm_memoffset (compiler, ORC_X86_and_imm8_rm, size,
-        value, offset, reg);
-  } else {
-    orc_x86_emit_cpuinsn_imm_memoffset (compiler, ORC_X86_and_imm32_rm, size,
-        value, offset, reg);
-  }
-}
-
-void
-orc_x86_emit_and_imm_reg (OrcCompiler *compiler, int size, int value, int reg)
-{
-  if (value >= -128 && value < 128) {
-    orc_x86_emit_cpuinsn_imm_reg (compiler, ORC_X86_and_imm8_rm, size, value, reg);
-  } else {
-    orc_x86_emit_cpuinsn_imm_reg (compiler, ORC_X86_and_imm32_rm, size, value, reg);
-  }
-}
-
-void
-orc_x86_emit_add_imm_memoffset (OrcCompiler *compiler, int size, int value,
-    int offset, int reg)
-{
-  if (value >= -128 && value < 128) {
-    orc_x86_emit_cpuinsn_imm_memoffset (compiler, ORC_X86_add_imm8_rm, size,
-        value, offset, reg);
-  } else {
-    orc_x86_emit_cpuinsn_imm_memoffset (compiler, ORC_X86_add_imm32_rm, size,
-        value, offset, reg);
-  }
-}
-
-void
-orc_x86_emit_add_reg_memoffset (OrcCompiler *compiler, int size, int reg1,
-    int offset, int reg)
-{
-  orc_x86_emit_cpuinsn_reg_memoffset (compiler, ORC_X86_add_r_rm,
-      reg1, offset, reg);
-}
-
-void
 orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, orc_bool record)
 {
   if (!record) {
@@ -419,50 +346,6 @@ orc_x86_emit_add_reg_reg_shift (OrcCompiler *compiler, int size, int reg1,
 }
 
 void
-orc_x86_emit_add_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2)
-{
-  orc_x86_emit_cpuinsn (compiler, ORC_X86_add_r_rm, 0, reg1, reg2);
-}
-
-void
-orc_x86_emit_sub_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2)
-{
-  orc_x86_emit_cpuinsn (compiler, ORC_X86_sub_r_rm, 0, reg1, reg2);
-}
-
-void
-orc_x86_emit_imul_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg)
-{
-  orc_x86_emit_cpuinsn_load_memoffset (compiler, ORC_X86_imul_rm_r, size, 0,
-      offset, reg, destreg);
-}
-
-void
-orc_x86_emit_add_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg)
-{
-  orc_x86_emit_cpuinsn_memoffset_reg (compiler, ORC_X86_add_rm_r, size,
-      offset, reg, destreg);
-}
-
-void
-orc_x86_emit_sub_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg)
-{
-  orc_x86_emit_cpuinsn_memoffset_reg (compiler, ORC_X86_sub_rm_r, size,
-      offset, reg, destreg);
-}
-
-void
-orc_x86_emit_cmp_reg_memoffset (OrcCompiler *compiler, int size, int reg1,
-    int offset, int reg)
-{
-  orc_x86_emit_cpuinsn_reg_memoffset (compiler, ORC_X86_cmp_r_rm, reg1,
-      offset, reg);
-}
-
-void
 orc_x86_emit_cmp_imm_reg (OrcCompiler *compiler, int size, int value, int reg)
 {
   if (value >= -128 && value < 128) {
@@ -486,14 +369,6 @@ orc_x86_emit_cmp_imm_memoffset (OrcCompiler *compiler, int size, int value,
 }
 
 void
-orc_x86_emit_test_imm_memoffset (OrcCompiler *compiler, int size, int value,
-    int offset, int reg)
-{
-  orc_x86_emit_cpuinsn_imm_memoffset (compiler, ORC_X86_test_imm, size,
-      value, offset, reg);
-}
-
-void
 orc_x86_emit_dec_memoffset (OrcCompiler *compiler, int size,
     int offset, int reg)
 {
@@ -506,25 +381,6 @@ orc_x86_emit_dec_memoffset (OrcCompiler *compiler, int size,
   }
 }
 
-void orc_x86_emit_ret (OrcCompiler *compiler)
-{
-  if (compiler->is_64bit) {
-    orc_x86_emit_cpuinsn_none (compiler, ORC_X86_retq);
-  } else {
-    orc_x86_emit_cpuinsn_none (compiler, ORC_X86_ret);
-  }
-}
-
-void orc_x86_emit_emms (OrcCompiler *compiler)
-{
-  orc_x86_emit_cpuinsn_none (compiler, ORC_X86_emms);
-}
-
-void orc_x86_emit_rdtsc (OrcCompiler *compiler)
-{
-  orc_x86_emit_cpuinsn_none (compiler, ORC_X86_rdtsc);
-}
-
 void orc_x86_emit_rep_movs (OrcCompiler *compiler, int size)
 {
   switch (size) {
@@ -555,36 +411,6 @@ x86_add_label (OrcCompiler *compiler, unsigned char *ptr, int label)
   compiler->labels[label] = ptr;
 }
 
-void orc_x86_emit_jmp (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_branch (compiler, ORC_X86_jmp, label);
-}
-
-void orc_x86_emit_jg (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_branch (compiler, ORC_X86_jg, label);
-}
-
-void orc_x86_emit_jle (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_branch (compiler, ORC_X86_jle, label);
-}
-
-void orc_x86_emit_je (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_branch (compiler, ORC_X86_jz, label);
-}
-
-void orc_x86_emit_jne (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_branch (compiler, ORC_X86_jnz, label);
-}
-
-void orc_x86_emit_label (OrcCompiler *compiler, int label)
-{
-  orc_x86_emit_cpuinsn_label (compiler, ORC_X86_LABEL, label);
-}
-
 void
 orc_x86_do_fixups (OrcCompiler *compiler)
 {
index 079aeaa..2eb5ecd 100644 (file)
@@ -3,6 +3,7 @@
 #define _ORC_X86_H_
 
 #include <orc/orcprogram.h>
+#include <orc/orcx86insn.h>
 
 enum {
   X86_EAX = ORC_GP_REG_BASE,
@@ -50,45 +51,79 @@ const char * orc_x86_get_regname_size(int i, int size);
 
 void orc_x86_emit_push (OrcCompiler *compiler, int size, int reg);
 void orc_x86_emit_pop (OrcCompiler *compiler, int size, int reg);
+
+#define orc_x86_emit_mov_imm_reg(p,size,value,reg) \
+  orc_x86_emit_cpuinsn_imm_reg (p, ORC_X86_mov_imm32_r, size, value, reg)
+#define orc_x86_emit_mov_reg_reg(p,size,src,dest) \
+  orc_x86_emit_cpuinsn (p, ORC_X86_mov_r_rm, size, src, dest)
+#define orc_x86_emit_test_reg_reg(p,size,src,dest) \
+  orc_x86_emit_cpuinsn (p, ORC_X86_test, size, src, dest)
+#define orc_x86_emit_sar_imm_reg(p,size,value,reg) do { \
+    if (value == 1) { \
+      orc_x86_emit_cpuinsn_imm_reg (p, ORC_X86_sar, size, value, reg); \
+    } else if (value > 1) { \
+      orc_x86_emit_cpuinsn_imm_reg (p, ORC_X86_sar_imm, size, value, reg); \
+    } \
+  } while (0)
+#define orc_x86_emit_and_imm_memoffset(p,size,value,offset,reg) \
+  orc_x86_emit_cpuinsn_imm_memoffset (p, (value >= -128 && value < 128) ? \
+      ORC_X86_and_imm8_rm : ORC_X86_and_imm32_rm, size, value, offset, reg)
+#define orc_x86_emit_and_imm_reg(p,size,value,reg) \
+  orc_x86_emit_cpuinsn_imm_reg (p, (value >= -128 && value < 128) ? \
+      ORC_X86_and_imm8_rm : ORC_X86_and_imm32_rm, size, value, reg)
+#define orc_x86_emit_add_imm_memoffset(p,size,value,offset,reg) \
+  orc_x86_emit_cpuinsn_imm_memoffset (p, (value >= -128 && value < 128) ? \
+      ORC_X86_add_imm8_rm : ORC_X86_add_imm32_rm, size, value, offset, reg)
+#define orc_x86_emit_add_reg_memoffset(p,size,src,offset,dest) \
+  orc_x86_emit_cpuinsn_reg_memoffset(p, ORC_X86_add_r_rm, src, offset, dest)
+#define orc_x86_emit_add_reg_reg(p,size,src,dest) \
+  orc_x86_emit_cpuinsn(p, ORC_X86_add_r_rm, size, src, dest)
+#define orc_x86_emit_add_memoffset_reg(p,size,offset,src,dest) \
+  orc_x86_emit_cpuinsn_memoffset_reg(p, ORC_X86_add_rm_r, size, offset, src, dest)
+#define orc_x86_emit_sub_reg_reg(p,size,src,dest) \
+  orc_x86_emit_cpuinsn(p, ORC_X86_sub_r_rm, size, src, dest)
+#define orc_x86_emit_sub_memoffset_reg(p,size,offset,src,dest) \
+  orc_x86_emit_cpuinsn_memoffset_reg(p, ORC_X86_sub_rm_r, size, offset, src, dest)
+#define orc_x86_emit_imul_memoffset_reg(p,size,offset,src,dest) \
+  orc_x86_emit_cpuinsn_memoffset_reg(p, ORC_X86_imul_rm_r, size, offset, src, dest)
+
+#define orc_x86_emit_cmp_reg_memoffset(p,size,src,offset,dest) \
+  orc_x86_emit_cpuinsn_reg_memoffset(p, ORC_X86_cmp_r_rm, src, offset, dest)
+
+#define orc_x86_emit_jmp(p,label) \
+  orc_x86_emit_cpuinsn_branch (p, ORC_X86_jmp, label)
+#define orc_x86_emit_jg(p,label) \
+  orc_x86_emit_cpuinsn_branch (p, ORC_X86_jg, label)
+#define orc_x86_emit_jle(p,label) \
+  orc_x86_emit_cpuinsn_branch (p, ORC_X86_jle, label)
+#define orc_x86_emit_je(p,label) \
+  orc_x86_emit_cpuinsn_branch (p, ORC_X86_jz, label)
+#define orc_x86_emit_jne(p,label) \
+  orc_x86_emit_cpuinsn_branch (p, ORC_X86_jnz, label)
+
+#define orc_x86_emit_label(p,label) \
+  orc_x86_emit_cpuinsn_label (p, ORC_X86_LABEL, label)
+
+#define orc_x86_emit_emms(p) \
+  orc_x86_emit_cpuinsn_none (p, ORC_X86_emms)
+#define orc_x86_emit_rdtsc(p) \
+  orc_x86_emit_cpuinsn_none (p, ORC_X86_rdtsc)
+#define orc_x86_emit_ret(p) \
+  orc_x86_emit_cpuinsn_none (p, ((p)->is_64bit) ? ORC_X86_retq : ORC_X86_ret)
+
+#define orc_x86_emit_test_imm_memoffset(p,size,value,offset,dest) \
+  orc_x86_emit_cpuinsn_imm_memoffset (p, ORC_X86_test_imm, size, value, \
+      offset, dest)
+
 void orc_x86_emit_mov_memoffset_reg (OrcCompiler *compiler, int size, int offset, int reg1, int reg2);
 void orc_x86_emit_mov_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg2);
-void orc_x86_emit_mov_imm_reg (OrcCompiler *compiler, int size, int value, int reg1);
-void orc_x86_emit_mov_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2);
-void orc_x86_emit_test_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2);
-void orc_x86_emit_sar_imm_reg (OrcCompiler *compiler, int size, int value, int reg);
 void orc_x86_emit_dec_memoffset (OrcCompiler *compiler, int size, int offset, int reg);
-void orc_x86_emit_add_imm_memoffset (OrcCompiler *compiler, int size, int value, int offset, int reg);
-void orc_x86_emit_add_reg_memoffset (OrcCompiler *compiler, int size, int reg1, int offset, int reg);
-void orc_x86_emit_and_imm_memoffset (OrcCompiler *compiler, int size, int value, int offset, int reg);
 void orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, orc_bool record);
-void orc_x86_emit_and_imm_reg (OrcCompiler *compiler, int size, int value, int reg);
-void orc_x86_emit_or_imm_reg (OrcCompiler *compiler, int size, int value, int reg);
 void orc_x86_emit_add_reg_reg_shift (OrcCompiler *compiler, int size, int reg1, int reg2, int shift);
-void orc_x86_emit_add_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2);
-void orc_x86_emit_sub_reg_reg (OrcCompiler *compiler, int size, int reg1, int reg2);
-void orc_x86_emit_imul_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg);
-void orc_x86_emit_add_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg);
-void orc_x86_emit_sub_memoffset_reg (OrcCompiler *compiler, int size,
-    int offset, int reg, int destreg);
-void orc_x86_emit_cmp_reg_memoffset (OrcCompiler *compiler, int size, int reg1,
-    int offset, int reg);
 void orc_x86_emit_cmp_imm_memoffset (OrcCompiler *compiler, int size, int value,
     int offset, int reg);
 void orc_x86_emit_cmp_imm_reg (OrcCompiler *compiler, int size, int value, int reg);
-void orc_x86_emit_test_imm_memoffset (OrcCompiler *compiler, int size, int value,
-    int offset, int reg);
-void orc_x86_emit_emms (OrcCompiler *compiler);
-void orc_x86_emit_rdtsc (OrcCompiler *compiler);
 void orc_x86_emit_rep_movs (OrcCompiler *compiler, int size);
-void orc_x86_emit_ret (OrcCompiler *compiler);
-void orc_x86_emit_jle (OrcCompiler *compiler, int label);
-void orc_x86_emit_jg (OrcCompiler *compiler, int label);
-void orc_x86_emit_je (OrcCompiler *compiler, int label);
-void orc_x86_emit_jne (OrcCompiler *compiler, int label);
-void orc_x86_emit_jmp (OrcCompiler *compiler, int label);
-void orc_x86_emit_label (OrcCompiler *compiler, int label);
 void orc_x86_emit_align (OrcCompiler *compiler);
 void orc_x86_emit_prologue (OrcCompiler *compiler);
 void orc_x86_emit_epilogue (OrcCompiler *compiler);
@@ -109,6 +144,29 @@ void orc_x86_do_fixups (OrcCompiler *compiler);
 int orc_x86_assemble_copy_check (OrcCompiler *compiler);
 void orc_x86_assemble_copy (OrcCompiler *compiler);
 
+void orc_x86_emit_cpuinsn (OrcCompiler *p, int opcode, int src, int dest,
+    int imm);
+void orc_x86_emit_cpuinsn_load_memoffset (OrcCompiler *p, int size, int index,
+    int offset, int src, int dest, int imm);
+void orc_x86_emit_cpuinsn_store_memoffset (OrcCompiler *p, int size, int index,
+    int src, int offset, int dest, int imm);
+void orc_x86_emit_cpuinsn_load_memindex (OrcCompiler *p, int index, int size,
+    int imm, int offset, int src, int src_index, int shift, int dest);
+void orc_x86_emit_cpuinsn_load_register (OrcCompiler *p, int index, int imm,
+    int src, int dest);
+void orc_x86_emit_cpuinsn_imm_reg (OrcCompiler *p, int index, int size, int imm,
+    int dest);
+void orc_x86_emit_cpuinsn_imm_memoffset (OrcCompiler *p, int index, int size,
+    int imm, int offset, int dest);
+void orc_x86_emit_cpuinsn_reg_memoffset (OrcCompiler *p, int index, int src,
+    int offset, int dest);
+void orc_x86_emit_cpuinsn_memoffset_reg (OrcCompiler *p, int index, int size,
+    int offset, int src, int dest);
+void orc_x86_emit_cpuinsn_branch (OrcCompiler *p, int index, int label);
+void orc_x86_emit_cpuinsn_label (OrcCompiler *p, int index, int label);
+void orc_x86_emit_cpuinsn_none (OrcCompiler *p, int index);
+
+
 
 #endif