gem5 v24.1.0.1
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
vector.hh
Go to the documentation of this file.
1/*
2 * Copyright (c) 2022 PLCT Lab
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met: redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer;
9 * redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution;
12 * neither the name of the copyright holders nor the names of its
13 * contributors may be used to endorse or promote products derived from
14 * this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef __ARCH_RISCV_INSTS_VECTOR_HH__
30#define __ARCH_RISCV_INSTS_VECTOR_HH__
31
32#include <string>
33
34#include "arch/riscv/faults.hh"
36#include "arch/riscv/isa.hh"
38#include "arch/riscv/utility.hh"
39#include "cpu/exec_context.hh"
40#include "cpu/static_inst.hh"
41
42namespace gem5
43{
44
45namespace RiscvISA
46{
47
48float
49getVflmul(uint32_t vlmul_encoding);
50
51inline uint32_t
52getSew(uint32_t vsew)
53{
54 assert(vsew <= 3);
55 return (8 << vsew);
56}
57
58uint32_t
59getVlmax(VTYPE vtype, uint32_t vlen);
60
65{
66 protected:
67 uint64_t bit30;
68 uint64_t bit31;
69 uint64_t zimm10;
70 uint64_t zimm11;
71 uint64_t uimm;
72 uint32_t elen;
73 uint32_t vlen;
74 VConfOp(const char *mnem, ExtMachInst _extMachInst,
75 uint32_t _elen, uint32_t _vlen, OpClass __opClass)
76 : RiscvStaticInst(mnem, _extMachInst, __opClass),
77 bit30(_extMachInst.bit30), bit31(_extMachInst.bit31),
78 zimm10(_extMachInst.zimm_vsetivli),
79 zimm11(_extMachInst.zimm_vsetvli),
80 uimm(_extMachInst.uimm_vsetivli),
81 elen(_elen),
82 vlen(_vlen)
83 {
84 this->flags[IsVector] = true;
85 }
86
87 std::string generateDisassembly(
88 Addr pc, const loader::SymbolTable *symtab) const override;
89
90 std::string generateZimmDisassembly() const;
91};
92
93inline uint8_t checked_vtype(bool vill, uint8_t vtype) {
94 panic_if(vill, "vill has been set");
95 const uint8_t vsew = bits(vtype, 5, 3);
96 panic_if(vsew >= 0b100, "vsew: %#x not supported", vsew);
97 const uint8_t vlmul = bits(vtype, 2, 0);
98 panic_if(vlmul == 0b100, "vlmul: %#x not supported", vlmul);
99 return vtype;
100}
101
103{
104 protected:
105 uint32_t vl;
106 uint8_t vtype;
107 uint32_t elen;
108 uint32_t vlen;
109 VectorNonSplitInst(const char* mnem, ExtMachInst _machInst,
110 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
111 : RiscvStaticInst(mnem, _machInst, __opClass),
112 vl(_machInst.vl),
113 vtype(_machInst.vtype8),
114 elen(_elen),
115 vlen(_vlen)
116 {
117 this->flags[IsVector] = true;
118 }
119
120 std::string generateDisassembly(
121 Addr pc, const loader::SymbolTable *symtab) const override;
122};
123
125{
126 protected:
127 uint32_t vl;
128 uint8_t vtype;
129 uint32_t elen;
130 uint32_t vlen;
131
132 VectorMacroInst(const char* mnem, ExtMachInst _machInst,
133 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
134 : RiscvMacroInst(mnem, _machInst, __opClass),
135 vl(_machInst.vl),
136 vtype(_machInst.vtype8),
137 elen(_elen),
138 vlen(_vlen)
139 {
140 this->flags[IsVector] = true;
141 }
142};
143
145{
146protected:
147 uint32_t microVl;
148 uint32_t microIdx;
149 uint8_t vtype;
150 uint32_t elen;
151 uint32_t vlen;
152
153 VectorMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
154 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
155 : RiscvMicroInst(mnem, _machInst, __opClass),
156 microVl(_microVl),
157 microIdx(_microIdx),
158 vtype(_machInst.vtype8),
159 elen(_elen),
160 vlen(_vlen)
161 {
162 this->flags[IsVector] = true;
163 }
164};
165
167{
168public:
170 : RiscvMicroInst("vnop", _machInst, No_OpClass)
171 {}
172
174 const override
175 {
176 return NoFault;
177 }
178
179 std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab)
180 const override
181 {
182 std::stringstream ss;
183 ss << mnemonic;
184 return ss.str();
185 }
186};
187
189{
190protected:
191 VectorArithMicroInst(const char *mnem, ExtMachInst _machInst,
192 OpClass __opClass, uint32_t _microVl,
193 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
194 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
195 _elen, _vlen)
196 {}
197
198 std::string generateDisassembly(
199 Addr pc, const loader::SymbolTable *symtab) const override;
200};
201
203{
204 protected:
205 VectorArithMacroInst(const char* mnem, ExtMachInst _machInst,
206 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
207 : VectorMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
208 {
209 this->flags[IsVector] = true;
210 }
211 std::string generateDisassembly(
212 Addr pc, const loader::SymbolTable *symtab) const override;
213};
214
216{
217protected:
218 VectorVMUNARY0MicroInst(const char *mnem, ExtMachInst _machInst,
219 OpClass __opClass, uint32_t _microVl,
220 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
221 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
222 _elen, _vlen)
223 {}
224
225 std::string generateDisassembly(
226 Addr pc, const loader::SymbolTable *symtab) const override;
227};
228
230{
231 protected:
232 VectorVMUNARY0MacroInst(const char* mnem, ExtMachInst _machInst,
233 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
234 : VectorMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
235 {
236 this->flags[IsVector] = true;
237 }
238
239 std::string generateDisassembly(
240 Addr pc, const loader::SymbolTable *symtab) const override;
241};
242
244{
245 protected:
246 VectorSlideMacroInst(const char* mnem, ExtMachInst _machInst,
247 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
248 : VectorMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
249 {
250 this->flags[IsVector] = true;
251 }
252
253 std::string generateDisassembly(
254 Addr pc, const loader::SymbolTable *symtab) const override;
255};
256
258{
259 protected:
260 uint32_t vdIdx;
261 uint32_t vs2Idx;
262 VectorSlideMicroInst(const char *mnem, ExtMachInst _machInst,
263 OpClass __opClass, uint32_t _microVl,
264 uint32_t _microIdx, uint32_t _vdIdx, uint32_t _vs2Idx,
265 uint32_t _elen, uint32_t _vlen)
266 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
267 _elen, _vlen)
268 , vdIdx(_vdIdx), vs2Idx(_vs2Idx)
269 {}
270
271 std::string generateDisassembly(
272 Addr pc, const loader::SymbolTable *symtab) const override;
273};
274
276{
277 protected:
278 uint32_t offset; // Used to calculate EA.
280
281 VectorMemMicroInst(const char* mnem, ExtMachInst _machInst,
282 OpClass __opClass, uint32_t _microVl,
283 uint32_t _microIdx, uint32_t _offset, uint32_t _elen,
284 uint32_t _vlen)
285 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
286 _elen, _vlen)
287 , offset(_offset)
288 , memAccessFlags(0)
289 {}
290};
291
293{
294 protected:
295 VectorMemMacroInst(const char* mnem, ExtMachInst _machInst,
296 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
297 : VectorMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
298 {}
299};
300
302{
303 protected:
304 VleMacroInst(const char* mnem, ExtMachInst _machInst,
305 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
306 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
307 {}
308
309 std::string generateDisassembly(
310 Addr pc, const loader::SymbolTable *symtab) const override;
311};
312
314{
315 protected:
316 VseMacroInst(const char* mnem, ExtMachInst _machInst,
317 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
318 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
319 {}
320
321 std::string generateDisassembly(
322 Addr pc, const loader::SymbolTable *symtab) const override;
323};
324
326{
327 public:
328 mutable bool trimVl;
329 mutable uint32_t faultIdx;
330
331 protected:
333
334 VleMicroInst(const char *mnem, ExtMachInst _machInst,OpClass __opClass,
335 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
336 uint32_t _vlen)
337 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
338 _elen, _vlen)
339 , trimVl(false), faultIdx(_microVl)
340 {
341 this->flags[IsLoad] = true;
342 }
343
344 std::string generateDisassembly(
345 Addr pc, const loader::SymbolTable *symtab) const override;
346};
347
349{
350 protected:
352
353 VseMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass,
354 uint32_t _microVl, uint32_t _microIdx, uint32_t _elen,
355 uint32_t _vlen)
356 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
357 _elen, _vlen)
358 {
359 this->flags[IsStore] = true;
360 }
361
362 std::string generateDisassembly(
363 Addr pc, const loader::SymbolTable *symtab) const override;
364};
365
367{
368 protected:
369 VlWholeMacroInst(const char *mnem, ExtMachInst _machInst,
370 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
371 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
372 {}
373
374 std::string generateDisassembly(
375 Addr pc, const loader::SymbolTable *symtab) const override;
376};
377
379{
380 protected:
382
383 VlWholeMicroInst(const char *mnem, ExtMachInst _machInst,
384 OpClass __opClass, uint32_t _microVl, uint32_t _microIdx,
385 uint32_t _elen, uint32_t _vlen)
386 : VectorMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
387 _elen, _vlen)
388 {}
389
390 std::string generateDisassembly(
391 Addr pc, const loader::SymbolTable *symtab) const override;
392};
393
395{
396 protected:
397 VsWholeMacroInst(const char *mnem, ExtMachInst _machInst,
398 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
399 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
400 {}
401
402 std::string generateDisassembly(
403 Addr pc, const loader::SymbolTable *symtab) const override;
404};
405
407{
408 protected:
410
411 VsWholeMicroInst(const char *mnem, ExtMachInst _machInst,
412 OpClass __opClass, uint32_t _microVl,
413 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
414 : VectorMicroInst(mnem, _machInst, __opClass , _microVl,
415 _microIdx, _elen, _vlen)
416 {}
417
418 std::string generateDisassembly(
419 Addr pc, const loader::SymbolTable *symtab) const override;
420};
421
423{
424 protected:
425 VlStrideMacroInst(const char* mnem, ExtMachInst _machInst,
426 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
427 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
428 {}
429
430 std::string generateDisassembly(
431 Addr pc, const loader::SymbolTable *symtab) const override;
432};
433
435{
436 protected:
437 uint32_t regIdx;
438 VlStrideMicroInst(const char *mnem, ExtMachInst _machInst,
439 OpClass __opClass, uint32_t _regIdx,
440 uint32_t _microIdx, uint32_t _microVl, uint32_t _elen,
441 uint32_t _vlen)
442 : VectorMemMicroInst(mnem, _machInst, __opClass, _microVl,
443 _microIdx, 0, _elen, _vlen)
444 , regIdx(_regIdx)
445 {}
446
447 std::string generateDisassembly(
448 Addr pc, const loader::SymbolTable *symtab) const override;
449};
450
452{
453 protected:
454 VsStrideMacroInst(const char* mnem, ExtMachInst _machInst,
455 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
456 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
457 {}
458
459 std::string generateDisassembly(
460 Addr pc, const loader::SymbolTable *symtab) const override;
461};
462
464{
465 protected:
466 uint32_t regIdx;
467 VsStrideMicroInst(const char *mnem, ExtMachInst _machInst,
468 OpClass __opClass, uint32_t _regIdx,
469 uint32_t _microIdx, uint32_t _microVl, uint32_t _elen,
470 uint32_t _vlen)
471 : VectorMemMicroInst(mnem, _machInst, __opClass, _microVl,
472 _microIdx, 0, _elen, _vlen)
473 , regIdx(_regIdx)
474 {}
475
476 std::string generateDisassembly(
477 Addr pc, const loader::SymbolTable *symtab) const override;
478};
479
481{
482 protected:
483 VlIndexMacroInst(const char* mnem, ExtMachInst _machInst,
484 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
485 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
486 {}
487
488 std::string generateDisassembly(
489 Addr pc, const loader::SymbolTable *symtab) const override;
490};
491
493{
494 protected:
495 uint32_t vdRegIdx;
496 uint32_t vdElemIdx;
497 uint32_t vs2RegIdx;
498 uint32_t vs2ElemIdx;
499 VlIndexMicroInst(const char *mnem, ExtMachInst _machInst,
500 OpClass __opClass, uint32_t _vdRegIdx, uint32_t _vdElemIdx,
501 uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen,
502 uint32_t _vlen)
503 : VectorMemMicroInst(mnem, _machInst, __opClass, 1,
504 0, 0, _elen, _vlen)
505 , vdRegIdx(_vdRegIdx), vdElemIdx(_vdElemIdx)
506 , vs2RegIdx(_vs2RegIdx), vs2ElemIdx(_vs2ElemIdx)
507 {}
508
509 std::string generateDisassembly(
510 Addr pc, const loader::SymbolTable *symtab) const override;
511};
512
514{
515 protected:
516 VsIndexMacroInst(const char* mnem, ExtMachInst _machInst,
517 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
518 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
519 {}
520
521 std::string generateDisassembly(
522 Addr pc, const loader::SymbolTable *symtab) const override;
523};
524
526{
527 protected:
528 uint32_t vs3RegIdx;
529 uint32_t vs3ElemIdx;
530 uint32_t vs2RegIdx;
531 uint32_t vs2ElemIdx;
532 VsIndexMicroInst(const char *mnem, ExtMachInst _machInst,
533 OpClass __opClass, uint32_t _vs3RegIdx,
534 uint32_t _vs3ElemIdx, uint32_t _vs2RegIdx,
535 uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
536 : VectorMemMicroInst(mnem, _machInst, __opClass, 1, 0, 0, _elen,
537 _vlen),
538 vs3RegIdx(_vs3RegIdx), vs3ElemIdx(_vs3ElemIdx),
539 vs2RegIdx(_vs2RegIdx), vs2ElemIdx(_vs2ElemIdx)
540 {}
541
542 std::string generateDisassembly(
543 Addr pc, const loader::SymbolTable *symtab) const override;
544};
545
547{
548 protected:
549 VMvWholeMacroInst(const char* mnem, ExtMachInst _machInst,
550 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
551 : VectorArithMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
552 {}
553
554 std::string generateDisassembly(
555 Addr pc, const loader::SymbolTable *symtab) const override;
556};
557
559{
560 protected:
561 VMvWholeMicroInst(const char *mnem, ExtMachInst _machInst,
562 OpClass __opClass, uint32_t _microVl,
563 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
564 : VectorArithMicroInst(mnem, _machInst, __opClass, _microVl, _microIdx,
565 _elen, _vlen)
566 {}
567
568 std::string generateDisassembly(
569 Addr pc, const loader::SymbolTable *symtab) const override;
570};
571
572
574{
575 private:
578
579 public:
580 size_t elemSize;
581 VMaskMergeMicroInst(ExtMachInst extMachInst, uint8_t _dstReg,
582 uint8_t _numSrcs, uint32_t _elen, uint32_t _vlen,
583 size_t _elemSize);
584 Fault execute(ExecContext *, trace::InstRecord *) const override;
585 std::string generateDisassembly(Addr,
586 const loader::SymbolTable *) const override;
587};
588
590{
591 private:
592 bool* vxsat;
593 public:
594 VxsatMicroInst(bool* Vxsat, ExtMachInst extMachInst, uint32_t _elen,
595 uint32_t _vlen)
596 : VectorArithMicroInst("vxsat_micro", extMachInst, SimdMiscOp, 0, 0,
597 _elen, _vlen)
598 {
599 vxsat = Vxsat;
600 }
601 Fault execute(ExecContext *, trace::InstRecord *) const override;
602 std::string generateDisassembly(Addr, const loader::SymbolTable *)
603 const override;
604};
605
607{
608 private:
612
613 public:
614 VlFFTrimVlMicroOp(ExtMachInst _machInst, uint32_t _microVl,
615 uint32_t _microIdx, uint32_t _elen, uint32_t _vlen,
616 std::vector<StaticInstPtr>& _microops);
617 uint32_t calcVl() const;
618 Fault execute(ExecContext *, trace::InstRecord *) const override;
619 std::unique_ptr<PCStateBase> branchTarget(ThreadContext *) const override;
620 std::string generateDisassembly(Addr, const loader::SymbolTable *)
621 const override;
622};
623
625{
626 protected:
627 VlSegMacroInst(const char* mnem, ExtMachInst _machInst,
628 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
629 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
630 {}
631
632 std::string generateDisassembly(
633 Addr pc, const loader::SymbolTable *symtab) const override;
634};
635
637{
638 protected:
640 uint8_t regIdx;
641
642 VlSegMicroInst(const char *mnem, ExtMachInst _machInst,
643 OpClass __opClass, uint32_t _microVl,
644 uint32_t _microIdx, uint32_t _numMicroops,
645 uint32_t _field, uint32_t _numFields,
646 uint32_t _elen, uint32_t _vlen)
647 : VectorMicroInst(mnem, _machInst, __opClass, _microVl,
648 _microIdx, _elen, _vlen)
649 {
650 this->flags[IsLoad] = true;
651 }
652
653 std::string generateDisassembly(
654 Addr pc, const loader::SymbolTable *symtab) const override;
655};
656
658{
659 private:
662 uint32_t numSrcs;
663 uint32_t numMicroops;
664 uint32_t field;
666 uint32_t micro_vl;
667
668 public:
669 VlSegDeIntrlvMicroInst(ExtMachInst extMachInst, uint32_t _micro_vl,
670 uint32_t _dstReg, uint32_t _numSrcs,
671 uint32_t _microIdx, uint32_t _numMicroops,
672 uint32_t _field, uint32_t _elen, uint32_t _vlen,
673 uint32_t _sizeOfElement);
674
675 Fault execute(ExecContext *, trace::InstRecord *) const override;
676
677 std::string generateDisassembly(Addr,
678 const loader::SymbolTable *) const override;
679};
680
682{
683 protected:
684 VsSegMacroInst(const char* mnem, ExtMachInst _machInst,
685 OpClass __opClass, uint32_t _elen, uint32_t _vlen)
686 : VectorMemMacroInst(mnem, _machInst, __opClass, _elen, _vlen)
687 {}
688
689 std::string generateDisassembly(
690 Addr pc, const loader::SymbolTable *symtab) const override;
691};
692
694{
695 protected:
697 uint8_t regIdx;
698
699 VsSegMicroInst(const char *mnem, ExtMachInst _machInst,
700 OpClass __opClass, uint32_t _microVl,
701 uint32_t _microIdx, uint32_t _numMicroops,
702 uint32_t _field, uint32_t _numFields,
703 uint32_t _elen, uint32_t _vlen)
704 : VectorMicroInst(mnem, _machInst, __opClass, _microVl,
705 _microIdx, _elen, _vlen)
706 {
707 this->flags[IsStore] = true;
708 }
709
710 std::string generateDisassembly(
711 Addr pc, const loader::SymbolTable *symtab) const override;
712};
713
715{
716 private:
719 uint32_t numSrcs;
720 uint32_t numMicroops;
721 uint32_t field;
723 uint32_t micro_vl;
724
725 public:
726 VsSegIntrlvMicroInst(ExtMachInst extMachInst, uint32_t _micro_vl,
727 uint32_t _dstReg, uint32_t _numSrcs,
728 uint32_t _microIdx, uint32_t _numMicroops,
729 uint32_t _field, uint32_t _elen, uint32_t _vlen,
730 uint32_t _sizeOfElement);
731
732 Fault execute(ExecContext *, trace::InstRecord *) const override;
733
734 std::string generateDisassembly(Addr,
735 const loader::SymbolTable *) const override;
736};
737
739{
740 private:
743
744 public:
745 VCpyVsMicroInst(ExtMachInst _machInst, uint32_t _microIdx,
746 uint8_t _vsRegIdx, uint32_t _elen, uint32_t _vlen);
747 Fault execute(ExecContext *, trace::InstRecord *) const override;
748 std::string generateDisassembly(
749 Addr pc, const loader::SymbolTable *symtab) const override;
750};
751
753{
754 private:
758
759 public:
760 VPinVdMicroInst(ExtMachInst _machInst, uint32_t _microIdx,
761 uint32_t _numVdPins, uint32_t _elen, uint32_t _vlen,
762 bool _hasVdOffset=false);
763 Fault execute(ExecContext *, trace::InstRecord *) const override;
764 std::string generateDisassembly(
765 Addr pc, const loader::SymbolTable *symtab) const override;
766};
767
768} // namespace RiscvISA
769} // namespace gem5
770
771
772#endif // __ARCH_RISCV_INSTS_VECTOR_HH__
The ExecContext is an abstract base class the provides the interface used by the ISA to manipulate th...
Register ID: describe an architectural register with its class and index.
Definition reg_class.hh:94
Base class for all RISC-V Macroops.
Base class for all RISC-V Microops.
Base class for all RISC-V static instructions.
Base class for Vector Config operations.
Definition vector.hh:65
VConfOp(const char *mnem, ExtMachInst _extMachInst, uint32_t _elen, uint32_t _vlen, OpClass __opClass)
Definition vector.hh:74
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:79
std::string generateZimmDisassembly() const
Definition vector.cc:94
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:824
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:851
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
Definition vector.cc:473
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:438
RegId srcRegIdxArr[NumVecInternalRegs]
Definition vector.hh:576
VMvWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:549
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:395
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:405
VMvWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:561
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:887
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:919
VectorArithMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:205
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:156
VectorArithMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:191
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:141
VectorMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:132
VectorMemMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:295
VectorMemMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _offset, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:281
VectorMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:153
VectorNonSplitInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:109
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:131
Fault execute(ExecContext *xc, trace::InstRecord *traceData) const override
Definition vector.hh:173
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.hh:179
VectorNopMicroInst(ExtMachInst _machInst)
Definition vector.hh:169
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:203
VectorSlideMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:246
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:189
VectorSlideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _vdIdx, uint32_t _vs2Idx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:262
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:180
VectorVMUNARY0MacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:232
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:171
VectorVMUNARY0MicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:218
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:543
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
Definition vector.cc:583
std::unique_ptr< PCStateBase > branchTarget(ThreadContext *) const override
Return the target address for an indirect branch (jump).
Definition vector.cc:572
std::vector< StaticInstPtr > & microops
Definition vector.hh:611
VlIndexMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:483
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:346
VlIndexMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _vdRegIdx, uint32_t _vdElemIdx, uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:499
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:357
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:649
RegId srcRegIdxArr[NumVecInternalRegs]
Definition vector.hh:660
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
Definition vector.cc:683
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:591
VlSegMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:627
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:603
Request::Flags memAccessFlags
Definition vector.hh:639
VlSegMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _numFields, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:642
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:298
VlStrideMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:425
VlStrideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:438
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:309
VlWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:369
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:270
VlWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:383
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:229
VleMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:304
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:260
Request::Flags memAccessFlags
Definition vector.hh:332
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:217
VleMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:334
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:371
VsIndexMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:516
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:382
VsIndexMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _vs3RegIdx, uint32_t _vs3ElemIdx, uint32_t _vs2RegIdx, uint32_t _vs2ElemIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:532
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
Definition vector.cc:792
RegId srcRegIdxArr[NumVecInternalRegs]
Definition vector.hh:717
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:753
VsSegMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:684
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:695
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:707
VsSegMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _numMicroops, uint32_t _field, uint32_t _numFields, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:699
Request::Flags memAccessFlags
Definition vector.hh:696
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:322
VsStrideMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:454
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:333
VsStrideMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _regIdx, uint32_t _microIdx, uint32_t _microVl, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:467
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:289
VsWholeMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:397
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:250
VsWholeMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:411
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:279
VseMacroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:316
VseMicroInst(const char *mnem, ExtMachInst _machInst, OpClass __opClass, uint32_t _microVl, uint32_t _microIdx, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:353
Request::Flags memAccessFlags
Definition vector.hh:351
std::string generateDisassembly(Addr pc, const loader::SymbolTable *symtab) const override
Internal function to generate disassembly string.
Definition vector.cc:239
Fault execute(ExecContext *, trace::InstRecord *) const override
Definition vector.cc:487
VxsatMicroInst(bool *Vxsat, ExtMachInst extMachInst, uint32_t _elen, uint32_t _vlen)
Definition vector.hh:594
std::string generateDisassembly(Addr, const loader::SymbolTable *) const override
Internal function to generate disassembly string.
Definition vector.cc:496
const char * mnemonic
Base mnemonic (e.g., "add").
std::bitset< Num_Flags > flags
Flag values for this instruction.
ThreadContext is the external interface to all thread state for anything outside of the CPU.
STL vector class.
Definition stl.hh:37
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition bitfield.hh:79
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
Definition logging.hh:214
float getVflmul(uint32_t vlmul_encoding)
This function translates the 3-bit value of vlmul bits to the corresponding lmul value as specified i...
Definition vector.cc:62
Bitfield< 40 > vill
Definition types.hh:64
const int NumVecInternalRegs
Definition vector.hh:55
Bitfield< 5, 3 > vsew
Definition vector.hh:81
uint8_t checked_vtype(bool vill, uint8_t vtype)
Definition vector.hh:93
Bitfield< 29, 20 > zimm_vsetivli
Definition types.hh:178
uint32_t getVlmax(VTYPE vtype, uint32_t vlen)
Definition vector.cc:70
Bitfield< 19, 15 > uimm_vsetivli
Definition types.hh:179
Bitfield< 30, 20 > zimm_vsetvli
Definition types.hh:175
Bitfield< 2, 0 > vlmul
Definition vector.hh:82
Bitfield< 11, 8 > ss
Bitfield< 4 > pc
Bitfield< 7, 0 > vtype8
Definition vector.hh:78
uint32_t getSew(uint32_t vsew)
Definition vector.hh:52
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
std::shared_ptr< FaultBase > Fault
Definition types.hh:249
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition types.hh:147
static const OpClass SimdMiscOp
Definition op_class.hh:72
constexpr decltype(nullptr) NoFault
Definition types.hh:253

Generated on Mon Jan 13 2025 04:28:28 for gem5 by doxygen 1.9.8