void
arm_emit_bx_lr (OrcProgram *program)
{
- printf(" bx lr\n");
+ ORC_ASM_CODE(program," bx lr\n");
arm_emit (program, 0xe12fff1e);
}
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);
}
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);
}
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);
}
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;
}
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
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);
}
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));
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));
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);
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);
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);
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),
//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);
}
}
// var->is_aligned, var->is_uncached);
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program, "bad size %d\n", var->size << program->loop_shift);
}
}
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;
}
- 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");
}
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
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
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
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
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
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);
}
#include <sys/mman.h>
#include <orc/orcprogram.h>
+#include <orc/orcdebug.h>
#define SIZE 65536
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;
}
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;
}
#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
(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:
x86_emit_mov_memoffset_mmx (program, 8, 0, ptr_reg, var->alloc);
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program, "bad size");
}
}
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);
x86_emit_mov_mmx_memoffset (program, 8, var->alloc, 0, ptr_reg);
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program, "unimplemented");
}
}
{
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);
{
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);
{
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);
{
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);
{
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);
}
powerpc_emit_addi (program, POWERPC_R1, POWERPC_R1, 16);
- printf(" blr\n");
+ ORC_ASM_CODE(program," blr\n");
powerpc_emit(program, 0x4e800020);
}
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,
(int)ORC_STRUCT_OFFSET(OrcExecutor, arrays[i]));
} else {
/* FIXME */
- printf("ERROR");
+ ORC_ASM_CODE(program,"ERROR");
}
break;
default:
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),
powerpc_regnum(POWERPC_V0), 43);
break;
default:
- printf("ERROR\n");
+ ORC_ASM_CODE(program,"ERROR\n");
}
}
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),
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,
0, powerpc_regnum(ptr_reg), 167);
break;
default:
- printf("ERROR\n");
+ ORC_ASM_CODE(program,"ERROR\n");
}
}
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);
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) {
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++){
program->vars[k].ptr_register,
program->vars[k].size << program->loop_shift);
} else {
- printf("ERROR\n");
+ ORC_ASM_CODE(program,"ERROR\n");
}
}
}
{
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));
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));
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));
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),
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));
{
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));
void powerpc_emit_ret (OrcProgram *program)
{
- printf(" ret\n");
+ ORC_ASM_CODE(program," ret\n");
//*program->codeptr++ = 0xc3;
}
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);
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);
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);
}
(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:
x86_emit_mov_memoffset_sse (program, 16, 0, ptr_reg, var->alloc);
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program,"unimplemented");
+ break;
}
}
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);
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);
var->is_aligned, var->is_uncached);
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program,"bad size");
+ break;
}
}
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) {
}
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;
}
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;
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;
}
}
- ORC_ERROR("can't find dest");
+ ORC_PROGRAM_ERROR(program, "failed to find destination array");
return -1;
}
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);
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);
}
}
- printf("register overflow\n");
+ ORC_ERROR ("register overflow");
return 0;
}
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;
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;
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;
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);
}
}
-#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
}
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;
#define ORC_STRUCT_OFFSET(struct_type, member) \
((long) ((unsigned int *) &((struct_type*) 0)->member))
-
#ifndef TRUE
#define TRUE 1
#endif
#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,
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);
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);
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));
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));
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));
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));
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;
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;
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;
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;
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;
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));
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));
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));
} 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));
(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));
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");
}
}
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));
} 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));
(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));
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));
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;
{
/* 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));
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;
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));
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;
#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;
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));
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));
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));
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));
*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));
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));
*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));
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;
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;
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;
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;
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;
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));
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));
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));
} 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));
(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));
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");
}
}
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));
} 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));
(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));
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));
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;
{
/* 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));
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;
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));
case 1:
return "direct";
default:
- printf("register %d\n", i);
return "ERROR";
}
}
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);
}
}
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);
}
}
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;
}
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;
{
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);
*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);
*program->codeptr++ = 0x6f;
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program, "bad size");
break;
}
x86_emit_modrm_memoffset (program, reg2, offset, reg1);
{
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;
}
{
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;
{
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);
*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);
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;
}
break;
default:
- printf("ERROR\n");
+ ORC_PROGRAM_ERROR(program, "bad size");
+ break;
}
x86_emit_modrm_memoffset (program, reg1, offset, reg2);
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);
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));
}
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;
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);
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;
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;
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);
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);
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));
}
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);
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));
}
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);
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));
}
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);
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));
}
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));
}
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));
}
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));
}
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);
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;
}
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);
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);
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;
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;
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);
}
diff = (program->code - program->codeptr)&((1<<align_shift) - 1);
while (diff) {
- printf(" nop\n");
+ ORC_ASM_CODE(program," nop\n");
*program->codeptr++ = 0x90;
diff--;
}