diff options
author | luccie-cmd <luccie@sideros.org> | 2025-03-30 14:57:04 +0200 |
---|---|---|
committer | luccie-cmd <luccie@sideros.org> | 2025-03-30 15:00:17 +0200 |
commit | 28420f53b06c7be0090ebbd4f242b11f976d6f64 (patch) | |
tree | eed4d719bd18baf9d42750f9276b6bd8092a26e4 | |
parent | 916115c7cd39f9fc506eaaae2efb209d997ea7d7 (diff) |
Added executing of and
-rw-r--r-- | src/mods/vm.zig | 17 | ||||
-rw-r--r-- | src/mods/wasm.zig | 2 |
2 files changed, 16 insertions, 3 deletions
diff --git a/src/mods/vm.zig b/src/mods/vm.zig index 0d6cddf..a636cb3 100644 --- a/src/mods/vm.zig +++ b/src/mods/vm.zig @@ -107,7 +107,7 @@ pub const Runtime = struct { std.log.err("Reached unreachable statement at IR counter {any}\n", .{frame.program_counter}); frame.code.print(std.io.getStdOut().writer()) catch {}; }, - .nop => @panic("UNIMPLEMENTED"), + .nop => {}, .br => { frame.program_counter = index.u32; continue; @@ -130,8 +130,19 @@ pub const Runtime = struct { .refisnull => @panic("UNIMPLEMENTED"), .reffunc => @panic("UNIMPLEMENTED"), - .drop => @panic("UNIMPLEMENTED"), - .select => @panic("UNIMPLEMENTED"), + .drop => { + _ = self.stack.pop(); + }, + .select => { + const c = self.stack.pop().?.i32; + const val2 = self.stack.pop().?; + const val1 = self.stack.pop().?; + if (c != 0) { + try self.stack.append(val1); + } else { + try self.stack.append(val2); + } + }, .select_with_values => @panic("UNIMPLEMENTED"), .localget => try self.stack.append(frame.locals[index.u32]), diff --git a/src/mods/wasm.zig b/src/mods/wasm.zig index 579309b..a49385e 100644 --- a/src/mods/wasm.zig +++ b/src/mods/wasm.zig @@ -12,10 +12,12 @@ pub const Type = enum(u8) { pub const GlobalRuntime = struct { functions: std.StringHashMap(*const fn (stack: *std.ArrayList(vm.Value)) void), + // globals: [_]vm.Value, pub fn init(allocator: Allocator) GlobalRuntime { return GlobalRuntime{ .functions = std.StringHashMap(*const fn (stack: *std.ArrayList(vm.Value)) void).init(allocator), + // .globals = .{} }; } |