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 *
24 */
25
26 #ifndef CPU_AARCH64_VM_C1_MACROASSEMBLER_AARCH64_HPP
27 #define CPU_AARCH64_VM_C1_MACROASSEMBLER_AARCH64_HPP
28
29 using MacroAssembler::build_frame;
30 using MacroAssembler::null_check;
31
32 // C1_MacroAssembler contains high-level macros for C1
33
34 private:
35 int _rsp_offset; // track rsp changes
36 // initialization
37 void pd_init() { _rsp_offset = 0; }
38
39 void zero_memory(Register addr, Register len, Register t1);
40
41 public:
42 void try_allocate(
43 Register obj, // result: pointer to object after successful allocation
44 Register var_size_in_bytes, // object size in bytes if unknown at compile time; invalid otherwise
45 int con_size_in_bytes, // object size in bytes if known at compile time
46 Register t1, // temp register
47 Register t2, // temp register
48 Label& slow_case // continuation point if fast allocation fails
49 );
50
51 void initialize_header(Register obj, Register klass, Register len, Register t1, Register t2);
52 void initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1);
53
54 void float_cmp(bool is_float, int unordered_result,
55 FloatRegister f0, FloatRegister f1,
56 Register result);
57
58 // locking
59 // hdr : must be r0, contents destroyed
60 // obj : must point to the object to lock, contents preserved
61 // disp_hdr: must point to the displaced header location, contents preserved
62 // scratch : scratch register, contents destroyed
63 // returns code offset at which to add null check debug information
64 int lock_object (Register swap, Register obj, Register disp_hdr, Register scratch, Label& slow_case);
65
66 // unlocking
67 // hdr : contents destroyed
68 // obj : must point to the object to lock, contents preserved
69 // disp_hdr: must be r0 & must point to the displaced header location, contents destroyed
70 void unlock_object(Register swap, Register obj, Register lock, Label& slow_case);
71
72 void initialize_object(
73 Register obj, // result: pointer to object after successful allocation
74 Register klass, // object klass
75 Register var_size_in_bytes, // object size in bytes if unknown at compile time; invalid otherwise
76 int con_size_in_bytes, // object size in bytes if known at compile time
77 Register t1, // temp register
78 Register t2 // temp register
79 );
80
81 // allocation of fixed-size objects
82 // (can also be used to allocate fixed-size arrays, by setting
83 // hdr_size correctly and storing the array length afterwards)
84 // obj : will contain pointer to allocated object
85 // t1, t2 : scratch registers - contents destroyed
86 // header_size: size of object header in words
87 // object_size: total size of object in words
88 // slow_case : exit to slow case implementation if fast allocation fails
89 void allocate_object(Register obj, Register t1, Register t2, int header_size, int object_size, Register klass, Label& slow_case);
90
91 enum {
92 max_array_allocation_length = 0x00FFFFFF
93 };
94
95 // allocation of arrays
96 // obj : will contain pointer to allocated object
97 // len : array length in number of elements
98 // t : scratch register - contents destroyed
|
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 *
24 */
25
26 #ifndef CPU_AARCH64_VM_C1_MACROASSEMBLER_AARCH64_HPP
27 #define CPU_AARCH64_VM_C1_MACROASSEMBLER_AARCH64_HPP
28
29 using MacroAssembler::build_frame;
30 using MacroAssembler::null_check;
31
32 // C1_MacroAssembler contains high-level macros for C1
33
34 private:
35 int _rsp_offset; // track rsp changes
36 // initialization
37 void pd_init() { _rsp_offset = 0; }
38
39
40 public:
41 void try_allocate(
42 Register obj, // result: pointer to object after successful allocation
43 Register var_size_in_bytes, // object size in bytes if unknown at compile time; invalid otherwise
44 int con_size_in_bytes, // object size in bytes if known at compile time
45 Register t1, // temp register
46 Register t2, // temp register
47 Label& slow_case // continuation point if fast allocation fails
48 );
49
50 void initialize_header(Register obj, Register klass, Register len, Register t1, Register t2);
51 void initialize_body(Register obj, Register len_in_bytes, int hdr_size_in_bytes, Register t1);
52
53 void float_cmp(bool is_float, int unordered_result,
54 FloatRegister f0, FloatRegister f1,
55 Register result);
56
57 // locking
58 // hdr : must be r0, contents destroyed
59 // obj : must point to the object to lock, contents preserved
60 // disp_hdr: must point to the displaced header location, contents preserved
61 // scratch : scratch register, contents destroyed
62 // returns code offset at which to add null check debug information
63 int lock_object (Register swap, Register obj, Register disp_hdr, Register scratch, Label& slow_case);
64
65 // unlocking
66 // hdr : contents destroyed
67 // obj : must point to the object to lock, contents preserved
68 // disp_hdr: must be r0 & must point to the displaced header location, contents destroyed
69 void unlock_object(Register swap, Register obj, Register lock, Label& slow_case);
70
71 void initialize_object(
72 Register obj, // result: pointer to object after successful allocation
73 Register klass, // object klass
74 Register var_size_in_bytes, // object size in bytes if unknown at compile time; invalid otherwise
75 int con_size_in_bytes, // object size in bytes if known at compile time
76 Register t1, // temp register
77 Register t2, // temp register
78 bool is_tlab_allocated // the object was allocated in a TLAB; relevant for the implementation of ZeroTLAB
79 );
80
81 // allocation of fixed-size objects
82 // (can also be used to allocate fixed-size arrays, by setting
83 // hdr_size correctly and storing the array length afterwards)
84 // obj : will contain pointer to allocated object
85 // t1, t2 : scratch registers - contents destroyed
86 // header_size: size of object header in words
87 // object_size: total size of object in words
88 // slow_case : exit to slow case implementation if fast allocation fails
89 void allocate_object(Register obj, Register t1, Register t2, int header_size, int object_size, Register klass, Label& slow_case);
90
91 enum {
92 max_array_allocation_length = 0x00FFFFFF
93 };
94
95 // allocation of arrays
96 // obj : will contain pointer to allocated object
97 // len : array length in number of elements
98 // t : scratch register - contents destroyed
|