There are a couple of issues:
- On Aarch64, g1StoreLSpecialOneOop does not save mem and src during the GC pre-barrier, this risks clobber these values, which may lead to crashes or memory corruption when doing the store instruction.
- It seems that the value passed to the post-barrier should be an uncompressed oop, this requires us to decode the narrow oop instead of simply zero-extending it.
- Relax the restriction on the src register to be an arbitrary register.
- Split the rule into 2 so that we can avoid cloberring an additional register on Aarch64 when the offset of the oop inside the payload is 0, it also makes the implementation a little easier to read.
- On Aarch64, g1StoreLSpecialOneOop does not save mem and src during the GC pre-barrier, this risks clobber these values, which may lead to crashes or memory corruption when doing the store instruction.
- It seems that the value passed to the post-barrier should be an uncompressed oop, this requires us to decode the narrow oop instead of simply zero-extending it.
- Relax the restriction on the src register to be an arbitrary register.
- Split the rule into 2 so that we can avoid cloberring an additional register on Aarch64 when the offset of the oop inside the payload is 0, it also makes the implementation a little easier to read.
- caused by
-
JDK-8341759 [lworld] JIT support for nullable, atomic, flat fields
-
- Resolved
-
- links to
-
Commit(lworld)
openjdk/valhalla/3407ba86
-
Review(lworld)
openjdk/valhalla/2013