Mercurial > hg > truffle
diff src/share/vm/c1x/c1x_CodeInstaller.cpp @ 1444:c0e244017dad
Corrections of oop map generation.
author | Thomas Wuerthinger <wuerthinger@ssw.jku.at> |
---|---|
date | Tue, 09 Nov 2010 12:30:21 +0100 |
parents | f8ab19e5acae |
children | 1afbc44ee576 8cfe3537a0d3 |
line wrap: on
line diff
--- a/src/share/vm/c1x/c1x_CodeInstaller.cpp Thu Nov 04 15:34:50 2010 +0100 +++ b/src/share/vm/c1x/c1x_CodeInstaller.cpp Tue Nov 09 12:30:21 2010 +0100 @@ -27,7 +27,8 @@ // TODO this should be handled in a more robust way - not hard coded... -Register CPU_REGS[] = { rax, rbx, rcx, rdx, rsi, rdi, r8, r9, r11, r12, r13, r14 }; +Register CPU_REGS[] = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15 }; +bool OOP_ALLOWED[] = {true, true, true, true, false, false, true, true, true, true, false, true, true, true, true, true}; const static int NUM_CPU_REGS = sizeof(CPU_REGS) / sizeof(Register); XMMRegister XMM_REGS[] = { xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15 }; const static int NUM_XMM_REGS = sizeof(XMM_REGS) / sizeof(XMMRegister); @@ -52,11 +53,12 @@ assert(register_map->length() == (NUM_CPU_REGS + 7) / 8, "unexpected register_map length"); - for (jint i = 0; i < NUM_REGS; i++) { + for (jint i = 0; i < NUM_CPU_REGS; i++) { unsigned char byte = ((unsigned char*) register_map->base(T_BYTE))[i / 8]; bool is_oop = (byte & (1 << (i % 8))) != 0; VMReg reg = get_hotspot_reg(i); if (is_oop) { + assert(OOP_ALLOWED[i], "this register may never be an oop, register map misaligned?"); map->set_oop(reg); } else { map->set_value(reg);