X-Git-Url: https://review.openocd.org/gitweb?p=openocd.git;a=blobdiff_plain;f=src%2Ftarget%2Farm_opcodes.h;h=e94e8333b8e013a2251c0c2d096d97bfb308ea03;hp=58498ac26feee640bbf9dbd03d8e58c023f264d3;hb=7a3eec2b4d9dbb9533acfb271dbe91afa0727c8e;hpb=910dd664ceb6faef5e9029e9b0848d7ccc63bf4b diff --git a/src/target/arm_opcodes.h b/src/target/arm_opcodes.h index 58498ac26f..e94e8333b8 100644 --- a/src/target/arm_opcodes.h +++ b/src/target/arm_opcodes.h @@ -2,6 +2,9 @@ * Copyright (C) 2005 by Dominic Rath * Dominic.Rath@gmx.de * + * Copyright (C) 2006 by Magnus Lundin + * lundin@mlu.mine.nu + * * Copyright (C) 2008 by Spencer Oliver * spen@spen-soft.co.uk * @@ -19,12 +22,11 @@ * 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. + * along with this program. If not, see . */ -#ifndef __ARM_OPCODES_H -#define __ARM_OPCODES_H + +#ifndef OPENOCD_TARGET_ARM_OPCODES_H +#define OPENOCD_TARGET_ARM_OPCODES_H /** * @file @@ -83,6 +85,12 @@ #define ARMV4_5_MSR_IM(Im, Rotate, Field, R) \ (0xe320f000 | (Im) | ((Rotate) << 8) | ((Field) << 16) | ((R) << 22)) +/* Load Register Word Immediate Post-Index + * Rd: register to load + * Rn: base register + */ +#define ARMV4_5_LDRW_IP(Rd, Rn) (0xe4900004 | ((Rd) << 12) | ((Rn) << 16)) + /* Load Register Halfword Immediate Post-Index * Rd: register to load * Rn: base register @@ -95,6 +103,12 @@ */ #define ARMV4_5_LDRB_IP(Rd, Rn) (0xe4d00001 | ((Rd) << 12) | ((Rn) << 16)) +/* Store register Word Immediate Post-Index + * Rd: register to store + * Rn: base register + */ +#define ARMV4_5_STRW_IP(Rd, Rn) (0xe4800004 | ((Rd) << 12) | ((Rn) << 16)) + /* Store register Halfword Immediate Post-Index * Rd: register to store * Rn: base register @@ -118,6 +132,60 @@ */ #define ARMV4_5_BX(Rm) (0xe12fff10 | (Rm)) +/* Copies two words from two ARM core registers + * into a doubleword extension register, or + * from a doubleword extension register to two ARM core registers. + * See Armv7-A arch reference manual section A8.8.345 + * Rt: Arm core register 1 + * Rt2: Arm core register 2 + * Vm: The doubleword extension register + * M: m = UInt(M:Vm); + * op: to_arm_registers = (op == ‘1’); + */ +#define ARMV4_5_VMOV(op, Rt2, Rt, M, Vm) \ + (0xec400b10 | ((op) << 20) | ((Rt2) << 16) | \ + ((Rt) << 12) | ((M) << 5) | (Vm)) + +/* Moves the value of the FPSCR to an ARM core register + * Rt: Arm core register + */ +#define ARMV4_5_VMRS(Rt) (0xeef10a10 | ((Rt) << 12)) + +/* Moves the value of an ARM core register to the FPSCR. + * Rt: Arm core register + */ +#define ARMV4_5_VMSR(Rt) (0xeee10a10 | ((Rt) << 12)) + +/* Store data from coprocessor to consecutive memory + * See Armv7-A arch doc section A8.6.187 + * P: 1=index mode (offset from Rn) + * U: 1=add, 0=subtract Rn address with imm + * D: Opcode D encoding + * W: write back the offset start address to the Rn register + * CP: Coprocessor number (4 bits) + * CRd: Coprocessor source register (4 bits) + * Rn: Base register for memory address (4 bits) + * imm: Immediate value (0 - 1020, must be divisible by 4) + */ +#define ARMV4_5_STC(P, U, D, W, CP, CRd, Rn, imm) \ + (0xec000000 | ((P) << 24) | ((U) << 23) | ((D) << 22) | \ + ((W) << 21) | ((Rn) << 16) | ((CRd) << 12) | ((CP) << 8) | ((imm)>>2)) + +/* Loads data from consecutive memory to coprocessor + * See Armv7-A arch doc section A8.6.51 + * P: 1=index mode (offset from Rn) + * U: 1=add, 0=subtract Rn address with imm + * D: Opcode D encoding + * W: write back the offset start address to the Rn register + * CP: Coprocessor number (4 bits) + * CRd: Coprocessor dest register (4 bits) + * Rn: Base register for memory address (4 bits) + * imm: Immediate value (0 - 1020, must be divisible by 4) + */ +#define ARMV4_5_LDC(P, U, D, W, CP, CRd, Rn, imm) \ + (0xec100000 | ((P) << 24) | ((U) << 23) | ((D) << 22) | \ + ((W) << 21) | ((Rn) << 16) | ((CRd) << 12) | ((CP) << 8) | ((imm) >> 2)) + /* Move to ARM register from coprocessor * CP: Coprocessor number * op1: Coprocessor opcode @@ -145,7 +213,7 @@ /* Breakpoint instruction (ARMv5) * Im: 16-bit immediate */ -#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 8) | (Im & 0xf)) +#define ARMV5_BKPT(Im) (0xe1200070 | ((Im & 0xfff0) << 4) | (Im & 0xf)) /* Thumb mode instructions @@ -266,4 +334,4 @@ ((0xB660 | (0 << 8) | ((IF)&0x3)) \ | ((0xB660 | (0 << 8) | ((IF)&0x3)) << 16)) -#endif /* __ARM_OPCODES_H */ +#endif /* OPENOCD_TARGET_ARM_OPCODES_H */