Mercurial > hg > truffle
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 } |