aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-25 15:55:14 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-25 15:55:14 +0100
commit6aa1d4c0dd57790b65f90b2c69b484ad64ce74bc (patch)
tree5e6f6f6a5296c32294b368f458dec80b0e21cffb /src/main/java
parent3c4abe6920253f63621a314890878b6037335a73 (diff)
Add WASM code gen for return instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java6
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmReturn.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java11
4 files changed, 15 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
index e71d1f15..b572f77e 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
@@ -1,6 +1,7 @@
package org.shedlang.compiler.backends.wasm;
import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmI32Const;
+import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmReturn;
import org.shedlang.compiler.stackir.instructions.*;
public class WasmCodeGen {
@@ -39,9 +40,8 @@ public class WasmCodeGen {
case PushUnitInstruction pushUnit ->
context.addInstruction(new WasmI32Const(0));
- case ReturnInstruction returnInstruction -> {
- throw new UnsupportedOperationException("TODO");
- }
+ case ReturnInstruction returnInstruction ->
+ context.addInstruction(new WasmReturn());
};
}
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java
index 4f33a003..b9cbd672 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmInstruction.java
@@ -1,4 +1,4 @@
package org.shedlang.compiler.backends.wasm.structure.ast.instructions;
-public sealed interface WasmInstruction permits WasmI32Const, WasmI64Const {
+public sealed interface WasmInstruction permits WasmI32Const, WasmI64Const, WasmReturn {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmReturn.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmReturn.java
new file mode 100644
index 00000000..6566468e
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmReturn.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.instructions;
+
+public record WasmReturn() implements WasmInstruction {
+}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java
index 3ed6b618..4bd9bb9a 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatInstructions.java
@@ -1,10 +1,7 @@
package org.shedlang.compiler.backends.wasm.structure.binary;
import org.shedlang.compiler.backends.wasm.structure.BinaryWriter;
-import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmExpression;
-import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmI32Const;
-import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmI64Const;
-import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmInstruction;
+import org.shedlang.compiler.backends.wasm.structure.ast.instructions.*;
import java.io.IOException;
@@ -17,6 +14,12 @@ public class WasmBinaryFormatInstructions {
private static void writeInstruction(WasmInstruction instruction, BinaryWriter writer) {
switch (instruction) {
+ // == Control Instructions ==
+
+ case WasmReturn ignored -> {
+ writer.writeByte(0x0f);
+ }
+
// == Numeric Instructions ==
case WasmI32Const i32Const -> {