64
65 virtual void call_VM_leaf_base(
66 address entry_point, // the entry point
67 int number_of_arguments, // the number of arguments to pop after the call
68 Label &retaddr) {
69 call_VM_leaf_base(entry_point, number_of_arguments, &retaddr);
70 }
71
72 // This is the base routine called by the different versions of call_VM. The interpreter
73 // may customize this version by overriding it for its purposes (e.g., to save/restore
74 // additional registers when doing a VM call).
75 //
76 // If no java_thread register is specified (noreg) than rthread will be used instead. call_VM_base
77 // returns the register which contains the thread upon return. If a thread register has been
78 // specified, the return value will correspond to that register. If no last_java_sp is specified
79 // (noreg) than rsp will be used instead.
80 virtual void call_VM_base( // returns the register containing the thread upon return
81 Register oop_result, // where an oop-result ends up if any; use noreg otherwise
82 Register java_thread, // the thread if computed before ; use noreg otherwise
83 Register last_java_sp, // to set up last_Java_frame in stubs; use noreg otherwise
84 address entry_point, // the entry point
85 int number_of_arguments, // the number of arguments (w/o thread) to pop after the call
86 bool check_exceptions // whether to check for pending exceptions after return
87 );
88
89 void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
90
91 enum KlassDecodeMode {
92 KlassDecodeNone,
93 KlassDecodeZero,
94 KlassDecodeXor,
95 KlassDecodeMovk
96 };
97
98 // Calculate decoding mode based on given parameters, used for checking then ultimately setting.
99 static KlassDecodeMode klass_decode_mode(address base, int shift, const size_t range);
100
101 private:
102 static KlassDecodeMode _klass_decode_mode;
103
|
64
65 virtual void call_VM_leaf_base(
66 address entry_point, // the entry point
67 int number_of_arguments, // the number of arguments to pop after the call
68 Label &retaddr) {
69 call_VM_leaf_base(entry_point, number_of_arguments, &retaddr);
70 }
71
72 // This is the base routine called by the different versions of call_VM. The interpreter
73 // may customize this version by overriding it for its purposes (e.g., to save/restore
74 // additional registers when doing a VM call).
75 //
76 // If no java_thread register is specified (noreg) than rthread will be used instead. call_VM_base
77 // returns the register which contains the thread upon return. If a thread register has been
78 // specified, the return value will correspond to that register. If no last_java_sp is specified
79 // (noreg) than rsp will be used instead.
80 virtual void call_VM_base( // returns the register containing the thread upon return
81 Register oop_result, // where an oop-result ends up if any; use noreg otherwise
82 Register java_thread, // the thread if computed before ; use noreg otherwise
83 Register last_java_sp, // to set up last_Java_frame in stubs; use noreg otherwise
84 Label* return_pc, // to set up last_Java_frame; use nullptr otherwise
85 address entry_point, // the entry point
86 int number_of_arguments, // the number of arguments (w/o thread) to pop after the call
87 bool check_exceptions // whether to check for pending exceptions after return
88 );
89
90 void call_VM_helper(Register oop_result, address entry_point, int number_of_arguments, bool check_exceptions = true);
91
92 enum KlassDecodeMode {
93 KlassDecodeNone,
94 KlassDecodeZero,
95 KlassDecodeXor,
96 KlassDecodeMovk
97 };
98
99 // Calculate decoding mode based on given parameters, used for checking then ultimately setting.
100 static KlassDecodeMode klass_decode_mode(address base, int shift, const size_t range);
101
102 private:
103 static KlassDecodeMode _klass_decode_mode;
104
|