911 stack_guard_yellow_reserved_disabled,// disabled (temporarily) after stack overflow 912 stack_guard_enabled // enabled 913 }; 914 915 private: 916 917 #if INCLUDE_JVMCI 918 // The _pending_* fields below are used to communicate extra information 919 // from an uncommon trap in JVMCI compiled code to the uncommon trap handler. 920 921 // Communicates the DeoptReason and DeoptAction of the uncommon trap 922 int _pending_deoptimization; 923 924 // Specifies whether the uncommon trap is to bci 0 of a synchronized method 925 // before the monitor has been acquired. 926 bool _pending_monitorenter; 927 928 // Specifies if the DeoptReason for the last uncommon trap was Reason_transfer_to_interpreter 929 bool _pending_transfer_to_interpreter; 930 931 // An object that JVMCI compiled code can use to further describe and 932 // uniquely identify the speculative optimization guarded by the uncommon trap 933 oop _pending_failed_speculation; 934 935 // These fields are mutually exclusive in terms of live ranges. 936 union { 937 // Communicates the pc at which the most recent implicit exception occurred 938 // from the signal handler to a deoptimization stub. 939 address _implicit_exception_pc; 940 941 // Communicates an alternative call target to an i2c stub from a JavaCall . 942 address _alternate_call_target; 943 } _jvmci; 944 945 // Support for high precision, thread sensitive counters in JVMCI compiled code. 946 jlong* _jvmci_counters; 947 948 public: 949 static jlong* _jvmci_old_thread_counters; 950 static void collect_counters(typeArrayOop array); 1299 1300 void set_deopt_compiled_method(CompiledMethod* nm) { _deopt_nmethod = nm; } 1301 CompiledMethod* deopt_compiled_method() { return _deopt_nmethod; } 1302 1303 Method* callee_target() const { return _callee_target; } 1304 void set_callee_target (Method* x) { _callee_target = x; } 1305 1306 // Oop results of vm runtime calls 1307 oop vm_result() const { return _vm_result; } 1308 void set_vm_result (oop x) { _vm_result = x; } 1309 1310 Metadata* vm_result_2() const { return _vm_result_2; } 1311 void set_vm_result_2 (Metadata* x) { _vm_result_2 = x; } 1312 1313 MemRegion deferred_card_mark() const { return _deferred_card_mark; } 1314 void set_deferred_card_mark(MemRegion mr) { _deferred_card_mark = mr; } 1315 1316 #if INCLUDE_JVMCI 1317 int pending_deoptimization() const { return _pending_deoptimization; } 1318 oop pending_failed_speculation() const { return _pending_failed_speculation; } 1319 bool has_pending_monitorenter() const { return _pending_monitorenter; } 1320 void set_pending_monitorenter(bool b) { _pending_monitorenter = b; } 1321 void set_pending_deoptimization(int reason) { _pending_deoptimization = reason; } 1322 void set_pending_failed_speculation(oop failed_speculation) { _pending_failed_speculation = failed_speculation; } 1323 void set_pending_transfer_to_interpreter(bool b) { _pending_transfer_to_interpreter = b; } 1324 void set_jvmci_alternate_call_target(address a) { assert(_jvmci._alternate_call_target == NULL, "must be"); _jvmci._alternate_call_target = a; } 1325 void set_jvmci_implicit_exception_pc(address a) { assert(_jvmci._implicit_exception_pc == NULL, "must be"); _jvmci._implicit_exception_pc = a; } 1326 #endif // INCLUDE_JVMCI 1327 1328 // Exception handling for compiled methods 1329 oop exception_oop() const { return _exception_oop; } 1330 address exception_pc() const { return _exception_pc; } 1331 address exception_handler_pc() const { return _exception_handler_pc; } 1332 bool is_method_handle_return() const { return _is_method_handle_return == 1; } 1333 1334 void set_exception_oop(oop o) { (void)const_cast<oop&>(_exception_oop = o); } 1335 void set_exception_pc(address a) { _exception_pc = a; } 1336 void set_exception_handler_pc(address a) { _exception_handler_pc = a; } 1337 void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; } 1338 | 911 stack_guard_yellow_reserved_disabled,// disabled (temporarily) after stack overflow 912 stack_guard_enabled // enabled 913 }; 914 915 private: 916 917 #if INCLUDE_JVMCI 918 // The _pending_* fields below are used to communicate extra information 919 // from an uncommon trap in JVMCI compiled code to the uncommon trap handler. 920 921 // Communicates the DeoptReason and DeoptAction of the uncommon trap 922 int _pending_deoptimization; 923 924 // Specifies whether the uncommon trap is to bci 0 of a synchronized method 925 // before the monitor has been acquired. 926 bool _pending_monitorenter; 927 928 // Specifies if the DeoptReason for the last uncommon trap was Reason_transfer_to_interpreter 929 bool _pending_transfer_to_interpreter; 930 931 // Guard for re-entrant call to JVMCIRuntime::adjust_comp_level 932 bool _adjusting_comp_level; 933 934 // An object that JVMCI compiled code can use to further describe and 935 // uniquely identify the speculative optimization guarded by the uncommon trap 936 oop _pending_failed_speculation; 937 938 // These fields are mutually exclusive in terms of live ranges. 939 union { 940 // Communicates the pc at which the most recent implicit exception occurred 941 // from the signal handler to a deoptimization stub. 942 address _implicit_exception_pc; 943 944 // Communicates an alternative call target to an i2c stub from a JavaCall . 945 address _alternate_call_target; 946 } _jvmci; 947 948 // Support for high precision, thread sensitive counters in JVMCI compiled code. 949 jlong* _jvmci_counters; 950 951 public: 952 static jlong* _jvmci_old_thread_counters; 953 static void collect_counters(typeArrayOop array); 1302 1303 void set_deopt_compiled_method(CompiledMethod* nm) { _deopt_nmethod = nm; } 1304 CompiledMethod* deopt_compiled_method() { return _deopt_nmethod; } 1305 1306 Method* callee_target() const { return _callee_target; } 1307 void set_callee_target (Method* x) { _callee_target = x; } 1308 1309 // Oop results of vm runtime calls 1310 oop vm_result() const { return _vm_result; } 1311 void set_vm_result (oop x) { _vm_result = x; } 1312 1313 Metadata* vm_result_2() const { return _vm_result_2; } 1314 void set_vm_result_2 (Metadata* x) { _vm_result_2 = x; } 1315 1316 MemRegion deferred_card_mark() const { return _deferred_card_mark; } 1317 void set_deferred_card_mark(MemRegion mr) { _deferred_card_mark = mr; } 1318 1319 #if INCLUDE_JVMCI 1320 int pending_deoptimization() const { return _pending_deoptimization; } 1321 oop pending_failed_speculation() const { return _pending_failed_speculation; } 1322 bool adjusting_comp_level() const { return _adjusting_comp_level; } 1323 void set_adjusting_comp_level(bool b) { _adjusting_comp_level = b; } 1324 bool has_pending_monitorenter() const { return _pending_monitorenter; } 1325 void set_pending_monitorenter(bool b) { _pending_monitorenter = b; } 1326 void set_pending_deoptimization(int reason) { _pending_deoptimization = reason; } 1327 void set_pending_failed_speculation(oop failed_speculation) { _pending_failed_speculation = failed_speculation; } 1328 void set_pending_transfer_to_interpreter(bool b) { _pending_transfer_to_interpreter = b; } 1329 void set_jvmci_alternate_call_target(address a) { assert(_jvmci._alternate_call_target == NULL, "must be"); _jvmci._alternate_call_target = a; } 1330 void set_jvmci_implicit_exception_pc(address a) { assert(_jvmci._implicit_exception_pc == NULL, "must be"); _jvmci._implicit_exception_pc = a; } 1331 #endif // INCLUDE_JVMCI 1332 1333 // Exception handling for compiled methods 1334 oop exception_oop() const { return _exception_oop; } 1335 address exception_pc() const { return _exception_pc; } 1336 address exception_handler_pc() const { return _exception_handler_pc; } 1337 bool is_method_handle_return() const { return _is_method_handle_return == 1; } 1338 1339 void set_exception_oop(oop o) { (void)const_cast<oop&>(_exception_oop = o); } 1340 void set_exception_pc(address a) { _exception_pc = a; } 1341 void set_exception_handler_pc(address a) { _exception_handler_pc = a; } 1342 void set_is_method_handle_return(bool value) { _is_method_handle_return = value ? 1 : 0; } 1343 |