summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--utils/tl/thumb.c39
1 files changed, 19 insertions, 20 deletions
diff --git a/utils/tl/thumb.c b/utils/tl/thumb.c
index cb170c98..ff7818f5 100644
--- a/utils/tl/thumb.c
+++ b/utils/tl/thumb.c
@@ -1533,35 +1533,34 @@ thumbopfp(int a, int sc)
long o = 0;
switch(a) {
+ /* VMOV (ARMv7-M ARM, A7.7.240), encoding T1, op=0 */
+ case AMOVWD: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<6) | (0<<4);
+ case AMOVWF: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (0<<4);
+ /* VMOV (ARMv7-M ARM, A7.7.240), encoding T1, op=1 */
+ case AMOVDW: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<6) | (1<<4);
+ case AMOVFW: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<4);
+ /* VCVT (ARMv7-M ARM, A7.7.225), encoding T1 */
+ case AMOVFD: return o | (0x0a<<24) | (0xc0<<16) | (0xee<<8) | 0xb7;
+ case AMOVDF: return o | (0x0b<<24) | (0xc0<<16) | (0xee<<8) | 0xb7;
+ /* VMOV (register) (ARMv7-M ARM, A7.7.237) */
+ case AMOVD: return o | (0x0b<<24) | (0x40<<16) | (0xee<<8) | 0xb0;
+ case AMOVF: return o | (0x0a<<24) | (0x40<<16) | (0xee<<8) | 0xb0;
+ /* VCMP (ARMv7-M ARM, A7.7.223), encoding T1 */
+ case ACMPD:
+ case ACMPF: return o | (0x0a<<24) | (0x40<<16) | (0xee<<8) | 0xb4;
+ /* arguably, ACMPF should expand to RNDF, CMPD */
/* VADD (ARMv7-M ARM, A7.7.222) */
case AADDD: return o | (0x0b<<24) | (0xee<<8) | 0x30;
case AADDF: return o | (0x0a<<24) | (0xee<<8) | 0x30;
- /* VMUL (ARMv7-M ARM, A7.7.245) */
- case AMULD: return o | (0x0b<<24) | (0xee<<8) | 0x20;
- case AMULF: return o | (0x0a<<24) | (0xee<<8) | 0x20;
/* VSUB (ARMv7-M ARM, A7.7.257) */
case ASUBD: return o | (0x0b<<24) | (0x4<<20) | (0xee<<8) | 0x30;
case ASUBF: return o | (0x0a<<24) | (0x4<<20) | (0xee<<8) | 0x30;
+ /* VMUL (ARMv7-M ARM, A7.7.245) */
+ case AMULD: return o | (0x0b<<24) | (0xee<<8) | 0x20;
+ case AMULF: return o | (0x0a<<24) | (0xee<<8) | 0x20;
/* VDIV (ARMv7-M ARM, A7.7.229) */
case ADIVD: return o | (0x0b<<24) | (0xee<<8) | 0x80;
case ADIVF: return o | (0x0a<<24) | (0xee<<8) | 0x80;
- /* VCMP (ARMv7-M ARM, A7.7.223), encoding T1 */
- case ACMPD:
- case ACMPF: return o | (0x0a<<24) | (0x40<<16) | (0xee<<8) | 0xb4;
- /* arguably, ACMPF should expand to RNDF, CMPD */
-
- /* VMOV (register) (ARMv7-M ARM, A7.7.237) */
- case AMOVF:
- case AMOVDF: return o | (0x0a<<24) | (0x40<<16) | (0xee<<8) | 0xb0;
- case AMOVD:
- case AMOVFD: return o | (0xe<<24) | (0x0<<20) | (1<<15) | (1<<8) | (1<<7);
-
- /* VMOV (ARMv7-M ARM, A7.7.240), encoding T1, op=0 */
- case AMOVWF: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (0<<4);
- case AMOVWD: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<6) | (0<<4);
- /* VMOV (ARMv7-M ARM, A7.7.240), encoding T1, op=1 */
- case AMOVFW: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<4);
- case AMOVDW: return o | (0x0a<<24) | (1<<20) | (0xee<<8) | (1<<6) | (1<<4);
}
diag("bad fp %d", a);
prasm(curp);