aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-25 15:59:22 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-25 15:59:22 +0100
commitb8ef288f0d552272b2086deb03b1d56fb25c7275 (patch)
treecb9720a3c21a1fb79fb9d830a392c13540480fdf /src/main/java
parent6aa1d4c0dd57790b65f90b2c69b484ad64ce74bc (diff)
Add WASM code gen for discard instruction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java7
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java4
-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/binary/WasmBinaryFormatInstructions.java6
4 files changed, 15 insertions, 4 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 b572f77e..482d308e 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmCodeGen.java
@@ -1,5 +1,6 @@
package org.shedlang.compiler.backends.wasm;
+import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmDrop;
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.*;
@@ -16,9 +17,9 @@ public class WasmCodeGen {
case DefineFunctionInstruction defineFunctionInstruction -> {
throw new UnsupportedOperationException("TODO");
}
- case DiscardInstruction discardInstruction -> {
- throw new UnsupportedOperationException("TODO");
- }
+ case DiscardInstruction discard ->
+ context.addInstruction(new WasmDrop());
+
case LocalLoadInstruction localLoadInstruction -> {
throw new UnsupportedOperationException("TODO");
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java
new file mode 100644
index 00000000..fceeccdc
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/instructions/WasmDrop.java
@@ -0,0 +1,4 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.instructions;
+
+public record WasmDrop() implements WasmInstruction {
+}
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 b9cbd672..5cdd7a23 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, WasmReturn {
+public sealed interface WasmInstruction permits WasmDrop, WasmI32Const, WasmI64Const, WasmReturn {
}
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 4bd9bb9a..988d8c9e 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
@@ -20,6 +20,12 @@ public class WasmBinaryFormatInstructions {
writer.writeByte(0x0f);
}
+ // == Parametric Instructions ==
+
+ case WasmDrop ignored -> {
+ writer.writeByte(0x1a);
+ }
+
// == Numeric Instructions ==
case WasmI32Const i32Const -> {