Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) // SPDX-License-Identifier: GPL-2.0-only
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * arch/arm/probes/decode-thumb.c
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * Copyright (C) 2011 Jon Medhurst <tixy@yxit.co.uk>.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8) #include <linux/stddef.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9) #include <linux/kernel.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10) #include <linux/module.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12) #include "decode.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13) #include "decode-thumb.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16) static const union decode_item t32_table_1110_100x_x0xx[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17) 	/* Load/store multiple instructions */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19) 	/* Rn is PC		1110 100x x0xx 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20) 	DECODE_REJECT	(0xfe4f0000, 0xe80f0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 	/* SRS			1110 1000 00x0 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) 	/* RFE			1110 1000 00x1 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 	DECODE_REJECT	(0xffc00000, 0xe8000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) 	/* SRS			1110 1001 10x0 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) 	/* RFE			1110 1001 10x1 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 	DECODE_REJECT	(0xffc00000, 0xe9800000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	/* STM Rn, {...pc}	1110 100x x0x0 xxxx 1xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	DECODE_REJECT	(0xfe508000, 0xe8008000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	/* LDM Rn, {...lr,pc}	1110 100x x0x1 xxxx 11xx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 	DECODE_REJECT	(0xfe50c000, 0xe810c000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 	/* LDM/STM Rn, {...sp}	1110 100x x0xx xxxx xx1x xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	DECODE_REJECT	(0xfe402000, 0xe8002000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 	/* STMIA		1110 1000 10x0 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) 	/* LDMIA		1110 1000 10x1 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	/* STMDB		1110 1001 00x0 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	/* LDMDB		1110 1001 00x1 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 	DECODE_CUSTOM	(0xfe400000, 0xe8000000, PROBES_T32_LDMSTM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) static const union decode_item t32_table_1110_100x_x1xx[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) 	/* Load/store dual, load/store exclusive, table branch */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	/* STRD (immediate)	1110 1000 x110 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	/* LDRD (immediate)	1110 1000 x111 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) 	DECODE_OR	(0xff600000, 0xe8600000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 	/* STRD (immediate)	1110 1001 x1x0 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) 	/* LDRD (immediate)	1110 1001 x1x1 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	DECODE_EMULATEX	(0xff400000, 0xe9400000, PROBES_T32_LDRDSTRD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 						 REGS(NOPCWB, NOSPPC, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	/* TBB			1110 1000 1101 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	/* TBH			1110 1000 1101 xxxx xxxx xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	DECODE_SIMULATEX(0xfff000e0, 0xe8d00000, PROBES_T32_TABLE_BRANCH,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) 						 REGS(NOSP, 0, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) 	/* STREX		1110 1000 0100 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	/* LDREX		1110 1000 0101 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	/* STREXB		1110 1000 1100 xxxx xxxx xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 	/* STREXH		1110 1000 1100 xxxx xxxx xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	/* STREXD		1110 1000 1100 xxxx xxxx xxxx 0111 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	/* LDREXB		1110 1000 1101 xxxx xxxx xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	/* LDREXH		1110 1000 1101 xxxx xxxx xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) 	/* LDREXD		1110 1000 1101 xxxx xxxx xxxx 0111 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) 	/* And unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) static const union decode_item t32_table_1110_101x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	/* Data-processing (shifted register)				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	/* TST			1110 1010 0001 xxxx xxxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	/* TEQ			1110 1010 1001 xxxx xxxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	DECODE_EMULATEX	(0xff700f00, 0xea100f00, PROBES_T32_TST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 						 REGS(NOSPPC, 0, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 	/* CMN			1110 1011 0001 xxxx xxxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	DECODE_OR	(0xfff00f00, 0xeb100f00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	/* CMP			1110 1011 1011 xxxx xxxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	DECODE_EMULATEX	(0xfff00f00, 0xebb00f00, PROBES_T32_TST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 						 REGS(NOPC, 0, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) 	/* MOV			1110 1010 010x 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) 	/* MVN			1110 1010 011x 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) 	DECODE_EMULATEX	(0xffcf0000, 0xea4f0000, PROBES_T32_MOV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) 						 REGS(0, 0, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) 	/* ???			1110 1010 101x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) 	/* ???			1110 1010 111x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 	DECODE_REJECT	(0xffa00000, 0xeaa00000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	/* ???			1110 1011 001x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 	DECODE_REJECT	(0xffe00000, 0xeb200000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	/* ???			1110 1011 100x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) 	DECODE_REJECT	(0xffe00000, 0xeb800000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) 	/* ???			1110 1011 111x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) 	DECODE_REJECT	(0xffe00000, 0xebe00000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) 	/* ADD/SUB SP, SP, Rm, LSL #0..3				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	/*			1110 1011 x0xx 1101 x000 1101 xx00 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 	DECODE_EMULATEX	(0xff4f7f30, 0xeb0d0d00, PROBES_T32_ADDSUB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 						 REGS(SP, 0, SP, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) 	/* ADD/SUB SP, SP, Rm, shift					*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) 	/*			1110 1011 x0xx 1101 xxxx 1101 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) 	DECODE_REJECT	(0xff4f0f00, 0xeb0d0d00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) 	/* ADD/SUB Rd, SP, Rm, shift					*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	/*			1110 1011 x0xx 1101 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) 	DECODE_EMULATEX	(0xff4f0000, 0xeb0d0000, PROBES_T32_ADDSUB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) 						 REGS(SP, 0, NOPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) 	/* AND			1110 1010 000x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) 	/* BIC			1110 1010 001x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) 	/* ORR			1110 1010 010x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) 	/* ORN			1110 1010 011x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	/* EOR			1110 1010 100x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) 	/* PKH			1110 1010 110x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) 	/* ADD			1110 1011 000x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 	/* ADC			1110 1011 010x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	/* SBC			1110 1011 011x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	/* SUB			1110 1011 101x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 	/* RSB			1110 1011 110x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) 	DECODE_EMULATEX	(0xfe000000, 0xea000000, PROBES_T32_LOGICAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 						 REGS(NOSPPC, 0, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) static const union decode_item t32_table_1111_0x0x___0[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) 	/* Data-processing (modified immediate)				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 	/* TST			1111 0x00 0001 xxxx 0xxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) 	/* TEQ			1111 0x00 1001 xxxx 0xxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) 	DECODE_EMULATEX	(0xfb708f00, 0xf0100f00, PROBES_T32_TST,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) 						 REGS(NOSPPC, 0, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) 	/* CMN			1111 0x01 0001 xxxx 0xxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) 	DECODE_OR	(0xfbf08f00, 0xf1100f00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) 	/* CMP			1111 0x01 1011 xxxx 0xxx 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 	DECODE_EMULATEX	(0xfbf08f00, 0xf1b00f00, PROBES_T32_CMP,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) 						 REGS(NOPC, 0, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) 	/* MOV			1111 0x00 010x 1111 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) 	/* MVN			1111 0x00 011x 1111 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) 	DECODE_EMULATEX	(0xfbcf8000, 0xf04f0000, PROBES_T32_MOV,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) 						 REGS(0, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) 	/* ???			1111 0x00 101x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) 	DECODE_REJECT	(0xfbe08000, 0xf0a00000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) 	/* ???			1111 0x00 110x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) 	/* ???			1111 0x00 111x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) 	DECODE_REJECT	(0xfbc08000, 0xf0c00000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) 	/* ???			1111 0x01 001x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) 	DECODE_REJECT	(0xfbe08000, 0xf1200000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) 	/* ???			1111 0x01 100x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) 	DECODE_REJECT	(0xfbe08000, 0xf1800000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) 	/* ???			1111 0x01 111x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) 	DECODE_REJECT	(0xfbe08000, 0xf1e00000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) 	/* ADD Rd, SP, #imm	1111 0x01 000x 1101 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) 	/* SUB Rd, SP, #imm	1111 0x01 101x 1101 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) 	DECODE_EMULATEX	(0xfb4f8000, 0xf10d0000, PROBES_T32_ADDSUB,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) 						 REGS(SP, 0, NOPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) 	/* AND			1111 0x00 000x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) 	/* BIC			1111 0x00 001x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 	/* ORR			1111 0x00 010x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) 	/* ORN			1111 0x00 011x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) 	/* EOR			1111 0x00 100x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) 	/* ADD			1111 0x01 000x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) 	/* ADC			1111 0x01 010x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) 	/* SBC			1111 0x01 011x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) 	/* SUB			1111 0x01 101x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) 	/* RSB			1111 0x01 110x xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 	DECODE_EMULATEX	(0xfa008000, 0xf0000000, PROBES_T32_LOGICAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) 						 REGS(NOSPPC, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) static const union decode_item t32_table_1111_0x1x___0[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) 	/* Data-processing (plain binary immediate)			*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) 	/* ADDW Rd, PC, #imm	1111 0x10 0000 1111 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) 	DECODE_OR	(0xfbff8000, 0xf20f0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) 	/* SUBW	Rd, PC, #imm	1111 0x10 1010 1111 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) 	DECODE_EMULATEX	(0xfbff8000, 0xf2af0000, PROBES_T32_ADDWSUBW_PC,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) 						 REGS(PC, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) 	/* ADDW SP, SP, #imm	1111 0x10 0000 1101 0xxx 1101 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) 	DECODE_OR	(0xfbff8f00, 0xf20d0d00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) 	/* SUBW	SP, SP, #imm	1111 0x10 1010 1101 0xxx 1101 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) 	DECODE_EMULATEX	(0xfbff8f00, 0xf2ad0d00, PROBES_T32_ADDWSUBW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) 						 REGS(SP, 0, SP, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) 	/* ADDW			1111 0x10 0000 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) 	DECODE_OR	(0xfbf08000, 0xf2000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) 	/* SUBW			1111 0x10 1010 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) 	DECODE_EMULATEX	(0xfbf08000, 0xf2a00000, PROBES_T32_ADDWSUBW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) 						 REGS(NOPCX, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) 	/* MOVW			1111 0x10 0100 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) 	/* MOVT			1111 0x10 1100 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) 	DECODE_EMULATEX	(0xfb708000, 0xf2400000, PROBES_T32_MOVW,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) 						 REGS(0, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) 	/* SSAT16		1111 0x11 0010 xxxx 0000 xxxx 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) 	/* SSAT			1111 0x11 00x0 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) 	/* USAT16		1111 0x11 1010 xxxx 0000 xxxx 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) 	/* USAT			1111 0x11 10x0 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) 	DECODE_EMULATEX	(0xfb508000, 0xf3000000, PROBES_T32_SAT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) 						 REGS(NOSPPC, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) 	/* SFBX			1111 0x11 0100 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) 	/* UFBX			1111 0x11 1100 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) 	DECODE_EMULATEX	(0xfb708000, 0xf3400000, PROBES_T32_BITFIELD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) 						 REGS(NOSPPC, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) 	/* BFC			1111 0x11 0110 1111 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) 	DECODE_EMULATEX	(0xfbff8000, 0xf36f0000, PROBES_T32_BITFIELD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) 						 REGS(0, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) 	/* BFI			1111 0x11 0110 xxxx 0xxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) 	DECODE_EMULATEX	(0xfbf08000, 0xf3600000, PROBES_T32_BITFIELD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) 						 REGS(NOSPPCX, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) static const union decode_item t32_table_1111_0xxx___1[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) 	/* Branches and miscellaneous control				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 	/* YIELD		1111 0011 1010 xxxx 10x0 x000 0000 0001 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) 	DECODE_OR	(0xfff0d7ff, 0xf3a08001),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) 	/* SEV			1111 0011 1010 xxxx 10x0 x000 0000 0100 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) 	DECODE_EMULATE	(0xfff0d7ff, 0xf3a08004, PROBES_T32_SEV),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 	/* NOP			1111 0011 1010 xxxx 10x0 x000 0000 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) 	/* WFE			1111 0011 1010 xxxx 10x0 x000 0000 0010 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) 	/* WFI			1111 0011 1010 xxxx 10x0 x000 0000 0011 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 	DECODE_SIMULATE	(0xfff0d7fc, 0xf3a08000, PROBES_T32_WFE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) 	/* MRS Rd, CPSR		1111 0011 1110 xxxx 10x0 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) 	DECODE_SIMULATEX(0xfff0d000, 0xf3e08000, PROBES_T32_MRS,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) 						 REGS(0, 0, NOSPPC, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) 	 * Unsupported instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) 	 *			1111 0x11 1xxx xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) 	 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) 	 * MSR			1111 0011 100x xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) 	 * DBG hint		1111 0011 1010 xxxx 10x0 x000 1111 xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) 	 * Unallocated hints	1111 0011 1010 xxxx 10x0 x000 xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) 	 * CPS			1111 0011 1010 xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 	 * CLREX/DSB/DMB/ISB	1111 0011 1011 xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) 	 * BXJ			1111 0011 1100 xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) 	 * SUBS PC,LR,#<imm8>	1111 0011 1101 xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) 	 * MRS Rd, SPSR		1111 0011 1111 xxxx 10x0 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) 	 * SMC			1111 0111 1111 xxxx 1000 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) 	 * UNDEFINED		1111 0111 1111 xxxx 1010 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) 	 * ???			1111 0111 1xxx xxxx 1010 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 	DECODE_REJECT	(0xfb80d000, 0xf3808000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) 	/* Bcc			1111 0xxx xxxx xxxx 10x0 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) 	DECODE_CUSTOM	(0xf800d000, 0xf0008000, PROBES_T32_BRANCH_COND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) 	/* BLX			1111 0xxx xxxx xxxx 11x0 xxxx xxxx xxx0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) 	DECODE_OR	(0xf800d001, 0xf000c000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) 	/* B			1111 0xxx xxxx xxxx 10x1 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) 	/* BL			1111 0xxx xxxx xxxx 11x1 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) 	DECODE_SIMULATE	(0xf8009000, 0xf0009000, PROBES_T32_BRANCH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) static const union decode_item t32_table_1111_100x_x0x1__1111[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) 	/* Memory hints							*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) 	/* PLD (literal)	1111 1000 x001 1111 1111 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) 	/* PLI (literal)	1111 1001 x001 1111 1111 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) 	DECODE_SIMULATE	(0xfe7ff000, 0xf81ff000, PROBES_T32_PLDI),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) 	/* PLD{W} (immediate)	1111 1000 10x1 xxxx 1111 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) 	DECODE_OR	(0xffd0f000, 0xf890f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) 	/* PLD{W} (immediate)	1111 1000 00x1 xxxx 1111 1100 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) 	DECODE_OR	(0xffd0ff00, 0xf810fc00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) 	/* PLI (immediate)	1111 1001 1001 xxxx 1111 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) 	DECODE_OR	(0xfff0f000, 0xf990f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) 	/* PLI (immediate)	1111 1001 0001 xxxx 1111 1100 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) 	DECODE_SIMULATEX(0xfff0ff00, 0xf910fc00, PROBES_T32_PLDI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) 						 REGS(NOPCX, 0, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) 	/* PLD{W} (register)	1111 1000 00x1 xxxx 1111 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) 	DECODE_OR	(0xffd0ffc0, 0xf810f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) 	/* PLI (register)	1111 1001 0001 xxxx 1111 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) 	DECODE_SIMULATEX(0xfff0ffc0, 0xf910f000, PROBES_T32_PLDI,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) 						 REGS(NOPCX, 0, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) 	/* Other unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) static const union decode_item t32_table_1111_100x[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) 	/* Store/Load single data item					*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) 	/* ???			1111 100x x11x xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) 	DECODE_REJECT	(0xfe600000, 0xf8600000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) 	/* ???			1111 1001 0101 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) 	DECODE_REJECT	(0xfff00000, 0xf9500000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) 	/* ???			1111 100x 0xxx xxxx xxxx 10x0 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 	DECODE_REJECT	(0xfe800d00, 0xf8000800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) 	/* STRBT		1111 1000 0000 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) 	/* STRHT		1111 1000 0010 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) 	/* STRT			1111 1000 0100 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) 	/* LDRBT		1111 1000 0001 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) 	/* LDRSBT		1111 1001 0001 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) 	/* LDRHT		1111 1000 0011 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) 	/* LDRSHT		1111 1001 0011 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) 	/* LDRT			1111 1000 0101 xxxx xxxx 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) 	DECODE_REJECT	(0xfe800f00, 0xf8000e00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) 	/* STR{,B,H} Rn,[PC...]	1111 1000 xxx0 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) 	DECODE_REJECT	(0xff1f0000, 0xf80f0000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) 	/* STR{,B,H} PC,[Rn...]	1111 1000 xxx0 xxxx 1111 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) 	DECODE_REJECT	(0xff10f000, 0xf800f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) 	/* LDR (literal)	1111 1000 x101 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) 	DECODE_SIMULATEX(0xff7f0000, 0xf85f0000, PROBES_T32_LDR_LIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) 						 REGS(PC, ANY, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) 	/* STR (immediate)	1111 1000 0100 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) 	/* LDR (immediate)	1111 1000 0101 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) 	DECODE_OR	(0xffe00800, 0xf8400800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) 	/* STR (immediate)	1111 1000 1100 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) 	/* LDR (immediate)	1111 1000 1101 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) 	DECODE_EMULATEX	(0xffe00000, 0xf8c00000, PROBES_T32_LDRSTR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) 						 REGS(NOPCX, ANY, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) 	/* STR (register)	1111 1000 0100 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) 	/* LDR (register)	1111 1000 0101 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) 	DECODE_EMULATEX	(0xffe00fc0, 0xf8400000, PROBES_T32_LDRSTR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) 						 REGS(NOPCX, ANY, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) 	/* LDRB (literal)	1111 1000 x001 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) 	/* LDRSB (literal)	1111 1001 x001 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) 	/* LDRH (literal)	1111 1000 x011 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) 	/* LDRSH (literal)	1111 1001 x011 1111 xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) 	DECODE_SIMULATEX(0xfe5f0000, 0xf81f0000, PROBES_T32_LDR_LIT,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) 						 REGS(PC, NOSPPCX, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) 	/* STRB (immediate)	1111 1000 0000 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) 	/* STRH (immediate)	1111 1000 0010 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) 	/* LDRB (immediate)	1111 1000 0001 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) 	/* LDRSB (immediate)	1111 1001 0001 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) 	/* LDRH (immediate)	1111 1000 0011 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) 	/* LDRSH (immediate)	1111 1001 0011 xxxx xxxx 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) 	DECODE_OR	(0xfec00800, 0xf8000800),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) 	/* STRB (immediate)	1111 1000 1000 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 	/* STRH (immediate)	1111 1000 1010 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) 	/* LDRB (immediate)	1111 1000 1001 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) 	/* LDRSB (immediate)	1111 1001 1001 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) 	/* LDRH (immediate)	1111 1000 1011 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) 	/* LDRSH (immediate)	1111 1001 1011 xxxx xxxx xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) 	DECODE_EMULATEX	(0xfec00000, 0xf8800000, PROBES_T32_LDRSTR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) 						 REGS(NOPCX, NOSPPCX, 0, 0, 0)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) 	/* STRB (register)	1111 1000 0000 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) 	/* STRH (register)	1111 1000 0010 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) 	/* LDRB (register)	1111 1000 0001 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) 	/* LDRSB (register)	1111 1001 0001 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) 	/* LDRH (register)	1111 1000 0011 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) 	/* LDRSH (register)	1111 1001 0011 xxxx xxxx 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) 	DECODE_EMULATEX	(0xfe800fc0, 0xf8000000, PROBES_T32_LDRSTR,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) 						 REGS(NOPCX, NOSPPCX, 0, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) 	/* Other unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) static const union decode_item t32_table_1111_1010___1111[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) 	/* Data-processing (register)					*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) 	/* ???			1111 1010 011x xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) 	DECODE_REJECT	(0xffe0f080, 0xfa60f080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) 	/* SXTH			1111 1010 0000 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) 	/* UXTH			1111 1010 0001 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) 	/* SXTB16		1111 1010 0010 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) 	/* UXTB16		1111 1010 0011 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) 	/* SXTB			1111 1010 0100 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) 	/* UXTB			1111 1010 0101 1111 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) 	DECODE_EMULATEX	(0xff8ff080, 0xfa0ff080, PROBES_T32_SIGN_EXTEND,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) 						 REGS(0, 0, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) 	/* ???			1111 1010 1xxx xxxx 1111 xxxx 0x11 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) 	DECODE_REJECT	(0xff80f0b0, 0xfa80f030),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) 	/* ???			1111 1010 1x11 xxxx 1111 xxxx 0xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) 	DECODE_REJECT	(0xffb0f080, 0xfab0f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) 	/* SADD16		1111 1010 1001 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) 	/* SASX			1111 1010 1010 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) 	/* SSAX			1111 1010 1110 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) 	/* SSUB16		1111 1010 1101 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) 	/* SADD8		1111 1010 1000 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) 	/* SSUB8		1111 1010 1100 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) 	/* QADD16		1111 1010 1001 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) 	/* QASX			1111 1010 1010 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) 	/* QSAX			1111 1010 1110 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) 	/* QSUB16		1111 1010 1101 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) 	/* QADD8		1111 1010 1000 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) 	/* QSUB8		1111 1010 1100 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) 	/* SHADD16		1111 1010 1001 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) 	/* SHASX		1111 1010 1010 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) 	/* SHSAX		1111 1010 1110 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) 	/* SHSUB16		1111 1010 1101 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) 	/* SHADD8		1111 1010 1000 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) 	/* SHSUB8		1111 1010 1100 xxxx 1111 xxxx 0010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) 	/* UADD16		1111 1010 1001 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) 	/* UASX			1111 1010 1010 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) 	/* USAX			1111 1010 1110 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) 	/* USUB16		1111 1010 1101 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) 	/* UADD8		1111 1010 1000 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) 	/* USUB8		1111 1010 1100 xxxx 1111 xxxx 0100 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) 	/* UQADD16		1111 1010 1001 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) 	/* UQASX		1111 1010 1010 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) 	/* UQSAX		1111 1010 1110 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) 	/* UQSUB16		1111 1010 1101 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) 	/* UQADD8		1111 1010 1000 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) 	/* UQSUB8		1111 1010 1100 xxxx 1111 xxxx 0101 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) 	/* UHADD16		1111 1010 1001 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) 	/* UHASX		1111 1010 1010 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) 	/* UHSAX		1111 1010 1110 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) 	/* UHSUB16		1111 1010 1101 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) 	/* UHADD8		1111 1010 1000 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) 	/* UHSUB8		1111 1010 1100 xxxx 1111 xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) 	DECODE_OR	(0xff80f080, 0xfa80f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) 	/* SXTAH		1111 1010 0000 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) 	/* UXTAH		1111 1010 0001 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) 	/* SXTAB16		1111 1010 0010 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) 	/* UXTAB16		1111 1010 0011 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) 	/* SXTAB		1111 1010 0100 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) 	/* UXTAB		1111 1010 0101 xxxx 1111 xxxx 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) 	DECODE_OR	(0xff80f080, 0xfa00f080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) 	/* QADD			1111 1010 1000 xxxx 1111 xxxx 1000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) 	/* QDADD		1111 1010 1000 xxxx 1111 xxxx 1001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) 	/* QSUB			1111 1010 1000 xxxx 1111 xxxx 1010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) 	/* QDSUB		1111 1010 1000 xxxx 1111 xxxx 1011 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) 	DECODE_OR	(0xfff0f0c0, 0xfa80f080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) 	/* SEL			1111 1010 1010 xxxx 1111 xxxx 1000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) 	DECODE_OR	(0xfff0f0f0, 0xfaa0f080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) 	/* LSL			1111 1010 000x xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) 	/* LSR			1111 1010 001x xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) 	/* ASR			1111 1010 010x xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) 	/* ROR			1111 1010 011x xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) 	DECODE_EMULATEX	(0xff80f0f0, 0xfa00f000, PROBES_T32_MEDIA,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) 						 REGS(NOSPPC, 0, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) 	/* CLZ			1111 1010 1010 xxxx 1111 xxxx 1000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) 	DECODE_OR	(0xfff0f0f0, 0xfab0f080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 	/* REV			1111 1010 1001 xxxx 1111 xxxx 1000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) 	/* REV16		1111 1010 1001 xxxx 1111 xxxx 1001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) 	/* RBIT			1111 1010 1001 xxxx 1111 xxxx 1010 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) 	/* REVSH		1111 1010 1001 xxxx 1111 xxxx 1011 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) 	DECODE_EMULATEX	(0xfff0f0c0, 0xfa90f080, PROBES_T32_REVERSE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) 						 REGS(NOSPPC, 0, NOSPPC, 0, SAMEAS16)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) 	/* Other unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) static const union decode_item t32_table_1111_1011_0[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) 	/* Multiply, multiply accumulate, and absolute difference	*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) 	/* ???			1111 1011 0000 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) 	DECODE_REJECT	(0xfff0f0f0, 0xfb00f010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) 	/* ???			1111 1011 0111 xxxx 1111 xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) 	DECODE_REJECT	(0xfff0f0f0, 0xfb70f010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) 	/* SMULxy		1111 1011 0001 xxxx 1111 xxxx 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) 	DECODE_OR	(0xfff0f0c0, 0xfb10f000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) 	/* MUL			1111 1011 0000 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) 	/* SMUAD{X}		1111 1011 0010 xxxx 1111 xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) 	/* SMULWy		1111 1011 0011 xxxx 1111 xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) 	/* SMUSD{X}		1111 1011 0100 xxxx 1111 xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) 	/* SMMUL{R}		1111 1011 0101 xxxx 1111 xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) 	/* USAD8		1111 1011 0111 xxxx 1111 xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) 	DECODE_EMULATEX	(0xff80f0e0, 0xfb00f000, PROBES_T32_MUL_ADD,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) 						 REGS(NOSPPC, 0, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) 	/* ???			1111 1011 0111 xxxx xxxx xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) 	DECODE_REJECT	(0xfff000f0, 0xfb700010),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) 	/* SMLAxy		1111 1011 0001 xxxx xxxx xxxx 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) 	DECODE_OR	(0xfff000c0, 0xfb100000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) 	/* MLA			1111 1011 0000 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) 	/* MLS			1111 1011 0000 xxxx xxxx xxxx 0001 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) 	/* SMLAD{X}		1111 1011 0010 xxxx xxxx xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) 	/* SMLAWy		1111 1011 0011 xxxx xxxx xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) 	/* SMLSD{X}		1111 1011 0100 xxxx xxxx xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) 	/* SMMLA{R}		1111 1011 0101 xxxx xxxx xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) 	/* SMMLS{R}		1111 1011 0110 xxxx xxxx xxxx 000x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) 	/* USADA8		1111 1011 0111 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) 	DECODE_EMULATEX	(0xff8000c0, 0xfb000000,  PROBES_T32_MUL_ADD2,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) 						 REGS(NOSPPC, NOSPPCX, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) 	/* Other unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) static const union decode_item t32_table_1111_1011_1[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) 	/* Long multiply, long multiply accumulate, and divide		*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) 	/* UMAAL		1111 1011 1110 xxxx xxxx xxxx 0110 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) 	DECODE_OR	(0xfff000f0, 0xfbe00060),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) 	/* SMLALxy		1111 1011 1100 xxxx xxxx xxxx 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) 	DECODE_OR	(0xfff000c0, 0xfbc00080),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) 	/* SMLALD{X}		1111 1011 1100 xxxx xxxx xxxx 110x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) 	/* SMLSLD{X}		1111 1011 1101 xxxx xxxx xxxx 110x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) 	DECODE_OR	(0xffe000e0, 0xfbc000c0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) 	/* SMULL		1111 1011 1000 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) 	/* UMULL		1111 1011 1010 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) 	/* SMLAL		1111 1011 1100 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) 	/* UMLAL		1111 1011 1110 xxxx xxxx xxxx 0000 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) 	DECODE_EMULATEX	(0xff9000f0, 0xfb800000, PROBES_T32_MUL_ADD_LONG,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) 						 REGS(NOSPPC, NOSPPC, NOSPPC, 0, NOSPPC)),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) 	/* SDIV			1111 1011 1001 xxxx xxxx xxxx 1111 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) 	/* UDIV			1111 1011 1011 xxxx xxxx xxxx 1111 xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) 	/* Other unallocated instructions...				*/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) const union decode_item probes_decode_thumb32_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) 	 * Load/store multiple instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) 	 *			1110 100x x0xx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) 	DECODE_TABLE	(0xfe400000, 0xe8000000, t32_table_1110_100x_x0xx),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) 	 * Load/store dual, load/store exclusive, table branch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) 	 *			1110 100x x1xx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 	DECODE_TABLE	(0xfe400000, 0xe8400000, t32_table_1110_100x_x1xx),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) 	 * Data-processing (shifted register)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) 	 *			1110 101x xxxx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) 	DECODE_TABLE	(0xfe000000, 0xea000000, t32_table_1110_101x),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) 	 * Coprocessor instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) 	 *			1110 11xx xxxx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) 	DECODE_REJECT	(0xfc000000, 0xec000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) 	 * Data-processing (modified immediate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) 	 *			1111 0x0x xxxx xxxx 0xxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) 	DECODE_TABLE	(0xfa008000, 0xf0000000, t32_table_1111_0x0x___0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) 	 * Data-processing (plain binary immediate)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) 	 *			1111 0x1x xxxx xxxx 0xxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) 	DECODE_TABLE	(0xfa008000, 0xf2000000, t32_table_1111_0x1x___0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) 	 * Branches and miscellaneous control
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) 	 *			1111 0xxx xxxx xxxx 1xxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) 	DECODE_TABLE	(0xf8008000, 0xf0008000, t32_table_1111_0xxx___1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) 	 * Advanced SIMD element or structure load/store instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) 	 *			1111 1001 xxx0 xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600) 	DECODE_REJECT	(0xff100000, 0xf9000000),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) 	 * Memory hints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) 	 *			1111 100x x0x1 xxxx 1111 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) 	DECODE_TABLE	(0xfe50f000, 0xf810f000, t32_table_1111_100x_x0x1__1111),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) 	 * Store single data item
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) 	 *			1111 1000 xxx0 xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) 	 * Load single data items
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) 	 *			1111 100x xxx1 xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) 	DECODE_TABLE	(0xfe000000, 0xf8000000, t32_table_1111_100x),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) 	 * Data-processing (register)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) 	 *			1111 1010 xxxx xxxx 1111 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) 	DECODE_TABLE	(0xff00f000, 0xfa00f000, t32_table_1111_1010___1111),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) 	 * Multiply, multiply accumulate, and absolute difference
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) 	 *			1111 1011 0xxx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) 	DECODE_TABLE	(0xff800000, 0xfb000000, t32_table_1111_1011_0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) 	 * Long multiply, long multiply accumulate, and divide
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) 	 *			1111 1011 1xxx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) 	DECODE_TABLE	(0xff800000, 0xfb800000, t32_table_1111_1011_1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) 	 * Coprocessor instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) 	 *			1111 11xx xxxx xxxx xxxx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) #ifdef CONFIG_ARM_KPROBES_TEST_MODULE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) EXPORT_SYMBOL_GPL(probes_decode_thumb32_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) static const union decode_item t16_table_1011[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) 	/* Miscellaneous 16-bit instructions		    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 647) 	/* ADD (SP plus immediate)	1011 0000 0xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 648) 	/* SUB (SP minus immediate)	1011 0000 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 649) 	DECODE_SIMULATE	(0xff00, 0xb000, PROBES_T16_ADD_SP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 650) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 651) 	/* CBZ				1011 00x1 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 652) 	/* CBNZ				1011 10x1 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 653) 	DECODE_SIMULATE	(0xf500, 0xb100, PROBES_T16_CBZ),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 654) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 655) 	/* SXTH				1011 0010 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 656) 	/* SXTB				1011 0010 01xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 657) 	/* UXTH				1011 0010 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 658) 	/* UXTB				1011 0010 11xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 659) 	/* REV				1011 1010 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 660) 	/* REV16			1011 1010 01xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 661) 	/* ???				1011 1010 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 662) 	/* REVSH			1011 1010 11xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 663) 	DECODE_REJECT	(0xffc0, 0xba80),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 664) 	DECODE_EMULATE	(0xf500, 0xb000, PROBES_T16_SIGN_EXTEND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 665) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 666) 	/* PUSH				1011 010x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 667) 	DECODE_CUSTOM	(0xfe00, 0xb400, PROBES_T16_PUSH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 668) 	/* POP				1011 110x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 669) 	DECODE_CUSTOM	(0xfe00, 0xbc00, PROBES_T16_POP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 670) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 671) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 672) 	 * If-Then, and hints
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 673) 	 *				1011 1111 xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 674) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 675) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 676) 	/* YIELD			1011 1111 0001 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 677) 	DECODE_OR	(0xffff, 0xbf10),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 678) 	/* SEV				1011 1111 0100 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 679) 	DECODE_EMULATE	(0xffff, 0xbf40, PROBES_T16_SEV),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 680) 	/* NOP				1011 1111 0000 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 681) 	/* WFE				1011 1111 0010 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 682) 	/* WFI				1011 1111 0011 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 683) 	DECODE_SIMULATE	(0xffcf, 0xbf00, PROBES_T16_WFE),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 684) 	/* Unassigned hints		1011 1111 xxxx 0000 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 685) 	DECODE_REJECT	(0xff0f, 0xbf00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 686) 	/* IT				1011 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 687) 	DECODE_CUSTOM	(0xff00, 0xbf00, PROBES_T16_IT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 688) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 689) 	/* SETEND			1011 0110 010x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 690) 	/* CPS				1011 0110 011x xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 691) 	/* BKPT				1011 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 692) 	/* And unallocated instructions...		    */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 693) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 694) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 695) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 696) const union decode_item probes_decode_thumb16_table[] = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 697) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 698) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 699) 	 * Shift (immediate), add, subtract, move, and compare
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 700) 	 *				00xx xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 701) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 702) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 703) 	/* CMP (immediate)		0010 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 704) 	DECODE_EMULATE	(0xf800, 0x2800, PROBES_T16_CMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 705) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 706) 	/* ADD (register)		0001 100x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 707) 	/* SUB (register)		0001 101x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 708) 	/* LSL (immediate)		0000 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 709) 	/* LSR (immediate)		0000 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 710) 	/* ASR (immediate)		0001 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 711) 	/* ADD (immediate, Thumb)	0001 110x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 712) 	/* SUB (immediate, Thumb)	0001 111x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 713) 	/* MOV (immediate)		0010 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 714) 	/* ADD (immediate, Thumb)	0011 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 715) 	/* SUB (immediate, Thumb)	0011 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 716) 	DECODE_EMULATE	(0xc000, 0x0000, PROBES_T16_ADDSUB),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 717) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 718) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 719) 	 * 16-bit Thumb data-processing instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 720) 	 *				0100 00xx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 721) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 722) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 723) 	/* TST (register)		0100 0010 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 724) 	DECODE_EMULATE	(0xffc0, 0x4200, PROBES_T16_CMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 725) 	/* CMP (register)		0100 0010 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 726) 	/* CMN (register)		0100 0010 11xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 727) 	DECODE_EMULATE	(0xff80, 0x4280, PROBES_T16_CMP),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 728) 	/* AND (register)		0100 0000 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 729) 	/* EOR (register)		0100 0000 01xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 730) 	/* LSL (register)		0100 0000 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 731) 	/* LSR (register)		0100 0000 11xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 732) 	/* ASR (register)		0100 0001 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 733) 	/* ADC (register)		0100 0001 01xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 734) 	/* SBC (register)		0100 0001 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 735) 	/* ROR (register)		0100 0001 11xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 736) 	/* RSB (immediate)		0100 0010 01xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 737) 	/* ORR (register)		0100 0011 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 738) 	/* MUL				0100 0011 00xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 739) 	/* BIC (register)		0100 0011 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 740) 	/* MVN (register)		0100 0011 10xx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 741) 	DECODE_EMULATE	(0xfc00, 0x4000, PROBES_T16_LOGICAL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 742) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 743) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 744) 	 * Special data instructions and branch and exchange
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 745) 	 *				0100 01xx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 746) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 747) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 748) 	/* BLX pc			0100 0111 1111 1xxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 749) 	DECODE_REJECT	(0xfff8, 0x47f8),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 750) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 751) 	/* BX (register)		0100 0111 0xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 752) 	/* BLX (register)		0100 0111 1xxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 753) 	DECODE_SIMULATE (0xff00, 0x4700, PROBES_T16_BLX),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 754) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 755) 	/* ADD pc, pc			0100 0100 1111 1111 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 756) 	DECODE_REJECT	(0xffff, 0x44ff),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 757) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 758) 	/* ADD (register)		0100 0100 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 759) 	/* CMP (register)		0100 0101 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 760) 	/* MOV (register)		0100 0110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 761) 	DECODE_CUSTOM	(0xfc00, 0x4400, PROBES_T16_HIREGOPS),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 762) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 763) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 764) 	 * Load from Literal Pool
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 765) 	 * LDR (literal)		0100 1xxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 766) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 767) 	DECODE_SIMULATE	(0xf800, 0x4800, PROBES_T16_LDR_LIT),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 768) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 769) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 770) 	 * 16-bit Thumb Load/store instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 771) 	 *				0101 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 772) 	 *				011x xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 773) 	 *				100x xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 774) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 775) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 776) 	/* STR (register)		0101 000x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 777) 	/* STRH (register)		0101 001x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 778) 	/* STRB (register)		0101 010x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 779) 	/* LDRSB (register)		0101 011x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 780) 	/* LDR (register)		0101 100x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 781) 	/* LDRH (register)		0101 101x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 782) 	/* LDRB (register)		0101 110x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 783) 	/* LDRSH (register)		0101 111x xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 784) 	/* STR (immediate, Thumb)	0110 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 785) 	/* LDR (immediate, Thumb)	0110 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 786) 	/* STRB (immediate, Thumb)	0111 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 787) 	/* LDRB (immediate, Thumb)	0111 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 788) 	DECODE_EMULATE	(0xc000, 0x4000, PROBES_T16_LDRHSTRH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 789) 	/* STRH (immediate, Thumb)	1000 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 790) 	/* LDRH (immediate, Thumb)	1000 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 791) 	DECODE_EMULATE	(0xf000, 0x8000, PROBES_T16_LDRHSTRH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 792) 	/* STR (immediate, Thumb)	1001 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 793) 	/* LDR (immediate, Thumb)	1001 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 794) 	DECODE_SIMULATE	(0xf000, 0x9000, PROBES_T16_LDRSTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 795) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 796) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 797) 	 * Generate PC-/SP-relative address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 798) 	 * ADR (literal)		1010 0xxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 799) 	 * ADD (SP plus immediate)	1010 1xxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 800) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 801) 	DECODE_SIMULATE	(0xf000, 0xa000, PROBES_T16_ADR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 802) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 803) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 804) 	 * Miscellaneous 16-bit instructions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 805) 	 *				1011 xxxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 806) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 807) 	DECODE_TABLE	(0xf000, 0xb000, t16_table_1011),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 808) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 809) 	/* STM				1100 0xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 810) 	/* LDM				1100 1xxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 811) 	DECODE_EMULATE	(0xf000, 0xc000, PROBES_T16_LDMSTM),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 812) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 813) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 814) 	 * Conditional branch, and Supervisor Call
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 815) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 816) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 817) 	/* Permanently UNDEFINED	1101 1110 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 818) 	/* SVC				1101 1111 xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 819) 	DECODE_REJECT	(0xfe00, 0xde00),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 820) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 821) 	/* Conditional branch		1101 xxxx xxxx xxxx */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 822) 	DECODE_CUSTOM	(0xf000, 0xd000, PROBES_T16_BRANCH_COND),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 823) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 824) 	/*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 825) 	 * Unconditional branch
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 826) 	 * B				1110 0xxx xxxx xxxx
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 827) 	 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 828) 	DECODE_SIMULATE	(0xf800, 0xe000, PROBES_T16_BRANCH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 829) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 830) 	DECODE_END
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 831) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 832) #ifdef CONFIG_ARM_KPROBES_TEST_MODULE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 833) EXPORT_SYMBOL_GPL(probes_decode_thumb16_table);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 834) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 835) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 836) static unsigned long __kprobes thumb_check_cc(unsigned long cpsr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 837) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 838) 	if (unlikely(in_it_block(cpsr)))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 839) 		return probes_condition_checks[current_cond(cpsr)](cpsr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 840) 	return true;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 841) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 842) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 843) static void __kprobes thumb16_singlestep(probes_opcode_t opcode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 844) 		struct arch_probes_insn *asi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 845) 		struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 846) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 847) 	regs->ARM_pc += 2;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 848) 	asi->insn_handler(opcode, asi, regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 849) 	regs->ARM_cpsr = it_advance(regs->ARM_cpsr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 850) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 851) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 852) static void __kprobes thumb32_singlestep(probes_opcode_t opcode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 853) 		struct arch_probes_insn *asi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 854) 		struct pt_regs *regs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 855) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 856) 	regs->ARM_pc += 4;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 857) 	asi->insn_handler(opcode, asi, regs);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 858) 	regs->ARM_cpsr = it_advance(regs->ARM_cpsr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 859) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 860) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 861) enum probes_insn __kprobes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 862) thumb16_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 863) 			   bool emulate, const union decode_action *actions,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 864) 			   const struct decode_checker *checkers[])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 865) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 866) 	asi->insn_singlestep = thumb16_singlestep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 867) 	asi->insn_check_cc = thumb_check_cc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 868) 	return probes_decode_insn(insn, asi, probes_decode_thumb16_table, true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 869) 				  emulate, actions, checkers);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 870) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 871) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 872) enum probes_insn __kprobes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 873) thumb32_probes_decode_insn(probes_opcode_t insn, struct arch_probes_insn *asi,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 874) 			   bool emulate, const union decode_action *actions,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 875) 			   const struct decode_checker *checkers[])
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 876) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 877) 	asi->insn_singlestep = thumb32_singlestep;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 878) 	asi->insn_check_cc = thumb_check_cc;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 879) 	return probes_decode_insn(insn, asi, probes_decode_thumb32_table, true,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 880) 				  emulate, actions, checkers);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 881) }