1 /*
2 * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
3 * Copyright (c) 2016 SAP SE. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
98 bool throw_monitor_exception = true,
99 bool install_monitor_exception = true,
100 bool notify_jvmti = true);
101
102 public:
103 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
104 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
105 void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
106 address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
107
108 // Generate a subtype check: branch to ok_is_subtype if sub_klass is
109 // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3.
110 void gen_subtype_check(Register sub_klass, Register super_klass, Register tmp1, Register tmp2, Label &ok_is_subtype);
111
112 void get_cache_and_index_at_bcp(Register cache, Register cpe_offset, int bcp_offset, size_t index_size = sizeof(u2));
113 void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register cpe_offset, Register bytecode,
114 int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
115 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
116 void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
117 void load_resolved_reference_at_index(Register result, Register index);
118
119 // Pop topmost element from stack. It just disappears. Useful if
120 // consumed previously by access via stackTop().
121 void popx(int len);
122 void pop_i() { popx(1); }
123 void pop_ptr() { popx(1); }
124 void pop_l() { popx(2); }
125 void pop_f() { popx(1); }
126 void pop_d() { popx(2); }
127 // Get Address object of stack top. No checks. No pop.
128 // Purpose: provide address of stack operand to exploit reg-mem operations.
129 // Avoid RISC-like mem2reg - reg-reg-op sequence.
130 Address stackTop();
131
132 // Helpers for expression stack.
133 void pop_i( Register r);
134 void pop_ptr( Register r);
135 void pop_l( Register r);
136 void pop_f(FloatRegister f);
137 void pop_d(FloatRegister f);
|
1 /*
2 * Copyright (c) 2016, 2017, Oracle and/or its affiliates. All rights reserved.
3 * Copyright (c) 2016, 2017 SAP SE. All rights reserved.
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 *
6 * This code is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 only, as
8 * published by the Free Software Foundation.
9 *
10 * This code is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * version 2 for more details (a copy is included in the LICENSE file that
14 * accompanied this code).
15 *
16 * You should have received a copy of the GNU General Public License version
17 * 2 along with this work; if not, write to the Free Software Foundation,
18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 *
20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
21 * or visit www.oracle.com if you need additional information or have any
22 * questions.
23 *
98 bool throw_monitor_exception = true,
99 bool install_monitor_exception = true,
100 bool notify_jvmti = true);
101
102 public:
103 // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls.
104 void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
105 void super_call_VM(Register thread_cache, Register oop_result, Register last_java_sp,
106 address entry_point, Register arg_1, Register arg_2, bool check_exception = true);
107
108 // Generate a subtype check: branch to ok_is_subtype if sub_klass is
109 // a subtype of super_klass. Blows registers tmp1, tmp2 and tmp3.
110 void gen_subtype_check(Register sub_klass, Register super_klass, Register tmp1, Register tmp2, Label &ok_is_subtype);
111
112 void get_cache_and_index_at_bcp(Register cache, Register cpe_offset, int bcp_offset, size_t index_size = sizeof(u2));
113 void get_cache_and_index_and_bytecode_at_bcp(Register cache, Register cpe_offset, Register bytecode,
114 int byte_no, int bcp_offset, size_t index_size = sizeof(u2));
115 void get_cache_entry_pointer_at_bcp(Register cache, Register tmp, int bcp_offset, size_t index_size = sizeof(u2));
116 void get_cache_index_at_bcp(Register index, int bcp_offset, size_t index_size = sizeof(u2));
117 void load_resolved_reference_at_index(Register result, Register index);
118 // load cpool->resolved_klass_at(index)
119 void load_resolved_klass_at_offset(Register cpool, Register offset, Register iklass);
120
121 // Pop topmost element from stack. It just disappears. Useful if
122 // consumed previously by access via stackTop().
123 void popx(int len);
124 void pop_i() { popx(1); }
125 void pop_ptr() { popx(1); }
126 void pop_l() { popx(2); }
127 void pop_f() { popx(1); }
128 void pop_d() { popx(2); }
129 // Get Address object of stack top. No checks. No pop.
130 // Purpose: provide address of stack operand to exploit reg-mem operations.
131 // Avoid RISC-like mem2reg - reg-reg-op sequence.
132 Address stackTop();
133
134 // Helpers for expression stack.
135 void pop_i( Register r);
136 void pop_ptr( Register r);
137 void pop_l( Register r);
138 void pop_f(FloatRegister f);
139 void pop_d(FloatRegister f);
|