1 // Licensed to the .NET Foundation under one or more agreements.
2 // The .NET Foundation licenses this file to you under the MIT license.
3 // See the LICENSE file in the project root for more information.
4 //////////////////////////////////////////////////////////////////////////////
7 #if !defined(_TARGET_ARM_)
8 #error Unexpected target type
12 //////////////////////////////////////////////////////////////////////////////
18 ID_OP_NONE, // no additional arguments
19 ID_OP_SCNS, // small const operand (21-bits or less, no reloc)
20 ID_OP_JMP, // local jump
21 ID_OP_LBL, // label operand
22 ID_OP_CALL, // direct method call
23 ID_OP_SPEC, // special handling required
26 //////////////////////////////////////////////////////////////////////////////
27 #else // !DEFINE_ID_OPS
28 //////////////////////////////////////////////////////////////////////////////
31 #error Must define IF_DEF macro before including this file
34 //////////////////////////////////////////////////////////////////////////////
36 // enum insFormat instruction enum ID_OPS
39 //////////////////////////////////////////////////////////////////////////////
41 IF_DEF(NONE, IS_NONE, NONE) //
43 IF_DEF(LABEL, IS_NONE, JMP ) // label
44 //IF_DEF(SWR_LABEL, IS_NONE, LBL ) // write label to stack
45 //IF_DEF(METHOD, IS_NONE, CALL) // method
46 //IF_DEF(CNS, IS_NONE, SCNS) // const
48 IF_DEF(LARGEJMP, IS_NONE, JMP) // large conditional branch pseudo-op
50 /////////////////////////////////////////////////////////////////////////////////////////////////////////
52 IF_DEF(EN9, IS_NONE, NONE) // Instruction has 9 possible encoding types
53 IF_DEF(EN8, IS_NONE, NONE) // Instruction has 8 possible encoding types
54 IF_DEF(EN6A, IS_NONE, NONE) // Instruction has 6 possible encoding types, type A
55 IF_DEF(EN6B, IS_NONE, NONE) // Instruction has 6 possible encoding types, type B
56 IF_DEF(EN5A, IS_NONE, NONE) // Instruction has 5 possible encoding types, type A
57 IF_DEF(EN5B, IS_NONE, NONE) // Instruction has 5 possible encoding types, type B
58 IF_DEF(EN4A, IS_NONE, NONE) // Instruction has 4 possible encoding types, type A
59 IF_DEF(EN4B, IS_NONE, NONE) // Instruction has 4 possible encoding types, type B
60 IF_DEF(EN3A, IS_NONE, NONE) // Instruction has 3 possible encoding types, type A
61 IF_DEF(EN3B, IS_NONE, NONE) // Instruction has 3 possible encoding types, type B
62 IF_DEF(EN3C, IS_NONE, NONE) // Instruction has 3 possible encoding types, type C
63 IF_DEF(EN3D, IS_NONE, NONE) // Instruction has 3 possible encoding types, type D
64 IF_DEF(EN3E, IS_NONE, NONE) // Instruction has 3 possible encoding types, type E
65 IF_DEF(EN3F, IS_NONE, NONE) // Instruction has 3 possible encoding types, type F
66 IF_DEF(EN2A, IS_NONE, NONE) // Instruction has 2 possible encoding types, type A
67 IF_DEF(EN2B, IS_NONE, NONE) // Instruction has 2 possible encoding types, type B
68 IF_DEF(EN2C, IS_NONE, NONE) // Instruction has 2 possible encoding types, type C
69 IF_DEF(EN2D, IS_NONE, NONE) // Instruction has 2 possible encoding types, type D
70 IF_DEF(EN2E, IS_NONE, NONE) // Instruction has 2 possible encoding types, type E
71 IF_DEF(EN2F, IS_NONE, NONE) // Instruction has 2 possible encoding types, type F
72 IF_DEF(EN2G, IS_NONE, NONE) // Instruction has 2 possible encoding types, type G
74 /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
76 IF_DEF(T1_A, IS_NONE, NONE) // T1_A ................
77 IF_DEF(T1_B, IS_NONE, NONE) // T1_B ........cccc.... cond
78 IF_DEF(T1_C, IS_NONE, NONE) // T1_C .....iiiiimmmddd R1 R2 imm5
79 IF_DEF(T1_D0, IS_NONE, NONE) // T1_D0 ........Dmmmmddd R1* R2*
80 IF_DEF(T1_D1, IS_NONE, SPEC) // T1_D1 .........mmmm... R1*
81 IF_DEF(T1_D2, IS_NONE, SPEC) // T1_D2 .........mmmm... R3*
82 IF_DEF(T1_E, IS_NONE, NONE) // T1_E ..........mmmddd R1 R2
83 IF_DEF(T1_F, IS_NONE, NONE) // T1_F .........iiiiiii SP imm7
84 IF_DEF(T1_G, IS_NONE, NONE) // T1_G .......iiinnnddd R1 R2 imm3
85 IF_DEF(T1_H, IS_NONE, NONE) // T1_H .......mmmnnnddd R1 R2 R3
86 IF_DEF(T1_I, IS_NONE, JMP ) // T1_I ......i.iiiiinnn R1 imm6
87 IF_DEF(T1_J0, IS_NONE, NONE) // T1_J .....dddiiiiiiii R1 imm8
88 IF_DEF(T1_J1, IS_NONE, NONE) // T1_J .....dddiiiiiiii R1 <regmask8>
89 IF_DEF(T1_J2, IS_NONE, NONE) // T1_J .....dddiiiiiiii R1 SP imm8
90 IF_DEF(T1_J3, IS_NONE, LBL ) // T1_J .....dddiiiiiiii R1 PC imm8
91 IF_DEF(T1_K, IS_NONE, JMP ) // T1_K ....cccciiiiiiii Branch imm8, cond4
92 IF_DEF(T1_L0, IS_NONE, NONE) // T1_L0 ........iiiiiiii imm8
93 IF_DEF(T1_L1, IS_NONE, NONE) // T1_L1 ........rrrrrrrr <regmask8>
94 IF_DEF(T1_M, IS_NONE, JMP ) // T1_M .....iiiiiiiiiii Branch imm11
97 IF_DEF(T2_A, IS_NONE, NONE) // T2_A ................ ................
98 IF_DEF(T2_B, IS_NONE, NONE) // T2_B ................ ............iiii imm4
99 IF_DEF(T2_C0, IS_NONE, NONE) // T2_C0 ...........Snnnn .iiiddddiishmmmm R1 R2 R3 S, imm5, sh
100 IF_DEF(T2_C1, IS_NONE, NONE) // T2_C1 ...........S.... .iiiddddiishmmmm R1 R2 S, imm5, sh
101 IF_DEF(T2_C2, IS_NONE, NONE) // T2_C2 ...........S.... .iiiddddii..mmmm R1 R2 S, imm5
102 IF_DEF(T2_C3, IS_NONE, NONE) // T2_C3 ...........S.... ....dddd....mmmm R1 R2 S
103 IF_DEF(T2_C4, IS_NONE, NONE) // T2_C4 ...........Snnnn ....dddd....mmmm R1 R2 R3 S
104 IF_DEF(T2_C5, IS_NONE, NONE) // T2_C5 ............nnnn ....dddd....mmmm R1 R2 R3
105 IF_DEF(T2_C6, IS_NONE, NONE) // T2_C6 ................ ....dddd..iimmmm R1 R2 imm2
106 IF_DEF(T2_C7, IS_NONE, NONE) // T2_C7 ............nnnn ..........shmmmm R1 R2 imm2
107 IF_DEF(T2_C8, IS_NONE, NONE) // T2_C8 ............nnnn .iii....iishmmmm R1 R2 imm5, sh
108 IF_DEF(T2_C9, IS_NONE, NONE) // T2_C9 ............nnnn ............mmmm R1 R2
109 IF_DEF(T2_C10, IS_NONE, NONE) // T2_C10 ............mmmm ....dddd....mmmm R1 R2
110 IF_DEF(T2_D0, IS_NONE, NONE) // T2_D0 ............nnnn .iiiddddii.wwwww R1 R2 imm5, imm5
111 IF_DEF(T2_D1, IS_NONE, NONE) // T2_D1 ................ .iiiddddii.wwwww R1 imm5, imm5
112 IF_DEF(T2_E0, IS_NONE, NONE) // T2_E0 ............nnnn tttt......shmmmm R1 R2 R3 imm2
113 IF_DEF(T2_E1, IS_NONE, NONE) // T2_E1 ............nnnn tttt............ R1 R2
114 IF_DEF(T2_E2, IS_NONE, NONE) // T2_E2 ................ tttt............ R1
115 IF_DEF(T2_F1, IS_NONE, NONE) // T2_F1 ............nnnn ttttdddd....mmmm R1 R2 R3 R4
116 IF_DEF(T2_F2, IS_NONE, NONE) // T2_F2 ............nnnn aaaadddd....mmmm R1 R2 R3 R4
117 IF_DEF(T2_G0, IS_NONE, NONE) // T2_G0 .......PU.W.nnnn ttttTTTTiiiiiiii R1 R2 R3 imm8, PUW
118 IF_DEF(T2_G1, IS_NONE, NONE) // T2_G1 ............nnnn ttttTTTT........ R1 R2 R3
119 IF_DEF(T2_H0, IS_NONE, NONE) // T2_H0 ............nnnn tttt.PUWiiiiiiii R1 R2 imm8, PUW
120 IF_DEF(T2_H1, IS_NONE, NONE) // T2_H1 ............nnnn tttt....iiiiiiii R1 R2 imm8
121 IF_DEF(T2_H2, IS_NONE, NONE) // T2_H2 ............nnnn ........iiiiiiii R1 imm8
122 IF_DEF(T2_I0, IS_NONE, NONE) // T2_I0 ..........W.nnnn rrrrrrrrrrrrrrrr R1 W, imm16
123 IF_DEF(T2_I1, IS_NONE, NONE) // T2_I1 ................ rrrrrrrrrrrrrrrr imm16
124 IF_DEF(T2_J1, IS_NONE, JMP ) // T2_J1 .....Scccciiiiii ..j.jiiiiiiiiiii Branch imm20, cond4
125 IF_DEF(T2_J2, IS_NONE, JMP ) // T2_J2 .....Siiiiiiiiii ..j.jiiiiiiiiii. Branch imm24
126 IF_DEF(T2_J3, IS_NONE, CALL) // T2_J3 .....Siiiiiiiiii ..j.jiiiiiiiiii. Call imm24
127 IF_DEF(T2_K1, IS_NONE, NONE) // T2_K1 ............nnnn ttttiiiiiiiiiiii R1 R2 imm12
128 IF_DEF(T2_K2, IS_NONE, NONE) // T2_K2 ............nnnn ....iiiiiiiiiiii R1 imm12
129 IF_DEF(T2_K3, IS_NONE, NONE) // T2_K3 ........U....... ....iiiiiiiiiiii PC U, imm12
130 IF_DEF(T2_K4, IS_NONE, NONE) // T2_K4 ........U....... ttttiiiiiiiiiiii R1 PC U, imm12
131 IF_DEF(T2_L0, IS_NONE, NONE) // T2_L0 .....i.....Snnnn .iiiddddiiiiiiii R1 R2 S, imm8<<imm4
132 IF_DEF(T2_L1, IS_NONE, NONE) // T2_L1 .....i.....S.... .iiiddddiiiiiiii R1 S, imm8<<imm4
133 IF_DEF(T2_L2, IS_NONE, NONE) // T2_L2 .....i......nnnn .iii....iiiiiiii R1 imm8<<imm4
134 IF_DEF(T2_M0, IS_NONE, NONE) // T2_M0 .....i......nnnn .iiiddddiiiiiiii R1 R2 imm12
135 IF_DEF(T2_M1, IS_NONE, LBL ) // T2_M1 .....i.......... .iiiddddiiiiiiii R1 PC imm12
136 IF_DEF(T2_N, IS_NONE, NONE) // T2_N .....i......iiii .iiiddddiiiiiiii R1 imm16 ; movw/movt
137 IF_DEF(T2_N1, IS_NONE, JMP) // T2_N1 .....i......iiii .iiiddddiiiiiiii R1 imm16 ; movw/movt of a code address
138 IF_DEF(T2_N2, IS_NONE, NONE) // T2_N2 .....i......iiii .iiiddddiiiiiiii R1 imm16 ; movw/movt of a data address
139 IF_DEF(T2_VLDST, IS_NONE, NONE) // T2_VLDST 11101101UD0Lnnnn dddd101Ziiiiiiii D1 R2 imm(+-1020)
140 IF_DEF(T2_VFP2, IS_NONE, NONE) // T2_VFP2 111011101D110--- dddd101Z--M0mmmm D1 D2
141 IF_DEF(T2_VFP3, IS_NONE, NONE) // T2_VFP3 11101110-D--nnnn dddd101ZN-M0mmmm D1 D2 D3
142 IF_DEF(T2_VMOVS, IS_NONE, NONE)
143 IF_DEF(T2_VMOVD, IS_NONE, NONE)
145 IF_DEF(INVALID, IS_NONE, NONE) //
147 //////////////////////////////////////////////////////////////////////////////
149 //////////////////////////////////////////////////////////////////////////////
151 #endif // !DEFINE_ID_OPS
152 //////////////////////////////////////////////////////////////////////////////