t3hn3rd
eda3669ab2
Merge branch 'feature/build-script-conversion-ps' into develop
2026-02-24 21:52:51 +00:00
t3hn3rd
a5b532d0c1
ALL BUILD SCRIPTS MUST BE POWERSHELL
...
SEE COMMIT HEADER
2026-02-24 21:52:33 +00:00
t3hn3rd
a8817e0350
Merge branch 'feature/spec-conformity' into develop
2026-02-24 21:45:45 +00:00
t3hn3rd
b937e60838
feature: implement all float, conversion, table & bulk memory opcodes with IEEE 754 hardening
...
Complete implementation of remaining WASM MVP and post-MVP opcodes:
Float arithmetic (f32/f64):
- abs, neg (purely bitwise), ceil, floor, trunc, nearest, sqrt
- add, sub, mul, div with indeterminate form handling
(Inf+(-Inf), Inf-Inf, Inf*0, 0/0, Inf/Inf -> NaN; x/0 -> ±Inf)
- min, max with signed-zero fix (OR for min, AND for max)
- copysign (bitwise sign transfer)
Float comparisons (f64 eq/ne/lt/gt/le/ge):
- Added bitwise NaN detection before comparisons to prevent EInvalidOp on x64 FPC
Conversion opcodes:
- i32.wrap_i64, i64.extend_i32_s/u
- i32/i64.trunc_f32/f64_s/u with NaN + overflow traps
- f32/f64.convert_i32/i64_s/u
- f32.demote_f64, f64.promote_f32
- i32/i64.reinterpret_f32/f64, f32/f64.reinterpret_i32/i64
- i32.extend8_s, i32.extend16_s, i64.extend8_s/16_s/32_s
0xFC prefix dispatch + saturating truncation (FC 00-07):
- i32/i64.trunc_sat_f32/f64_s/u with NaN->0, clamp to min/max
Bulk memory (FC 08-0B):
- memory.init, data.drop, memory.copy (overlap-safe), memory.fill
Table operations (FC 0C-11 + opcodes 0x25/0x26):
- table.get, table.set, table.init, elem.drop
- table.copy (overlap-safe), table.grow, table.size, table.fill
Control flow & infrastructure:
- select t* (typed select, 0x1C) with LEB128 type vector
- block/loop/if blocktype now parsed as LEB128 s33 (multi-byte support)
- Control flow scanner updated for all new opcodes (0xFC sub-opcodes,
table.get/set, typed select)
- VM init: jump tables heap-allocated via kalloc, FC table initialized
All float ops use bitwise NaN detection to avoid FPC x64 EInvalidOp.
2026-02-24 21:45:10 +00:00
t3hn3rd
255ad4806e
Merge branch 'feature/opcode-refactor' into develop
2026-02-24 15:38:48 +00:00
t3hn3rd
93dfff358d
refactor: Split monolithic wasm.vm.opcodes.pas into 119 individual opcode units
...
- Extract each opcode procedure from wasm.vm.opcodes.pas into its own
unit file under src/wasm/vm/opcodes/ following the naming convention
wasm.vm.opcode.<name>.pas. The hub file now only imports the individual
units and contains initializeOpcodeJumpTable with fully qualified
procedure references.
- Add missing test coverage for the else opcode (4 tests), bringing the
total from 425 to 429 with all tests passing.
Files:
- 119 new opcode units under src/wasm/vm/opcodes/
- 1 new test: wasm.test.opcode.elseop.pas
- Modified: wasm.vm.opcodes.pas (hub-only), wasm.test.pas, build.bat
2026-02-24 15:38:36 +00:00
t3hn3rd
3ed5c0a847
Merge branch 'feature/build-clean' into develop
2026-02-24 14:57:43 +00:00
t3hn3rd
ff65a0d5f0
refactor: build.bat flexible argument parsing, add run & help commands
...
- Replaced positional `%1` checks with a loop-based argument parser
so flags (`test`, `clean`, `run`, `help`) work in any order/combination
- Added `run` flag: executes `bin\WASURO.exe` after a successful build
- Added `help` flag: prints usage info and exits
- Fixed `clean` early-exit to also check `DO_RUN` (not just `TESTFLAGS`),
so `build.bat clean run` correctly continues to build+run
- Added section comment headers (Build, Run) for consistency
2026-02-24 14:57:30 +00:00
t3hn3rd
76d7d737c0
Merge branch 'feature/missing-opcodes' into develop
2026-02-24 14:47:01 +00:00
t3hn3rd
d12ad11746
feature: implement control flow opcodes, extract constants & helpers
...
## Control Flow Opcodes
- Implemented all 10 remaining stub control flow opcodes:
block, loop, if, else, end, br, br_if, br_table, call, call_indirect
- Rewrote return opcode to walk control stack and restore call frames
- Fixed tick() hang: now halts when IP >= Limit
## Refactoring
- Extracted WASM_HDR_MAGIC and CTRL_FRAME_* constants to wasm.types.constants.pas
- Extracted push_control_frame, scan_forward, do_branch helpers to wasm.vm.control.pas
- Updated wasm.parser.pas to reference constants via wasm.types.constants
## Tests
- Added 9 new test units (25 tests):
block, loop, if, end, br, br_if, br_table, call, call_indirect
- Added E2E binary test: 115-byte handcrafted WASM binary exercising
all control flow opcodes (2 functions, expected result=30)
- All 425/425 tests passing
2026-02-24 14:46:30 +00:00
t3hn3rd
679973c6e9
Merge branch 'feature/type-refactoring' into develop
2026-02-24 13:24:15 +00:00
t3hn3rd
68df3565cb
feature: types refactored from one monolithic file to seperation of duties
...
- wasm.types.context.pas
- wasm.types.enums.pas
- wasm.types.sections.pas
- wasm.types.values.pas
2026-02-24 13:23:46 +00:00
t3hn3rd
862e3254df
Merge branch 'hotfix/binary-test-builtins' into develop
2026-02-24 13:05:42 +00:00
t3hn3rd
6794c52a77
patch: binary-test patched to use builtin types
2026-02-24 13:05:33 +00:00
t3hn3rd
7cc4459dfd
Merge branch 'feature/builtin-types' into develop
2026-02-24 13:04:25 +00:00
t3hn3rd
ae344e7495
Merge branch 'feature/binary-tests' into develop
2026-02-24 13:04:20 +00:00
t3hn3rd
430ebcd203
feature: added built-in types as a OS/RTL->VM decoupling mechanism
...
- Added src/wasm/types/wasm.types.builtin.pas as a decoupling unit.
- Updated all units to only use these types.
- Added linter step (lint.ps1) to enforce usage of these types.
2026-02-24 13:03:27 +00:00
t3hn3rd
835f6f86cc
feature: Binary E2E tests
...
Implemented the following E2E tests:
- src/wasm/test/wasm.test.binary.addnums.pas
- src/wasm/test/wasm.test.binary.arithmetic.pas
- src/wasm/test/wasm.test.binary.locals.pas
- src/wasm/test/wasm.test.binary.memroundtrip.pas
- src/wasm/test/wasm.test.binary.return42.pas
2026-02-24 12:26:43 +00:00
t3hn3rd
a5192366ed
Merge branch 'hotfix/readme.1' into develop
2026-02-24 00:47:36 +00:00
t3hn3rd
d3cd71072b
hotfix: Fixed errors & formatting in generated ReadMe
...
- Incorrect link to the Asuro project.
- Formatting issues.
2026-02-24 00:47:23 +00:00
t3hn3rd
e40d8e9ed5
Merge branch 'feature/readme' into develop
2026-02-24 00:42:31 +00:00
t3hn3rd
fca24af1b0
docs: add project README
...
Add README.md documenting WASURO's architecture, implemented opcodes,
parsed sections, build instructions, testing, and constraints.
Covers:
- Project overview (WASM VM for Asuro OS, Standard Pascal, bare-metal)
- Source tree layout and key components (VM, parser, stack, heap, emu layer)
- Full table of implemented opcodes (control, variables, constants,
i32/i64 arithmetic/bitwise/comparison, f32/f64 comparison,
memory loads/stores, memory.size/grow)
- Parsed WASM binary sections
- Build and test instructions (build.bat / build.bat test)
- Kernel compatibility constraints (no RTL, no classes)
2026-02-24 00:42:17 +00:00
t3hn3rd
8c16550bd4
Merge branch 'feature/test-suite' into develop
2026-02-24 00:38:11 +00:00
t3hn3rd
9a3b813c96
Merge branch 'feature/opcode-parser-implementation' into develop
2026-02-24 00:38:06 +00:00
t3hn3rd
8a4bb2ca35
Merge branch 'feature/build-scripts' into develop
2026-02-24 00:38:00 +00:00
t3hn3rd
ff28299132
feature: add build script and update .gitignore
...
Add build.bat for compiling WASURO with FPC 3.2.2 (x86_64-win64).
Supports optional "test" argument to enable the test suite.
build.bat:
- Configures FPC with all source unit paths (emu, wasm, parser,
sections, types, vm, test infrastructure)
- Outputs to bin/WASURO.exe, intermediate units to lib/
- "build.bat test" passes -dRUN_TESTS to include test units
- Debug info enabled (-gw3)
- Propagates FPC exit code on failure
.gitignore:
- Add AGENTS.md (AI agent instructions, not project source), this file
should be personal choice, not dictated at a project level.
2026-02-24 00:37:37 +00:00
t3hn3rd
dc67262477
feature: add comprehensive WASM test suite (374 tests)
...
Add a full test framework and 123 test files covering infrastructure,
parser sections, and VM opcodes. All 374 tests pass; exit code reflects
failure count for CI/CD integration.
Test framework (wasm.test.framework):
- Assert helpers: assert_true, assert_i32/i64/u32/u64/f32/f64/bool
- Context builders: make_test_context, setup_test_locals, setup_test_globals
- Global counters: TotalTests, PassedTests, FailedTests
Test runner (wasm.test, WASURO.lpr):
- Master runner calls all 108 test units and prints summary
- halt(FailedTests) returns exit code for pipeline consumption
- Gated behind {$IFDEF RUN_TESTS} / build.bat test
Infrastructure tests (3 units):
- Stack push/pop for i32, i64, f32, f64
- Heap read/write across all widths (8/16/32/64-bit)
- LEB128 unsigned/signed encoding/decoding
Parser tests (8 units):
- type, function, export, code, global, memory, start, data sections
Opcode tests (97 units, ~374 assertions):
- Control: nop, unreachable, drop, select, return
- Variables: local.get/set/tee, global.get/set
- Constants: i32/i64/f32/f64.const
- I32: all arithmetic, bitwise, and comparison ops (29 units)
- I64: all arithmetic, bitwise, and comparison ops (29 units)
- F32/F64: all comparison ops (12 units)
- Memory loads: i32/i64/f32/f64.load + sign/zero-extending variants (14 units)
- Memory stores: i32/i64/f32/f64.store + narrowing variants (9 units)
2026-02-24 00:34:49 +00:00
t3hn3rd
d34997aa4e
feature: implement WASM parser sections and VM opcode handlers
...
Parser implementations:
- dataSection: parse segments, evaluate i32.const offset expressions,
copy data bytes into linear memory
- globalSection: parse globals with init expression evaluation and
type/mutability handling
- memorySection: parse memory limits (initial/max pages, flags)
- startSection: parse start function index
- wasm.parser: route new section types to their handlers
VM opcode implementations:
- Control: nop, unreachable (trap), drop, select, return
- Variables: local.get/set/tee, global.get/set
- Constants: i32.const, i64.const, f32.const, f64.const
- I32 arithmetic: add, sub, mul, div_s, div_u, rem_s, rem_u,
clz, ctz, popcnt
- I32 bitwise: and, or, xor, shl, shr_s, shr_u, rotl, rotr
- I32 comparison: eqz, eq, ne, lt_s/u, gt_s/u, le_s/u, ge_s/u
- I64 arithmetic: add, sub, mul, div_s, div_u, rem_s, rem_u,
clz, ctz, popcnt
- I64 bitwise: and, or, xor, shl, shr_s, shr_u, rotl, rotr
- I64 comparison: eqz, eq, ne, lt_s/u, gt_s/u, le_s/u, ge_s/u
- F32/F64 comparison: eq, ne, lt, gt, le, ge
- Memory loads: i32/i64/f32/f64.load, i32.load8_s/u, i32.load16_s/u,
i64.load8_s/u, i64.load16_s/u, i64.load32_s/u
- Memory stores: i32/i64/f32/f64.store, i32.store8, i32.store16,
i64.store8, i64.store16, i64.store32
- Memory management: memory.size, memory.grow
Bug fixes:
- memory.grow: guard against uint32 underflow when growing 0 pages
- select: fix off-by-one stack indexing for val1/val2
- i32/i64.shr_s: use manual arithmetic shift right (logical shift +
sign-bit mask fill) instead of RTL intrinsics for bare-metal
kernel compatibility
Type additions:
- wasm.types: new records and pointer types for globals, locals,
and section structures
2026-02-24 00:31:36 +00:00
t3hn3rd
3361286352
Initial commit
2026-02-23 23:02:58 +00:00