< prev index next >

src/cpu/aarch64/vm/frame_aarch64.inline.hpp

Print this page
rev 8013 : Add aarch64 support for FramePointer


  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   }


< prev index next >