compiler->used_regs[i] = 0;
}
- compiler->gp_tmpreg = X86_ECX;
- compiler->valid_regs[compiler->gp_tmpreg] = 0;
-
if (compiler->is_64bit) {
#ifdef HAVE_OS_WIN32
compiler->exec_reg = X86_ECX;
- compiler->gp_tmpreg = X86_EAX;
+ compiler->gp_tmpreg = X86_EDX;
#else
compiler->exec_reg = X86_EDI;
+ compiler->gp_tmpreg = X86_ECX;
#endif
} else {
+ compiler->gp_tmpreg = X86_ECX;
if (compiler->use_frame_pointer) {
compiler->exec_reg = X86_EBX;
} else {
compiler->exec_reg = X86_EBP;
}
}
+ compiler->valid_regs[compiler->gp_tmpreg] = 0;
compiler->valid_regs[compiler->exec_reg] = 0;
switch (orc_program_get_max_var_size (compiler->program)) {
stackframe = 32 + 2*regsize;
stackframe = (stackframe + 0xf) & (~0xf);
+ if (p->exec_ptr == X86_ECX) {
+ ORC_COMPILER_ERROR(compiler, "unimplemented");
+ return;
+ }
+
orc_x86_emit_add_imm_reg (p, regsize, -stackframe, X86_ESP, FALSE);
orc_x86_emit_mov_sse_memoffset (p, 16, p->vars[insn->src_args[0]].alloc,
0, X86_ESP, FALSE, FALSE);
16, X86_ESP, FALSE, FALSE);
for(i=0;i<(1<<p->loop_shift);i++) {
- orc_x86_emit_mov_memoffset_reg (p, 4, 4*i, X86_ESP, X86_ECX);
- orc_x86_emit_imul_memoffset_reg (p, 4, 16+4*i, X86_ESP, X86_ECX);
- orc_x86_emit_mov_reg_memoffset (p, 4, X86_ECX, 4*i, X86_ESP);
+ orc_x86_emit_mov_memoffset_reg (p, 4, 4*i, X86_ESP, p->gp_tmpreg);
+ orc_x86_emit_imul_memoffset_reg (p, 4, 16+4*i, X86_ESP, p->gp_tmpreg);
+ orc_x86_emit_mov_reg_memoffset (p, 4, p->gp_tmpreg, 4*i, X86_ESP);
}
orc_x86_emit_mov_memoffset_sse (p, 16, 0, X86_ESP,