31
32 // Inline functions for AArch64 frames:
33
34 // Constructors:
35
36 inline frame::frame() {
37 _pc = NULL;
38 _sp = NULL;
39 _unextended_sp = NULL;
40 _fp = NULL;
41 _cb = NULL;
42 _deopt_state = unknown;
43 }
44
45 static int spin;
46
47 inline void frame::init(intptr_t* sp, intptr_t* fp, address pc) {
48 intptr_t a = intptr_t(sp);
49 intptr_t b = intptr_t(fp);
50 #ifndef PRODUCT
51 if (fp)
52 if (sp > fp || (fp - sp > 0x100000))
53 for(;;)
54 asm("nop");
55 #endif
56 _sp = sp;
57 _unextended_sp = sp;
58 _fp = fp;
59 _pc = pc;
60 assert(pc != NULL, "no pc?");
61 _cb = CodeCache::find_blob(pc);
62 adjust_unextended_sp();
63
64 address original_pc = nmethod::get_deopt_original_pc(this);
65 if (original_pc != NULL) {
66 _pc = original_pc;
67 _deopt_state = is_deoptimized;
68 } else {
69 _deopt_state = not_deoptimized;
70 }
71 }
72
73 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
74 init(sp, fp, pc);
75 }
76
77 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
78 intptr_t a = intptr_t(sp);
79 intptr_t b = intptr_t(fp);
80 #ifndef PRODUCT
81 if (fp)
82 if (sp > fp || (fp - sp > 0x100000))
83 for(;;)
84 asm("nop");
85 #endif
86 _sp = sp;
87 _unextended_sp = unextended_sp;
88 _fp = fp;
89 _pc = pc;
90 assert(pc != NULL, "no pc?");
91 _cb = CodeCache::find_blob(pc);
92 adjust_unextended_sp();
93
94 address original_pc = nmethod::get_deopt_original_pc(this);
95 if (original_pc != NULL) {
96 _pc = original_pc;
97 assert(((nmethod*)_cb)->insts_contains(_pc), "original PC must be in nmethod");
98 _deopt_state = is_deoptimized;
99 } else {
100 _deopt_state = not_deoptimized;
101 }
|
31
32 // Inline functions for AArch64 frames:
33
34 // Constructors:
35
36 inline frame::frame() {
37 _pc = NULL;
38 _sp = NULL;
39 _unextended_sp = NULL;
40 _fp = NULL;
41 _cb = NULL;
42 _deopt_state = unknown;
43 }
44
45 static int spin;
46
47 inline void frame::init(intptr_t* sp, intptr_t* fp, address pc) {
48 intptr_t a = intptr_t(sp);
49 intptr_t b = intptr_t(fp);
50 #ifndef PRODUCT
51 if (fp && FramePointer)
52 if (sp > fp || (fp - sp > 0x100000))
53 for(;;)
54 asm("nop");
55 #endif
56 _sp = sp;
57 _unextended_sp = sp;
58 _fp = fp;
59 _pc = pc;
60 assert(pc != NULL, "no pc?");
61 _cb = CodeCache::find_blob(pc);
62 adjust_unextended_sp();
63
64 address original_pc = nmethod::get_deopt_original_pc(this);
65 if (original_pc != NULL) {
66 _pc = original_pc;
67 _deopt_state = is_deoptimized;
68 } else {
69 _deopt_state = not_deoptimized;
70 }
71 }
72
73 inline frame::frame(intptr_t* sp, intptr_t* fp, address pc) {
74 init(sp, fp, pc);
75 }
76
77 inline frame::frame(intptr_t* sp, intptr_t* unextended_sp, intptr_t* fp, address pc) {
78 intptr_t a = intptr_t(sp);
79 intptr_t b = intptr_t(fp);
80 #ifndef PRODUCT
81 if (fp && FramePointer)
82 if (sp > fp || (fp - sp > 0x100000))
83 for(;;)
84 asm("nop");
85 #endif
86 _sp = sp;
87 _unextended_sp = unextended_sp;
88 _fp = fp;
89 _pc = pc;
90 assert(pc != NULL, "no pc?");
91 _cb = CodeCache::find_blob(pc);
92 adjust_unextended_sp();
93
94 address original_pc = nmethod::get_deopt_original_pc(this);
95 if (original_pc != NULL) {
96 _pc = original_pc;
97 assert(((nmethod*)_cb)->insts_contains(_pc), "original PC must be in nmethod");
98 _deopt_state = is_deoptimized;
99 } else {
100 _deopt_state = not_deoptimized;
101 }
|