From 859e3505bc41db27ab56d475ab3f3c15b3897916 Mon Sep 17 00:00:00 2001 From: Denys Zadorozhnyi Date: Mon, 8 Jul 2024 15:05:48 +0300 Subject: [PATCH 1/2] test: add runtime checks in `get_inputs` test to check for mocked inputs on the Rust side --- .../abi_transform_tx_kernel_get_inputs_4.hir | 103 ++++++++- .../abi_transform_tx_kernel_get_inputs_4.masm | 215 ++++++++++++++++++ .../abi_transform_tx_kernel_get_inputs_4.wat | 116 ++++++++-- .../abi_transform/tx_kernel.rs | 10 +- 4 files changed, 415 insertions(+), 29 deletions(-) diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir index bd3366937..0ddba49a7 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir @@ -10,10 +10,107 @@ ;; Functions (func (export #entrypoint) (param i32) (block 0 (param v0 i32) - (call #miden_tx_kernel_sys::get_inputs v0) - (br (block 1))) + (let (v1 i32) (const.i32 0)) + (let (v2 i32) (global.load i32 (global.symbol #__stack_pointer))) + (let (v3 i32) (const.i32 16)) + (let (v4 i32) (sub.wrapping v2 v3)) + (let (v5 (ptr i32)) (global.symbol #__stack_pointer)) + (store v5 v4) + (let (v6 i32) (const.i32 4)) + (let (v7 i32) (add.wrapping v4 v6)) + (call #miden_tx_kernel_sys::get_inputs v7) + (let (v8 u32) (cast v4)) + (let (v9 u32) (add.checked v8 12)) + (let (v10 (ptr i32)) (inttoptr v9)) + (let (v11 i32) (load v10)) + (let (v12 i1) (eq v11 0)) + (let (v13 i32) (cast v12)) + (let (v14 i1) (neq v13 0)) + (condbr v14 (block 2) (block 3))) - (block 1 + (block 1) + + (block 2 + (unreachable)) + + (block 3 + (let (v15 u32) (cast v4)) + (let (v16 u32) (add.checked v15 8)) + (let (v17 (ptr i32)) (inttoptr v16)) + (let (v18 i32) (load v17)) + (let (v19 u32) (cast v18)) + (let (v20 (ptr felt)) (inttoptr v19)) + (let (v21 felt) (load v20)) + (let (v22 i64) (const.i64 4294967295)) + (let (v23 felt) (cast v22)) + (assert.eq v23 v21) + (let (v24 i32) (const.i32 1)) + (let (v25 i1) (eq v11 v24)) + (let (v26 i32) (cast v25)) + (let (v27 i1) (neq v26 0)) + (condbr v27 (block 2) (block 4))) + + (block 4 + (let (v28 u32) (cast v18)) + (let (v29 u32) (add.checked v28 8)) + (let (v30 (ptr felt)) (inttoptr v29)) + (let (v31 felt) (load v30)) + (let (v32 i64) (const.i64 1)) + (let (v33 felt) (cast v32)) + (assert.eq v33 v31) + (let (v34 i32) (const.i32 2)) + (let (v35 u32) (cast v11)) + (let (v36 u32) (cast v34)) + (let (v37 i1) (lte v35 v36)) + (let (v38 i32) (cast v37)) + (let (v39 i1) (neq v38 0)) + (condbr v39 (block 2) (block 5))) + + (block 5 + (let (v40 u32) (cast v18)) + (let (v41 u32) (add.checked v40 16)) + (let (v42 (ptr felt)) (inttoptr v41)) + (let (v43 felt) (load v42)) + (let (v44 i64) (const.i64 0)) + (let (v45 felt) (cast v44)) + (assert.eq v45 v43) + (let (v46 i32) (const.i32 3)) + (let (v47 i1) (eq v11 v46)) + (let (v48 i32) (cast v47)) + (let (v49 i1) (neq v48 0)) + (condbr v49 (block 2) (block 6))) + + (block 6 + (let (v50 u32) (cast v18)) + (let (v51 u32) (add.checked v50 24)) + (let (v52 (ptr felt)) (inttoptr v51)) + (let (v53 felt) (load v52)) + (let (v54 i64) (const.i64 4294967295)) + (let (v55 felt) (cast v54)) + (assert.eq v55 v53) + (let (v56 i32) (const.i32 8)) + (let (v57 i32) (add.wrapping v0 v56)) + (let (v58 i32) (const.i32 4)) + (let (v59 i32) (add.wrapping v4 v58)) + (let (v60 i32) (const.i32 8)) + (let (v61 i32) (add.wrapping v59 v60)) + (let (v62 u32) (cast v61)) + (let (v63 (ptr i32)) (inttoptr v62)) + (let (v64 i32) (load v63)) + (let (v65 u32) (cast v57)) + (let (v66 (ptr i32)) (inttoptr v65)) + (store v66 v64) + (let (v67 u32) (cast v4)) + (let (v68 u32) (add.checked v67 4)) + (let (v69 (ptr i64)) (inttoptr v68)) + (let (v70 i64) (load v69)) + (let (v71 u32) (cast v0)) + (let (v72 (ptr i64)) (inttoptr v71)) + (store v72 v70) + (let (v73 i32) (const.i32 16)) + (let (v74 i32) (add.wrapping v4 v73)) + (let (v75 (ptr i32)) (global.symbol #__stack_pointer)) + (store v75 v74) (ret)) ) diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm index 4c43e1fe2..3398fe690 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm @@ -15,7 +15,222 @@ export.get_inputs use.miden::note export.entrypoint + mem_load.0x00000000 + push.16 + u32wrapping_sub + push.4 + dup.1 + swap.1 + u32wrapping_add exec."miden_tx_kernel_sys::get_inputs" + dup.1 + swap.1 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_sw + dup.0 + add.12 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_sw + dup.0 + eq.0 + neq.0 + if.true + push.0 assert + else + dup.1 + add.8 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_sw + dup.0 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_felt + push.0.4294967295 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lte + assert + mul + assert_eq + push.1 + dup.2 + swap.1 + eq + neq.0 + if.true + push.0 assert + else + dup.0 + add.8 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_felt + push.0.1 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lte + assert + mul + assert_eq + dup.1 + push.2 + u32lte + neq.0 + if.true + push.0 assert + else + dup.0 + add.16 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_felt + push.0.0 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lte + assert + mul + assert_eq + push.3 + movup.2 + swap.1 + eq + neq.0 + if.true + push.0 assert + else + push.16 + dup.2 + swap.1 + u32wrapping_add + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_sw + dup.1 + add.4 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_dw + dup.4 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_dw + push.4 + movup.2 + swap.1 + u32wrapping_add + push.8 + u32wrapping_add + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_sw + push.8 + movup.3 + swap.1 + u32wrapping_add + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_sw + add.24 + u32assert + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_felt + push.0.4294967295 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lte + assert + mul + assert_eq + end + end + end + end end diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat index 756031a93..e3701acb4 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat @@ -1,24 +1,98 @@ (module $abi_transform_tx_kernel_get_inputs_4.wasm - (type (;0;) (func (param i32) (result i32))) - (type (;1;) (func (param i32))) - (type (;2;) (func (param i32 i32) (result i32))) - (type (;3;) (func (param i32 i32 i32 i32))) - (type (;4;) (func (param i32 i32 i32) (result i32))) - (type (;5;) (func (param i32 i32 i32))) - (type (;6;) (func (param i32 i32))) - (type (;7;) (func)) - (import "miden::note" "get_inputs<0x0000000000000000000000000000000000000000000000000000000000000000>" (func $miden_tx_kernel_sys::externs::extern_note_get_inputs (;0;) (type 0))) - (func $entrypoint (;1;) (type 1) (param i32) - local.get 0 + (type (;0;) (func (param i64) (result f64))) + (type (;1;) (func (param f64 f64))) + (type (;2;) (func (param i32) (result i32))) + (type (;3;) (func (param i32))) + (type (;4;) (func (param i32 i32) (result i32))) + (type (;5;) (func (param i32 i32 i32 i32))) + (type (;6;) (func (param i32 i32 i32) (result i32))) + (type (;7;) (func (param i32 i32 i32))) + (type (;8;) (func (param i32 i32))) + (type (;9;) (func)) + (import "miden:stdlib/intrinsics_felt" "from_u64_unchecked" (func $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked (;0;) (type 0))) + (import "miden:stdlib/intrinsics_felt" "assert_eq" (func $miden_stdlib_sys::intrinsics::felt::extern_assert_eq (;1;) (type 1))) + (import "miden::note" "get_inputs<0x0000000000000000000000000000000000000000000000000000000000000000>" (func $miden_tx_kernel_sys::externs::extern_note_get_inputs (;2;) (type 2))) + (func $entrypoint (;3;) (type 3) (param i32) + (local i32 i32 i32) + global.get $__stack_pointer + i32.const 16 + i32.sub + local.tee 1 + global.set $__stack_pointer + local.get 1 + i32.const 4 + i32.add call $miden_tx_kernel_sys::get_inputs + block ;; label = @1 + local.get 1 + i32.load offset=12 + local.tee 2 + i32.eqz + br_if 0 (;@1;) + local.get 1 + i32.load offset=8 + local.tee 3 + f64.load + i64.const 4294967295 + call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked + call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq + local.get 2 + i32.const 1 + i32.eq + br_if 0 (;@1;) + local.get 3 + f64.load offset=8 + i64.const 1 + call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked + call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq + local.get 2 + i32.const 2 + i32.le_u + br_if 0 (;@1;) + local.get 3 + f64.load offset=16 + i64.const 0 + call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked + call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq + local.get 2 + i32.const 3 + i32.eq + br_if 0 (;@1;) + local.get 3 + f64.load offset=24 + i64.const 4294967295 + call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked + call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq + local.get 0 + i32.const 8 + i32.add + local.get 1 + i32.const 4 + i32.add + i32.const 8 + i32.add + i32.load + i32.store + local.get 0 + local.get 1 + i64.load offset=4 align=4 + i64.store align=4 + local.get 1 + i32.const 16 + i32.add + global.set $__stack_pointer + return + end + unreachable + unreachable ) - (func $__rust_alloc (;2;) (type 2) (param i32 i32) (result i32) + (func $__rust_alloc (;4;) (type 4) (param i32 i32) (result i32) i32.const 1048576 local.get 1 local.get 0 call $::alloc ) - (func $__rust_alloc_zeroed (;3;) (type 2) (param i32 i32) (result i32) + (func $__rust_alloc_zeroed (;5;) (type 4) (param i32 i32) (result i32) block ;; label = @1 i32.const 1048576 local.get 1 @@ -34,7 +108,7 @@ end local.get 1 ) - (func $wee_alloc::neighbors::Neighbors::remove (;4;) (type 1) (param i32) + (func $wee_alloc::neighbors::Neighbors::remove (;6;) (type 3) (param i32) (local i32 i32 i32) block ;; label = @1 local.get 0 @@ -101,7 +175,7 @@ i32.and i32.store ) - (func $::new_cell_for_free_list (;5;) (type 3) (param i32 i32 i32 i32) + (func $::new_cell_for_free_list (;7;) (type 5) (param i32 i32 i32 i32) block ;; label = @1 block ;; label = @2 local.get 2 @@ -159,7 +233,7 @@ local.get 3 i32.store ) - (func $wee_alloc::alloc_first_fit (;6;) (type 4) (param i32 i32 i32) (result i32) + (func $wee_alloc::alloc_first_fit (;8;) (type 6) (param i32 i32 i32) (result i32) (local i32 i32 i32 i32 i32 i32) local.get 1 i32.const -1 @@ -391,7 +465,7 @@ br 0 (;@1;) end ) - (func $::alloc (;7;) (type 4) (param i32 i32 i32) (result i32) + (func $::alloc (;9;) (type 6) (param i32 i32 i32) (result i32) (local i32 i32) global.get $__stack_pointer i32.const 16 @@ -485,7 +559,7 @@ global.set $__stack_pointer local.get 1 ) - (func $miden_tx_kernel_sys::get_inputs (;8;) (type 1) (param i32) + (func $miden_tx_kernel_sys::get_inputs (;10;) (type 3) (param i32) (local i32 i32 i32) global.get $__stack_pointer i32.const 16 @@ -539,7 +613,7 @@ call $alloc::raw_vec::capacity_overflow unreachable ) - (func $alloc::raw_vec::RawVec::try_allocate_in (;9;) (type 5) (param i32 i32 i32) + (func $alloc::raw_vec::RawVec::try_allocate_in (;11;) (type 7) (param i32 i32 i32) (local i32) block ;; label = @1 block ;; label = @2 @@ -613,11 +687,11 @@ local.get 1 i32.store ) - (func $alloc::alloc::handle_alloc_error (;10;) (type 6) (param i32 i32) + (func $alloc::alloc::handle_alloc_error (;12;) (type 8) (param i32 i32) unreachable unreachable ) - (func $alloc::raw_vec::capacity_overflow (;11;) (type 7) + (func $alloc::raw_vec::capacity_overflow (;13;) (type 9) unreachable unreachable ) diff --git a/tests/integration/src/rust_masm_tests/abi_transform/tx_kernel.rs b/tests/integration/src/rust_masm_tests/abi_transform/tx_kernel.rs index 0af3771bc..498a60954 100644 --- a/tests/integration/src/rust_masm_tests/abi_transform/tx_kernel.rs +++ b/tests/integration/src/rust_masm_tests/abi_transform/tx_kernel.rs @@ -22,10 +22,9 @@ fn test_get_inputs(test_name: &str, expected_inputs: Vec) { let mut main_fn = String::new(); writeln!(main_fn, "() -> Vec {{\n").unwrap(); writeln!(main_fn, " let inputs = get_inputs();").unwrap(); - // for (_i, _expected_input) in expected_inputs.iter().enumerate() { - // TODO: use miden asserts once they are implemented - // writeln!(main_fn, " assert_eq!(inputs[{i}], {expected_input});").unwrap(); - // } + for (i, expected_input) in expected_inputs.iter().enumerate() { + writeln!(main_fn, " assert_eq(inputs[{i}], felt!({expected_input}));").unwrap(); + } writeln!(main_fn, " inputs").unwrap(); writeln!(main_fn, "}}").unwrap(); @@ -50,7 +49,8 @@ fn test_get_inputs(test_name: &str, expected_inputs: Vec) { test.expect_masm(expect_file![format!("../../../expected/{artifact_name}.masm")]); let vm_program = test.vm_masm_program(); - // let vm_out = execute_vm_tracing(&vm_program, &[]).unwrap(); + let vm_out = execute_vm_tracing(&vm_program, &[]).unwrap(); + // let vm_out = execute_vm(&vm_program, &[]); // let ir_program = test.ir_masm_program(); // let emul_out = execute_emulator(ir_program.clone(), &[]); From d5443b5d669a34eb8b95b5876c0afb21e19cf993 Mon Sep 17 00:00:00 2001 From: Denys Zadorozhnyi Date: Mon, 22 Jul 2024 10:57:36 +0300 Subject: [PATCH 2/2] test: update expected wat/ir/masm for get_inputs test --- .../abi_transform_tx_kernel_get_inputs_4.hir | 174 ++++++++++-------- .../abi_transform_tx_kernel_get_inputs_4.masm | 160 ++++++++++++---- .../abi_transform_tx_kernel_get_inputs_4.wat | 12 +- 3 files changed, 231 insertions(+), 115 deletions(-) diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir index 0ddba49a7..971fd91d1 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.hir @@ -21,12 +21,14 @@ (call #miden_tx_kernel_sys::get_inputs v7) (let (v8 u32) (cast v4)) (let (v9 u32) (add.checked v8 12)) - (let (v10 (ptr i32)) (inttoptr v9)) - (let (v11 i32) (load v10)) - (let (v12 i1) (eq v11 0)) - (let (v13 i32) (cast v12)) - (let (v14 i1) (neq v13 0)) - (condbr v14 (block 2) (block 3))) + (let (v10 u32) (mod.unchecked v9 2)) + (assertz v10) + (let (v11 (ptr i32)) (inttoptr v9)) + (let (v12 i32) (load v11)) + (let (v13 i1) (eq v12 0)) + (let (v14 i32) (zext v13)) + (let (v15 i1) (neq v14 0)) + (condbr v15 (block 2) (block 3))) (block 1) @@ -34,83 +36,101 @@ (unreachable)) (block 3 - (let (v15 u32) (cast v4)) - (let (v16 u32) (add.checked v15 8)) - (let (v17 (ptr i32)) (inttoptr v16)) - (let (v18 i32) (load v17)) - (let (v19 u32) (cast v18)) - (let (v20 (ptr felt)) (inttoptr v19)) - (let (v21 felt) (load v20)) - (let (v22 i64) (const.i64 4294967295)) - (let (v23 felt) (cast v22)) - (assert.eq v23 v21) - (let (v24 i32) (const.i32 1)) - (let (v25 i1) (eq v11 v24)) - (let (v26 i32) (cast v25)) - (let (v27 i1) (neq v26 0)) - (condbr v27 (block 2) (block 4))) + (let (v16 u32) (cast v4)) + (let (v17 u32) (add.checked v16 8)) + (let (v18 u32) (mod.unchecked v17 2)) + (assertz v18) + (let (v19 (ptr i32)) (inttoptr v17)) + (let (v20 i32) (load v19)) + (let (v21 u32) (cast v20)) + (let (v22 u32) (mod.unchecked v21 2)) + (assertz v22) + (let (v23 (ptr felt)) (inttoptr v21)) + (let (v24 felt) (load v23)) + (let (v25 i64) (const.i64 4294967295)) + (let (v26 felt) (cast v25)) + (assert.eq v26 v24) + (let (v27 i32) (const.i32 1)) + (let (v28 i1) (eq v12 v27)) + (let (v29 i32) (zext v28)) + (let (v30 i1) (neq v29 0)) + (condbr v30 (block 2) (block 4))) (block 4 - (let (v28 u32) (cast v18)) - (let (v29 u32) (add.checked v28 8)) - (let (v30 (ptr felt)) (inttoptr v29)) - (let (v31 felt) (load v30)) - (let (v32 i64) (const.i64 1)) - (let (v33 felt) (cast v32)) - (assert.eq v33 v31) - (let (v34 i32) (const.i32 2)) - (let (v35 u32) (cast v11)) - (let (v36 u32) (cast v34)) - (let (v37 i1) (lte v35 v36)) - (let (v38 i32) (cast v37)) - (let (v39 i1) (neq v38 0)) - (condbr v39 (block 2) (block 5))) + (let (v31 u32) (cast v20)) + (let (v32 u32) (add.checked v31 4)) + (let (v33 u32) (mod.unchecked v32 2)) + (assertz v33) + (let (v34 (ptr felt)) (inttoptr v32)) + (let (v35 felt) (load v34)) + (let (v36 i64) (const.i64 1)) + (let (v37 felt) (cast v36)) + (assert.eq v37 v35) + (let (v38 i32) (const.i32 2)) + (let (v39 u32) (bitcast v12)) + (let (v40 u32) (bitcast v38)) + (let (v41 i1) (lte v39 v40)) + (let (v42 i32) (sext v41)) + (let (v43 i1) (neq v42 0)) + (condbr v43 (block 2) (block 5))) (block 5 - (let (v40 u32) (cast v18)) - (let (v41 u32) (add.checked v40 16)) - (let (v42 (ptr felt)) (inttoptr v41)) - (let (v43 felt) (load v42)) - (let (v44 i64) (const.i64 0)) - (let (v45 felt) (cast v44)) - (assert.eq v45 v43) - (let (v46 i32) (const.i32 3)) - (let (v47 i1) (eq v11 v46)) - (let (v48 i32) (cast v47)) - (let (v49 i1) (neq v48 0)) - (condbr v49 (block 2) (block 6))) + (let (v44 u32) (cast v20)) + (let (v45 u32) (add.checked v44 8)) + (let (v46 u32) (mod.unchecked v45 2)) + (assertz v46) + (let (v47 (ptr felt)) (inttoptr v45)) + (let (v48 felt) (load v47)) + (let (v49 i64) (const.i64 0)) + (let (v50 felt) (cast v49)) + (assert.eq v50 v48) + (let (v51 i32) (const.i32 3)) + (let (v52 i1) (eq v12 v51)) + (let (v53 i32) (zext v52)) + (let (v54 i1) (neq v53 0)) + (condbr v54 (block 2) (block 6))) (block 6 - (let (v50 u32) (cast v18)) - (let (v51 u32) (add.checked v50 24)) - (let (v52 (ptr felt)) (inttoptr v51)) - (let (v53 felt) (load v52)) - (let (v54 i64) (const.i64 4294967295)) - (let (v55 felt) (cast v54)) - (assert.eq v55 v53) - (let (v56 i32) (const.i32 8)) - (let (v57 i32) (add.wrapping v0 v56)) - (let (v58 i32) (const.i32 4)) - (let (v59 i32) (add.wrapping v4 v58)) - (let (v60 i32) (const.i32 8)) - (let (v61 i32) (add.wrapping v59 v60)) - (let (v62 u32) (cast v61)) - (let (v63 (ptr i32)) (inttoptr v62)) - (let (v64 i32) (load v63)) - (let (v65 u32) (cast v57)) - (let (v66 (ptr i32)) (inttoptr v65)) - (store v66 v64) - (let (v67 u32) (cast v4)) - (let (v68 u32) (add.checked v67 4)) - (let (v69 (ptr i64)) (inttoptr v68)) - (let (v70 i64) (load v69)) - (let (v71 u32) (cast v0)) - (let (v72 (ptr i64)) (inttoptr v71)) - (store v72 v70) - (let (v73 i32) (const.i32 16)) - (let (v74 i32) (add.wrapping v4 v73)) - (let (v75 (ptr i32)) (global.symbol #__stack_pointer)) - (store v75 v74) + (let (v55 u32) (cast v20)) + (let (v56 u32) (add.checked v55 12)) + (let (v57 u32) (mod.unchecked v56 2)) + (assertz v57) + (let (v58 (ptr felt)) (inttoptr v56)) + (let (v59 felt) (load v58)) + (let (v60 i64) (const.i64 4294967295)) + (let (v61 felt) (cast v60)) + (assert.eq v61 v59) + (let (v62 i32) (const.i32 8)) + (let (v63 i32) (add.wrapping v0 v62)) + (let (v64 i32) (const.i32 4)) + (let (v65 i32) (add.wrapping v4 v64)) + (let (v66 i32) (const.i32 8)) + (let (v67 i32) (add.wrapping v65 v66)) + (let (v68 u32) (cast v67)) + (let (v69 u32) (mod.unchecked v68 2)) + (assertz v69) + (let (v70 (ptr i32)) (inttoptr v68)) + (let (v71 i32) (load v70)) + (let (v72 u32) (cast v63)) + (let (v73 u32) (mod.unchecked v72 2)) + (assertz v73) + (let (v74 (ptr i32)) (inttoptr v72)) + (store v74 v71) + (let (v75 u32) (cast v4)) + (let (v76 u32) (add.checked v75 4)) + (let (v77 u32) (mod.unchecked v76 2)) + (assertz v77) + (let (v78 (ptr i64)) (inttoptr v76)) + (let (v79 i64) (load v78)) + (let (v80 u32) (cast v0)) + (let (v81 u32) (mod.unchecked v80 2)) + (assertz v81) + (let (v82 (ptr i64)) (inttoptr v80)) + (store v82 v79) + (let (v83 i32) (const.i32 16)) + (let (v84 i32) (add.wrapping v4 v83)) + (let (v85 (ptr i32)) (global.symbol #__stack_pointer)) + (store v85 v84) (ret)) ) diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm index 3398fe690..fd9f48208 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.masm @@ -18,12 +18,23 @@ export.entrypoint mem_load.0x00000000 push.16 u32wrapping_sub + dup.0 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.12 + u32assert + dup.0 + u32mod.2 + assertz.err=0 push.4 - dup.1 + dup.2 swap.1 u32wrapping_add exec."miden_tx_kernel_sys::get_inputs" - dup.1 + dup.2 swap.1 dup.0 u32mod.16 @@ -35,9 +46,6 @@ export.entrypoint u32div.16 exec.::intrinsics::mem::store_sw dup.0 - add.12 - u32assert - dup.0 u32mod.16 dup.0 u32mod.4 @@ -53,9 +61,15 @@ export.entrypoint push.0 assert else dup.1 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz add.8 u32assert dup.0 + dup.0 u32mod.16 dup.0 u32mod.4 @@ -66,6 +80,12 @@ export.entrypoint exec.::intrinsics::mem::load_sw dup.0 dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + dup.0 + dup.0 u32mod.16 dup.0 u32mod.4 @@ -78,10 +98,16 @@ export.entrypoint dup.1 dup.1 push.4294967295.1 - exec.::std::math::u64::lte + exec.::std::math::u64::lt assert - mul + mul.4294967296 + add assert_eq + u32mod.2 + assertz.err=0 + swap.1 + u32mod.2 + assertz.err=0 push.1 dup.2 swap.1 @@ -91,9 +117,15 @@ export.entrypoint push.0 assert else dup.0 - add.8 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.4 u32assert dup.0 + dup.0 u32mod.16 dup.0 u32mod.4 @@ -106,21 +138,36 @@ export.entrypoint dup.1 dup.1 push.4294967295.1 - exec.::std::math::u64::lte + exec.::std::math::u64::lt assert - mul + mul.4294967296 + add assert_eq + u32mod.2 + assertz.err=0 dup.1 push.2 u32lte + push.0 + push.0 + push.4294967294 + movup.2 + cdrop + u32or neq.0 if.true push.0 assert else dup.0 - add.16 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.8 u32assert dup.0 + dup.0 u32mod.16 dup.0 u32mod.4 @@ -133,10 +180,13 @@ export.entrypoint dup.1 dup.1 push.4294967295.1 - exec.::std::math::u64::lte + exec.::std::math::u64::lt assert - mul + mul.4294967296 + add assert_eq + u32mod.2 + assertz.err=0 push.3 movup.2 swap.1 @@ -145,8 +195,50 @@ export.entrypoint if.true push.0 assert else - push.16 dup.2 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + dup.2 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.4 + u32assert + push.8 + movup.5 + swap.1 + u32wrapping_add + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + push.4 + dup.5 + swap.1 + u32wrapping_add + push.8 + u32wrapping_add + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + movup.4 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.12 + u32assert + push.16 + movup.6 swap.1 u32wrapping_add dup.0 @@ -158,9 +250,7 @@ export.entrypoint movup.2 u32div.16 exec.::intrinsics::mem::store_sw - dup.1 - add.4 - u32assert + dup.3 dup.0 u32mod.16 dup.0 @@ -170,7 +260,7 @@ export.entrypoint movup.2 u32div.16 exec.::intrinsics::mem::load_dw - dup.4 + dup.6 dup.0 u32mod.16 dup.0 @@ -180,12 +270,13 @@ export.entrypoint movup.2 u32div.16 exec.::intrinsics::mem::store_dw - push.4 - movup.2 - swap.1 - u32wrapping_add - push.8 - u32wrapping_add + movup.4 + u32mod.2 + assertz.err=0 + movup.3 + u32mod.2 + assertz.err=0 + dup.1 dup.0 u32mod.16 dup.0 @@ -195,10 +286,7 @@ export.entrypoint movup.2 u32div.16 exec.::intrinsics::mem::load_sw - push.8 - movup.3 - swap.1 - u32wrapping_add + dup.3 dup.0 u32mod.16 dup.0 @@ -208,8 +296,13 @@ export.entrypoint movup.2 u32div.16 exec.::intrinsics::mem::store_sw - add.24 - u32assert + movup.2 + u32mod.2 + assertz.err=0 + swap.1 + u32mod.2 + assertz.err=0 + dup.0 dup.0 u32mod.16 dup.0 @@ -223,10 +316,13 @@ export.entrypoint dup.1 dup.1 push.4294967295.1 - exec.::std::math::u64::lte + exec.::std::math::u64::lt assert - mul + mul.4294967296 + add assert_eq + u32mod.2 + assertz.err=0 end end end diff --git a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat index e3701acb4..77d0a0892 100644 --- a/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat +++ b/tests/integration/expected/abi_transform_tx_kernel_get_inputs_4.wat @@ -1,6 +1,6 @@ (module $abi_transform_tx_kernel_get_inputs_4.wasm - (type (;0;) (func (param i64) (result f64))) - (type (;1;) (func (param f64 f64))) + (type (;0;) (func (param i64) (result f32))) + (type (;1;) (func (param f32 f32))) (type (;2;) (func (param i32) (result i32))) (type (;3;) (func (param i32))) (type (;4;) (func (param i32 i32) (result i32))) @@ -32,7 +32,7 @@ local.get 1 i32.load offset=8 local.tee 3 - f64.load + f32.load i64.const 4294967295 call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq @@ -41,7 +41,7 @@ i32.eq br_if 0 (;@1;) local.get 3 - f64.load offset=8 + f32.load offset=4 i64.const 1 call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq @@ -50,7 +50,7 @@ i32.le_u br_if 0 (;@1;) local.get 3 - f64.load offset=16 + f32.load offset=8 i64.const 0 call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq @@ -59,7 +59,7 @@ i32.eq br_if 0 (;@1;) local.get 3 - f64.load offset=24 + f32.load offset=12 i64.const 4294967295 call $miden_stdlib_sys::intrinsics::felt::extern_from_u64_unchecked call $miden_stdlib_sys::intrinsics::felt::extern_assert_eq