Clean up code using pop_or_peek

This commit is contained in:
JJ Bliss
2026-05-02 10:05:02 -04:00
parent 30f9c86c22
commit fcf42a5b4a
+9 -13
View File
@@ -795,7 +795,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
// /* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV) // /* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV)
case let jcn_inst: JCN => case let jcn_inst: JCN =>
let addr = pop_or_get(jcn_inst,0,state); let addr = pop_or_get(jcn_inst,0,state);
let cond: u8 = pop_or_get(normal_op {keep = jcn_inst.keep, let cond: u8 = pop_or_peek(normal_op {keep = jcn_inst.keep,
ret = jcn_inst.ret, ret = jcn_inst.ret,
short = false}, short = false},
if(jcn_inst.short){ yield 2;} else { yield 1; }, state ): u8; if(jcn_inst.short){ yield 2;} else { yield 1; }, state ): u8;
@@ -958,21 +958,17 @@ export fn uxn_step(state: *uxn) (done | error) = {
push_to_stack(eor_inst.ret, res, state); push_to_stack(eor_inst.ret, res, state);
// /* SFT */ OPC(0x1f,POx(a,0) POx(b,d),PUx(b >> (a & 0xf) << (a >> 4), d,r)) // /* SFT */ OPC(0x1f,POx(a,0) POx(b,d),PUx(b >> (a & 0xf) << (a >> 4), d,r))
case let sft_inst: SFT => case let sft_inst: SFT =>
let shifts: u8 = pop_or_get(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 0, state): u8; let shifts: u8 = pop_or_peek(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 0, state): u8;
let rightshifts = shifts & 0b00001111; let rightshifts = shifts & 0b00001111;
let leftshifts = (shifts & 0b11110000) >> 4; let leftshifts = (shifts & 0b11110000) >> 4;
if(sft_inst.short){ //TODO, this seems like it can be cleaned up a bit let val = pop_or_peek(sft_inst,1,state);
let low = pop_or_get(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 1, state): u8; let res = match(val) {
let high = pop_or_get(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 2, state): u8; case let s: u16 =>
let val = short_from_bytes(high,low); yield (s >> rightshifts ) << leftshifts;
let res = (val >> rightshifts ) << leftshifts; case let b: u8 =>
push_to_stack(sft_inst.ret, res, state); yield (b >> rightshifts ) << leftshifts;
}else{
let val = pop_or_get(sft_inst, 1, state): u8;
let res = (val >> rightshifts ) << leftshifts;
push_to_stack(sft_inst.ret, res, state);
}; };
push_to_stack(sft_inst.ret, res, state);
case => case =>
return readval: unhandled; return readval: unhandled;