We observed "fatal error: this is not a `NativeMovRegMem' site" in a test which runs without CompressedOops with debug build.
Reason is that NativeMovRegMem::verify() is too strict. With disabled CompressedOops, it checks instructions beyond the 12 Bytes for the patchable load_const. C1 patching stubs place the patching record there so there are no valid instructions. (Note that this was different before JDK-8233081.)
Code is fine, verification is wrong. NativeMovRegMem is only used for access_field_patching on s390. The affected code is the patching template which never gets executed.
Stack snippet:
V [libjvm.so+0xf21ca0] NativeMovRegMem::verify()+0x160
V [libjvm.so+0x51a27a] Runtime1::patch_code(JavaThread*, Runtime1::StubID)+0x22ba
V [libjvm.so+0x51ada8] Runtime1::access_field_patching(JavaThread*)+0x48
v ~RuntimeStub::access_field_patching Runtime1 stub
J 691 c1 java.lang.String.<init>([BIILjava/nio/charset/Charset;)V