diff --git a/src/modal.c b/src/modal.c index 305041e..e4f5b6f 100644 --- a/src/modal.c +++ b/src/modal.c @@ -43,24 +43,24 @@ sint(char *s) static void device_write(char *s) { - int acc = 0; char c = *s, *cap = walk(s), **reg = regs + '0'; /* phase: ALU */ if(*reg) { + int acc = sint(*reg++); /* clang-format off */ switch(c) { - case '+': for(acc = sint(*reg++); *reg != 0; reg++) acc += sint(*reg); break; - case '-': for(acc = sint(*reg++); *reg != 0; reg++) acc -= sint(*reg); break; - case '*': for(acc = sint(*reg++); *reg != 0; reg++) acc *= sint(*reg); break; - case '/': for(acc = sint(*reg++); *reg != 0; reg++) acc /= sint(*reg); break; - case '%': for(acc = sint(*reg++); *reg != 0; reg++) acc %= sint(*reg); break; - case '&': for(acc = sint(*reg++); *reg != 0; reg++) acc &= sint(*reg); break; - case '^': for(acc = sint(*reg++); *reg != 0; reg++) acc ^= sint(*reg); break; - case '|': for(acc = sint(*reg++); *reg != 0; reg++) acc |= sint(*reg); break; - case '=': for(acc = sint(*reg++); *reg != 0; reg++) acc = acc == sint(*reg); break; - case '!': for(acc = sint(*reg++); *reg != 0; reg++) acc = acc != sint(*reg); break; - case '>': for(acc = sint(*reg++); *reg != 0; reg++) acc = acc > sint(*reg); break; - case '<': for(acc = sint(*reg++); *reg != 0; reg++) acc = acc < sint(*reg); break; + case '+': for(;*reg != 0; reg++) acc += sint(*reg); break; + case '-': for(;*reg != 0; reg++) acc -= sint(*reg); break; + case '*': for(;*reg != 0; reg++) acc *= sint(*reg); break; + case '/': for(;*reg != 0; reg++) acc /= sint(*reg); break; + case '%': for(;*reg != 0; reg++) acc %= sint(*reg); break; + case '&': for(;*reg != 0; reg++) acc &= sint(*reg); break; + case '^': for(;*reg != 0; reg++) acc ^= sint(*reg); break; + case '|': for(;*reg != 0; reg++) acc |= sint(*reg); break; + case '=': for(;*reg != 0; reg++) acc = acc == sint(*reg); break; + case '!': for(;*reg != 0; reg++) acc = acc != sint(*reg); break; + case '>': for(;*reg != 0; reg++) acc = acc > sint(*reg); break; + case '<': for(;*reg != 0; reg++) acc = acc < sint(*reg); break; } /* clang-format on */ dst_ += snprintf(dst_, 0x10, "%d", acc);