portability fix: Switch binary literals to hex
[openocd.git] / src / target / armv8_opcodes.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 /*
4 * Copyright (C) 2015 by pierrr kuo <vichy.kuo@gmail.com>
5 */
6
7 #ifndef OPENOCD_TARGET_ARMV8_OPCODES_H
8 #define OPENOCD_TARGET_ARMV8_OPCODES_H
9
10 #include "arm_opcodes.h"
11
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
20
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
28
29 #define SYSTEM_DAIF 0xDA11
30 #define SYSTEM_DAIF_MASK 0x3C0
31 #define SYSTEM_DAIF_SHIFT 6
32
33 #define SYSTEM_ELR_EL1 0xC201
34 #define SYSTEM_ELR_EL2 0xE201
35 #define SYSTEM_ELR_EL3 0xF201
36
37 #define SYSTEM_SCTLR_EL1 0xC080
38 #define SYSTEM_SCTLR_EL2 0xE080
39 #define SYSTEM_SCTLR_EL3 0xF080
40
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
53
54 #define SYSTEM_SPSR_EL1 0xC200
55 #define SYSTEM_SPSR_EL2 0xE200
56 #define SYSTEM_SPSR_EL3 0xF200
57
58 #define SYSTEM_ISR_EL1 0xC608
59
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
65
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
71
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
77
78 #define SYSTEM_MPIDR 0xC005
79
80 #define SYSTEM_TCR_EL1 0xC102
81 #define SYSTEM_TCR_EL2 0xE102
82 #define SYSTEM_TCR_EL3 0xF102
83
84 #define SYSTEM_TTBR0_EL1 0xC100
85 #define SYSTEM_TTBR0_EL2 0xE100
86 #define SYSTEM_TTBR0_EL3 0xF100
87 #define SYSTEM_TTBR1_EL1 0xC101
88
89 /* ARMv8 address translation */
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
95
96 /* fault status and fault address */
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
103
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))
108
109 /* T32 instruction to access coprocessor registers */
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)
112
113 /* T32 instructions to access DSPSR and DLR */
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)
118
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
126
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
131
132 #define ARMV8_MRS(system, rt) (0xd5300000 | ((system) << 5) | (rt))
133 /* ARM V8 Move to system register. */
134 #define ARMV8_MSR_GP(system, rt) \
135 (0xd5100000 | ((system) << 5) | (rt))
136 /* ARM V8 Move immediate to process state field. */
137 #define ARMV8_MSR_IM(op1, crm, op2) \
138 (0xd500401f | ((op1) << 16) | ((crm) << 8) | ((op2) << 5))
139
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))
144
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))
149
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))
154
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)
159
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))
163
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)
168
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))
172
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)
175
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))
180
181 #define ARMV8_SYS(system, rt) (0xD5080000 | ((system) << 5) | rt)
182
183 enum armv8_opcode {
184 READ_REG_CTR,
185 READ_REG_CLIDR,
186 READ_REG_CSSELR,
187 READ_REG_CCSIDR,
188 WRITE_REG_CSSELR,
189 READ_REG_MPIDR,
190 READ_REG_DTRRX,
191 WRITE_REG_DTRTX,
192 WRITE_REG_DSPSR,
193 READ_REG_DSPSR,
194 ARMV8_OPC_DSB_SY,
195 ARMV8_OPC_DCPS,
196 ARMV8_OPC_DRPS,
197 ARMV8_OPC_ISB_SY,
198 ARMV8_OPC_DCCISW,
199 ARMV8_OPC_DCCIVAC,
200 ARMV8_OPC_ICIVAU,
201 ARMV8_OPC_HLT,
202 ARMV8_OPC_STRB_IP,
203 ARMV8_OPC_STRH_IP,
204 ARMV8_OPC_STRW_IP,
205 ARMV8_OPC_STRD_IP,
206 ARMV8_OPC_LDRB_IP,
207 ARMV8_OPC_LDRH_IP,
208 ARMV8_OPC_LDRW_IP,
209 ARMV8_OPC_LDRD_IP,
210 ARMV8_OPC_NUM,
211 };
212
213 extern uint32_t armv8_opcode(struct armv8_common *armv8, enum armv8_opcode);
214 extern void armv8_select_opcodes(struct armv8_common *armv8, bool state_is_aarch64);
215
216 #endif /* OPENOCD_TARGET_ARMV8_OPCODES_H */

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)