sse: Fix some compilation issues on x86-64
authorDavid Schleef <ds@schleef.org>
Sun, 22 Aug 2010 00:10:32 +0000 (17:10 -0700)
committerDavid Schleef <ds@schleef.org>
Sun, 22 Aug 2010 00:10:32 +0000 (17:10 -0700)
orc/orcmmx.h
orc/orcsse.c
orc/orcsse.h
orc/orcx86.c

index f77a8c2..23eca1c 100644 (file)
@@ -178,7 +178,7 @@ void mmx_load_constant (OrcCompiler *compiler, int reg, int size, int value);
 #define orc_mmx_emit_pmuldq(p,a,b)     orc_mmx_emit_660f (p, "pmuldq", 0x3828, a, b)
 #define orc_mmx_emit_pcmpeqq(p,a,b)    orc_mmx_emit_660f (p, "pcmpeqq", 0x3829, a, b)
 
-#define orc_mmx_emit_packusdw(p,a,b)   orc_mmx_emit_660f (p, "packuswd", 0x382b, a, b)
+#define orc_mmx_emit_packusdw(p,a,b)   orc_mmx_emit_660f (p, "packusdw", 0x382b, a, b)
 
 #define orc_mmx_emit_pmovzxbw(p,a,b)   orc_mmx_emit_660f (p, "pmovzxbw", 0x3830, a, b)
 #define orc_mmx_emit_pmovzxbd(p,a,b)   orc_mmx_emit_660f (p, "pmovzxbd", 0x3831, a, b)
index e3c501a..725e04b 100644 (file)
@@ -157,7 +157,7 @@ orc_sse_emit_pinsrw_memoffset (OrcCompiler *p, int imm, int offset,
     int src, int dest)
 {
   ORC_ASM_CODE(p,"  pinsrw $%d, %d(%%%s), %%%s\n", imm, offset,
-      orc_x86_get_regname(src),
+      orc_x86_get_regname_ptr (p, src),
       orc_x86_get_regname_sse(dest));
   *p->codeptr++ = 0x66;
   orc_x86_emit_rex (p, 0, dest, 0, src);
@@ -174,7 +174,7 @@ orc_sse_emit_pextrw_memoffset (OrcCompiler *p, int imm, int src,
 {
   ORC_ASM_CODE(p,"  pextrw $%d, %%%s, %d(%%%s)\n", imm,
       orc_x86_get_regname_sse(src),
-      offset, orc_x86_get_regname(dest));
+      offset, orc_x86_get_regname_ptr (p, dest));
   *p->codeptr++ = 0x66;
   orc_x86_emit_rex (p, 0, src, 0, dest);
   *p->codeptr++ = 0x0f;
index aaf4451..32a4593 100644 (file)
@@ -188,7 +188,7 @@ unsigned int orc_sse_get_cpu_flags (void);
 #define orc_sse_emit_pmuldq(p,a,b)     orc_sse_emit_660f (p, "pmuldq", 0x3828, a, b)
 #define orc_sse_emit_pcmpeqq(p,a,b)    orc_sse_emit_660f (p, "pcmpeqq", 0x3829, a, b)
 
-#define orc_sse_emit_packusdw(p,a,b)   orc_sse_emit_660f (p, "packuswd", 0x382b, a, b)
+#define orc_sse_emit_packusdw(p,a,b)   orc_sse_emit_660f (p, "packusdw", 0x382b, a, b)
 
 #define orc_sse_emit_pmovzxbw(p,a,b)   orc_sse_emit_660f (p, "pmovzxbw", 0x3830, a, b)
 #define orc_sse_emit_pmovzxbd(p,a,b)   orc_sse_emit_660f (p, "pmovzxbd", 0x3831, a, b)
index 60b1123..ca64bdc 100644 (file)
@@ -424,7 +424,7 @@ orc_x86_emit_add_imm_memoffset (OrcCompiler *compiler, int size, int value,
     ORC_ASM_CODE(compiler,"  addl $%d, %d(%%%s)\n", value, offset,
         orc_x86_get_regname_ptr(compiler, reg));
   } else {
-    ORC_ASM_CODE(compiler,"  add $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(compiler,"  addq $%d, %d(%%%s)\n", value, offset,
         orc_x86_get_regname_ptr(compiler, reg));
   }
 
@@ -438,7 +438,7 @@ orc_x86_emit_add_imm_memoffset (OrcCompiler *compiler, int size, int value,
     orc_x86_emit_modrm_memoffset (compiler, 0, offset, reg);
     *compiler->codeptr++ = (value & 0xff);
     *compiler->codeptr++ = ((value>>8) & 0xff);
-    if (size == 4) {
+    if (size == 4 || size == 8) {
       *compiler->codeptr++ = ((value>>16) & 0xff);
       *compiler->codeptr++ = ((value>>24) & 0xff);
     }
@@ -497,7 +497,7 @@ orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, o
   } else if (size == 4) {
     ORC_ASM_CODE(compiler,"  addl $%d, %%%s\n", value, orc_x86_get_regname(reg));
   } else {
-    ORC_ASM_CODE(compiler,"  add $%d, %%%s\n", value, orc_x86_get_regname_64(reg));
+    ORC_ASM_CODE(compiler,"  addq $%d, %%%s\n", value, orc_x86_get_regname_64(reg));
   }
 
   orc_x86_emit_rex(compiler, size, 0, 0, reg);
@@ -510,7 +510,7 @@ orc_x86_emit_add_imm_reg (OrcCompiler *compiler, int size, int value, int reg, o
     orc_x86_emit_modrm_reg (compiler, reg, 0);
     *compiler->codeptr++ = (value & 0xff);
     *compiler->codeptr++ = ((value>>8) & 0xff);
-    if (size == 4) {
+    if (size == 4 || size == 8) {
       *compiler->codeptr++ = ((value>>16) & 0xff);
       *compiler->codeptr++ = ((value>>24) & 0xff);
     }