Files
powdr/test_data/std/split_gl_test.asm
Leandro Pacheco 39c5c62028 AST parsing and impl Display fixes
- `instr x = y` statements must end with semicolon
- fixed Display implementation for AST objects such that
  source->AST->source->AST works properly
- tests for the above
2024-02-05 18:40:00 -03:00

52 lines
1.1 KiB
NASM

use std::split::split_gl::SplitGL;
machine Main {
reg pc[@pc];
reg X0[<=];
reg X1[<=];
reg X2[<=];
reg low;
reg high;
degree 65536;
SplitGL split_machine;
instr split X0 -> X1, X2 = split_machine.split;
instr assert_eq X0, X1 {
X0 = X1
}
instr loop { pc' = pc }
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;
}
}