Files
powdr/test_data/std/split_gl_test.asm
Leandro Pacheco abbe26618f Instructions with link statements (#1439)
Allow VM instructions to use the `link` notation, unifying the way
machines are linked from VMs and block machines.
Previous syntax for "external instructions" not allowed anymore, and
should use the new `link` syntax.
2024-06-18 17:31:38 +00:00

49 lines
1.1 KiB
Rust

use std::machines::split::split_gl::SplitGL;
machine Main with degree: 65536 {
reg pc[@pc];
reg X0[<=];
reg X1[<=];
reg X2[<=];
reg low;
reg high;
SplitGL split_machine;
instr split X0 -> X1, X2 link ~> (X1, X2) = split_machine.split(X0);
instr assert_eq X0, X1 {
X0 = X1
}
function main {
// Min value
// Note that this has two byte decompositions, 0x and p = 0xffffffff00000001.
// The second would lead to a different split value, but should be ruled
// out by the overflow check.
low, high <== split(0);
assert_eq low, 0;
assert_eq high, 0;
// Max value
// On Goldilocks, this is 0xffffffff00000000.
low, high <== split(-1);
assert_eq low, 0;
assert_eq high, 0xffffffff;
// Max low value
low, high <== split(0xfffffffeffffffff);
assert_eq low, 0xffffffff;
assert_eq high, 0xfffffffe;
// Some other value
low, high <== split(0xabcdef0123456789);
assert_eq low, 0x23456789;
assert_eq high, 0xabcdef01;
return;
}
}