comparison 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
comparison
equal deleted inserted replaced
1443:1b7acf75f900 1444:c0e244017dad
25 # include "incls/_precompiled.incl" 25 # include "incls/_precompiled.incl"
26 # include "incls/_c1x_CodeInstaller.cpp.incl" 26 # include "incls/_c1x_CodeInstaller.cpp.incl"
27 27
28 28
29 // TODO this should be handled in a more robust way - not hard coded... 29 // TODO this should be handled in a more robust way - not hard coded...
30 Register CPU_REGS[] = { rax, rbx, rcx, rdx, rsi, rdi, r8, r9, r11, r12, r13, r14 }; 30 Register CPU_REGS[] = { rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15 };
31 bool OOP_ALLOWED[] = {true, true, true, true, false, false, true, true, true, true, false, true, true, true, true, true};
31 const static int NUM_CPU_REGS = sizeof(CPU_REGS) / sizeof(Register); 32 const static int NUM_CPU_REGS = sizeof(CPU_REGS) / sizeof(Register);
32 XMMRegister XMM_REGS[] = { xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15 }; 33 XMMRegister XMM_REGS[] = { xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8, xmm9, xmm10, xmm11, xmm12, xmm13, xmm14, xmm15 };
33 const static int NUM_XMM_REGS = sizeof(XMM_REGS) / sizeof(XMMRegister); 34 const static int NUM_XMM_REGS = sizeof(XMM_REGS) / sizeof(XMMRegister);
34 const static int NUM_REGS = NUM_CPU_REGS + NUM_XMM_REGS; 35 const static int NUM_REGS = NUM_CPU_REGS + NUM_XMM_REGS;
35 36
50 arrayOop register_map = (arrayOop) CiDebugInfo::registerRefMap(debug_info); 51 arrayOop register_map = (arrayOop) CiDebugInfo::registerRefMap(debug_info);
51 arrayOop frame_map = (arrayOop) CiDebugInfo::frameRefMap(debug_info); 52 arrayOop frame_map = (arrayOop) CiDebugInfo::frameRefMap(debug_info);
52 53
53 assert(register_map->length() == (NUM_CPU_REGS + 7) / 8, "unexpected register_map length"); 54 assert(register_map->length() == (NUM_CPU_REGS + 7) / 8, "unexpected register_map length");
54 55
55 for (jint i = 0; i < NUM_REGS; i++) { 56 for (jint i = 0; i < NUM_CPU_REGS; i++) {
56 unsigned char byte = ((unsigned char*) register_map->base(T_BYTE))[i / 8]; 57 unsigned char byte = ((unsigned char*) register_map->base(T_BYTE))[i / 8];
57 bool is_oop = (byte & (1 << (i % 8))) != 0; 58 bool is_oop = (byte & (1 << (i % 8))) != 0;
58 VMReg reg = get_hotspot_reg(i); 59 VMReg reg = get_hotspot_reg(i);
59 if (is_oop) { 60 if (is_oop) {
61 assert(OOP_ALLOWED[i], "this register may never be an oop, register map misaligned?");
60 map->set_oop(reg); 62 map->set_oop(reg);
61 } else { 63 } else {
62 map->set_value(reg); 64 map->set_value(reg);
63 } 65 }
64 } 66 }