+2018-11-21 John Darrington <john@darrington.wattle.id.au>
+
+ * testsuite/gas/s12z/shift.s: Add new test case.
+ * testsuite/gas/s12z/shift.d: Add expected result.
+
2018-11-21 John Darrington <john@darrington.wattle.id.au>
* config/tc-s12z.c (opcodes): bhs, blo: New members.
#objdump: -d
-#name:
+#name: Tests for shift and rotate instructions
#source: shift.s
17: 10 3e 8e lsr.p \(d6,x\), #2
1a: 10 f4 bf asl d7, #1
1d: 10 bc bd asr d1, #2
+ 20: 16 de 78 asl d6, d6, #17
+ 23: 16 d6 78 asl d6, d6, #16
+2018-11-21 John Darrington <john@darrington.wattle.id.au>
+
+ * s12z-dis.c (print_insn_shift) [SB_REG_REG_N]: Enter special case
+ if the postbyte matches the appropriate pattern.
+
2018-11-13 Francois H. Theron <francois.theron@netronome.com>
* nfp-dis.c: Fix crc[] disassembly if operands are swapped.
break;
case SB_REG_REG_N:
- if (sb & 0x08)
- {
- operand_separator (info);
- if (byte & 0x10)
- {
- uint8_t xb;
- read_memory (memaddr + 1, &xb, 1, info);
- int shift = ((sb & 0x08) >> 3) | ((xb & 0x0f) << 1);
- (*info->fprintf_func) (info->stream, "#%d", shift);
- }
- else
- {
- (*info->fprintf_func) (info->stream, "%s:%d", __FILE__, __LINE__);
- }
- }
- else
- {
- opr_decode (memaddr + 1, info);
- }
+ {
+ uint8_t xb;
+ read_memory (memaddr + 1, &xb, 1, info);
+ /* This case is slightly unusual.
+ If XB matches the binary pattern 0111XXXX, then instead of
+ interpreting this as a general OPR postbyte in the IMMe4 mode,
+ the XB byte is interpreted in s special way. */
+ if ((xb & 0xF0) == 0x70)
+ {
+ operand_separator (info);
+ if (byte & 0x10)
+ {
+ int shift = ((sb & 0x08) >> 3) | ((xb & 0x0f) << 1);
+ (*info->fprintf_func) (info->stream, "#%d", shift);
+ }
+ else
+ {
+ (*info->fprintf_func) (info->stream, "%s:%d", __FILE__, __LINE__);
+ }
+ }
+ else
+ {
+ opr_decode (memaddr + 1, info);
+ }
+ }
break;
case SB_REG_OPR_OPR:
{