2022-06-27 03:04:43 -05:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
|
2016-09-02 03:38:08 -05:00
|
|
|
/*
|
2022-06-27 03:04:43 -05:00
|
|
|
* Copyright (C) 2015 by pierrr kuo <vichy.kuo@gmail.com>
|
2016-09-02 03:38:08 -05:00
|
|
|
*/
|
2022-06-27 03:04:43 -05:00
|
|
|
|
2016-09-02 03:38:08 -05:00
|
|
|
#ifndef OPENOCD_TARGET_ARMV8_OPCODES_H
|
|
|
|
#define OPENOCD_TARGET_ARMV8_OPCODES_H
|
|
|
|
|
|
|
|
#include "arm_opcodes.h"
|
|
|
|
|
|
|
|
#define SYSTEM_CUREL_MASK 0xC0
|
|
|
|
#define SYSTEM_CUREL_SHIFT 6
|
|
|
|
#define SYSTEM_CUREL_EL0 0x0
|
|
|
|
#define SYSTEM_CUREL_EL1 0x1
|
|
|
|
#define SYSTEM_CUREL_EL2 0x2
|
|
|
|
#define SYSTEM_CUREL_EL3 0x3
|
|
|
|
#define SYSTEM_CUREL_NONCH 0xF
|
|
|
|
#define SYSTEM_AARCH64 0x1
|
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define SYSTEM_AAR64_MODE_EL0T 0x0
|
|
|
|
#define SYSTEM_AAR64_MODE_EL1T 0x4
|
|
|
|
#define SYSTEM_AAR64_MODE_EL1H 0x5
|
|
|
|
#define SYSTEM_AAR64_MODE_EL2T 0x8
|
|
|
|
#define SYSTEM_AAR64_MODE_EL2H 0x9
|
|
|
|
#define SYSTEM_AAR64_MODE_EL3T 0xC
|
|
|
|
#define SYSTEM_AAR64_MODE_EL3H 0xd
|
2016-09-02 03:38:08 -05:00
|
|
|
|
|
|
|
#define SYSTEM_DAIF 0b1101101000010001
|
|
|
|
#define SYSTEM_DAIF_MASK 0x3C0
|
|
|
|
#define SYSTEM_DAIF_SHIFT 6
|
|
|
|
|
|
|
|
#define SYSTEM_ELR_EL1 0b1100001000000001
|
|
|
|
#define SYSTEM_ELR_EL2 0b1110001000000001
|
|
|
|
#define SYSTEM_ELR_EL3 0b1111001000000001
|
|
|
|
|
2016-11-14 05:18:43 -06:00
|
|
|
#define SYSTEM_SCTLR_EL1 0b1100000010000000
|
|
|
|
#define SYSTEM_SCTLR_EL2 0b1110000010000000
|
|
|
|
#define SYSTEM_SCTLR_EL3 0b1111000010000000
|
|
|
|
|
2016-09-02 03:38:08 -05:00
|
|
|
#define SYSTEM_FPCR 0b1101101000100000
|
|
|
|
#define SYSTEM_FPSR 0b1101101000100001
|
|
|
|
#define SYSTEM_DAIF 0b1101101000010001
|
|
|
|
#define SYSTEM_NZCV 0b1101101000010000
|
|
|
|
#define SYSTEM_SP_EL0 0b1100001000001000
|
|
|
|
#define SYSTEM_SP_EL1 0b1110001000001000
|
|
|
|
#define SYSTEM_SP_EL2 0b1111001000001000
|
|
|
|
#define SYSTEM_SP_SEL 0b1100001000010000
|
|
|
|
#define SYSTEM_SPSR_ABT 0b1110001000011001
|
|
|
|
#define SYSTEM_SPSR_FIQ 0b1110001000011011
|
|
|
|
#define SYSTEM_SPSR_IRQ 0b1110001000011000
|
|
|
|
#define SYSTEM_SPSR_UND 0b1110001000011010
|
|
|
|
|
|
|
|
#define SYSTEM_SPSR_EL1 0b1100001000000000
|
|
|
|
#define SYSTEM_SPSR_EL2 0b1110001000000000
|
|
|
|
#define SYSTEM_SPSR_EL3 0b1111001000000000
|
|
|
|
|
|
|
|
#define SYSTEM_ISR_EL1 0b1100011000001000
|
|
|
|
|
|
|
|
#define SYSTEM_DBG_DSPSR_EL0 0b1101101000101000
|
|
|
|
#define SYSTEM_DBG_DLR_EL0 0b1101101000101001
|
|
|
|
#define SYSTEM_DBG_DTRRX_EL0 0b1001100000101000
|
|
|
|
#define SYSTEM_DBG_DTRTX_EL0 0b1001100000101000
|
|
|
|
#define SYSTEM_DBG_DBGDTR_EL0 0b1001100000100000
|
|
|
|
|
|
|
|
#define SYSTEM_CCSIDR 0b1100100000000000
|
|
|
|
#define SYSTEM_CLIDR 0b1100100000000001
|
|
|
|
#define SYSTEM_CSSELR 0b1101000000000000
|
|
|
|
#define SYSTEM_CTYPE 0b1101100000000001
|
2016-09-22 14:29:42 -05:00
|
|
|
#define SYSTEM_CTR 0b1101100000000001
|
2016-09-02 03:38:08 -05:00
|
|
|
|
|
|
|
#define SYSTEM_DCCISW 0b0100001111110010
|
|
|
|
#define SYSTEM_DCCSW 0b0100001111010010
|
|
|
|
#define SYSTEM_ICIVAU 0b0101101110101001
|
|
|
|
#define SYSTEM_DCCVAU 0b0101101111011001
|
2016-09-20 04:16:30 -05:00
|
|
|
#define SYSTEM_DCCIVAC 0b0101101111110001
|
2016-09-02 03:38:08 -05:00
|
|
|
|
|
|
|
#define SYSTEM_MPIDR 0b1100000000000101
|
|
|
|
|
|
|
|
#define SYSTEM_TCR_EL1 0b1100000100000010
|
|
|
|
#define SYSTEM_TCR_EL2 0b1110000100000010
|
|
|
|
#define SYSTEM_TCR_EL3 0b1111000100000010
|
|
|
|
|
|
|
|
#define SYSTEM_TTBR0_EL1 0b1100000100000000
|
|
|
|
#define SYSTEM_TTBR0_EL2 0b1110000100000000
|
|
|
|
#define SYSTEM_TTBR0_EL3 0b1111000100000000
|
|
|
|
#define SYSTEM_TTBR1_EL1 0b1100000100000001
|
|
|
|
|
2016-10-06 08:05:53 -05:00
|
|
|
/* ARMv8 address translation */
|
|
|
|
#define SYSTEM_PAR_EL1 0b1100001110100000
|
|
|
|
#define SYSTEM_ATS12E0R 0b0110001111000110
|
|
|
|
#define SYSTEM_ATS12E1R 0b0110001111000100
|
|
|
|
#define SYSTEM_ATS1E2R 0b0110001111000000
|
|
|
|
#define SYSTEM_ATS1E3R 0b0111001111000000
|
|
|
|
|
2016-10-06 09:10:38 -05:00
|
|
|
/* fault status and fault address */
|
|
|
|
#define SYSTEM_FAR_EL1 0b1100001100000000
|
|
|
|
#define SYSTEM_FAR_EL2 0b1110001100000000
|
|
|
|
#define SYSTEM_FAR_EL3 0b1111001100000000
|
|
|
|
#define SYSTEM_ESR_EL1 0b1100001010010000
|
|
|
|
#define SYSTEM_ESR_EL2 0b1110001010010000
|
|
|
|
#define SYSTEM_ESR_EL3 0b1111001010010000
|
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MRS_DSPSR(rt) (0xd53b4500 | (rt))
|
|
|
|
#define ARMV8_MSR_DSPSR(rt) (0xd51b4500 | (rt))
|
|
|
|
#define ARMV8_MRS_DLR(rt) (0xd53b4520 | (rt))
|
|
|
|
#define ARMV8_MSR_DLR(rt) (0xd51b4520 | (rt))
|
2016-09-02 03:38:08 -05:00
|
|
|
|
2016-09-15 02:13:51 -05:00
|
|
|
/* T32 instruction to access coprocessor registers */
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MCR_T1(cp, crn, opc1, crm, opc2, rt) ARMV4_5_MCR(cp, opc1, rt, crn, crm, opc2)
|
|
|
|
#define ARMV8_MRC_T1(cp, crn, opc1, crm, opc2, rt) ARMV4_5_MRC(cp, opc1, rt, crn, crm, opc2)
|
2016-09-15 02:13:51 -05:00
|
|
|
|
|
|
|
/* T32 instructions to access DSPSR and DLR */
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MRC_DSPSR(rt) ARMV8_MRC_T1(15, 4, 3, 5, 0, rt)
|
|
|
|
#define ARMV8_MCR_DSPSR(rt) ARMV8_MCR_T1(15, 4, 3, 5, 0, rt)
|
|
|
|
#define ARMV8_MRC_DLR(rt) ARMV8_MRC_T1(15, 4, 3, 5, 1, rt)
|
|
|
|
#define ARMV8_MCR_DLR(rt) ARMV8_MCR_T1(15, 4, 3, 5, 1, rt)
|
|
|
|
|
|
|
|
#define ARMV8_DCPS1(im) (0xd4a00001 | (((im) & 0xFFFF) << 5))
|
|
|
|
#define ARMV8_DCPS2(im) (0xd4a00002 | (((im) & 0xFFFF) << 5))
|
|
|
|
#define ARMV8_DCPS3(im) (0xd4a00003 | (((im) & 0xFFFF) << 5))
|
|
|
|
#define ARMV8_DCPS(el, im) (0xd4a00000 | (((im) & 0xFFFF) << 5) | el)
|
|
|
|
#define ARMV8_DCPS_T1(el) (0xf78f8000 | el)
|
2016-10-20 04:31:40 -05:00
|
|
|
#define ARMV8_DRPS 0xd6bf03e0
|
|
|
|
#define ARMV8_ERET_T1 0xf3de8f00
|
2016-09-02 03:38:08 -05:00
|
|
|
|
2016-09-15 02:13:51 -05:00
|
|
|
#define ARMV8_DSB_SY 0xd5033F9F
|
|
|
|
#define ARMV8_DSB_SY_T1 0xf3bf8f4f
|
2016-10-20 09:23:40 -05:00
|
|
|
#define ARMV8_ISB 0xd5033fdf
|
|
|
|
#define ARMV8_ISB_SY_T1 0xf3bf8f6f
|
2016-09-15 02:13:51 -05:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MRS(system, rt) (0xd5300000 | ((system) << 5) | (rt))
|
2016-09-02 03:38:08 -05:00
|
|
|
/* ARM V8 Move to system register. */
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MSR_GP(system, rt) \
|
|
|
|
(0xd5100000 | ((system) << 5) | (rt))
|
2016-09-02 03:38:08 -05:00
|
|
|
/* ARM V8 Move immediate to process state field. */
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MSR_IM(op1, crm, op2) \
|
|
|
|
(0xd500401f | ((op1) << 16) | ((crm) << 8) | ((op2) << 5))
|
2016-09-16 06:46:08 -05:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MRS_T1(r, m1, rd, m) (0xF3E08020 | (r << 20) | (m1 << 16) | (rd << 8) | (m << 4))
|
2022-08-30 09:10:19 -05:00
|
|
|
#define ARMV8_MRS_XPSR_T1(r, rd) (0xF3EF8000 | (r << 20) | (rd << 8))
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MSR_GP_T1(r, m1, rd, m) (0xF3808020 | (r << 20) | (m1 << 8) | (rd << 16) | (m << 4))
|
2022-08-30 09:10:19 -05:00
|
|
|
#define ARMV8_MSR_GP_XPSR_T1(r, rn, mask) (0xF3808000 | (r << 20) | (rn << 16) | (mask << 8))
|
2016-10-06 09:10:38 -05:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_BKPT(im) (0xD4200000 | ((im & 0xffff) << 5))
|
|
|
|
#define ARMV8_HLT(im) (0x0D4400000 | ((im & 0xffff) << 5))
|
|
|
|
#define ARMV8_HLT_A1(im) (0xE1000070 | ((im & 0xFFF0) << 4) | (im & 0xF))
|
|
|
|
#define ARMV8_HLT_T1(im) (0xba80 | (im & 0x3f))
|
2016-09-16 06:46:08 -05:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MOVFSP_64(rt) ((1 << 31) | 0x11000000 | (0x1f << 5) | (rt))
|
|
|
|
#define ARMV8_MOVTSP_64(rt) ((1 << 31) | 0x11000000 | (rt << 5) | (0x1F))
|
|
|
|
#define ARMV8_MOVFSP_32(rt) (0x11000000 | (0x1f << 5) | (rt))
|
|
|
|
#define ARMV8_MOVTSP_32(rt) (0x11000000 | (rt << 5) | (0x1F))
|
2016-09-02 03:38:08 -05:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_LDRB_IP(rd, rn) (0x38401400 | (rn << 5) | rd)
|
|
|
|
#define ARMV8_LDRH_IP(rd, rn) (0x78402400 | (rn << 5) | rd)
|
|
|
|
#define ARMV8_LDRW_IP(rd, rn) (0xb8404400 | (rn << 5) | rd)
|
2017-11-26 15:31:55 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_LDRB_IP_T3(rd, rn) (0xf8100b01 | (rn << 16) | (rd << 12))
|
|
|
|
#define ARMV8_LDRH_IP_T3(rd, rn) (0xf8300b02 | (rn << 16) | (rd << 12))
|
|
|
|
#define ARMV8_LDRW_IP_T3(rd, rn) (0xf8500b04 | (rn << 16) | (rd << 12))
|
2019-12-09 05:47:07 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_STRB_IP(rd, rn) (0x38001400 | (rn << 5) | rd)
|
|
|
|
#define ARMV8_STRH_IP(rd, rn) (0x78002400 | (rn << 5) | rd)
|
|
|
|
#define ARMV8_STRW_IP(rd, rn) (0xb8004400 | (rn << 5) | rd)
|
2017-11-26 15:31:55 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_STRB_IP_T3(rd, rn) (0xf8000b01 | (rn << 16) | (rd << 12))
|
|
|
|
#define ARMV8_STRH_IP_T3(rd, rn) (0xf8200b02 | (rn << 16) | (rd << 12))
|
|
|
|
#define ARMV8_STRW_IP_T3(rd, rn) (0xf8400b04 | (rn << 16) | (rd << 12))
|
2019-12-09 05:47:07 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MOV_GPR_VFP(rd, rn, index) (0x4e083c00 | (index << 20) | (rn << 5) | rd)
|
|
|
|
#define ARMV8_MOV_VFP_GPR(rd, rn, index) (0x4e081c00 | (index << 20) | (rn << 5) | rd)
|
2018-01-21 16:26:01 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_MRS_FPCR(rt) (0xd53b4400 | (rt))
|
|
|
|
#define ARMV8_MRS_FPSR(rt) (0xd53b4420 | (rt))
|
|
|
|
#define ARMV8_MSR_FPCR(rt) (0xd51b4400 | (rt))
|
|
|
|
#define ARMV8_MSR_FPSR(rt) (0xd51b4420 | (rt))
|
2018-01-21 16:26:01 -06:00
|
|
|
|
2021-04-27 17:25:03 -05:00
|
|
|
#define ARMV8_SYS(system, rt) (0xD5080000 | ((system) << 5) | rt)
|
2016-09-02 03:38:08 -05:00
|
|
|
|
2016-09-15 02:13:51 -05:00
|
|
|
enum armv8_opcode {
|
2016-10-20 06:20:26 -05:00
|
|
|
READ_REG_CTR,
|
2016-09-15 02:13:51 -05:00
|
|
|
READ_REG_CLIDR,
|
|
|
|
READ_REG_CSSELR,
|
|
|
|
READ_REG_CCSIDR,
|
|
|
|
WRITE_REG_CSSELR,
|
|
|
|
READ_REG_MPIDR,
|
|
|
|
READ_REG_DTRRX,
|
|
|
|
WRITE_REG_DTRTX,
|
|
|
|
WRITE_REG_DSPSR,
|
|
|
|
READ_REG_DSPSR,
|
|
|
|
ARMV8_OPC_DSB_SY,
|
2016-10-20 04:31:40 -05:00
|
|
|
ARMV8_OPC_DCPS,
|
|
|
|
ARMV8_OPC_DRPS,
|
2016-10-20 09:23:40 -05:00
|
|
|
ARMV8_OPC_ISB_SY,
|
2016-10-26 10:32:43 -05:00
|
|
|
ARMV8_OPC_DCCISW,
|
|
|
|
ARMV8_OPC_DCCIVAC,
|
|
|
|
ARMV8_OPC_ICIVAU,
|
|
|
|
ARMV8_OPC_HLT,
|
2017-11-26 15:31:55 -06:00
|
|
|
ARMV8_OPC_STRB_IP,
|
|
|
|
ARMV8_OPC_STRH_IP,
|
|
|
|
ARMV8_OPC_STRW_IP,
|
|
|
|
ARMV8_OPC_LDRB_IP,
|
|
|
|
ARMV8_OPC_LDRH_IP,
|
|
|
|
ARMV8_OPC_LDRW_IP,
|
2016-09-15 02:13:51 -05:00
|
|
|
ARMV8_OPC_NUM,
|
|
|
|
};
|
|
|
|
|
|
|
|
extern uint32_t armv8_opcode(struct armv8_common *armv8, enum armv8_opcode);
|
|
|
|
extern void armv8_select_opcodes(struct armv8_common *armv8, bool state_is_aarch64);
|
|
|
|
|
|
|
|
#endif /* OPENOCD_TARGET_ARMV8_OPCODES_H */
|