From 3080bbd773ccab10f0ea0f9d7f1e07d22f98013c Mon Sep 17 00:00:00 2001 From: David Schleef Date: Thu, 12 Mar 2009 21:40:47 -0700 Subject: [PATCH] Convert printf's to errors and asm code --- orc/arm.c | 40 +++++------ orc/orcprogram-arm.c | 4 +- orc/orcprogram-c.c | 44 ++++++------- orc/orcprogram-linux.c | 7 +- orc/orcprogram-mmx.c | 12 ++-- orc/orcprogram-powerpc.c | 68 +++++++++---------- orc/orcprogram-sse.c | 23 +++---- orc/orcprogram.c | 71 ++++---------------- orc/orcprogram.h | 13 +++- orc/orcrules-arm.c | 60 ++++++++--------- orc/orcrules-mmx.c | 22 +++---- orc/orcrules-sse.c | 48 +++++++------- orc/x86.c | 168 +++++++++++++++++++++++------------------------ 13 files changed, 273 insertions(+), 307 deletions(-) diff --git a/orc/arm.c b/orc/arm.c index 1428449..1adb1ea 100644 --- 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<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), diff --git a/orc/orcprogram-arm.c b/orc/orcprogram-arm.c index 97f6aaa..8bde93c 100644 --- a/orc/orcprogram-arm.c +++ b/orc/orcprogram-arm.c @@ -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); } } diff --git a/orc/orcprogram-c.c b/orc/orcprogram-c.c index 292ad79..6f93747 100644 --- a/orc/orcprogram-c.c +++ b/orc/orcprogram-c.c @@ -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;in_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;jn_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); } diff --git a/orc/orcprogram-linux.c b/orc/orcprogram-linux.c index bb23483..2a4fc14 100644 --- a/orc/orcprogram-linux.c +++ b/orc/orcprogram-linux.c @@ -10,6 +10,7 @@ #include #include +#include #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; } diff --git a/orc/orcprogram-mmx.c b/orc/orcprogram-mmx.c index aa61c82..c5057d0 100644 --- a/orc/orcprogram-mmx.c +++ b/orc/orcprogram-mmx.c @@ -8,7 +8,8 @@ #include #include -#include +#include +#include #include #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"); } } diff --git a/orc/orcprogram-powerpc.c b/orc/orcprogram-powerpc.c index 2e6ef42..bdf603d 100644 --- a/orc/orcprogram-powerpc.c +++ b/orc/orcprogram-powerpc.c @@ -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;in_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;kn_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;kn_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;kn_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); } diff --git a/orc/orcprogram-sse.c b/orc/orcprogram-sse.c index acb6c4d..9c4e2a9 100644 --- a/orc/orcprogram-sse.c +++ b/orc/orcprogram-sse.c @@ -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;kn_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;kn_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; } diff --git a/orc/orcprogram.c b/orc/orcprogram.c index ec24a3b..10c4eff 100644 --- a/orc/orcprogram.c +++ b/orc/orcprogram.c @@ -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;kn_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;in_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;in_insns;i++){ - insn = program->insns + i; - opcode = insn->opcode; - - printf("insn: %d\n", i); - printf(" opcode: %s\n", opcode->name); - - for(j=0;jn_dest;j++){ - printf(" dest%d: %d %s\n", j, insn->args[j], - program->vars[insn->args[j]].name); - } - for(j=0;jn_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;in_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; diff --git a/orc/orcprogram.h b/orc/orcprogram.h index 120cbb1..003b8ea 100644 --- a/orc/orcprogram.h +++ b/orc/orcprogram.h @@ -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, diff --git a/orc/orcrules-arm.c b/orc/orcrules-arm.c index f4075a3..a2b9e83 100644 --- a/orc/orcrules-arm.c +++ b/orc/orcrules-arm.c @@ -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)); diff --git a/orc/orcrules-mmx.c b/orc/orcrules-mmx.c index 2fce71b..9d82835 100644 --- a/orc/orcrules-mmx.c +++ b/orc/orcrules-mmx.c @@ -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)); diff --git a/orc/orcrules-sse.c b/orc/orcrules-sse.c index ce2b4f0..5359d30 100644 --- a/orc/orcrules-sse.c +++ b/orc/orcrules-sse.c @@ -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)); diff --git a/orc/x86.c b/orc/x86.c index 32283dd..8a5fb86 100644 --- 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<codeptr++ = 0x90; diff--; } -- 2.7.4