diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-23 11:39:03 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-23 11:39:03 +0100 |
| commit | 2c1a7017af56de72f53f5ce126ccb5580bc3e42f (patch) | |
| tree | d845b54f567d08fa1fb9ccff7110fe147f84fd57 /src/main/java | |
| parent | a5df38ed41f9554bafb2dbfb88c9f5ecbc7db4e7 (diff) | |
Extract WasmPatioCodeGen::generateOperandToLocal()
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java | 83 |
1 files changed, 43 insertions, 40 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java index caf7880d..e7735ae3 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java @@ -129,14 +129,12 @@ public class WasmPatioCodeGen { yield context; } - case PatioBoolToInt patioBoolToInt -> { - context = generateOperand(patioBoolToInt.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioBoolToInt.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } + case PatioBoolToInt patioBoolToInt -> + generateOperandToLocal( + patioBoolToInt.target(), + patioBoolToInt.value(), + context + ); case PatioCall patioCall -> { for (var patioArg : patioCall.args()) { @@ -181,14 +179,12 @@ public class WasmPatioCodeGen { yield context; } - case PatioDataPtrToInt patioDataPtrToInt -> { - context = generateOperand(patioDataPtrToInt.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioDataPtrToInt.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } + case PatioDataPtrToInt patioDataPtrToInt -> + generateOperandToLocal( + patioDataPtrToInt.target(), + patioDataPtrToInt.value(), + context + ); case PatioIf patioIf -> { context = generateOperand(patioIf.condition(), context); @@ -238,32 +234,26 @@ public class WasmPatioCodeGen { yield context; } - case PatioIntToBool patioIntToBool -> { - context = generateOperand(patioIntToBool.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToBool.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } - - case PatioIntToDataPtr patioIntToDataPtr -> { - context = generateOperand(patioIntToDataPtr.value(), context); - - var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToDataPtr.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); - - yield context; - } - - case PatioLocalStore patioLocalStore -> { - context = generateOperand(patioLocalStore.value(), context); + case PatioIntToBool patioIntToBool -> + generateOperandToLocal( + patioIntToBool.target(), + patioIntToBool.value(), + context + ); - var targetWasmLocalIndex = context.wasmLocalIndex(patioLocalStore.target()); - context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); + case PatioIntToDataPtr patioIntToDataPtr -> + generateOperandToLocal( + patioIntToDataPtr.target(), + patioIntToDataPtr.value(), + context + ); - yield context; - } + case PatioLocalStore patioLocalStore -> + generateOperandToLocal( + patioLocalStore.target(), + patioLocalStore.value(), + context + ); case PatioMemoryLoad patioMemoryLoad -> { context = generateOperand(patioMemoryLoad.pointer(), context); @@ -300,6 +290,19 @@ public class WasmPatioCodeGen { }; } + private static Context generateOperandToLocal( + PatioLocalRef target, + PatioOperand value, + Context context + ) { + context = generateOperand(value, context); + + var targetWasmLocalIndex = context.wasmLocalIndex(target); + context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex)); + + return context; + } + private static Context generateOperand( PatioOperand patioOperand, Context context |
