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);