Instruction Set Architecture » History » Version 12
Alexander Protsenko, 03/16/2023 05:50 PM
1 | 1 | Alexander Protsenko | h1. Instruction Set Architecture |
---|---|---|---|
2 | |||
3 | 12 | Alexander Protsenko | |
4 | |||
5 | 3 | Alexander Protsenko | h2. Data processing - immediate |
6 | |||
7 | 1 | Alexander Protsenko | h3. Arithmetic (immediate) |
8 | |||
9 | ### ADD (immediate). Add. |
||
10 | Specification: add, add_32 |
||
11 | ### SUB (immediate). Subtract. |
||
12 | Specification: sub, sub_32 |
||
13 | ### ADDS (immediate). Add and set flags. |
||
14 | Specification: adds, adds_32 |
||
15 | ### SUBS (immediate). Subtract and set flags. |
||
16 | Specification: subs, subs_32 |
||
17 | ### CMP (immediate). Compare. |
||
18 | Specification: cmp, cmp_32 |
||
19 | ### CMN (immediate). Compare negative. |
||
20 | Specification: cmn, cmn_32 |
||
21 | |||
22 | 12 | Alexander Protsenko | +Total:+ 12. |
23 | |||
24 | 1 | Alexander Protsenko | h3. Logical (immediate) |
25 | |||
26 | ### AND (immediate). Bitwise AND |
||
27 | Specification: and_bitmask, and_bitmask_32 |
||
28 | ### ANDS (immediate). Bitwise AND and set flags |
||
29 | Specification: ands_bitmask, ands_bitmask_32 |
||
30 | ### EOR (immediate). Bitwise exclusive OR |
||
31 | Specification: eor_bitmask, eor_bitmask_32 |
||
32 | ### ORR (immediate). Bitwise inclusive OR |
||
33 | Specification: orr_bitmask, orr_bitmask_32 |
||
34 | ### TST (immediate). TST Test bits |
||
35 | Specification: tst_bitmask, tst_bitmask_32 |
||
36 | |||
37 | 12 | Alexander Protsenko | +Total:+ 10. |
38 | |||
39 | 1 | Alexander Protsenko | h3. Move (wide immediate) |
40 | |||
41 | ### MOVZ. Move wide with zero |
||
42 | Specification: movz, movz_32 |
||
43 | ### MOVN. Move wide with NOT |
||
44 | Specification: movn, movn_32 |
||
45 | ### MOVK. Move wide with keep |
||
46 | Specification: movk, movk_32 |
||
47 | |||
48 | 12 | Alexander Protsenko | +Total:+ 6. |
49 | |||
50 | 1 | Alexander Protsenko | h3. Move (immediate) |
51 | |||
52 | ### MOV (wide immediate). Move (wide immediate) |
||
53 | Specification: mov_wide_imm, mov_wide_imm_32 |
||
54 | ### MOV (inverted wide immediate). Move (inverted wide immediate) |
||
55 | Specification: mov_inv_wide_imm, mov_inv_wide_imm_32 |
||
56 | 2 | Alexander Protsenko | ### MOV (bitmask immediate). Move (bitmask immediate) |
57 | 1 | Alexander Protsenko | Specification: mov_bitmask, mov_bitmask_32 |
58 | |||
59 | 12 | Alexander Protsenko | +Total:+ 6. |
60 | |||
61 | 3 | Alexander Protsenko | h3. PC-relative address calculation |
62 | |||
63 | ### ADRP. Compute address of 4KB page at a PC-relative offset |
||
64 | Specification: adrp |
||
65 | ### ADR. Compute address of label at a PC-relative offset. |
||
66 | Specification: adr |
||
67 | |||
68 | 12 | Alexander Protsenko | +Total:+ 2. |
69 | |||
70 | 3 | Alexander Protsenko | h3. Extract register |
71 | |||
72 | ### EXTR. Extract register from pair |
||
73 | Specification: extr, extr_32 |
||
74 | |||
75 | 12 | Alexander Protsenko | +Total:+ 2. |
76 | |||
77 | 3 | Alexander Protsenko | h2. Data processing - register |
78 | |||
79 | h3. Arithmetic (shifted register) |
||
80 | |||
81 | ### ADD (shifted register). Add |
||
82 | Specification: add_sh_reg, add_sh_reg_32 |
||
83 | ### ADDS (shifted register). Add and set flags |
||
84 | Specification: adds_sh_reg, adds_sh_reg_32 |
||
85 | ### SUB (shifted register). Subtract |
||
86 | Specification: sub_sh_reg, sub_sh_reg_32 |
||
87 | ### SUBS (shifted register). Subtract and set flags |
||
88 | Specification: subs_sh_reg, subs_sh_reg_32 |
||
89 | ### CMN (shifted register). Compare negative |
||
90 | Specification: cmn_sh_reg, cmn_sh_reg_32 |
||
91 | ### CMP (shifted register). Compare |
||
92 | Specification: cmp_sh_reg, cmp_sh_reg_32 |
||
93 | |||
94 | 12 | Alexander Protsenko | +Total:+ 12. |
95 | |||
96 | 3 | Alexander Protsenko | h3. Arithmetic (extending register) |
97 | |||
98 | ### ADD (extended register). Add |
||
99 | Specification: add_ex_reg, add_ex_reg_32 |
||
100 | ### ADDS (extended register). Add and set flags |
||
101 | Specification: adds_ex_reg, adds_ex_reg_32 |
||
102 | ### SUB (extended register). Subtract |
||
103 | Specification: sub_ex_reg, sub_ex_reg_32 |
||
104 | ### SUBS (extended register). Subtract and set flags |
||
105 | Specification: subs_ex_reg, subs_ex_reg_32 |
||
106 | ### CMN (extended register). Compare negative |
||
107 | Specification: cmn_ex_reg, cmn_ex_reg_32 |
||
108 | ### CMP (extended register). Compare |
||
109 | Specification: cmp_ex_reg, cmp_ex_reg_32 |
||
110 | 1 | Alexander Protsenko | |
111 | 12 | Alexander Protsenko | +Total:+ 12. |
112 | |||
113 | 1 | Alexander Protsenko | h3. Logical (shifted register) |
114 | |||
115 | 4 | Alexander Protsenko | ### AND (shifted register). Bitwise AND |
116 | Specification: and_bitwise, and_bitwise_32 |
||
117 | ### ANDS (shifted register). Bitwise AND and set flags |
||
118 | Specification: ands_bitwise, ands_bitwise_32 |
||
119 | ### BIC (shifted register). Bitwise bit clear |
||
120 | Specification: bic_bitwise, bic_bitwise_32 |
||
121 | ### BICS (shifted register). Bitwise bit clear and set flags |
||
122 | Specification: bics_bitwise, bics_bitwise_32 |
||
123 | ### EON (shifted register). Bitwise exclusive OR NOT |
||
124 | Specification: eon_bitwise, eon_bitwise_32 |
||
125 | ### EOR (shifted register). Bitwise exclusive OR |
||
126 | Specification: eor_bitwise, eor_bitwise_32 |
||
127 | ### ORR (shifted register). Bitwise inclusive OR |
||
128 | Specification: orr_bitwise, orr_bitwise_32 |
||
129 | ### MVN. Bitwise NOT |
||
130 | Specification: mvn_bitwise, mvn_bitwise_32 |
||
131 | ### ORN (shifted register). Bitwise inclusive OR NOT |
||
132 | Specification: orn_bitwise, orn_bitwise_32 |
||
133 | ### TST (shifted register). Test bits |
||
134 | Specification: tst_bitwise, tst_bitwise_32 |
||
135 | |||
136 | 12 | Alexander Protsenko | +Total:+ 20. |
137 | |||
138 | 4 | Alexander Protsenko | h3. Move (register) |
139 | |||
140 | ### MOV (register). Move register |
||
141 | Specification: mov_reg, mov_reg_32 |
||
142 | ### MOV (to/from SP). Move register to SP or move SP to register |
||
143 | Specification: mov_sp, mov_sp_32 |
||
144 | 3 | Alexander Protsenko | |
145 | 12 | Alexander Protsenko | +Total:+ 4. |
146 | |||
147 | 5 | Alexander Protsenko | h3. Multiply and divide |
148 | |||
149 | 6 | Alexander Protsenko | ### MADD. Multiply-add |
150 | 5 | Alexander Protsenko | Specification: madd, madd_32 |
151 | 6 | Alexander Protsenko | ### MSUB. Multiply-subtract |
152 | 5 | Alexander Protsenko | Specification: msub, msub_32 |
153 | 6 | Alexander Protsenko | ### MNEG. Multiply-negate |
154 | 5 | Alexander Protsenko | Specification: mneg, mneg_32 |
155 | 6 | Alexander Protsenko | ### MUL. Multiply |
156 | 5 | Alexander Protsenko | Specification: mul, mul_32 |
157 | 6 | Alexander Protsenko | ### SMADDL. Signed multiply-add long |
158 | 5 | Alexander Protsenko | Specification: smaddl |
159 | 6 | Alexander Protsenko | ### SMSUBL. Signed multiply-subtract long |
160 | 5 | Alexander Protsenko | Specification: smsubl |
161 | 6 | Alexander Protsenko | ### SMNEGL. Signed multiply-negate long |
162 | 5 | Alexander Protsenko | Specification: smnegl |
163 | 6 | Alexander Protsenko | ### SMULL. Signed multiply long |
164 | 5 | Alexander Protsenko | Specification: smull |
165 | 6 | Alexander Protsenko | ### SMULH. Signed multiply high |
166 | 5 | Alexander Protsenko | Specification: smulh |
167 | 6 | Alexander Protsenko | ### UMADDL. Unsigned multiply-add long |
168 | 5 | Alexander Protsenko | Specification: umaddl |
169 | 6 | Alexander Protsenko | ### UMSUBL. Unsigned multiply-subtract long |
170 | 5 | Alexander Protsenko | Specification: umsubl |
171 | 6 | Alexander Protsenko | ### UMNEGL. Unsigned multiply-negate long |
172 | 5 | Alexander Protsenko | Specification: umnegl |
173 | 6 | Alexander Protsenko | ### UMULL. Unsigned multiply long |
174 | 5 | Alexander Protsenko | Specification: umull |
175 | 6 | Alexander Protsenko | ### UMULH. Unsigned multiply high |
176 | 5 | Alexander Protsenko | Specification: umulh |
177 | |||
178 | 12 | Alexander Protsenko | +Total:+ 18. |
179 | |||
180 | 5 | Alexander Protsenko | h3. Divide |
181 | |||
182 | 6 | Alexander Protsenko | ### SDIV. Signed divide |
183 | 5 | Alexander Protsenko | Specification: sdiv, sdiv_32 |
184 | ### UDIV. Unsigned divide |
||
185 | Specification: udiv, udiv_32 |
||
186 | |||
187 | 12 | Alexander Protsenko | +Total:+ 4. |
188 | |||
189 | 7 | Alexander Protsenko | h2. Branches, Exception generating, and System instructions |
190 | 1 | Alexander Protsenko | |
191 | 7 | Alexander Protsenko | h3. Conditional Branch |
192 | |||
193 | ### B.cond. Branch conditionally |
||
194 | Specification: b |
||
195 | ### CBNZ. Compare and branch if nonzero |
||
196 | Specification: cbnz, cbnz_32 |
||
197 | ### CBZ. Compare and branch if zero |
||
198 | Specification: cbz, cbz_32 |
||
199 | ### TBNZ. Test bit and branch if nonzero |
||
200 | Specification: tbnz |
||
201 | ### TBZ. Test bit and branch if zero |
||
202 | Specification: tbz |
||
203 | |||
204 | 12 | Alexander Protsenko | +Total:+ 7. |
205 | |||
206 | 7 | Alexander Protsenko | h3. Unconditional branch (immediate) |
207 | |||
208 | ### B. Branch unconditionally |
||
209 | Specification: b_imm |
||
210 | ### BL. Branch with link |
||
211 | Specification: bl |
||
212 | |||
213 | 12 | Alexander Protsenko | +Total:+ 2. |
214 | |||
215 | 7 | Alexander Protsenko | h3. Unconditional branch (register) |
216 | |||
217 | ### BLR. Branch with link to register |
||
218 | Specification: blr |
||
219 | ### BR. Branch to register |
||
220 | Specification: br |
||
221 | ### RET. Return from subroutine |
||
222 | Specification: ret |
||
223 | |||
224 | 12 | Alexander Protsenko | +Total:+ 3. |
225 | |||
226 | 7 | Alexander Protsenko | h3. Exception generation and return |
227 | |||
228 | 8 | Alexander Protsenko | *Exception generating* |
229 | |||
230 | 7 | Alexander Protsenko | ### BRK. Breakpoint Instruction |
231 | Specification: brk |
||
232 | ### HLT. Halt Instruction HLT |
||
233 | Specification: hlt |
||
234 | ### HVC. Generate exception targeting Exception level 2 HVC |
||
235 | Specification: hvc |
||
236 | ### SMC. Generate exception targeting Exception level 3 SMC |
||
237 | Specification: smc |
||
238 | ### SVC. Generate exception targeting Exception level 1 |
||
239 | Specification: svc |
||
240 | 8 | Alexander Protsenko | |
241 | 12 | Alexander Protsenko | +Total:+ 5. |
242 | |||
243 | 8 | Alexander Protsenko | *Exception return* |
244 | |||
245 | 1 | Alexander Protsenko | ### ERET. Exception return using current ELR and SPSR |
246 | Specification: eret |
||
247 | |||
248 | 12 | Alexander Protsenko | +Total:+ 1. |
249 | |||
250 | 8 | Alexander Protsenko | *Debug state* |
251 | 1 | Alexander Protsenko | |
252 | 8 | Alexander Protsenko | ### DCPS1. Debug switch to Exception level 1 DCPS1 |
253 | Specification: dcps1 |
||
254 | ### DCPS2. Debug switch to Exception level 2 DCPS2 |
||
255 | Specification: dcps2 |
||
256 | ### DCPS3. Debug switch to Exception level 3 DCPS3 |
||
257 | Specification: dcps3 |
||
258 | ### DRPS. Debug restore PE state |
||
259 | Specification: drps |
||
260 | |||
261 | 12 | Alexander Protsenko | +Total:+ 4. |
262 | |||
263 | 8 | Alexander Protsenko | h3. System register instructions |
264 | |||
265 | ### MRS. Move System register to general-purpose register MRS |
||
266 | Specification: msr |
||
267 | ### MSR. Move general-purpose register to System register MSR (register) |
||
268 | Specification: mrs |
||
269 | ### MSR. Move immediate to PE state field MSR (immediate) |
||
270 | Specification: msr_dc, msr_ds, msr_ss, msr_uao |
||
271 | |||
272 | 12 | Alexander Protsenko | +Total:+ 6. |
273 | |||
274 | 8 | Alexander Protsenko | h3. System instructions |
275 | |||
276 | ### SYS. System instruction |
||
277 | Specification: sys |
||
278 | ### SYSL. System instruction with result |
||
279 | Specification: sysl |
||
280 | ### IC. Instruction cache maintenance |
||
281 | Specification: ic, ic_reg |
||
282 | ### DC. Data cache maintenance |
||
283 | Specification: dc |
||
284 | ### AT. Address translation |
||
285 | Specification: at |
||
286 | ### TLBI. TLB Invalidate |
||
287 | Specification: tlbi, tlbi_reg |
||
288 | |||
289 | 12 | Alexander Protsenko | +Total:+ 8. |
290 | |||
291 | 8 | Alexander Protsenko | h3. Hint instructions |
292 | |||
293 | ### NOP. No operation |
||
294 | 9 | Alexander Protsenko | Specification: nop |
295 | 1 | Alexander Protsenko | ### YIELD. Yield hint |
296 | 9 | Alexander Protsenko | Specification: yield_op |
297 | 1 | Alexander Protsenko | ### WFE. Wait for event |
298 | 9 | Alexander Protsenko | Specification: wfe |
299 | 1 | Alexander Protsenko | ### WFI. Wait for interrupt |
300 | 9 | Alexander Protsenko | Specification: wfi |
301 | 1 | Alexander Protsenko | ### SEV. Send event |
302 | 9 | Alexander Protsenko | Specification: sev |
303 | 1 | Alexander Protsenko | ### SEVL. Send event local |
304 | 9 | Alexander Protsenko | Specification: sevl |
305 | 1 | Alexander Protsenko | ### HINT. Unallocated hint |
306 | 9 | Alexander Protsenko | Specification: hint |
307 | 8 | Alexander Protsenko | |
308 | 12 | Alexander Protsenko | +Total:+ 7. |
309 | |||
310 | 9 | Alexander Protsenko | h3. Barriers and CLREX instructions |
311 | 7 | Alexander Protsenko | |
312 | 9 | Alexander Protsenko | ### CLREX. Clear Exclusives monitor |
313 | Specification: clrex |
||
314 | ### DMB. Data memory barrier |
||
315 | Specification: dmb |
||
316 | ### DSB. Data synchronization barrier |
||
317 | Specification: dsb |
||
318 | ### ISB. Instruction synchronization barrier |
||
319 | Specification: isb |
||
320 | |||
321 | 12 | Alexander Protsenko | +Total:+ 4. |
322 | |||
323 | 9 | Alexander Protsenko | h2. Loads and stores |
324 | |||
325 | h3. Load/store register |
||
326 | 1 | Alexander Protsenko | |
327 | 11 | Alexander Protsenko | ### LDR. Load register (immediate offset) |
328 | Specification: ldr_postindex |
||
329 | ### STR. Store register (immediate offset) |
||
330 | Specification: str_postindex |
||
331 | |||
332 | 12 | Alexander Protsenko | +Total:+ 2. |
333 | |||
334 | 11 | Alexander Protsenko | h3. Load-Exclusive/Store-Exclusive |
335 | |||
336 | ### LDXR. Load Exclusive register |
||
337 | Specification: ldxr, ldxr_32 |
||
338 | ### LDXRB. Load Exclusive byte |
||
339 | Specification: ldxrb_32 |
||
340 | ### LDXRH. Load Exclusive halfword |
||
341 | Specification: ldxrh_32 |
||
342 | ### LDXP. Load Exclusive pair |
||
343 | Specification: ldxp, ldxp_32 |
||
344 | ### STXR. Store Exclusive register |
||
345 | Specification: stxr, stxr_32 |
||
346 | ### STXRB. Store Exclusive byte |
||
347 | Specification: stxrb_32 |
||
348 | ### STXRH. Store Exclusive halfword |
||
349 | Specification: stxrh_32 |
||
350 | ### STXP. Store Exclusive pair |
||
351 | Specification: stxp, stxp_32 |
||
352 | |||
353 | 12 | Alexander Protsenko | +Total:+ 12. |
354 | |||
355 | 11 | Alexander Protsenko | h3. Load-Acquire/Store-Release |
356 | |||
357 | *Non-exclusive Load-Acquire and Store-Release instructions* |
||
358 | |||
359 | ### LDAR. Load-Acquire Register |
||
360 | Specification: ldar, ldar_32 |
||
361 | ### LDARB. Load-Acquire Byte |
||
362 | Specification: ldarb |
||
363 | ### LDARH. Load-Acquire Halfword |
||
364 | Specification: ldarh |
||
365 | ### STLR. Store-Release Register |
||
366 | Specification: stlr, stlr_32 |
||
367 | ### STLRB. Store-Release Byte |
||
368 | Specification: stlrb |
||
369 | ### STLRH. Store-Release Halfword |
||
370 | Specification: stlrh |
||
371 | |||
372 | 12 | Alexander Protsenko | +Total:+ 8. |
373 | |||
374 | 11 | Alexander Protsenko | *Exclusive Load-Acquire and Store-Release instructions* |
375 | |||
376 | ### LDAXR. Load-Acquire Exclusive register |
||
377 | Specification: ldaxr, ldaxr_32 |
||
378 | ### LDAXRB. Load-Acquire Exclusive byte |
||
379 | Specification: ldaxrb_32 |
||
380 | ### LDAXRH. Load-Acquire Exclusive halfword |
||
381 | Specification: ldaxrh_32 |
||
382 | ### LDAXP. Load-Acquire Exclusive pair |
||
383 | Specification: ldaxp, ldaxp_32 |
||
384 | ### STLXR. Store-Release Exclusive register |
||
385 | Specification: stlxr, stlxr_32 |
||
386 | ### STLXRB. Store-Release Exclusive byte |
||
387 | Specification: stlxrb_32 |
||
388 | ### STLXRH. Store-Release Exclusive halfword |
||
389 | Specification: stlxrh_32 |
||
390 | ### STLXP. Store-Release Exclusive pair |
||
391 | Specification: stlxp, stlxp_32 |
||
392 | |||
393 | +Total:+ 12. |
||
394 | 1 | Alexander Protsenko | |
395 | 10 | Alexander Protsenko | h2. Pseudo instructions |
396 | 1 | Alexander Protsenko | |
397 | 10 | Alexander Protsenko | psldr, psldr32 |
398 | 12 | Alexander Protsenko | |
399 | +Total:+ 2. |