8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef CPU_ARM_VM_INTERPRETERRT_ARM_HPP
26 #define CPU_ARM_VM_INTERPRETERRT_ARM_HPP
27
28 #include "memory/allocation.hpp"
29
30 // native method calls
31
32 class SignatureHandlerGenerator: public NativeSignatureIterator {
33 private:
34 MacroAssembler* _masm;
35 int _abi_offset;
36 int _ireg;
37
38 #ifdef __ABI_HARD__
39 #ifdef AARCH64
40 int _freg;
41 #else
42 int _fp_slot; // number of FPR's with arguments loaded
43 int _single_fpr_slot;
44 #endif
45 #endif
46
47 void move(int from_offset, int to_offset);
48 void box(int from_offset, int to_offset);
49
50 void pass_int();
51 void pass_long();
52 void pass_float();
53 void pass_object();
54 #ifdef __ABI_HARD__
55 void pass_double();
56 #endif
57 public:
58 // Creation
59 SignatureHandlerGenerator(const methodHandle& method, CodeBuffer* buffer) : NativeSignatureIterator(method) {
60 _masm = new MacroAssembler(buffer);
61 _abi_offset = 0;
62 _ireg = is_static() ? 2 : 1;
63 #ifdef __ABI_HARD__
64 #ifdef AARCH64
65 _freg = 0;
66 #else
67 _fp_slot = 0;
68 _single_fpr_slot = 0;
69 #endif
70 #endif
71 }
72
73 // Code generation
74 void generate(uint64_t fingerprint);
75
76 };
77
78 #ifndef AARCH64
79 // ARM provides a normalized fingerprint for native calls (to increase
80 // sharing). See normalize_fast_native_fingerprint
81 #define SHARING_FAST_NATIVE_FINGERPRINTS
82 #endif
83
84 #endif // CPU_ARM_VM_INTERPRETERRT_ARM_HPP
|
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 *
23 */
24
25 #ifndef CPU_ARM_VM_INTERPRETERRT_ARM_HPP
26 #define CPU_ARM_VM_INTERPRETERRT_ARM_HPP
27
28 // native method calls
29
30 class SignatureHandlerGenerator: public NativeSignatureIterator {
31 private:
32 MacroAssembler* _masm;
33 int _abi_offset;
34 int _ireg;
35
36 #ifdef __ABI_HARD__
37 #ifdef AARCH64
38 int _freg;
39 #else
40 int _fp_slot; // number of FPR's with arguments loaded
41 int _single_fpr_slot;
42 #endif
43 #endif
44
45 void move(int from_offset, int to_offset);
46 void box(int from_offset, int to_offset);
47
48 void pass_int();
49 void pass_long();
50 void pass_float();
51 void pass_object();
52 #ifdef __ABI_HARD__
53 void pass_double();
54 #endif
55 public:
56 // Creation
57 SignatureHandlerGenerator(const methodHandle& method, CodeBuffer* buffer);
58
59 // Code generation
60 void generate(uint64_t fingerprint);
61 };
62
63 #ifndef AARCH64
64 // ARM provides a normalized fingerprint for native calls (to increase
65 // sharing). See normalize_fast_native_fingerprint
66 #define SHARING_FAST_NATIVE_FINGERPRINTS
67 #endif
68
69 #endif // CPU_ARM_VM_INTERPRETERRT_ARM_HPP
|