3243 __ b(load_element,ne);
3244 #endif // AARCH64
3245
3246 // nothing to copy
3247 __ mov(R0, 0);
3248
3249 #ifdef AARCH64
3250 __ raw_pop(R19, R20);
3251 __ raw_pop(LR, ZR);
3252 __ ret();
3253 #else
3254 __ pop(caller_saved_regs);
3255 __ pop(PC);
3256 #endif // AARCH64
3257
3258 // ======== begin loop ========
3259 // (Loop is rotated; its entry is load_element.)
3260 __ align(OptoLoopAlignment);
3261 __ BIND(store_element);
3262 if (UseCompressedOops) {
3263 __ store_heap_oop(R5, Address(to, BytesPerHeapOop, post_indexed)); // store the oop, changes flags
3264 __ subs_32(count,count,1);
3265 } else {
3266 __ subs_32(count,count,1);
3267 __ str(R5, Address(to, BytesPerHeapOop, post_indexed)); // store the oop
3268 }
3269 __ b(do_epilogue, eq); // count exhausted
3270
3271 // ======== loop entry is here ========
3272 __ BIND(load_element);
3273 __ load_heap_oop(R5, Address(from, BytesPerHeapOop, post_indexed)); // load the oop
3274 __ cbz(R5, store_element); // NULL
3275
3276 __ load_klass(R6, R5);
3277
3278 generate_type_check(R6, R3_ckoff, R4_ckval, /*tmps*/ R12, R8, R9,
3279 // branch to this on success:
3280 store_element);
3281 // ======== end loop ========
3282
3283 // It was a real error; we must depend on the caller to finish the job.
|
3243 __ b(load_element,ne);
3244 #endif // AARCH64
3245
3246 // nothing to copy
3247 __ mov(R0, 0);
3248
3249 #ifdef AARCH64
3250 __ raw_pop(R19, R20);
3251 __ raw_pop(LR, ZR);
3252 __ ret();
3253 #else
3254 __ pop(caller_saved_regs);
3255 __ pop(PC);
3256 #endif // AARCH64
3257
3258 // ======== begin loop ========
3259 // (Loop is rotated; its entry is load_element.)
3260 __ align(OptoLoopAlignment);
3261 __ BIND(store_element);
3262 if (UseCompressedOops) {
3263 __ store_heap_oop(Address(to, BytesPerHeapOop, post_indexed), R5); // store the oop, changes flags
3264 __ subs_32(count,count,1);
3265 } else {
3266 __ subs_32(count,count,1);
3267 __ str(R5, Address(to, BytesPerHeapOop, post_indexed)); // store the oop
3268 }
3269 __ b(do_epilogue, eq); // count exhausted
3270
3271 // ======== loop entry is here ========
3272 __ BIND(load_element);
3273 __ load_heap_oop(R5, Address(from, BytesPerHeapOop, post_indexed)); // load the oop
3274 __ cbz(R5, store_element); // NULL
3275
3276 __ load_klass(R6, R5);
3277
3278 generate_type_check(R6, R3_ckoff, R4_ckval, /*tmps*/ R12, R8, R9,
3279 // branch to this on success:
3280 store_element);
3281 // ======== end loop ========
3282
3283 // It was a real error; we must depend on the caller to finish the job.
|