# HG changeset patch # User Michael Pavone # Date 1458785969 25200 # Node ID 6204c81e29334720340227a8a46957101eb94395 # Parent a44e078d792ba8bd9f1f3dabb83e21bd4c5debf3 Revert changes to handling of immediate versions of bitwise instructions. Replace asri with cmpi. diff -r a44e078d792b -r 6204c81e2933 helloworld.bin Binary file helloworld.bin has changed diff -r a44e078d792b -r 6204c81e2933 helloworld.s16 --- a/helloworld.s16 Tue Mar 22 23:14:36 2016 -0700 +++ b/helloworld.s16 Wed Mar 23 19:19:29 2016 -0700 @@ -2,7 +2,7 @@ ldim 0, r1 loop ld8 r0, r1, r2 - ori 0, r2 + cmpi 0, r2 beq done outi 11, r2 addi 1, r1 diff -r a44e078d792b -r 6204c81e2933 simple_console.txt --- a/simple_console.txt Tue Mar 22 23:14:36 2016 -0700 +++ b/simple_console.txt Wed Mar 23 19:19:29 2016 -0700 @@ -53,7 +53,7 @@ D: ls[lr]i MSB of AAAA determines direction LS 3 bits determines magnitude -E: asri +E: cmpi F: single reg diff -r a44e078d792b -r 6204c81e2933 src/cpu.c --- a/src/cpu.c Tue Mar 22 23:14:36 2016 -0700 +++ b/src/cpu.c Wed Mar 23 19:19:29 2016 -0700 @@ -216,17 +216,11 @@ } } -uint16_t format_immediate_bitwise(uint16_t val) +uint16_t format_immediate(uint16_t val) { if (val & 8) { val |= 0xFFF0; } - return val; -} - -uint16_t format_immediate(uint16_t val) -{ - val = format_immediate_bitwise(val); if (!val) { val = 8; } @@ -339,11 +333,11 @@ update_flags_arith(context, tmp); break; case ANDI: - context->regs[dst] = context->regs[dst] & format_immediate_bitwise(a); + context->regs[dst] = context->regs[dst] & format_immediate(a); update_flags_bitwise(context, context->regs[dst]); break; case ORI: - context->regs[dst] = context->regs[dst] | format_immediate_bitwise(a); + context->regs[dst] = context->regs[dst] | format_immediate(a); update_flags_bitwise(context, context->regs[dst]); break; case LSI: @@ -360,18 +354,12 @@ context->regs[dst] = tmp; update_flags_arith(context, tmp); break; - case ASRI: - shift = a; - if (!shift) { - shift = 16; + case CMPI: + tmp = a; + if (a & 8) { + a |= 0xFFF0; } - tmp = context->regs[dst]; - if (tmp & 0x8000) { - tmp |= 0xFFFF0000; - } - tmp = tmp >> shift & 0xFFFF; - tmp |= (context->regs[dst] >> (context->regs[shift] - 1)) << 16 & 0x10000; - context->regs[dst] = tmp; + tmp = context->regs[dst] - a; update_flags_arith(context, tmp); break; case SINGLE_REG: diff -r a44e078d792b -r 6204c81e2933 src/cpu.h --- a/src/cpu.h Tue Mar 22 23:14:36 2016 -0700 +++ b/src/cpu.h Wed Mar 23 19:19:29 2016 -0700 @@ -80,7 +80,7 @@ ANDI, ORI, LSI, - ASRI, + CMPI, SINGLE_REG };