RFR: 8139457: Array bases are aligned at HeapWord granularity

Fei Yang fyang at openjdk.org
Mon Nov 21 11:07:24 UTC 2022


On Fri, 11 Nov 2022 10:08:08 GMT, Roman Kennke <rkennke at openjdk.org> wrote:

> > Hi, you might need one extra change for riscv in order to pass this test: ./test/hotspot/jtreg/runtime/FieldLayout/ArrayBaseOffsets.java But I haven't perform full test for all these changes on riscv.
> > ```
> > diff --git a/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp b/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp
> > index 5989d5ab809..9dced7c53e9 100644
> > --- a/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp
> > +++ b/src/hotspot/cpu/riscv/c1_MacroAssembler_riscv.cpp
> > @@ -177,6 +177,13 @@ void C1_MacroAssembler::initialize_body(Register obj, Register len_in_bytes, int
> >    sub(len_in_bytes, len_in_bytes, hdr_size_in_bytes);
> >    beqz(len_in_bytes, done);
> > 
> > +  // Zero first 4 bytes, if start offset is not word aligned.
> > +  if (!is_aligned(hdr_size_in_bytes, BytesPerWord)) {
> > +    sw(zr, Address(obj, hdr_size_in_bytes));
> > +    sub(len_in_bytes, len_in_bytes, BytesPerInt);
> > +    hdr_size_in_bytes += BytesPerInt;
> > +  }
> > +
> >    // Preserve obj
> >    if (hdr_size_in_bytes) {
> >      add(obj, obj, hdr_size_in_bytes);
> > ```
> 
> Thanks for checking and providing the fix, Fei! I pushed those changes and updated the test matrix accordingly.

With my proposed fix, I don't think you need the following change made in file: src/hotspot/cpu/riscv/macroAssembler_riscv.cpp

#ifdef ASSERT
  {
     Label L;
-    andi(t0, len, BytesPerWord - 1);
+    andi(t0, len, BytesPerInt - 1);
     beqz(t0, L);
-    stop("len is not a multiple of BytesPerWord");
+    stop("len is not a multiple of BytesPerInt");
     bind(L);
  }
#endif // ASSERT

Could you please remove this change from this PR? I am running some tests on my linux-riscv64 platform.

-------------

PR: https://git.openjdk.org/jdk/pull/11044


More information about the hotspot-dev mailing list