changeset 10809:6deccb5af3b4

8216989, PR3797: CardTableBarrierSetAssembler::gen_write_ref_array_post_barrier() does not check for zero length on AARCH64 Reviewed-by: adinn
author dpochepk
date Wed, 06 May 2020 06:24:08 -0400
parents b58d341cef20
children 5c7085df7f80
files src/cpu/aarch64/vm/stubGenerator_aarch64.cpp
diffstat 1 files changed, 8 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Thu May 07 09:11:54 2020 -0400
+++ b/src/cpu/aarch64/vm/stubGenerator_aarch64.cpp	Wed May 06 06:24:08 2020 -0400
@@ -645,6 +645,13 @@
   //  The ending address is inclusive.
   void gen_write_ref_array_post_barrier(Register start, Register end, Register scratch) {
     assert_different_registers(start, end, scratch);
+    Label L_done;
+
+    // "end" is inclusive end pointer == start + (count - 1) * array_element_size
+    // If count == 0, "end" is less than "start" and we need to skip card marking.
+    __ cmp(end, start);
+    __ br(__ LO, L_done);
+
     BarrierSet* bs = Universe::heap()->barrier_set();
     switch (bs->kind()) {
       case BarrierSet::G1SATBCT:
@@ -691,6 +698,7 @@
         ShouldNotReachHere();
 
     }
+    __ bind(L_done);
   }
 
   address generate_zero_longs(Register base, Register cnt) {