X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Ftarget%2Farm_opcodes.h;h=9a48e6d03acdde0fb906de6c44f2c5185d099512;hb=61f3d4b7e42897fb1570bd4307137833cce0f7ba;hp=b3b51433a8d55bbc311ebdcd43328a923250432c;hpb=a4a2808c2a849eddd5d7d454c048ffdfd89ca9c6;p=fw%2Fopenocd diff --git a/src/target/arm_opcodes.h b/src/target/arm_opcodes.h old mode 100644 new mode 100755 index b3b51433a..9a48e6d03 --- 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 * @@ -26,6 +29,11 @@ #ifndef __ARM_OPCODES_H #define __ARM_OPCODES_H +/** + * @file + * Macros used to generate various ARM or Thumb opcodes. + */ + /* ARM mode instructions */ /* Store multiple increment after @@ -78,6 +86,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 @@ -90,6 +104,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 @@ -145,9 +165,13 @@ /* 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. + * NOTE: these 16-bit opcodes fill both halves of a word with the same + * value. The reason for this is that when we need to execute Thumb + * opcodes on ARM7/ARM9 cores (to switch to ARM state on debug entry), + * we must shift 32 bits to the bus using scan chain 1 ... if we write + * both halves, we don't need to track which half matters. On ARMv6 and + * ARMv7 we don't execute Thumb instructions in debug mode; the ITR + * register does not accept Thumb (or Thumb2) opcodes. */ /* Store register (Thumb mode)