< prev index next >

src/hotspot/cpu/arm/stubGenerator_arm.cpp

Print this page
rev 49939 : 8201786: Modularize interpreter GC barriers: leftovers for ARM32
Reviewed-by: enevill, eosterlund


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.


< prev index next >