169 ) {
170 RegisterOrConstant size_in_bytes = var_size_in_bytes->is_valid()
171 ? RegisterOrConstant(var_size_in_bytes) : RegisterOrConstant(con_size_in_bytes);
172 if (UseTLAB) {
173 tlab_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
174 } else {
175 eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, t2, slow_case);
176 incr_allocated_bytes(size_in_bytes, t1, t2);
177 }
178 }
179
180
181 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
182 assert_different_registers(obj, klass, len, t1, t2);
183 if (UseBiasedLocking && !len->is_valid()) {
184 ld_ptr(klass, in_bytes(Klass::prototype_header_offset()), t1);
185 } else {
186 set((intx)markOopDesc::prototype(), t1);
187 }
188 st_ptr(t1, obj, oopDesc::mark_offset_in_bytes());
189 if (UseCompressedKlassPointers) {
190 // Save klass
191 mov(klass, t1);
192 encode_klass_not_null(t1);
193 stw(t1, obj, oopDesc::klass_offset_in_bytes());
194 } else {
195 st_ptr(klass, obj, oopDesc::klass_offset_in_bytes());
196 }
197 if (len->is_valid()) {
198 st(len, obj, arrayOopDesc::length_offset_in_bytes());
199 } else if (UseCompressedKlassPointers) {
200 // otherwise length is in the class gap
201 store_klass_gap(G0, obj);
202 }
203 }
204
205
206 void C1_MacroAssembler::initialize_body(Register base, Register index) {
207 assert_different_registers(base, index);
208 Label loop;
209 bind(loop);
210 subcc(index, HeapWordSize, index);
211 brx(Assembler::greaterEqual, true, Assembler::pt, loop);
212 delayed()->st_ptr(G0, base, index);
213 }
214
215
216 void C1_MacroAssembler::allocate_object(
217 Register obj, // result: pointer to object after successful allocation
218 Register t1, // temp register
219 Register t2, // temp register, must be a global register for try_allocate
|
169 ) {
170 RegisterOrConstant size_in_bytes = var_size_in_bytes->is_valid()
171 ? RegisterOrConstant(var_size_in_bytes) : RegisterOrConstant(con_size_in_bytes);
172 if (UseTLAB) {
173 tlab_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, slow_case);
174 } else {
175 eden_allocate(obj, var_size_in_bytes, con_size_in_bytes, t1, t2, slow_case);
176 incr_allocated_bytes(size_in_bytes, t1, t2);
177 }
178 }
179
180
181 void C1_MacroAssembler::initialize_header(Register obj, Register klass, Register len, Register t1, Register t2) {
182 assert_different_registers(obj, klass, len, t1, t2);
183 if (UseBiasedLocking && !len->is_valid()) {
184 ld_ptr(klass, in_bytes(Klass::prototype_header_offset()), t1);
185 } else {
186 set((intx)markOopDesc::prototype(), t1);
187 }
188 st_ptr(t1, obj, oopDesc::mark_offset_in_bytes());
189 if (UseCompressedClassPointers) {
190 // Save klass
191 mov(klass, t1);
192 encode_klass_not_null(t1);
193 stw(t1, obj, oopDesc::klass_offset_in_bytes());
194 } else {
195 st_ptr(klass, obj, oopDesc::klass_offset_in_bytes());
196 }
197 if (len->is_valid()) {
198 st(len, obj, arrayOopDesc::length_offset_in_bytes());
199 } else if (UseCompressedClassPointers) {
200 // otherwise length is in the class gap
201 store_klass_gap(G0, obj);
202 }
203 }
204
205
206 void C1_MacroAssembler::initialize_body(Register base, Register index) {
207 assert_different_registers(base, index);
208 Label loop;
209 bind(loop);
210 subcc(index, HeapWordSize, index);
211 brx(Assembler::greaterEqual, true, Assembler::pt, loop);
212 delayed()->st_ptr(G0, base, index);
213 }
214
215
216 void C1_MacroAssembler::allocate_object(
217 Register obj, // result: pointer to object after successful allocation
218 Register t1, // temp register
219 Register t2, // temp register, must be a global register for try_allocate
|