gem5 [DEVELOP-FOR-25.1]
Loading...
Searching...
No Matches
sve.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2017-2019,2025 ARM Limited
3 * All rights reserved
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software
9 * licensed hereunder. You may use the software subject to the license
10 * terms below provided that you ensure that this notice is replicated
11 * unmodified and in its entirety in all distributions of the software,
12 * modified or unmodified, in source code or in binary form.
13 *
14 * Redistribution and use in source and binary forms, with or without
15 * modification, are permitted provided that the following conditions are
16 * met: redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer;
18 * redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution;
21 * neither the name of the copyright holders nor the names of its
22 * contributors may be used to endorse or promote products derived from
23 * this software without specific prior written permission.
24 *
25 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
26 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
27 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
28 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
29 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
30 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
31 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
32 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
33 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
34 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
35 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36 */
37
38#ifndef __ARCH_ARM_INSTS_SVE_HH__
39#define __ARCH_ARM_INSTS_SVE_HH__
40
42
43namespace gem5
44{
45
46namespace ArmISA {
47
55
58
61{
62 protected:
64 int8_t imm1;
65 int8_t imm2;
66
67 SveIndexIIOp(const char* mnem, ExtMachInst _machInst,
68 OpClass __opClass, RegIndex _dest,
69 int8_t _imm1, int8_t _imm2) :
70 ArmStaticInst(mnem, _machInst, __opClass),
71 dest(_dest), imm1(_imm1), imm2(_imm2)
72 {}
73 std::string generateDisassembly(
74 Addr pc, const loader::SymbolTable *symtab) const override;
75};
76
78{
79 protected:
81 int8_t imm1;
83
84 SveIndexIROp(const char* mnem, ExtMachInst _machInst,
85 OpClass __opClass, RegIndex _dest,
86 int8_t _imm1, RegIndex _op2) :
87 ArmStaticInst(mnem, _machInst, __opClass),
88 dest(_dest), imm1(_imm1), op2(_op2)
89 {}
90 std::string generateDisassembly(
91 Addr pc, const loader::SymbolTable *symtab) const override;
92};
93
95{
96 protected:
99 int8_t imm2;
100
101 SveIndexRIOp(const char* mnem, ExtMachInst _machInst,
102 OpClass __opClass, RegIndex _dest,
103 RegIndex _op1, int8_t _imm2) :
104 ArmStaticInst(mnem, _machInst, __opClass),
105 dest(_dest), op1(_op1), imm2(_imm2)
106 {}
107 std::string generateDisassembly(
108 Addr pc, const loader::SymbolTable *symtab) const override;
109};
110
112{
113 protected:
117
118 SveIndexRROp(const char* mnem, ExtMachInst _machInst,
119 OpClass __opClass, RegIndex _dest,
120 RegIndex _op1, RegIndex _op2) :
121 ArmStaticInst(mnem, _machInst, __opClass),
122 dest(_dest), op1(_op1), op2(_op2)
123 {}
124 std::string generateDisassembly(
125 Addr pc, const loader::SymbolTable *symtab) const override;
126};
127
128// Predicate count SVE instruction.
130{
131 protected:
136
137 SvePredCountOp(const char* mnem, ExtMachInst _machInst,
138 OpClass __opClass, RegIndex _dest, RegIndex _gp,
139 bool _srcIs32b = false, bool _destIsVec = false) :
140 ArmStaticInst(mnem, _machInst, __opClass),
141 dest(_dest), gp(_gp),
142 srcIs32b(_srcIs32b), destIsVec(_destIsVec)
143 {}
144 std::string generateDisassembly(
145 Addr pc, const loader::SymbolTable *symtab) const override;
146};
147
148// Predicate count SVE instruction (predicated).
150{
151 protected:
155
156 SvePredCountPredOp(const char* mnem, ExtMachInst _machInst,
157 OpClass __opClass, RegIndex _dest, RegIndex _op1,
158 RegIndex _gp) :
159 ArmStaticInst(mnem, _machInst, __opClass),
160 dest(_dest), op1(_op1), gp(_gp)
161 {}
162 std::string generateDisassembly(
163 Addr pc, const loader::SymbolTable *symtab) const override;
164};
165
166// Predicate count SVE instruction (predicate as counter).
168{
169 protected:
172 uint64_t imm;
173
174 SvePredCountPngOp(const char *mnem, ExtMachInst _machInst,
175 OpClass __opClass, RegIndex _dest, RegIndex _op1,
176 uint64_t _imm)
177 : ArmStaticInst(mnem, _machInst, __opClass),
178 dest(_dest),
179 op1(_op1),
180 imm(_imm)
181 {}
182 std::string
184 const loader::SymbolTable *symtab) const override;
185};
186
189{
190 protected:
193
194 SveWhileOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
195 RegIndex _dest, RegIndex _op1, RegIndex _op2,
196 bool _srcIs32b) :
197 ArmStaticInst(mnem, _machInst, __opClass),
198 dest(_dest), op1(_op1), op2(_op2), srcIs32b(_srcIs32b)
199 {}
200 std::string generateDisassembly(
201 Addr pc, const loader::SymbolTable *symtab) const override;
202};
203
206{
207 protected:
210
211 SveWhilePairOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
212 RegIndex _dest, RegIndex _dest2, RegIndex _op1,
213 RegIndex _op2, bool _srcIs32b)
214 : ArmStaticInst(mnem, _machInst, __opClass),
215 dest(_dest),
216 dest2(_dest2),
217 op1(_op1),
218 op2(_op2),
219 srcIs32b(_srcIs32b)
220 {}
221 std::string
223 const loader::SymbolTable *symtab) const override;
224};
225
228{
229 protected:
231 uint64_t imm;
233
234 SveWhilePngOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
235 RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm,
236 bool _srcIs32b)
237 : ArmStaticInst(mnem, _machInst, __opClass),
238 dest(_dest),
239 op1(_op1),
240 op2(_op2),
241 imm(_imm),
242 srcIs32b(_srcIs32b)
243 {}
244 std::string
246 const loader::SymbolTable *symtab) const override;
247};
248
251{
252 protected:
257 uint64_t imm;
258
259 SvePselOp(const char *mnem, ExtMachInst _machInst,
260 OpClass __opClass, RegIndex _dest,
261 RegIndex _op1, RegIndex _gp,
262 RegIndex _op2, uint64_t _imm) :
263 ArmStaticInst(mnem, _machInst, __opClass),
264 dest(_dest), op1(_op1), gp(_gp), op2(_op2), imm(_imm)
265 {}
266
267 std::string generateDisassembly(
268 Addr pc, const loader::SymbolTable *symtab) const override;
269};
270
273{
274 protected:
277 uint64_t imm;
278
279 SvePextOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
280 RegIndex _dest, RegIndex _op1, uint64_t _imm)
281 : ArmStaticInst(mnem, _machInst, __opClass),
282 dest(_dest),
283 op1(_op1),
284 imm(_imm)
285 {}
286
287 std::string
289 const loader::SymbolTable *symtab) const override;
290};
291
294{
295 protected:
299 uint64_t imm;
300
301 SvePextPairOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
302 RegIndex _dest, RegIndex _dest2, RegIndex _op1,
303 uint64_t _imm)
304 : ArmStaticInst(mnem, _machInst, __opClass),
305 dest(_dest),
306 dest2(_dest2),
307 op1(_op1),
308 imm(_imm)
309 {}
310
311 std::string
313 const loader::SymbolTable *symtab) const override;
314};
315
318{
319 protected:
321
322 SveCompTermOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
323 RegIndex _op1, RegIndex _op2) :
324 ArmStaticInst(mnem, _machInst, __opClass),
325 op1(_op1), op2(_op2)
326 {}
327 std::string generateDisassembly(
328 Addr pc, const loader::SymbolTable *symtab) const override;
329};
330
333{
334 protected:
336
337 SveUnaryPredOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
338 RegIndex _dest, RegIndex _op1, RegIndex _gp) :
339 ArmStaticInst(mnem, _machInst, __opClass),
340 dest(_dest), op1(_op1), gp(_gp)
341 {}
342
343 std::string generateDisassembly(
344 Addr pc, const loader::SymbolTable *symtab) const override;
345};
346
349{
350 protected:
352
353 SveUnaryUnpredOp(const char* mnem, ExtMachInst _machInst,
354 OpClass __opClass, RegIndex _dest, RegIndex _op1) :
355 ArmStaticInst(mnem, _machInst, __opClass),
356 dest(_dest), op1(_op1)
357 {}
358
359 std::string generateDisassembly(
360 Addr pc, const loader::SymbolTable *symtab) const override;
361};
362
365{
366 protected:
368 uint64_t imm;
369
370 SveUnaryWideImmUnpredOp(const char* mnem, ExtMachInst _machInst,
371 OpClass __opClass, RegIndex _dest,
372 uint64_t _imm) :
373 ArmStaticInst(mnem, _machInst, __opClass),
374 dest(_dest), imm(_imm)
375 {}
376
377 std::string generateDisassembly(
378 Addr pc, const loader::SymbolTable *symtab) const override;
379};
380
383{
384 protected:
386 uint64_t imm;
388
390
391 SveUnaryWideImmPredOp(const char* mnem, ExtMachInst _machInst,
392 OpClass __opClass, RegIndex _dest,
393 uint64_t _imm, RegIndex _gp, bool _isMerging) :
394 ArmStaticInst(mnem, _machInst, __opClass),
395 dest(_dest), imm(_imm), gp(_gp), isMerging(_isMerging)
396 {}
397
398 std::string generateDisassembly(
399 Addr pc, const loader::SymbolTable *symtab) const override;
400};
401
404{
405 protected:
407 uint64_t imm;
408
409 SveBinImmUnpredConstrOp(const char* mnem, ExtMachInst _machInst,
410 OpClass __opClass, RegIndex _dest, RegIndex _op1,
411 uint64_t _imm) :
412 ArmStaticInst(mnem, _machInst, __opClass),
413 dest(_dest), op1(_op1), imm(_imm)
414 {}
415
416 std::string generateDisassembly(
417 Addr pc, const loader::SymbolTable *symtab) const override;
418};
419
422{
423 protected:
425 uint64_t imm;
426
427 SveBinImmPredOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
428 RegIndex _dest, uint64_t _imm, RegIndex _gp) :
429 ArmStaticInst(mnem, _machInst, __opClass),
430 dest(_dest), gp(_gp), imm(_imm)
431 {}
432
433 std::string generateDisassembly(
434 Addr pc, const loader::SymbolTable *symtab) const override;
435};
436
439{
440 protected:
442 uint64_t imm;
443
444 SveBinWideImmUnpredOp(const char* mnem, ExtMachInst _machInst,
445 OpClass __opClass, RegIndex _dest,
446 uint64_t _imm) :
447 ArmStaticInst(mnem, _machInst, __opClass),
448 dest(_dest), imm(_imm)
449 {}
450
451 std::string generateDisassembly(
452 Addr pc, const loader::SymbolTable *symtab) const override;
453};
454
457{
458 protected:
460
461 SveBinDestrPredOp(const char* mnem, ExtMachInst _machInst,
462 OpClass __opClass, RegIndex _dest, RegIndex _op2,
463 RegIndex _gp) :
464 ArmStaticInst(mnem, _machInst, __opClass),
465 dest(_dest), op2(_op2), gp(_gp)
466 {}
467
468 std::string generateDisassembly(
469 Addr pc, const loader::SymbolTable *symtab) const override;
470};
471
474{
475 protected:
478
479 SveBinConstrPredOp(const char* mnem, ExtMachInst _machInst,
480 OpClass __opClass, RegIndex _dest, RegIndex _op1,
481 RegIndex _op2, RegIndex _gp,
482 SvePredType _predType) :
483 ArmStaticInst(mnem, _machInst, __opClass),
484 dest(_dest), op1(_op1), op2(_op2), gp(_gp), predType(_predType)
485 {}
486
487 std::string generateDisassembly(
488 Addr pc, const loader::SymbolTable *symtab) const override;
489};
490
493{
494 protected:
496
497 SveBinUnpredOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
498 RegIndex _dest, RegIndex _op1, RegIndex _op2) :
499 ArmStaticInst(mnem, _machInst, __opClass),
500 dest(_dest), op1(_op1), op2(_op2)
501 {}
502
503 std::string generateDisassembly(
504 Addr pc, const loader::SymbolTable *symtab) const override;
505};
506
509{
510 protected:
512 uint8_t index;
513
514 SveBinIdxUnpredOp(const char* mnem, ExtMachInst _machInst,
515 OpClass __opClass, RegIndex _dest, RegIndex _op1,
516 RegIndex _op2, uint8_t _index) :
517 ArmStaticInst(mnem, _machInst, __opClass),
518 dest(_dest), op1(_op1), op2(_op2), index(_index)
519 {}
520
521 std::string generateDisassembly(
522 Addr pc, const loader::SymbolTable *symtab) const override;
523};
524
527{
528 protected:
530 bool isSel;
531
532 SvePredLogicalOp(const char* mnem, ExtMachInst _machInst,
533 OpClass __opClass, RegIndex _dest, RegIndex _op1,
534 RegIndex _op2, RegIndex _gp, bool _isSel = false) :
535 ArmStaticInst(mnem, _machInst, __opClass),
536 dest(_dest), op1(_op1), op2(_op2), gp(_gp), isSel(_isSel)
537 {}
538
539 std::string generateDisassembly(
540 Addr pc, const loader::SymbolTable *symtab) const override;
541};
542
545{
546 protected:
548
549 SvePredBinPermOp(const char* mnem, ExtMachInst _machInst,
550 OpClass __opClass, RegIndex _dest, RegIndex _op1,
551 RegIndex _op2) :
552 ArmStaticInst(mnem, _machInst, __opClass),
553 dest(_dest), op1(_op1), op2(_op2)
554 {}
555
556 std::string generateDisassembly(
557 Addr pc, const loader::SymbolTable *symtab) const override;
558};
559
562{
563 protected:
565
566 SveCmpOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
567 RegIndex _dest, RegIndex _op1, RegIndex _op2,
568 RegIndex _gp) :
569 ArmStaticInst(mnem, _machInst, __opClass),
570 dest(_dest), gp(_gp), op1(_op1), op2(_op2)
571 {}
572
573 std::string generateDisassembly(
574 Addr pc, const loader::SymbolTable *symtab) const override;
575};
576
579{
580 protected:
582 uint64_t imm;
583
584 SveCmpImmOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
585 RegIndex _dest, RegIndex _op1, uint64_t _imm,
586 RegIndex _gp) :
587 ArmStaticInst(mnem, _machInst, __opClass),
588 dest(_dest), gp(_gp), op1(_op1), imm(_imm)
589 {}
590
591 std::string generateDisassembly(
592 Addr pc, const loader::SymbolTable *symtab) const override;
593};
594
597{
598 protected:
600
601 SveTerPredOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
602 RegIndex _dest, RegIndex _op1, RegIndex _op2,
603 RegIndex _gp) :
604 ArmStaticInst(mnem, _machInst, __opClass),
605 dest(_dest), op1(_op1), op2(_op2), gp(_gp)
606 {}
607
608 std::string generateDisassembly(
609 Addr pc, const loader::SymbolTable *symtab) const override;
610};
611
614{
615 protected:
617
618 SveTerUnpredOp(const char* mnem, ExtMachInst _machInst,
619 OpClass __opClass, RegIndex _dest,
620 RegIndex _op1, RegIndex _op2) :
621 ArmStaticInst(mnem, _machInst, __opClass),
622 dest(_dest), op1(_op1), op2(_op2)
623 {}
624
625 std::string generateDisassembly(
626 Addr pc, const loader::SymbolTable *symtab) const override;
627};
628
631{
632 protected:
634 uint64_t imm;
635
636 SveTerImmUnpredOp(const char* mnem, ExtMachInst _machInst,
637 OpClass __opClass, RegIndex _dest, RegIndex _op2,
638 uint64_t _imm) :
639 ArmStaticInst(mnem, _machInst, __opClass),
640 dest(_dest), op2(_op2), imm(_imm)
641 {}
642
643 std::string generateDisassembly(
644 Addr pc, const loader::SymbolTable *symtab) const override;
645};
646
649{
650 protected:
652 uint8_t index;
653
654 SveTerIdxUnpredOp(const char *mnem, ExtMachInst _machInst,
655 OpClass __opClass, RegIndex _dest, RegIndex _op1,
656 RegIndex _op2, uint8_t _index)
657 : ArmStaticInst(mnem, _machInst, __opClass),
658 dest(_dest),
659 op1(_op1),
660 op2(_op2),
661 index(_index)
662 {}
663
664 std::string
666 const loader::SymbolTable *symtab) const override;
667};
668
671{
672 protected:
674
675 SveReducOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
676 RegIndex _dest, RegIndex _op1, RegIndex _gp) :
677 ArmStaticInst(mnem, _machInst, __opClass),
678 dest(_dest), op1(_op1), gp(_gp)
679 {}
680
681 std::string generateDisassembly(
682 Addr pc, const loader::SymbolTable *symtab) const override;
683};
684
687{
688 protected:
690
691 SveOrdReducOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
692 RegIndex _dest, RegIndex _op1, RegIndex _gp) :
693 ArmStaticInst(mnem, _machInst, __opClass),
694 dest(_dest), op1(_op1), gp(_gp)
695 {}
696
697 std::string generateDisassembly(
698 Addr pc, const loader::SymbolTable *symtab) const override;
699};
700
703{
704 protected:
706 uint8_t imm;
707
708 SvePtrueOp(const char* mnem, ExtMachInst _machInst,
709 OpClass __opClass, RegIndex _dest, uint8_t _imm) :
710 ArmStaticInst(mnem, _machInst, __opClass),
711 dest(_dest), imm(_imm)
712 {}
713
714 std::string generateDisassembly(
715 Addr pc, const loader::SymbolTable *symtab) const override;
716};
717
720{
721 protected:
723 uint8_t imm;
724
725 SvePtruePngOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
726 RegIndex _dest, uint8_t _imm)
727 : ArmStaticInst(mnem, _machInst, __opClass), dest(_dest), imm(_imm)
728 {}
729
730 std::string
732 const loader::SymbolTable *symtab) const override;
733};
734
737{
738 protected:
743
744 SveIntCmpOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
745 RegIndex _dest, RegIndex _op1, RegIndex _op2,
746 RegIndex _gp, bool _op2IsWide = false) :
747 ArmStaticInst(mnem, _machInst, __opClass),
748 dest(_dest), op1(_op1), op2(_op2), gp(_gp), op2IsWide(_op2IsWide)
749 {}
750 std::string generateDisassembly(
751 Addr pc, const loader::SymbolTable *symtab) const override;
752};
753
756{
757 protected:
760 int64_t imm;
762
763 SveIntCmpImmOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
764 RegIndex _dest, RegIndex _op1, int64_t _imm,
765 RegIndex _gp) :
766 ArmStaticInst(mnem, _machInst, __opClass),
767 dest(_dest), op1(_op1), imm(_imm), gp(_gp)
768 {}
769 std::string generateDisassembly(
770 Addr pc, const loader::SymbolTable *symtab) const override;
771};
772
775{
776 public:
783
784 protected:
786 uint8_t mult;
788
789 SveAdrOp(const char* mnem, ExtMachInst _machInst,
790 OpClass __opClass, RegIndex _dest, RegIndex _op1,
791 RegIndex _op2, uint8_t _mult,
792 SveAdrOffsetFormat _offsetFormat) :
793 ArmStaticInst(mnem, _machInst, __opClass),
794 dest(_dest), op1(_op1), op2(_op2), mult(_mult),
795 offsetFormat(_offsetFormat)
796 {}
797 std::string generateDisassembly(
798 Addr pc, const loader::SymbolTable *symtab) const override;
799};
800
803{
804 protected:
806 uint8_t pattern;
807 uint8_t imm;
810 uint8_t esize;
811
812 SveElemCountOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
813 RegIndex _dest, uint8_t _pattern, uint8_t _imm,
814 bool _dstIsVec, bool _dstIs32b) :
815 ArmStaticInst(mnem, _machInst, __opClass),
816 dest(_dest), pattern(_pattern), imm(_imm), dstIsVec(_dstIsVec),
817 dstIs32b(_dstIs32b)
818 {}
819 std::string generateDisassembly(
820 Addr pc, const loader::SymbolTable *symtab) const override;
821};
822
825{
826 protected:
831
832 SvePartBrkOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
833 RegIndex _dest, RegIndex _gp, RegIndex _op1,
834 bool _isMerging) :
835 ArmStaticInst(mnem, _machInst, __opClass),
836 dest(_dest), gp(_gp), op1(_op1), isMerging(_isMerging)
837 {}
838 std::string generateDisassembly(
839 Addr pc, const loader::SymbolTable *symtab) const override;
840};
841
844{
845 protected:
850
851 SvePartBrkPropOp(const char* mnem, ExtMachInst _machInst,
852 OpClass __opClass, RegIndex _dest,
853 RegIndex _op1, RegIndex _op2, RegIndex _gp) :
854 ArmStaticInst(mnem, _machInst, __opClass),
855 dest(_dest), op1(_op1), op2(_op2), gp(_gp)
856 {}
857 std::string generateDisassembly(
858 Addr pc, const loader::SymbolTable *symtab) const override;
859};
860
863{
864 protected:
869 bool scalar;
870 bool simdFp;
872
873 SveSelectOp(const char* mnem, ExtMachInst _machInst,
874 OpClass __opClass, RegIndex _dest,
875 RegIndex _op1, RegIndex _gp,
876 bool _conditional, bool _scalar,
877 bool _simdFp) :
878 ArmStaticInst(mnem, _machInst, __opClass),
879 dest(_dest), op1(_op1), gp(_gp), conditional(_conditional),
880 scalar(_scalar), simdFp(_simdFp)
881 {}
882 std::string generateDisassembly(
883 Addr pc, const loader::SymbolTable *symtab) const override;
884};
885
888{
889 protected:
893
894 SveUnaryPredPredOp(const char* mnem, ExtMachInst _machInst,
895 OpClass __opClass, RegIndex _dest,
896 RegIndex _op1, RegIndex _gp) :
897 ArmStaticInst(mnem, _machInst, __opClass),
898 dest(_dest), op1(_op1), gp(_gp)
899 {}
900 std::string generateDisassembly(
901 Addr pc, const loader::SymbolTable *symtab) const override;
902};
903
906{
907 protected:
911
912 SveTblOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
913 RegIndex _dest, RegIndex _op1, RegIndex _op2) :
914 ArmStaticInst(mnem, _machInst, __opClass),
915 dest(_dest), op1(_op1), op2(_op2)
916 {}
917 std::string generateDisassembly(
918 Addr pc, const loader::SymbolTable *symtab) const override;
919};
920
923{
924 protected:
929
930 SveTblThreeSrcOp(const char *mnem, ExtMachInst _machInst,
931 OpClass __opClass, RegIndex _dest, RegIndex _op1,
932 RegIndex _op2, RegIndex _op3)
933 : ArmStaticInst(mnem, _machInst, __opClass),
934 dest(_dest),
935 op1(_op1),
936 op2(_op2),
937 op3(_op3)
938 {}
939 std::string
941 const loader::SymbolTable *symtab) const override;
942};
943
946{
947 protected:
950
951 SveUnpackOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
952 RegIndex _dest, RegIndex _op1) :
953 ArmStaticInst(mnem, _machInst, __opClass),
954 dest(_dest), op1(_op1)
955 {}
956 std::string generateDisassembly(
957 Addr pc, const loader::SymbolTable *symtab) const override;
958};
959
962{
963 protected:
966
967 SvePredTestOp(const char* mnem, ExtMachInst _machInst, OpClass __opClass,
968 RegIndex _op1, RegIndex _gp) :
969 ArmStaticInst(mnem, _machInst, __opClass),
970 op1(_op1), gp(_gp)
971 {}
972 std::string generateDisassembly(
973 Addr pc, const loader::SymbolTable *symtab) const override;
974};
975
978{
979 protected:
981
982 SvePredUnaryWImplicitSrcOp(const char* mnem, ExtMachInst _machInst,
983 OpClass __opClass, RegIndex _dest) :
984 ArmStaticInst(mnem, _machInst, __opClass),
985 dest(_dest)
986 {}
987 std::string generateDisassembly(
988 Addr pc, const loader::SymbolTable *symtab) const override;
989};
990
993{
994 protected:
997
998 SvePredUnaryWImplicitSrcPredOp(const char* mnem, ExtMachInst _machInst,
999 OpClass __opClass, RegIndex _dest,
1000 RegIndex _gp) :
1001 ArmStaticInst(mnem, _machInst, __opClass),
1002 dest(_dest), gp(_gp)
1003 {}
1004 std::string generateDisassembly(
1005 Addr pc, const loader::SymbolTable *symtab) const override;
1006};
1007
1010{
1011 protected:
1013
1014 SvePredUnaryWImplicitDstOp(const char* mnem, ExtMachInst _machInst,
1015 OpClass __opClass, RegIndex _op1) :
1016 ArmStaticInst(mnem, _machInst, __opClass),
1017 op1(_op1)
1018 {}
1019 std::string generateDisassembly(
1020 Addr pc, const loader::SymbolTable *symtab) const override;
1021};
1022
1025{
1026 protected:
1027 SveWImplicitSrcDstOp(const char* mnem, ExtMachInst _machInst,
1028 OpClass __opClass) :
1029 ArmStaticInst(mnem, _machInst, __opClass)
1030 {}
1031 std::string generateDisassembly(
1032 Addr pc, const loader::SymbolTable *symtab) const override;
1033};
1034
1037{
1038 protected:
1041 uint64_t imm;
1042
1043 SveBinImmUnpredDestrOp(const char* mnem, ExtMachInst _machInst,
1044 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1045 uint64_t _imm) :
1046 ArmStaticInst(mnem, _machInst, __opClass),
1047 dest(_dest), op1(_op1), imm(_imm)
1048 {}
1049 std::string generateDisassembly(
1050 Addr pc, const loader::SymbolTable *symtab) const override;
1051};
1052
1055{
1056 protected:
1058 uint64_t imm;
1059
1060 SveBinImmIdxUnpredOp(const char* mnem, ExtMachInst _machInst,
1061 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1062 uint64_t _imm) :
1063 ArmStaticInst(mnem, _machInst, __opClass),
1064 dest(_dest), op1(_op1), imm(_imm)
1065 {}
1066
1067 std::string generateDisassembly(
1068 Addr pc, const loader::SymbolTable *symtab) const override;
1069};
1070
1073{
1074 protected:
1077
1078 SveUnarySca2VecUnpredOp(const char* mnem, ExtMachInst _machInst,
1079 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1080 bool _simdFp) :
1081 ArmStaticInst(mnem, _machInst, __opClass),
1082 dest(_dest), op1(_op1), simdFp(_simdFp)
1083 {}
1084
1085 std::string generateDisassembly(
1086 Addr pc, const loader::SymbolTable *symtab) const override;
1087};
1088
1091{
1092 protected:
1094 uint64_t imm;
1095 uint8_t esize;
1096
1097 public:
1098 SveDotProdIdxOp(const char* mnem, ExtMachInst _machInst,
1099 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1100 RegIndex _op2, uint64_t _imm) :
1101 ArmStaticInst(mnem, _machInst, __opClass),
1102 dest(_dest), op1(_op1), op2(_op2), imm(_imm)
1103 {}
1104
1105 std::string generateDisassembly(
1106 Addr pc, const loader::SymbolTable *symtab) const override;
1107};
1108
1111{
1112 protected:
1114 uint8_t esize;
1115
1116 public:
1117 SveDotProdOp(const char* mnem, ExtMachInst _machInst,
1118 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1119 RegIndex _op2) :
1120 ArmStaticInst(mnem, _machInst, __opClass),
1121 dest(_dest), op1(_op1), op2(_op2)
1122 {}
1123
1124 std::string generateDisassembly(
1125 Addr pc, const loader::SymbolTable *symtab) const override;
1126};
1127
1130{
1131 protected:
1133 uint8_t rot;
1134
1135 public:
1136 SveComplexOp(const char* mnem, ExtMachInst _machInst,
1137 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1138 RegIndex _op2, RegIndex _gp, uint8_t _rot) :
1139 ArmStaticInst(mnem, _machInst, __opClass),
1140 dest(_dest), op1(_op1), op2(_op2), gp(_gp), rot(_rot)
1141 {}
1142
1143 std::string generateDisassembly(
1144 Addr pc, const loader::SymbolTable *symtab) const override;
1145};
1146
1149{
1150 protected:
1152 uint8_t rot;
1153
1154 public:
1155 SveComplexUnpredOp(const char *mnem, ExtMachInst _machInst,
1156 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1157 RegIndex _op2, uint8_t _rot)
1158 : ArmStaticInst(mnem, _machInst, __opClass),
1159 dest(_dest),
1160 op1(_op1),
1161 op2(_op2),
1162 rot(_rot)
1163 {}
1164
1165 std::string
1167 const loader::SymbolTable *symtab) const override;
1168};
1169
1172{
1173 protected:
1175 uint8_t rot, imm;
1176
1177 public:
1178 SveComplexIdxOp(const char* mnem, ExtMachInst _machInst,
1179 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1180 RegIndex _op2, uint8_t _rot, uint8_t _imm) :
1181 ArmStaticInst(mnem, _machInst, __opClass),
1182 dest(_dest), op1(_op1), op2(_op2), rot(_rot), imm(_imm)
1183 {}
1184
1185 std::string generateDisassembly(
1186 Addr pc, const loader::SymbolTable *symtab) const override;
1187};
1188
1189// SVE2 SCLAMP/UCLAMP instructions
1191{
1192 protected:
1196
1197 SveClampOp(const char *mnem, ExtMachInst _machInst,
1198 OpClass __opClass, RegIndex _dest,
1199 RegIndex _op1, RegIndex _op2) :
1200 ArmStaticInst(mnem, _machInst, __opClass),
1201 dest(_dest), op1(_op1), op2(_op2)
1202 {}
1203
1204 std::string generateDisassembly(
1205 Addr pc, const loader::SymbolTable *symtab) const override;
1206};
1207
1210{
1211 protected:
1214 uint64_t imm;
1215
1216 SvePredMovePredOp(const char *mnem, ExtMachInst _machInst,
1217 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1218 uint64_t _imm)
1219 : ArmStaticInst(mnem, _machInst, __opClass),
1220 dest(_dest),
1221 op1(_op1),
1222 imm(_imm)
1223 {}
1224 std::string
1226 const loader::SymbolTable *symtab) const override;
1227};
1228
1231{
1232 protected:
1235 uint64_t imm;
1236
1237 SvePredMoveVecOp(const char *mnem, ExtMachInst _machInst,
1238 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1239 uint64_t _imm)
1240 : ArmStaticInst(mnem, _machInst, __opClass),
1241 dest(_dest),
1242 op1(_op1),
1243 imm(_imm)
1244 {}
1245 std::string
1247 const loader::SymbolTable *symtab) const override;
1248};
1249
1252{
1253 protected:
1255
1256 SveMultiNarrowOp(const char *mnem, ExtMachInst _machInst,
1257 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1258 RegIndex _op2)
1259 : ArmStaticInst(mnem, _machInst, __opClass),
1260 dest(_dest),
1261 op1(_op1),
1262 op2(_op2)
1263 {}
1264
1265 std::string
1267 const loader::SymbolTable *symtab) const override;
1268};
1269
1272{
1273 protected:
1275 uint64_t imm;
1276
1277 SveMultiNarrowImmOp(const char *mnem, ExtMachInst _machInst,
1278 OpClass __opClass, RegIndex _dest, RegIndex _op1,
1279 RegIndex _op2, uint64_t _imm)
1280 : ArmStaticInst(mnem, _machInst, __opClass),
1281 dest(_dest),
1282 op1(_op1),
1283 op2(_op2),
1284 imm(_imm)
1285 {}
1286
1287 std::string
1289 const loader::SymbolTable *symtab) const override;
1290};
1291
1294std::string sveDisasmPredCountImm(uint8_t imm);
1295
1300unsigned int sveDecodePredCount(uint8_t imm, unsigned int num_elems);
1301
1306uint64_t sveExpandFpImmAddSub(uint8_t imm, uint8_t size);
1307
1313uint64_t sveExpandFpImmMaxMin(uint8_t imm, uint8_t size);
1314
1319uint64_t sveExpandFpImmMul(uint8_t imm, uint8_t size);
1320
1322void sveCounterToPredicate(VecPredRegContainer &pred_mask, uint16_t pred,
1323 unsigned pred_width, unsigned vl, unsigned regidx);
1324
1326uint16_t sveEncodePredCount(int esize, int elements, int count_in,
1327 bool invert_in);
1328
1329} // namespace ArmISA
1330} // namespace gem5
1331
1332#endif // __ARCH_ARM_INSTS_SVE_HH__
ArmStaticInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
SveAdrOffsetFormat offsetFormat
Definition sve.hh:787
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:676
SveAdrOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint8_t _mult, SveAdrOffsetFormat _offsetFormat)
Definition sve.hh:789
SveBinConstrPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp, SvePredType _predType)
Definition sve.hh:479
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:408
SveBinDestrPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op2, RegIndex _gp)
Definition sve.hh:461
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:392
SveBinIdxUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint8_t _index)
Definition sve.hh:514
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:441
SveBinImmIdxUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:1060
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:909
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:362
SveBinImmPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm, RegIndex _gp)
Definition sve.hh:427
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:348
SveBinImmUnpredConstrOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:409
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:893
SveBinImmUnpredDestrOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:1043
SveBinUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:497
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:427
SveBinWideImmUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm)
Definition sve.hh:444
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:378
SveClampOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:1197
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1028
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:507
SveCmpImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm, RegIndex _gp)
Definition sve.hh:584
SveCmpOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp)
Definition sve.hh:566
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:492
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:283
SveCompTermOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _op1, RegIndex _op2)
Definition sve.hh:322
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1009
SveComplexIdxOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint8_t _rot, uint8_t _imm)
Definition sve.hh:1178
SveComplexOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp, uint8_t _rot)
Definition sve.hh:1136
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:971
SveComplexUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint8_t _rot)
Definition sve.hh:1155
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:991
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:940
SveDotProdIdxOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm)
Definition sve.hh:1098
SveDotProdOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:1117
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:957
SveElemCountOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint8_t _pattern, uint8_t _imm, bool _dstIsVec, bool _dstIs32b)
Definition sve.hh:812
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:700
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:114
SveIndexIIOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, int8_t _imm1, int8_t _imm2)
Definition sve.hh:67
SveIndexIROp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, int8_t _imm1, RegIndex _op2)
Definition sve.hh:84
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:125
SveIndexRIOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, int8_t _imm2)
Definition sve.hh:101
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:137
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:150
SveIndexRROp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:118
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:660
SveIntCmpImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, int64_t _imm, RegIndex _gp)
Definition sve.hh:763
SveIntCmpOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp, bool _op2IsWide=false)
Definition sve.hh:744
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:640
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1085
SveMultiNarrowImmOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm)
Definition sve.hh:1277
SveMultiNarrowOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:1256
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1070
SveOrdReducOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp)
Definition sve.hh:691
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:600
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:728
SvePartBrkOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _gp, RegIndex _op1, bool _isMerging)
Definition sve.hh:832
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:742
SvePartBrkPropOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp)
Definition sve.hh:851
SvePextOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:279
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:250
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:265
SvePextPairOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _op1, uint64_t _imm)
Definition sve.hh:301
SvePredBinPermOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:549
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:478
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:93
SvePredCountOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _gp, bool _srcIs32b=false, bool _destIsVec=false)
Definition sve.hh:137
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:75
SvePredCountPngOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:174
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:61
SvePredCountPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp)
Definition sve.hh:156
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:458
SvePredLogicalOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp, bool _isSel=false)
Definition sve.hh:532
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1042
SvePredMovePredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:1216
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:1056
SvePredMoveVecOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, uint64_t _imm)
Definition sve.hh:1237
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:839
SvePredTestOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _op1, RegIndex _gp)
Definition sve.hh:967
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:874
SvePredUnaryWImplicitDstOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _op1)
Definition sve.hh:1014
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:851
SvePredUnaryWImplicitSrcOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest)
Definition sve.hh:982
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:861
SvePredUnaryWImplicitSrcPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _gp)
Definition sve.hh:998
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:232
SvePselOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp, RegIndex _op2, uint64_t _imm)
Definition sve.hh:259
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:616
SvePtrueOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint8_t _imm)
Definition sve.hh:708
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:630
SvePtruePngOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint8_t _imm)
Definition sve.hh:725
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:586
SveReducOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp)
Definition sve.hh:675
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:758
SveSelectOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp, bool _conditional, bool _scalar, bool _simdFp)
Definition sve.hh:873
SveTblOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:912
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:798
SveTblThreeSrcOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _op3)
Definition sve.hh:930
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:811
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:569
SveTerIdxUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint8_t _index)
Definition sve.hh:654
SveTerImmUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op2, uint64_t _imm)
Definition sve.hh:636
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:553
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:523
SveTerPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, RegIndex _gp)
Definition sve.hh:601
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:539
SveTerUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2)
Definition sve.hh:618
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:295
SveUnaryPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp)
Definition sve.hh:337
SveUnaryPredPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _gp)
Definition sve.hh:894
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:784
SveUnarySca2VecUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, bool _simdFp)
Definition sve.hh:1078
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:924
SveUnaryUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1)
Definition sve.hh:353
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:309
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:333
SveUnaryWideImmPredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm, RegIndex _gp, bool _isMerging)
Definition sve.hh:391
SveUnaryWideImmUnpredOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, uint64_t _imm)
Definition sve.hh:370
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:321
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:827
SveUnpackOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1)
Definition sve.hh:951
SveWImplicitSrcDstOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass)
Definition sve.hh:1027
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:884
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:164
SveWhileOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, bool _srcIs32b)
Definition sve.hh:194
SveWhilePairOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _dest2, RegIndex _op1, RegIndex _op2, bool _srcIs32b)
Definition sve.hh:211
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:183
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition sve.cc:206
SveWhilePngOp(const char *mnem, ExtMachInst _machInst, OpClass __opClass, RegIndex _dest, RegIndex _op1, RegIndex _op2, uint64_t _imm, bool _srcIs32b)
Definition sve.hh:234
Generic predicate register container.
Bitfield< 7, 0 > imm
Definition types.hh:132
void sveCounterToPredicate(VecPredRegContainer &pred_mask, uint16_t pred, unsigned pred_width, unsigned vl, unsigned regidx)
Decocde predicate-as-counter to predicate-as-mask.
Definition sve.cc:1239
uint64_t sveExpandFpImmAddSub(uint8_t imm, uint8_t size)
Expand 1-bit floating-point immediate to 0.5 or 1.0 (FADD, FSUB, FSUBR).
Definition sve.cc:1176
unsigned int sveDecodePredCount(uint8_t imm, unsigned int num_elems)
Returns the actual number of elements active for PTRUE(S) instructions.
Definition sve.cc:1133
const char * svePredTypeToStr(SvePredType pt)
Returns the specifier for the predication type pt as a string.
Definition sve.cc:48
uint16_t sveEncodePredCount(int esize, int elements, int count_in, bool invert_in)
Encode predicate-as-mark to predicate-as-counter.
Definition sve.cc:1296
std::string sveDisasmPredCountImm(uint8_t imm)
Returns the symbolic name associated with pattern imm for PTRUE(S) instructions.
Definition sve.cc:1101
uint64_t sveExpandFpImmMul(uint8_t imm, uint8_t size)
Expand 1-bit floating-point immediate to 0.5 or 2.0 (FMUL).
Definition sve.cc:1217
uint64_t sveExpandFpImmMaxMin(uint8_t imm, uint8_t size)
Expand 1-bit floating-point immediate to 0.0 or 1.0 (FMAX, FMAXNM, FMIN, FMINNM).
Definition sve.cc:1198
Bitfield< 4 > pc
Bitfield< 27, 24 > pred
Definition types.hh:91
Bitfield< 57, 41 > vl
Definition types.hh:63
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
uint16_t RegIndex
Definition types.hh:176
Bitfield< 8 > pt
Definition x86_cpu.cc:127
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147

Generated on Mon Oct 27 2025 04:12:55 for gem5 by doxygen 1.14.0