Mercurial > hg > truffle
comparison src/gpu/hsail/vm/gpu_hsail_Frame.hpp @ 15482:a250a512434d
HSAIL: support for object values in stack slots at deoptimization points
Contributed-by: Tom Deneau <tom.deneau@amd.com>
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Fri, 02 May 2014 21:58:28 +0200 |
parents | 3e9a960f0da1 |
children | 217c721b1ee1 |
comparison
equal
deleted
inserted
replaced
15481:09d721bcffe2 | 15482:a250a512434d |
---|---|
3 | 3 |
4 #include "graal/graalEnv.hpp" | 4 #include "graal/graalEnv.hpp" |
5 #include "code/debugInfo.hpp" | 5 #include "code/debugInfo.hpp" |
6 #include "code/location.hpp" | 6 #include "code/location.hpp" |
7 | 7 |
8 // maximum registers that could be saved for now | |
9 #define MAX_SREGS 32 | |
10 #define MAX_DREGS 16 | |
11 | |
12 class HSAILFrame { | 8 class HSAILFrame { |
13 friend class VMStructs; | 9 friend class VMStructs; |
14 private: | 10 private: |
15 jint _pc_offset; // The HSAIL "pc_offset" where the exception happens | 11 jint _pc_offset; // The HSAIL "pc_offset" where the exception happens |
16 jbyte _num_s_regs; | 12 jbyte _num_s_regs; |
17 jbyte _num_d_regs; | 13 jbyte _num_d_regs; |
18 jshort _dreg_oops_map; // bits = 1 if that dreg is an oop | 14 jshort _num_stack_slots; |
19 jlong _save_area[MAX_SREGS/2 + MAX_DREGS]; | 15 jbyte _save_area[0]; // save area size can vary per kernel compilation |
20 | 16 |
21 public: | 17 public: |
22 // Accessors | 18 // Accessors |
23 jint pc_offset() { return _pc_offset; } | 19 jint pc_offset() { return _pc_offset; } |
24 jint num_s_regs() {return _num_s_regs; } | 20 jint num_s_regs() {return _num_s_regs; } |
25 jint num_d_regs() {return _num_d_regs; } | 21 jint num_d_regs() {return _num_d_regs; } |
26 jint dreg_oops_map() {return _dreg_oops_map; } | 22 jint num_stack_slots() {return _num_stack_slots; } |
27 jlong get_d_reg(int idx) { | 23 jlong get_d_reg(int idx) { |
28 char *p = (char *) _save_area; | |
29 int ofst = num_s_regs() * 4 + idx * 8; | 24 int ofst = num_s_regs() * 4 + idx * 8; |
30 return(*(jlong *) (p + ofst)); | 25 return(*(jlong *) (_save_area + ofst)); |
31 } | 26 } |
32 jint get_s_reg(int idx) { | 27 jint get_s_reg(int idx) { |
33 char *p = (char *) _save_area; | |
34 int ofst = idx * 4; | 28 int ofst = idx * 4; |
35 return(*(jint *) (p + ofst)); | 29 return(*(jint *) (_save_area + ofst)); |
36 } | 30 } |
37 void put_d_reg(int idx, jlong val) { | 31 void put_d_reg(int idx, jlong val) { |
38 char *p = (char *) _save_area; | |
39 int ofst = num_s_regs() * 4 + idx * 8; | 32 int ofst = num_s_regs() * 4 + idx * 8; |
40 (*(jlong *) (p + ofst)) = val; | 33 (*(jlong *) (_save_area + ofst)) = val; |
34 } | |
35 jint get_stackslot32(int stackOffset) { | |
36 int ofst = num_s_regs() * 4 + num_d_regs() * 8 + stackOffset; | |
37 return(*(jint *) (_save_area + ofst)); | |
38 } | |
39 jlong get_stackslot64(int stackOffset) { | |
40 int ofst = num_s_regs() * 4 + num_d_regs() * 8 + stackOffset; | |
41 return(*(jlong *) (_save_area + ofst)); | |
42 } | |
43 void put_stackslot64(int stackOffset, jlong val) { | |
44 int ofst = num_s_regs() * 4 + num_d_regs() * 8 + stackOffset; | |
45 (*(jlong *) (_save_area + ofst)) = val; | |
41 } | 46 } |
42 }; | 47 }; |
43 | 48 |
44 #endif // GPU_HSAIL_FRAME_HPP | 49 #endif // GPU_HSAIL_FRAME_HPP |