7 #ifndef OPENOCD_TARGET_ARMV8_OPCODES_H
8 #define OPENOCD_TARGET_ARMV8_OPCODES_H
12 #define SYSTEM_CUREL_MASK 0xC0
13 #define SYSTEM_CUREL_SHIFT 6
14 #define SYSTEM_CUREL_EL0 0x0
15 #define SYSTEM_CUREL_EL1 0x1
16 #define SYSTEM_CUREL_EL2 0x2
17 #define SYSTEM_CUREL_EL3 0x3
18 #define SYSTEM_CUREL_NONCH 0xF
19 #define SYSTEM_AARCH64 0x1
21 #define SYSTEM_AAR64_MODE_EL0T 0x0
22 #define SYSTEM_AAR64_MODE_EL1T 0x4
23 #define SYSTEM_AAR64_MODE_EL1H 0x5
24 #define SYSTEM_AAR64_MODE_EL2T 0x8
25 #define SYSTEM_AAR64_MODE_EL2H 0x9
26 #define SYSTEM_AAR64_MODE_EL3T 0xC
27 #define SYSTEM_AAR64_MODE_EL3H 0xd
29 #define SYSTEM_DAIF 0xDA11
30 #define SYSTEM_DAIF_MASK 0x3C0
31 #define SYSTEM_DAIF_SHIFT 6
33 #define SYSTEM_ELR_EL1 0xC201
34 #define SYSTEM_ELR_EL2 0xE201
35 #define SYSTEM_ELR_EL3 0xF201
37 #define SYSTEM_SCTLR_EL1 0xC080
38 #define SYSTEM_SCTLR_EL2 0xE080
39 #define SYSTEM_SCTLR_EL3 0xF080
41 #define SYSTEM_FPCR 0xDA20
42 #define SYSTEM_FPSR 0xDA21
43 #define SYSTEM_DAIF 0xDA11
44 #define SYSTEM_NZCV 0xDA10
45 #define SYSTEM_SP_EL0 0xC208
46 #define SYSTEM_SP_EL1 0xE208
47 #define SYSTEM_SP_EL2 0xF208
48 #define SYSTEM_SP_SEL 0xC210
49 #define SYSTEM_SPSR_ABT 0xE219
50 #define SYSTEM_SPSR_FIQ 0xE21B
51 #define SYSTEM_SPSR_IRQ 0xE218
52 #define SYSTEM_SPSR_UND 0xE21A
54 #define SYSTEM_SPSR_EL1 0xC200
55 #define SYSTEM_SPSR_EL2 0xE200
56 #define SYSTEM_SPSR_EL3 0xF200
58 #define SYSTEM_ISR_EL1 0xC608
60 #define SYSTEM_DBG_DSPSR_EL0 0xDA28
61 #define SYSTEM_DBG_DLR_EL0 0xDA29
62 #define SYSTEM_DBG_DTRRX_EL0 0x9828
63 #define SYSTEM_DBG_DTRTX_EL0 0x9828
64 #define SYSTEM_DBG_DBGDTR_EL0 0x9820
66 #define SYSTEM_CCSIDR 0xC800
67 #define SYSTEM_CLIDR 0xC801
68 #define SYSTEM_CSSELR 0xD000
69 #define SYSTEM_CTYPE 0xD801
70 #define SYSTEM_CTR 0xD801
72 #define SYSTEM_DCCISW 0x43F2
73 #define SYSTEM_DCCSW 0x43D2
74 #define SYSTEM_ICIVAU 0x5BA9
75 #define SYSTEM_DCCVAU 0x5BD9
76 #define SYSTEM_DCCIVAC 0x5BF1
78 #define SYSTEM_MPIDR 0xC005
80 #define SYSTEM_TCR_EL1 0xC102
81 #define SYSTEM_TCR_EL2 0xE102
82 #define SYSTEM_TCR_EL3 0xF102
84 #define SYSTEM_TTBR0_EL1 0xC100
85 #define SYSTEM_TTBR0_EL2 0xE100
86 #define SYSTEM_TTBR0_EL3 0xF100
87 #define SYSTEM_TTBR1_EL1 0xC101
90 #define SYSTEM_PAR_EL1 0xC3A0
91 #define SYSTEM_ATS12E0R 0x63C6
92 #define SYSTEM_ATS12E1R 0x63C4
93 #define SYSTEM_ATS1E2R 0x63C0
94 #define SYSTEM_ATS1E3R 0x73C0
97 #define SYSTEM_FAR_EL1 0xC300
98 #define SYSTEM_FAR_EL2 0xE300
99 #define SYSTEM_FAR_EL3 0xF300
100 #define SYSTEM_ESR_EL1 0xC290
101 #define SYSTEM_ESR_EL2 0xE290
102 #define SYSTEM_ESR_EL3 0xF290
104 #define ARMV8_MRS_DSPSR(rt) (0xd53b4500 | (rt))
105 #define ARMV8_MSR_DSPSR(rt) (0xd51b4500 | (rt))
106 #define ARMV8_MRS_DLR(rt) (0xd53b4520 | (rt))
107 #define ARMV8_MSR_DLR(rt) (0xd51b4520 | (rt))
110 #define ARMV8_MCR_T1(cp, crn, opc1, crm, opc2, rt) ARMV4_5_MCR(cp, opc1, rt, crn, crm, opc2)
111 #define ARMV8_MRC_T1(cp, crn, opc1, crm, opc2, rt) ARMV4_5_MRC(cp, opc1, rt, crn, crm, opc2)
114 #define ARMV8_MRC_DSPSR(rt) ARMV8_MRC_T1(15, 4, 3, 5, 0, rt)
115 #define ARMV8_MCR_DSPSR(rt) ARMV8_MCR_T1(15, 4, 3, 5, 0, rt)
116 #define ARMV8_MRC_DLR(rt) ARMV8_MRC_T1(15, 4, 3, 5, 1, rt)
117 #define ARMV8_MCR_DLR(rt) ARMV8_MCR_T1(15, 4, 3, 5, 1, rt)
119 #define ARMV8_DCPS1(im) (0xd4a00001 | (((im) & 0xFFFF) << 5))
120 #define ARMV8_DCPS2(im) (0xd4a00002 | (((im) & 0xFFFF) << 5))
121 #define ARMV8_DCPS3(im) (0xd4a00003 | (((im) & 0xFFFF) << 5))
122 #define ARMV8_DCPS(el, im) (0xd4a00000 | (((im) & 0xFFFF) << 5) | el)
123 #define ARMV8_DCPS_T1(el) (0xf78f8000 | el)
124 #define ARMV8_DRPS 0xd6bf03e0
125 #define ARMV8_ERET_T1 0xf3de8f00
127 #define ARMV8_DSB_SY 0xd5033F9F
128 #define ARMV8_DSB_SY_T1 0xf3bf8f4f
129 #define ARMV8_ISB 0xd5033fdf
130 #define ARMV8_ISB_SY_T1 0xf3bf8f6f
132 #define ARMV8_MRS(system, rt) (0xd5300000 | ((system) << 5) | (rt))
134 #define ARMV8_MSR_GP(system, rt) \
135 (0xd5100000 | ((system) << 5) | (rt))
137 #define ARMV8_MSR_IM(op1, crm, op2) \
138 (0xd500401f | ((op1) << 16) | ((crm) << 8) | ((op2) << 5))
140 #define ARMV8_MRS_T1(r, m1, rd, m) (0xF3E08020 | (r << 20) | (m1 << 16) | (rd << 8) | (m << 4))
141 #define ARMV8_MRS_XPSR_T1(r, rd) (0xF3EF8000 | (r << 20) | (rd << 8))
142 #define ARMV8_MSR_GP_T1(r, m1, rd, m) (0xF3808020 | (r << 20) | (m1 << 8) | (rd << 16) | (m << 4))
143 #define ARMV8_MSR_GP_XPSR_T1(r, rn, mask) (0xF3808000 | (r << 20) | (rn << 16) | (mask << 8))
145 #define ARMV8_BKPT(im) (0xD4200000 | ((im & 0xffff) << 5))
146 #define ARMV8_HLT(im) (0x0D4400000 | ((im & 0xffff) << 5))
147 #define ARMV8_HLT_A1(im) (0xE1000070 | ((im & 0xFFF0) << 4) | (im & 0xF))
148 #define ARMV8_HLT_T1(im) (0xba80 | (im & 0x3f))
150 #define ARMV8_MOVFSP_64(rt) ((1 << 31) | 0x11000000 | (0x1f << 5) | (rt))
151 #define ARMV8_MOVTSP_64(rt) ((1 << 31) | 0x11000000 | (rt << 5) | (0x1F))
152 #define ARMV8_MOVFSP_32(rt) (0x11000000 | (0x1f << 5) | (rt))
153 #define ARMV8_MOVTSP_32(rt) (0x11000000 | (rt << 5) | (0x1F))
155 #define ARMV8_LDRB_IP(rd, rn) (0x38401400 | (rn << 5) | rd)
156 #define ARMV8_LDRH_IP(rd, rn) (0x78402400 | (rn << 5) | rd)
157 #define ARMV8_LDRW_IP(rd, rn) (0xb8404400 | (rn << 5) | rd)
158 #define ARMV8_LDRD_IP(rd, rn) (0xf8408400 | (rn << 5) | rd)
160 #define ARMV8_LDRB_IP_T3(rd, rn) (0xf8100b01 | (rn << 16) | (rd << 12))
161 #define ARMV8_LDRH_IP_T3(rd, rn) (0xf8300b02 | (rn << 16) | (rd << 12))
162 #define ARMV8_LDRW_IP_T3(rd, rn) (0xf8500b04 | (rn << 16) | (rd << 12))
164 #define ARMV8_STRB_IP(rd, rn) (0x38001400 | (rn << 5) | rd)
165 #define ARMV8_STRH_IP(rd, rn) (0x78002400 | (rn << 5) | rd)
166 #define ARMV8_STRW_IP(rd, rn) (0xb8004400 | (rn << 5) | rd)
167 #define ARMV8_STRD_IP(rd, rn) (0xf8008400 | (rn << 5) | rd)
169 #define ARMV8_STRB_IP_T3(rd, rn) (0xf8000b01 | (rn << 16) | (rd << 12))
170 #define ARMV8_STRH_IP_T3(rd, rn) (0xf8200b02 | (rn << 16) | (rd << 12))
171 #define ARMV8_STRW_IP_T3(rd, rn) (0xf8400b04 | (rn << 16) | (rd << 12))
173 #define ARMV8_MOV_GPR_VFP(rd, rn, index) (0x4e083c00 | (index << 20) | (rn << 5) | rd)
174 #define ARMV8_MOV_VFP_GPR(rd, rn, index) (0x4e081c00 | (index << 20) | (rn << 5) | rd)
176 #define ARMV8_MRS_FPCR(rt) (0xd53b4400 | (rt))
177 #define ARMV8_MRS_FPSR(rt) (0xd53b4420 | (rt))
178 #define ARMV8_MSR_FPCR(rt) (0xd51b4400 | (rt))
179 #define ARMV8_MSR_FPSR(rt) (0xd51b4420 | (rt))
181 #define ARMV8_SYS(system, rt) (0xD5080000 | ((system) << 5) | rt)
Macros used to generate various ARM or Thumb opcodes.
void armv8_select_opcodes(struct armv8_common *armv8, bool state_is_aarch64)