diff --git a/aot-tests/pom.xml b/aot-tests/pom.xml
index 81988d14e..79d1847f2 100644
--- a/aot-tests/pom.xml
+++ b/aot-tests/pom.xml
@@ -50,12 +50,6 @@
junit-jupiter-engine
test
-
-
- org.ow2.asm
- asm-util
- test
-
diff --git a/aot/pom.xml b/aot/pom.xml
index 559cd8a53..fd8c14533 100644
--- a/aot/pom.xml
+++ b/aot/pom.xml
@@ -34,7 +34,6 @@
org.ow2.asm
asm-util
- true
com.approvaltests
diff --git a/aot/src/main/java/com/dylibso/chicory/aot/AotEmitters.java b/aot/src/main/java/com/dylibso/chicory/aot/AotEmitters.java
index 9061deeb6..741a345b2 100644
--- a/aot/src/main/java/com/dylibso/chicory/aot/AotEmitters.java
+++ b/aot/src/main/java/com/dylibso/chicory/aot/AotEmitters.java
@@ -3,7 +3,6 @@
import static com.dylibso.chicory.aot.AotMethods.CHECK_INTERRUPTION;
import static com.dylibso.chicory.aot.AotMethods.INSTANCE_READ_GLOBAL;
import static com.dylibso.chicory.aot.AotMethods.INSTANCE_SET_ELEMENT;
-import static com.dylibso.chicory.aot.AotMethods.INSTANCE_WRITE_GLOBAL;
import static com.dylibso.chicory.aot.AotMethods.MEMORY_COPY;
import static com.dylibso.chicory.aot.AotMethods.MEMORY_DROP;
import static com.dylibso.chicory.aot.AotMethods.MEMORY_FILL;
@@ -31,13 +30,14 @@
import static com.dylibso.chicory.aot.AotMethods.TABLE_SET;
import static com.dylibso.chicory.aot.AotMethods.TABLE_SIZE;
import static com.dylibso.chicory.aot.AotMethods.THROW_OUT_OF_BOUNDS_MEMORY_ACCESS;
+import static com.dylibso.chicory.aot.AotMethods.WRITE_GLOBAL;
import static com.dylibso.chicory.aot.AotUtil.StackSize;
import static com.dylibso.chicory.aot.AotUtil.callIndirectMethodName;
import static com.dylibso.chicory.aot.AotUtil.callIndirectMethodType;
-import static com.dylibso.chicory.aot.AotUtil.convertFromLong;
-import static com.dylibso.chicory.aot.AotUtil.convertToLong;
import static com.dylibso.chicory.aot.AotUtil.emitInvokeStatic;
import static com.dylibso.chicory.aot.AotUtil.emitInvokeVirtual;
+import static com.dylibso.chicory.aot.AotUtil.emitJvmToLong;
+import static com.dylibso.chicory.aot.AotUtil.emitLongToJvm;
import static com.dylibso.chicory.aot.AotUtil.emitPop;
import static com.dylibso.chicory.aot.AotUtil.jvmType;
import static com.dylibso.chicory.aot.AotUtil.loadTypeOpcode;
@@ -218,25 +218,19 @@ public static void GLOBAL_GET(AotContext ctx, AnnotatedInstruction ins, MethodVi
asm.visitLdcInsn(globalIndex);
emitInvokeVirtual(asm, INSTANCE_READ_GLOBAL);
- Method unboxer = convertFromLong(ctx.globalTypes().get(globalIndex));
- emitInvokeStatic(asm, unboxer);
+ var globalType = ctx.globalTypes().get(globalIndex);
+ emitLongToJvm(asm, ctx.globalTypes().get(globalIndex));
- ctx.pushStackSize(stackSize(unboxer.getReturnType()));
+ ctx.pushStackSize(stackSize(globalType));
}
public static void GLOBAL_SET(AotContext ctx, AnnotatedInstruction ins, MethodVisitor asm) {
int globalIndex = (int) ins.operand(0);
- emitInvokeStatic(asm, convertToLong(ctx.globalTypes().get(globalIndex)));
- asm.visitVarInsn(Opcodes.ALOAD, ctx.instanceSlot());
- // from long | integer on top of the stack
- // to integer | long
- asm.visitInsn(Opcodes.DUP_X2);
- asm.visitInsn(Opcodes.POP);
+ emitJvmToLong(asm, ctx.globalTypes().get(globalIndex));
asm.visitLdcInsn(globalIndex);
- asm.visitInsn(Opcodes.DUP_X2);
- asm.visitInsn(Opcodes.POP);
- emitInvokeVirtual(asm, INSTANCE_WRITE_GLOBAL);
+ asm.visitVarInsn(Opcodes.ALOAD, ctx.instanceSlot());
+ emitInvokeStatic(asm, WRITE_GLOBAL);
}
public static void TABLE_GET(AotContext ctx, AnnotatedInstruction ins, MethodVisitor asm) {
@@ -777,7 +771,7 @@ private static void emitUnboxResult(MethodVisitor asm, AotContext ctx, List 1) {
return result;
}
- result = filterReturnValue(result, convertToLongHandle(type.returns().get(0)));
+ result = filterReturnValue(result, jvmToLongHandle(type.returns().get(0)));
return filterReturnValue(result, LongArrayWrapper.HANDLE);
}
@@ -598,7 +598,7 @@ private static void emitBoxArguments(MethodVisitor asm, List types) {
asm.visitLdcInsn(i);
ValueType valueType = types.get(i);
asm.visitVarInsn(loadTypeOpcode(valueType), slot);
- emitInvokeStatic(asm, convertToLong(valueType));
+ emitJvmToLong(asm, valueType);
asm.visitInsn(Opcodes.LASTORE);
slot += slotCount(valueType);
}
@@ -614,7 +614,7 @@ private static void emitUnboxResult(FunctionType type, MethodVisitor asm) {
// unbox the result from long[0]
asm.visitLdcInsn(0);
asm.visitInsn(Opcodes.LALOAD);
- emitInvokeStatic(asm, convertFromLong(type.returns().get(0)));
+ emitLongToJvm(asm, type.returns().get(0));
asm.visitInsn(returnTypeOpcode(type));
}
}
diff --git a/aot/src/main/java/com/dylibso/chicory/aot/AotMethods.java b/aot/src/main/java/com/dylibso/chicory/aot/AotMethods.java
index 594ee5de2..dc50fb633 100644
--- a/aot/src/main/java/com/dylibso/chicory/aot/AotMethods.java
+++ b/aot/src/main/java/com/dylibso/chicory/aot/AotMethods.java
@@ -21,7 +21,7 @@ public final class AotMethods {
static final Method CALL_INDIRECT;
static final Method INSTANCE_CALL_HOST_FUNCTION;
static final Method INSTANCE_READ_GLOBAL;
- static final Method INSTANCE_WRITE_GLOBAL;
+ static final Method WRITE_GLOBAL;
static final Method INSTANCE_SET_ELEMENT;
static final Method MEMORY_COPY;
static final Method MEMORY_FILL;
@@ -67,7 +67,9 @@ public final class AotMethods {
INSTANCE_CALL_HOST_FUNCTION =
Instance.class.getMethod("callHostFunction", int.class, long[].class);
INSTANCE_READ_GLOBAL = Instance.class.getMethod("readGlobal", int.class);
- INSTANCE_WRITE_GLOBAL = Instance.class.getMethod("writeGlobal", int.class, long.class);
+ WRITE_GLOBAL =
+ AotMethods.class.getMethod(
+ "writeGlobal", long.class, int.class, Instance.class);
INSTANCE_SET_ELEMENT = Instance.class.getMethod("setElement", int.class, Element.class);
MEMORY_COPY =
AotMethods.class.getMethod(
@@ -340,4 +342,9 @@ public static void checkInterruption() {
throw new ChicoryException("Thread interrupted");
}
}
+
+ @UsedByGeneratedCode
+ public static void writeGlobal(long value, int index, Instance instance) {
+ instance.writeGlobal(index, value);
+ }
}
diff --git a/aot/src/main/java/com/dylibso/chicory/aot/AotUtil.java b/aot/src/main/java/com/dylibso/chicory/aot/AotUtil.java
index f51ba17b9..fe9dc0c72 100644
--- a/aot/src/main/java/com/dylibso/chicory/aot/AotUtil.java
+++ b/aot/src/main/java/com/dylibso/chicory/aot/AotUtil.java
@@ -28,35 +28,46 @@ public enum StackSize {
TWO
}
- private static final Method LONG_2_I32;
- private static final Method LONG_2_I64;
- private static final Method LONG_2_F32;
- private static final Method LONG_2_F64;
- private static final Method LONG_2_EXTREF;
- private static final Method LONG_2_FUNCREF;
- private static final Method I32_2_LONG;
- private static final Method I64_2_LONG;
- private static final Method F32_2_LONG;
- private static final Method F64_2_LONG;
- private static final Method EXTREF_2_LONG;
- private static final Method FUNCREF_2_LONG;
+ private static final Method LONG_TO_I32;
+ private static final Method LONG_TO_I64;
+ private static final Method LONG_TO_F32;
+ private static final Method LONG_TO_F64;
+ private static final Method I32_TO_LONG;
+ private static final Method I64_TO_LONG;
+ private static final Method F32_TO_LONG;
+ private static final Method F64_TO_LONG;
+ private static final MethodHandle LONG_TO_I32_MH;
+ private static final MethodHandle LONG_TO_I64_MH;
+ private static final MethodHandle LONG_TO_F32_MH;
+ private static final MethodHandle LONG_TO_F64_MH;
+ private static final MethodHandle I32_TO_LONG_MH;
+ private static final MethodHandle I64_TO_LONG_MH;
+ private static final MethodHandle F32_TO_LONG_MH;
+ private static final MethodHandle F64_TO_LONG_MH;
static {
try {
- I32_2_LONG = ValueConversions.class.getMethod("asLong", int.class);
- I64_2_LONG = ValueConversions.class.getMethod("asLong", long.class);
- F32_2_LONG = ValueConversions.class.getMethod("asLong", float.class);
- F64_2_LONG = ValueConversions.class.getMethod("asLong", double.class);
- EXTREF_2_LONG = ValueConversions.class.getMethod("asLong", int.class);
- FUNCREF_2_LONG = ValueConversions.class.getMethod("asLong", int.class);
- LONG_2_I32 = ValueConversions.class.getMethod("toInt", long.class);
- LONG_2_I64 = ValueConversions.class.getMethod("toLong", long.class);
- LONG_2_F32 = ValueConversions.class.getMethod("toFloat", long.class);
- LONG_2_F64 = ValueConversions.class.getMethod("toDouble", long.class);
- LONG_2_EXTREF = ValueConversions.class.getMethod("toInt", long.class);
- LONG_2_FUNCREF = ValueConversions.class.getMethod("toInt", long.class);
+ LONG_TO_I32 = ValueConversions.class.getMethod("longToI32", long.class);
+ LONG_TO_I64 = ValueConversions.class.getMethod("longToI64", long.class);
+ LONG_TO_F32 = ValueConversions.class.getMethod("longToF32", long.class);
+ LONG_TO_F64 = ValueConversions.class.getMethod("longToF64", long.class);
+ I32_TO_LONG = ValueConversions.class.getMethod("i32ToLong", int.class);
+ I64_TO_LONG = ValueConversions.class.getMethod("i64ToLong", long.class);
+ F32_TO_LONG = ValueConversions.class.getMethod("f32ToLong", float.class);
+ F64_TO_LONG = ValueConversions.class.getMethod("f64ToLong", double.class);
+
+ LONG_TO_I32_MH = publicLookup().unreflect(LONG_TO_I32);
+ LONG_TO_I64_MH = publicLookup().unreflect(LONG_TO_I64);
+ LONG_TO_F32_MH = publicLookup().unreflect(LONG_TO_F32);
+ LONG_TO_F64_MH = publicLookup().unreflect(LONG_TO_F64);
+ I32_TO_LONG_MH = publicLookup().unreflect(I32_TO_LONG);
+ I64_TO_LONG_MH = publicLookup().unreflect(I64_TO_LONG);
+ F32_TO_LONG_MH = publicLookup().unreflect(F32_TO_LONG);
+ F64_TO_LONG_MH = publicLookup().unreflect(F64_TO_LONG);
} catch (NoSuchMethodException e) {
throw new AssertionError(e);
+ } catch (IllegalAccessException e) {
+ throw new AssertionError(e);
}
}
@@ -119,57 +130,79 @@ public static ValueType localType(FunctionType type, FunctionBody body, int loca
}
}
- public static Method convertFromLong(ValueType type) {
+ public static void emitLongToJvm(MethodVisitor asm, ValueType type) {
switch (type) {
case I32:
- return LONG_2_I32;
+ case ExternRef:
+ case FuncRef:
+ asm.visitInsn(Opcodes.L2I);
+ return;
case I64:
- return LONG_2_I64;
+ return;
case F32:
- return LONG_2_F32;
+ emitInvokeStatic(asm, LONG_TO_F32);
+ return;
case F64:
- return LONG_2_F64;
- case ExternRef:
- return LONG_2_EXTREF;
- case FuncRef:
- return LONG_2_FUNCREF;
+ emitInvokeStatic(asm, LONG_TO_F64);
+ return;
default:
throw new IllegalArgumentException("Unsupported ValueType: " + type.name());
}
}
- public static Method convertToLong(ValueType type) {
+ public static void emitJvmToLong(MethodVisitor asm, ValueType type) {
switch (type) {
case I32:
- return I32_2_LONG;
+ case ExternRef:
+ case FuncRef:
+ asm.visitInsn(Opcodes.I2L);
+ return;
case I64:
- return I64_2_LONG;
+ return;
case F32:
- return F32_2_LONG;
+ emitInvokeStatic(asm, F32_TO_LONG);
+ return;
case F64:
- return F64_2_LONG;
- case ExternRef:
- return EXTREF_2_LONG;
- case FuncRef:
- return FUNCREF_2_LONG;
+ emitInvokeStatic(asm, F64_TO_LONG);
+ return;
default:
throw new IllegalArgumentException("Unsupported ValueType: " + type.name());
}
}
- public static MethodHandle convertFromLongHandle(ValueType type) {
- try {
- return publicLookup().unreflect(convertFromLong(type));
- } catch (IllegalAccessException e) {
- throw new AssertionError(e);
+ public static MethodHandle longToJvmHandle(ValueType type) {
+ switch (type) {
+ case I32:
+ case ExternRef:
+ case FuncRef:
+ return LONG_TO_I32_MH;
+ case I64:
+ // filterArguments:
+ // Null arguments in the array are treated as identity functions
+ return null;
+ case F32:
+ return LONG_TO_F32_MH;
+ case F64:
+ return LONG_TO_F64_MH;
+ default:
+ throw new IllegalArgumentException("Unsupported ValueType: " + type.name());
}
}
- public static MethodHandle convertToLongHandle(ValueType type) {
- try {
- return publicLookup().unreflect(convertToLong(type));
- } catch (IllegalAccessException e) {
- throw new AssertionError(e);
+ public static MethodHandle jvmToLongHandle(ValueType type) {
+ switch (type) {
+ case I32:
+ case ExternRef:
+ case FuncRef:
+ return I32_TO_LONG_MH;
+ case I64:
+ return I64_TO_LONG_MH;
+ case F32:
+ return F32_TO_LONG_MH;
+ case F64:
+ return F64_TO_LONG_MH;
+ default:
+ throw new IllegalArgumentException("Unsupported ValueType: " + type.name());
}
}
@@ -238,6 +271,21 @@ public static StackSize stackSize(Class> clazz) {
throw new IllegalArgumentException("Unsupported JVM type: " + clazz);
}
+ public static StackSize stackSize(ValueType type) {
+ switch (type) {
+ case I32:
+ case F32:
+ case ExternRef:
+ case FuncRef:
+ return StackSize.ONE;
+ case I64:
+ case F64:
+ return StackSize.TWO;
+ default:
+ throw new IllegalArgumentException("Unsupported type: " + type);
+ }
+ }
+
public static int slotCount(ValueType type) {
switch (type) {
case I32:
diff --git a/aot/src/main/java/com/dylibso/chicory/aot/ValueConversions.java b/aot/src/main/java/com/dylibso/chicory/aot/ValueConversions.java
index 1032e15dc..f4967a036 100644
--- a/aot/src/main/java/com/dylibso/chicory/aot/ValueConversions.java
+++ b/aot/src/main/java/com/dylibso/chicory/aot/ValueConversions.java
@@ -7,36 +7,36 @@ public final class ValueConversions {
private ValueConversions() {}
// From long
- public static int toInt(long val) {
+ public static int longToI32(long val) {
return (int) val;
}
- public static long toLong(long val) {
+ public static long longToI64(long val) {
return val;
}
- public static float toFloat(long val) {
+ public static float longToF32(long val) {
return Value.longToFloat(val);
}
- public static double toDouble(long val) {
+ public static double longToF64(long val) {
return Value.longToDouble(val);
}
// To Long
- public static long asLong(int val) {
+ public static long i32ToLong(int val) {
return val;
}
- public static long asLong(long val) {
+ public static long i64ToLong(long val) {
return val;
}
- public static long asLong(float val) {
+ public static long f32ToLong(float val) {
return Value.floatToLong(val);
}
- public static long asLong(double val) {
+ public static long f64ToLong(double val) {
return Value.doubleToLong(val);
}
}
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBrTable.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBrTable.approved.txt
index f959ecd9c..b881bbdae 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBrTable.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBrTable.approved.txt
@@ -63,7 +63,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
@@ -72,7 +72,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 4
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBranching.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBranching.approved.txt
index 73f93affd..c5634f1ef 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBranching.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyBranching.approved.txt
@@ -56,7 +56,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
@@ -65,7 +65,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 4
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyHelloWasi.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyHelloWasi.approved.txt
index b2efb9f2b..3025330eb 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyHelloWasi.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyHelloWasi.approved.txt
@@ -22,27 +22,27 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_1
ILOAD 1
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_2
ILOAD 2
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_3
ILOAD 3
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
INVOKEVIRTUAL com/dylibso/chicory/runtime/Instance.callHostFunction (I[J)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 7
MAXLOCALS = 6
@@ -79,22 +79,22 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_1
ILOAD 1
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_2
ILOAD 2
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
DUP
ICONST_3
ILOAD 3
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 4
@@ -103,7 +103,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 7
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyIterFact.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyIterFact.approved.txt
index 539741dbe..6b6002f28 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyIterFact.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyIterFact.approved.txt
@@ -55,7 +55,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
@@ -64,7 +64,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 4
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyKitchenSink.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyKitchenSink.approved.txt
index 337284d25..35b83c0b4 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyKitchenSink.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyKitchenSink.approved.txt
@@ -50,7 +50,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
@@ -59,7 +59,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 4
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyMemory.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyMemory.approved.txt
index 17c2beef9..f166d4abf 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyMemory.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyMemory.approved.txt
@@ -56,7 +56,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
@@ -65,7 +65,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toInt (J)I
+ L2I
IRETURN
MAXSTACK = 5
MAXLOCALS = 4
@@ -77,7 +77,6 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
LLOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (J)J
LASTORE
ICONST_1
ILOAD 2
@@ -86,7 +85,6 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
INVOKESTATIC com/dylibso/chicory/aot/AotMethods.callIndirect ([JIIILcom/dylibso/chicory/runtime/Instance;)[J
ICONST_0
LALOAD
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.toLong (J)J
LRETURN
MAXSTACK = 5
MAXLOCALS = 5
diff --git a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyStart.approved.txt b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyStart.approved.txt
index 934ec44ed..2440aac35 100644
--- a/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyStart.approved.txt
+++ b/aot/src/test/resources/com/dylibso/chicory/approvals/ApprovalTest.verifyStart.approved.txt
@@ -22,7 +22,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
INVOKEVIRTUAL com/dylibso/chicory/runtime/Instance.callHostFunction (I[J)[J
RETURN
@@ -47,7 +47,7 @@ public final class com/dylibso/chicory/$gen/CompiledModule {
DUP
ICONST_0
ILOAD 0
- INVOKESTATIC com/dylibso/chicory/aot/ValueConversions.asLong (I)J
+ I2L
LASTORE
ICONST_0
ILOAD 1
diff --git a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java
index 866d063ec..85cfa8de7 100644
--- a/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java
+++ b/wasi/src/main/java/com/dylibso/chicory/wasi/WasiPreview1.java
@@ -475,8 +475,8 @@ public int fdRead(Memory memory, int fd, int iovs, int iovsLen, int nreadPtr) {
int totalRead = 0;
for (var i = 0; i < iovsLen; i++) {
int base = iovs + (i * 8);
- int iovBase = (int) memory.readI32(base);
- var iovLen = (int) memory.readI32(base + 4);
+ int iovBase = memory.readInt(base);
+ var iovLen = memory.readInt(base + 4);
try {
byte[] data = new byte[iovLen];
int read = reader.read(data);
@@ -676,8 +676,8 @@ public int fdWrite(Memory memory, int fd, int iovs, int iovsLen, int nwrittenPtr
var totalWritten = 0;
for (var i = 0; i < iovsLen; i++) {
var base = iovs + (i * 8);
- var iovBase = (int) memory.readI32(base);
- var iovLen = (int) memory.readI32(base + 4);
+ var iovBase = memory.readInt(base);
+ var iovLen = memory.readInt(base + 4);
var data = memory.readBytes(iovBase, iovLen);
try {
int written = writer.write(data);