[llvm] [M68k][MC] Generate some encoding tests for MOVE (PR #194269)
Peter Mackay via llvm-commits
llvm-commits at lists.llvm.org
Wed May 6 15:53:14 PDT 2026
https://github.com/petmac updated https://github.com/llvm/llvm-project/pull/194269
>From 54e1478661399a268b4fd6c5e6984e1d422f9d6e Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Thu, 15 May 2025 22:22:01 +0100
Subject: [PATCH 1/9] Generate encoding tests for MOVE register-to-register
---
llvm/test/MC/M68k/Generated/MOVE.s | 1284 +++++++++++++++++++++++++++
llvm/test/MC/M68k/generate_tests.py | 233 +++++
2 files changed, 1517 insertions(+)
create mode 100644 llvm/test/MC/M68k/Generated/MOVE.s
create mode 100755 llvm/test/MC/M68k/generate_tests.py
diff --git a/llvm/test/MC/M68k/Generated/MOVE.s b/llvm/test/MC/M68k/Generated/MOVE.s
new file mode 100644
index 0000000000000..0d936526ace0c
--- /dev/null
+++ b/llvm/test/MC/M68k/Generated/MOVE.s
@@ -0,0 +1,1284 @@
+; Generated by llvm/test/MC/M68k/generate_tests.py
+; Please do not edit this file by hand.
+
+; RUN: llvm-mc -triple=m68k -mcpu=M68040 -show-encoding < %s | FileCheck %s
+
+; CHECK: move.b %d0, %d0
+; CHECK-SAME: encoding: [0x10,0x00]
+move.b %d0, %d0
+
+; CHECK: move.b %d0, %d1
+; CHECK-SAME: encoding: [0x12,0x00]
+move.b %d0, %d1
+
+; CHECK: move.b %d0, %d2
+; CHECK-SAME: encoding: [0x14,0x00]
+move.b %d0, %d2
+
+; CHECK: move.b %d0, %d3
+; CHECK-SAME: encoding: [0x16,0x00]
+move.b %d0, %d3
+
+; CHECK: move.b %d0, %d4
+; CHECK-SAME: encoding: [0x18,0x00]
+move.b %d0, %d4
+
+; CHECK: move.b %d0, %d5
+; CHECK-SAME: encoding: [0x1a,0x00]
+move.b %d0, %d5
+
+; CHECK: move.b %d0, %d6
+; CHECK-SAME: encoding: [0x1c,0x00]
+move.b %d0, %d6
+
+; CHECK: move.b %d0, %d7
+; CHECK-SAME: encoding: [0x1e,0x00]
+move.b %d0, %d7
+
+; CHECK: move.b %d1, %d0
+; CHECK-SAME: encoding: [0x10,0x01]
+move.b %d1, %d0
+
+; CHECK: move.b %d1, %d1
+; CHECK-SAME: encoding: [0x12,0x01]
+move.b %d1, %d1
+
+; CHECK: move.b %d1, %d2
+; CHECK-SAME: encoding: [0x14,0x01]
+move.b %d1, %d2
+
+; CHECK: move.b %d1, %d3
+; CHECK-SAME: encoding: [0x16,0x01]
+move.b %d1, %d3
+
+; CHECK: move.b %d1, %d4
+; CHECK-SAME: encoding: [0x18,0x01]
+move.b %d1, %d4
+
+; CHECK: move.b %d1, %d5
+; CHECK-SAME: encoding: [0x1a,0x01]
+move.b %d1, %d5
+
+; CHECK: move.b %d1, %d6
+; CHECK-SAME: encoding: [0x1c,0x01]
+move.b %d1, %d6
+
+; CHECK: move.b %d1, %d7
+; CHECK-SAME: encoding: [0x1e,0x01]
+move.b %d1, %d7
+
+; CHECK: move.b %d2, %d0
+; CHECK-SAME: encoding: [0x10,0x02]
+move.b %d2, %d0
+
+; CHECK: move.b %d2, %d1
+; CHECK-SAME: encoding: [0x12,0x02]
+move.b %d2, %d1
+
+; CHECK: move.b %d2, %d2
+; CHECK-SAME: encoding: [0x14,0x02]
+move.b %d2, %d2
+
+; CHECK: move.b %d2, %d3
+; CHECK-SAME: encoding: [0x16,0x02]
+move.b %d2, %d3
+
+; CHECK: move.b %d2, %d4
+; CHECK-SAME: encoding: [0x18,0x02]
+move.b %d2, %d4
+
+; CHECK: move.b %d2, %d5
+; CHECK-SAME: encoding: [0x1a,0x02]
+move.b %d2, %d5
+
+; CHECK: move.b %d2, %d6
+; CHECK-SAME: encoding: [0x1c,0x02]
+move.b %d2, %d6
+
+; CHECK: move.b %d2, %d7
+; CHECK-SAME: encoding: [0x1e,0x02]
+move.b %d2, %d7
+
+; CHECK: move.b %d3, %d0
+; CHECK-SAME: encoding: [0x10,0x03]
+move.b %d3, %d0
+
+; CHECK: move.b %d3, %d1
+; CHECK-SAME: encoding: [0x12,0x03]
+move.b %d3, %d1
+
+; CHECK: move.b %d3, %d2
+; CHECK-SAME: encoding: [0x14,0x03]
+move.b %d3, %d2
+
+; CHECK: move.b %d3, %d3
+; CHECK-SAME: encoding: [0x16,0x03]
+move.b %d3, %d3
+
+; CHECK: move.b %d3, %d4
+; CHECK-SAME: encoding: [0x18,0x03]
+move.b %d3, %d4
+
+; CHECK: move.b %d3, %d5
+; CHECK-SAME: encoding: [0x1a,0x03]
+move.b %d3, %d5
+
+; CHECK: move.b %d3, %d6
+; CHECK-SAME: encoding: [0x1c,0x03]
+move.b %d3, %d6
+
+; CHECK: move.b %d3, %d7
+; CHECK-SAME: encoding: [0x1e,0x03]
+move.b %d3, %d7
+
+; CHECK: move.b %d4, %d0
+; CHECK-SAME: encoding: [0x10,0x04]
+move.b %d4, %d0
+
+; CHECK: move.b %d4, %d1
+; CHECK-SAME: encoding: [0x12,0x04]
+move.b %d4, %d1
+
+; CHECK: move.b %d4, %d2
+; CHECK-SAME: encoding: [0x14,0x04]
+move.b %d4, %d2
+
+; CHECK: move.b %d4, %d3
+; CHECK-SAME: encoding: [0x16,0x04]
+move.b %d4, %d3
+
+; CHECK: move.b %d4, %d4
+; CHECK-SAME: encoding: [0x18,0x04]
+move.b %d4, %d4
+
+; CHECK: move.b %d4, %d5
+; CHECK-SAME: encoding: [0x1a,0x04]
+move.b %d4, %d5
+
+; CHECK: move.b %d4, %d6
+; CHECK-SAME: encoding: [0x1c,0x04]
+move.b %d4, %d6
+
+; CHECK: move.b %d4, %d7
+; CHECK-SAME: encoding: [0x1e,0x04]
+move.b %d4, %d7
+
+; CHECK: move.b %d5, %d0
+; CHECK-SAME: encoding: [0x10,0x05]
+move.b %d5, %d0
+
+; CHECK: move.b %d5, %d1
+; CHECK-SAME: encoding: [0x12,0x05]
+move.b %d5, %d1
+
+; CHECK: move.b %d5, %d2
+; CHECK-SAME: encoding: [0x14,0x05]
+move.b %d5, %d2
+
+; CHECK: move.b %d5, %d3
+; CHECK-SAME: encoding: [0x16,0x05]
+move.b %d5, %d3
+
+; CHECK: move.b %d5, %d4
+; CHECK-SAME: encoding: [0x18,0x05]
+move.b %d5, %d4
+
+; CHECK: move.b %d5, %d5
+; CHECK-SAME: encoding: [0x1a,0x05]
+move.b %d5, %d5
+
+; CHECK: move.b %d5, %d6
+; CHECK-SAME: encoding: [0x1c,0x05]
+move.b %d5, %d6
+
+; CHECK: move.b %d5, %d7
+; CHECK-SAME: encoding: [0x1e,0x05]
+move.b %d5, %d7
+
+; CHECK: move.b %d6, %d0
+; CHECK-SAME: encoding: [0x10,0x06]
+move.b %d6, %d0
+
+; CHECK: move.b %d6, %d1
+; CHECK-SAME: encoding: [0x12,0x06]
+move.b %d6, %d1
+
+; CHECK: move.b %d6, %d2
+; CHECK-SAME: encoding: [0x14,0x06]
+move.b %d6, %d2
+
+; CHECK: move.b %d6, %d3
+; CHECK-SAME: encoding: [0x16,0x06]
+move.b %d6, %d3
+
+; CHECK: move.b %d6, %d4
+; CHECK-SAME: encoding: [0x18,0x06]
+move.b %d6, %d4
+
+; CHECK: move.b %d6, %d5
+; CHECK-SAME: encoding: [0x1a,0x06]
+move.b %d6, %d5
+
+; CHECK: move.b %d6, %d6
+; CHECK-SAME: encoding: [0x1c,0x06]
+move.b %d6, %d6
+
+; CHECK: move.b %d6, %d7
+; CHECK-SAME: encoding: [0x1e,0x06]
+move.b %d6, %d7
+
+; CHECK: move.b %d7, %d0
+; CHECK-SAME: encoding: [0x10,0x07]
+move.b %d7, %d0
+
+; CHECK: move.b %d7, %d1
+; CHECK-SAME: encoding: [0x12,0x07]
+move.b %d7, %d1
+
+; CHECK: move.b %d7, %d2
+; CHECK-SAME: encoding: [0x14,0x07]
+move.b %d7, %d2
+
+; CHECK: move.b %d7, %d3
+; CHECK-SAME: encoding: [0x16,0x07]
+move.b %d7, %d3
+
+; CHECK: move.b %d7, %d4
+; CHECK-SAME: encoding: [0x18,0x07]
+move.b %d7, %d4
+
+; CHECK: move.b %d7, %d5
+; CHECK-SAME: encoding: [0x1a,0x07]
+move.b %d7, %d5
+
+; CHECK: move.b %d7, %d6
+; CHECK-SAME: encoding: [0x1c,0x07]
+move.b %d7, %d6
+
+; CHECK: move.b %d7, %d7
+; CHECK-SAME: encoding: [0x1e,0x07]
+move.b %d7, %d7
+
+; CHECK: move.w %d0, %d0
+; CHECK-SAME: encoding: [0x30,0x00]
+move.w %d0, %d0
+
+; CHECK: move.w %d0, %d1
+; CHECK-SAME: encoding: [0x32,0x00]
+move.w %d0, %d1
+
+; CHECK: move.w %d0, %d2
+; CHECK-SAME: encoding: [0x34,0x00]
+move.w %d0, %d2
+
+; CHECK: move.w %d0, %d3
+; CHECK-SAME: encoding: [0x36,0x00]
+move.w %d0, %d3
+
+; CHECK: move.w %d0, %d4
+; CHECK-SAME: encoding: [0x38,0x00]
+move.w %d0, %d4
+
+; CHECK: move.w %d0, %d5
+; CHECK-SAME: encoding: [0x3a,0x00]
+move.w %d0, %d5
+
+; CHECK: move.w %d0, %d6
+; CHECK-SAME: encoding: [0x3c,0x00]
+move.w %d0, %d6
+
+; CHECK: move.w %d0, %d7
+; CHECK-SAME: encoding: [0x3e,0x00]
+move.w %d0, %d7
+
+; CHECK: move.w %d1, %d0
+; CHECK-SAME: encoding: [0x30,0x01]
+move.w %d1, %d0
+
+; CHECK: move.w %d1, %d1
+; CHECK-SAME: encoding: [0x32,0x01]
+move.w %d1, %d1
+
+; CHECK: move.w %d1, %d2
+; CHECK-SAME: encoding: [0x34,0x01]
+move.w %d1, %d2
+
+; CHECK: move.w %d1, %d3
+; CHECK-SAME: encoding: [0x36,0x01]
+move.w %d1, %d3
+
+; CHECK: move.w %d1, %d4
+; CHECK-SAME: encoding: [0x38,0x01]
+move.w %d1, %d4
+
+; CHECK: move.w %d1, %d5
+; CHECK-SAME: encoding: [0x3a,0x01]
+move.w %d1, %d5
+
+; CHECK: move.w %d1, %d6
+; CHECK-SAME: encoding: [0x3c,0x01]
+move.w %d1, %d6
+
+; CHECK: move.w %d1, %d7
+; CHECK-SAME: encoding: [0x3e,0x01]
+move.w %d1, %d7
+
+; CHECK: move.w %d2, %d0
+; CHECK-SAME: encoding: [0x30,0x02]
+move.w %d2, %d0
+
+; CHECK: move.w %d2, %d1
+; CHECK-SAME: encoding: [0x32,0x02]
+move.w %d2, %d1
+
+; CHECK: move.w %d2, %d2
+; CHECK-SAME: encoding: [0x34,0x02]
+move.w %d2, %d2
+
+; CHECK: move.w %d2, %d3
+; CHECK-SAME: encoding: [0x36,0x02]
+move.w %d2, %d3
+
+; CHECK: move.w %d2, %d4
+; CHECK-SAME: encoding: [0x38,0x02]
+move.w %d2, %d4
+
+; CHECK: move.w %d2, %d5
+; CHECK-SAME: encoding: [0x3a,0x02]
+move.w %d2, %d5
+
+; CHECK: move.w %d2, %d6
+; CHECK-SAME: encoding: [0x3c,0x02]
+move.w %d2, %d6
+
+; CHECK: move.w %d2, %d7
+; CHECK-SAME: encoding: [0x3e,0x02]
+move.w %d2, %d7
+
+; CHECK: move.w %d3, %d0
+; CHECK-SAME: encoding: [0x30,0x03]
+move.w %d3, %d0
+
+; CHECK: move.w %d3, %d1
+; CHECK-SAME: encoding: [0x32,0x03]
+move.w %d3, %d1
+
+; CHECK: move.w %d3, %d2
+; CHECK-SAME: encoding: [0x34,0x03]
+move.w %d3, %d2
+
+; CHECK: move.w %d3, %d3
+; CHECK-SAME: encoding: [0x36,0x03]
+move.w %d3, %d3
+
+; CHECK: move.w %d3, %d4
+; CHECK-SAME: encoding: [0x38,0x03]
+move.w %d3, %d4
+
+; CHECK: move.w %d3, %d5
+; CHECK-SAME: encoding: [0x3a,0x03]
+move.w %d3, %d5
+
+; CHECK: move.w %d3, %d6
+; CHECK-SAME: encoding: [0x3c,0x03]
+move.w %d3, %d6
+
+; CHECK: move.w %d3, %d7
+; CHECK-SAME: encoding: [0x3e,0x03]
+move.w %d3, %d7
+
+; CHECK: move.w %d4, %d0
+; CHECK-SAME: encoding: [0x30,0x04]
+move.w %d4, %d0
+
+; CHECK: move.w %d4, %d1
+; CHECK-SAME: encoding: [0x32,0x04]
+move.w %d4, %d1
+
+; CHECK: move.w %d4, %d2
+; CHECK-SAME: encoding: [0x34,0x04]
+move.w %d4, %d2
+
+; CHECK: move.w %d4, %d3
+; CHECK-SAME: encoding: [0x36,0x04]
+move.w %d4, %d3
+
+; CHECK: move.w %d4, %d4
+; CHECK-SAME: encoding: [0x38,0x04]
+move.w %d4, %d4
+
+; CHECK: move.w %d4, %d5
+; CHECK-SAME: encoding: [0x3a,0x04]
+move.w %d4, %d5
+
+; CHECK: move.w %d4, %d6
+; CHECK-SAME: encoding: [0x3c,0x04]
+move.w %d4, %d6
+
+; CHECK: move.w %d4, %d7
+; CHECK-SAME: encoding: [0x3e,0x04]
+move.w %d4, %d7
+
+; CHECK: move.w %d5, %d0
+; CHECK-SAME: encoding: [0x30,0x05]
+move.w %d5, %d0
+
+; CHECK: move.w %d5, %d1
+; CHECK-SAME: encoding: [0x32,0x05]
+move.w %d5, %d1
+
+; CHECK: move.w %d5, %d2
+; CHECK-SAME: encoding: [0x34,0x05]
+move.w %d5, %d2
+
+; CHECK: move.w %d5, %d3
+; CHECK-SAME: encoding: [0x36,0x05]
+move.w %d5, %d3
+
+; CHECK: move.w %d5, %d4
+; CHECK-SAME: encoding: [0x38,0x05]
+move.w %d5, %d4
+
+; CHECK: move.w %d5, %d5
+; CHECK-SAME: encoding: [0x3a,0x05]
+move.w %d5, %d5
+
+; CHECK: move.w %d5, %d6
+; CHECK-SAME: encoding: [0x3c,0x05]
+move.w %d5, %d6
+
+; CHECK: move.w %d5, %d7
+; CHECK-SAME: encoding: [0x3e,0x05]
+move.w %d5, %d7
+
+; CHECK: move.w %d6, %d0
+; CHECK-SAME: encoding: [0x30,0x06]
+move.w %d6, %d0
+
+; CHECK: move.w %d6, %d1
+; CHECK-SAME: encoding: [0x32,0x06]
+move.w %d6, %d1
+
+; CHECK: move.w %d6, %d2
+; CHECK-SAME: encoding: [0x34,0x06]
+move.w %d6, %d2
+
+; CHECK: move.w %d6, %d3
+; CHECK-SAME: encoding: [0x36,0x06]
+move.w %d6, %d3
+
+; CHECK: move.w %d6, %d4
+; CHECK-SAME: encoding: [0x38,0x06]
+move.w %d6, %d4
+
+; CHECK: move.w %d6, %d5
+; CHECK-SAME: encoding: [0x3a,0x06]
+move.w %d6, %d5
+
+; CHECK: move.w %d6, %d6
+; CHECK-SAME: encoding: [0x3c,0x06]
+move.w %d6, %d6
+
+; CHECK: move.w %d6, %d7
+; CHECK-SAME: encoding: [0x3e,0x06]
+move.w %d6, %d7
+
+; CHECK: move.w %d7, %d0
+; CHECK-SAME: encoding: [0x30,0x07]
+move.w %d7, %d0
+
+; CHECK: move.w %d7, %d1
+; CHECK-SAME: encoding: [0x32,0x07]
+move.w %d7, %d1
+
+; CHECK: move.w %d7, %d2
+; CHECK-SAME: encoding: [0x34,0x07]
+move.w %d7, %d2
+
+; CHECK: move.w %d7, %d3
+; CHECK-SAME: encoding: [0x36,0x07]
+move.w %d7, %d3
+
+; CHECK: move.w %d7, %d4
+; CHECK-SAME: encoding: [0x38,0x07]
+move.w %d7, %d4
+
+; CHECK: move.w %d7, %d5
+; CHECK-SAME: encoding: [0x3a,0x07]
+move.w %d7, %d5
+
+; CHECK: move.w %d7, %d6
+; CHECK-SAME: encoding: [0x3c,0x07]
+move.w %d7, %d6
+
+; CHECK: move.w %d7, %d7
+; CHECK-SAME: encoding: [0x3e,0x07]
+move.w %d7, %d7
+
+; CHECK: move.w %a0, %d0
+; CHECK-SAME: encoding: [0x30,0x08]
+move.w %a0, %d0
+
+; CHECK: move.w %a0, %d1
+; CHECK-SAME: encoding: [0x32,0x08]
+move.w %a0, %d1
+
+; CHECK: move.w %a0, %d2
+; CHECK-SAME: encoding: [0x34,0x08]
+move.w %a0, %d2
+
+; CHECK: move.w %a0, %d3
+; CHECK-SAME: encoding: [0x36,0x08]
+move.w %a0, %d3
+
+; CHECK: move.w %a0, %d4
+; CHECK-SAME: encoding: [0x38,0x08]
+move.w %a0, %d4
+
+; CHECK: move.w %a0, %d5
+; CHECK-SAME: encoding: [0x3a,0x08]
+move.w %a0, %d5
+
+; CHECK: move.w %a0, %d6
+; CHECK-SAME: encoding: [0x3c,0x08]
+move.w %a0, %d6
+
+; CHECK: move.w %a0, %d7
+; CHECK-SAME: encoding: [0x3e,0x08]
+move.w %a0, %d7
+
+; CHECK: move.w %a1, %d0
+; CHECK-SAME: encoding: [0x30,0x09]
+move.w %a1, %d0
+
+; CHECK: move.w %a1, %d1
+; CHECK-SAME: encoding: [0x32,0x09]
+move.w %a1, %d1
+
+; CHECK: move.w %a1, %d2
+; CHECK-SAME: encoding: [0x34,0x09]
+move.w %a1, %d2
+
+; CHECK: move.w %a1, %d3
+; CHECK-SAME: encoding: [0x36,0x09]
+move.w %a1, %d3
+
+; CHECK: move.w %a1, %d4
+; CHECK-SAME: encoding: [0x38,0x09]
+move.w %a1, %d4
+
+; CHECK: move.w %a1, %d5
+; CHECK-SAME: encoding: [0x3a,0x09]
+move.w %a1, %d5
+
+; CHECK: move.w %a1, %d6
+; CHECK-SAME: encoding: [0x3c,0x09]
+move.w %a1, %d6
+
+; CHECK: move.w %a1, %d7
+; CHECK-SAME: encoding: [0x3e,0x09]
+move.w %a1, %d7
+
+; CHECK: move.w %a2, %d0
+; CHECK-SAME: encoding: [0x30,0x0a]
+move.w %a2, %d0
+
+; CHECK: move.w %a2, %d1
+; CHECK-SAME: encoding: [0x32,0x0a]
+move.w %a2, %d1
+
+; CHECK: move.w %a2, %d2
+; CHECK-SAME: encoding: [0x34,0x0a]
+move.w %a2, %d2
+
+; CHECK: move.w %a2, %d3
+; CHECK-SAME: encoding: [0x36,0x0a]
+move.w %a2, %d3
+
+; CHECK: move.w %a2, %d4
+; CHECK-SAME: encoding: [0x38,0x0a]
+move.w %a2, %d4
+
+; CHECK: move.w %a2, %d5
+; CHECK-SAME: encoding: [0x3a,0x0a]
+move.w %a2, %d5
+
+; CHECK: move.w %a2, %d6
+; CHECK-SAME: encoding: [0x3c,0x0a]
+move.w %a2, %d6
+
+; CHECK: move.w %a2, %d7
+; CHECK-SAME: encoding: [0x3e,0x0a]
+move.w %a2, %d7
+
+; CHECK: move.w %a3, %d0
+; CHECK-SAME: encoding: [0x30,0x0b]
+move.w %a3, %d0
+
+; CHECK: move.w %a3, %d1
+; CHECK-SAME: encoding: [0x32,0x0b]
+move.w %a3, %d1
+
+; CHECK: move.w %a3, %d2
+; CHECK-SAME: encoding: [0x34,0x0b]
+move.w %a3, %d2
+
+; CHECK: move.w %a3, %d3
+; CHECK-SAME: encoding: [0x36,0x0b]
+move.w %a3, %d3
+
+; CHECK: move.w %a3, %d4
+; CHECK-SAME: encoding: [0x38,0x0b]
+move.w %a3, %d4
+
+; CHECK: move.w %a3, %d5
+; CHECK-SAME: encoding: [0x3a,0x0b]
+move.w %a3, %d5
+
+; CHECK: move.w %a3, %d6
+; CHECK-SAME: encoding: [0x3c,0x0b]
+move.w %a3, %d6
+
+; CHECK: move.w %a3, %d7
+; CHECK-SAME: encoding: [0x3e,0x0b]
+move.w %a3, %d7
+
+; CHECK: move.w %a4, %d0
+; CHECK-SAME: encoding: [0x30,0x0c]
+move.w %a4, %d0
+
+; CHECK: move.w %a4, %d1
+; CHECK-SAME: encoding: [0x32,0x0c]
+move.w %a4, %d1
+
+; CHECK: move.w %a4, %d2
+; CHECK-SAME: encoding: [0x34,0x0c]
+move.w %a4, %d2
+
+; CHECK: move.w %a4, %d3
+; CHECK-SAME: encoding: [0x36,0x0c]
+move.w %a4, %d3
+
+; CHECK: move.w %a4, %d4
+; CHECK-SAME: encoding: [0x38,0x0c]
+move.w %a4, %d4
+
+; CHECK: move.w %a4, %d5
+; CHECK-SAME: encoding: [0x3a,0x0c]
+move.w %a4, %d5
+
+; CHECK: move.w %a4, %d6
+; CHECK-SAME: encoding: [0x3c,0x0c]
+move.w %a4, %d6
+
+; CHECK: move.w %a4, %d7
+; CHECK-SAME: encoding: [0x3e,0x0c]
+move.w %a4, %d7
+
+; CHECK: move.w %a5, %d0
+; CHECK-SAME: encoding: [0x30,0x0d]
+move.w %a5, %d0
+
+; CHECK: move.w %a5, %d1
+; CHECK-SAME: encoding: [0x32,0x0d]
+move.w %a5, %d1
+
+; CHECK: move.w %a5, %d2
+; CHECK-SAME: encoding: [0x34,0x0d]
+move.w %a5, %d2
+
+; CHECK: move.w %a5, %d3
+; CHECK-SAME: encoding: [0x36,0x0d]
+move.w %a5, %d3
+
+; CHECK: move.w %a5, %d4
+; CHECK-SAME: encoding: [0x38,0x0d]
+move.w %a5, %d4
+
+; CHECK: move.w %a5, %d5
+; CHECK-SAME: encoding: [0x3a,0x0d]
+move.w %a5, %d5
+
+; CHECK: move.w %a5, %d6
+; CHECK-SAME: encoding: [0x3c,0x0d]
+move.w %a5, %d6
+
+; CHECK: move.w %a5, %d7
+; CHECK-SAME: encoding: [0x3e,0x0d]
+move.w %a5, %d7
+
+; CHECK: move.w %a6, %d0
+; CHECK-SAME: encoding: [0x30,0x0e]
+move.w %a6, %d0
+
+; CHECK: move.w %a6, %d1
+; CHECK-SAME: encoding: [0x32,0x0e]
+move.w %a6, %d1
+
+; CHECK: move.w %a6, %d2
+; CHECK-SAME: encoding: [0x34,0x0e]
+move.w %a6, %d2
+
+; CHECK: move.w %a6, %d3
+; CHECK-SAME: encoding: [0x36,0x0e]
+move.w %a6, %d3
+
+; CHECK: move.w %a6, %d4
+; CHECK-SAME: encoding: [0x38,0x0e]
+move.w %a6, %d4
+
+; CHECK: move.w %a6, %d5
+; CHECK-SAME: encoding: [0x3a,0x0e]
+move.w %a6, %d5
+
+; CHECK: move.w %a6, %d6
+; CHECK-SAME: encoding: [0x3c,0x0e]
+move.w %a6, %d6
+
+; CHECK: move.w %a6, %d7
+; CHECK-SAME: encoding: [0x3e,0x0e]
+move.w %a6, %d7
+
+; CHECK: move.w %sp, %d0
+; CHECK-SAME: encoding: [0x30,0x0f]
+move.w %sp, %d0
+
+; CHECK: move.w %sp, %d1
+; CHECK-SAME: encoding: [0x32,0x0f]
+move.w %sp, %d1
+
+; CHECK: move.w %sp, %d2
+; CHECK-SAME: encoding: [0x34,0x0f]
+move.w %sp, %d2
+
+; CHECK: move.w %sp, %d3
+; CHECK-SAME: encoding: [0x36,0x0f]
+move.w %sp, %d3
+
+; CHECK: move.w %sp, %d4
+; CHECK-SAME: encoding: [0x38,0x0f]
+move.w %sp, %d4
+
+; CHECK: move.w %sp, %d5
+; CHECK-SAME: encoding: [0x3a,0x0f]
+move.w %sp, %d5
+
+; CHECK: move.w %sp, %d6
+; CHECK-SAME: encoding: [0x3c,0x0f]
+move.w %sp, %d6
+
+; CHECK: move.w %sp, %d7
+; CHECK-SAME: encoding: [0x3e,0x0f]
+move.w %sp, %d7
+
+; CHECK: move.l %d0, %d0
+; CHECK-SAME: encoding: [0x20,0x00]
+move.l %d0, %d0
+
+; CHECK: move.l %d0, %d1
+; CHECK-SAME: encoding: [0x22,0x00]
+move.l %d0, %d1
+
+; CHECK: move.l %d0, %d2
+; CHECK-SAME: encoding: [0x24,0x00]
+move.l %d0, %d2
+
+; CHECK: move.l %d0, %d3
+; CHECK-SAME: encoding: [0x26,0x00]
+move.l %d0, %d3
+
+; CHECK: move.l %d0, %d4
+; CHECK-SAME: encoding: [0x28,0x00]
+move.l %d0, %d4
+
+; CHECK: move.l %d0, %d5
+; CHECK-SAME: encoding: [0x2a,0x00]
+move.l %d0, %d5
+
+; CHECK: move.l %d0, %d6
+; CHECK-SAME: encoding: [0x2c,0x00]
+move.l %d0, %d6
+
+; CHECK: move.l %d0, %d7
+; CHECK-SAME: encoding: [0x2e,0x00]
+move.l %d0, %d7
+
+; CHECK: move.l %d1, %d0
+; CHECK-SAME: encoding: [0x20,0x01]
+move.l %d1, %d0
+
+; CHECK: move.l %d1, %d1
+; CHECK-SAME: encoding: [0x22,0x01]
+move.l %d1, %d1
+
+; CHECK: move.l %d1, %d2
+; CHECK-SAME: encoding: [0x24,0x01]
+move.l %d1, %d2
+
+; CHECK: move.l %d1, %d3
+; CHECK-SAME: encoding: [0x26,0x01]
+move.l %d1, %d3
+
+; CHECK: move.l %d1, %d4
+; CHECK-SAME: encoding: [0x28,0x01]
+move.l %d1, %d4
+
+; CHECK: move.l %d1, %d5
+; CHECK-SAME: encoding: [0x2a,0x01]
+move.l %d1, %d5
+
+; CHECK: move.l %d1, %d6
+; CHECK-SAME: encoding: [0x2c,0x01]
+move.l %d1, %d6
+
+; CHECK: move.l %d1, %d7
+; CHECK-SAME: encoding: [0x2e,0x01]
+move.l %d1, %d7
+
+; CHECK: move.l %d2, %d0
+; CHECK-SAME: encoding: [0x20,0x02]
+move.l %d2, %d0
+
+; CHECK: move.l %d2, %d1
+; CHECK-SAME: encoding: [0x22,0x02]
+move.l %d2, %d1
+
+; CHECK: move.l %d2, %d2
+; CHECK-SAME: encoding: [0x24,0x02]
+move.l %d2, %d2
+
+; CHECK: move.l %d2, %d3
+; CHECK-SAME: encoding: [0x26,0x02]
+move.l %d2, %d3
+
+; CHECK: move.l %d2, %d4
+; CHECK-SAME: encoding: [0x28,0x02]
+move.l %d2, %d4
+
+; CHECK: move.l %d2, %d5
+; CHECK-SAME: encoding: [0x2a,0x02]
+move.l %d2, %d5
+
+; CHECK: move.l %d2, %d6
+; CHECK-SAME: encoding: [0x2c,0x02]
+move.l %d2, %d6
+
+; CHECK: move.l %d2, %d7
+; CHECK-SAME: encoding: [0x2e,0x02]
+move.l %d2, %d7
+
+; CHECK: move.l %d3, %d0
+; CHECK-SAME: encoding: [0x20,0x03]
+move.l %d3, %d0
+
+; CHECK: move.l %d3, %d1
+; CHECK-SAME: encoding: [0x22,0x03]
+move.l %d3, %d1
+
+; CHECK: move.l %d3, %d2
+; CHECK-SAME: encoding: [0x24,0x03]
+move.l %d3, %d2
+
+; CHECK: move.l %d3, %d3
+; CHECK-SAME: encoding: [0x26,0x03]
+move.l %d3, %d3
+
+; CHECK: move.l %d3, %d4
+; CHECK-SAME: encoding: [0x28,0x03]
+move.l %d3, %d4
+
+; CHECK: move.l %d3, %d5
+; CHECK-SAME: encoding: [0x2a,0x03]
+move.l %d3, %d5
+
+; CHECK: move.l %d3, %d6
+; CHECK-SAME: encoding: [0x2c,0x03]
+move.l %d3, %d6
+
+; CHECK: move.l %d3, %d7
+; CHECK-SAME: encoding: [0x2e,0x03]
+move.l %d3, %d7
+
+; CHECK: move.l %d4, %d0
+; CHECK-SAME: encoding: [0x20,0x04]
+move.l %d4, %d0
+
+; CHECK: move.l %d4, %d1
+; CHECK-SAME: encoding: [0x22,0x04]
+move.l %d4, %d1
+
+; CHECK: move.l %d4, %d2
+; CHECK-SAME: encoding: [0x24,0x04]
+move.l %d4, %d2
+
+; CHECK: move.l %d4, %d3
+; CHECK-SAME: encoding: [0x26,0x04]
+move.l %d4, %d3
+
+; CHECK: move.l %d4, %d4
+; CHECK-SAME: encoding: [0x28,0x04]
+move.l %d4, %d4
+
+; CHECK: move.l %d4, %d5
+; CHECK-SAME: encoding: [0x2a,0x04]
+move.l %d4, %d5
+
+; CHECK: move.l %d4, %d6
+; CHECK-SAME: encoding: [0x2c,0x04]
+move.l %d4, %d6
+
+; CHECK: move.l %d4, %d7
+; CHECK-SAME: encoding: [0x2e,0x04]
+move.l %d4, %d7
+
+; CHECK: move.l %d5, %d0
+; CHECK-SAME: encoding: [0x20,0x05]
+move.l %d5, %d0
+
+; CHECK: move.l %d5, %d1
+; CHECK-SAME: encoding: [0x22,0x05]
+move.l %d5, %d1
+
+; CHECK: move.l %d5, %d2
+; CHECK-SAME: encoding: [0x24,0x05]
+move.l %d5, %d2
+
+; CHECK: move.l %d5, %d3
+; CHECK-SAME: encoding: [0x26,0x05]
+move.l %d5, %d3
+
+; CHECK: move.l %d5, %d4
+; CHECK-SAME: encoding: [0x28,0x05]
+move.l %d5, %d4
+
+; CHECK: move.l %d5, %d5
+; CHECK-SAME: encoding: [0x2a,0x05]
+move.l %d5, %d5
+
+; CHECK: move.l %d5, %d6
+; CHECK-SAME: encoding: [0x2c,0x05]
+move.l %d5, %d6
+
+; CHECK: move.l %d5, %d7
+; CHECK-SAME: encoding: [0x2e,0x05]
+move.l %d5, %d7
+
+; CHECK: move.l %d6, %d0
+; CHECK-SAME: encoding: [0x20,0x06]
+move.l %d6, %d0
+
+; CHECK: move.l %d6, %d1
+; CHECK-SAME: encoding: [0x22,0x06]
+move.l %d6, %d1
+
+; CHECK: move.l %d6, %d2
+; CHECK-SAME: encoding: [0x24,0x06]
+move.l %d6, %d2
+
+; CHECK: move.l %d6, %d3
+; CHECK-SAME: encoding: [0x26,0x06]
+move.l %d6, %d3
+
+; CHECK: move.l %d6, %d4
+; CHECK-SAME: encoding: [0x28,0x06]
+move.l %d6, %d4
+
+; CHECK: move.l %d6, %d5
+; CHECK-SAME: encoding: [0x2a,0x06]
+move.l %d6, %d5
+
+; CHECK: move.l %d6, %d6
+; CHECK-SAME: encoding: [0x2c,0x06]
+move.l %d6, %d6
+
+; CHECK: move.l %d6, %d7
+; CHECK-SAME: encoding: [0x2e,0x06]
+move.l %d6, %d7
+
+; CHECK: move.l %d7, %d0
+; CHECK-SAME: encoding: [0x20,0x07]
+move.l %d7, %d0
+
+; CHECK: move.l %d7, %d1
+; CHECK-SAME: encoding: [0x22,0x07]
+move.l %d7, %d1
+
+; CHECK: move.l %d7, %d2
+; CHECK-SAME: encoding: [0x24,0x07]
+move.l %d7, %d2
+
+; CHECK: move.l %d7, %d3
+; CHECK-SAME: encoding: [0x26,0x07]
+move.l %d7, %d3
+
+; CHECK: move.l %d7, %d4
+; CHECK-SAME: encoding: [0x28,0x07]
+move.l %d7, %d4
+
+; CHECK: move.l %d7, %d5
+; CHECK-SAME: encoding: [0x2a,0x07]
+move.l %d7, %d5
+
+; CHECK: move.l %d7, %d6
+; CHECK-SAME: encoding: [0x2c,0x07]
+move.l %d7, %d6
+
+; CHECK: move.l %d7, %d7
+; CHECK-SAME: encoding: [0x2e,0x07]
+move.l %d7, %d7
+
+; CHECK: move.l %a0, %d0
+; CHECK-SAME: encoding: [0x20,0x08]
+move.l %a0, %d0
+
+; CHECK: move.l %a0, %d1
+; CHECK-SAME: encoding: [0x22,0x08]
+move.l %a0, %d1
+
+; CHECK: move.l %a0, %d2
+; CHECK-SAME: encoding: [0x24,0x08]
+move.l %a0, %d2
+
+; CHECK: move.l %a0, %d3
+; CHECK-SAME: encoding: [0x26,0x08]
+move.l %a0, %d3
+
+; CHECK: move.l %a0, %d4
+; CHECK-SAME: encoding: [0x28,0x08]
+move.l %a0, %d4
+
+; CHECK: move.l %a0, %d5
+; CHECK-SAME: encoding: [0x2a,0x08]
+move.l %a0, %d5
+
+; CHECK: move.l %a0, %d6
+; CHECK-SAME: encoding: [0x2c,0x08]
+move.l %a0, %d6
+
+; CHECK: move.l %a0, %d7
+; CHECK-SAME: encoding: [0x2e,0x08]
+move.l %a0, %d7
+
+; CHECK: move.l %a1, %d0
+; CHECK-SAME: encoding: [0x20,0x09]
+move.l %a1, %d0
+
+; CHECK: move.l %a1, %d1
+; CHECK-SAME: encoding: [0x22,0x09]
+move.l %a1, %d1
+
+; CHECK: move.l %a1, %d2
+; CHECK-SAME: encoding: [0x24,0x09]
+move.l %a1, %d2
+
+; CHECK: move.l %a1, %d3
+; CHECK-SAME: encoding: [0x26,0x09]
+move.l %a1, %d3
+
+; CHECK: move.l %a1, %d4
+; CHECK-SAME: encoding: [0x28,0x09]
+move.l %a1, %d4
+
+; CHECK: move.l %a1, %d5
+; CHECK-SAME: encoding: [0x2a,0x09]
+move.l %a1, %d5
+
+; CHECK: move.l %a1, %d6
+; CHECK-SAME: encoding: [0x2c,0x09]
+move.l %a1, %d6
+
+; CHECK: move.l %a1, %d7
+; CHECK-SAME: encoding: [0x2e,0x09]
+move.l %a1, %d7
+
+; CHECK: move.l %a2, %d0
+; CHECK-SAME: encoding: [0x20,0x0a]
+move.l %a2, %d0
+
+; CHECK: move.l %a2, %d1
+; CHECK-SAME: encoding: [0x22,0x0a]
+move.l %a2, %d1
+
+; CHECK: move.l %a2, %d2
+; CHECK-SAME: encoding: [0x24,0x0a]
+move.l %a2, %d2
+
+; CHECK: move.l %a2, %d3
+; CHECK-SAME: encoding: [0x26,0x0a]
+move.l %a2, %d3
+
+; CHECK: move.l %a2, %d4
+; CHECK-SAME: encoding: [0x28,0x0a]
+move.l %a2, %d4
+
+; CHECK: move.l %a2, %d5
+; CHECK-SAME: encoding: [0x2a,0x0a]
+move.l %a2, %d5
+
+; CHECK: move.l %a2, %d6
+; CHECK-SAME: encoding: [0x2c,0x0a]
+move.l %a2, %d6
+
+; CHECK: move.l %a2, %d7
+; CHECK-SAME: encoding: [0x2e,0x0a]
+move.l %a2, %d7
+
+; CHECK: move.l %a3, %d0
+; CHECK-SAME: encoding: [0x20,0x0b]
+move.l %a3, %d0
+
+; CHECK: move.l %a3, %d1
+; CHECK-SAME: encoding: [0x22,0x0b]
+move.l %a3, %d1
+
+; CHECK: move.l %a3, %d2
+; CHECK-SAME: encoding: [0x24,0x0b]
+move.l %a3, %d2
+
+; CHECK: move.l %a3, %d3
+; CHECK-SAME: encoding: [0x26,0x0b]
+move.l %a3, %d3
+
+; CHECK: move.l %a3, %d4
+; CHECK-SAME: encoding: [0x28,0x0b]
+move.l %a3, %d4
+
+; CHECK: move.l %a3, %d5
+; CHECK-SAME: encoding: [0x2a,0x0b]
+move.l %a3, %d5
+
+; CHECK: move.l %a3, %d6
+; CHECK-SAME: encoding: [0x2c,0x0b]
+move.l %a3, %d6
+
+; CHECK: move.l %a3, %d7
+; CHECK-SAME: encoding: [0x2e,0x0b]
+move.l %a3, %d7
+
+; CHECK: move.l %a4, %d0
+; CHECK-SAME: encoding: [0x20,0x0c]
+move.l %a4, %d0
+
+; CHECK: move.l %a4, %d1
+; CHECK-SAME: encoding: [0x22,0x0c]
+move.l %a4, %d1
+
+; CHECK: move.l %a4, %d2
+; CHECK-SAME: encoding: [0x24,0x0c]
+move.l %a4, %d2
+
+; CHECK: move.l %a4, %d3
+; CHECK-SAME: encoding: [0x26,0x0c]
+move.l %a4, %d3
+
+; CHECK: move.l %a4, %d4
+; CHECK-SAME: encoding: [0x28,0x0c]
+move.l %a4, %d4
+
+; CHECK: move.l %a4, %d5
+; CHECK-SAME: encoding: [0x2a,0x0c]
+move.l %a4, %d5
+
+; CHECK: move.l %a4, %d6
+; CHECK-SAME: encoding: [0x2c,0x0c]
+move.l %a4, %d6
+
+; CHECK: move.l %a4, %d7
+; CHECK-SAME: encoding: [0x2e,0x0c]
+move.l %a4, %d7
+
+; CHECK: move.l %a5, %d0
+; CHECK-SAME: encoding: [0x20,0x0d]
+move.l %a5, %d0
+
+; CHECK: move.l %a5, %d1
+; CHECK-SAME: encoding: [0x22,0x0d]
+move.l %a5, %d1
+
+; CHECK: move.l %a5, %d2
+; CHECK-SAME: encoding: [0x24,0x0d]
+move.l %a5, %d2
+
+; CHECK: move.l %a5, %d3
+; CHECK-SAME: encoding: [0x26,0x0d]
+move.l %a5, %d3
+
+; CHECK: move.l %a5, %d4
+; CHECK-SAME: encoding: [0x28,0x0d]
+move.l %a5, %d4
+
+; CHECK: move.l %a5, %d5
+; CHECK-SAME: encoding: [0x2a,0x0d]
+move.l %a5, %d5
+
+; CHECK: move.l %a5, %d6
+; CHECK-SAME: encoding: [0x2c,0x0d]
+move.l %a5, %d6
+
+; CHECK: move.l %a5, %d7
+; CHECK-SAME: encoding: [0x2e,0x0d]
+move.l %a5, %d7
+
+; CHECK: move.l %a6, %d0
+; CHECK-SAME: encoding: [0x20,0x0e]
+move.l %a6, %d0
+
+; CHECK: move.l %a6, %d1
+; CHECK-SAME: encoding: [0x22,0x0e]
+move.l %a6, %d1
+
+; CHECK: move.l %a6, %d2
+; CHECK-SAME: encoding: [0x24,0x0e]
+move.l %a6, %d2
+
+; CHECK: move.l %a6, %d3
+; CHECK-SAME: encoding: [0x26,0x0e]
+move.l %a6, %d3
+
+; CHECK: move.l %a6, %d4
+; CHECK-SAME: encoding: [0x28,0x0e]
+move.l %a6, %d4
+
+; CHECK: move.l %a6, %d5
+; CHECK-SAME: encoding: [0x2a,0x0e]
+move.l %a6, %d5
+
+; CHECK: move.l %a6, %d6
+; CHECK-SAME: encoding: [0x2c,0x0e]
+move.l %a6, %d6
+
+; CHECK: move.l %a6, %d7
+; CHECK-SAME: encoding: [0x2e,0x0e]
+move.l %a6, %d7
+
+; CHECK: move.l %sp, %d0
+; CHECK-SAME: encoding: [0x20,0x0f]
+move.l %sp, %d0
+
+; CHECK: move.l %sp, %d1
+; CHECK-SAME: encoding: [0x22,0x0f]
+move.l %sp, %d1
+
+; CHECK: move.l %sp, %d2
+; CHECK-SAME: encoding: [0x24,0x0f]
+move.l %sp, %d2
+
+; CHECK: move.l %sp, %d3
+; CHECK-SAME: encoding: [0x26,0x0f]
+move.l %sp, %d3
+
+; CHECK: move.l %sp, %d4
+; CHECK-SAME: encoding: [0x28,0x0f]
+move.l %sp, %d4
+
+; CHECK: move.l %sp, %d5
+; CHECK-SAME: encoding: [0x2a,0x0f]
+move.l %sp, %d5
+
+; CHECK: move.l %sp, %d6
+; CHECK-SAME: encoding: [0x2c,0x0f]
+move.l %sp, %d6
+
+; CHECK: move.l %sp, %d7
+; CHECK-SAME: encoding: [0x2e,0x0f]
+move.l %sp, %d7
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
new file mode 100755
index 0000000000000..5fe7c4cb1e9c0
--- /dev/null
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -0,0 +1,233 @@
+#!/usr/bin/env python3
+
+from abc import ABC, abstractmethod
+from dataclasses import dataclass
+from typing import Generator
+
+
+# Utility functions:
+
+
+# https://stackoverflow.com/a/952952
+def flatten(xss):
+ """Flattens a list of lists into a single list"""
+ return [x for xs in xss for x in xs]
+
+
+def word_to_bytes(word: int) -> bytes:
+ """Converts a 16-bit word value to a pair of bytes"""
+ return word.to_bytes(2, byteorder="big")
+
+
+def words_to_bytes(words: list[int]) -> bytes:
+ """Converts a list of words to a list of bytes"""
+ return flatten(map(word_to_bytes, words))
+
+
+# Size field
+# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf230
+
+
+class Size(ABC):
+ @abstractmethod
+ def asm() -> str:
+ pass
+
+ @abstractmethod
+ def sizeField() -> int:
+ pass
+
+
+ at dataclass
+class Byte(Size):
+ def asm() -> str:
+ return "b"
+
+ def sizeField() -> int:
+ return 0b01
+
+
+ at dataclass
+class Word(Size):
+ def asm() -> str:
+ return "w"
+
+ def sizeField() -> int:
+ return 0b11
+
+
+ at dataclass
+class Long(Size):
+ def asm() -> str:
+ return "l"
+
+ def sizeField() -> int:
+ return 0b10
+
+
+# Effective addressing modes
+# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf3c
+
+
+class EffectiveAddressingMode(ABC):
+ @abstractmethod
+ def permutations() -> Generator["EffectiveAddressingMode", None, None]:
+ """Returns all the permutations of this addressing mode"""
+ pass
+
+ @abstractmethod
+ def asm(self) -> str:
+ pass
+
+ @abstractmethod
+ def modeField(self) -> int:
+ pass
+
+ @abstractmethod
+ def registerField(self) -> int:
+ pass
+
+
+# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf2e
+# Dn
+ at dataclass
+class DataRegisterDirect(EffectiveAddressingMode):
+ registerNumber: int
+
+ def permutations() -> Generator["DataRegisterDirect", None, None]:
+ for registerNumber in range(8):
+ yield DataRegisterDirect(registerNumber)
+
+ def asm(self) -> str:
+ return f"%d{self.registerNumber}"
+
+ def modeField(self) -> int:
+ return 0b000
+
+ def registerField(self) -> int:
+ return self.registerNumber
+
+
+# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf2e
+# An
+ at dataclass
+class AddressRegisterDirect(EffectiveAddressingMode):
+ registerNumber: int
+
+ def permutations() -> Generator["AddressRegisterDirect", None, None]:
+ for registerNumber in range(8):
+ yield AddressRegisterDirect(registerNumber)
+
+ def asm(self) -> str:
+ if self.registerNumber == 7:
+ return "%sp"
+ else:
+ return f"%a{self.registerNumber}"
+
+ def modeField(self) -> int:
+ return 0b001
+
+ def registerField(self) -> int:
+ return self.registerNumber
+
+
+# Instructions
+
+
+class Instruction(ABC):
+ @abstractmethod
+ def permutations() -> Generator["Instruction", None, None]:
+ pass
+
+ @abstractmethod
+ def asm(self) -> str:
+ pass
+
+ @abstractmethod
+ def words(self) -> list[int]:
+ pass
+
+ def bytes(self) -> bytes:
+ """Encodes the instruction as a byte array"""
+ words = self.words()
+ lists_of_bytes = words_to_bytes(words)
+ return lists_of_bytes
+
+
+# https://m680x0.github.io/ref/integer-instructions.html#pfdc
+ at dataclass
+class MOVE(Instruction):
+ size: Size
+ destination: EffectiveAddressingMode
+ source: EffectiveAddressingMode
+
+ def permutations() -> Generator["MOVE", None, None]:
+ sourceModes = [DataRegisterDirect, AddressRegisterDirect]
+ destinationModes = [DataRegisterDirect]
+
+ for size in [Byte, Word, Long]:
+ for sourceMode in sourceModes:
+ # For byte size operation, address register direct is not allowed
+ if (size is not Byte) or (sourceMode is not AddressRegisterDirect):
+ for source in sourceMode.permutations():
+ for destinationMode in destinationModes:
+ for destination in destinationMode.permutations():
+ yield MOVE(size, destination, source)
+
+ def asm(self) -> str:
+ return f"move.{self.size.asm()} {self.source.asm()}, {self.destination.asm()}"
+
+ def words(self) -> list[int]:
+ return [
+ (
+ (0b00 << 14)
+ | (self.size.sizeField() << 12)
+ | (self.destination.registerField() << 9)
+ | (self.destination.modeField() << 6)
+ | (self.source.modeField() << 3)
+ | self.source.registerField()
+ )
+ ]
+
+
+# Utility functions
+
+
+def byte_to_hex(byte: int) -> str:
+ """Returns hexadecimal representation of a number with 0x prefix"""
+ return f"{byte:#04x}"
+
+
+# Encoding tests
+
+
+def write_encoding_tests_header(f):
+ header: list[str] = [
+ "; Generated by llvm/test/MC/M68k/generate_tests.py\n",
+ "; Please do not edit this file by hand.\n",
+ "\n",
+ "; RUN: llvm-mc -triple=m68k -mcpu=M68040 -show-encoding < %s | FileCheck %s\n",
+ ]
+
+ for line in header:
+ f.write(line)
+
+
+def write_encoding_test(f, instruction: Instruction):
+ bytes = ",".join(map(byte_to_hex, instruction.bytes()))
+ f.write(f"; CHECK: {instruction.asm()}\n")
+ f.write(f"; CHECK-SAME: encoding: [{bytes}]\n")
+ f.write(f"{instruction.asm()}\n")
+
+
+def write_encoding_tests(cls):
+ name = cls.__name__
+ with open(f"Generated/{name}.s", "w") as f:
+ write_encoding_tests_header(f)
+ for instruction in cls.permutations():
+ f.write("\n")
+ write_encoding_test(f, instruction)
+
+
+for cls in [MOVE]:
+ write_encoding_tests(cls)
>From 3457787e5ad841049d1934257364232a527dfc75 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Sun, 26 Apr 2026 17:44:55 +0100
Subject: [PATCH 2/9] Remove duplicate tests
---
llvm/test/MC/M68k/Data/Classes/MxMove_RR.s | 20 --------------------
1 file changed, 20 deletions(-)
delete mode 100644 llvm/test/MC/M68k/Data/Classes/MxMove_RR.s
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMove_RR.s b/llvm/test/MC/M68k/Data/Classes/MxMove_RR.s
deleted file mode 100644
index f16729760d259..0000000000000
--- a/llvm/test/MC/M68k/Data/Classes/MxMove_RR.s
+++ /dev/null
@@ -1,20 +0,0 @@
-; RUN: llvm-mc -triple=m68k -show-encoding %s | FileCheck %s
-
-; CHECK: move.b %d0, %d1
-; CHECK-SAME: encoding: [0x12,0x00]
-move.b %d0, %d1
-; CHECK: move.w %a2, %d3
-; CHECK-SAME: encoding: [0x36,0x0a]
-move.w %a2, %d3
-; CHECK: move.w %a2, %a6
-; CHECK-SAME: encoding: [0x3c,0x4a]
-move.w %a2, %a6
-; CHECK: move.w %a2, %d1
-; CHECK-SAME: encoding: [0x32,0x0a]
-move.w %a2, %d1
-; CHECK: move.l %d2, %d1
-; CHECK-SAME: encoding: [0x22,0x02]
-move.l %d2, %d1
-; CHECK: move.l %a2, %a1
-; CHECK-SAME: encoding: [0x22,0x4a]
-move.l %a2, %a1
>From 01e6cc621d1f9d3b6f17e1b1e4229c7df9a15042 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Mon, 27 Apr 2026 00:04:26 +0100
Subject: [PATCH 3/9] Move `byte_to_hex` with the other utility functions
---
llvm/test/MC/M68k/generate_tests.py | 13 +++++--------
1 file changed, 5 insertions(+), 8 deletions(-)
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index 5fe7c4cb1e9c0..c8471f3edbfdd 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -24,6 +24,11 @@ def words_to_bytes(words: list[int]) -> bytes:
return flatten(map(word_to_bytes, words))
+def byte_to_hex(byte: int) -> str:
+ """Returns hexadecimal representation of a number with 0x prefix"""
+ return f"{byte:#04x}"
+
+
# Size field
# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf230
@@ -190,14 +195,6 @@ def words(self) -> list[int]:
]
-# Utility functions
-
-
-def byte_to_hex(byte: int) -> str:
- """Returns hexadecimal representation of a number with 0x prefix"""
- return f"{byte:#04x}"
-
-
# Encoding tests
>From 773cbcf8a83fd1959cb806c24b0f6cad00776971 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Mon, 27 Apr 2026 00:28:59 +0100
Subject: [PATCH 4/9] Add docstrings
---
llvm/test/MC/M68k/generate_tests.py | 46 ++++++++++++++++++++---------
1 file changed, 32 insertions(+), 14 deletions(-)
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index c8471f3edbfdd..c38337d5b331f 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -10,17 +10,17 @@
# https://stackoverflow.com/a/952952
def flatten(xss):
- """Flattens a list of lists into a single list"""
+ """Flattens a list of lists into a single list."""
return [x for xs in xss for x in xs]
def word_to_bytes(word: int) -> bytes:
- """Converts a 16-bit word value to a pair of bytes"""
+ """Converts a 16-bit word value to a pair of bytes."""
return word.to_bytes(2, byteorder="big")
def words_to_bytes(words: list[int]) -> bytes:
- """Converts a list of words to a list of bytes"""
+ """Converts a list of words to a list of bytes."""
return flatten(map(word_to_bytes, words))
@@ -34,17 +34,21 @@ def byte_to_hex(byte: int) -> str:
class Size(ABC):
+ """Represents the amount of data being operated on."""
+
@abstractmethod
def asm() -> str:
- pass
+ """Returns the size suffix in assembly language."""
@abstractmethod
def sizeField() -> int:
- pass
+ """Returns the encoded value of the instruction's "size" field."""
@dataclass
class Byte(Size):
+ """Indicates that an 8-bit value is being operated on."""
+
def asm() -> str:
return "b"
@@ -54,6 +58,8 @@ def sizeField() -> int:
@dataclass
class Word(Size):
+ """Indicates that a 16-bit value is being operated on."""
+
def asm() -> str:
return "w"
@@ -63,6 +69,8 @@ def sizeField() -> int:
@dataclass
class Long(Size):
+ """Indicates that a 32-bit value is being operated on."""
+
def asm() -> str:
return "l"
@@ -75,28 +83,31 @@ def sizeField() -> int:
class EffectiveAddressingMode(ABC):
+ """Represents a mechanism for addressing source or destination data."""
+
@abstractmethod
def permutations() -> Generator["EffectiveAddressingMode", None, None]:
- """Returns all the permutations of this addressing mode"""
- pass
+ """Returns all the permutations of this addressing mode."""
@abstractmethod
def asm(self) -> str:
- pass
+ """Returns the assembly language for the operand being addressed."""
@abstractmethod
def modeField(self) -> int:
- pass
+ """Returns the encoded value of the instruction's "mode" field."""
@abstractmethod
def registerField(self) -> int:
- pass
+ """Returns the encoded value of the instruction's "register" field."""
# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf2e
# Dn
@dataclass
class DataRegisterDirect(EffectiveAddressingMode):
+ """Represents the contents of a particular data register."""
+
registerNumber: int
def permutations() -> Generator["DataRegisterDirect", None, None]:
@@ -117,6 +128,8 @@ def registerField(self) -> int:
# An
@dataclass
class AddressRegisterDirect(EffectiveAddressingMode):
+ """Represents the contents of a particular address register."""
+
registerNumber: int
def permutations() -> Generator["AddressRegisterDirect", None, None]:
@@ -140,20 +153,22 @@ def registerField(self) -> int:
class Instruction(ABC):
+ """An abstract class to represent a machine instruction."""
+
@abstractmethod
def permutations() -> Generator["Instruction", None, None]:
- pass
+ """Returns all permutations of this instruction and its operands."""
@abstractmethod
def asm(self) -> str:
- pass
+ """Returns the assembly language of this instruction."""
@abstractmethod
def words(self) -> list[int]:
- pass
+ """Returns the encoded 16-bit words of this instruction."""
def bytes(self) -> bytes:
- """Encodes the instruction as a byte array"""
+ """Encodes the words of the instruction as a byte array."""
words = self.words()
lists_of_bytes = words_to_bytes(words)
return lists_of_bytes
@@ -199,6 +214,7 @@ def words(self) -> list[int]:
def write_encoding_tests_header(f):
+ """Writes the comments at the top of the encoding test file."""
header: list[str] = [
"; Generated by llvm/test/MC/M68k/generate_tests.py\n",
"; Please do not edit this file by hand.\n",
@@ -211,6 +227,7 @@ def write_encoding_tests_header(f):
def write_encoding_test(f, instruction: Instruction):
+ """Writes a single instruction's encoding test to a file."""
bytes = ",".join(map(byte_to_hex, instruction.bytes()))
f.write(f"; CHECK: {instruction.asm()}\n")
f.write(f"; CHECK-SAME: encoding: [{bytes}]\n")
@@ -218,6 +235,7 @@ def write_encoding_test(f, instruction: Instruction):
def write_encoding_tests(cls):
+ """Writes tests for all permutations of an instruction to a new file."""
name = cls.__name__
with open(f"Generated/{name}.s", "w") as f:
write_encoding_tests_header(f)
>From bdd182900a19b7671dd49e182e410f3eee2f4385 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Sun, 3 May 2026 13:36:16 +0100
Subject: [PATCH 5/9] Move generated tests to M68k folder
---
llvm/test/MC/M68k/{Generated => }/MOVE.s | 0
llvm/test/MC/M68k/generate_tests.py | 2 +-
2 files changed, 1 insertion(+), 1 deletion(-)
rename llvm/test/MC/M68k/{Generated => }/MOVE.s (100%)
diff --git a/llvm/test/MC/M68k/Generated/MOVE.s b/llvm/test/MC/M68k/MOVE.s
similarity index 100%
rename from llvm/test/MC/M68k/Generated/MOVE.s
rename to llvm/test/MC/M68k/MOVE.s
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index c38337d5b331f..d113adf0d4c96 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -237,7 +237,7 @@ def write_encoding_test(f, instruction: Instruction):
def write_encoding_tests(cls):
"""Writes tests for all permutations of an instruction to a new file."""
name = cls.__name__
- with open(f"Generated/{name}.s", "w") as f:
+ with open(f"{name}.s", "w") as f:
write_encoding_tests_header(f)
for instruction in cls.permutations():
f.write("\n")
>From 9b23c49e60149e7fef07faa353b9ba3879fee3e5 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Sun, 3 May 2026 13:55:48 +0100
Subject: [PATCH 6/9] Generate fewer permutations of registers
---
llvm/test/MC/M68k/MOVE.s | 1100 ---------------------------
llvm/test/MC/M68k/generate_tests.py | 12 +-
2 files changed, 10 insertions(+), 1102 deletions(-)
diff --git a/llvm/test/MC/M68k/MOVE.s b/llvm/test/MC/M68k/MOVE.s
index 0d936526ace0c..2fa35d531f02e 100644
--- a/llvm/test/MC/M68k/MOVE.s
+++ b/llvm/test/MC/M68k/MOVE.s
@@ -11,26 +11,6 @@ move.b %d0, %d0
; CHECK-SAME: encoding: [0x12,0x00]
move.b %d0, %d1
-; CHECK: move.b %d0, %d2
-; CHECK-SAME: encoding: [0x14,0x00]
-move.b %d0, %d2
-
-; CHECK: move.b %d0, %d3
-; CHECK-SAME: encoding: [0x16,0x00]
-move.b %d0, %d3
-
-; CHECK: move.b %d0, %d4
-; CHECK-SAME: encoding: [0x18,0x00]
-move.b %d0, %d4
-
-; CHECK: move.b %d0, %d5
-; CHECK-SAME: encoding: [0x1a,0x00]
-move.b %d0, %d5
-
-; CHECK: move.b %d0, %d6
-; CHECK-SAME: encoding: [0x1c,0x00]
-move.b %d0, %d6
-
; CHECK: move.b %d0, %d7
; CHECK-SAME: encoding: [0x1e,0x00]
move.b %d0, %d7
@@ -43,190 +23,10 @@ move.b %d1, %d0
; CHECK-SAME: encoding: [0x12,0x01]
move.b %d1, %d1
-; CHECK: move.b %d1, %d2
-; CHECK-SAME: encoding: [0x14,0x01]
-move.b %d1, %d2
-
-; CHECK: move.b %d1, %d3
-; CHECK-SAME: encoding: [0x16,0x01]
-move.b %d1, %d3
-
-; CHECK: move.b %d1, %d4
-; CHECK-SAME: encoding: [0x18,0x01]
-move.b %d1, %d4
-
-; CHECK: move.b %d1, %d5
-; CHECK-SAME: encoding: [0x1a,0x01]
-move.b %d1, %d5
-
-; CHECK: move.b %d1, %d6
-; CHECK-SAME: encoding: [0x1c,0x01]
-move.b %d1, %d6
-
; CHECK: move.b %d1, %d7
; CHECK-SAME: encoding: [0x1e,0x01]
move.b %d1, %d7
-; CHECK: move.b %d2, %d0
-; CHECK-SAME: encoding: [0x10,0x02]
-move.b %d2, %d0
-
-; CHECK: move.b %d2, %d1
-; CHECK-SAME: encoding: [0x12,0x02]
-move.b %d2, %d1
-
-; CHECK: move.b %d2, %d2
-; CHECK-SAME: encoding: [0x14,0x02]
-move.b %d2, %d2
-
-; CHECK: move.b %d2, %d3
-; CHECK-SAME: encoding: [0x16,0x02]
-move.b %d2, %d3
-
-; CHECK: move.b %d2, %d4
-; CHECK-SAME: encoding: [0x18,0x02]
-move.b %d2, %d4
-
-; CHECK: move.b %d2, %d5
-; CHECK-SAME: encoding: [0x1a,0x02]
-move.b %d2, %d5
-
-; CHECK: move.b %d2, %d6
-; CHECK-SAME: encoding: [0x1c,0x02]
-move.b %d2, %d6
-
-; CHECK: move.b %d2, %d7
-; CHECK-SAME: encoding: [0x1e,0x02]
-move.b %d2, %d7
-
-; CHECK: move.b %d3, %d0
-; CHECK-SAME: encoding: [0x10,0x03]
-move.b %d3, %d0
-
-; CHECK: move.b %d3, %d1
-; CHECK-SAME: encoding: [0x12,0x03]
-move.b %d3, %d1
-
-; CHECK: move.b %d3, %d2
-; CHECK-SAME: encoding: [0x14,0x03]
-move.b %d3, %d2
-
-; CHECK: move.b %d3, %d3
-; CHECK-SAME: encoding: [0x16,0x03]
-move.b %d3, %d3
-
-; CHECK: move.b %d3, %d4
-; CHECK-SAME: encoding: [0x18,0x03]
-move.b %d3, %d4
-
-; CHECK: move.b %d3, %d5
-; CHECK-SAME: encoding: [0x1a,0x03]
-move.b %d3, %d5
-
-; CHECK: move.b %d3, %d6
-; CHECK-SAME: encoding: [0x1c,0x03]
-move.b %d3, %d6
-
-; CHECK: move.b %d3, %d7
-; CHECK-SAME: encoding: [0x1e,0x03]
-move.b %d3, %d7
-
-; CHECK: move.b %d4, %d0
-; CHECK-SAME: encoding: [0x10,0x04]
-move.b %d4, %d0
-
-; CHECK: move.b %d4, %d1
-; CHECK-SAME: encoding: [0x12,0x04]
-move.b %d4, %d1
-
-; CHECK: move.b %d4, %d2
-; CHECK-SAME: encoding: [0x14,0x04]
-move.b %d4, %d2
-
-; CHECK: move.b %d4, %d3
-; CHECK-SAME: encoding: [0x16,0x04]
-move.b %d4, %d3
-
-; CHECK: move.b %d4, %d4
-; CHECK-SAME: encoding: [0x18,0x04]
-move.b %d4, %d4
-
-; CHECK: move.b %d4, %d5
-; CHECK-SAME: encoding: [0x1a,0x04]
-move.b %d4, %d5
-
-; CHECK: move.b %d4, %d6
-; CHECK-SAME: encoding: [0x1c,0x04]
-move.b %d4, %d6
-
-; CHECK: move.b %d4, %d7
-; CHECK-SAME: encoding: [0x1e,0x04]
-move.b %d4, %d7
-
-; CHECK: move.b %d5, %d0
-; CHECK-SAME: encoding: [0x10,0x05]
-move.b %d5, %d0
-
-; CHECK: move.b %d5, %d1
-; CHECK-SAME: encoding: [0x12,0x05]
-move.b %d5, %d1
-
-; CHECK: move.b %d5, %d2
-; CHECK-SAME: encoding: [0x14,0x05]
-move.b %d5, %d2
-
-; CHECK: move.b %d5, %d3
-; CHECK-SAME: encoding: [0x16,0x05]
-move.b %d5, %d3
-
-; CHECK: move.b %d5, %d4
-; CHECK-SAME: encoding: [0x18,0x05]
-move.b %d5, %d4
-
-; CHECK: move.b %d5, %d5
-; CHECK-SAME: encoding: [0x1a,0x05]
-move.b %d5, %d5
-
-; CHECK: move.b %d5, %d6
-; CHECK-SAME: encoding: [0x1c,0x05]
-move.b %d5, %d6
-
-; CHECK: move.b %d5, %d7
-; CHECK-SAME: encoding: [0x1e,0x05]
-move.b %d5, %d7
-
-; CHECK: move.b %d6, %d0
-; CHECK-SAME: encoding: [0x10,0x06]
-move.b %d6, %d0
-
-; CHECK: move.b %d6, %d1
-; CHECK-SAME: encoding: [0x12,0x06]
-move.b %d6, %d1
-
-; CHECK: move.b %d6, %d2
-; CHECK-SAME: encoding: [0x14,0x06]
-move.b %d6, %d2
-
-; CHECK: move.b %d6, %d3
-; CHECK-SAME: encoding: [0x16,0x06]
-move.b %d6, %d3
-
-; CHECK: move.b %d6, %d4
-; CHECK-SAME: encoding: [0x18,0x06]
-move.b %d6, %d4
-
-; CHECK: move.b %d6, %d5
-; CHECK-SAME: encoding: [0x1a,0x06]
-move.b %d6, %d5
-
-; CHECK: move.b %d6, %d6
-; CHECK-SAME: encoding: [0x1c,0x06]
-move.b %d6, %d6
-
-; CHECK: move.b %d6, %d7
-; CHECK-SAME: encoding: [0x1e,0x06]
-move.b %d6, %d7
-
; CHECK: move.b %d7, %d0
; CHECK-SAME: encoding: [0x10,0x07]
move.b %d7, %d0
@@ -235,26 +35,6 @@ move.b %d7, %d0
; CHECK-SAME: encoding: [0x12,0x07]
move.b %d7, %d1
-; CHECK: move.b %d7, %d2
-; CHECK-SAME: encoding: [0x14,0x07]
-move.b %d7, %d2
-
-; CHECK: move.b %d7, %d3
-; CHECK-SAME: encoding: [0x16,0x07]
-move.b %d7, %d3
-
-; CHECK: move.b %d7, %d4
-; CHECK-SAME: encoding: [0x18,0x07]
-move.b %d7, %d4
-
-; CHECK: move.b %d7, %d5
-; CHECK-SAME: encoding: [0x1a,0x07]
-move.b %d7, %d5
-
-; CHECK: move.b %d7, %d6
-; CHECK-SAME: encoding: [0x1c,0x07]
-move.b %d7, %d6
-
; CHECK: move.b %d7, %d7
; CHECK-SAME: encoding: [0x1e,0x07]
move.b %d7, %d7
@@ -267,26 +47,6 @@ move.w %d0, %d0
; CHECK-SAME: encoding: [0x32,0x00]
move.w %d0, %d1
-; CHECK: move.w %d0, %d2
-; CHECK-SAME: encoding: [0x34,0x00]
-move.w %d0, %d2
-
-; CHECK: move.w %d0, %d3
-; CHECK-SAME: encoding: [0x36,0x00]
-move.w %d0, %d3
-
-; CHECK: move.w %d0, %d4
-; CHECK-SAME: encoding: [0x38,0x00]
-move.w %d0, %d4
-
-; CHECK: move.w %d0, %d5
-; CHECK-SAME: encoding: [0x3a,0x00]
-move.w %d0, %d5
-
-; CHECK: move.w %d0, %d6
-; CHECK-SAME: encoding: [0x3c,0x00]
-move.w %d0, %d6
-
; CHECK: move.w %d0, %d7
; CHECK-SAME: encoding: [0x3e,0x00]
move.w %d0, %d7
@@ -299,190 +59,10 @@ move.w %d1, %d0
; CHECK-SAME: encoding: [0x32,0x01]
move.w %d1, %d1
-; CHECK: move.w %d1, %d2
-; CHECK-SAME: encoding: [0x34,0x01]
-move.w %d1, %d2
-
-; CHECK: move.w %d1, %d3
-; CHECK-SAME: encoding: [0x36,0x01]
-move.w %d1, %d3
-
-; CHECK: move.w %d1, %d4
-; CHECK-SAME: encoding: [0x38,0x01]
-move.w %d1, %d4
-
-; CHECK: move.w %d1, %d5
-; CHECK-SAME: encoding: [0x3a,0x01]
-move.w %d1, %d5
-
-; CHECK: move.w %d1, %d6
-; CHECK-SAME: encoding: [0x3c,0x01]
-move.w %d1, %d6
-
; CHECK: move.w %d1, %d7
; CHECK-SAME: encoding: [0x3e,0x01]
move.w %d1, %d7
-; CHECK: move.w %d2, %d0
-; CHECK-SAME: encoding: [0x30,0x02]
-move.w %d2, %d0
-
-; CHECK: move.w %d2, %d1
-; CHECK-SAME: encoding: [0x32,0x02]
-move.w %d2, %d1
-
-; CHECK: move.w %d2, %d2
-; CHECK-SAME: encoding: [0x34,0x02]
-move.w %d2, %d2
-
-; CHECK: move.w %d2, %d3
-; CHECK-SAME: encoding: [0x36,0x02]
-move.w %d2, %d3
-
-; CHECK: move.w %d2, %d4
-; CHECK-SAME: encoding: [0x38,0x02]
-move.w %d2, %d4
-
-; CHECK: move.w %d2, %d5
-; CHECK-SAME: encoding: [0x3a,0x02]
-move.w %d2, %d5
-
-; CHECK: move.w %d2, %d6
-; CHECK-SAME: encoding: [0x3c,0x02]
-move.w %d2, %d6
-
-; CHECK: move.w %d2, %d7
-; CHECK-SAME: encoding: [0x3e,0x02]
-move.w %d2, %d7
-
-; CHECK: move.w %d3, %d0
-; CHECK-SAME: encoding: [0x30,0x03]
-move.w %d3, %d0
-
-; CHECK: move.w %d3, %d1
-; CHECK-SAME: encoding: [0x32,0x03]
-move.w %d3, %d1
-
-; CHECK: move.w %d3, %d2
-; CHECK-SAME: encoding: [0x34,0x03]
-move.w %d3, %d2
-
-; CHECK: move.w %d3, %d3
-; CHECK-SAME: encoding: [0x36,0x03]
-move.w %d3, %d3
-
-; CHECK: move.w %d3, %d4
-; CHECK-SAME: encoding: [0x38,0x03]
-move.w %d3, %d4
-
-; CHECK: move.w %d3, %d5
-; CHECK-SAME: encoding: [0x3a,0x03]
-move.w %d3, %d5
-
-; CHECK: move.w %d3, %d6
-; CHECK-SAME: encoding: [0x3c,0x03]
-move.w %d3, %d6
-
-; CHECK: move.w %d3, %d7
-; CHECK-SAME: encoding: [0x3e,0x03]
-move.w %d3, %d7
-
-; CHECK: move.w %d4, %d0
-; CHECK-SAME: encoding: [0x30,0x04]
-move.w %d4, %d0
-
-; CHECK: move.w %d4, %d1
-; CHECK-SAME: encoding: [0x32,0x04]
-move.w %d4, %d1
-
-; CHECK: move.w %d4, %d2
-; CHECK-SAME: encoding: [0x34,0x04]
-move.w %d4, %d2
-
-; CHECK: move.w %d4, %d3
-; CHECK-SAME: encoding: [0x36,0x04]
-move.w %d4, %d3
-
-; CHECK: move.w %d4, %d4
-; CHECK-SAME: encoding: [0x38,0x04]
-move.w %d4, %d4
-
-; CHECK: move.w %d4, %d5
-; CHECK-SAME: encoding: [0x3a,0x04]
-move.w %d4, %d5
-
-; CHECK: move.w %d4, %d6
-; CHECK-SAME: encoding: [0x3c,0x04]
-move.w %d4, %d6
-
-; CHECK: move.w %d4, %d7
-; CHECK-SAME: encoding: [0x3e,0x04]
-move.w %d4, %d7
-
-; CHECK: move.w %d5, %d0
-; CHECK-SAME: encoding: [0x30,0x05]
-move.w %d5, %d0
-
-; CHECK: move.w %d5, %d1
-; CHECK-SAME: encoding: [0x32,0x05]
-move.w %d5, %d1
-
-; CHECK: move.w %d5, %d2
-; CHECK-SAME: encoding: [0x34,0x05]
-move.w %d5, %d2
-
-; CHECK: move.w %d5, %d3
-; CHECK-SAME: encoding: [0x36,0x05]
-move.w %d5, %d3
-
-; CHECK: move.w %d5, %d4
-; CHECK-SAME: encoding: [0x38,0x05]
-move.w %d5, %d4
-
-; CHECK: move.w %d5, %d5
-; CHECK-SAME: encoding: [0x3a,0x05]
-move.w %d5, %d5
-
-; CHECK: move.w %d5, %d6
-; CHECK-SAME: encoding: [0x3c,0x05]
-move.w %d5, %d6
-
-; CHECK: move.w %d5, %d7
-; CHECK-SAME: encoding: [0x3e,0x05]
-move.w %d5, %d7
-
-; CHECK: move.w %d6, %d0
-; CHECK-SAME: encoding: [0x30,0x06]
-move.w %d6, %d0
-
-; CHECK: move.w %d6, %d1
-; CHECK-SAME: encoding: [0x32,0x06]
-move.w %d6, %d1
-
-; CHECK: move.w %d6, %d2
-; CHECK-SAME: encoding: [0x34,0x06]
-move.w %d6, %d2
-
-; CHECK: move.w %d6, %d3
-; CHECK-SAME: encoding: [0x36,0x06]
-move.w %d6, %d3
-
-; CHECK: move.w %d6, %d4
-; CHECK-SAME: encoding: [0x38,0x06]
-move.w %d6, %d4
-
-; CHECK: move.w %d6, %d5
-; CHECK-SAME: encoding: [0x3a,0x06]
-move.w %d6, %d5
-
-; CHECK: move.w %d6, %d6
-; CHECK-SAME: encoding: [0x3c,0x06]
-move.w %d6, %d6
-
-; CHECK: move.w %d6, %d7
-; CHECK-SAME: encoding: [0x3e,0x06]
-move.w %d6, %d7
-
; CHECK: move.w %d7, %d0
; CHECK-SAME: encoding: [0x30,0x07]
move.w %d7, %d0
@@ -491,26 +71,6 @@ move.w %d7, %d0
; CHECK-SAME: encoding: [0x32,0x07]
move.w %d7, %d1
-; CHECK: move.w %d7, %d2
-; CHECK-SAME: encoding: [0x34,0x07]
-move.w %d7, %d2
-
-; CHECK: move.w %d7, %d3
-; CHECK-SAME: encoding: [0x36,0x07]
-move.w %d7, %d3
-
-; CHECK: move.w %d7, %d4
-; CHECK-SAME: encoding: [0x38,0x07]
-move.w %d7, %d4
-
-; CHECK: move.w %d7, %d5
-; CHECK-SAME: encoding: [0x3a,0x07]
-move.w %d7, %d5
-
-; CHECK: move.w %d7, %d6
-; CHECK-SAME: encoding: [0x3c,0x07]
-move.w %d7, %d6
-
; CHECK: move.w %d7, %d7
; CHECK-SAME: encoding: [0x3e,0x07]
move.w %d7, %d7
@@ -523,26 +83,6 @@ move.w %a0, %d0
; CHECK-SAME: encoding: [0x32,0x08]
move.w %a0, %d1
-; CHECK: move.w %a0, %d2
-; CHECK-SAME: encoding: [0x34,0x08]
-move.w %a0, %d2
-
-; CHECK: move.w %a0, %d3
-; CHECK-SAME: encoding: [0x36,0x08]
-move.w %a0, %d3
-
-; CHECK: move.w %a0, %d4
-; CHECK-SAME: encoding: [0x38,0x08]
-move.w %a0, %d4
-
-; CHECK: move.w %a0, %d5
-; CHECK-SAME: encoding: [0x3a,0x08]
-move.w %a0, %d5
-
-; CHECK: move.w %a0, %d6
-; CHECK-SAME: encoding: [0x3c,0x08]
-move.w %a0, %d6
-
; CHECK: move.w %a0, %d7
; CHECK-SAME: encoding: [0x3e,0x08]
move.w %a0, %d7
@@ -555,190 +95,10 @@ move.w %a1, %d0
; CHECK-SAME: encoding: [0x32,0x09]
move.w %a1, %d1
-; CHECK: move.w %a1, %d2
-; CHECK-SAME: encoding: [0x34,0x09]
-move.w %a1, %d2
-
-; CHECK: move.w %a1, %d3
-; CHECK-SAME: encoding: [0x36,0x09]
-move.w %a1, %d3
-
-; CHECK: move.w %a1, %d4
-; CHECK-SAME: encoding: [0x38,0x09]
-move.w %a1, %d4
-
-; CHECK: move.w %a1, %d5
-; CHECK-SAME: encoding: [0x3a,0x09]
-move.w %a1, %d5
-
-; CHECK: move.w %a1, %d6
-; CHECK-SAME: encoding: [0x3c,0x09]
-move.w %a1, %d6
-
; CHECK: move.w %a1, %d7
; CHECK-SAME: encoding: [0x3e,0x09]
move.w %a1, %d7
-; CHECK: move.w %a2, %d0
-; CHECK-SAME: encoding: [0x30,0x0a]
-move.w %a2, %d0
-
-; CHECK: move.w %a2, %d1
-; CHECK-SAME: encoding: [0x32,0x0a]
-move.w %a2, %d1
-
-; CHECK: move.w %a2, %d2
-; CHECK-SAME: encoding: [0x34,0x0a]
-move.w %a2, %d2
-
-; CHECK: move.w %a2, %d3
-; CHECK-SAME: encoding: [0x36,0x0a]
-move.w %a2, %d3
-
-; CHECK: move.w %a2, %d4
-; CHECK-SAME: encoding: [0x38,0x0a]
-move.w %a2, %d4
-
-; CHECK: move.w %a2, %d5
-; CHECK-SAME: encoding: [0x3a,0x0a]
-move.w %a2, %d5
-
-; CHECK: move.w %a2, %d6
-; CHECK-SAME: encoding: [0x3c,0x0a]
-move.w %a2, %d6
-
-; CHECK: move.w %a2, %d7
-; CHECK-SAME: encoding: [0x3e,0x0a]
-move.w %a2, %d7
-
-; CHECK: move.w %a3, %d0
-; CHECK-SAME: encoding: [0x30,0x0b]
-move.w %a3, %d0
-
-; CHECK: move.w %a3, %d1
-; CHECK-SAME: encoding: [0x32,0x0b]
-move.w %a3, %d1
-
-; CHECK: move.w %a3, %d2
-; CHECK-SAME: encoding: [0x34,0x0b]
-move.w %a3, %d2
-
-; CHECK: move.w %a3, %d3
-; CHECK-SAME: encoding: [0x36,0x0b]
-move.w %a3, %d3
-
-; CHECK: move.w %a3, %d4
-; CHECK-SAME: encoding: [0x38,0x0b]
-move.w %a3, %d4
-
-; CHECK: move.w %a3, %d5
-; CHECK-SAME: encoding: [0x3a,0x0b]
-move.w %a3, %d5
-
-; CHECK: move.w %a3, %d6
-; CHECK-SAME: encoding: [0x3c,0x0b]
-move.w %a3, %d6
-
-; CHECK: move.w %a3, %d7
-; CHECK-SAME: encoding: [0x3e,0x0b]
-move.w %a3, %d7
-
-; CHECK: move.w %a4, %d0
-; CHECK-SAME: encoding: [0x30,0x0c]
-move.w %a4, %d0
-
-; CHECK: move.w %a4, %d1
-; CHECK-SAME: encoding: [0x32,0x0c]
-move.w %a4, %d1
-
-; CHECK: move.w %a4, %d2
-; CHECK-SAME: encoding: [0x34,0x0c]
-move.w %a4, %d2
-
-; CHECK: move.w %a4, %d3
-; CHECK-SAME: encoding: [0x36,0x0c]
-move.w %a4, %d3
-
-; CHECK: move.w %a4, %d4
-; CHECK-SAME: encoding: [0x38,0x0c]
-move.w %a4, %d4
-
-; CHECK: move.w %a4, %d5
-; CHECK-SAME: encoding: [0x3a,0x0c]
-move.w %a4, %d5
-
-; CHECK: move.w %a4, %d6
-; CHECK-SAME: encoding: [0x3c,0x0c]
-move.w %a4, %d6
-
-; CHECK: move.w %a4, %d7
-; CHECK-SAME: encoding: [0x3e,0x0c]
-move.w %a4, %d7
-
-; CHECK: move.w %a5, %d0
-; CHECK-SAME: encoding: [0x30,0x0d]
-move.w %a5, %d0
-
-; CHECK: move.w %a5, %d1
-; CHECK-SAME: encoding: [0x32,0x0d]
-move.w %a5, %d1
-
-; CHECK: move.w %a5, %d2
-; CHECK-SAME: encoding: [0x34,0x0d]
-move.w %a5, %d2
-
-; CHECK: move.w %a5, %d3
-; CHECK-SAME: encoding: [0x36,0x0d]
-move.w %a5, %d3
-
-; CHECK: move.w %a5, %d4
-; CHECK-SAME: encoding: [0x38,0x0d]
-move.w %a5, %d4
-
-; CHECK: move.w %a5, %d5
-; CHECK-SAME: encoding: [0x3a,0x0d]
-move.w %a5, %d5
-
-; CHECK: move.w %a5, %d6
-; CHECK-SAME: encoding: [0x3c,0x0d]
-move.w %a5, %d6
-
-; CHECK: move.w %a5, %d7
-; CHECK-SAME: encoding: [0x3e,0x0d]
-move.w %a5, %d7
-
-; CHECK: move.w %a6, %d0
-; CHECK-SAME: encoding: [0x30,0x0e]
-move.w %a6, %d0
-
-; CHECK: move.w %a6, %d1
-; CHECK-SAME: encoding: [0x32,0x0e]
-move.w %a6, %d1
-
-; CHECK: move.w %a6, %d2
-; CHECK-SAME: encoding: [0x34,0x0e]
-move.w %a6, %d2
-
-; CHECK: move.w %a6, %d3
-; CHECK-SAME: encoding: [0x36,0x0e]
-move.w %a6, %d3
-
-; CHECK: move.w %a6, %d4
-; CHECK-SAME: encoding: [0x38,0x0e]
-move.w %a6, %d4
-
-; CHECK: move.w %a6, %d5
-; CHECK-SAME: encoding: [0x3a,0x0e]
-move.w %a6, %d5
-
-; CHECK: move.w %a6, %d6
-; CHECK-SAME: encoding: [0x3c,0x0e]
-move.w %a6, %d6
-
-; CHECK: move.w %a6, %d7
-; CHECK-SAME: encoding: [0x3e,0x0e]
-move.w %a6, %d7
-
; CHECK: move.w %sp, %d0
; CHECK-SAME: encoding: [0x30,0x0f]
move.w %sp, %d0
@@ -747,26 +107,6 @@ move.w %sp, %d0
; CHECK-SAME: encoding: [0x32,0x0f]
move.w %sp, %d1
-; CHECK: move.w %sp, %d2
-; CHECK-SAME: encoding: [0x34,0x0f]
-move.w %sp, %d2
-
-; CHECK: move.w %sp, %d3
-; CHECK-SAME: encoding: [0x36,0x0f]
-move.w %sp, %d3
-
-; CHECK: move.w %sp, %d4
-; CHECK-SAME: encoding: [0x38,0x0f]
-move.w %sp, %d4
-
-; CHECK: move.w %sp, %d5
-; CHECK-SAME: encoding: [0x3a,0x0f]
-move.w %sp, %d5
-
-; CHECK: move.w %sp, %d6
-; CHECK-SAME: encoding: [0x3c,0x0f]
-move.w %sp, %d6
-
; CHECK: move.w %sp, %d7
; CHECK-SAME: encoding: [0x3e,0x0f]
move.w %sp, %d7
@@ -779,26 +119,6 @@ move.l %d0, %d0
; CHECK-SAME: encoding: [0x22,0x00]
move.l %d0, %d1
-; CHECK: move.l %d0, %d2
-; CHECK-SAME: encoding: [0x24,0x00]
-move.l %d0, %d2
-
-; CHECK: move.l %d0, %d3
-; CHECK-SAME: encoding: [0x26,0x00]
-move.l %d0, %d3
-
-; CHECK: move.l %d0, %d4
-; CHECK-SAME: encoding: [0x28,0x00]
-move.l %d0, %d4
-
-; CHECK: move.l %d0, %d5
-; CHECK-SAME: encoding: [0x2a,0x00]
-move.l %d0, %d5
-
-; CHECK: move.l %d0, %d6
-; CHECK-SAME: encoding: [0x2c,0x00]
-move.l %d0, %d6
-
; CHECK: move.l %d0, %d7
; CHECK-SAME: encoding: [0x2e,0x00]
move.l %d0, %d7
@@ -811,190 +131,10 @@ move.l %d1, %d0
; CHECK-SAME: encoding: [0x22,0x01]
move.l %d1, %d1
-; CHECK: move.l %d1, %d2
-; CHECK-SAME: encoding: [0x24,0x01]
-move.l %d1, %d2
-
-; CHECK: move.l %d1, %d3
-; CHECK-SAME: encoding: [0x26,0x01]
-move.l %d1, %d3
-
-; CHECK: move.l %d1, %d4
-; CHECK-SAME: encoding: [0x28,0x01]
-move.l %d1, %d4
-
-; CHECK: move.l %d1, %d5
-; CHECK-SAME: encoding: [0x2a,0x01]
-move.l %d1, %d5
-
-; CHECK: move.l %d1, %d6
-; CHECK-SAME: encoding: [0x2c,0x01]
-move.l %d1, %d6
-
; CHECK: move.l %d1, %d7
; CHECK-SAME: encoding: [0x2e,0x01]
move.l %d1, %d7
-; CHECK: move.l %d2, %d0
-; CHECK-SAME: encoding: [0x20,0x02]
-move.l %d2, %d0
-
-; CHECK: move.l %d2, %d1
-; CHECK-SAME: encoding: [0x22,0x02]
-move.l %d2, %d1
-
-; CHECK: move.l %d2, %d2
-; CHECK-SAME: encoding: [0x24,0x02]
-move.l %d2, %d2
-
-; CHECK: move.l %d2, %d3
-; CHECK-SAME: encoding: [0x26,0x02]
-move.l %d2, %d3
-
-; CHECK: move.l %d2, %d4
-; CHECK-SAME: encoding: [0x28,0x02]
-move.l %d2, %d4
-
-; CHECK: move.l %d2, %d5
-; CHECK-SAME: encoding: [0x2a,0x02]
-move.l %d2, %d5
-
-; CHECK: move.l %d2, %d6
-; CHECK-SAME: encoding: [0x2c,0x02]
-move.l %d2, %d6
-
-; CHECK: move.l %d2, %d7
-; CHECK-SAME: encoding: [0x2e,0x02]
-move.l %d2, %d7
-
-; CHECK: move.l %d3, %d0
-; CHECK-SAME: encoding: [0x20,0x03]
-move.l %d3, %d0
-
-; CHECK: move.l %d3, %d1
-; CHECK-SAME: encoding: [0x22,0x03]
-move.l %d3, %d1
-
-; CHECK: move.l %d3, %d2
-; CHECK-SAME: encoding: [0x24,0x03]
-move.l %d3, %d2
-
-; CHECK: move.l %d3, %d3
-; CHECK-SAME: encoding: [0x26,0x03]
-move.l %d3, %d3
-
-; CHECK: move.l %d3, %d4
-; CHECK-SAME: encoding: [0x28,0x03]
-move.l %d3, %d4
-
-; CHECK: move.l %d3, %d5
-; CHECK-SAME: encoding: [0x2a,0x03]
-move.l %d3, %d5
-
-; CHECK: move.l %d3, %d6
-; CHECK-SAME: encoding: [0x2c,0x03]
-move.l %d3, %d6
-
-; CHECK: move.l %d3, %d7
-; CHECK-SAME: encoding: [0x2e,0x03]
-move.l %d3, %d7
-
-; CHECK: move.l %d4, %d0
-; CHECK-SAME: encoding: [0x20,0x04]
-move.l %d4, %d0
-
-; CHECK: move.l %d4, %d1
-; CHECK-SAME: encoding: [0x22,0x04]
-move.l %d4, %d1
-
-; CHECK: move.l %d4, %d2
-; CHECK-SAME: encoding: [0x24,0x04]
-move.l %d4, %d2
-
-; CHECK: move.l %d4, %d3
-; CHECK-SAME: encoding: [0x26,0x04]
-move.l %d4, %d3
-
-; CHECK: move.l %d4, %d4
-; CHECK-SAME: encoding: [0x28,0x04]
-move.l %d4, %d4
-
-; CHECK: move.l %d4, %d5
-; CHECK-SAME: encoding: [0x2a,0x04]
-move.l %d4, %d5
-
-; CHECK: move.l %d4, %d6
-; CHECK-SAME: encoding: [0x2c,0x04]
-move.l %d4, %d6
-
-; CHECK: move.l %d4, %d7
-; CHECK-SAME: encoding: [0x2e,0x04]
-move.l %d4, %d7
-
-; CHECK: move.l %d5, %d0
-; CHECK-SAME: encoding: [0x20,0x05]
-move.l %d5, %d0
-
-; CHECK: move.l %d5, %d1
-; CHECK-SAME: encoding: [0x22,0x05]
-move.l %d5, %d1
-
-; CHECK: move.l %d5, %d2
-; CHECK-SAME: encoding: [0x24,0x05]
-move.l %d5, %d2
-
-; CHECK: move.l %d5, %d3
-; CHECK-SAME: encoding: [0x26,0x05]
-move.l %d5, %d3
-
-; CHECK: move.l %d5, %d4
-; CHECK-SAME: encoding: [0x28,0x05]
-move.l %d5, %d4
-
-; CHECK: move.l %d5, %d5
-; CHECK-SAME: encoding: [0x2a,0x05]
-move.l %d5, %d5
-
-; CHECK: move.l %d5, %d6
-; CHECK-SAME: encoding: [0x2c,0x05]
-move.l %d5, %d6
-
-; CHECK: move.l %d5, %d7
-; CHECK-SAME: encoding: [0x2e,0x05]
-move.l %d5, %d7
-
-; CHECK: move.l %d6, %d0
-; CHECK-SAME: encoding: [0x20,0x06]
-move.l %d6, %d0
-
-; CHECK: move.l %d6, %d1
-; CHECK-SAME: encoding: [0x22,0x06]
-move.l %d6, %d1
-
-; CHECK: move.l %d6, %d2
-; CHECK-SAME: encoding: [0x24,0x06]
-move.l %d6, %d2
-
-; CHECK: move.l %d6, %d3
-; CHECK-SAME: encoding: [0x26,0x06]
-move.l %d6, %d3
-
-; CHECK: move.l %d6, %d4
-; CHECK-SAME: encoding: [0x28,0x06]
-move.l %d6, %d4
-
-; CHECK: move.l %d6, %d5
-; CHECK-SAME: encoding: [0x2a,0x06]
-move.l %d6, %d5
-
-; CHECK: move.l %d6, %d6
-; CHECK-SAME: encoding: [0x2c,0x06]
-move.l %d6, %d6
-
-; CHECK: move.l %d6, %d7
-; CHECK-SAME: encoding: [0x2e,0x06]
-move.l %d6, %d7
-
; CHECK: move.l %d7, %d0
; CHECK-SAME: encoding: [0x20,0x07]
move.l %d7, %d0
@@ -1003,26 +143,6 @@ move.l %d7, %d0
; CHECK-SAME: encoding: [0x22,0x07]
move.l %d7, %d1
-; CHECK: move.l %d7, %d2
-; CHECK-SAME: encoding: [0x24,0x07]
-move.l %d7, %d2
-
-; CHECK: move.l %d7, %d3
-; CHECK-SAME: encoding: [0x26,0x07]
-move.l %d7, %d3
-
-; CHECK: move.l %d7, %d4
-; CHECK-SAME: encoding: [0x28,0x07]
-move.l %d7, %d4
-
-; CHECK: move.l %d7, %d5
-; CHECK-SAME: encoding: [0x2a,0x07]
-move.l %d7, %d5
-
-; CHECK: move.l %d7, %d6
-; CHECK-SAME: encoding: [0x2c,0x07]
-move.l %d7, %d6
-
; CHECK: move.l %d7, %d7
; CHECK-SAME: encoding: [0x2e,0x07]
move.l %d7, %d7
@@ -1035,26 +155,6 @@ move.l %a0, %d0
; CHECK-SAME: encoding: [0x22,0x08]
move.l %a0, %d1
-; CHECK: move.l %a0, %d2
-; CHECK-SAME: encoding: [0x24,0x08]
-move.l %a0, %d2
-
-; CHECK: move.l %a0, %d3
-; CHECK-SAME: encoding: [0x26,0x08]
-move.l %a0, %d3
-
-; CHECK: move.l %a0, %d4
-; CHECK-SAME: encoding: [0x28,0x08]
-move.l %a0, %d4
-
-; CHECK: move.l %a0, %d5
-; CHECK-SAME: encoding: [0x2a,0x08]
-move.l %a0, %d5
-
-; CHECK: move.l %a0, %d6
-; CHECK-SAME: encoding: [0x2c,0x08]
-move.l %a0, %d6
-
; CHECK: move.l %a0, %d7
; CHECK-SAME: encoding: [0x2e,0x08]
move.l %a0, %d7
@@ -1067,190 +167,10 @@ move.l %a1, %d0
; CHECK-SAME: encoding: [0x22,0x09]
move.l %a1, %d1
-; CHECK: move.l %a1, %d2
-; CHECK-SAME: encoding: [0x24,0x09]
-move.l %a1, %d2
-
-; CHECK: move.l %a1, %d3
-; CHECK-SAME: encoding: [0x26,0x09]
-move.l %a1, %d3
-
-; CHECK: move.l %a1, %d4
-; CHECK-SAME: encoding: [0x28,0x09]
-move.l %a1, %d4
-
-; CHECK: move.l %a1, %d5
-; CHECK-SAME: encoding: [0x2a,0x09]
-move.l %a1, %d5
-
-; CHECK: move.l %a1, %d6
-; CHECK-SAME: encoding: [0x2c,0x09]
-move.l %a1, %d6
-
; CHECK: move.l %a1, %d7
; CHECK-SAME: encoding: [0x2e,0x09]
move.l %a1, %d7
-; CHECK: move.l %a2, %d0
-; CHECK-SAME: encoding: [0x20,0x0a]
-move.l %a2, %d0
-
-; CHECK: move.l %a2, %d1
-; CHECK-SAME: encoding: [0x22,0x0a]
-move.l %a2, %d1
-
-; CHECK: move.l %a2, %d2
-; CHECK-SAME: encoding: [0x24,0x0a]
-move.l %a2, %d2
-
-; CHECK: move.l %a2, %d3
-; CHECK-SAME: encoding: [0x26,0x0a]
-move.l %a2, %d3
-
-; CHECK: move.l %a2, %d4
-; CHECK-SAME: encoding: [0x28,0x0a]
-move.l %a2, %d4
-
-; CHECK: move.l %a2, %d5
-; CHECK-SAME: encoding: [0x2a,0x0a]
-move.l %a2, %d5
-
-; CHECK: move.l %a2, %d6
-; CHECK-SAME: encoding: [0x2c,0x0a]
-move.l %a2, %d6
-
-; CHECK: move.l %a2, %d7
-; CHECK-SAME: encoding: [0x2e,0x0a]
-move.l %a2, %d7
-
-; CHECK: move.l %a3, %d0
-; CHECK-SAME: encoding: [0x20,0x0b]
-move.l %a3, %d0
-
-; CHECK: move.l %a3, %d1
-; CHECK-SAME: encoding: [0x22,0x0b]
-move.l %a3, %d1
-
-; CHECK: move.l %a3, %d2
-; CHECK-SAME: encoding: [0x24,0x0b]
-move.l %a3, %d2
-
-; CHECK: move.l %a3, %d3
-; CHECK-SAME: encoding: [0x26,0x0b]
-move.l %a3, %d3
-
-; CHECK: move.l %a3, %d4
-; CHECK-SAME: encoding: [0x28,0x0b]
-move.l %a3, %d4
-
-; CHECK: move.l %a3, %d5
-; CHECK-SAME: encoding: [0x2a,0x0b]
-move.l %a3, %d5
-
-; CHECK: move.l %a3, %d6
-; CHECK-SAME: encoding: [0x2c,0x0b]
-move.l %a3, %d6
-
-; CHECK: move.l %a3, %d7
-; CHECK-SAME: encoding: [0x2e,0x0b]
-move.l %a3, %d7
-
-; CHECK: move.l %a4, %d0
-; CHECK-SAME: encoding: [0x20,0x0c]
-move.l %a4, %d0
-
-; CHECK: move.l %a4, %d1
-; CHECK-SAME: encoding: [0x22,0x0c]
-move.l %a4, %d1
-
-; CHECK: move.l %a4, %d2
-; CHECK-SAME: encoding: [0x24,0x0c]
-move.l %a4, %d2
-
-; CHECK: move.l %a4, %d3
-; CHECK-SAME: encoding: [0x26,0x0c]
-move.l %a4, %d3
-
-; CHECK: move.l %a4, %d4
-; CHECK-SAME: encoding: [0x28,0x0c]
-move.l %a4, %d4
-
-; CHECK: move.l %a4, %d5
-; CHECK-SAME: encoding: [0x2a,0x0c]
-move.l %a4, %d5
-
-; CHECK: move.l %a4, %d6
-; CHECK-SAME: encoding: [0x2c,0x0c]
-move.l %a4, %d6
-
-; CHECK: move.l %a4, %d7
-; CHECK-SAME: encoding: [0x2e,0x0c]
-move.l %a4, %d7
-
-; CHECK: move.l %a5, %d0
-; CHECK-SAME: encoding: [0x20,0x0d]
-move.l %a5, %d0
-
-; CHECK: move.l %a5, %d1
-; CHECK-SAME: encoding: [0x22,0x0d]
-move.l %a5, %d1
-
-; CHECK: move.l %a5, %d2
-; CHECK-SAME: encoding: [0x24,0x0d]
-move.l %a5, %d2
-
-; CHECK: move.l %a5, %d3
-; CHECK-SAME: encoding: [0x26,0x0d]
-move.l %a5, %d3
-
-; CHECK: move.l %a5, %d4
-; CHECK-SAME: encoding: [0x28,0x0d]
-move.l %a5, %d4
-
-; CHECK: move.l %a5, %d5
-; CHECK-SAME: encoding: [0x2a,0x0d]
-move.l %a5, %d5
-
-; CHECK: move.l %a5, %d6
-; CHECK-SAME: encoding: [0x2c,0x0d]
-move.l %a5, %d6
-
-; CHECK: move.l %a5, %d7
-; CHECK-SAME: encoding: [0x2e,0x0d]
-move.l %a5, %d7
-
-; CHECK: move.l %a6, %d0
-; CHECK-SAME: encoding: [0x20,0x0e]
-move.l %a6, %d0
-
-; CHECK: move.l %a6, %d1
-; CHECK-SAME: encoding: [0x22,0x0e]
-move.l %a6, %d1
-
-; CHECK: move.l %a6, %d2
-; CHECK-SAME: encoding: [0x24,0x0e]
-move.l %a6, %d2
-
-; CHECK: move.l %a6, %d3
-; CHECK-SAME: encoding: [0x26,0x0e]
-move.l %a6, %d3
-
-; CHECK: move.l %a6, %d4
-; CHECK-SAME: encoding: [0x28,0x0e]
-move.l %a6, %d4
-
-; CHECK: move.l %a6, %d5
-; CHECK-SAME: encoding: [0x2a,0x0e]
-move.l %a6, %d5
-
-; CHECK: move.l %a6, %d6
-; CHECK-SAME: encoding: [0x2c,0x0e]
-move.l %a6, %d6
-
-; CHECK: move.l %a6, %d7
-; CHECK-SAME: encoding: [0x2e,0x0e]
-move.l %a6, %d7
-
; CHECK: move.l %sp, %d0
; CHECK-SAME: encoding: [0x20,0x0f]
move.l %sp, %d0
@@ -1259,26 +179,6 @@ move.l %sp, %d0
; CHECK-SAME: encoding: [0x22,0x0f]
move.l %sp, %d1
-; CHECK: move.l %sp, %d2
-; CHECK-SAME: encoding: [0x24,0x0f]
-move.l %sp, %d2
-
-; CHECK: move.l %sp, %d3
-; CHECK-SAME: encoding: [0x26,0x0f]
-move.l %sp, %d3
-
-; CHECK: move.l %sp, %d4
-; CHECK-SAME: encoding: [0x28,0x0f]
-move.l %sp, %d4
-
-; CHECK: move.l %sp, %d5
-; CHECK-SAME: encoding: [0x2a,0x0f]
-move.l %sp, %d5
-
-; CHECK: move.l %sp, %d6
-; CHECK-SAME: encoding: [0x2c,0x0f]
-move.l %sp, %d6
-
; CHECK: move.l %sp, %d7
; CHECK-SAME: encoding: [0x2e,0x0f]
move.l %sp, %d7
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index d113adf0d4c96..103396fabacc0 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -111,7 +111,11 @@ class DataRegisterDirect(EffectiveAddressingMode):
registerNumber: int
def permutations() -> Generator["DataRegisterDirect", None, None]:
- for registerNumber in range(8):
+ # d0, d1 and d7 are considered representative permutations, in order to test:
+ # - all bits 0
+ # - all bits 1
+ # - the bit ordering
+ for registerNumber in [0, 1, 7]:
yield DataRegisterDirect(registerNumber)
def asm(self) -> str:
@@ -133,7 +137,11 @@ class AddressRegisterDirect(EffectiveAddressingMode):
registerNumber: int
def permutations() -> Generator["AddressRegisterDirect", None, None]:
- for registerNumber in range(8):
+ # a0, a1 and a7 (sp) are considered representative permutations, in order to test:
+ # - all bits 0
+ # - all bits 1
+ # - the bit ordering
+ for registerNumber in [0, 1, 7]:
yield AddressRegisterDirect(registerNumber)
def asm(self) -> str:
>From 15c030f317eeadcac53c26abefa5f251d59c136e Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Sun, 3 May 2026 14:56:56 +0100
Subject: [PATCH 7/9] Split register types from modes
To facilitate adding new modes
---
llvm/test/MC/M68k/generate_tests.py | 85 ++++++++++++++++++++++-------
1 file changed, 64 insertions(+), 21 deletions(-)
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index 103396fabacc0..13a1dd28e06ce 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -2,6 +2,7 @@
from abc import ABC, abstractmethod
from dataclasses import dataclass
+from enum import IntEnum
from typing import Generator
@@ -78,6 +79,59 @@ def sizeField() -> int:
return 0b10
+# Data registers
+
+
+class DataRegister(IntEnum):
+ D0 = 0
+ D1 = 1
+ D2 = 2
+ D3 = 3
+ D4 = 4
+ D5 = 5
+ D6 = 6
+ D7 = 7
+
+ def permutations() -> Generator["DataRegister", None, None]:
+ # d0, d1 and d7 are considered representative permutations, in order to test:
+ # - all bits 0
+ # - all bits 1
+ # - the bit ordering
+ for register in [DataRegister.D0, DataRegister.D1, DataRegister.D7]:
+ yield register
+
+ def asm(self) -> str:
+ return f"%d{self}"
+
+
+# Address registers
+
+
+class AddressRegister(IntEnum):
+ A0 = 0
+ A1 = 1
+ A2 = 2
+ A3 = 3
+ A4 = 4
+ A5 = 5
+ A6 = 6
+ SP = 7
+
+ def permutations() -> Generator["AddressRegister", None, None]:
+ # a0, a1 and a7 (sp) are considered representative permutations, in order to test:
+ # - all bits 0
+ # - all bits 1
+ # - the bit ordering
+ for register in [AddressRegister.A0, AddressRegister.A1, AddressRegister.SP]:
+ yield register
+
+ def asm(self) -> str:
+ if self is AddressRegister.SP:
+ return "%sp"
+ else:
+ return f"%a{self}"
+
+
# Effective addressing modes
# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf3c
@@ -108,24 +162,20 @@ def registerField(self) -> int:
class DataRegisterDirect(EffectiveAddressingMode):
"""Represents the contents of a particular data register."""
- registerNumber: int
+ register: DataRegister
def permutations() -> Generator["DataRegisterDirect", None, None]:
- # d0, d1 and d7 are considered representative permutations, in order to test:
- # - all bits 0
- # - all bits 1
- # - the bit ordering
- for registerNumber in [0, 1, 7]:
- yield DataRegisterDirect(registerNumber)
+ for register in DataRegister.permutations():
+ yield DataRegisterDirect(register)
def asm(self) -> str:
- return f"%d{self.registerNumber}"
+ return self.register.asm()
def modeField(self) -> int:
return 0b000
def registerField(self) -> int:
- return self.registerNumber
+ return self.register
# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf2e
@@ -134,27 +184,20 @@ def registerField(self) -> int:
class AddressRegisterDirect(EffectiveAddressingMode):
"""Represents the contents of a particular address register."""
- registerNumber: int
+ register: AddressRegister
def permutations() -> Generator["AddressRegisterDirect", None, None]:
- # a0, a1 and a7 (sp) are considered representative permutations, in order to test:
- # - all bits 0
- # - all bits 1
- # - the bit ordering
- for registerNumber in [0, 1, 7]:
- yield AddressRegisterDirect(registerNumber)
+ for register in AddressRegister.permutations():
+ yield AddressRegisterDirect(register)
def asm(self) -> str:
- if self.registerNumber == 7:
- return "%sp"
- else:
- return f"%a{self.registerNumber}"
+ return self.register.asm()
def modeField(self) -> int:
return 0b001
def registerField(self) -> int:
- return self.registerNumber
+ return self.register
# Instructions
>From 39427c50b5fc14b865a34135ba26cf2c7ad48969 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Wed, 6 May 2026 23:46:33 +0100
Subject: [PATCH 8/9] Add Address Register Indirect addressing mode
---
llvm/test/MC/M68k/MOVE.s | 396 ++++++++++++++++++++++++++++
llvm/test/MC/M68k/generate_tests.py | 34 ++-
2 files changed, 426 insertions(+), 4 deletions(-)
diff --git a/llvm/test/MC/M68k/MOVE.s b/llvm/test/MC/M68k/MOVE.s
index 2fa35d531f02e..82dc6141c3863 100644
--- a/llvm/test/MC/M68k/MOVE.s
+++ b/llvm/test/MC/M68k/MOVE.s
@@ -15,6 +15,18 @@ move.b %d0, %d1
; CHECK-SAME: encoding: [0x1e,0x00]
move.b %d0, %d7
+; CHECK: move.b %d0, (%a0)
+; CHECK-SAME: encoding: [0x10,0x80]
+move.b %d0, (%a0)
+
+; CHECK: move.b %d0, (%a1)
+; CHECK-SAME: encoding: [0x12,0x80]
+move.b %d0, (%a1)
+
+; CHECK: move.b %d0, (%sp)
+; CHECK-SAME: encoding: [0x1e,0x80]
+move.b %d0, (%sp)
+
; CHECK: move.b %d1, %d0
; CHECK-SAME: encoding: [0x10,0x01]
move.b %d1, %d0
@@ -27,6 +39,18 @@ move.b %d1, %d1
; CHECK-SAME: encoding: [0x1e,0x01]
move.b %d1, %d7
+; CHECK: move.b %d1, (%a0)
+; CHECK-SAME: encoding: [0x10,0x81]
+move.b %d1, (%a0)
+
+; CHECK: move.b %d1, (%a1)
+; CHECK-SAME: encoding: [0x12,0x81]
+move.b %d1, (%a1)
+
+; CHECK: move.b %d1, (%sp)
+; CHECK-SAME: encoding: [0x1e,0x81]
+move.b %d1, (%sp)
+
; CHECK: move.b %d7, %d0
; CHECK-SAME: encoding: [0x10,0x07]
move.b %d7, %d0
@@ -39,6 +63,90 @@ move.b %d7, %d1
; CHECK-SAME: encoding: [0x1e,0x07]
move.b %d7, %d7
+; CHECK: move.b %d7, (%a0)
+; CHECK-SAME: encoding: [0x10,0x87]
+move.b %d7, (%a0)
+
+; CHECK: move.b %d7, (%a1)
+; CHECK-SAME: encoding: [0x12,0x87]
+move.b %d7, (%a1)
+
+; CHECK: move.b %d7, (%sp)
+; CHECK-SAME: encoding: [0x1e,0x87]
+move.b %d7, (%sp)
+
+; CHECK: move.b (%a0), %d0
+; CHECK-SAME: encoding: [0x10,0x10]
+move.b (%a0), %d0
+
+; CHECK: move.b (%a0), %d1
+; CHECK-SAME: encoding: [0x12,0x10]
+move.b (%a0), %d1
+
+; CHECK: move.b (%a0), %d7
+; CHECK-SAME: encoding: [0x1e,0x10]
+move.b (%a0), %d7
+
+; CHECK: move.b (%a0), (%a0)
+; CHECK-SAME: encoding: [0x10,0x90]
+move.b (%a0), (%a0)
+
+; CHECK: move.b (%a0), (%a1)
+; CHECK-SAME: encoding: [0x12,0x90]
+move.b (%a0), (%a1)
+
+; CHECK: move.b (%a0), (%sp)
+; CHECK-SAME: encoding: [0x1e,0x90]
+move.b (%a0), (%sp)
+
+; CHECK: move.b (%a1), %d0
+; CHECK-SAME: encoding: [0x10,0x11]
+move.b (%a1), %d0
+
+; CHECK: move.b (%a1), %d1
+; CHECK-SAME: encoding: [0x12,0x11]
+move.b (%a1), %d1
+
+; CHECK: move.b (%a1), %d7
+; CHECK-SAME: encoding: [0x1e,0x11]
+move.b (%a1), %d7
+
+; CHECK: move.b (%a1), (%a0)
+; CHECK-SAME: encoding: [0x10,0x91]
+move.b (%a1), (%a0)
+
+; CHECK: move.b (%a1), (%a1)
+; CHECK-SAME: encoding: [0x12,0x91]
+move.b (%a1), (%a1)
+
+; CHECK: move.b (%a1), (%sp)
+; CHECK-SAME: encoding: [0x1e,0x91]
+move.b (%a1), (%sp)
+
+; CHECK: move.b (%sp), %d0
+; CHECK-SAME: encoding: [0x10,0x17]
+move.b (%sp), %d0
+
+; CHECK: move.b (%sp), %d1
+; CHECK-SAME: encoding: [0x12,0x17]
+move.b (%sp), %d1
+
+; CHECK: move.b (%sp), %d7
+; CHECK-SAME: encoding: [0x1e,0x17]
+move.b (%sp), %d7
+
+; CHECK: move.b (%sp), (%a0)
+; CHECK-SAME: encoding: [0x10,0x97]
+move.b (%sp), (%a0)
+
+; CHECK: move.b (%sp), (%a1)
+; CHECK-SAME: encoding: [0x12,0x97]
+move.b (%sp), (%a1)
+
+; CHECK: move.b (%sp), (%sp)
+; CHECK-SAME: encoding: [0x1e,0x97]
+move.b (%sp), (%sp)
+
; CHECK: move.w %d0, %d0
; CHECK-SAME: encoding: [0x30,0x00]
move.w %d0, %d0
@@ -51,6 +159,18 @@ move.w %d0, %d1
; CHECK-SAME: encoding: [0x3e,0x00]
move.w %d0, %d7
+; CHECK: move.w %d0, (%a0)
+; CHECK-SAME: encoding: [0x30,0x80]
+move.w %d0, (%a0)
+
+; CHECK: move.w %d0, (%a1)
+; CHECK-SAME: encoding: [0x32,0x80]
+move.w %d0, (%a1)
+
+; CHECK: move.w %d0, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x80]
+move.w %d0, (%sp)
+
; CHECK: move.w %d1, %d0
; CHECK-SAME: encoding: [0x30,0x01]
move.w %d1, %d0
@@ -63,6 +183,18 @@ move.w %d1, %d1
; CHECK-SAME: encoding: [0x3e,0x01]
move.w %d1, %d7
+; CHECK: move.w %d1, (%a0)
+; CHECK-SAME: encoding: [0x30,0x81]
+move.w %d1, (%a0)
+
+; CHECK: move.w %d1, (%a1)
+; CHECK-SAME: encoding: [0x32,0x81]
+move.w %d1, (%a1)
+
+; CHECK: move.w %d1, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x81]
+move.w %d1, (%sp)
+
; CHECK: move.w %d7, %d0
; CHECK-SAME: encoding: [0x30,0x07]
move.w %d7, %d0
@@ -75,6 +207,18 @@ move.w %d7, %d1
; CHECK-SAME: encoding: [0x3e,0x07]
move.w %d7, %d7
+; CHECK: move.w %d7, (%a0)
+; CHECK-SAME: encoding: [0x30,0x87]
+move.w %d7, (%a0)
+
+; CHECK: move.w %d7, (%a1)
+; CHECK-SAME: encoding: [0x32,0x87]
+move.w %d7, (%a1)
+
+; CHECK: move.w %d7, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x87]
+move.w %d7, (%sp)
+
; CHECK: move.w %a0, %d0
; CHECK-SAME: encoding: [0x30,0x08]
move.w %a0, %d0
@@ -87,6 +231,18 @@ move.w %a0, %d1
; CHECK-SAME: encoding: [0x3e,0x08]
move.w %a0, %d7
+; CHECK: move.w %a0, (%a0)
+; CHECK-SAME: encoding: [0x30,0x88]
+move.w %a0, (%a0)
+
+; CHECK: move.w %a0, (%a1)
+; CHECK-SAME: encoding: [0x32,0x88]
+move.w %a0, (%a1)
+
+; CHECK: move.w %a0, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x88]
+move.w %a0, (%sp)
+
; CHECK: move.w %a1, %d0
; CHECK-SAME: encoding: [0x30,0x09]
move.w %a1, %d0
@@ -99,6 +255,18 @@ move.w %a1, %d1
; CHECK-SAME: encoding: [0x3e,0x09]
move.w %a1, %d7
+; CHECK: move.w %a1, (%a0)
+; CHECK-SAME: encoding: [0x30,0x89]
+move.w %a1, (%a0)
+
+; CHECK: move.w %a1, (%a1)
+; CHECK-SAME: encoding: [0x32,0x89]
+move.w %a1, (%a1)
+
+; CHECK: move.w %a1, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x89]
+move.w %a1, (%sp)
+
; CHECK: move.w %sp, %d0
; CHECK-SAME: encoding: [0x30,0x0f]
move.w %sp, %d0
@@ -111,6 +279,90 @@ move.w %sp, %d1
; CHECK-SAME: encoding: [0x3e,0x0f]
move.w %sp, %d7
+; CHECK: move.w %sp, (%a0)
+; CHECK-SAME: encoding: [0x30,0x8f]
+move.w %sp, (%a0)
+
+; CHECK: move.w %sp, (%a1)
+; CHECK-SAME: encoding: [0x32,0x8f]
+move.w %sp, (%a1)
+
+; CHECK: move.w %sp, (%sp)
+; CHECK-SAME: encoding: [0x3e,0x8f]
+move.w %sp, (%sp)
+
+; CHECK: move.w (%a0), %d0
+; CHECK-SAME: encoding: [0x30,0x10]
+move.w (%a0), %d0
+
+; CHECK: move.w (%a0), %d1
+; CHECK-SAME: encoding: [0x32,0x10]
+move.w (%a0), %d1
+
+; CHECK: move.w (%a0), %d7
+; CHECK-SAME: encoding: [0x3e,0x10]
+move.w (%a0), %d7
+
+; CHECK: move.w (%a0), (%a0)
+; CHECK-SAME: encoding: [0x30,0x90]
+move.w (%a0), (%a0)
+
+; CHECK: move.w (%a0), (%a1)
+; CHECK-SAME: encoding: [0x32,0x90]
+move.w (%a0), (%a1)
+
+; CHECK: move.w (%a0), (%sp)
+; CHECK-SAME: encoding: [0x3e,0x90]
+move.w (%a0), (%sp)
+
+; CHECK: move.w (%a1), %d0
+; CHECK-SAME: encoding: [0x30,0x11]
+move.w (%a1), %d0
+
+; CHECK: move.w (%a1), %d1
+; CHECK-SAME: encoding: [0x32,0x11]
+move.w (%a1), %d1
+
+; CHECK: move.w (%a1), %d7
+; CHECK-SAME: encoding: [0x3e,0x11]
+move.w (%a1), %d7
+
+; CHECK: move.w (%a1), (%a0)
+; CHECK-SAME: encoding: [0x30,0x91]
+move.w (%a1), (%a0)
+
+; CHECK: move.w (%a1), (%a1)
+; CHECK-SAME: encoding: [0x32,0x91]
+move.w (%a1), (%a1)
+
+; CHECK: move.w (%a1), (%sp)
+; CHECK-SAME: encoding: [0x3e,0x91]
+move.w (%a1), (%sp)
+
+; CHECK: move.w (%sp), %d0
+; CHECK-SAME: encoding: [0x30,0x17]
+move.w (%sp), %d0
+
+; CHECK: move.w (%sp), %d1
+; CHECK-SAME: encoding: [0x32,0x17]
+move.w (%sp), %d1
+
+; CHECK: move.w (%sp), %d7
+; CHECK-SAME: encoding: [0x3e,0x17]
+move.w (%sp), %d7
+
+; CHECK: move.w (%sp), (%a0)
+; CHECK-SAME: encoding: [0x30,0x97]
+move.w (%sp), (%a0)
+
+; CHECK: move.w (%sp), (%a1)
+; CHECK-SAME: encoding: [0x32,0x97]
+move.w (%sp), (%a1)
+
+; CHECK: move.w (%sp), (%sp)
+; CHECK-SAME: encoding: [0x3e,0x97]
+move.w (%sp), (%sp)
+
; CHECK: move.l %d0, %d0
; CHECK-SAME: encoding: [0x20,0x00]
move.l %d0, %d0
@@ -123,6 +375,18 @@ move.l %d0, %d1
; CHECK-SAME: encoding: [0x2e,0x00]
move.l %d0, %d7
+; CHECK: move.l %d0, (%a0)
+; CHECK-SAME: encoding: [0x20,0x80]
+move.l %d0, (%a0)
+
+; CHECK: move.l %d0, (%a1)
+; CHECK-SAME: encoding: [0x22,0x80]
+move.l %d0, (%a1)
+
+; CHECK: move.l %d0, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x80]
+move.l %d0, (%sp)
+
; CHECK: move.l %d1, %d0
; CHECK-SAME: encoding: [0x20,0x01]
move.l %d1, %d0
@@ -135,6 +399,18 @@ move.l %d1, %d1
; CHECK-SAME: encoding: [0x2e,0x01]
move.l %d1, %d7
+; CHECK: move.l %d1, (%a0)
+; CHECK-SAME: encoding: [0x20,0x81]
+move.l %d1, (%a0)
+
+; CHECK: move.l %d1, (%a1)
+; CHECK-SAME: encoding: [0x22,0x81]
+move.l %d1, (%a1)
+
+; CHECK: move.l %d1, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x81]
+move.l %d1, (%sp)
+
; CHECK: move.l %d7, %d0
; CHECK-SAME: encoding: [0x20,0x07]
move.l %d7, %d0
@@ -147,6 +423,18 @@ move.l %d7, %d1
; CHECK-SAME: encoding: [0x2e,0x07]
move.l %d7, %d7
+; CHECK: move.l %d7, (%a0)
+; CHECK-SAME: encoding: [0x20,0x87]
+move.l %d7, (%a0)
+
+; CHECK: move.l %d7, (%a1)
+; CHECK-SAME: encoding: [0x22,0x87]
+move.l %d7, (%a1)
+
+; CHECK: move.l %d7, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x87]
+move.l %d7, (%sp)
+
; CHECK: move.l %a0, %d0
; CHECK-SAME: encoding: [0x20,0x08]
move.l %a0, %d0
@@ -159,6 +447,18 @@ move.l %a0, %d1
; CHECK-SAME: encoding: [0x2e,0x08]
move.l %a0, %d7
+; CHECK: move.l %a0, (%a0)
+; CHECK-SAME: encoding: [0x20,0x88]
+move.l %a0, (%a0)
+
+; CHECK: move.l %a0, (%a1)
+; CHECK-SAME: encoding: [0x22,0x88]
+move.l %a0, (%a1)
+
+; CHECK: move.l %a0, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x88]
+move.l %a0, (%sp)
+
; CHECK: move.l %a1, %d0
; CHECK-SAME: encoding: [0x20,0x09]
move.l %a1, %d0
@@ -171,6 +471,18 @@ move.l %a1, %d1
; CHECK-SAME: encoding: [0x2e,0x09]
move.l %a1, %d7
+; CHECK: move.l %a1, (%a0)
+; CHECK-SAME: encoding: [0x20,0x89]
+move.l %a1, (%a0)
+
+; CHECK: move.l %a1, (%a1)
+; CHECK-SAME: encoding: [0x22,0x89]
+move.l %a1, (%a1)
+
+; CHECK: move.l %a1, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x89]
+move.l %a1, (%sp)
+
; CHECK: move.l %sp, %d0
; CHECK-SAME: encoding: [0x20,0x0f]
move.l %sp, %d0
@@ -182,3 +494,87 @@ move.l %sp, %d1
; CHECK: move.l %sp, %d7
; CHECK-SAME: encoding: [0x2e,0x0f]
move.l %sp, %d7
+
+; CHECK: move.l %sp, (%a0)
+; CHECK-SAME: encoding: [0x20,0x8f]
+move.l %sp, (%a0)
+
+; CHECK: move.l %sp, (%a1)
+; CHECK-SAME: encoding: [0x22,0x8f]
+move.l %sp, (%a1)
+
+; CHECK: move.l %sp, (%sp)
+; CHECK-SAME: encoding: [0x2e,0x8f]
+move.l %sp, (%sp)
+
+; CHECK: move.l (%a0), %d0
+; CHECK-SAME: encoding: [0x20,0x10]
+move.l (%a0), %d0
+
+; CHECK: move.l (%a0), %d1
+; CHECK-SAME: encoding: [0x22,0x10]
+move.l (%a0), %d1
+
+; CHECK: move.l (%a0), %d7
+; CHECK-SAME: encoding: [0x2e,0x10]
+move.l (%a0), %d7
+
+; CHECK: move.l (%a0), (%a0)
+; CHECK-SAME: encoding: [0x20,0x90]
+move.l (%a0), (%a0)
+
+; CHECK: move.l (%a0), (%a1)
+; CHECK-SAME: encoding: [0x22,0x90]
+move.l (%a0), (%a1)
+
+; CHECK: move.l (%a0), (%sp)
+; CHECK-SAME: encoding: [0x2e,0x90]
+move.l (%a0), (%sp)
+
+; CHECK: move.l (%a1), %d0
+; CHECK-SAME: encoding: [0x20,0x11]
+move.l (%a1), %d0
+
+; CHECK: move.l (%a1), %d1
+; CHECK-SAME: encoding: [0x22,0x11]
+move.l (%a1), %d1
+
+; CHECK: move.l (%a1), %d7
+; CHECK-SAME: encoding: [0x2e,0x11]
+move.l (%a1), %d7
+
+; CHECK: move.l (%a1), (%a0)
+; CHECK-SAME: encoding: [0x20,0x91]
+move.l (%a1), (%a0)
+
+; CHECK: move.l (%a1), (%a1)
+; CHECK-SAME: encoding: [0x22,0x91]
+move.l (%a1), (%a1)
+
+; CHECK: move.l (%a1), (%sp)
+; CHECK-SAME: encoding: [0x2e,0x91]
+move.l (%a1), (%sp)
+
+; CHECK: move.l (%sp), %d0
+; CHECK-SAME: encoding: [0x20,0x17]
+move.l (%sp), %d0
+
+; CHECK: move.l (%sp), %d1
+; CHECK-SAME: encoding: [0x22,0x17]
+move.l (%sp), %d1
+
+; CHECK: move.l (%sp), %d7
+; CHECK-SAME: encoding: [0x2e,0x17]
+move.l (%sp), %d7
+
+; CHECK: move.l (%sp), (%a0)
+; CHECK-SAME: encoding: [0x20,0x97]
+move.l (%sp), (%a0)
+
+; CHECK: move.l (%sp), (%a1)
+; CHECK-SAME: encoding: [0x22,0x97]
+move.l (%sp), (%a1)
+
+; CHECK: move.l (%sp), (%sp)
+; CHECK-SAME: encoding: [0x2e,0x97]
+move.l (%sp), (%sp)
diff --git a/llvm/test/MC/M68k/generate_tests.py b/llvm/test/MC/M68k/generate_tests.py
index 13a1dd28e06ce..d4d8d34863c7c 100755
--- a/llvm/test/MC/M68k/generate_tests.py
+++ b/llvm/test/MC/M68k/generate_tests.py
@@ -164,7 +164,7 @@ class DataRegisterDirect(EffectiveAddressingMode):
register: DataRegister
- def permutations() -> Generator["DataRegisterDirect", None, None]:
+ def permutations() -> Generator[EffectiveAddressingMode, None, None]:
for register in DataRegister.permutations():
yield DataRegisterDirect(register)
@@ -186,7 +186,7 @@ class AddressRegisterDirect(EffectiveAddressingMode):
register: AddressRegister
- def permutations() -> Generator["AddressRegisterDirect", None, None]:
+ def permutations() -> Generator[EffectiveAddressingMode, None, None]:
for register in AddressRegister.permutations():
yield AddressRegisterDirect(register)
@@ -200,6 +200,28 @@ def registerField(self) -> int:
return self.register
+# https://m680x0.github.io/ref/M68000PM_AD_Rev_1_Programmers_Reference_Manual_1992.html#pf2e
+# (An)
+ at dataclass
+class AddressRegisterIndirect(EffectiveAddressingMode):
+ """Represents the contents of memory, with address in a particular address register."""
+
+ register: AddressRegister
+
+ def permutations() -> Generator[EffectiveAddressingMode, None, None]:
+ for register in AddressRegister.permutations():
+ yield AddressRegisterIndirect(register)
+
+ def asm(self) -> str:
+ return f"({self.register.asm()})"
+
+ def modeField(self) -> int:
+ return 0b010
+
+ def registerField(self) -> int:
+ return self.register
+
+
# Instructions
@@ -233,8 +255,12 @@ class MOVE(Instruction):
source: EffectiveAddressingMode
def permutations() -> Generator["MOVE", None, None]:
- sourceModes = [DataRegisterDirect, AddressRegisterDirect]
- destinationModes = [DataRegisterDirect]
+ sourceModes = [
+ DataRegisterDirect,
+ AddressRegisterDirect,
+ AddressRegisterIndirect,
+ ]
+ destinationModes = [DataRegisterDirect, AddressRegisterIndirect]
for size in [Byte, Word, Long]:
for sourceMode in sourceModes:
>From 984ed8b3307fdc2ed10d0882f4d01e80bd0809c2 Mon Sep 17 00:00:00 2001
From: Peter Mackay <git at petmac.dev>
Date: Wed, 6 May 2026 23:52:58 +0100
Subject: [PATCH 9/9] Remove redundant tests
---
llvm/test/MC/M68k/Data/Classes/MxMove_MM.s | 10 ----------
llvm/test/MC/M68k/Data/Classes/MxMove_MR.s | 10 ----------
llvm/test/MC/M68k/Data/Classes/MxMove_RM.s | 10 ----------
3 files changed, 30 deletions(-)
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMove_MM.s b/llvm/test/MC/M68k/Data/Classes/MxMove_MM.s
index a5ffef1d761c8..afaa7fec13c40 100644
--- a/llvm/test/MC/M68k/Data/Classes/MxMove_MM.s
+++ b/llvm/test/MC/M68k/Data/Classes/MxMove_MM.s
@@ -66,16 +66,6 @@ move.l (%a1)+, (%a1)+
; CHECK-SAME: encoding: [0x22,0xd9]
move.l (%a1)+, (%a1)+
-; CHECK: move.b (%a0), (%a0)
-; CHECK-SAME: encoding: [0x10,0x90]
-move.b (%a0), (%a0)
-; CHECK: move.l (%a1), (%a1)
-; CHECK-SAME: encoding: [0x22,0x91]
-move.l (%a1), (%a1)
-; CHECK: move.l (%a1), (%a1)
-; CHECK-SAME: encoding: [0x22,0x91]
-move.l (%a1), (%a1)
-
; FIXME: Currently we don't have the 'B' encoding
; (i.e. abs.W) so we're always using 32-bit absolute address.
; CHECK: move.b $ffffffffffffffff, $0
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMove_MR.s b/llvm/test/MC/M68k/Data/Classes/MxMove_MR.s
index ca5f7d07cea61..79db57ed1ddea 100644
--- a/llvm/test/MC/M68k/Data/Classes/MxMove_MR.s
+++ b/llvm/test/MC/M68k/Data/Classes/MxMove_MR.s
@@ -22,13 +22,3 @@ move.l %d0, (-1,%a1)
; CHECK: move.l %a0, (-1,%a1)
; CHECK-SAME: encoding: [0x23,0x48,0xff,0xff]
move.l %a0, (-1,%a1)
-
-; CHECK: move.b %d0, (%a0)
-; CHECK-SAME: encoding: [0x10,0x80]
-move.b %d0, (%a0)
-; CHECK: move.l %d3, (%a1)
-; CHECK-SAME: encoding: [0x22,0x83]
-move.l %d3, (%a1)
-; CHECK: move.l %a4, (%a1)
-; CHECK-SAME: encoding: [0x22,0x8c]
-move.l %a4, (%a1)
diff --git a/llvm/test/MC/M68k/Data/Classes/MxMove_RM.s b/llvm/test/MC/M68k/Data/Classes/MxMove_RM.s
index 918c4e493621b..3228ecffa45bd 100644
--- a/llvm/test/MC/M68k/Data/Classes/MxMove_RM.s
+++ b/llvm/test/MC/M68k/Data/Classes/MxMove_RM.s
@@ -66,16 +66,6 @@ move.l (%a1)+, %d3
; CHECK-SAME: encoding: [0x28,0x59]
move.l (%a1)+, %a4
-; CHECK: move.b (%a0), %d0
-; CHECK-SAME: encoding: [0x10,0x10]
-move.b (%a0), %d0
-; CHECK: move.l (%a1), %d3
-; CHECK-SAME: encoding: [0x26,0x11]
-move.l (%a1), %d3
-; CHECK: move.l (%a1), %a4
-; CHECK-SAME: encoding: [0x28,0x51]
-move.l (%a1), %a4
-
; FIXME: Currently we don't have the 'B' encoding
; (i.e. abs.W) so we're always using 32-bit absolute address.
; CHECK: move.b $0, %d0
More information about the llvm-commits
mailing list