libmicroemu 0.2.0
ARM Microcontroller Emulator Library
Loading...
Searching...
No Matches
instr.h
1#pragma once
2
3#include "libmicroemu/internal/decoder/instr_flags.h"
4#include "libmicroemu/internal/logic/imm_shift_results.h"
5#include "libmicroemu/internal/logic/thumb_immediate_result.h"
6#include "libmicroemu/types.h"
7
8namespace libmicroemu::internal {
9
10enum class InstrId : u8 {
11 kNop,
12 kDmb,
13 kAddPcPlusImmediate,
14 kLslImmediate,
15 kLslRegister,
16 kClz,
17 kSxth,
18 kTbbH,
19 kCmpRegister,
20 kCmpImmediate,
21 kCmnImmediate,
22 kMovImmediate,
23 kMvnImmediate,
24 kMovRegister,
25 kRrx,
26 kLdrbImmediate,
27 kLdrsbImmediate,
28 kLdrhImmediate,
29 kLdrshImmediate,
30 kLdrImmediate,
31 kLdrex,
32 kLdrdImmediate,
33 kLdrLiteral,
34 kIt,
35 kCbNZ,
36 kBl,
37 kBx,
38 kBlx,
39 kBCond,
40 kB,
41 kBfi,
42 kUdiv,
43 kSdiv,
44 kMul,
45 kUmlal,
46 kUmull,
47 kSmull,
48 kMls,
49 kMla,
50 kSubImmediate,
51 kSbcImmediate,
52 kRsbImmediate,
53 kSubSpMinusImmediate,
54 kSubRegister,
55 kRsbRegister,
56 kAddImmediate,
57 kAdcImmediate,
58 kAddSpPlusImmediate,
59 kTstImmediate,
60 kTeqImmediate,
61 kTstRegister,
62 kTeqRegister,
63 kAndImmediate,
64 kAddRegister,
65 kAdcRegister,
66 kStmdb,
67 kPush,
68 kStm,
69 kPop,
70 kLdm,
71 kUxtb,
72 kSxtb,
73 kUxth,
74 kUbfx,
75 kOrrImmediate,
76 kOrrRegister,
77 kEorImmediate,
78 kEorRegister,
79 kSbcRegister,
80 kAndRegister,
81 kBicRegister,
82 kBicImmediate,
83 kMvnRegister,
84 kLsrImmediate,
85 kAsrImmediate,
86 kLsrRegister,
87 kAsrRegister,
88 kStrdImmediate,
89 kStrRegister,
90 kStrbRegister,
91 kStrhRegister,
92 kLdrbRegister,
93 kLdrhRegister,
94 kLdrRegister,
95 kStrbImmediate,
96 kStrhImmediate,
97 kStrImmediate,
98 kStrex,
99 kSvc,
100 kBkpt,
101 kMsr,
102 kMrs,
103 kInvalid
104};
105
106struct InstrNop {
107 InstrId id; // base_type: u8
108 InstrFlagsSet flags; // base_type: u8
109};
110struct InstrDmb {
111 InstrId id; // base_type: u8
112 InstrFlagsSet flags; // base_type: u8
113};
115 InstrId id; // base_type: u8
116 InstrFlagsSet flags; // base_type: u8
117 u8 d;
118 u32 imm32;
119};
121 InstrId id; // base_type: u8
122 InstrFlagsSet flags; // base_type: u8
123 u8 d;
124 u8 m;
125 ImmShiftResults shift_res;
126};
128 InstrId id; // base_type: u8
129 InstrFlagsSet flags; // base_type: u8
130 u8 n;
131 u8 d;
132 u8 m;
133};
134struct InstrClz {
135 InstrId id; // base_type: u8
136 InstrFlagsSet flags; // base_type: u8
137 u8 d;
138 u8 m;
139};
140struct InstrSxth {
141 InstrId id; // base_type: u8
142 InstrFlagsSet flags; // base_type: u8
143 u8 m;
144 u8 d;
145 u8 rotation;
146};
147struct InstrTbbH {
148 InstrId id; // base_type: u8
149 InstrFlagsSet flags; // base_type: u8
150 u8 m;
151 u8 n;
152};
154 InstrId id; // base_type: u8
155 InstrFlagsSet flags; // base_type: u8
156 u8 n;
157 u8 m;
158 ImmShiftResults shift_res;
159};
161 InstrId id; // base_type: u8
162 InstrFlagsSet flags; // base_type: u8
163 u8 n;
164 u32 imm32;
165};
167 InstrId id; // base_type: u8
168 InstrFlagsSet flags; // base_type: u8
169 u8 n;
170 u32 imm32;
171};
173 InstrId id; // base_type: u8
174 InstrFlagsSet flags; // base_type: u8
175 u8 d;
176 ThumbImmediateResult imm32_carry;
177};
179 InstrId id; // base_type: u8
180 InstrFlagsSet flags; // base_type: u8
181 u8 d;
182 ThumbImmediateResult imm32_carry;
183};
185 InstrId id; // base_type: u8
186 InstrFlagsSet flags; // base_type: u8
187 u8 d;
188 u8 m;
189};
190struct InstrRrx {
191 InstrId id; // base_type: u8
192 InstrFlagsSet flags; // base_type: u8
193 u8 d;
194 u8 m;
195};
197 InstrId id; // base_type: u8
198 InstrFlagsSet flags; // base_type: u8
199 u8 t;
200 u8 n;
201 u32 imm32;
202};
204 InstrId id; // base_type: u8
205 InstrFlagsSet flags; // base_type: u8
206 u8 t;
207 u8 n;
208 u32 imm32;
209};
211 InstrId id; // base_type: u8
212 InstrFlagsSet flags; // base_type: u8
213 u8 t;
214 u8 n;
215 u32 imm32;
216};
218 InstrId id; // base_type: u8
219 InstrFlagsSet flags; // base_type: u8
220 u8 t;
221 u8 n;
222 u32 imm32;
223};
225 InstrId id; // base_type: u8
226 InstrFlagsSet flags; // base_type: u8
227 u8 t;
228 u8 n;
229 u32 imm32;
230};
232 InstrId id; // base_type: u8
233 InstrFlagsSet flags; // base_type: u8
234 u8 t;
235 u8 n;
236 u32 imm32;
237};
239 InstrId id; // base_type: u8
240 InstrFlagsSet flags; // base_type: u8
241 u8 t;
242 u8 t2;
243 u8 n;
244 u32 imm32;
245};
247 InstrId id; // base_type: u8
248 InstrFlagsSet flags; // base_type: u8
249 u8 t;
250 u32 imm32;
251};
252struct InstrIt {
253 InstrId id; // base_type: u8
254 InstrFlagsSet flags; // base_type: u8
255 u8 firstcond;
256 u8 mask;
257};
258struct InstrCbNZ {
259 InstrId id; // base_type: u8
260 InstrFlagsSet flags; // base_type: u8
261 u8 n;
262 i32 imm32;
263};
264struct InstrBl {
265 InstrId id; // base_type: u8
266 InstrFlagsSet flags; // base_type: u8
267 i32 imm32;
268};
269struct InstrBx {
270 InstrId id; // base_type: u8
271 InstrFlagsSet flags; // base_type: u8
272 u8 m;
273};
274struct InstrBlx {
275 InstrId id; // base_type: u8
276 InstrFlagsSet flags; // base_type: u8
277 u8 m;
278};
280 InstrId id; // base_type: u8
281 InstrFlagsSet flags; // base_type: u8
282 u8 cond;
283 i32 imm32;
284};
285struct InstrB {
286 InstrId id; // base_type: u8
287 InstrFlagsSet flags; // base_type: u8
288 i32 imm32;
289};
290struct InstrBfi {
291 InstrId id; // base_type: u8
292 InstrFlagsSet flags; // base_type: u8
293 u8 d;
294 u8 n;
295 u8 lsbit;
296 u8 msbit;
297};
298struct InstrUdiv {
299 InstrId id; // base_type: u8
300 InstrFlagsSet flags; // base_type: u8
301 u8 d;
302 u8 m;
303 u8 n;
304};
305struct InstrSdiv {
306 InstrId id; // base_type: u8
307 InstrFlagsSet flags; // base_type: u8
308 u8 d;
309 u8 m;
310 u8 n;
311};
312struct InstrMul {
313 InstrId id; // base_type: u8
314 InstrFlagsSet flags; // base_type: u8
315 u8 d;
316 u8 m;
317 u8 n;
318};
320 InstrId id; // base_type: u8
321 InstrFlagsSet flags; // base_type: u8
322 u8 dHi;
323 u8 dLo;
324 u8 m;
325 u8 n;
326};
328 InstrId id; // base_type: u8
329 InstrFlagsSet flags; // base_type: u8
330 u8 dHi;
331 u8 dLo;
332 u8 m;
333 u8 n;
334};
336 InstrId id; // base_type: u8
337 InstrFlagsSet flags; // base_type: u8
338 u8 dHi;
339 u8 dLo;
340 u8 m;
341 u8 n;
342};
343struct InstrMls {
344 InstrId id; // base_type: u8
345 InstrFlagsSet flags; // base_type: u8
346 u8 a;
347 u8 d;
348 u8 m;
349 u8 n;
350};
351struct InstrMla {
352 InstrId id; // base_type: u8
353 InstrFlagsSet flags; // base_type: u8
354 u8 a;
355 u8 d;
356 u8 m;
357 u8 n;
358};
360 InstrId id; // base_type: u8
361 InstrFlagsSet flags; // base_type: u8
362 u8 n;
363 u8 d;
364 u32 imm32;
365};
367 InstrId id; // base_type: u8
368 InstrFlagsSet flags; // base_type: u8
369 u8 n;
370 u8 d;
371 u32 imm32;
372};
374 InstrId id; // base_type: u8
375 InstrFlagsSet flags; // base_type: u8
376 u8 n;
377 u8 d;
378 u32 imm32;
379};
381 InstrId id; // base_type: u8
382 InstrFlagsSet flags; // base_type: u8
383 u8 d;
384 u32 imm32;
385};
387 InstrId id; // base_type: u8
388 InstrFlagsSet flags; // base_type: u8
389 ImmShiftResults shift_res;
390 u8 m;
391 u8 n;
392 u8 d;
393};
395 InstrId id; // base_type: u8
396 InstrFlagsSet flags; // base_type: u8
397 ImmShiftResults shift_res;
398 u8 m;
399 u8 n;
400 u8 d;
401};
403 InstrId id; // base_type: u8
404 InstrFlagsSet flags; // base_type: u8
405 u8 n;
406 u8 d;
407 u32 imm32;
408};
410 InstrId id; // base_type: u8
411 InstrFlagsSet flags; // base_type: u8
412 u8 n;
413 u8 d;
414 u32 imm32;
415};
417 InstrId id; // base_type: u8
418 InstrFlagsSet flags; // base_type: u8
419 u8 d;
420 u32 imm32;
421};
423 InstrId id; // base_type: u8
424 InstrFlagsSet flags; // base_type: u8
425 u8 n;
426 ThumbImmediateResult imm32_carry;
427};
429 InstrId id; // base_type: u8
430 InstrFlagsSet flags; // base_type: u8
431 u8 n;
432 ThumbImmediateResult imm32_carry;
433};
435 InstrId id; // base_type: u8
436 InstrFlagsSet flags; // base_type: u8
437 u8 n;
438 u8 m;
439 ImmShiftResults shift_res;
440};
442 InstrId id; // base_type: u8
443 InstrFlagsSet flags; // base_type: u8
444 u8 n;
445 u8 m;
446 ImmShiftResults shift_res;
447};
449 InstrId id; // base_type: u8
450 InstrFlagsSet flags; // base_type: u8
451 u8 n;
452 u8 d;
453 ThumbImmediateResult imm32_carry;
454};
456 InstrId id; // base_type: u8
457 InstrFlagsSet flags; // base_type: u8
458 ImmShiftResults shift_res;
459 u8 m;
460 u8 n;
461 u8 d;
462};
464 InstrId id; // base_type: u8
465 InstrFlagsSet flags; // base_type: u8
466 ImmShiftResults shift_res;
467 u8 m;
468 u8 n;
469 u8 d;
470};
472 InstrId id; // base_type: u8
473 InstrFlagsSet flags; // base_type: u8
474 u8 n;
475 u32 registers;
476};
477struct InstrPush {
478 InstrId id; // base_type: u8
479 InstrFlagsSet flags; // base_type: u8
480 u32 registers;
481};
482struct InstrStm {
483 InstrId id; // base_type: u8
484 InstrFlagsSet flags; // base_type: u8
485 u32 registers;
486 u8 n;
487};
488struct InstrPop {
489 InstrId id; // base_type: u8
490 InstrFlagsSet flags; // base_type: u8
491 u32 registers;
492};
493struct InstrLdm {
494 InstrId id; // base_type: u8
495 InstrFlagsSet flags; // base_type: u8
496 u32 registers;
497 u8 n;
498};
499struct InstrUxtb {
500 InstrId id; // base_type: u8
501 InstrFlagsSet flags; // base_type: u8
502 u8 m;
503 u8 d;
504 u8 rotation;
505};
506struct InstrSxtb {
507 InstrId id; // base_type: u8
508 InstrFlagsSet flags; // base_type: u8
509 u8 m;
510 u8 d;
511 u8 rotation;
512};
513struct InstrUxth {
514 InstrId id; // base_type: u8
515 InstrFlagsSet flags; // base_type: u8
516 u8 m;
517 u8 d;
518 u8 rotation;
519};
520struct InstrUbfx {
521 InstrId id; // base_type: u8
522 InstrFlagsSet flags; // base_type: u8
523 u8 d;
524 u8 n;
525 u8 lsbit;
526 u8 widthminus1;
527};
529 InstrId id; // base_type: u8
530 InstrFlagsSet flags; // base_type: u8
531 u8 n;
532 u8 d;
533 ThumbImmediateResult imm32_carry;
534};
536 InstrId id; // base_type: u8
537 InstrFlagsSet flags; // base_type: u8
538 u8 n;
539 u8 d;
540 u8 m;
541 ImmShiftResults shift_res;
542};
544 InstrId id; // base_type: u8
545 InstrFlagsSet flags; // base_type: u8
546 u8 n;
547 u8 d;
548 ThumbImmediateResult imm32_carry;
549};
551 InstrId id; // base_type: u8
552 InstrFlagsSet flags; // base_type: u8
553 u8 n;
554 u8 d;
555 u8 m;
556 ImmShiftResults shift_res;
557};
559 InstrId id; // base_type: u8
560 InstrFlagsSet flags; // base_type: u8
561 u8 n;
562 u8 d;
563 u8 m;
564 ImmShiftResults shift_res;
565};
567 InstrId id; // base_type: u8
568 InstrFlagsSet flags; // base_type: u8
569 u8 n;
570 u8 d;
571 u8 m;
572 ImmShiftResults shift_res;
573};
575 InstrId id; // base_type: u8
576 InstrFlagsSet flags; // base_type: u8
577 u8 n;
578 u8 d;
579 u8 m;
580 ImmShiftResults shift_res;
581};
583 InstrId id; // base_type: u8
584 InstrFlagsSet flags; // base_type: u8
585 u8 n;
586 u8 d;
587 ThumbImmediateResult imm32_carry;
588};
590 InstrId id; // base_type: u8
591 InstrFlagsSet flags; // base_type: u8
592 u8 m;
593 u8 d;
594 ImmShiftResults shift_res;
595};
597 InstrId id; // base_type: u8
598 InstrFlagsSet flags; // base_type: u8
599 u8 m;
600 u8 d;
601 ImmShiftResults shift_res;
602};
604 InstrId id; // base_type: u8
605 InstrFlagsSet flags; // base_type: u8
606 u8 m;
607 u8 d;
608 ImmShiftResults shift_res;
609};
611 InstrId id; // base_type: u8
612 InstrFlagsSet flags; // base_type: u8
613 u8 n;
614 u8 d;
615 u8 m;
616};
618 InstrId id; // base_type: u8
619 InstrFlagsSet flags; // base_type: u8
620 u8 n;
621 u8 d;
622 u8 m;
623};
625 InstrId id; // base_type: u8
626 InstrFlagsSet flags; // base_type: u8
627 u8 n;
628 u8 t;
629 u8 t2;
630 u32 imm32;
631};
633 InstrId id; // base_type: u8
634 InstrFlagsSet flags; // base_type: u8
635 u8 n;
636 u8 m;
637 u8 t;
638 ImmShiftResults shift_res;
639};
641 InstrId id; // base_type: u8
642 InstrFlagsSet flags; // base_type: u8
643 u8 n;
644 u8 m;
645 u8 t;
646 ImmShiftResults shift_res;
647};
649 InstrId id; // base_type: u8
650 InstrFlagsSet flags; // base_type: u8
651 u8 n;
652 u8 m;
653 u8 t;
654 ImmShiftResults shift_res;
655};
657 InstrId id; // base_type: u8
658 InstrFlagsSet flags; // base_type: u8
659 u8 m;
660 u8 n;
661 u8 t;
662 ImmShiftResults shift_res;
663};
665 InstrId id; // base_type: u8
666 InstrFlagsSet flags; // base_type: u8
667 u8 m;
668 u8 n;
669 u8 t;
670 ImmShiftResults shift_res;
671};
673 InstrId id; // base_type: u8
674 InstrFlagsSet flags; // base_type: u8
675 u8 m;
676 u8 n;
677 u8 t;
678 ImmShiftResults shift_res;
679};
681 InstrId id; // base_type: u8
682 InstrFlagsSet flags; // base_type: u8
683 u8 n;
684 u8 t;
685 u32 imm32;
686};
688 InstrId id; // base_type: u8
689 InstrFlagsSet flags; // base_type: u8
690 u8 n;
691 u8 t;
692 u32 imm32;
693};
695 InstrId id; // base_type: u8
696 InstrFlagsSet flags; // base_type: u8
697 u8 n;
698 u8 t;
699 u32 imm32;
700};
702 InstrId id; // base_type: u8
703 InstrFlagsSet flags; // base_type: u8
704 u8 n;
705 u8 t;
706 u8 d;
707 u32 imm32;
708};
709struct InstrSvc {
710 InstrId id; // base_type: u8
711 InstrFlagsSet flags; // base_type: u8
712 u32 imm32;
713};
714struct InstrBkpt {
715 InstrId id; // base_type: u8
716 InstrFlagsSet flags; // base_type: u8
717 u32 imm32;
718};
719struct InstrMsr {
720 InstrId id; // base_type: u8
721 InstrFlagsSet flags; // base_type: u8
722 u8 n;
723 u8 mask;
724 u8 SYSm;
725};
726struct InstrMrs {
727 InstrId id; // base_type: u8
728 InstrFlagsSet flags; // base_type: u8
729 u8 d;
730 u8 mask;
731 u8 SYSm;
732};
733
734union Instr {
735 InstrNop nop;
736 InstrDmb dmb;
737 InstrAddPcPlusImmediate add_pc_plus_immediate;
738 InstrLslImmediate lsl_immediate;
739 InstrLslRegister lsl_register;
740 InstrClz clz;
741 InstrSxth sxth;
742 InstrTbbH tbb_h;
743 InstrCmpRegister cmp_register;
744 InstrCmpImmediate cmp_immediate;
745 InstrCmnImmediate cmn_immediate;
746 InstrMovImmediate mov_immediate;
747 InstrMvnImmediate mvn_immediate;
748 InstrMovRegister mov_register;
749 InstrRrx rrx;
750 InstrLdrbImmediate ldrb_immediate;
751 InstrLdrsbImmediate ldrsb_immediate;
752 InstrLdrhImmediate ldrh_immediate;
753 InstrLdrshImmediate ldrsh_immediate;
754 InstrLdrImmediate ldr_immediate;
755 InstrLdrex ldrex;
756 InstrLdrdImmediate ldrd_immediate;
757 InstrLdrLiteral ldr_literal;
758 InstrIt it;
759 InstrCbNZ cb_n_z;
760 InstrBl bl;
761 InstrBx bx;
762 InstrBlx blx;
763 InstrBCond b_cond;
764 InstrB b;
765 InstrBfi bfi;
766 InstrUdiv udiv;
767 InstrSdiv sdiv;
768 InstrMul mul;
769 InstrUmlal umlal;
770 InstrUmull umull;
771 InstrSmull smull;
772 InstrMls mls;
773 InstrMla mla;
774 InstrSubImmediate sub_immediate;
775 InstrSbcImmediate sbc_immediate;
776 InstrRsbImmediate rsb_immediate;
777 InstrSubSpMinusImmediate sub_sp_minus_immediate;
778 InstrSubRegister sub_register;
779 InstrRsbRegister rsb_register;
780 InstrAddImmediate add_immediate;
781 InstrAdcImmediate adc_immediate;
782 InstrAddSpPlusImmediate add_sp_plus_immediate;
783 InstrTstImmediate tst_immediate;
784 InstrTeqImmediate teq_immediate;
785 InstrTstRegister tst_register;
786 InstrTeqRegister teq_register;
787 InstrAndImmediate and_immediate;
788 InstrAddRegister add_register;
789 InstrAdcRegister adc_register;
790 InstrStmdb stmdb;
791 InstrPush push;
792 InstrStm stm;
793 InstrPop pop;
794 InstrLdm ldm;
795 InstrUxtb uxtb;
796 InstrSxtb sxtb;
797 InstrUxth uxth;
798 InstrUbfx ubfx;
799 InstrOrrImmediate orr_immediate;
800 InstrOrrRegister orr_register;
801 InstrEorImmediate eor_immediate;
802 InstrEorRegister eor_register;
803 InstrSbcRegister sbc_register;
804 InstrAndRegister and_register;
805 InstrBicRegister bic_register;
806 InstrBicImmediate bic_immediate;
807 InstrMvnRegister mvn_register;
808 InstrLsrImmediate lsr_immediate;
809 InstrAsrImmediate asr_immediate;
810 InstrLsrRegister lsr_register;
811 InstrAsrRegister asr_register;
812 InstrStrdImmediate strd_immediate;
813 InstrStrRegister str_register;
814 InstrStrbRegister strb_register;
815 InstrStrhRegister strh_register;
816 InstrLdrbRegister ldrb_register;
817 InstrLdrhRegister ldrh_register;
818 InstrLdrRegister ldr_register;
819 InstrStrbImmediate strb_immediate;
820 InstrStrhImmediate strh_immediate;
821 InstrStrImmediate str_immediate;
822 InstrStrex strex;
823 InstrSvc svc;
824 InstrBkpt bkpt;
825 InstrMsr msr;
826 InstrMrs mrs;
827 InstrId id; // the decoded opcode ... used to identify the struct
828 Instr() : id(InstrId::kInvalid) {}
829 Instr(const InstrId &arg) : id(arg) {}
830 Instr(const InstrNop &arg) : nop(arg) {}
831 Instr(const InstrDmb &arg) : dmb(arg) {}
832 Instr(const InstrAddPcPlusImmediate &arg) : add_pc_plus_immediate(arg) {}
833 Instr(const InstrLslImmediate &arg) : lsl_immediate(arg) {}
834 Instr(const InstrLslRegister &arg) : lsl_register(arg) {}
835 Instr(const InstrClz &arg) : clz(arg) {}
836 Instr(const InstrSxth &arg) : sxth(arg) {}
837 Instr(const InstrTbbH &arg) : tbb_h(arg) {}
838 Instr(const InstrCmpRegister &arg) : cmp_register(arg) {}
839 Instr(const InstrCmpImmediate &arg) : cmp_immediate(arg) {}
840 Instr(const InstrCmnImmediate &arg) : cmn_immediate(arg) {}
841 Instr(const InstrMovImmediate &arg) : mov_immediate(arg) {}
842 Instr(const InstrMvnImmediate &arg) : mvn_immediate(arg) {}
843 Instr(const InstrMovRegister &arg) : mov_register(arg) {}
844 Instr(const InstrRrx &arg) : rrx(arg) {}
845 Instr(const InstrLdrbImmediate &arg) : ldrb_immediate(arg) {}
846 Instr(const InstrLdrsbImmediate &arg) : ldrsb_immediate(arg) {}
847 Instr(const InstrLdrhImmediate &arg) : ldrh_immediate(arg) {}
848 Instr(const InstrLdrshImmediate &arg) : ldrsh_immediate(arg) {}
849 Instr(const InstrLdrImmediate &arg) : ldr_immediate(arg) {}
850 Instr(const InstrLdrex &arg) : ldrex(arg) {}
851 Instr(const InstrLdrdImmediate &arg) : ldrd_immediate(arg) {}
852 Instr(const InstrLdrLiteral &arg) : ldr_literal(arg) {}
853 Instr(const InstrIt &arg) : it(arg) {}
854 Instr(const InstrCbNZ &arg) : cb_n_z(arg) {}
855 Instr(const InstrBl &arg) : bl(arg) {}
856 Instr(const InstrBx &arg) : bx(arg) {}
857 Instr(const InstrBlx &arg) : blx(arg) {}
858 Instr(const InstrBCond &arg) : b_cond(arg) {}
859 Instr(const InstrB &arg) : b(arg) {}
860 Instr(const InstrBfi &arg) : bfi(arg) {}
861 Instr(const InstrUdiv &arg) : udiv(arg) {}
862 Instr(const InstrSdiv &arg) : sdiv(arg) {}
863 Instr(const InstrMul &arg) : mul(arg) {}
864 Instr(const InstrUmlal &arg) : umlal(arg) {}
865 Instr(const InstrUmull &arg) : umull(arg) {}
866 Instr(const InstrSmull &arg) : smull(arg) {}
867 Instr(const InstrMls &arg) : mls(arg) {}
868 Instr(const InstrMla &arg) : mla(arg) {}
869 Instr(const InstrSubImmediate &arg) : sub_immediate(arg) {}
870 Instr(const InstrSbcImmediate &arg) : sbc_immediate(arg) {}
871 Instr(const InstrRsbImmediate &arg) : rsb_immediate(arg) {}
872 Instr(const InstrSubSpMinusImmediate &arg) : sub_sp_minus_immediate(arg) {}
873 Instr(const InstrSubRegister &arg) : sub_register(arg) {}
874 Instr(const InstrRsbRegister &arg) : rsb_register(arg) {}
875 Instr(const InstrAddImmediate &arg) : add_immediate(arg) {}
876 Instr(const InstrAdcImmediate &arg) : adc_immediate(arg) {}
877 Instr(const InstrAddSpPlusImmediate &arg) : add_sp_plus_immediate(arg) {}
878 Instr(const InstrTstImmediate &arg) : tst_immediate(arg) {}
879 Instr(const InstrTeqImmediate &arg) : teq_immediate(arg) {}
880 Instr(const InstrTstRegister &arg) : tst_register(arg) {}
881 Instr(const InstrTeqRegister &arg) : teq_register(arg) {}
882 Instr(const InstrAndImmediate &arg) : and_immediate(arg) {}
883 Instr(const InstrAddRegister &arg) : add_register(arg) {}
884 Instr(const InstrAdcRegister &arg) : adc_register(arg) {}
885 Instr(const InstrStmdb &arg) : stmdb(arg) {}
886 Instr(const InstrPush &arg) : push(arg) {}
887 Instr(const InstrStm &arg) : stm(arg) {}
888 Instr(const InstrPop &arg) : pop(arg) {}
889 Instr(const InstrLdm &arg) : ldm(arg) {}
890 Instr(const InstrUxtb &arg) : uxtb(arg) {}
891 Instr(const InstrSxtb &arg) : sxtb(arg) {}
892 Instr(const InstrUxth &arg) : uxth(arg) {}
893 Instr(const InstrUbfx &arg) : ubfx(arg) {}
894 Instr(const InstrOrrImmediate &arg) : orr_immediate(arg) {}
895 Instr(const InstrOrrRegister &arg) : orr_register(arg) {}
896 Instr(const InstrEorImmediate &arg) : eor_immediate(arg) {}
897 Instr(const InstrEorRegister &arg) : eor_register(arg) {}
898 Instr(const InstrSbcRegister &arg) : sbc_register(arg) {}
899 Instr(const InstrAndRegister &arg) : and_register(arg) {}
900 Instr(const InstrBicRegister &arg) : bic_register(arg) {}
901 Instr(const InstrBicImmediate &arg) : bic_immediate(arg) {}
902 Instr(const InstrMvnRegister &arg) : mvn_register(arg) {}
903 Instr(const InstrLsrImmediate &arg) : lsr_immediate(arg) {}
904 Instr(const InstrAsrImmediate &arg) : asr_immediate(arg) {}
905 Instr(const InstrLsrRegister &arg) : lsr_register(arg) {}
906 Instr(const InstrAsrRegister &arg) : asr_register(arg) {}
907 Instr(const InstrStrdImmediate &arg) : strd_immediate(arg) {}
908 Instr(const InstrStrRegister &arg) : str_register(arg) {}
909 Instr(const InstrStrbRegister &arg) : strb_register(arg) {}
910 Instr(const InstrStrhRegister &arg) : strh_register(arg) {}
911 Instr(const InstrLdrbRegister &arg) : ldrb_register(arg) {}
912 Instr(const InstrLdrhRegister &arg) : ldrh_register(arg) {}
913 Instr(const InstrLdrRegister &arg) : ldr_register(arg) {}
914 Instr(const InstrStrbImmediate &arg) : strb_immediate(arg) {}
915 Instr(const InstrStrhImmediate &arg) : strh_immediate(arg) {}
916 Instr(const InstrStrImmediate &arg) : str_immediate(arg) {}
917 Instr(const InstrStrex &arg) : strex(arg) {}
918 Instr(const InstrSvc &arg) : svc(arg) {}
919 Instr(const InstrBkpt &arg) : bkpt(arg) {}
920 Instr(const InstrMsr &arg) : msr(arg) {}
921 Instr(const InstrMrs &arg) : mrs(arg) {}
922};
923
924} // namespace libmicroemu::internal
The libmicroemu::internal namespace contains all classes and functions of libmicroemu which are priva...
Definition bkpt_flags.h:6
Definition thumb_immediate_result.h:6
Definition imm_shift_results.h:15
Definition instr.h:279
Definition instr.h:285
Definition instr.h:290
Definition instr.h:714
Definition instr.h:264
Definition instr.h:274
Definition instr.h:269
Definition instr.h:258
Definition instr.h:134
Definition instr.h:110
Definition instr.h:252
Definition instr.h:493
Definition instr.h:231
Definition instr.h:351
Definition instr.h:343
Definition instr.h:726
Definition instr.h:719
Definition instr.h:312
Definition instr.h:106
Definition instr.h:488
Definition instr.h:477
Definition instr.h:190
Definition instr.h:305
Definition instr.h:335
Definition instr.h:482
Definition instr.h:471
Definition instr.h:701
Definition instr.h:709
Definition instr.h:506
Definition instr.h:140
Definition instr.h:147
Definition instr.h:520
Definition instr.h:298
Definition instr.h:319
Definition instr.h:327
Definition instr.h:499
Definition instr.h:513