Convert printf's to errors and asm code
authorDavid Schleef <ds@schleef.org>
Fri, 13 Mar 2009 04:40:47 +0000 (21:40 -0700)
committerDavid Schleef <ds@schleef.org>
Fri, 13 Mar 2009 04:40:47 +0000 (21:40 -0700)
13 files changed:
orc/arm.c
orc/orcprogram-arm.c
orc/orcprogram-c.c
orc/orcprogram-linux.c
orc/orcprogram-mmx.c
orc/orcprogram-powerpc.c
orc/orcprogram-sse.c
orc/orcprogram.c
orc/orcprogram.h
orc/orcrules-arm.c
orc/orcrules-mmx.c
orc/orcrules-sse.c
orc/x86.c

index 1428449..1adb1ea 100644 (file)
--- a/orc/arm.c
+++ b/orc/arm.c
@@ -49,7 +49,7 @@ arm_emit (OrcProgram *program, uint32_t insn)
 void
 arm_emit_bx_lr (OrcProgram *program)
 {
-  printf("  bx lr\n");
+  ORC_ASM_CODE(program,"  bx lr\n");
   arm_emit (program, 0xe12fff1e);
 }
 
@@ -59,17 +59,17 @@ arm_emit_push (OrcProgram *program, int regs)
   int i;
   int x = 0;
 
-  printf("  push {");
+  ORC_ASM_CODE(program,"  push {");
   for(i=0;i<16;i++){
     if (regs & (1<<i)) {
       x |= (1<<i);
-      printf("r%d", i);
+      ORC_ASM_CODE(program,"r%d", i);
       if (x != regs) {
-        printf(", ");
+        ORC_ASM_CODE(program,", ");
       }
     }
   }
-  printf("}\n");
+  ORC_ASM_CODE(program,"}\n");
 
   arm_emit (program, 0xe92d0000 | regs);
 }
@@ -80,17 +80,17 @@ arm_emit_pop (OrcProgram *program, int regs)
   int i;
   int x = 0;
 
-  printf("  pop {");
+  ORC_ASM_CODE(program,"  pop {");
   for(i=0;i<16;i++){
     if (regs & (1<<i)) {
       x |= (1<<i);
-      printf("r%d", i);
+      ORC_ASM_CODE(program,"r%d", i);
       if (x != regs) {
-        printf(", ");
+        ORC_ASM_CODE(program,", ");
       }
     }
   }
-  printf("}\n");
+  ORC_ASM_CODE(program,"}\n");
 
   arm_emit (program, 0xe8bd0000 | regs);
 }
@@ -104,7 +104,7 @@ arm_emit_mov (OrcProgram *program, int dest, int src)
   code |= (src&0xf) << 0;
   code |= (dest&0xf) << 12;
 
-  printf("  mov %s, %s\n", arm_reg_name (dest), arm_reg_name (src));
+  ORC_ASM_CODE(program,"  mov %s, %s\n", arm_reg_name (dest), arm_reg_name (src));
 
   arm_emit (program, code);
 }
@@ -112,7 +112,7 @@ arm_emit_mov (OrcProgram *program, int dest, int src)
 void
 arm_emit_label (OrcProgram *program, int label)
 {
-  printf(".L%d:\n", label);
+  ORC_ASM_CODE(program,".L%d:\n", label);
 
   program->labels[label] = program->codeptr;
 }
@@ -156,7 +156,7 @@ arm_emit_branch (OrcProgram *program, int cond, int label)
   arm_add_fixup (program, label, 0);
   arm_emit (program, code);
 
-  printf("  b%s .L%d\n", cond_names[cond], label);
+  ORC_ASM_CODE(program,"  b%s .L%d\n", cond_names[cond], label);
 }
 
 void
@@ -176,7 +176,7 @@ arm_emit_loadimm (OrcProgram *program, int dest, int imm)
   code |= (((16-shift2)&0xf) << 8);
   code |= (imm&0xff);
 
-  printf("  mov %s, #0x%08x\n", arm_reg_name (dest), imm << (shift2*2));
+  ORC_ASM_CODE(program,"  mov %s, #0x%08x\n", arm_reg_name (dest), imm << (shift2*2));
   arm_emit (program, code);
 }
 
@@ -190,7 +190,7 @@ arm_emit_add (OrcProgram *program, int dest, int src1, int src2)
   code |= (dest&0xf) << 12;
   code |= (src2&0xf) << 0;
 
-  printf("  add %s, %s, %s\n",
+  ORC_ASM_CODE(program,"  add %s, %s, %s\n",
       arm_reg_name (dest),
       arm_reg_name (src1),
       arm_reg_name (src2));
@@ -207,7 +207,7 @@ arm_emit_sub (OrcProgram *program, int dest, int src1, int src2)
   code |= (dest&0xf) << 12;
   code |= (src2&0xf) << 0;
 
-  printf("  sub %s, %s, %s\n",
+  ORC_ASM_CODE(program,"  sub %s, %s, %s\n",
       arm_reg_name (dest),
       arm_reg_name (src1),
       arm_reg_name (src2));
@@ -224,7 +224,7 @@ arm_emit_sub_imm (OrcProgram *program, int dest, int src1, int value)
   code |= (dest&0xf) << 12;
   code |= (value) << 0;
 
-  printf("  subs %s, %s, #%d\n",
+  ORC_ASM_CODE(program,"  subs %s, %s, #%d\n",
       arm_reg_name (dest),
       arm_reg_name (src1),
       value);
@@ -240,7 +240,7 @@ arm_emit_cmp_imm (OrcProgram *program, int src1, int value)
   code |= (src1&0xf) << 16;
   code |= (value) << 0;
 
-  printf("  cmp %s, #%d\n",
+  ORC_ASM_CODE(program,"  cmp %s, #%d\n",
       arm_reg_name (src1),
       value);
   arm_emit (program, code);
@@ -256,7 +256,7 @@ arm_emit_load_reg (OrcProgram *program, int dest, int src1, int offset)
   code |= (dest&0xf) << 12;
   code |= offset&0xfff;
 
-  printf("  ldr %s, [%s, #%d]\n",
+  ORC_ASM_CODE(program,"  ldr %s, [%s, #%d]\n",
       arm_reg_name (dest),
       arm_reg_name (src1), offset);
   arm_emit (program, code);
@@ -290,13 +290,13 @@ arm_emit_dp_reg (OrcProgram *program, int cond, int opcode, int dest,
   code |= (src2&0xf) << 0;
 
   if (shift_expn[opcode]) {
-    printf("  %s%s %s, %s\n",
+    ORC_ASM_CODE(program,"  %s%s %s, %s\n",
         dp_insn_names[opcode],
         update ? "s" : "",
         arm_reg_name (src1),
         arm_reg_name (src2));
   } else {
-    printf("  %s%s %s, %s, %s\n",
+    ORC_ASM_CODE(program,"  %s%s %s, %s, %s\n",
         dp_insn_names[opcode],
         update ? "s" : "",
         arm_reg_name (dest),
index 97f6aaa..8bde93c 100644 (file)
@@ -185,7 +185,7 @@ arm_emit_load_src (OrcProgram *program, OrcVariable *var)
       //arm_emit_mov_memoffset_arm (program, 16, 0, ptr_reg, var->alloc);
       break;
     default:
-      printf("ERROR bad size %d\n", var->size << program->loop_shift);
+      ORC_PROGRAM_ERROR(program, "bad size %d\n", var->size << program->loop_shift);
   }
 }
 
@@ -223,7 +223,7 @@ arm_emit_store_dest (OrcProgram *program, OrcVariable *var)
       //    var->is_aligned, var->is_uncached);
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size %d\n", var->size << program->loop_shift);
   }
 }
 
index 292ad79..6f93747 100644 (file)
@@ -24,28 +24,28 @@ orc_program_assemble_c (OrcProgram *program)
   OrcOpcode *opcode;
   OrcRule *rule;
 
-  orc_program_append_code(program,"\n");
-  orc_program_append_code(program,"void\n");
-  orc_program_append_code(program,"test (OrcExecutor *ex)\n");
-  orc_program_append_code(program,"{\n");
-  orc_program_append_code(program,"  int i;\n");
+  ORC_ASM_CODE(program,"\n");
+  ORC_ASM_CODE(program,"void\n");
+  ORC_ASM_CODE(program,"test (OrcExecutor *ex)\n");
+  ORC_ASM_CODE(program,"{\n");
+  ORC_ASM_CODE(program,"  int i;\n");
 
   for(i=0;i<program->n_vars;i++){
     OrcVariable *var = program->vars + i;
     switch (var->vartype) {
       case ORC_VAR_TYPE_CONST:
-        orc_program_append_code(program,"  int16_t var%d = %d;\n", i,
+        ORC_ASM_CODE(program,"  int16_t var%d = %d;\n", i,
             (int16_t)var->value);
         break;
       case ORC_VAR_TYPE_TEMP:
-        orc_program_append_code(program,"  int16_t var%d;\n", i);
+        ORC_ASM_CODE(program,"  int16_t var%d;\n", i);
         break;
       case ORC_VAR_TYPE_SRC:
       case ORC_VAR_TYPE_DEST:
-        orc_program_append_code(program,"  int16_t *var%d = ex->var%d;\n", i, i);
+        ORC_ASM_CODE(program,"  int16_t *var%d = ex->var%d;\n", i, i);
         break;
       case ORC_VAR_TYPE_PARAM:
-        orc_program_append_code(program,"  int16_t var%d = ex->var%d;\n", i, i);
+        ORC_ASM_CODE(program,"  int16_t var%d = ex->var%d;\n", i, i);
         break;
       default:
         break;
@@ -53,26 +53,26 @@ orc_program_assemble_c (OrcProgram *program)
 
   }
 
-  orc_program_append_code(program,"\n");
-  orc_program_append_code(program,"  for (i = 0; i < n; i++) {\n");
+  ORC_ASM_CODE(program,"\n");
+  ORC_ASM_CODE(program,"  for (i = 0; i < n; i++) {\n");
 
   for(j=0;j<program->n_insns;j++){
     insn = program->insns + j;
     opcode = insn->opcode;
 
-    orc_program_append_code(program,"    /* %d: %s */\n", j, insn->opcode->name);
+    ORC_ASM_CODE(program,"    /* %d: %s */\n", j, insn->opcode->name);
 
     rule = insn->rule;
     if (rule) {
       rule->emit (program, rule->emit_user, insn);
     } else {
-      orc_program_append_code(program,"#error No rule for: %s\n", opcode->name);
+      ORC_ASM_CODE(program,"#error No rule for: %s\n", opcode->name);
     }
   }
 
-  orc_program_append_code(program,"  }\n");
-  orc_program_append_code(program,"}\n");
-  orc_program_append_code(program,"\n");
+  ORC_ASM_CODE(program,"  }\n");
+  ORC_ASM_CODE(program,"}\n");
+  ORC_ASM_CODE(program,"\n");
 }
 
 
@@ -106,7 +106,7 @@ c_rule_copyw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (dest, p, insn->args[0]);
   c_get_name (src1, p, insn->args[1]);
 
-  orc_program_append_code(p,"    %s = %s;\n", dest, src1);
+  ORC_ASM_CODE(p,"    %s = %s;\n", dest, src1);
 }
 
 static void
@@ -118,7 +118,7 @@ c_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (src1, p, insn->args[1]);
   c_get_name (src2, p, insn->args[2]);
 
-  orc_program_append_code(p,"    %s = %s + %s;\n", dest, src1, src2);
+  ORC_ASM_CODE(p,"    %s = %s + %s;\n", dest, src1, src2);
 }
 
 static void
@@ -130,7 +130,7 @@ c_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (src1, p, insn->args[1]);
   c_get_name (src2, p, insn->args[2]);
 
-  orc_program_append_code(p,"    %s = %s - %s;\n", dest, src1, src2);
+  ORC_ASM_CODE(p,"    %s = %s - %s;\n", dest, src1, src2);
 }
 
 static void
@@ -142,7 +142,7 @@ c_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (src1, p, insn->args[1]);
   c_get_name (src2, p, insn->args[2]);
 
-  orc_program_append_code(p,"    %s = %s * %s;\n", dest, src1, src2);
+  ORC_ASM_CODE(p,"    %s = %s * %s;\n", dest, src1, src2);
 }
 
 static void
@@ -154,7 +154,7 @@ c_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (src1, p, insn->args[1]);
   c_get_name (src2, p, insn->args[2]);
 
-  orc_program_append_code(p,"    %s = %s << %s;\n", dest, src1, src2);
+  ORC_ASM_CODE(p,"    %s = %s << %s;\n", dest, src1, src2);
 }
 
 static void
@@ -166,7 +166,7 @@ c_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
   c_get_name (src1, p, insn->args[1]);
   c_get_name (src2, p, insn->args[2]);
 
-  orc_program_append_code(p,"    %s = %s >> %s;\n", dest, src1, src2);
+  ORC_ASM_CODE(p,"    %s = %s >> %s;\n", dest, src1, src2);
 }
 
 
index bb23483..2a4fc14 100644 (file)
@@ -10,6 +10,7 @@
 #include <sys/mman.h>
 
 #include <orc/orcprogram.h>
+#include <orc/orcdebug.h>
 
 #define SIZE 65536
 
@@ -24,7 +25,7 @@ orc_program_allocate_codemem (OrcProgram *program)
   fd = mkstemp (filename);
   if (fd == -1) {
     /* FIXME oh crap */
-    printf("failed to create temp file\n");
+    ORC_ERROR ("failed to create temp file");
     program->error = TRUE;
     return;
   }
@@ -35,14 +36,14 @@ orc_program_allocate_codemem (OrcProgram *program)
   program->code = mmap (NULL, SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
   if (program->code == MAP_FAILED) {
     /* FIXME oh crap */
-    printf("failed to create write map\n");
+    ORC_ERROR ("failed to create write map");
     program->error = TRUE;
     return;
   }
   program->code_exec = mmap (NULL, SIZE, PROT_READ|PROT_EXEC, MAP_SHARED, fd, 0);
   if (program->code_exec == MAP_FAILED) {
     /* FIXME oh crap */
-    printf("failed to create exec map\n");
+    ORC_ERROR ("failed to create exec map");
     program->error = TRUE;
     return;
   }
index aa61c82..c5057d0 100644 (file)
@@ -8,7 +8,8 @@
 #include <unistd.h>
 #include <sys/types.h>
 
-#include <orc/orcprogram.h>
+#include <orc/orc.h>
+#include <orc/orcdebug.h>
 #include <orc/x86.h>
 
 #define SIZE 65536
@@ -92,8 +93,7 @@ mmx_load_constants (OrcProgram *program)
               (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i]), x86_exec_ptr,
               program->vars[i].ptr_register);
         } else {
-          /* FIXME */
-          printf("ERROR");
+          ORC_PROGRAM_ERROR(program, "unimplemented");
         }
         break;
       default:
@@ -125,7 +125,7 @@ mmx_emit_load_src (OrcProgram *program, OrcVariable *var)
       x86_emit_mov_memoffset_mmx (program, 8, 0, ptr_reg, var->alloc);
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size");
   }
 }
 
@@ -144,7 +144,7 @@ mmx_emit_store_dest (OrcProgram *program, OrcVariable *var)
     case 0:
       /* FIXME we might be using ecx twice here */
       if (ptr_reg == X86_ECX) {
-        printf("ERROR\n");
+        ORC_PROGRAM_ERROR(program, "unimplemented");
       }
       x86_emit_mov_mmx_reg (program, var->alloc, X86_ECX);
       x86_emit_mov_reg_memoffset (program, 2, X86_ECX, 0, ptr_reg);
@@ -156,7 +156,7 @@ mmx_emit_store_dest (OrcProgram *program, OrcVariable *var)
       x86_emit_mov_mmx_memoffset (program, 8, var->alloc, 0, ptr_reg);
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "unimplemented");
   }
 }
 
index 2e6ef42..bdf603d 100644 (file)
@@ -137,8 +137,8 @@ powerpc_emit_prologue (OrcProgram *program)
 {
   int i;
 
-  printf (".global test\n");
-  printf ("test:\n");
+  ORC_ASM_CODE (program, ".global test\n");
+  ORC_ASM_CODE (program, "test:\n");
 
   powerpc_emit_stwu (program, POWERPC_R1, POWERPC_R1, -16);
 
@@ -154,7 +154,7 @@ powerpc_emit_addi (OrcProgram *program, int regd, int rega, int imm)
 {
   unsigned int insn;
 
-  printf("  addi %s, %s, %d\n",
+  ORC_ASM_CODE(program,"  addi %s, %s, %d\n",
       powerpc_get_regname(regd),
       powerpc_get_regname(rega), imm);
   insn = (14<<26) | (powerpc_regnum (regd)<<21) | (powerpc_regnum (rega)<<16);
@@ -168,7 +168,7 @@ powerpc_emit_lwz (OrcProgram *program, int regd, int rega, int imm)
 {
   unsigned int insn;
 
-  printf("  lwz %s, %d(%s)\n",
+  ORC_ASM_CODE(program,"  lwz %s, %d(%s)\n",
       powerpc_get_regname(regd),
       imm, powerpc_get_regname(rega));
   insn = (32<<26) | (powerpc_regnum (regd)<<21) | (powerpc_regnum (rega)<<16);
@@ -182,7 +182,7 @@ powerpc_emit_stwu (OrcProgram *program, int regs, int rega, int offset)
 {
   unsigned int insn;
 
-  printf("  stwu %s, %d(%s)\n",
+  ORC_ASM_CODE(program,"  stwu %s, %d(%s)\n",
       powerpc_get_regname(regs),
       offset, powerpc_get_regname(rega));
   insn = (37<<26) | (powerpc_regnum (regs)<<21) | (powerpc_regnum (rega)<<16);
@@ -197,7 +197,7 @@ powerpc_emit_srawi (OrcProgram *program, int regd, int rega, int shift,
 {
   unsigned int insn;
 
-  printf("  srawi%s %s, %s, %d\n", (record)?".":"",
+  ORC_ASM_CODE(program,"  srawi%s %s, %s, %d\n", (record)?".":"",
       powerpc_get_regname(regd),
       powerpc_get_regname(rega), shift);
 
@@ -268,7 +268,7 @@ powerpc_emit_epilogue (OrcProgram *program)
   }
 
   powerpc_emit_addi (program, POWERPC_R1, POWERPC_R1, 16);
-  printf("  blr\n");
+  ORC_ASM_CODE(program,"  blr\n");
   powerpc_emit(program, 0x4e800020);
 }
 
@@ -351,7 +351,7 @@ powerpc_load_constants (OrcProgram *program)
   for(i=0;i<program->n_vars;i++){
     switch (program->vars[i].vartype) {
       case ORC_VAR_TYPE_CONST:
-        printf("  vspltish %s, %d\n",
+        ORC_ASM_CODE(program,"  vspltish %s, %d\n",
             powerpc_get_regname(program->vars[i].alloc),
             (int)program->vars[i].value);
         powerpc_emit_655510 (program, 4,
@@ -367,7 +367,7 @@ powerpc_load_constants (OrcProgram *program)
               (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i]));
         } else {
           /* FIXME */
-          printf("ERROR");
+          ORC_ASM_CODE(program,"ERROR");
         }
         break;
       default:
@@ -384,17 +384,17 @@ powerpc_emit_load_src (OrcProgram *program, OrcVariable *var)
 
   switch (program->loop_shift) {
     case 0:
-      printf("  lvehx %s, 0, %s\n", 
+      ORC_ASM_CODE(program,"  lvehx %s, 0, %s\n", 
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (ptr_reg));
       powerpc_emit_X (program, 31, powerpc_regnum(var->alloc),
           0, powerpc_regnum(ptr_reg), 39);
-      printf("  lvsl %s, 0, %s\n", 
+      ORC_ASM_CODE(program,"  lvsl %s, 0, %s\n", 
           powerpc_get_regname (POWERPC_V0),
           powerpc_get_regname (ptr_reg));
       powerpc_emit_X (program, 31, powerpc_regnum(POWERPC_V0),
           0, powerpc_regnum(ptr_reg), 6);
-      printf("  vperm %s, %s, %s, %s\n", 
+      ORC_ASM_CODE(program,"  vperm %s, %s, %s, %s\n", 
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (var->alloc),
@@ -406,7 +406,7 @@ powerpc_emit_load_src (OrcProgram *program, OrcVariable *var)
           powerpc_regnum(POWERPC_V0), 43);
       break;
     default:
-      printf("ERROR\n");
+      ORC_ASM_CODE(program,"ERROR\n");
   }
 }
 
@@ -418,12 +418,12 @@ powerpc_emit_store_dest (OrcProgram *program, OrcVariable *var)
 
   switch (program->loop_shift) {
     case 0:
-      printf("  lvsr %s, 0, %s\n", 
+      ORC_ASM_CODE(program,"  lvsr %s, 0, %s\n", 
           powerpc_get_regname (POWERPC_V0),
           powerpc_get_regname (ptr_reg));
       powerpc_emit_X (program, 31, powerpc_regnum(POWERPC_V0),
           0, powerpc_regnum(ptr_reg), 38);
-      printf("  vperm %s, %s, %s, %s\n", 
+      ORC_ASM_CODE(program,"  vperm %s, %s, %s, %s\n", 
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (var->alloc),
@@ -433,7 +433,7 @@ powerpc_emit_store_dest (OrcProgram *program, OrcVariable *var)
           powerpc_regnum(var->alloc),
           powerpc_regnum(var->alloc),
           powerpc_regnum(POWERPC_V0), 43);
-      printf("  stvehx %s, 0, %s\n", 
+      ORC_ASM_CODE(program,"  stvehx %s, 0, %s\n", 
           powerpc_get_regname (var->alloc),
           powerpc_get_regname (ptr_reg));
       powerpc_emit_X (program, 31,
@@ -441,7 +441,7 @@ powerpc_emit_store_dest (OrcProgram *program, OrcVariable *var)
           0, powerpc_regnum(ptr_reg), 167);
       break;
     default:
-      printf("ERROR\n");
+      ORC_ASM_CODE(program,"ERROR\n");
   }
 }
 
@@ -465,7 +465,7 @@ orc_program_assemble_powerpc (OrcProgram *program)
   powerpc_emit_beq (program, 1);
 
   powerpc_emit (program, 0x7c0903a6);
-  printf ("  mtctr %s\n", powerpc_get_regname(POWERPC_R0));
+  ORC_ASM_CODE (program, "  mtctr %s\n", powerpc_get_regname(POWERPC_R0));
 
   powerpc_load_constants (program);
 
@@ -475,17 +475,17 @@ orc_program_assemble_powerpc (OrcProgram *program)
     insn = program->insns + j;
     opcode = insn->opcode;
 
-    printf("# %d: %s", j, insn->opcode->name);
+    ORC_ASM_CODE(program,"# %d: %s", j, insn->opcode->name);
 
     /* set up args */
     for(k=0;k<opcode->n_src + opcode->n_dest;k++){
       args[k] = program->vars + insn->args[k];
-      printf(" %d", args[k]->alloc);
+      ORC_ASM_CODE(program," %d", args[k]->alloc);
       if (args[k]->is_chained) {
-        printf(" (chained)");
+        ORC_ASM_CODE(program," (chained)");
       }
     }
-    printf("\n");
+    ORC_ASM_CODE(program,"\n");
 
     for(k=opcode->n_dest;k<opcode->n_src + opcode->n_dest;k++){
       switch (args[k]->vartype) {
@@ -505,7 +505,7 @@ orc_program_assemble_powerpc (OrcProgram *program)
     if (rule) {
       rule->emit (program, rule->emit_user, insn);
     } else {
-      printf("No rule for: %s\n", opcode->name);
+      ORC_ASM_CODE(program,"No rule for: %s\n", opcode->name);
     }
 
     for(k=0;k<opcode->n_dest;k++){
@@ -530,7 +530,7 @@ orc_program_assemble_powerpc (OrcProgram *program)
             program->vars[k].ptr_register,
             program->vars[k].size << program->loop_shift);
       } else {
-        printf("ERROR\n");
+        ORC_ASM_CODE(program,"ERROR\n");
       }
     }
   }
@@ -553,7 +553,7 @@ powerpc_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   unsigned int x;
 
-  printf("  vadduhm %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vadduhm %s, %s, %s\n",
       powerpc_get_regname(p->vars[insn->args[0]].alloc),
       powerpc_get_regname(p->vars[insn->args[1]].alloc),
       powerpc_get_regname(p->vars[insn->args[2]].alloc));
@@ -570,7 +570,7 @@ powerpc_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 powerpc_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  vsubuhm %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vsubuhm %s, %s, %s\n",
       powerpc_get_regname(p->vars[insn->args[0]].alloc),
       powerpc_get_regname(p->vars[insn->args[1]].alloc),
       powerpc_get_regname(p->vars[insn->args[2]].alloc));
@@ -579,7 +579,7 @@ powerpc_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 powerpc_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  vxor %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vxor %s, %s, %s\n",
       powerpc_get_regname(POWERPC_V0),
       powerpc_get_regname(POWERPC_V0),
       powerpc_get_regname(POWERPC_V0));
@@ -588,7 +588,7 @@ powerpc_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
       powerpc_regnum(POWERPC_V0),
       powerpc_regnum(POWERPC_V0), 1220);
 
-  printf("  vmladduhm %s, %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vmladduhm %s, %s, %s, %s\n",
       powerpc_get_regname(p->vars[insn->args[0]].alloc),
       powerpc_get_regname(p->vars[insn->args[1]].alloc),
       powerpc_get_regname(p->vars[insn->args[2]].alloc),
@@ -604,7 +604,7 @@ powerpc_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 powerpc_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  vrlh %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vrlh %s, %s, %s\n",
       powerpc_get_regname(p->vars[insn->args[0]].alloc),
       powerpc_get_regname(p->vars[insn->args[1]].alloc),
       powerpc_get_regname(p->vars[insn->args[2]].alloc));
@@ -619,7 +619,7 @@ powerpc_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   unsigned int x;
 
-  printf("  vsrah %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  vsrah %s, %s, %s\n",
       powerpc_get_regname(p->vars[insn->args[0]].alloc),
       powerpc_get_regname(p->vars[insn->args[1]].alloc),
       powerpc_get_regname(p->vars[insn->args[2]].alloc));
@@ -648,7 +648,7 @@ orc_program_powerpc_register_rules (void)
 
 void powerpc_emit_ret (OrcProgram *program)
 {
-  printf("  ret\n");
+  ORC_ASM_CODE(program,"  ret\n");
   //*program->codeptr++ = 0xc3;
 }
 
@@ -669,7 +669,7 @@ powerpc_add_label (OrcProgram *program, unsigned char *ptr, int label)
 
 void powerpc_emit_beq (OrcProgram *program, int label)
 {
-  printf("  ble- .L%d\n", label);
+  ORC_ASM_CODE(program,"  ble- .L%d\n", label);
 
   powerpc_add_fixup (program, program->codeptr, label);
   powerpc_emit (program, 0x40810000);
@@ -677,7 +677,7 @@ void powerpc_emit_beq (OrcProgram *program, int label)
 
 void powerpc_emit_bne (OrcProgram *program, int label)
 {
-  printf("  bdnz+ .L%d\n", label);
+  ORC_ASM_CODE(program,"  bdnz+ .L%d\n", label);
 
   powerpc_add_fixup (program, program->codeptr, label);
   powerpc_emit (program, 0x42000000);
@@ -685,7 +685,7 @@ void powerpc_emit_bne (OrcProgram *program, int label)
 
 void powerpc_emit_label (OrcProgram *program, int label)
 {
-  printf(".L%d:\n", label);
+  ORC_ASM_CODE(program,".L%d:\n", label);
 
   powerpc_add_label (program, program->codeptr, label);
 }
index acb6c4d..9c4e2a9 100644 (file)
@@ -97,8 +97,7 @@ sse_load_constants (OrcProgram *program)
               (int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i]), x86_exec_ptr,
               program->vars[i].ptr_register);
         } else {
-          /* FIXME */
-          printf("ERROR\n");
+          ORC_PROGRAM_ERROR(program,"unimplemented");
         }
         break;
       default:
@@ -140,7 +139,8 @@ sse_emit_load_src (OrcProgram *program, OrcVariable *var)
       x86_emit_mov_memoffset_sse (program, 16, 0, ptr_reg, var->alloc);
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program,"unimplemented");
+      break;
   }
 }
 
@@ -159,7 +159,7 @@ sse_emit_store_dest (OrcProgram *program, OrcVariable *var)
     case 1:
       /* FIXME we might be using ecx twice here */
       if (ptr_reg == X86_ECX) {
-        printf("ERROR\n");
+        ORC_PROGRAM_ERROR(program,"unimplemented");
       }
       x86_emit_mov_sse_reg (program, var->alloc, X86_ECX);
       x86_emit_mov_reg_memoffset (program, 1, X86_ECX, 0, ptr_reg);
@@ -167,7 +167,7 @@ sse_emit_store_dest (OrcProgram *program, OrcVariable *var)
     case 2:
       /* FIXME we might be using ecx twice here */
       if (ptr_reg == X86_ECX) {
-        printf("ERROR\n");
+        ORC_PROGRAM_ERROR(program,"unimplemented");
       }
       x86_emit_mov_sse_reg (program, var->alloc, X86_ECX);
       x86_emit_mov_reg_memoffset (program, 2, X86_ECX, 0, ptr_reg);
@@ -185,7 +185,8 @@ sse_emit_store_dest (OrcProgram *program, OrcVariable *var)
           var->is_aligned, var->is_uncached);
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program,"bad size");
+      break;
   }
 }
 
@@ -331,17 +332,17 @@ sse_emit_loop (OrcProgram *program)
     insn = program->insns + j;
     opcode = insn->opcode;
 
-    orc_program_append_code(program,"# %d: %s", j, insn->opcode->name);
+    ORC_ASM_CODE(program,"# %d: %s", j, insn->opcode->name);
 
     /* set up args */
     for(k=0;k<opcode->n_src + opcode->n_dest;k++){
       args[k] = program->vars + insn->args[k];
-      orc_program_append_code(program," %d", args[k]->alloc);
+      ORC_ASM_CODE(program," %d", args[k]->alloc);
       if (args[k]->is_chained) {
-        orc_program_append_code(program," (chained)");
+        ORC_ASM_CODE(program," (chained)");
       }
     }
-    orc_program_append_code(program,"\n");
+    ORC_ASM_CODE(program,"\n");
 
     for(k=opcode->n_dest;k<opcode->n_src + opcode->n_dest;k++){
       switch (args[k]->vartype) {
@@ -366,7 +367,7 @@ sse_emit_loop (OrcProgram *program)
       }
       rule->emit (program, rule->emit_user, insn);
     } else {
-      orc_program_append_code(program,"No rule for: %s\n", opcode->name);
+      ORC_ASM_CODE(program,"No rule for: %s\n", opcode->name);
       program->error = TRUE;
     }
 
index ec24a3b..10c4eff 100644 (file)
@@ -157,7 +157,7 @@ orc_program_append_ds (OrcProgram *program, const char *name, int arg0,
 
   insn->opcode = orc_opcode_find_by_name (name);
   if (!insn->opcode) {
-    printf("unknown opcode: %s\n", name);
+    ORC_ERROR ("unknown opcode: %s", name);
   }
   insn->args[0] = arg0;
   insn->args[1] = arg1;
@@ -175,7 +175,7 @@ orc_program_append (OrcProgram *program, const char *name, int arg0,
 
   insn->opcode = orc_opcode_find_by_name (name);
   if (!insn->opcode) {
-    printf("unknown opcode: %s\n", name);
+    ORC_ERROR ("unknown opcode: %s", name);
   }
   insn->args[0] = arg0;
   insn->args[1] = arg1;
@@ -209,7 +209,7 @@ orc_program_get_dest (OrcProgram *program)
     }
   }
 
-  ORC_ERROR("can't find dest");
+  ORC_PROGRAM_ERROR(program, "failed to find destination array");
   return -1;
 }
 
@@ -223,7 +223,7 @@ orc_program_append_str (OrcProgram *program, const char *name,
 
   insn->opcode = orc_opcode_find_by_name (name);
   if (!insn->opcode) {
-    printf("unknown opcode: %s\n", name);
+    ORC_ERROR ("unknown opcode: %s", name);
   }
   insn->args[0] = orc_program_find_var_by_name (program, arg1);
   insn->args[1] = orc_program_find_var_by_name (program, arg2);
@@ -242,7 +242,7 @@ orc_program_append_ds_str (OrcProgram *program, const char *name,
 
   insn->opcode = orc_opcode_find_by_name (name);
   if (!insn->opcode) {
-    printf("unknown opcode: %s\n", name);
+    ORC_ERROR ("unknown opcode: %s", name);
   }
   insn->args[0] = orc_program_find_var_by_name (program, arg1);
   insn->args[1] = orc_program_find_var_by_name (program, arg2);
@@ -284,7 +284,7 @@ orc_program_allocate_register (OrcProgram *program, int data_reg)
     }
   }
 
-  printf("register overflow\n");
+  ORC_ERROR ("register overflow");
   return 0;
 }
 
@@ -391,7 +391,7 @@ orc_program_rewrite_vars (OrcProgram *program)
     for(k=opcode->n_dest;k<opcode->n_src + opcode->n_dest;k++){
       var = insn->args[k];
       if (program->vars[var].vartype == ORC_VAR_TYPE_DEST) {
-        printf("ERROR: using dest var as source\n");
+        ORC_PROGRAM_ERROR(program, "using dest var as source");
       }
 
       actual_var = var;
@@ -402,7 +402,7 @@ orc_program_rewrite_vars (OrcProgram *program)
 
       if (!program->vars[var].used) {
         if (program->vars[var].vartype == ORC_VAR_TYPE_TEMP) {
-          printf("ERROR: using uninitialized temp var\n");
+          ORC_PROGRAM_ERROR(program, "using uninitialized temp var");
         }
         program->vars[var].used = TRUE;
         program->vars[var].first_use = j;
@@ -414,13 +414,13 @@ orc_program_rewrite_vars (OrcProgram *program)
       var = insn->args[k];
 
       if (program->vars[var].vartype == ORC_VAR_TYPE_SRC) {
-        printf("ERROR: using src var as dest\n");
+        ORC_PROGRAM_ERROR(program,"using src var as dest");
       }
       if (program->vars[var].vartype == ORC_VAR_TYPE_CONST) {
-        printf("ERROR: using const var as dest\n");
+        ORC_PROGRAM_ERROR(program,"using const var as dest");
       }
       if (program->vars[var].vartype == ORC_VAR_TYPE_PARAM) {
-        printf("ERROR: using param var as dest\n");
+        ORC_PROGRAM_ERROR(program,"using param var as dest");
       }
 
       actual_var = var;
@@ -434,7 +434,7 @@ orc_program_rewrite_vars (OrcProgram *program)
         program->vars[actual_var].first_use = j;
       } else {
         if (program->vars[var].vartype == ORC_VAR_TYPE_DEST) {
-          printf("ERROR: writing dest more than once\n");
+          ORC_PROGRAM_ERROR(program,"writing dest more than once");
         }
         if (program->vars[var].vartype == ORC_VAR_TYPE_TEMP) {
           actual_var = orc_program_dup_temporary (program, var, j);
@@ -557,16 +557,6 @@ orc_program_rewrite_vars2 (OrcProgram *program)
     }
   }
 
-#if 0
-  for(i=0;i<program->n_vars;i++){
-    printf("# %2d: %2d %2d %d\n",
-        i,
-        program->vars[i].first_use,
-        program->vars[i].last_use,
-        program->vars[i].alloc);
-  }
-#endif
-
 }
 
 void
@@ -582,43 +572,6 @@ orc_program_dump_code (OrcProgram *program)
 }
 
 void
-orc_program_dump (OrcProgram *program)
-{
-  int i;
-  int j;
-  OrcOpcode *opcode;
-  OrcInstruction *insn;
-
-  for(i=0;i<program->n_insns;i++){
-    insn = program->insns + i;
-    opcode = insn->opcode;
-
-    printf("insn: %d\n", i);
-    printf("  opcode: %s\n", opcode->name);
-
-    for(j=0;j<opcode->n_dest;j++){
-      printf("  dest%d: %d %s\n", j, insn->args[j],
-          program->vars[insn->args[j]].name);
-    }
-    for(j=0;j<opcode->n_src;j++){
-      printf("  src%d: %d %s\n", j, insn->args[opcode->n_dest + j],
-          program->vars[insn->args[opcode->n_dest + j]].name);
-    }
-
-    printf("\n");
-  }
-
-  for(i=0;i<program->n_vars;i++){
-    printf("var: %d %s\n", i, program->vars[i].name);
-    printf("first_use: %d\n", program->vars[i].first_use);
-    printf("last_use: %d\n", program->vars[i].last_use);
-
-    printf("\n");
-  }
-
-}
-
-void
 orc_program_append_code (OrcProgram *p, const char *fmt, ...)
 {
   va_list varargs;
index 120cbb1..003b8ea 100644 (file)
@@ -44,7 +44,6 @@ typedef void (*OrcRuleEmitFunc)(OrcProgram *p, void *user, OrcInstruction *insn)
 #define ORC_STRUCT_OFFSET(struct_type, member)    \
       ((long) ((unsigned int *) &((struct_type*) 0)->member))
 
-
 #ifndef TRUE
 #define TRUE 1
 #endif
@@ -52,6 +51,18 @@ typedef void (*OrcRuleEmitFunc)(OrcProgram *p, void *user, OrcInstruction *insn)
 #define FALSE 0
 #endif
 
+#define ORC_ENABLE_ASM_CODE
+#ifdef ORC_ENABLE_ASM_CODE
+#define ORC_ASM_CODE(fmt,...) orc_program_append_code(fmt, __VA_ARGS__)
+#else
+#define ORC_ASM_CODE(fmt,...)
+#endif
+
+#define ORC_PROGRAM_ERROR(program, ...) do { \
+  program->error = TRUE; \
+  orc_debug_print(ORC_DEBUG_ERROR, __FILE__, ORC_FUNCTION, __LINE__, __VA_ARGS__); \
+} while (0)
+
 enum {
   ORC_TARGET_C = 0,
   ORC_TARGET_ALTIVEC = 1,
index f4075a3..a2b9e83 100644 (file)
@@ -24,7 +24,7 @@ arm_loadw (OrcProgram *program, int dest, int src1, int offset)
   code |= (offset&0xf0) << 4;
   code |= offset&0x0f;
 
-  printf("  ldrh %s, [%s, #%d]\n",
+  ORC_ASM_CODE(program,"  ldrh %s, [%s, #%d]\n",
       arm_reg_name (dest),
       arm_reg_name (src1), offset);
   arm_emit (program, code);
@@ -41,7 +41,7 @@ arm_storew (OrcProgram *program, int dest, int offset, int src1)
   code |= (offset&0xf0) << 4;
   code |= offset&0x0f;
 
-  printf("  strh %s, [%s, #%d]\n",
+  ORC_ASM_CODE(program,"  strh %s, [%s, #%d]\n",
       arm_reg_name (src1),
       arm_reg_name (dest), offset);
   arm_emit (program, code);
@@ -57,7 +57,7 @@ arm_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
   code |= (p->vars[insn->args[0]].alloc&0xf) << 12;
   code |= (p->vars[insn->args[2]].alloc&0xf) << 0;
 
-  printf("  add %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  add %s, %s, %s\n",
       arm_reg_name (p->vars[insn->args[0]].alloc),
       arm_reg_name (p->vars[insn->args[1]].alloc),
       arm_reg_name (p->vars[insn->args[2]].alloc));
@@ -74,7 +74,7 @@ arm_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
   code |= (p->vars[insn->args[0]].alloc&0xf) << 12;
   code |= (p->vars[insn->args[2]].alloc&0xf) << 0;
 
-  printf("  sub %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  sub %s, %s, %s\n",
       arm_reg_name (p->vars[insn->args[0]].alloc),
       arm_reg_name (p->vars[insn->args[1]].alloc),
       arm_reg_name (p->vars[insn->args[2]].alloc));
@@ -91,7 +91,7 @@ arm_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
   code |= (p->vars[insn->args[1]].alloc&0xf) << 0;
   code |= (p->vars[insn->args[2]].alloc&0xf) << 8;
 
-  printf("  mul %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  mul %s, %s, %s\n",
       arm_reg_name (p->vars[insn->args[0]].alloc),
       arm_reg_name (p->vars[insn->args[1]].alloc),
       arm_reg_name (p->vars[insn->args[2]].alloc));
@@ -108,7 +108,7 @@ arm_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
   code |= (p->vars[insn->args[1]].alloc&0xf) << 0;
   code |= (p->vars[insn->args[2]].alloc&0xf) << 8;
 
-  printf("  asr %s, %s, %s\n",
+  ORC_ASM_CODE(p,"  asr %s, %s, %s\n",
       arm_reg_name (p->vars[insn->args[0]].alloc),
       arm_reg_name (p->vars[insn->args[1]].alloc),
       arm_reg_name (p->vars[insn->args[2]].alloc));
@@ -121,13 +121,13 @@ void
 arm_emit_loadiw (OrcProgram *p, int reg, int value)
 {
   if (value == 0) {
-    printf("  pxor %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(program,"  pxor %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0xef;
     x86_emit_modrm_reg (p, reg, reg);
   } else if (value == -1) {
-    printf("  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(program,"  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
@@ -135,14 +135,14 @@ arm_emit_loadiw (OrcProgram *p, int reg, int value)
     x86_emit_modrm_reg (p, reg, reg);
 
   } else if (value == 1) {
-    printf("  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(program,"  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x75;
     x86_emit_modrm_reg (p, reg, reg);
 
-    printf("  psrlw $15, %%%s\n", x86_get_regname_sse(reg));
+    ORC_ASM_CODE(program,"  psrlw $15, %%%s\n", x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x71;
@@ -154,13 +154,13 @@ arm_emit_loadiw (OrcProgram *p, int reg, int value)
 
     x86_emit_mov_imm_reg (p, 4, value, X86_ECX);
 
-    printf("  movd %%ecx, %%%s\n", x86_get_regname_sse(reg));
+    ORC_ASM_CODE(program,"  movd %%ecx, %%%s\n", x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x6e;
     x86_emit_modrm_reg (p, X86_ECX, reg);
 
-    printf("  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(program,"  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
 
     *p->codeptr++ = 0x66;
@@ -174,14 +174,14 @@ arm_emit_loadiw (OrcProgram *p, int reg, int value)
 void
 arm_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
 {
-  printf("  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+  ORC_ASM_CODE(program,"  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0x66;
   *p->codeptr++ = 0x0f;
   *p->codeptr++ = 0x6e;
   x86_emit_modrm_memoffset (p, reg, offset, reg1);
 
-  printf("  pshuflw $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+  ORC_ASM_CODE(program,"  pshuflw $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0xf2;
   *p->codeptr++ = 0x0f;
@@ -189,7 +189,7 @@ arm_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
   x86_emit_modrm_reg (p, reg, reg);
   *p->codeptr++ = 0x00;
 
-  printf("  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+  ORC_ASM_CODE(program,"  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0x66;
   *p->codeptr++ = 0x0f;
@@ -201,7 +201,7 @@ arm_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
 static void
 arm_rule_copyx (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  movdqa %%%s, %%%s\n",
+  ORC_ASM_CODE(program,"  movdqa %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -218,7 +218,7 @@ static void
 arm_emit_66_rex_0f (OrcProgram *p, OrcInstruction *insn, int code,
     const char *insn_name)
 {
-  printf("  %s %%%s, %%%s\n", insn_name,
+  ORC_ASM_CODE(program,"  %s %%%s, %%%s\n", insn_name,
       x86_get_regname_sse(p->vars[insn->args[2]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -343,7 +343,7 @@ static void
 arm_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psllw $%d, %%%s\n",
+    ORC_ASM_CODE(program,"  psllw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -355,7 +355,7 @@ arm_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
   } else if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_PARAM) {
     /* FIXME this is a gross hack to reload the register with a
      * 64-bit version of the parameter. */
-    printf("  movd %d(%%%s), %%%s\n",
+    ORC_ASM_CODE(program,"  movd %d(%%%s), %%%s\n",
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_get_regname_ptr(x86_exec_ptr),
         x86_get_regname_sse(p->vars[insn->args[2]].alloc));
@@ -367,7 +367,7 @@ arm_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_exec_ptr);
 
-    printf("  psllw %%%s, %%%s\n",
+    ORC_ASM_CODE(program,"  psllw %%%s, %%%s\n",
         x86_get_regname_sse(p->vars[insn->args[2]].alloc),
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -377,7 +377,7 @@ arm_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
     x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
         p->vars[insn->args[2]].alloc);
   } else {
-    printf("ERROR\n");
+    ORC_ASM_CODE(program,"ERROR\n");
   }
 }
 
@@ -385,7 +385,7 @@ static void
 arm_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psraw $%d, %%%s\n",
+    ORC_ASM_CODE(program,"  psraw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -397,7 +397,7 @@ arm_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
   } else if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_PARAM) {
     /* FIXME this is a gross hack to reload the register with a
      * 64-bit version of the parameter. */
-    printf("  movd %d(%%%s), %%%s\n",
+    ORC_ASM_CODE(program,"  movd %d(%%%s), %%%s\n",
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_get_regname_ptr(x86_exec_ptr),
         x86_get_regname_sse(p->vars[insn->args[2]].alloc));
@@ -409,7 +409,7 @@ arm_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_exec_ptr);
 
-    printf("  psraw %%%s, %%%s\n",
+    ORC_ASM_CODE(program,"  psraw %%%s, %%%s\n",
         x86_get_regname_sse(p->vars[insn->args[2]].alloc),
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -419,14 +419,14 @@ arm_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
     x86_emit_modrm_reg (p, p->vars[insn->args[2]].alloc,
         p->vars[insn->args[0]].alloc);
   } else {
-    printf("ERROR\n");
+    ORC_ASM_CODE(program,"ERROR\n");
   }
 }
 
 static void
 arm_rule_convsbw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  punpcklbw %%%s, %%%s\n",
+  ORC_ASM_CODE(program,"  punpcklbw %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -436,7 +436,7 @@ arm_rule_convsbw (OrcProgram *p, void *user, OrcInstruction *insn)
   x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
       p->vars[insn->args[1]].alloc);
 
-  printf("  psraw $8, %%%s\n",
+  ORC_ASM_CODE(program,"  psraw $8, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
   
   *p->codeptr++ = 0x66;
@@ -451,7 +451,7 @@ arm_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   /* FIXME should do this by unpacking with a zero reg */
 
-  printf("  punpcklbw %%%s, %%%s\n",
+  ORC_ASM_CODE(program,"  punpcklbw %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -461,7 +461,7 @@ arm_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
   x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
       p->vars[insn->args[1]].alloc);
 
-  printf("  psrlw $8, %%%s\n",
+  ORC_ASM_CODE(program,"  psrlw $8, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
   
   *p->codeptr++ = 0x66;
@@ -475,7 +475,7 @@ arm_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 arm_rule_convsuswb (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  packuswb %%%s, %%%s\n",
+  ORC_ASM_CODE(program,"  packuswb %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
index 2fce71b..9d82835 100644 (file)
@@ -19,7 +19,7 @@ void
 mmx_emit_loadiw (OrcProgram *p, int reg, int value)
 {
   if (value == 0) {
-    printf("  pxor %%%s, %%%s\n", x86_get_regname_mmx(reg),
+    ORC_ASM_CODE(p,"  pxor %%%s, %%%s\n", x86_get_regname_mmx(reg),
         x86_get_regname_mmx(reg));
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0xef;
@@ -28,15 +28,15 @@ mmx_emit_loadiw (OrcProgram *p, int reg, int value)
 #if 1
     x86_emit_mov_imm_reg (p, 4, value, X86_ECX);
 
-    printf("  movd %%ecx, %%%s\n", x86_get_regname_mmx(reg));
+    ORC_ASM_CODE(p,"  movd %%ecx, %%%s\n", x86_get_regname_mmx(reg));
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x6e;
     x86_emit_modrm_reg (p, X86_ECX, reg);
 #else
-    printf("  pinsrw $0, %%ecx, %%%s\n", x86_get_regname_mmx(reg));
+    ORC_ASM_CODE(p,"  pinsrw $0, %%ecx, %%%s\n", x86_get_regname_mmx(reg));
 #endif
 
-    printf("  pshufw $0, %%%s, %%%s\n", x86_get_regname_mmx(reg),
+    ORC_ASM_CODE(p,"  pshufw $0, %%%s, %%%s\n", x86_get_regname_mmx(reg),
         x86_get_regname_mmx(reg));
 
     *p->codeptr++ = 0x0f;
@@ -49,7 +49,7 @@ mmx_emit_loadiw (OrcProgram *p, int reg, int value)
 static void
 mmx_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  paddw %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  paddw %%%s, %%%s\n",
       x86_get_regname_mmx(p->vars[insn->args[2]].alloc),
       x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -62,7 +62,7 @@ mmx_rule_addw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 mmx_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  psubw %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  psubw %%%s, %%%s\n",
       x86_get_regname_mmx(p->vars[insn->args[2]].alloc),
       x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -75,7 +75,7 @@ mmx_rule_subw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 mmx_rule_mullw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  pmullw %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  pmullw %%%s, %%%s\n",
       x86_get_regname_mmx(p->vars[insn->args[2]].alloc),
       x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -89,7 +89,7 @@ static void
 mmx_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psllw $%d, %%%s\n",
+    ORC_ASM_CODE(p,"  psllw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -99,7 +99,7 @@ mmx_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
     *p->codeptr++ = p->vars[insn->args[2]].value;
   } else {
     /* FIXME this doesn't work quite right */
-    printf("  psllw %%%s, %%%s\n",
+    ORC_ASM_CODE(p,"  psllw %%%s, %%%s\n",
         x86_get_regname_mmx(p->vars[insn->args[2]].alloc),
         x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -114,7 +114,7 @@ static void
 mmx_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psraw $%d, %%%s\n",
+    ORC_ASM_CODE(p,"  psraw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
@@ -124,7 +124,7 @@ mmx_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
     *p->codeptr++ = p->vars[insn->args[2]].value;
   } else {
     /* FIXME this doesn't work quite right */
-    printf("  psraw %%%s, %%%s\n",
+    ORC_ASM_CODE(p,"  psraw %%%s, %%%s\n",
         x86_get_regname_mmx(p->vars[insn->args[2]].alloc),
         x86_get_regname_mmx(p->vars[insn->args[0]].alloc));
 
index ce2b4f0..5359d30 100644 (file)
@@ -22,13 +22,13 @@ void
 sse_emit_loadiw (OrcProgram *p, int reg, int value)
 {
   if (value == 0) {
-    printf("  pxor %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(p,"  pxor %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0xef;
     x86_emit_modrm_reg (p, reg, reg);
   } else if (value == -1) {
-    printf("  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(p,"  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
@@ -36,14 +36,14 @@ sse_emit_loadiw (OrcProgram *p, int reg, int value)
     x86_emit_modrm_reg (p, reg, reg);
 
   } else if (value == 1) {
-    printf("  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(p,"  pcmpeqw %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x75;
     x86_emit_modrm_reg (p, reg, reg);
 
-    printf("  psrlw $15, %%%s\n", x86_get_regname_sse(reg));
+    ORC_ASM_CODE(p,"  psrlw $15, %%%s\n", x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x71;
@@ -55,13 +55,13 @@ sse_emit_loadiw (OrcProgram *p, int reg, int value)
 
     x86_emit_mov_imm_reg (p, 4, value, X86_ECX);
 
-    printf("  movd %%ecx, %%%s\n", x86_get_regname_sse(reg));
+    ORC_ASM_CODE(p,"  movd %%ecx, %%%s\n", x86_get_regname_sse(reg));
     *p->codeptr++ = 0x66;
     *p->codeptr++ = 0x0f;
     *p->codeptr++ = 0x6e;
     x86_emit_modrm_reg (p, X86_ECX, reg);
 
-    printf("  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+    ORC_ASM_CODE(p,"  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
         x86_get_regname_sse(reg));
 
     *p->codeptr++ = 0x66;
@@ -75,14 +75,14 @@ sse_emit_loadiw (OrcProgram *p, int reg, int value)
 void
 sse_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
 {
-  printf("  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+  ORC_ASM_CODE(p,"  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0x66;
   *p->codeptr++ = 0x0f;
   *p->codeptr++ = 0x6e;
   x86_emit_modrm_memoffset (p, reg, offset, reg1);
 
-  printf("  pshuflw $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+  ORC_ASM_CODE(p,"  pshuflw $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0xf2;
   *p->codeptr++ = 0x0f;
@@ -90,7 +90,7 @@ sse_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
   x86_emit_modrm_reg (p, reg, reg);
   *p->codeptr++ = 0x00;
 
-  printf("  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
+  ORC_ASM_CODE(p,"  pshufd $0, %%%s, %%%s\n", x86_get_regname_sse(reg),
       x86_get_regname_sse(reg));
   *p->codeptr++ = 0x66;
   *p->codeptr++ = 0x0f;
@@ -102,7 +102,7 @@ sse_emit_loadw (OrcProgram *p, int reg, int offset, int reg1)
 static void
 sse_rule_copyx (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  movdqa %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  movdqa %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -119,7 +119,7 @@ static void
 sse_emit_66_rex_0f (OrcProgram *p, OrcInstruction *insn, int code,
     const char *insn_name)
 {
-  printf("  %s %%%s, %%%s\n", insn_name,
+  ORC_ASM_CODE(p,"  %s %%%s, %%%s\n", insn_name,
       x86_get_regname_sse(p->vars[insn->args[2]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -244,7 +244,7 @@ static void
 sse_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psllw $%d, %%%s\n",
+    ORC_ASM_CODE(p,"  psllw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -256,7 +256,7 @@ sse_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
   } else if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_PARAM) {
     /* FIXME this is a gross hack to reload the register with a
      * 64-bit version of the parameter. */
-    printf("  movd %d(%%%s), %%%s\n",
+    ORC_ASM_CODE(p,"  movd %d(%%%s), %%%s\n",
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_get_regname_ptr(x86_exec_ptr),
         x86_get_regname_sse(p->vars[insn->args[2]].alloc));
@@ -268,7 +268,7 @@ sse_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_exec_ptr);
 
-    printf("  psllw %%%s, %%%s\n",
+    ORC_ASM_CODE(p,"  psllw %%%s, %%%s\n",
         x86_get_regname_sse(p->vars[insn->args[2]].alloc),
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -278,7 +278,7 @@ sse_rule_shlw (OrcProgram *p, void *user, OrcInstruction *insn)
     x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
         p->vars[insn->args[2]].alloc);
   } else {
-    printf("ERROR\n");
+    ORC_ASM_CODE(p,"ERROR\n");
   }
 }
 
@@ -286,7 +286,7 @@ static void
 sse_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_CONST) {
-    printf("  psraw $%d, %%%s\n",
+    ORC_ASM_CODE(p,"  psraw $%d, %%%s\n",
         p->vars[insn->args[2]].value,
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -298,7 +298,7 @@ sse_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
   } else if (p->vars[insn->args[2]].vartype == ORC_VAR_TYPE_PARAM) {
     /* FIXME this is a gross hack to reload the register with a
      * 64-bit version of the parameter. */
-    printf("  movd %d(%%%s), %%%s\n",
+    ORC_ASM_CODE(p,"  movd %d(%%%s), %%%s\n",
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_get_regname_ptr(x86_exec_ptr),
         x86_get_regname_sse(p->vars[insn->args[2]].alloc));
@@ -310,7 +310,7 @@ sse_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
         (int)ORC_STRUCT_OFFSET(OrcExecutor, params[insn->args[2]]),
         x86_exec_ptr);
 
-    printf("  psraw %%%s, %%%s\n",
+    ORC_ASM_CODE(p,"  psraw %%%s, %%%s\n",
         x86_get_regname_sse(p->vars[insn->args[2]].alloc),
         x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -320,14 +320,14 @@ sse_rule_shrsw (OrcProgram *p, void *user, OrcInstruction *insn)
     x86_emit_modrm_reg (p, p->vars[insn->args[2]].alloc,
         p->vars[insn->args[0]].alloc);
   } else {
-    printf("ERROR\n");
+    ORC_ASM_CODE(p,"ERROR\n");
   }
 }
 
 static void
 sse_rule_convsbw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  punpcklbw %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  punpcklbw %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -337,7 +337,7 @@ sse_rule_convsbw (OrcProgram *p, void *user, OrcInstruction *insn)
   x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
       p->vars[insn->args[1]].alloc);
 
-  printf("  psraw $8, %%%s\n",
+  ORC_ASM_CODE(p,"  psraw $8, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
   
   *p->codeptr++ = 0x66;
@@ -352,7 +352,7 @@ sse_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
 {
   /* FIXME should do this by unpacking with a zero reg */
 
-  printf("  punpcklbw %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  punpcklbw %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
@@ -362,7 +362,7 @@ sse_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
   x86_emit_modrm_reg (p, p->vars[insn->args[0]].alloc,
       p->vars[insn->args[1]].alloc);
 
-  printf("  psrlw $8, %%%s\n",
+  ORC_ASM_CODE(p,"  psrlw $8, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
   
   *p->codeptr++ = 0x66;
@@ -376,7 +376,7 @@ sse_rule_convubw (OrcProgram *p, void *user, OrcInstruction *insn)
 static void
 sse_rule_convsuswb (OrcProgram *p, void *user, OrcInstruction *insn)
 {
-  printf("  packuswb %%%s, %%%s\n",
+  ORC_ASM_CODE(p,"  packuswb %%%s, %%%s\n",
       x86_get_regname_sse(p->vars[insn->args[1]].alloc),
       x86_get_regname_sse(p->vars[insn->args[0]].alloc));
 
index 32283dd..8a5fb86 100644 (file)
--- a/orc/x86.c
+++ b/orc/x86.c
@@ -38,7 +38,6 @@ x86_get_regname(int i)
     case 1:
       return "direct";
     default:
-      printf("register %d\n", i);
       return "ERROR";
   }
 }
@@ -154,11 +153,11 @@ x86_emit_push (OrcProgram *program, int size, int reg)
   if (size == 1) {
     program->error = 1;
   } else if (size == 2) {
-    printf("  pushw %%%s\n", x86_get_regname_16(reg));
+    ORC_ASM_CODE(program,"  pushw %%%s\n", x86_get_regname_16(reg));
     *program->codeptr++ = 0x66;
     *program->codeptr++ = 0x50 + x86_get_regnum(reg);
   } else {
-    printf("  pushl %%%s\n", x86_get_regname(reg));
+    ORC_ASM_CODE(program,"  pushl %%%s\n", x86_get_regname(reg));
     *program->codeptr++ = 0x50 + x86_get_regnum(reg);
   }
 }
@@ -170,11 +169,11 @@ x86_emit_pop (OrcProgram *program, int size, int reg)
   if (size == 1) {
     program->error = 1;
   } else if (size == 2) {
-    printf("  popw %%%s\n", x86_get_regname_16(reg));
+    ORC_ASM_CODE(program,"  popw %%%s\n", x86_get_regname_16(reg));
     *program->codeptr++ = 0x66;
     *program->codeptr++ = 0x58 + x86_get_regnum(reg);
   } else {
-    printf("  popl %%%s\n", x86_get_regname(reg));
+    ORC_ASM_CODE(program,"  popl %%%s\n", x86_get_regname(reg));
     *program->codeptr++ = 0x58 + x86_get_regnum(reg);
   }
 }
@@ -238,26 +237,26 @@ x86_emit_mov_memoffset_reg (OrcProgram *program, int size, int offset,
 
   switch (size) {
     case 1:
-      printf("  movb %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movb %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_8(reg2));
       *program->codeptr++ = 0x8a;
       x86_emit_modrm_memoffset (program, reg2, offset, reg1);
       return;
     case 2:
-      printf("  movw %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movw %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_16(reg2));
       *program->codeptr++ = 0x66;
       break;
     case 4:
-      printf("  movl %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movl %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname(reg2));
       break;
     case 8:
-      printf("  mov %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  mov %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_64(reg2));
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size");
       break;
   }
 
@@ -271,13 +270,13 @@ x86_emit_mov_memoffset_mmx (OrcProgram *program, int size, int offset,
     int reg1, int reg2)
 {
   if (size == 4) {
-    printf("  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+    ORC_ASM_CODE(program,"  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
         x86_get_regname_mmx(reg2));
     x86_emit_rex(program, 0, reg2, 0, reg1);
     *program->codeptr++ = 0x0f;
     *program->codeptr++ = 0x6e;
   } else {
-    printf("  movq %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+    ORC_ASM_CODE(program,"  movq %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
         x86_get_regname_mmx(reg2));
     x86_emit_rex(program, 0, reg2, 0, reg1);
     *program->codeptr++ = 0x0f;
@@ -292,7 +291,7 @@ x86_emit_mov_memoffset_sse (OrcProgram *program, int size, int offset,
 {
   switch (size) {
     case 4:
-      printf("  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movd %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_sse(reg2));
       *program->codeptr++ = 0x66;
       x86_emit_rex(program, 0, reg2, 0, reg1);
@@ -300,14 +299,14 @@ x86_emit_mov_memoffset_sse (OrcProgram *program, int size, int offset,
       *program->codeptr++ = 0x6e;
       break;
     case 8:
-      printf("  movq %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movq %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_sse(reg2));
       *program->codeptr++ = 0xf3;
       *program->codeptr++ = 0x0f;
       *program->codeptr++ = 0x7e;
       break;
     case 16:
-      printf("  movdqu %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
+      ORC_ASM_CODE(program,"  movdqu %d(%%%s), %%%s\n", offset, x86_get_regname_ptr(reg1),
           x86_get_regname_sse(reg2));
       *program->codeptr++ = 0xf3;
       x86_emit_rex(program, 0, reg2, 0, reg1);
@@ -315,7 +314,7 @@ x86_emit_mov_memoffset_sse (OrcProgram *program, int size, int offset,
       *program->codeptr++ = 0x6f;
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size");
       break;
   }
   x86_emit_modrm_memoffset (program, reg2, offset, reg1);
@@ -327,26 +326,26 @@ x86_emit_mov_reg_memoffset (OrcProgram *program, int size, int reg1, int offset,
 {
   switch (size) {
     case 1:
-      printf("  movb %%%s, %d(%%%s)\n", x86_get_regname_8(reg1), offset,
+      ORC_ASM_CODE(program,"  movb %%%s, %d(%%%s)\n", x86_get_regname_8(reg1), offset,
           x86_get_regname_ptr(reg2));
       *program->codeptr++ = 0x88;
       x86_emit_modrm_memoffset (program, reg1, offset, reg2);
       return;
     case 2:
-      printf("  movw %%%s, %d(%%%s)\n", x86_get_regname_16(reg1), offset,
+      ORC_ASM_CODE(program,"  movw %%%s, %d(%%%s)\n", x86_get_regname_16(reg1), offset,
           x86_get_regname_ptr(reg2));
       *program->codeptr++ = 0x66;
       break;
     case 4:
-      printf("  movl %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
+      ORC_ASM_CODE(program,"  movl %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
           x86_get_regname_ptr(reg2));
       break;
     case 8:
-      printf("  mov %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
+      ORC_ASM_CODE(program,"  mov %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
           x86_get_regname_ptr(reg2));
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size");
       break;
   }
 
@@ -361,12 +360,12 @@ x86_emit_mov_mmx_memoffset (OrcProgram *program, int size, int reg1, int offset,
 {
   x86_emit_rex(program, 0, reg1, 0, reg2);
   if (size == 4) {
-    printf("  movd %%%s, %d(%%%s)\n", x86_get_regname_mmx(reg1), offset,
+    ORC_ASM_CODE(program,"  movd %%%s, %d(%%%s)\n", x86_get_regname_mmx(reg1), offset,
         x86_get_regname_ptr(reg2));
     *program->codeptr++ = 0x0f;
     *program->codeptr++ = 0x7e;
   } else if (size == 8) {
-    printf("  movq %%%s, %d(%%%s)\n", x86_get_regname_mmx(reg1), offset,
+    ORC_ASM_CODE(program,"  movq %%%s, %d(%%%s)\n", x86_get_regname_mmx(reg1), offset,
         x86_get_regname_ptr(reg2));
     *program->codeptr++ = 0x0f;
     *program->codeptr++ = 0x7f;
@@ -381,7 +380,7 @@ x86_emit_mov_sse_memoffset (OrcProgram *program, int size, int reg1, int offset,
 {
   switch (size) {
     case 4:
-      printf("  movd %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
+      ORC_ASM_CODE(program,"  movd %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
           x86_get_regname_ptr(reg2));
       *program->codeptr++ = 0x66;
       x86_emit_rex(program, 0, reg1, 0, reg2);
@@ -389,7 +388,7 @@ x86_emit_mov_sse_memoffset (OrcProgram *program, int size, int reg1, int offset,
       *program->codeptr++ = 0x7e;
       break;
     case 8:
-      printf("  movq %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
+      ORC_ASM_CODE(program,"  movq %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
           x86_get_regname_ptr(reg2));
       *program->codeptr++ = 0x66;
       x86_emit_rex(program, 0, reg1, 0, reg2);
@@ -399,20 +398,20 @@ x86_emit_mov_sse_memoffset (OrcProgram *program, int size, int reg1, int offset,
     case 16:
       if (aligned) {
         if (uncached) {
-          printf("  movntdq %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
+          ORC_ASM_CODE(program,"  movntdq %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
               x86_get_regname_ptr(reg2));
           *program->codeptr++ = 0x66;
           *program->codeptr++ = 0x0f;
           *program->codeptr++ = 0xe7;
         } else {
-          printf("  movdqa %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
+          ORC_ASM_CODE(program,"  movdqa %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
               x86_get_regname_ptr(reg2));
           *program->codeptr++ = 0x66;
           *program->codeptr++ = 0x0f;
           *program->codeptr++ = 0x7f;
         }
       } else {
-        printf("  movdqu %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
+        ORC_ASM_CODE(program,"  movdqu %%%s, %d(%%%s)\n", x86_get_regname_sse(reg1), offset,
             x86_get_regname_ptr(reg2));
         *program->codeptr++ = 0xf3;
         *program->codeptr++ = 0x0f;
@@ -420,7 +419,8 @@ x86_emit_mov_sse_memoffset (OrcProgram *program, int size, int reg1, int offset,
       }
       break;
     default:
-      printf("ERROR\n");
+      ORC_PROGRAM_ERROR(program, "bad size");
+      break;
   }
 
   x86_emit_modrm_memoffset (program, reg1, offset, reg2);
@@ -430,14 +430,14 @@ void
 x86_emit_mov_imm_reg (OrcProgram *program, int size, int value, int reg1)
 {
   if (size == 2) {
-    printf("  movw $%d, %%%s\n", value, x86_get_regname_16(reg1));
+    ORC_ASM_CODE(program,"  movw $%d, %%%s\n", value, x86_get_regname_16(reg1));
     x86_emit_rex(program, size, reg1, 0, 0);
     *program->codeptr++ = 0x66;
     *program->codeptr++ = 0xb8 + x86_get_regnum(reg1);
     *program->codeptr++ = (value & 0xff);
     *program->codeptr++ = ((value>>8) & 0xff);
   } else if (size == 4) {
-    printf("  movl $%d, %%%s\n", value, x86_get_regname(reg1));
+    ORC_ASM_CODE(program,"  movl $%d, %%%s\n", value, x86_get_regname(reg1));
     x86_emit_rex(program, size, reg1, 0, 0);
     *program->codeptr++ = 0xb8 + x86_get_regnum(reg1);
     *program->codeptr++ = (value & 0xff);
@@ -453,14 +453,14 @@ x86_emit_mov_imm_reg (OrcProgram *program, int size, int value, int reg1)
 void x86_emit_mov_reg_reg (OrcProgram *program, int size, int reg1, int reg2)
 {
   if (size == 2) {
-    printf("  movw %%%s, %%%s\n", x86_get_regname_16(reg1),
+    ORC_ASM_CODE(program,"  movw %%%s, %%%s\n", x86_get_regname_16(reg1),
         x86_get_regname_16(reg2));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  movl %%%s, %%%s\n", x86_get_regname(reg1),
+    ORC_ASM_CODE(program,"  movl %%%s, %%%s\n", x86_get_regname(reg1),
         x86_get_regname(reg2));
   } else {
-    printf("  mov %%%s, %%%s\n", x86_get_regname_64(reg1),
+    ORC_ASM_CODE(program,"  mov %%%s, %%%s\n", x86_get_regname_64(reg1),
         x86_get_regname_64(reg2));
   }
 
@@ -471,7 +471,7 @@ void x86_emit_mov_reg_reg (OrcProgram *program, int size, int reg1, int reg2)
 
 void x86_emit_mov_sse_reg_reg (OrcProgram *program, int reg1, int reg2)
 {
-  printf("  movdqa %%%s, %%%s\n", x86_get_regname_sse(reg1),
+  ORC_ASM_CODE(program,"  movdqa %%%s, %%%s\n", x86_get_regname_sse(reg1),
         x86_get_regname_sse(reg2));
 
   *program->codeptr++ = 0x66;
@@ -483,7 +483,7 @@ void x86_emit_mov_sse_reg_reg (OrcProgram *program, int reg1, int reg2)
 
 void x86_emit_mov_mmx_reg_reg (OrcProgram *program, int reg1, int reg2)
 {
-  printf("  movq %%%s, %%%s\n", x86_get_regname_mmx(reg1),
+  ORC_ASM_CODE(program,"  movq %%%s, %%%s\n", x86_get_regname_mmx(reg1),
         x86_get_regname_mmx(reg2));
 
   x86_emit_rex(program, 0, reg1, 0, reg2);
@@ -495,7 +495,7 @@ void x86_emit_mov_mmx_reg_reg (OrcProgram *program, int reg1, int reg2)
 void x86_emit_mov_reg_mmx (OrcProgram *program, int reg1, int reg2)
 {
   /* FIXME */
-  printf("  movd %%%s, %%%s\n", x86_get_regname(reg1),
+  ORC_ASM_CODE(program,"  movd %%%s, %%%s\n", x86_get_regname(reg1),
       x86_get_regname_mmx(reg2));
   x86_emit_rex(program, 0, reg1, 0, reg2);
   *program->codeptr++ = 0x0f;
@@ -506,7 +506,7 @@ void x86_emit_mov_reg_mmx (OrcProgram *program, int reg1, int reg2)
 void x86_emit_mov_mmx_reg (OrcProgram *program, int reg1, int reg2)
 {
   /* FIXME */
-  printf("  movd %%%s, %%%s\n", x86_get_regname_mmx(reg1),
+  ORC_ASM_CODE(program,"  movd %%%s, %%%s\n", x86_get_regname_mmx(reg1),
       x86_get_regname(reg2));
   x86_emit_rex(program, 0, reg2, 0, reg1);
   *program->codeptr++ = 0x0f;
@@ -517,7 +517,7 @@ void x86_emit_mov_mmx_reg (OrcProgram *program, int reg1, int reg2)
 void x86_emit_mov_reg_sse (OrcProgram *program, int reg1, int reg2)
 {
   /* FIXME */
-  printf("  movd %%%s, %%%s\n", x86_get_regname(reg1),
+  ORC_ASM_CODE(program,"  movd %%%s, %%%s\n", x86_get_regname(reg1),
       x86_get_regname_sse(reg2));
   *program->codeptr++ = 0x66;
   x86_emit_rex(program, 0, reg1, 0, reg2);
@@ -529,7 +529,7 @@ void x86_emit_mov_reg_sse (OrcProgram *program, int reg1, int reg2)
 void x86_emit_mov_sse_reg (OrcProgram *program, int reg1, int reg2)
 {
   /* FIXME */
-  printf("  movd %%%s, %%%s\n", x86_get_regname_sse(reg1),
+  ORC_ASM_CODE(program,"  movd %%%s, %%%s\n", x86_get_regname_sse(reg1),
       x86_get_regname(reg2));
   *program->codeptr++ = 0x66;
   x86_emit_rex(program, 0, reg2, 0, reg1);
@@ -542,14 +542,14 @@ void
 x86_emit_test_reg_reg (OrcProgram *program, int size, int reg1, int reg2)
 {
   if (size == 2) {
-    printf("  testw %%%s, %%%s\n", x86_get_regname_16(reg1),
+    ORC_ASM_CODE(program,"  testw %%%s, %%%s\n", x86_get_regname_16(reg1),
         x86_get_regname_16(reg2));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  testl %%%s, %%%s\n", x86_get_regname(reg1),
+    ORC_ASM_CODE(program,"  testl %%%s, %%%s\n", x86_get_regname(reg1),
         x86_get_regname(reg2));
   } else {
-    printf("  test %%%s, %%%s\n", x86_get_regname(reg1),
+    ORC_ASM_CODE(program,"  test %%%s, %%%s\n", x86_get_regname(reg1),
         x86_get_regname(reg2));
   }
 
@@ -562,11 +562,11 @@ void
 x86_emit_sar_imm_reg (OrcProgram *program, int size, int value, int reg)
 {
   if (size == 2) {
-    printf("  sarw $%d, %%%s\n", value, x86_get_regname_16(reg));
+    ORC_ASM_CODE(program,"  sarw $%d, %%%s\n", value, x86_get_regname_16(reg));
   } else if (size == 4) {
-    printf("  sarl $%d, %%%s\n", value, x86_get_regname(reg));
+    ORC_ASM_CODE(program,"  sarl $%d, %%%s\n", value, x86_get_regname(reg));
   } else {
-    printf("  sar $%d, %%%s\n", value, x86_get_regname_64(reg));
+    ORC_ASM_CODE(program,"  sar $%d, %%%s\n", value, x86_get_regname_64(reg));
   }
 
   x86_emit_rex(program, size, reg, 0, 0);
@@ -585,14 +585,14 @@ x86_emit_and_imm_memoffset (OrcProgram *program, int size, int value,
     int offset, int reg)
 {
   if (size == 2) {
-    printf("  andw $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  andw $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  andl $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  andl $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   } else {
-    printf("  and $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  and $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   }
 
@@ -619,12 +619,12 @@ void
 x86_emit_and_imm_reg (OrcProgram *program, int size, int value, int reg)
 {
   if (size == 2) {
-    printf("  andw $%d, %%%s\n", value, x86_get_regname_16(reg));
+    ORC_ASM_CODE(program,"  andw $%d, %%%s\n", value, x86_get_regname_16(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  andl $%d, %%%s\n", value, x86_get_regname(reg));
+    ORC_ASM_CODE(program,"  andl $%d, %%%s\n", value, x86_get_regname(reg));
   } else {
-    printf("  and $%d, %%%s\n", value, x86_get_regname_64(reg));
+    ORC_ASM_CODE(program,"  and $%d, %%%s\n", value, x86_get_regname_64(reg));
   }
 
   x86_emit_rex(program, size, 0, 0, reg);
@@ -649,14 +649,14 @@ x86_emit_add_imm_memoffset (OrcProgram *program, int size, int value,
     int offset, int reg)
 {
   if (size == 2) {
-    printf("  addw $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  addw $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  addl $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  addl $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   } else {
-    printf("  add $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  add $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   }
 
@@ -681,12 +681,12 @@ void
 x86_emit_add_imm_reg (OrcProgram *program, int size, int value, int reg)
 {
   if (size == 2) {
-    printf("  addw $%d, %%%s\n", value, x86_get_regname_16(reg));
+    ORC_ASM_CODE(program,"  addw $%d, %%%s\n", value, x86_get_regname_16(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  addl $%d, %%%s\n", value, x86_get_regname(reg));
+    ORC_ASM_CODE(program,"  addl $%d, %%%s\n", value, x86_get_regname(reg));
   } else {
-    printf("  add $%d, %%%s\n", value, x86_get_regname_64(reg));
+    ORC_ASM_CODE(program,"  add $%d, %%%s\n", value, x86_get_regname_64(reg));
   }
 
   x86_emit_rex(program, size, 0, 0, reg);
@@ -710,14 +710,14 @@ void
 x86_emit_sub_reg_reg (OrcProgram *program, int size, int reg1, int reg2)
 {
   if (size == 2) {
-    printf("  subw %%%s, %%%s\n", x86_get_regname_16(reg1),
+    ORC_ASM_CODE(program,"  subw %%%s, %%%s\n", x86_get_regname_16(reg1),
         x86_get_regname_16(reg2));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  subl %%%s, %%%s\n", x86_get_regname(reg1),
+    ORC_ASM_CODE(program,"  subl %%%s, %%%s\n", x86_get_regname(reg1),
         x86_get_regname(reg2));
   } else {
-    printf("  sub %%%s, %%%s\n", x86_get_regname_64(reg1),
+    ORC_ASM_CODE(program,"  sub %%%s, %%%s\n", x86_get_regname_64(reg1),
         x86_get_regname_64(reg2));
   }
 
@@ -731,16 +731,16 @@ x86_emit_sub_memoffset_reg (OrcProgram *program, int size,
     int offset, int reg, int destreg)
 {
   if (size == 2) {
-    printf("  subw %d(%%%s), %%%s\n", offset,
+    ORC_ASM_CODE(program,"  subw %d(%%%s), %%%s\n", offset,
         x86_get_regname_ptr(reg),
         x86_get_regname_16(destreg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  subl %d(%%%s), %%%s\n", offset,
+    ORC_ASM_CODE(program,"  subl %d(%%%s), %%%s\n", offset,
         x86_get_regname_ptr(reg),
         x86_get_regname(destreg));
   } else {
-    printf("  sub %d(%%%s), %%%s\n", offset,
+    ORC_ASM_CODE(program,"  sub %d(%%%s), %%%s\n", offset,
         x86_get_regname_ptr(reg),
         x86_get_regname_64(destreg));
   }
@@ -755,14 +755,14 @@ x86_emit_cmp_reg_memoffset (OrcProgram *program, int size, int reg1,
     int offset, int reg)
 {
   if (size == 2) {
-    printf("  cmpw %%%s, %d(%%%s)\n", x86_get_regname_16(reg1), offset,
+    ORC_ASM_CODE(program,"  cmpw %%%s, %d(%%%s)\n", x86_get_regname_16(reg1), offset,
         x86_get_regname_ptr(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  cmpl %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
+    ORC_ASM_CODE(program,"  cmpl %%%s, %d(%%%s)\n", x86_get_regname(reg1), offset,
         x86_get_regname_ptr(reg));
   } else {
-    printf("  cmp %%%s, %d(%%%s)\n", x86_get_regname_64(reg1), offset,
+    ORC_ASM_CODE(program,"  cmp %%%s, %d(%%%s)\n", x86_get_regname_64(reg1), offset,
         x86_get_regname_ptr(reg));
   }
 
@@ -776,14 +776,14 @@ x86_emit_cmp_imm_memoffset (OrcProgram *program, int size, int value,
     int offset, int reg)
 {
   if (size == 2) {
-    printf("  cmpw $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  cmpw $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  cmpl $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  cmpl $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   } else {
-    printf("  cmp $%d, %d(%%%s)\n", value, offset,
+    ORC_ASM_CODE(program,"  cmp $%d, %d(%%%s)\n", value, offset,
         x86_get_regname_ptr(reg));
   }
 
@@ -809,12 +809,12 @@ x86_emit_dec_memoffset (OrcProgram *program, int size,
     int offset, int reg)
 {
   if (size == 2) {
-    printf("  decw %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
+    ORC_ASM_CODE(program,"  decw %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
     *program->codeptr++ = 0x66;
   } else if (size == 4) {
-    printf("  decl %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
+    ORC_ASM_CODE(program,"  decl %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
   } else {
-    printf("  dec %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
+    ORC_ASM_CODE(program,"  dec %d(%%%s)\n", offset, x86_get_regname_ptr(reg));
   }
 
   x86_emit_rex(program, size, 0, 0, reg);
@@ -825,16 +825,16 @@ x86_emit_dec_memoffset (OrcProgram *program, int size,
 void x86_emit_ret (OrcProgram *program)
 {
   if (x86_64) {
-    printf("  retq\n");
+    ORC_ASM_CODE(program,"  retq\n");
   } else {
-    printf("  ret\n");
+    ORC_ASM_CODE(program,"  ret\n");
   }
   *program->codeptr++ = 0xc3;
 }
 
 void x86_emit_emms (OrcProgram *program)
 {
-  printf("  emms\n");
+  ORC_ASM_CODE(program,"  emms\n");
   *program->codeptr++ = 0x0f;
   *program->codeptr++ = 0x77;
 }
@@ -856,10 +856,10 @@ x86_add_label (OrcProgram *program, unsigned char *ptr, int label)
 
 void x86_emit_jmp (OrcProgram *program, int label)
 {
-  printf("  jmp .L%d\n", label);
+  ORC_ASM_CODE(program,"  jmp .L%d\n", label);
 
   if (program->long_jumps) {
-    printf("ERROR\n");
+    ORC_PROGRAM_ERROR(program, "unimplemented");
   } else {
     *program->codeptr++ = 0xeb;
     x86_add_fixup (program, program->codeptr, label, 0);
@@ -869,10 +869,10 @@ void x86_emit_jmp (OrcProgram *program, int label)
 
 void x86_emit_jle (OrcProgram *program, int label)
 {
-  printf("  jle .L%d\n", label);
+  ORC_ASM_CODE(program,"  jle .L%d\n", label);
 
   if (program->long_jumps) {
-    printf("ERROR\n");
+    ORC_PROGRAM_ERROR(program, "unimplemented");
   } else {
     *program->codeptr++ = 0x7e;
     x86_add_fixup (program, program->codeptr, label, 0);
@@ -882,7 +882,7 @@ void x86_emit_jle (OrcProgram *program, int label)
 
 void x86_emit_je (OrcProgram *program, int label)
 {
-  printf("  je .L%d\n", label);
+  ORC_ASM_CODE(program,"  je .L%d\n", label);
 
   if (program->long_jumps) {
     *program->codeptr++ = 0x0f;
@@ -901,7 +901,7 @@ void x86_emit_je (OrcProgram *program, int label)
 
 void x86_emit_jne (OrcProgram *program, int label)
 {
-  printf("  jne .L%d\n", label);
+  ORC_ASM_CODE(program,"  jne .L%d\n", label);
 
   if (program->long_jumps) {
     *program->codeptr++ = 0x0f;
@@ -920,7 +920,7 @@ void x86_emit_jne (OrcProgram *program, int label)
 
 void x86_emit_label (OrcProgram *program, int label)
 {
-  printf(".L%d:\n", label);
+  ORC_ASM_CODE(program,".L%d:\n", label);
 
   x86_add_label (program, program->codeptr, label);
 }
@@ -1015,7 +1015,7 @@ x86_emit_align (OrcProgram *program)
 
   diff = (program->code - program->codeptr)&((1<<align_shift) - 1);
   while (diff) {
-    printf("  nop\n");
+    ORC_ASM_CODE(program,"  nop\n");
     *program->codeptr++ = 0x90;
     diff--;
   }