all repos — xyw @ ae85fee3a63c0b579da793d745f635416f8af57b

A minimal virtual machine and assembler for terminals.

Reviewed order of operands for binary operations
h3rald h3rald@h3rald.com
Sun, 07 Dec 2025 07:56:55 +0100
commit

ae85fee3a63c0b579da793d745f635416f8af57b

parent

389a1ce3662b767abcf89b2e11c310f757accadc

1 files changed, 17 insertions(+), 17 deletions(-)

jump to
M xywrun.cxywrun.c

@@ -209,13 +209,13 @@ // clang-format off

//// Operations that support stack and all registers #define OPC_SR2(opc, body) { \ - case opc: { const int w = 0; xyw_byte a = us_pop(), b = us_pop(); body; } break; \ - case XYW_MODE_X|opc: { const int w = 0; xyw_byte a = *x, b = us_pop(); body; } break; \ - case XYW_MODE_Y|opc: { const int w = 0; xyw_byte a = *y, b = us_pop(); body; } break; \ + case opc: { const int w = 0; xyw_byte b = us_pop(), a = us_pop(); body; } break; \ + case XYW_MODE_X|opc: { const int w = 0; xyw_byte b = *x, a = us_pop(); body; } break; \ + case XYW_MODE_Y|opc: { const int w = 0; xyw_byte b = *y, a = us_pop(); body; } break; \ case XYW_MODE_X|XYW_MODE_Y|opc: { const int w = 0; xyw_byte a = *x, b = *y; body; } break; \ - case XYW_MODE_W|opc: { const int w = 1; xyw_word a = us_popw(); xyw_word b = us_popw(); body; } break; \ - case XYW_MODE_X|XYW_MODE_W|opc: { const int w = 1; xyw_word a = *xw; xyw_word b = us_popw(); body; } break; \ - case XYW_MODE_Y|XYW_MODE_W|opc: { const int w = 1; xyw_word a = *yw; xyw_word b = us_popw(); body; } break; \ + case XYW_MODE_W|opc: { const int w = 1; xyw_word b = us_popw(); xyw_word a = us_popw(); body; } break; \ + case XYW_MODE_X|XYW_MODE_W|opc: { const int w = 1; xyw_word b = *xw; xyw_word a = us_popw(); body; } break; \ + case XYW_MODE_Y|XYW_MODE_W|opc: { const int w = 1; xyw_word b = *yw; xyw_word a = us_popw(); body; } break; \ case XYW_MODE_X|XYW_MODE_Y|XYW_MODE_W|opc: { const int w = 1; xyw_word a = *xw; xyw_word b = *yw; body; } break; \ }

@@ -337,19 +337,19 @@ /* STB */ OPC_SR1(0x06, write( ADDR(a), us_pop() ));

/* STW */ OPC_SR1(0x07, writew( ADDR(a), us_popw() )); /* INC */ OPC_IDC(0x08, +1); /* DEC */ OPC_IDC(0x09, -1); - /* SHL */ OPC_SR2(0x0A, PUSH(b << a)); - /* SHR */ OPC_SR2(0x0B, PUSH(b >> a)); + /* SHL */ OPC_SR2(0x0A, PUSH(a << b)); + /* SHR */ OPC_SR2(0x0B, PUSH(a >> b)); /* ADD */ OPC_SR2(0x0C, PUSH(a + b)); - /* SUB */ OPC_SR2(0x0D, PUSH(b - a)); + /* SUB */ OPC_SR2(0x0D, PUSH(a - b)); /* MUL */ OPC_SR2(0x0E, PUSH(a * b)); - /* DIV */ OPC_SR2(0x0F, PUSH(b / a)); - /* EQU */ OPC_SR2(0x10, PUSH(b == a)); - /* NEQ */ OPC_SR2(0x11, PUSH(b != a)); - /* GTH */ OPC_SR2(0x12, PUSH(b > a)); - /* LTH */ OPC_SR2(0x13, PUSH(b < a)); - /* AND */ OPC_SR2(0x14, PUSH(b & a)); - /* IOR */ OPC_SR2(0x15, PUSH(b | a)); - /* XOR */ OPC_SR2(0x16, PUSH(b ^ a)); + /* DIV */ OPC_SR2(0x0F, PUSH(a / b)); + /* EQU */ OPC_SR2(0x10, PUSH(a == b)); + /* NEQ */ OPC_SR2(0x11, PUSH(a != b)); + /* GTH */ OPC_SR2(0x12, PUSH(a > b)); + /* LTH */ OPC_SR2(0x13, PUSH(a < b)); + /* AND */ OPC_SR2(0x14, PUSH(a & b)); + /* IOR */ OPC_SR2(0x15, PUSH(a | b)); + /* XOR */ OPC_SR2(0x16, PUSH(a ^ b)); /* NOT */ OPC_SR1(0x17, PUSH(~a)); /* SWP */ OPC_SWP(0x18); /* DUP */ OPC_SR1(0x19, PUSH(a));