a1fb5d4d0018711d5a5716ab2d9f7398989ea394
[openocd.git] / src / target / armv8_opcodes.h
1 /*
2 * Copyright (C) 2015 by pierrr kuo
3 * vichy.kuo@gmail.com
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 */
15 #ifndef OPENOCD_TARGET_ARMV8_OPCODES_H
16 #define OPENOCD_TARGET_ARMV8_OPCODES_H
17
18 #include "arm_opcodes.h"
19
20 /* ARM V8 Move from system register to general purpose register
21 * R = 1: SPSR R = 0: CPSR
22 * Rn: target register
23 */
24 #define SYSTEM_CUREL 0b1100001000010010
25 #define SYSTEM_CUREL_MASK 0xC0
26 #define SYSTEM_CUREL_SHIFT 6
27 #define SYSTEM_CUREL_EL0 0x0
28 #define SYSTEM_CUREL_EL1 0x1
29 #define SYSTEM_CUREL_EL2 0x2
30 #define SYSTEM_CUREL_EL3 0x3
31 #define SYSTEM_CUREL_NONCH 0xF
32 #define SYSTEM_AARCH64 0x1
33
34 #define SYSTEM_AAR64_MODE_EL0t 0x0
35 #define SYSTEM_AAR64_MODE_EL1t 0x4
36 #define SYSTEM_AAR64_MODE_EL1h 0x5
37 #define SYSTEM_AAR64_MODE_EL2t 0x8
38 #define SYSTEM_AAR64_MODE_EL2h 0x9
39 #define SYSTEM_AAR64_MODE_EL3t 0xC
40 #define SYSTEM_AAR64_MODE_EL3h 0xd
41
42 #define SYSTEM_DAIF 0b1101101000010001
43 #define SYSTEM_DAIF_MASK 0x3C0
44 #define SYSTEM_DAIF_SHIFT 6
45
46 #define SYSTEM_ELR_EL1 0b1100001000000001
47 #define SYSTEM_ELR_EL2 0b1110001000000001
48 #define SYSTEM_ELR_EL3 0b1111001000000001
49
50 #define SYSTEM_FPCR 0b1101101000100000
51 #define SYSTEM_FPSR 0b1101101000100001
52 #define SYSTEM_DAIF 0b1101101000010001
53 #define SYSTEM_NZCV 0b1101101000010000
54 #define SYSTEM_SP_EL0 0b1100001000001000
55 #define SYSTEM_SP_EL1 0b1110001000001000
56 #define SYSTEM_SP_EL2 0b1111001000001000
57 #define SYSTEM_SP_SEL 0b1100001000010000
58 #define SYSTEM_SPSR_ABT 0b1110001000011001
59 #define SYSTEM_SPSR_FIQ 0b1110001000011011
60 #define SYSTEM_SPSR_IRQ 0b1110001000011000
61 #define SYSTEM_SPSR_UND 0b1110001000011010
62
63 #define SYSTEM_SPSR_EL1 0b1100001000000000
64 #define SYSTEM_SPSR_EL2 0b1110001000000000
65 #define SYSTEM_SPSR_EL3 0b1111001000000000
66
67 #define SYSTEM_ISR_EL1 0b1100011000001000
68
69
70 #define SYSTEM_DBG_DSPSR_EL0 0b1101101000101000
71 #define SYSTEM_DBG_DLR_EL0 0b1101101000101001
72 #define SYSTEM_DBG_DTRRX_EL0 0b1001100000101000
73 #define SYSTEM_DBG_DTRTX_EL0 0b1001100000101000
74 #define SYSTEM_DBG_DBGDTR_EL0 0b1001100000100000
75
76 #define SYSTEM_CCSIDR 0b1100100000000000
77 #define SYSTEM_CLIDR 0b1100100000000001
78 #define SYSTEM_CSSELR 0b1101000000000000
79 #define SYSTEM_CTYPE 0b1101100000000001
80
81 #define SYSTEM_DCCISW 0b0100001111110010
82 #define SYSTEM_DCCSW 0b0100001111010010
83 #define SYSTEM_ICIVAU 0b0101101110101001
84 #define SYSTEM_DCCVAU 0b0101101111011001
85
86 #define SYSTEM_MPIDR 0b1100000000000101
87
88 #define SYSTEM_TCR_EL1 0b1100000100000010
89 #define SYSTEM_TCR_EL2 0b1110000100000010
90 #define SYSTEM_TCR_EL3 0b1111000100000010
91
92 #define SYSTEM_TTBR0_EL1 0b1100000100000000
93 #define SYSTEM_TTBR0_EL2 0b1110000100000000
94 #define SYSTEM_TTBR0_EL3 0b1111000100000000
95 #define SYSTEM_TTBR1_EL1 0b1100000100000001
96
97
98
99 #define ARMV8_MRS_DSPSR(Rt) (0xd53b4500 | (Rt))
100 #define ARMV8_MSR_DSPSR(Rt) (0xd51b4500 | (Rt))
101 #define ARMV8_MRS_DLR(Rt) (0xd53b4520 | (Rt))
102 #define ARMV8_MSR_DLR(Rt) (0xd51b4520 | (Rt))
103
104 /* T32 ITR format */
105 #define T32_FMTITR(instr) (((instr & 0x0000FFFF) << 16) | ((instr & 0xFFFF0000) >> 16))
106
107 #define ARMV8_DCPS1(IM) (0xd4a00001 | (((IM) & 0xFFFF) << 5))
108 #define ARMV8_DCPS2(IM) (0xd4a00002 | (((IM) & 0xFFFF) << 5))
109 #define ARMV8_DCPS3(IM) (0xd4a00003 | (((IM) & 0xFFFF) << 5))
110
111 #define DSB_SY 0xd5033F9F
112 #define ARMV8_MRS(System, Rt) (0xd5300000 | ((System) << 5) | (Rt))
113 /* ARM V8 Move to system register. */
114 #define ARMV8_MSR_GP(System, Rt) \
115 (0xd5100000 | ((System) << 5) | (Rt))
116 /* ARM V8 Move immediate to process state field. */
117 #define ARMV8_MSR_IM(Op1, CRm, Op2) \
118 (0xd500401f | ((Op1) << 16) | ((CRm) << 8) | ((Op2) << 5))
119
120 #define ARMV8_BKPT(Im) (0xD4200000 | ((Im & 0xffff) << 5))
121 #define ARMV8_HLT(Im) (0x0D4400000 | ((Im & 0xffff) << 5))
122
123 #define ARMV8_MOVFSP_64(Rt) ((1 << 31) | 0x11000000 | (0x1f << 5) | (Rt))
124 #define ARMV8_MOVTSP_64(Rt) ((1 << 31) | 0x11000000 | (Rt << 5) | (0x1F))
125 #define ARMV8_MOVFSP_32(Rt) (0x11000000 | (0x1f << 5) | (Rt))
126 #define ARMV8_MOVTSP_32(Rt) (0x11000000 | (Rt << 5) | (0x1F))
127
128
129 #endif /* __ARM_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)