mirror of
https://github.com/i-net-software/JWebAssembly.git
synced 2025-03-25 07:27:52 +01:00
More Unsafe support for Java 11
This commit is contained in:
parent
16d04beeff
commit
57f0c9ceb9
@ -182,6 +182,8 @@ class UnsafeManager {
|
|||||||
case "sun/misc/Unsafe.getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object;":
|
case "sun/misc/Unsafe.getObjectVolatile(Ljava/lang/Object;J)Ljava/lang/Object;":
|
||||||
case "sun/misc/Unsafe.getInt(Ljava/lang/Object;J)I":
|
case "sun/misc/Unsafe.getInt(Ljava/lang/Object;J)I":
|
||||||
case "sun/misc/Unsafe.getLong(Ljava/lang/Object;J)J":
|
case "sun/misc/Unsafe.getLong(Ljava/lang/Object;J)J":
|
||||||
|
case "jdk/internal/misc/Unsafe.getInt(Ljava/lang/Object;J)I":
|
||||||
|
case "jdk/internal/misc/Unsafe.getLong(Ljava/lang/Object;J)J":
|
||||||
patchFieldFunction( instructions, idx, callInst, name, 1 );
|
patchFieldFunction( instructions, idx, callInst, name, 1 );
|
||||||
break;
|
break;
|
||||||
case "sun/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I":
|
case "sun/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I":
|
||||||
@ -199,12 +201,15 @@ class UnsafeManager {
|
|||||||
case "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I":
|
case "jdk/internal/misc/Unsafe.getAndAddInt(Ljava/lang/Object;JI)I":
|
||||||
case "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I":
|
case "jdk/internal/misc/Unsafe.getAndSetInt(Ljava/lang/Object;JI)I":
|
||||||
case "jdk/internal/misc/Unsafe.putIntRelease(Ljava/lang/Object;JI)V":
|
case "jdk/internal/misc/Unsafe.putIntRelease(Ljava/lang/Object;JI)V":
|
||||||
|
case "jdk/internal/misc/Unsafe.putInt(Ljava/lang/Object;JI)V":
|
||||||
case "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J":
|
case "jdk/internal/misc/Unsafe.getAndAddLong(Ljava/lang/Object;JJ)J":
|
||||||
case "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J":
|
case "jdk/internal/misc/Unsafe.getAndSetLong(Ljava/lang/Object;JJ)J":
|
||||||
case "jdk/internal/misc/Unsafe.putLongRelease(Ljava/lang/Object;JJ)V":
|
case "jdk/internal/misc/Unsafe.putLongRelease(Ljava/lang/Object;JJ)V":
|
||||||
case "jdk/internal/misc/Unsafe.putLongVolatile(Ljava/lang/Object;JJ)V":
|
case "jdk/internal/misc/Unsafe.putLongVolatile(Ljava/lang/Object;JJ)V":
|
||||||
|
case "jdk/internal/misc/Unsafe.putLong(Ljava/lang/Object;JJ)V":
|
||||||
case "jdk/internal/misc/Unsafe.putObject(Ljava/lang/Object;JLjava/lang/Object;)V":
|
case "jdk/internal/misc/Unsafe.putObject(Ljava/lang/Object;JLjava/lang/Object;)V":
|
||||||
case "jdk/internal/misc/Unsafe.getObjectAcquire(Ljava/lang/Object;J)Ljava/lang/Object;":
|
case "jdk/internal/misc/Unsafe.getObjectAcquire(Ljava/lang/Object;J)Ljava/lang/Object;":
|
||||||
|
case "jdk/internal/misc/Unsafe.putObjectRelease(Ljava/lang/Object;JLjava/lang/Object;)V":
|
||||||
patchFieldFunction( instructions, idx, callInst, name, 2 );
|
patchFieldFunction( instructions, idx, callInst, name, 2 );
|
||||||
break;
|
break;
|
||||||
case "sun/misc/Unsafe.compareAndSwapInt(Ljava/lang/Object;JII)Z":
|
case "sun/misc/Unsafe.compareAndSwapInt(Ljava/lang/Object;JII)Z":
|
||||||
@ -533,8 +538,11 @@ class UnsafeManager {
|
|||||||
AnyType[] paramTypes = callInst.getPopValueTypes();
|
AnyType[] paramTypes = callInst.getPopValueTypes();
|
||||||
switch( name.methodName ) {
|
switch( name.methodName ) {
|
||||||
case "compareAndSwapInt":
|
case "compareAndSwapInt":
|
||||||
|
case "compareAndSetInt":
|
||||||
case "compareAndSwapLong":
|
case "compareAndSwapLong":
|
||||||
|
case "compareAndSetLong":
|
||||||
case "compareAndSwapObject":
|
case "compareAndSwapObject":
|
||||||
|
case "compareAndSetObject":
|
||||||
case "compareAndSet": // AtomicReferenceFieldUpdater
|
case "compareAndSet": // AtomicReferenceFieldUpdater
|
||||||
AnyType type = paramTypes[3];
|
AnyType type = paramTypes[3];
|
||||||
if( type.isRefType() ) {
|
if( type.isRefType() ) {
|
||||||
@ -603,9 +611,11 @@ class UnsafeManager {
|
|||||||
case "putInt":
|
case "putInt":
|
||||||
case "putOrderedLong":
|
case "putOrderedLong":
|
||||||
case "putLong":
|
case "putLong":
|
||||||
|
case "putLongVolatile":
|
||||||
case "putOrderedObject":
|
case "putOrderedObject":
|
||||||
case "putObjectVolatile":
|
case "putObjectVolatile":
|
||||||
case "putObject":
|
case "putObject":
|
||||||
|
case "putObjectRelease":
|
||||||
if( state.fieldName != null ) {
|
if( state.fieldName != null ) {
|
||||||
// field access
|
// field access
|
||||||
return "local.get 1" // THIS
|
return "local.get 1" // THIS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user