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..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 @@ -10,10 +10,127 @@ ;; 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 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 + (block 1) + + (block 2 + (unreachable)) + + (block 3 + (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 (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 (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 (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 4c43e1fe2..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 @@ -15,7 +15,318 @@ export.get_inputs use.miden::note 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.2 + swap.1 + u32wrapping_add exec."miden_tx_kernel_sys::get_inputs" + dup.2 + 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 + 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 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.8 + u32assert + dup.0 + 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 + push.2147483648 + u32and + eq.2147483648 + assertz + 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::lt + assert + mul.4294967296 + add + assert_eq + u32mod.2 + assertz.err=0 + swap.1 + u32mod.2 + assertz.err=0 + push.1 + dup.2 + swap.1 + eq + neq.0 + if.true + push.0 assert + else + dup.0 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.4 + u32assert + 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.1 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lt + assert + 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 + dup.0 + push.2147483648 + u32and + eq.2147483648 + assertz + add.8 + u32assert + 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.0 + dup.1 + dup.1 + push.4294967295.1 + exec.::std::math::u64::lt + assert + mul.4294967296 + add + assert_eq + u32mod.2 + assertz.err=0 + push.3 + movup.2 + swap.1 + eq + neq.0 + if.true + push.0 assert + else + 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 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_sw + dup.3 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_dw + dup.6 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_dw + movup.4 + u32mod.2 + assertz.err=0 + movup.3 + u32mod.2 + assertz.err=0 + dup.1 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::load_sw + dup.3 + dup.0 + u32mod.16 + dup.0 + u32mod.4 + swap.1 + u32div.4 + movup.2 + u32div.16 + exec.::intrinsics::mem::store_sw + movup.2 + u32mod.2 + assertz.err=0 + swap.1 + u32mod.2 + assertz.err=0 + 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::lt + assert + mul.4294967296 + add + assert_eq + u32mod.2 + assertz.err=0 + 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..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,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 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))) + (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 + f32.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 + 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 + local.get 2 + i32.const 2 + i32.le_u + br_if 0 (;@1;) + local.get 3 + 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 + local.get 2 + i32.const 3 + i32.eq + br_if 0 (;@1;) + local.get 3 + 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 + 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(), &[]);