Clean up code using pop_or_peek
This commit is contained in:
+9
-13
@@ -795,7 +795,7 @@ export fn uxn_step(state: *uxn) (done | error) = {
|
||||
// /* JCN */ OPC(0x0d,POx(a,d) POx(b,0),if(b) MOV)
|
||||
case let jcn_inst: JCN =>
|
||||
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,
|
||||
short = false},
|
||||
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);
|
||||
// /* SFT */ OPC(0x1f,POx(a,0) POx(b,d),PUx(b >> (a & 0xf) << (a >> 4), d,r))
|
||||
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 leftshifts = (shifts & 0b11110000) >> 4;
|
||||
if(sft_inst.short){ //TODO, this seems like it can be cleaned up a bit
|
||||
let low = pop_or_get(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 1, state): u8;
|
||||
let high = pop_or_get(normal_op{short = false, keep = sft_inst.keep, ret = sft_inst.ret}, 2, state): u8;
|
||||
let val = short_from_bytes(high,low);
|
||||
let res = (val >> rightshifts ) << leftshifts;
|
||||
push_to_stack(sft_inst.ret, res, state);
|
||||
}else{
|
||||
let val = pop_or_get(sft_inst, 1, state): u8;
|
||||
let res = (val >> rightshifts ) << leftshifts;
|
||||
push_to_stack(sft_inst.ret, res, state);
|
||||
let val = pop_or_peek(sft_inst,1,state);
|
||||
let res = match(val) {
|
||||
case let s: u16 =>
|
||||
yield (s >> rightshifts ) << leftshifts;
|
||||
case let b: u8 =>
|
||||
yield (b >> rightshifts ) << leftshifts;
|
||||
};
|
||||
|
||||
push_to_stack(sft_inst.ret, res, state);
|
||||
|
||||
case =>
|
||||
return readval: unhandled;
|
||||
|
||||
Reference in New Issue
Block a user