ARM: move opcode macros to <target/arm_opcodes.h>
authorDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 7 Dec 2009 22:54:12 +0000 (14:54 -0800)
committerDavid Brownell <dbrownell@users.sourceforge.net>
Mon, 7 Dec 2009 22:57:43 +0000 (14:57 -0800)
Move the ARM opcode macros from <target/armv4_5.h>, and a few
Thumb2 ones from <target/armv7m.h>, to more appropriate homes
in a new <target/arm_opcodes.h> file.

Removed duplicate opcodes from that v7m/Thumb2 set.  Protected
a few macro argument references by adding missing parentheses.

Tightening up some of the line lengths turned up a curious artifact:
the macros for the Thumb opcodes are all 32 bits wide, not 16 bits.
There's currently no explanation for why it's done that way...

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
18 files changed:
src/flash/nor/lpc2000.c
src/target/arm11.c
src/target/arm720t.c
src/target/arm7tdmi.c
src/target/arm920t.c
src/target/arm926ejs.c
src/target/arm966e.c
src/target/arm9tdmi.c
src/target/arm_dpm.c
src/target/arm_opcodes.h [new file with mode: 0644]
src/target/armv4_5.h
src/target/armv7a.c
src/target/armv7m.h
src/target/cortex_a8.c
src/target/cortex_m3.c
src/target/fa526.c
src/target/feroceon.c
src/target/xscale.c

index 0caf3e09b80663ba215e57a5c5ed3a10fe7d9464..18896f7b61bde1c49c97c849e97e0da78923c13a 100644 (file)
@@ -29,6 +29,7 @@
 #include "lpc2000.h"
 #include <helper/binarybuffer.h>
 #include <target/algorithm.h>
+#include <target/arm_opcodes.h>
 #include <target/armv7m.h>
 
 
@@ -263,8 +264,10 @@ static int lpc2000_iap_call(struct flash_bank *bank, int code, uint32_t param_ta
                switch(lpc2000_info->variant)
                {
                        case lpc1700:
-                               target_buffer_set_u32(target, jump_gate, ARMV7M_T_BX(12));
-                               target_buffer_set_u32(target, jump_gate + 4, ARMV7M_T_B(0xfffffe));
+                               target_buffer_set_u32(target, jump_gate,
+                                               ARMV4_5_T_BX(12));
+                               target_buffer_set_u32(target, jump_gate + 4,
+                                               ARMV4_5_T_B(0xfffffe));
                                break;
                        case lpc2000_v1:
                        case lpc2000_v2:
index 0486b04c914a0010069b26764569072fa3cd577d..7868c23be68a63646a8ae0fc8aa802ba6e4a538e 100644 (file)
@@ -34,6 +34,7 @@
 #include "target_type.h"
 #include "algorithm.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 #if 0
index 207db78767c9fc777094f924be11c00b2aef34e5..14d218497844db02958f7a2bc87b31388cf0330c 100644 (file)
@@ -28,6 +28,7 @@
 #include <helper/time_support.h>
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
index fffc6327ec7c3e061be91b0bf4a3ab1db0a3112e..d204f95e712b3b00838d65baece668f42f16ba43 100644 (file)
@@ -30,6 +30,7 @@
 #include "arm7tdmi.h"
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
index 6a005d6d8ca76d5b7b497be13598f3c6ffec2f0d..1fcae4354f266ed2363fafb6975b6e05da16fcda 100644 (file)
@@ -25,6 +25,7 @@
 #include <helper/time_support.h>
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
index cacb94286bd5cc3ea650cab8356286c0e914d4be..d882050f8f78484d898a187acca0e464e1b628c6 100644 (file)
@@ -28,6 +28,7 @@
 #include <helper/time_support.h>
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
index 9fe513c9ea404298ed9f209fbe04c7d7b6903c8e..e4bfe57328b6859ee1ed5e3dfe9de6fc6f062c77 100644 (file)
@@ -26,6 +26,7 @@
 
 #include "arm966e.h"
 #include "target_type.h"
+#include "arm_opcodes.h"
 
 
 #if 0
index 09199c70f5fab4d7bda822d5d05be0e598905d66..05f024644d968b398e4166477f6e72dcf4cbe765 100644 (file)
@@ -30,6 +30,7 @@
 #include "arm9tdmi.h"
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /*
index 1ddf530c879f4b539690844d2dc2591d76d65c02..406e30a289f5f4a4c995e60b64a676ef1eadd476 100644 (file)
@@ -27,6 +27,7 @@
 #include "register.h"
 #include "breakpoints.h"
 #include "target_type.h"
+#include "arm_opcodes.h"
 
 
 /**
diff --git a/src/target/arm_opcodes.h b/src/target/arm_opcodes.h
new file mode 100644 (file)
index 0000000..b3b5143
--- /dev/null
@@ -0,0 +1,260 @@
+/*
+ * Copyright (C) 2005 by Dominic Rath
+ * Dominic.Rath@gmx.de
+ *
+ * Copyright (C) 2008 by Spencer Oliver
+ * spen@spen-soft.co.uk
+ *
+ * Copyright (C) 2009 by Ã˜yvind Harboe
+ * oyvind.harboe@zylin.com
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the
+ * Free Software Foundation, Inc.,
+ * 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+ */
+#ifndef __ARM_OPCODES_H
+#define __ARM_OPCODES_H
+
+/* ARM mode instructions */
+
+/* Store multiple increment after
+ * Rn: base register
+ * List: for each bit in list: store register
+ * S: in priviledged mode: store user-mode registers
+ * W = 1: update the base register. W = 0: leave the base register untouched
+ */
+#define ARMV4_5_STMIA(Rn, List, S, W) \
+       (0xe8800000 | ((S) << 22) | ((W) << 21) | ((Rn) << 16) | (List))
+
+/* Load multiple increment after
+ * Rn: base register
+ * List: for each bit in list: store register
+ * S: in priviledged mode: store user-mode registers
+ * W = 1: update the base register. W = 0: leave the base register untouched
+ */
+#define ARMV4_5_LDMIA(Rn, List, S, W) \
+       (0xe8900000 | ((S) << 22) | ((W) << 21) | ((Rn) << 16) | (List))
+
+/* MOV r8, r8 */
+#define ARMV4_5_NOP                                    (0xe1a08008)
+
+/* Move PSR to general purpose register
+ * R = 1: SPSR R = 0: CPSR
+ * Rn: target register
+ */
+#define ARMV4_5_MRS(Rn, R)     (0xe10f0000 | ((R) << 22) | ((Rn) << 12))
+
+/* Store register
+ * Rd: register to store
+ * Rn: base register
+ */
+#define ARMV4_5_STR(Rd, Rn)    (0xe5800000 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Load register
+ * Rd: register to load
+ * Rn: base register
+ */
+#define ARMV4_5_LDR(Rd, Rn)    (0xe5900000 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Move general purpose register to PSR
+ * R = 1: SPSR R = 0: CPSR
+ * Field: Field mask
+ * 1: control field 2: extension field 4: status field 8: flags field
+ * Rm: source register
+ */
+#define ARMV4_5_MSR_GP(Rm, Field, R) \
+       (0xe120f000 | (Rm) | ((Field) << 16) | ((R) << 22))
+#define ARMV4_5_MSR_IM(Im, Rotate, Field, R) \
+       (0xe320f000 | (Im)  | ((Rotate) << 8) | ((Field) << 16) | ((R) << 22))
+
+/* Load Register Halfword Immediate Post-Index
+ * Rd: register to load
+ * Rn: base register
+ */
+#define ARMV4_5_LDRH_IP(Rd, Rn)        (0xe0d000b2 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Load Register Byte Immediate Post-Index
+ * Rd: register to load
+ * Rn: base register
+ */
+#define ARMV4_5_LDRB_IP(Rd, Rn)        (0xe4d00001 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Store register Halfword Immediate Post-Index
+ * Rd: register to store
+ * Rn: base register
+ */
+#define ARMV4_5_STRH_IP(Rd, Rn)        (0xe0c000b2 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Store register Byte Immediate Post-Index
+ * Rd: register to store
+ * Rn: base register
+ */
+#define ARMV4_5_STRB_IP(Rd, Rn)        (0xe4c00001 | ((Rd) << 12) | ((Rn) << 16))
+
+/* Branch (and Link)
+ * Im: Branch target (left-shifted by 2 bits, added to PC)
+ * L: 1: branch and link 0: branch only
+ */
+#define ARMV4_5_B(Im, L) (0xea000000 | (Im) | ((L) << 24))
+
+/* Branch and exchange (ARM state)
+ * Rm: register holding branch target address
+ */
+#define ARMV4_5_BX(Rm) (0xe12fff10 | (Rm))
+
+/* Move to ARM register from coprocessor
+ * CP: Coprocessor number
+ * op1: Coprocessor opcode
+ * Rd: destination register
+ * CRn: first coprocessor operand
+ * CRm: second coprocessor operand
+ * op2: Second coprocessor opcode
+ */
+#define ARMV4_5_MRC(CP, op1, Rd, CRn, CRm, op2) \
+       (0xee100010 | (CRm) | ((op2) << 5) | ((CP) << 8) \
+       | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21))
+
+/* Move to coprocessor from ARM register
+ * CP: Coprocessor number
+ * op1: Coprocessor opcode
+ * Rd: destination register
+ * CRn: first coprocessor operand
+ * CRm: second coprocessor operand
+ * op2: Second coprocessor opcode
+ */
+#define ARMV4_5_MCR(CP, op1, Rd, CRn, CRm, op2) \
+       (0xee000010 | (CRm) | ((op2) << 5) | ((CP) << 8) \
+       | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21))
+
+/* Breakpoint instruction (ARMv5)
+ * Im: 16-bit immediate
+ */
+#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 8) | (Im & 0xf))
+
+
+/* Thumb mode instructions
+ *
+ * FIXME there must be some reason all these opcodes are 32-bits
+ * not 16-bits ... this should get either an explanatory comment,
+ * or be changed not to duplicate the opcode.
+ */
+
+/* Store register (Thumb mode)
+ * Rd: source register
+ * Rn: base register
+ */
+#define ARMV4_5_T_STR(Rd, Rn) \
+       ((0x6000 | (Rd) | ((Rn) << 3)) | \
+       ((0x6000 | (Rd) | ((Rn) << 3)) << 16))
+
+/* Load register (Thumb state)
+ * Rd: destination register
+ * Rn: base register
+ */
+#define ARMV4_5_T_LDR(Rd, Rn) \
+       ((0x6800 | ((Rn) << 3) | (Rd)) \
+       | ((0x6800 | ((Rn) << 3) | (Rd)) << 16))
+
+/* Load multiple (Thumb state)
+ * Rn: base register
+ * List: for each bit in list: store register
+ */
+#define ARMV4_5_T_LDMIA(Rn, List) \
+       ((0xc800 | ((Rn) << 8) | (List)) \
+       | ((0xc800 | ((Rn) << 8) | (List)) << 16))
+
+/* Load register with PC relative addressing
+ * Rd: register to load
+ */
+#define ARMV4_5_T_LDR_PCREL(Rd) \
+       ((0x4800 | ((Rd) << 8)) \
+       | ((0x4800 | ((Rd) << 8)) << 16))
+
+/* Move hi register (Thumb mode)
+ * Rd: destination register
+ * Rm: source register
+ */
+#define ARMV4_5_T_MOV(Rd, Rm) \
+       ((0x4600 | ((Rd) & 0x7) | (((Rd) & 0x8) << 4) | \
+               (((Rm) & 0x7) << 3) | (((Rm) & 0x8) << 3)) \
+       | ((0x4600 | ((Rd) & 0x7) | (((Rd) & 0x8) << 4) | \
+               (((Rm) & 0x7) << 3) | (((Rm) & 0x8) << 3)) << 16))
+
+/* No operation (Thumb mode)
+ * NOTE:  this is "MOV r8, r8" ... Thumb2 adds two
+ * architected NOPs, 16-bit and 32-bit.
+ */
+#define ARMV4_5_T_NOP  (0x46c0 | (0x46c0 << 16))
+
+/* Move immediate to register (Thumb state)
+ * Rd: destination register
+ * Im: 8-bit immediate value
+ */
+#define ARMV4_5_T_MOV_IM(Rd, Im) \
+       ((0x2000 | ((Rd) << 8) | (Im)) \
+       | ((0x2000 | ((Rd) << 8) | (Im)) << 16))
+
+/* Branch and Exchange
+ * Rm: register containing branch target
+ */
+#define ARMV4_5_T_BX(Rm) \
+       ((0x4700 | ((Rm) << 3)) \
+       | ((0x4700 | ((Rm) << 3)) << 16))
+
+/* Branch (Thumb state)
+ * Imm: Branch target
+ */
+#define ARMV4_5_T_B(Imm) \
+       ((0xe000 | (Imm)) \
+       | ((0xe000 | (Imm)) << 16))
+
+/* Breakpoint instruction (ARMv5) (Thumb state)
+ * Im: 8-bit immediate
+ */
+#define ARMV5_T_BKPT(Im) \
+       ((0xbe00 | (Im)) \
+       | ((0xbe00 | (Im)) << 16))
+
+/* Move to Register from Special Register
+ *     32 bit Thumb2 instruction
+ * Rd: destination register
+ * SYSm: source special register
+ */
+#define ARM_T2_MRS(Rd, SYSm) \
+       ((0xF3EF) | ((0x8000 | (Rd << 8) | SYSm) << 16))
+
+/* Move from Register from Special Register
+ *     32 bit Thumb2 instruction
+ * Rd: source register
+ * SYSm: destination special register
+ */
+#define ARM_T2_MSR(SYSm, Rn) \
+       ((0xF380 | (Rn << 8)) | ((0x8800 | SYSm) << 16))
+
+/* Change Processor State.
+ *     16 bit Thumb2 instruction
+ * Rd: source register
+ * IF: A_FLAG and/or I_FLAG and/or F_FLAG
+ */
+#define A_FLAG 4
+#define I_FLAG 2
+#define F_FLAG 1
+#define ARM_T2_CPSID(IF) \
+       ((0xB660 | (1 << 8) | ((IF)&0x3)) \
+       | ((0xB660 | (1 << 8) | ((IF)&0x3)) << 16))
+#define ARM_T2_CPSIE(IF) \
+       ((0xB660 | (0 << 8) | ((IF)&0x3)) \
+       | ((0xB660 | (0 << 8) | ((IF)&0x3)) << 16))
+
+#endif /* __ARM_OPCODES_H */
index 6e289337ab2b0c9bd4004adb195761aeab4b7e61..4b2ccf821d21adae64345abf967c9d64acb05acd 100644 (file)
@@ -212,171 +212,4 @@ struct reg *arm_reg_current(struct arm *arm, unsigned regnum);
 extern struct reg arm_gdb_dummy_fp_reg;
 extern struct reg arm_gdb_dummy_fps_reg;
 
-/* ARM mode instructions
- */
-
-/* Store multiple increment after
- * Rn: base register
- * List: for each bit in list: store register
- * S: in priviledged mode: store user-mode registers
- * W = 1: update the base register. W = 0: leave the base register untouched
- */
-#define ARMV4_5_STMIA(Rn, List, S, W)  (0xe8800000 | ((S) << 22) | ((W) << 21) | ((Rn) << 16) | (List))
-
-/* Load multiple increment after
- * Rn: base register
- * List: for each bit in list: store register
- * S: in priviledged mode: store user-mode registers
- * W = 1: update the base register. W = 0: leave the base register untouched
- */
-#define ARMV4_5_LDMIA(Rn, List, S, W)  (0xe8900000 | ((S) << 22) | ((W) << 21) | ((Rn) << 16) | (List))
-
-/* MOV r8, r8 */
-#define ARMV4_5_NOP                                    (0xe1a08008)
-
-/* Move PSR to general purpose register
- * R = 1: SPSR R = 0: CPSR
- * Rn: target register
- */
-#define ARMV4_5_MRS(Rn, R)                     (0xe10f0000 | ((R) << 22) | ((Rn) << 12))
-
-/* Store register
- * Rd: register to store
- * Rn: base register
- */
-#define ARMV4_5_STR(Rd, Rn)                    (0xe5800000 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Load register
- * Rd: register to load
- * Rn: base register
- */
-#define ARMV4_5_LDR(Rd, Rn)                    (0xe5900000 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Move general purpose register to PSR
- * R = 1: SPSR R = 0: CPSR
- * Field: Field mask
- * 1: control field 2: extension field 4: status field 8: flags field
- * Rm: source register
- */
-#define ARMV4_5_MSR_GP(Rm, Field, R)   (0xe120f000 | (Rm) | ((Field) << 16) | ((R) << 22))
-#define ARMV4_5_MSR_IM(Im, Rotate, Field, R)   (0xe320f000 | (Im)  | ((Rotate) << 8) | ((Field) << 16) | ((R) << 22))
-
-/* Load Register Halfword Immediate Post-Index
- * Rd: register to load
- * Rn: base register
- */
-#define ARMV4_5_LDRH_IP(Rd, Rn)        (0xe0d000b2 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Load Register Byte Immediate Post-Index
- * Rd: register to load
- * Rn: base register
- */
-#define ARMV4_5_LDRB_IP(Rd, Rn)        (0xe4d00001 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Store register Halfword Immediate Post-Index
- * Rd: register to store
- * Rn: base register
- */
-#define ARMV4_5_STRH_IP(Rd, Rn)        (0xe0c000b2 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Store register Byte Immediate Post-Index
- * Rd: register to store
- * Rn: base register
- */
-#define ARMV4_5_STRB_IP(Rd, Rn)        (0xe4c00001 | ((Rd) << 12) | ((Rn) << 16))
-
-/* Branch (and Link)
- * Im: Branch target (left-shifted by 2 bits, added to PC)
- * L: 1: branch and link 0: branch only
- */
-#define ARMV4_5_B(Im, L) (0xea000000 | (Im) | ((L) << 24))
-
-/* Branch and exchange (ARM state)
- * Rm: register holding branch target address
- */
-#define ARMV4_5_BX(Rm) (0xe12fff10 | (Rm))
-
-/* Move to ARM register from coprocessor
- * CP: Coprocessor number
- * op1: Coprocessor opcode
- * Rd: destination register
- * CRn: first coprocessor operand
- * CRm: second coprocessor operand
- * op2: Second coprocessor opcode
- */
-#define ARMV4_5_MRC(CP, op1, Rd, CRn, CRm, op2) (0xee100010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21))
-
-/* Move to coprocessor from ARM register
- * CP: Coprocessor number
- * op1: Coprocessor opcode
- * Rd: destination register
- * CRn: first coprocessor operand
- * CRm: second coprocessor operand
- * op2: Second coprocessor opcode
- */
-#define ARMV4_5_MCR(CP, op1, Rd, CRn, CRm, op2) (0xee000010 | (CRm) | ((op2) << 5) | ((CP) << 8) | ((Rd) << 12) | ((CRn) << 16) | ((op1) << 21))
-
-/* Breakpoint instruction (ARMv5)
- * Im: 16-bit immediate
- */
-#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 8) | (Im & 0xf))
-
-
-/* Thumb mode instructions
- */
-
-/* Store register (Thumb mode)
- * Rd: source register
- * Rn: base register
- */
-#define ARMV4_5_T_STR(Rd, Rn)  ((0x6000 | (Rd) | ((Rn) << 3)) | ((0x6000 | (Rd) | ((Rn) << 3)) << 16))
-
-/* Load register (Thumb state)
- * Rd: destination register
- * Rn: base register
- */
-#define ARMV4_5_T_LDR(Rd, Rn)  ((0x6800 | ((Rn) << 3) | (Rd)) | ((0x6800 | ((Rn) << 3) | (Rd)) << 16))
-
-/* Load multiple (Thumb state)
- * Rn: base register
- * List: for each bit in list: store register
- */
-#define ARMV4_5_T_LDMIA(Rn, List) ((0xc800 | ((Rn) << 8) | (List)) | ((0xc800 | ((Rn) << 8) | List) << 16))
-
-/* Load register with PC relative addressing
- * Rd: register to load
- */
-#define ARMV4_5_T_LDR_PCREL(Rd)        ((0x4800 | ((Rd) << 8)) | ((0x4800 | ((Rd) << 8)) << 16))
-
-/* Move hi register (Thumb mode)
- * Rd: destination register
- * Rm: source register
- */
-#define ARMV4_5_T_MOV(Rd, Rm)  ((0x4600 | ((Rd) & 0x7) | (((Rd) & 0x8) << 4) | (((Rm) & 0x7) << 3) | (((Rm) & 0x8) << 3)) | ((0x4600 | ((Rd) & 0x7) | (((Rd) & 0x8) << 4) | (((Rm) & 0x7) << 3) | (((Rm) & 0x8) << 3)) << 16))
-
-/* No operation (Thumb mode)
- */
-#define ARMV4_5_T_NOP  (0x46c0 | (0x46c0 << 16))
-
-/* Move immediate to register (Thumb state)
- * Rd: destination register
- * Im: 8-bit immediate value
- */
-#define ARMV4_5_T_MOV_IM(Rd, Im)       ((0x2000 | ((Rd) << 8) | (Im)) | ((0x2000 | ((Rd) << 8) | (Im)) << 16))
-
-/* Branch and Exchange
- * Rm: register containing branch target
- */
-#define ARMV4_5_T_BX(Rm)               ((0x4700 | ((Rm) << 3)) | ((0x4700 | ((Rm) << 3)) << 16))
-
-/* Branch (Thumb state)
- * Imm: Branch target
- */
-#define ARMV4_5_T_B(Imm)       ((0xe000 | (Imm)) | ((0xe000 | (Imm)) << 16))
-
-/* Breakpoint instruction (ARMv5) (Thumb state)
- * Im: 8-bit immediate
- */
-#define ARMV5_T_BKPT(Im) ((0xbe00 | Im) | ((0xbe00 | Im) << 16))
-
 #endif /* ARMV4_5_H */
index 300ac2835a9867d2dadd736fcee319ce3c7976d0..3cc86bc63c8a8d90dd7a7060c83532853c5e72a7 100644 (file)
@@ -33,6 +33,8 @@
 #include <string.h>
 #include <unistd.h>
 
+#include "arm_opcodes.h"
+
 
 static void armv7a_show_fault_registers(struct target *target)
 {
index 353860a9347ad0bc79e2d3ca67fdce58f938304e..c60ab8cfff7bca3e5967a1a881b2194c6595be42 100644 (file)
@@ -162,83 +162,4 @@ int armv7m_blank_check_memory(struct target *target,
 
 extern const struct command_registration armv7m_command_handlers[];
 
-/* Thumb mode instructions
- */
-
-/* Move to Register from Special Register  (Thumb mode) 32 bit Thumb2 instruction
- * Rd: destination register
- * SYSm: source special register
- */
-#define ARMV7M_T_MRS(Rd, SYSm) ((0xF3EF) | ((0x8000 | (Rd << 8) | SYSm) << 16))
-
-/* Move from Register from Special Register  (Thumb mode) 32 bit Thumb2 instruction
- * Rd: source register
- * SYSm: destination special register
- */
-#define ARMV7M_T_MSR(SYSm, Rn) ((0xF380 | (Rn << 8)) | ((0x8800 | SYSm) << 16))
-
-/* Change Processor State. The instruction modifies the PRIMASK and FAULTMASK
- * special-purpose register values  (Thumb mode) 16 bit Thumb2 instruction
- * Rd: source register
- * IF:
- */
-#define I_FLAG 2
-#define F_FLAG 1
-#define ARMV7M_T_CPSID(IF)     ((0xB660 | (1 << 8) | (IF&0x3)) | ((0xB660 | (1 << 8) | (IF&0x3)) << 16))
-#define ARMV7M_T_CPSIE(IF)     ((0xB660 | (0 << 8) | (IF&0x3)) | ((0xB660 | (0 << 8) | (IF&0x3)) << 16))
-
-/* Breakpoint (Thumb mode) v5 onwards
- * Im: immediate value used by debugger
- */
-#define ARMV7M_T_BKPT(Im)      ((0xBE00 | Im) | ((0xBE00 | Im) << 16))
-
-/* Store register (Thumb mode)
- * Rd: source register
- * Rn: base register
- */
-#define ARMV7M_T_STR(Rd, Rn)   ((0x6000 | Rd | (Rn << 3)) | ((0x6000 | Rd | (Rn << 3)) << 16))
-
-/* Load register (Thumb state)
- * Rd: destination register
- * Rn: base register
- */
-#define ARMV7M_T_LDR(Rd, Rn)   ((0x6800 | (Rn << 3) | Rd) | ((0x6800 | (Rn << 3) | Rd) << 16))
-
-/* Load multiple (Thumb state)
- * Rn: base register
- * List: for each bit in list: store register
- */
-#define ARMV7M_T_LDMIA(Rn, List) ((0xc800 | (Rn << 8) | List) | ((0xc800 | (Rn << 8) | List) << 16))
-
-/* Load register with PC relative addressing
- * Rd: register to load
- */
-#define ARMV7M_T_LDR_PCREL(Rd) ((0x4800 | (Rd << 8)) | ((0x4800 | (Rd << 8)) << 16))
-
-/* Move hi register (Thumb mode)
- * Rd: destination register
- * Rm: source register
- */
-#define ARMV7M_T_MOV(Rd, Rm)   ((0x4600 | (Rd & 0x7) | ((Rd & 0x8) << 4) | ((Rm & 0x7) << 3) | ((Rm & 0x8) << 3)) | ((0x4600 | (Rd & 0x7) | ((Rd & 0x8) << 4) | ((Rm & 0x7) << 3) | ((Rm & 0x8) << 3)) << 16))
-
-/* No operation (Thumb mode)
- */
-#define ARMV7M_T_NOP   (0x46c0 | (0x46c0 << 16))
-
-/* Move immediate to register (Thumb state)
- * Rd: destination register
- * Im: 8-bit immediate value
- */
-#define ARMV7M_T_MOV_IM(Rd, Im)        ((0x2000 | (Rd << 8) | Im) | ((0x2000 | (Rd << 8) | Im) << 16))
-
-/* Branch and Exchange
- * Rm: register containing branch target
- */
-#define ARMV7M_T_BX(Rm)                ((0x4700 | (Rm << 3)) | ((0x4700 | (Rm << 3)) << 16))
-
-/* Branch (Thumb state)
- * Imm: Branch target
- */
-#define ARMV7M_T_B(Imm)        ((0xe000 | Imm) | ((0xe000 | Imm) << 16))
-
 #endif /* ARMV7M_H */
index 57e4bcdf8bafe54a49ac829a116193a7238f26fe..1ac0a30357728c9451f064e00fc2016b1bcd6cfb 100644 (file)
@@ -38,6 +38,7 @@
 #include "register.h"
 #include "target_request.h"
 #include "target_type.h"
+#include "arm_opcodes.h"
 
 static int cortex_a8_poll(struct target *target);
 static int cortex_a8_debug_entry(struct target *target);
index 195a3b9ad5b554df990b89f4bd05d3ea7de73873..558b2117b446e777a39256d3ae687ca8450577a9 100644 (file)
@@ -37,6 +37,7 @@
 #include "target_type.h"
 #include "arm_disassembler.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 /* NOTE:  most of this should work fine for the Cortex-M1 and
@@ -880,7 +881,7 @@ cortex_m3_set_breakpoint(struct target *target, struct breakpoint *breakpoint)
        else if (breakpoint->type == BKPT_SOFT)
        {
                uint8_t code[4];
-               buf_set_u32(code, 0, 32, ARMV7M_T_BKPT(0x11));
+               buf_set_u32(code, 0, 32, ARMV5_T_BKPT(0x11));
                if ((retval = target_read_memory(target, breakpoint->address & 0xFFFFFFFE, breakpoint->length, 1, breakpoint->orig_instr)) != ERROR_OK)
                {
                        return retval;
index 32469d0d23fc5d194728c545e2bf87d4fb5f5176..9c01ec7f67b7e9237f517d17deb7db0c8cfb74b8 100644 (file)
@@ -33,6 +33,7 @@
 
 #include "arm920t.h"
 #include "target_type.h"
+#include "arm_opcodes.h"
 
 static void fa526_change_to_arm(struct target *target, uint32_t *r0, uint32_t *pc)
 {
index 1c701540c71d6db56b5ea254dd94babb32875e2e..c912137627f6b32ce883c0b3ba8a04351adbab79 100644 (file)
@@ -56,6 +56,7 @@
 #include "arm966e.h"
 #include "target_type.h"
 #include "register.h"
+#include "arm_opcodes.h"
 
 
 int feroceon_assert_reset(struct target *target)
index d5b1d636b63ee713871fc531705b734232fb84d8..b36d9fdcbc01647c7045f196978a9bb4797571a6 100644 (file)
@@ -36,6 +36,7 @@
 #include <helper/time_support.h>
 #include "register.h"
 #include "image.h"
+#include "arm_opcodes.h"
 
 
 /*