Bug 518227 - TM: spilled quads are passed incorrectly when calling a function [ARM, nanojit] r=graydon

This commit is contained in:
Andreas Gal :gal 2009-10-06 14:31:44 -07:00
Родитель 55b39bb071
Коммит 8f38a92804
2 изменённых файлов: 2 добавлений и 22 удалений

Просмотреть файл

@ -795,9 +795,9 @@ Assembler::asm_stkarg(LInsp arg, int stkd)
NanoAssert((stkd & 7) == 0);
#endif
STR_preindex(IP, SP, stkd+4);
STR(IP, SP, stkd+4);
LDR(IP, FP, d+4);
STR_preindex(IP, SP, stkd);
STR(IP, SP, stkd);
LDR(IP, FP, d);
}
}

Просмотреть файл

@ -602,26 +602,6 @@ enum {
asm_output("str %s, [%s, #%d]", gpn(_d), gpn(_n), (_off)); \
} while(0)
// Rd += _off; [Rd] = Rn
#define STR_preindex(_d,_n,_off) do { \
NanoAssert(IsGpReg(_d) && IsGpReg(_n)); \
NanoAssert(isS12(_off)); \
underrunProtect(4); \
if ((_off)<0) *(--_nIns) = (NIns)( COND_AL | (0x52<<20) | ((_n)<<16) | ((_d)<<12) | ((-(_off))&0xFFF) ); \
else *(--_nIns) = (NIns)( COND_AL | (0x5A<<20) | ((_n)<<16) | ((_d)<<12) | ((_off)&0xFFF) ); \
asm_output("str %s, [%s, #%d]!", gpn(_d), gpn(_n), (_off)); \
} while(0)
// [Rd] = Rn ; Rd += _off
#define STR_postindex(_d,_n,_off) do { \
NanoAssert(IsGpReg(_d) && IsGpReg(_n)); \
NanoAssert(isS12(_off)); \
underrunProtect(4); \
if ((_off)<0) *(--_nIns) = (NIns)( COND_AL | (0x40<<20) | ((_n)<<16) | ((_d)<<12) | ((-(_off))&0xFFF) ); \
else *(--_nIns) = (NIns)( COND_AL | (0x48<<20) | ((_n)<<16) | ((_d)<<12) | ((_off)&0xFFF) ); \
asm_output("str %s, [%s]!, %d", gpn(_d), gpn(_n), (_off)); \
} while(0)
// Encode a breakpoint. The ID is not important and is ignored by the
// processor, but it can be useful as a marker when debugging emitted code.
#define BKPT_insn ((NIns)( COND_AL | (0x12<<20) | (0x7<<4) ))