mklabel.sh \
jit-rules-alpha.ins \
jit-rules-arm.sel \
- jit-rules-x86.ins \
- jit-rules-x86.sel
+ jit-rules-x86.ins
AM_CFLAGS = -I$(top_srcdir)/include -I$(top_builddir)/include -I. -I$(srcdir)
$(top_srcdir)/include/jit/jit-opcode.h \
$(top_srcdir)/jit/jit-interp.h >jit-interp-labels.h
-jit-rules-x86.lo: jit-rules-x86.slc jit-rules-x86.inc
-
-jit-rules-x86.slc: jit-rules-x86.sel $(top_builddir)/tools/gen-sel$(EXEEXT)
- $(top_builddir)/tools/gen-sel$(EXEEXT) $(srcdir)/jit-rules-x86.sel \
- >jit-rules-x86.slc
+jit-rules-x86.lo: jit-rules-x86.inc
jit-rules-x86.inc: jit-rules-x86.ins $(top_builddir)/tools/gen-rules$(EXEEXT)
$(top_builddir)/tools/gen-rules$(EXEEXT) $(srcdir)/jit-rules-x86.ins \
$(top_builddir)/tools/gen-rules$(EXEEXT) $(srcdir)/jit-rules-alpha.ins \
>jit-rules-alpha.inc
-CLEANFILES = jit-interp-labels.h jit-rules-x86.slc jit-rules-arm.slc \
- jit-rules-alpha.slc
+CLEANFILES = \
+ jit-interp-labels.h \
+ jit-rules-alpha.inc \
+ jit-rules-arm.slc \
+ jit-rules-x86.inc
{
switch(opcode)
{
- #define JIT_INCLUDE_SUPPORTED
-#if USE_NEW_REG_ALLOC
- #include "jit-rules-x86.inc"
-#else
- #include "jit-rules-x86.slc"
-#endif
- #undef JIT_INCLUDE_SUPPORTED
+ #define JIT_INCLUDE_SUPPORTED
+ #include "jit-rules-x86.inc"
+ #undef JIT_INCLUDE_SUPPORTED
}
return 0;
}
}
}
-#if !USE_NEW_REG_ALLOC
-/*
- * Widen a byte register.
- */
-static unsigned char *widen_byte(unsigned char *inst, int reg, int isSigned)
-{
- if(reg == X86_EAX || reg == X86_EBX || reg == X86_ECX || reg == X86_EDX)
- {
- x86_widen_reg(inst, reg, reg, isSigned, 0);
- }
- else
- {
- x86_push_reg(inst, X86_EAX);
- x86_mov_reg_reg(inst, X86_EAX, reg, 4);
- x86_widen_reg(inst, reg, X86_EAX, isSigned, 0);
- x86_pop_reg(inst, X86_EAX);
- }
- return inst;
-}
-#endif
-
/*
* Shift the contents of a register.
*/
return inst;
}
-/*
- * Store a byte value to a memindex address.
- */
-static unsigned char *mov_memindex_reg_byte
- (unsigned char *inst, int basereg,
- unsigned offset, int indexreg, int srcreg)
-{
- if(srcreg == X86_EAX || srcreg == X86_EBX ||
- srcreg == X86_ECX || srcreg == X86_EDX)
- {
- x86_mov_memindex_reg(inst, basereg, offset, indexreg,
- 0, srcreg, 1);
- }
- else
- {
- int tempreg;
- if(basereg != X86_EAX && indexreg != X86_EAX)
- {
- tempreg = X86_EAX;
- }
- else if(basereg != X86_ECX && indexreg != X86_ECX)
- {
- tempreg = X86_ECX;
- }
- else
- {
- tempreg = X86_EDX;
- }
- x86_push_reg(inst, tempreg);
- x86_mov_reg_reg(inst, tempreg, srcreg, 4);
- x86_mov_memindex_reg(inst, basereg, offset, indexreg,
- 0, tempreg, 1);
- x86_pop_reg(inst, tempreg);
- }
- return inst;
-}
-
/*
* Throw a builtin exception.
*/
{
switch(insn->opcode)
{
- #define JIT_INCLUDE_RULES
-#if USE_NEW_REG_ALLOC
- #include "jit-rules-x86.inc"
-#else
- #include "jit-rules-x86.slc"
-#endif
- #undef JIT_INCLUDE_RULES
+ #define JIT_INCLUDE_RULES
+ #include "jit-rules-x86.inc"
+ #undef JIT_INCLUDE_RULES
- default:
+ default:
{
fprintf(stderr, "TODO(%x) at %s, %d\n",
- (int)(insn->opcode), __FILE__, (int)__LINE__);
+ (int)(insn->opcode), __FILE__, (int)__LINE__);
}
break;
}
[=frame, imm] -> {
x86_mov_membase_imm(inst, X86_EBP, $1, $2, 1);
}
- [=frame, reg("eax"|"ecx"|"edx"|"edx")] -> {
+ [=frame, reg("eax"|"ecx"|"edx"|"ebx")] -> {
x86_mov_membase_reg(inst, X86_EBP, $1, $2, 1);
}
}
JIT_OP_STORE_ELEMENT_BYTE: ternary
- [reg, reg, reg] -> {
- inst = mov_memindex_reg_byte(inst, $1, 0, $2, $3);
+ [reg, reg, reg("eax"|"ecx"|"edx"|"ebx")] -> {
+ x86_mov_memindex_reg(inst, $1, 0, $2, 0, $3, 1);
}
JIT_OP_STORE_ELEMENT_SHORT: ternary