gem5  [DEVELOP-FOR-23.0]
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
op_encodings.hh
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016-2021 Advanced Micro Devices, Inc.
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 met:
7  *
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  *
11  * 2. Redistributions in binary form must reproduce the above copyright notice,
12  * this list of conditions and the following disclaimer in the documentation
13  * and/or other materials provided with the distribution.
14  *
15  * 3. Neither the name of the copyright holder nor the names of its
16  * contributors may be used to endorse or promote products derived from this
17  * software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 
32 #ifndef __ARCH_VEGA_INSTS_OP_ENCODINGS_HH__
33 #define __ARCH_VEGA_INSTS_OP_ENCODINGS_HH__
34 
39 #include "debug/GPUExec.hh"
40 #include "debug/VEGA.hh"
42 
43 namespace gem5
44 {
45 
46 namespace VegaISA
47 {
49  {
50  uint64_t baseAddr : 48;
51  uint32_t stride : 14;
52  uint32_t cacheSwizzle : 1;
53  uint32_t swizzleEn : 1;
54  uint32_t numRecords : 32;
55  uint32_t dstSelX : 3;
56  uint32_t dstSelY : 3;
57  uint32_t dstSelZ : 3;
58  uint32_t dstSelW : 3;
59  uint32_t numFmt : 3;
60  uint32_t dataFmt : 4;
61  uint32_t elemSize : 2;
62  uint32_t idxStride : 2;
63  uint32_t addTidEn : 1;
64  uint32_t atc : 1;
65  uint32_t hashEn : 1;
66  uint32_t heap : 1;
67  uint32_t mType : 3;
68  uint32_t type : 2;
69  };
70 
71  // --- purely virtual instruction classes ---
72 
74  {
75  public:
76  Inst_SOP2(InFmt_SOP2*, const std::string &opcode);
77 
78  int instSize() const override;
79  void generateDisassembly() override;
80 
81  void initOperandInfo() override;
82 
83  protected:
84  // first instruction DWORD
86  // possible second DWORD
88  uint32_t varSize;
89 
90  private:
91  bool hasSecondDword(InFmt_SOP2 *);
92  }; // Inst_SOP2
93 
95  {
96  public:
97  Inst_SOPK(InFmt_SOPK*, const std::string &opcode);
98  ~Inst_SOPK();
99 
100  int instSize() const override;
101  void generateDisassembly() override;
102 
103  void initOperandInfo() override;
104 
105  protected:
106  // first instruction DWORD
108  // possible second DWORD
110  uint32_t varSize;
111 
112  private:
113  bool hasSecondDword(InFmt_SOPK *);
114  }; // Inst_SOPK
115 
117  {
118  public:
119  Inst_SOP1(InFmt_SOP1*, const std::string &opcode);
120  ~Inst_SOP1();
121 
122  int instSize() const override;
123  void generateDisassembly() override;
124 
125  void initOperandInfo() override;
126 
127  protected:
128  // first instruction DWORD
130  // possible second DWORD
132  uint32_t varSize;
133 
134  private:
135  bool hasSecondDword(InFmt_SOP1 *);
136  }; // Inst_SOP1
137 
139  {
140  public:
141  Inst_SOPC(InFmt_SOPC*, const std::string &opcode);
142  ~Inst_SOPC();
143 
144  int instSize() const override;
145  void generateDisassembly() override;
146 
147  void initOperandInfo() override;
148 
149  protected:
150  // first instruction DWORD
152  // possible second DWORD
154  uint32_t varSize;
155 
156  private:
157  bool hasSecondDword(InFmt_SOPC *);
158  }; // Inst_SOPC
159 
161  {
162  public:
163  Inst_SOPP(InFmt_SOPP*, const std::string &opcode);
164  ~Inst_SOPP();
165 
166  int instSize() const override;
167  void generateDisassembly() override;
168 
169  void initOperandInfo() override;
170 
171  protected:
172  // first instruction DWORD
174  }; // Inst_SOPP
175 
177  {
178  public:
179  Inst_SMEM(InFmt_SMEM*, const std::string &opcode);
180  ~Inst_SMEM();
181 
182  int instSize() const override;
183  void generateDisassembly() override;
184 
185  void initOperandInfo() override;
186 
187  protected:
191  template<int N>
192  void
194  {
195  initMemReqScalarHelper<ScalarRegU32, N>(gpuDynInst,
197  }
198 
202  template<int N>
203  void
205  {
206  initMemReqScalarHelper<ScalarRegU32, N>(gpuDynInst,
208  }
209 
213  void
216  {
217  Addr vaddr = ((addr.rawData() + offset) & ~0x3);
218  gpu_dyn_inst->scalarAddr = vaddr;
219  }
220 
226  void
227  calcAddr(GPUDynInstPtr gpu_dyn_inst,
229  {
230  BufferRsrcDescriptor rsrc_desc;
231  ScalarRegU32 clamped_offset(offset);
232  std::memcpy((void*)&rsrc_desc, s_rsrc_desc.rawDataPtr(),
233  sizeof(BufferRsrcDescriptor));
234 
240  if (!rsrc_desc.stride && offset >= rsrc_desc.numRecords) {
241  clamped_offset = rsrc_desc.numRecords;
242  } else if (rsrc_desc.stride && offset
243  > (rsrc_desc.stride * rsrc_desc.numRecords)) {
244  clamped_offset = (rsrc_desc.stride * rsrc_desc.numRecords);
245  }
246 
247  Addr vaddr = ((rsrc_desc.baseAddr + clamped_offset) & ~0x3);
248  gpu_dyn_inst->scalarAddr = vaddr;
249  }
250 
251  // first instruction DWORD
253  // second instruction DWORD
255  }; // Inst_SMEM
256 
258  {
259  public:
260  Inst_VOP2(InFmt_VOP2*, const std::string &opcode);
261  ~Inst_VOP2();
262 
263  int instSize() const override;
264  void generateDisassembly() override;
265 
266  void initOperandInfo() override;
267 
268  protected:
269  // first instruction DWORD
271  // possible second DWORD
273  uint32_t varSize;
274 
275  template<typename T>
276  T sdwaSrcHelper(GPUDynInstPtr gpuDynInst, T & src1)
277  {
278  T src0_sdwa(gpuDynInst, extData.iFmt_VOP_SDWA.SRC0);
279  // use copies of original src0, src1, and dest during selecting
280  T origSrc0_sdwa(gpuDynInst, extData.iFmt_VOP_SDWA.SRC0);
281  T origSrc1(gpuDynInst, instData.VSRC1);
282 
283  src0_sdwa.read();
284  origSrc0_sdwa.read();
285  origSrc1.read();
286 
287  DPRINTF(VEGA, "Handling %s SRC SDWA. SRC0: register v[%d], "
288  "DST_SEL: %d, DST_U: %d, CLMP: %d, SRC0_SEL: %d, SRC0_SEXT: "
289  "%d, SRC0_NEG: %d, SRC0_ABS: %d, SRC1_SEL: %d, SRC1_SEXT: %d, "
290  "SRC1_NEG: %d, SRC1_ABS: %d\n",
291  opcode().c_str(), extData.iFmt_VOP_SDWA.SRC0,
300 
301  processSDWA_src(extData.iFmt_VOP_SDWA, src0_sdwa, origSrc0_sdwa,
302  src1, origSrc1);
303 
304  return src0_sdwa;
305  }
306 
307  template<typename T>
308  void sdwaDstHelper(GPUDynInstPtr gpuDynInst, T & vdst)
309  {
310  T origVdst(gpuDynInst, instData.VDST);
311 
312  Wavefront *wf = gpuDynInst->wavefront();
313  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
314  if (wf->execMask(lane)) {
315  origVdst[lane] = vdst[lane]; // keep copy consistent
316  }
317  }
318 
319  processSDWA_dst(extData.iFmt_VOP_SDWA, vdst, origVdst);
320  }
321 
322  template<typename T>
323  T dppHelper(GPUDynInstPtr gpuDynInst, T & src1)
324  {
325  T src0_dpp(gpuDynInst, extData.iFmt_VOP_DPP.SRC0);
326  src0_dpp.read();
327 
328  DPRINTF(VEGA, "Handling %s SRC DPP. SRC0: register v[%d], "
329  "DPP_CTRL: 0x%#x, SRC0_ABS: %d, SRC0_NEG: %d, SRC1_ABS: %d, "
330  "SRC1_NEG: %d, BC: %d, BANK_MASK: %d, ROW_MASK: %d\n",
331  opcode().c_str(), extData.iFmt_VOP_DPP.SRC0,
336 
337  processDPP(gpuDynInst, extData.iFmt_VOP_DPP, src0_dpp, src1);
338 
339  return src0_dpp;
340  }
341 
342  template<typename T>
343  void vop2Helper(GPUDynInstPtr gpuDynInst,
344  void (*fOpImpl)(T&, T&, T&, Wavefront*))
345  {
346  Wavefront *wf = gpuDynInst->wavefront();
347  T src0(gpuDynInst, instData.SRC0);
348  T src1(gpuDynInst, instData.VSRC1);
349  T vdst(gpuDynInst, instData.VDST);
350 
351  src0.readSrc();
352  src1.read();
353 
354  if (isSDWAInst()) {
355  T src0_sdwa = sdwaSrcHelper(gpuDynInst, src1);
356  fOpImpl(src0_sdwa, src1, vdst, wf);
357  sdwaDstHelper(gpuDynInst, vdst);
358  } else if (isDPPInst()) {
359  T src0_dpp = dppHelper(gpuDynInst, src1);
360  fOpImpl(src0_dpp, src1, vdst, wf);
361  } else {
362  fOpImpl(src0, src1, vdst, wf);
363  }
364 
365  vdst.write();
366  }
367 
368  private:
369  bool hasSecondDword(InFmt_VOP2 *);
370  }; // Inst_VOP2
371 
373  {
374  public:
375  Inst_VOP1(InFmt_VOP1*, const std::string &opcode);
376  ~Inst_VOP1();
377 
378  int instSize() const override;
379  void generateDisassembly() override;
380 
381  void initOperandInfo() override;
382 
383  protected:
384  // first instruction DWORD
386  // possible second DWORD
388  uint32_t varSize;
389 
390  private:
391  bool hasSecondDword(InFmt_VOP1 *);
392  }; // Inst_VOP1
393 
395  {
396  public:
397  Inst_VOPC(InFmt_VOPC*, const std::string &opcode);
398  ~Inst_VOPC();
399 
400  int instSize() const override;
401  void generateDisassembly() override;
402 
403  void initOperandInfo() override;
404 
405  protected:
406  // first instruction DWORD
408  // possible second DWORD
410  uint32_t varSize;
411 
412  private:
413  bool hasSecondDword(InFmt_VOPC *);
414  }; // Inst_VOPC
415 
417  {
418  public:
419  Inst_VINTRP(InFmt_VINTRP*, const std::string &opcode);
420  ~Inst_VINTRP();
421 
422  int instSize() const override;
423 
424  protected:
425  // first instruction DWORD
427  }; // Inst_VINTRP
428 
430  {
431  public:
432  Inst_VOP3A(InFmt_VOP3A*, const std::string &opcode, bool sgpr_dst);
433  ~Inst_VOP3A();
434 
435  int instSize() const override;
436  void generateDisassembly() override;
437 
438  void initOperandInfo() override;
439 
440  protected:
441  // first instruction DWORD
443  // second instruction DWORD
445 
446  private:
447  bool hasSecondDword(InFmt_VOP3A *);
458  const bool sgprDst;
459  }; // Inst_VOP3A
460 
462  {
463  public:
464  Inst_VOP3B(InFmt_VOP3B*, const std::string &opcode);
465  ~Inst_VOP3B();
466 
467  int instSize() const override;
468  void generateDisassembly() override;
469 
470  void initOperandInfo() override;
471 
472  protected:
473  // first instruction DWORD
475  // second instruction DWORD
477 
478  private:
479  bool hasSecondDword(InFmt_VOP3B *);
480  }; // Inst_VOP3B
481 
482  class Inst_DS : public VEGAGPUStaticInst
483  {
484  public:
485  Inst_DS(InFmt_DS*, const std::string &opcode);
486  ~Inst_DS();
487 
488  int instSize() const override;
489  void generateDisassembly() override;
490 
491  void initOperandInfo() override;
492 
493  protected:
494  template<typename T>
495  void
497  {
498  Wavefront *wf = gpuDynInst->wavefront();
499 
500  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
501  if (gpuDynInst->exec_mask[lane]) {
502  Addr vaddr = gpuDynInst->addr[lane] + offset;
503 
504  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane]
505  = wf->ldsChunk->read<T>(vaddr);
506  }
507  }
508  }
509 
510  template<int N>
511  void
513  {
514  Wavefront *wf = gpuDynInst->wavefront();
515 
516  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
517  if (gpuDynInst->exec_mask[lane]) {
518  Addr vaddr = gpuDynInst->addr[lane] + offset;
519  for (int i = 0; i < N; ++i) {
520  (reinterpret_cast<VecElemU32*>(
521  gpuDynInst->d_data))[lane * N + i]
522  = wf->ldsChunk->read<VecElemU32>(
523  vaddr + i*sizeof(VecElemU32));
524  }
525  }
526  }
527  }
528 
529  template<typename T>
530  void
531  initDualMemRead(GPUDynInstPtr gpuDynInst, Addr offset0, Addr offset1)
532  {
533  Wavefront *wf = gpuDynInst->wavefront();
534 
535  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
536  if (gpuDynInst->exec_mask[lane]) {
537  Addr vaddr0 = gpuDynInst->addr[lane] + offset0;
538  Addr vaddr1 = gpuDynInst->addr[lane] + offset1;
539 
540  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane * 2]
541  = wf->ldsChunk->read<T>(vaddr0);
542  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane * 2 + 1]
543  = wf->ldsChunk->read<T>(vaddr1);
544  }
545  }
546  }
547 
548  template<typename T>
549  void
551  {
552  Wavefront *wf = gpuDynInst->wavefront();
553 
554  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
555  if (gpuDynInst->exec_mask[lane]) {
556  Addr vaddr = gpuDynInst->addr[lane] + offset;
557  wf->ldsChunk->write<T>(vaddr,
558  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane]);
559  }
560  }
561  }
562 
563  template<int N>
564  void
566  {
567  Wavefront *wf = gpuDynInst->wavefront();
568 
569  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
570  if (gpuDynInst->exec_mask[lane]) {
571  Addr vaddr = gpuDynInst->addr[lane] + offset;
572  for (int i = 0; i < N; ++i) {
573  wf->ldsChunk->write<VecElemU32>(
574  vaddr + i*sizeof(VecElemU32),
575  (reinterpret_cast<VecElemU32*>(
576  gpuDynInst->d_data))[lane * N + i]);
577  }
578  }
579  }
580  }
581 
582  template<typename T>
583  void
584  initDualMemWrite(GPUDynInstPtr gpuDynInst, Addr offset0, Addr offset1)
585  {
586  Wavefront *wf = gpuDynInst->wavefront();
587 
588  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
589  if (gpuDynInst->exec_mask[lane]) {
590  Addr vaddr0 = gpuDynInst->addr[lane] + offset0;
591  Addr vaddr1 = gpuDynInst->addr[lane] + offset1;
592  wf->ldsChunk->write<T>(vaddr0, (reinterpret_cast<T*>(
593  gpuDynInst->d_data))[lane * 2]);
594  wf->ldsChunk->write<T>(vaddr1, (reinterpret_cast<T*>(
595  gpuDynInst->d_data))[lane * 2 + 1]);
596  }
597  }
598  }
599 
600  template<typename T>
601  void
603  {
604  Wavefront *wf = gpuDynInst->wavefront();
605 
606  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
607  if (gpuDynInst->exec_mask[lane]) {
608  Addr vaddr = gpuDynInst->addr[lane] + offset;
609 
610  AtomicOpFunctorPtr amo_op =
611  gpuDynInst->makeAtomicOpFunctor<T>(
612  &(reinterpret_cast<T*>(gpuDynInst->a_data))[lane],
613  &(reinterpret_cast<T*>(gpuDynInst->x_data))[lane]);
614 
615  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane]
616  = wf->ldsChunk->atomic<T>(vaddr, std::move(amo_op));
617  }
618  }
619  }
620 
621  void
623  {
624  Wavefront *wf = gpuDynInst->wavefront();
625 
626  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
627  if (wf->execMask(lane)) {
628  gpuDynInst->addr.at(lane) = (Addr)addr[lane];
629  }
630  }
631  }
632 
633  // first instruction DWORD
635  // second instruction DWORD
637  }; // Inst_DS
638 
640  {
641  public:
642  Inst_MUBUF(InFmt_MUBUF*, const std::string &opcode);
643  ~Inst_MUBUF();
644 
645  int instSize() const override;
646  void generateDisassembly() override;
647 
648  void initOperandInfo() override;
649 
650  protected:
651  template<typename T>
652  void
654  {
655  // temporarily modify exec_mask to supress memory accesses to oob
656  // regions. Only issue memory requests for lanes that have their
657  // exec_mask set and are not out of bounds.
658  VectorMask old_exec_mask = gpuDynInst->exec_mask;
659  gpuDynInst->exec_mask &= ~oobMask;
660  initMemReqHelper<T, 1>(gpuDynInst, MemCmd::ReadReq);
661  gpuDynInst->exec_mask = old_exec_mask;
662  }
663 
664 
665  template<int N>
666  void
668  {
669  // temporarily modify exec_mask to supress memory accesses to oob
670  // regions. Only issue memory requests for lanes that have their
671  // exec_mask set and are not out of bounds.
672  VectorMask old_exec_mask = gpuDynInst->exec_mask;
673  gpuDynInst->exec_mask &= ~oobMask;
674  initMemReqHelper<VecElemU32, N>(gpuDynInst, MemCmd::ReadReq);
675  gpuDynInst->exec_mask = old_exec_mask;
676  }
677 
678  template<typename T>
679  void
681  {
682  // temporarily modify exec_mask to supress memory accesses to oob
683  // regions. Only issue memory requests for lanes that have their
684  // exec_mask set and are not out of bounds.
685  VectorMask old_exec_mask = gpuDynInst->exec_mask;
686  gpuDynInst->exec_mask &= ~oobMask;
687  initMemReqHelper<T, 1>(gpuDynInst, MemCmd::WriteReq);
688  gpuDynInst->exec_mask = old_exec_mask;
689  }
690 
691  template<int N>
692  void
694  {
695  // temporarily modify exec_mask to supress memory accesses to oob
696  // regions. Only issue memory requests for lanes that have their
697  // exec_mask set and are not out of bounds.
698  VectorMask old_exec_mask = gpuDynInst->exec_mask;
699  gpuDynInst->exec_mask &= ~oobMask;
700  initMemReqHelper<VecElemU32, N>(gpuDynInst, MemCmd::WriteReq);
701  gpuDynInst->exec_mask = old_exec_mask;
702  }
703 
704  void
706  {
707  // create request and set flags
708  gpuDynInst->resetEntireStatusVector();
709  gpuDynInst->setStatusVector(0, 1);
710  RequestPtr req = std::make_shared<Request>(0, 0, 0,
711  gpuDynInst->computeUnit()->
712  requestorId(), 0,
713  gpuDynInst->wfDynId);
714  gpuDynInst->setRequestFlags(req);
715  gpuDynInst->computeUnit()->
716  injectGlobalMemFence(gpuDynInst, false, req);
717  }
718 
739  template<typename VOFF, typename VIDX, typename SRSRC, typename SOFF>
740  void
741  calcAddr(GPUDynInstPtr gpuDynInst, VOFF v_off, VIDX v_idx,
742  SRSRC s_rsrc_desc, SOFF s_offset, int inst_offset)
743  {
744  Addr vaddr = 0;
745  Addr base_addr = 0;
746  Addr stride = 0;
747  Addr buf_idx = 0;
748  Addr buf_off = 0;
749  Addr buffer_offset = 0;
750  BufferRsrcDescriptor rsrc_desc;
751 
752  std::memcpy((void*)&rsrc_desc, s_rsrc_desc.rawDataPtr(),
753  sizeof(BufferRsrcDescriptor));
754 
755  base_addr = rsrc_desc.baseAddr;
756 
757  stride = rsrc_desc.addTidEn ? ((rsrc_desc.dataFmt << 14)
758  + rsrc_desc.stride) : rsrc_desc.stride;
759 
760  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
761  if (gpuDynInst->exec_mask[lane]) {
762  vaddr = base_addr + s_offset.rawData();
768  buf_idx = v_idx[lane] + (rsrc_desc.addTidEn ? lane : 0);
769 
770  buf_off = v_off[lane] + inst_offset;
771 
772  if (rsrc_desc.swizzleEn) {
773  Addr idx_stride = 8 << rsrc_desc.idxStride;
774  Addr elem_size = 2 << rsrc_desc.elemSize;
775  Addr idx_msb = buf_idx / idx_stride;
776  Addr idx_lsb = buf_idx % idx_stride;
777  Addr off_msb = buf_off / elem_size;
778  Addr off_lsb = buf_off % elem_size;
779  DPRINTF(VEGA, "mubuf swizzled lane %d: "
780  "idx_stride = %llx, elem_size = %llx, "
781  "idx_msb = %llx, idx_lsb = %llx, "
782  "off_msb = %llx, off_lsb = %llx\n",
783  lane, idx_stride, elem_size, idx_msb, idx_lsb,
784  off_msb, off_lsb);
785 
786  buffer_offset =(idx_msb * stride + off_msb * elem_size)
787  * idx_stride + idx_lsb * elem_size + off_lsb;
788  } else {
789  buffer_offset = buf_off + stride * buf_idx;
790  }
791 
792 
800  if (rsrc_desc.stride == 0 || !rsrc_desc.swizzleEn) {
801  if (buffer_offset >=
802  rsrc_desc.numRecords - s_offset.rawData()) {
803  DPRINTF(VEGA, "mubuf out-of-bounds condition 1: "
804  "lane = %d, buffer_offset = %llx, "
805  "const_stride = %llx, "
806  "const_num_records = %llx\n",
807  lane, buf_off + stride * buf_idx,
808  stride, rsrc_desc.numRecords);
809  oobMask.set(lane);
810  continue;
811  }
812  }
813 
814  if (rsrc_desc.stride != 0 && rsrc_desc.swizzleEn) {
815  if (buf_idx >= rsrc_desc.numRecords ||
816  buf_off >= stride) {
817  DPRINTF(VEGA, "mubuf out-of-bounds condition 2: "
818  "lane = %d, offset = %llx, "
819  "index = %llx, "
820  "const_num_records = %llx\n",
821  lane, buf_off, buf_idx,
822  rsrc_desc.numRecords);
823  oobMask.set(lane);
824  continue;
825  }
826  }
827 
828  vaddr += buffer_offset;
829 
830  DPRINTF(VEGA, "Calculating mubuf address for lane %d: "
831  "vaddr = %llx, base_addr = %llx, "
832  "stride = %llx, buf_idx = %llx, buf_off = %llx\n",
833  lane, vaddr, base_addr, stride,
834  buf_idx, buf_off);
835  gpuDynInst->addr.at(lane) = vaddr;
836  }
837  }
838  }
839 
840  // first instruction DWORD
842  // second instruction DWORD
844  // Mask of lanes with out-of-bounds accesses. Needs to be tracked
845  // seperately from the exec_mask so that we remember to write zero
846  // to the registers associated with out of bounds lanes.
848  }; // Inst_MUBUF
849 
851  {
852  public:
853  Inst_MTBUF(InFmt_MTBUF*, const std::string &opcode);
854  ~Inst_MTBUF();
855 
856  int instSize() const override;
857  void initOperandInfo() override;
858 
859  protected:
860  // first instruction DWORD
862  // second instruction DWORD
864 
865  private:
866  bool hasSecondDword(InFmt_MTBUF *);
867  }; // Inst_MTBUF
868 
870  {
871  public:
872  Inst_MIMG(InFmt_MIMG*, const std::string &opcode);
873  ~Inst_MIMG();
874 
875  int instSize() const override;
876  void initOperandInfo() override;
877 
878  protected:
879  // first instruction DWORD
881  // second instruction DWORD
883  }; // Inst_MIMG
884 
886  {
887  public:
888  Inst_EXP(InFmt_EXP*, const std::string &opcode);
889  ~Inst_EXP();
890 
891  int instSize() const override;
892  void initOperandInfo() override;
893 
894  protected:
895  // first instruction DWORD
897  // second instruction DWORD
899  }; // Inst_EXP
900 
902  {
903  public:
904  Inst_FLAT(InFmt_FLAT*, const std::string &opcode);
905  ~Inst_FLAT();
906 
907  int instSize() const override;
908  void generateDisassembly() override;
909 
910  void initOperandInfo() override;
911 
912  protected:
913  template<typename T>
914  void
916  {
917  if (gpuDynInst->executedAs() == enums::SC_GLOBAL) {
918  initMemReqHelper<T, 1>(gpuDynInst, MemCmd::ReadReq);
919  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
920  Wavefront *wf = gpuDynInst->wavefront();
921  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
922  if (gpuDynInst->exec_mask[lane]) {
923  Addr vaddr = gpuDynInst->addr[lane];
924  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane]
925  = wf->ldsChunk->read<T>(vaddr);
926  }
927  }
928  }
929  }
930 
931  template<int N>
932  void
934  {
935  if (gpuDynInst->executedAs() == enums::SC_GLOBAL) {
936  initMemReqHelper<VecElemU32, N>(gpuDynInst, MemCmd::ReadReq);
937  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
938  Wavefront *wf = gpuDynInst->wavefront();
939  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
940  if (gpuDynInst->exec_mask[lane]) {
941  Addr vaddr = gpuDynInst->addr[lane];
942  for (int i = 0; i < N; ++i) {
943  (reinterpret_cast<VecElemU32*>(
944  gpuDynInst->d_data))[lane * N + i]
945  = wf->ldsChunk->read<VecElemU32>(
946  vaddr + i*sizeof(VecElemU32));
947  }
948  }
949  }
950  }
951  }
952 
953  template<typename T>
954  void
956  {
957  if (gpuDynInst->executedAs() == enums::SC_GLOBAL) {
958  initMemReqHelper<T, 1>(gpuDynInst, MemCmd::WriteReq);
959  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
960  Wavefront *wf = gpuDynInst->wavefront();
961  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
962  if (gpuDynInst->exec_mask[lane]) {
963  Addr vaddr = gpuDynInst->addr[lane];
964  wf->ldsChunk->write<T>(vaddr,
965  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane]);
966  }
967  }
968  }
969  }
970 
971  template<int N>
972  void
974  {
975  if (gpuDynInst->executedAs() == enums::SC_GLOBAL) {
976  initMemReqHelper<VecElemU32, N>(gpuDynInst, MemCmd::WriteReq);
977  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
978  Wavefront *wf = gpuDynInst->wavefront();
979  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
980  if (gpuDynInst->exec_mask[lane]) {
981  Addr vaddr = gpuDynInst->addr[lane];
982  for (int i = 0; i < N; ++i) {
983  wf->ldsChunk->write<VecElemU32>(
984  vaddr + i*sizeof(VecElemU32),
985  (reinterpret_cast<VecElemU32*>(
986  gpuDynInst->d_data))[lane * N + i]);
987  }
988  }
989  }
990  }
991  }
992 
993  template<typename T>
994  void
996  {
997  if (gpuDynInst->executedAs() == enums::SC_GLOBAL) {
998  initMemReqHelper<T, 1>(gpuDynInst, MemCmd::SwapReq, true);
999  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
1000  Wavefront *wf = gpuDynInst->wavefront();
1001  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1002  if (gpuDynInst->exec_mask[lane]) {
1003  Addr vaddr = gpuDynInst->addr[lane];
1004  auto amo_op =
1005  gpuDynInst->makeAtomicOpFunctor<T>(
1006  &(reinterpret_cast<T*>(
1007  gpuDynInst->a_data))[lane],
1008  &(reinterpret_cast<T*>(
1009  gpuDynInst->x_data))[lane]);
1010 
1011  T tmp = wf->ldsChunk->read<T>(vaddr);
1012  (*amo_op)(reinterpret_cast<uint8_t *>(&tmp));
1013  wf->ldsChunk->write<T>(vaddr, tmp);
1014  (reinterpret_cast<T*>(gpuDynInst->d_data))[lane] = tmp;
1015  }
1016  }
1017  }
1018  }
1019 
1020  void
1023  {
1024  // Offset is a 13-bit field w/the following meanings:
1025  // In Flat instructions, offset is a 12-bit unsigned number
1026  // In Global/Scratch instructions, offset is a 13-bit signed number
1027  if (isFlat()) {
1028  offset = offset & 0xfff;
1029  } else {
1030  offset = (ScalarRegI32)sext<13>(offset);
1031  }
1032  // If saddr = 0x7f there is no scalar reg to read and address will
1033  // be a 64-bit address. Otherwise, saddr is the reg index for a
1034  // scalar reg used as the base address for a 32-bit address.
1035  if ((saddr == 0x7f && isFlatGlobal()) || isFlat()) {
1036  ConstVecOperandU64 vbase(gpuDynInst, vaddr);
1037  vbase.read();
1038 
1039  calcAddrVgpr(gpuDynInst, vbase, offset);
1040  } else {
1041  // Assume we are operating in 64-bit mode and read a pair of
1042  // SGPRs for the address base.
1043  ConstScalarOperandU64 sbase(gpuDynInst, saddr);
1044  sbase.read();
1045 
1046  ConstVecOperandU32 voffset(gpuDynInst, vaddr);
1047  voffset.read();
1048 
1049  calcAddrSgpr(gpuDynInst, voffset, sbase, offset);
1050  }
1051 
1052  if (isFlat()) {
1053  gpuDynInst->resolveFlatSegment(gpuDynInst->exec_mask);
1054  } else {
1055  gpuDynInst->staticInstruction()->executed_as =
1056  enums::SC_GLOBAL;
1057  }
1058  }
1059 
1060  void
1062  {
1063  if ((gpuDynInst->executedAs() == enums::SC_GLOBAL && isFlat())
1064  || isFlatGlobal()) {
1065  gpuDynInst->computeUnit()->globalMemoryPipe
1066  .issueRequest(gpuDynInst);
1067  } else if (gpuDynInst->executedAs() == enums::SC_GROUP) {
1068  assert(isFlat());
1069  gpuDynInst->computeUnit()->localMemoryPipe
1070  .issueRequest(gpuDynInst);
1071  } else {
1072  fatal("Unsupported scope for flat instruction.\n");
1073  }
1074  }
1075 
1076  bool
1078  {
1079  return (extData.SADDR != 0x7f);
1080  }
1081 
1082  // first instruction DWORD
1084  // second instruction DWORD
1086 
1087  private:
1088  void initFlatOperandInfo();
1089  void initGlobalOperandInfo();
1090 
1091  void generateFlatDisassembly();
1093 
1094  void
1097  {
1098  // Use SGPR pair as a base address and add VGPR-offset and
1099  // instruction offset. The VGPR-offset is always 32-bits so we
1100  // mask any upper bits from the vaddr.
1101  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1102  if (gpuDynInst->exec_mask[lane]) {
1103  ScalarRegI32 voffset = vaddr[lane];
1104  gpuDynInst->addr.at(lane) =
1105  saddr.rawData() + voffset + offset;
1106  }
1107  }
1108  }
1109 
1110  void
1113  {
1114  for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1115  if (gpuDynInst->exec_mask[lane]) {
1116  gpuDynInst->addr.at(lane) = addr[lane] + offset;
1117  }
1118  }
1119  }
1120  }; // Inst_FLAT
1121 } // namespace VegaISA
1122 } // namespace gem5
1123 
1124 #endif // __ARCH_VEGA_INSTS_OP_ENCODINGS_HH__
gem5::VegaISA::Inst_SOPK::extData
InstFormat extData
Definition: op_encodings.hh:109
gem5::VegaISA::Inst_SOP2::instSize
int instSize() const override
Definition: op_encodings.cc:85
gem5::VegaISA::Inst_MUBUF::instSize
int instSize() const override
Definition: op_encodings.cc:1331
fatal
#define fatal(...)
This implements a cprintf based fatal() function.
Definition: logging.hh:200
gem5::VegaISA::Inst_MUBUF::initMemRead
void initMemRead(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:653
gem5::GPUStaticInst::isDPPInst
bool isDPPInst() const
Definition: gpu_static_inst.hh:116
gem5::VegaISA::Inst_MUBUF
Definition: op_encodings.hh:639
gem5::VegaISA::Inst_VOPC::extData
InstFormat extData
Definition: op_encodings.hh:409
gem5::VegaISA::Inst_DS::~Inst_DS
~Inst_DS()
Definition: op_encodings.cc:1195
gem5::VegaISA::InFmt_SMEM
Definition: gpu_decoder.hh:1733
gem5::VegaISA::BufferRsrcDescriptor::baseAddr
uint64_t baseAddr
Definition: op_encodings.hh:50
gem5::VegaISA::Inst_VOP3A::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:972
gem5::VegaISA::InFmt_VOP2::VDST
unsigned int VDST
Definition: gpu_decoder.hh:1805
gem5::VegaISA::Inst_FLAT
Definition: op_encodings.hh:901
gem5::VegaISA::Inst_MIMG::instData
InFmt_MIMG instData
Definition: op_encodings.hh:880
gem5::VegaISA::Inst_MIMG
Definition: op_encodings.hh:869
gem5::VegaISA::Inst_SOP1::Inst_SOP1
Inst_SOP1(InFmt_SOP1 *, const std::string &opcode)
Definition: op_encodings.cc:223
gem5::VegaISA::Inst_SOP2::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:61
gem5::VegaISA::Inst_SOPK::Inst_SOPK
Inst_SOPK(InFmt_SOPK *, const std::string &opcode)
Definition: op_encodings.cc:128
gem5::VegaISA::Inst_MUBUF::instData
InFmt_MUBUF instData
Definition: op_encodings.hh:841
gem5::VegaISA::Inst_SMEM::Inst_SMEM
Inst_SMEM(InFmt_SMEM *, const std::string &opcode)
Definition: op_encodings.cc:492
gem5::VegaISA::Inst_VOP3A::instData
InFmt_VOP3A instData
Definition: op_encodings.hh:442
gem5::VegaISA::Inst_SOPK::instData
InFmt_SOPK instData
Definition: op_encodings.hh:107
gem5::VegaISA::Inst_SOP1::extData
InstFormat extData
Definition: op_encodings.hh:131
gem5::VegaISA::Inst_SOP2
Definition: op_encodings.hh:73
operand.hh
gem5::VegaISA::Inst_FLAT::generateFlatDisassembly
void generateFlatDisassembly()
Definition: op_encodings.cc:1706
gem5::VegaISA::Inst_SOPK
Definition: op_encodings.hh:94
gem5::VegaISA::InFmt_VOP_DPP::ROW_MASK
unsigned int ROW_MASK
Definition: gpu_decoder.hh:1852
gem5::VegaISA::VEGAGPUStaticInst
Definition: gpu_static_inst.hh:47
gem5::VegaISA::Inst_VOP2
Definition: op_encodings.hh:257
gpu_static_inst.hh
gem5::GPUStaticInst::isFlat
bool isFlat() const
Definition: gpu_static_inst.hh:131
gem5::MemCmd::SwapReq
@ SwapReq
Definition: packet.hh:120
gem5::VegaISA::Inst_VOP2::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:626
gem5::VegaISA::Inst_VOP3A::sgprDst
const bool sgprDst
the v_cmp and readlane instructions in the VOP3 encoding are unique because they are the only instruc...
Definition: op_encodings.hh:458
gem5::VegaISA::Inst_DS::extData
InFmt_DS_1 extData
Definition: op_encodings.hh:636
gem5::VegaISA::InFmt_VOP_SDWA::SRC0_NEG
unsigned int SRC0_NEG
Definition: gpu_decoder.hh:1863
gem5::VegaISA::Inst_MIMG::Inst_MIMG
Inst_MIMG(InFmt_MIMG *, const std::string &opcode)
Definition: op_encodings.cc:1428
gem5::VegaISA::Inst_VOP3B::~Inst_VOP3B
~Inst_VOP3B()
Definition: op_encodings.cc:1087
gem5::VegaISA::Inst_DS::calcAddr
void calcAddr(GPUDynInstPtr gpuDynInst, ConstVecOperandU32 &addr)
Definition: op_encodings.hh:622
gem5::VegaISA::Inst_SOP2::instData
InFmt_SOP2 instData
Definition: op_encodings.hh:85
gem5::VegaISA::InFmt_VOP_DPP::DPP_CTRL
unsigned int DPP_CTRL
Definition: gpu_decoder.hh:1844
gem5::VegaISA::Inst_SOP2::varSize
uint32_t varSize
Definition: op_encodings.hh:88
gem5::Wavefront::ldsChunk
LdsChunk * ldsChunk
Definition: wavefront.hh:223
gem5::VegaISA::Inst_DS::initMemRead
void initMemRead(GPUDynInstPtr gpuDynInst, Addr offset)
Definition: op_encodings.hh:496
gem5::VegaISA::Inst_VOP2::Inst_VOP2
Inst_VOP2(InFmt_VOP2 *, const std::string &opcode)
Definition: op_encodings.cc:601
gem5::VegaISA::Inst_VINTRP
Definition: op_encodings.hh:416
gem5::VegaISA::Inst_VOPC::Inst_VOPC
Inst_VOPC(InFmt_VOPC *, const std::string &opcode)
Definition: op_encodings.cc:842
gem5::Wavefront
Definition: wavefront.hh:60
gem5::VegaISA::InFmt_VOP2::VSRC1
unsigned int VSRC1
Definition: gpu_decoder.hh:1804
gem5::VegaISA::Inst_VOP3A
Definition: op_encodings.hh:429
gem5::VegaISA::Inst_VOP2::dppHelper
T dppHelper(GPUDynInstPtr gpuDynInst, T &src1)
Definition: op_encodings.hh:323
gem5::VegaISA::Inst_VOP3B::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:1138
gem5::VegaISA::ScalarOperand::rawData
std::enable_if< Condition, DataType >::type rawData() const
we store scalar data in a std::array, however if we need the full operand data we use this method to ...
Definition: operand.hh:391
gem5::VegaISA::VecOperand
Definition: operand.hh:101
gem5::VegaISA::NumVecElemPerVecReg
const int NumVecElemPerVecReg(64)
gem5::VegaISA::Inst_VOP3B::instSize
int instSize() const override
Definition: op_encodings.cc:1132
gem5::VegaISA::Inst_VOP2::extData
InstFormat extData
Definition: op_encodings.hh:272
gem5::VectorMask
std::bitset< std::numeric_limits< unsigned long long >::digits > VectorMask
Definition: misc.hh:45
gem5::VegaISA::InFmt_SMEM_1
Definition: gpu_decoder.hh:1745
gem5::VegaISA::Inst_SMEM::initMemWrite
void initMemWrite(GPUDynInstPtr gpuDynInst)
initiate a memory write access for N dwords
Definition: op_encodings.hh:204
gem5::VegaISA::ScalarOperand::rawDataPtr
void * rawDataPtr()
Definition: operand.hh:402
gem5::VegaISA::InFmt_VOP3A
Definition: gpu_decoder.hh:1810
gem5::VegaISA::Inst_VOP1::Inst_VOP1
Inst_VOP1(InFmt_VOP1 *, const std::string &opcode)
Definition: op_encodings.cc:736
gem5::VegaISA::Inst_SOPC::hasSecondDword
bool hasSecondDword(InFmt_SOPC *)
Definition: op_encodings.cc:357
gem5::VegaISA::Inst_FLAT::initFlatOperandInfo
void initFlatOperandInfo()
Definition: op_encodings.cc:1588
gem5::VegaISA::Inst_VOP2::sdwaSrcHelper
T sdwaSrcHelper(GPUDynInstPtr gpuDynInst, T &src1)
Definition: op_encodings.hh:276
gem5::VegaISA::InFmt_VOP_SDWA::SRC0
unsigned int SRC0
Definition: gpu_decoder.hh:1856
gem5::VegaISA::Inst_MIMG::extData
InFmt_MIMG_1 extData
Definition: op_encodings.hh:882
gem5::VegaISA::Inst_VOP3A::Inst_VOP3A
Inst_VOP3A(InFmt_VOP3A *, const std::string &opcode, bool sgpr_dst)
Definition: op_encodings.cc:956
gem5::VegaISA::Inst_SOPC::~Inst_SOPC
~Inst_SOPC()
Definition: op_encodings.cc:329
gem5::VegaISA::InFmt_MIMG
Definition: gpu_decoder.hh:1666
gem5::VegaISA::Inst_MUBUF::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:1337
gem5::VegaISA::Inst_VINTRP::~Inst_VINTRP
~Inst_VINTRP()
Definition: op_encodings.cc:944
gem5::VegaISA::Inst_EXP::instSize
int instSize() const override
Definition: op_encodings.cc:1536
gem5::VegaISA::Inst_VOP3A::instSize
int instSize() const override
Definition: op_encodings.cc:1012
gem5::VegaISA::BufferRsrcDescriptor::dstSelW
uint32_t dstSelW
Definition: op_encodings.hh:58
gem5::VegaISA::InFmt_DS
Definition: gpu_decoder.hh:1610
gem5::GPUStaticInst::isFlatGlobal
bool isFlatGlobal() const
Definition: gpu_static_inst.hh:132
gem5::GPUStaticInst::isSDWAInst
bool isSDWAInst() const
Definition: gpu_static_inst.hh:115
gem5::VegaISA::Inst_SMEM
Definition: op_encodings.hh:176
gem5::VegaISA::Inst_SOPC
Definition: op_encodings.hh:138
gem5::VegaISA::InstFormat::iFmt_VOP_DPP
InFmt_VOP_DPP iFmt_VOP_DPP
Definition: gpu_decoder.hh:1939
gem5::VegaISA::Inst_SOPK::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:201
gem5::VegaISA::Inst_DS::initAtomicAccess
void initAtomicAccess(GPUDynInstPtr gpuDynInst, Addr offset)
Definition: op_encodings.hh:602
gem5::VegaISA::Inst_VOP1::~Inst_VOP1
~Inst_VOP1()
Definition: op_encodings.cc:756
gem5::VegaISA::Inst_VOP1::instSize
int instSize() const override
Definition: op_encodings.cc:797
gem5::VegaISA::Inst_VOP3B::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1092
gem5::VegaISA::Inst_SMEM::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:565
gem5::VegaISA::Inst_SOP1
Definition: op_encodings.hh:116
gem5::VegaISA::Inst_MUBUF::injectGlobalMemFence
void injectGlobalMemFence(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:705
gem5::VegaISA::Inst_VOPC
Definition: op_encodings.hh:394
gem5::ArmISA::i
Bitfield< 7 > i
Definition: misc_types.hh:67
gem5::VegaISA::InFmt_VOP_SDWA::SRC0_SEXT
unsigned int SRC0_SEXT
Definition: gpu_decoder.hh:1862
gem5::VegaISA::Inst_DS
Definition: op_encodings.hh:482
gem5::VegaISA::Inst_SOPP::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:437
gem5::VegaISA::Inst_VOP1
Definition: op_encodings.hh:372
gem5::VegaISA::Inst_VOP2::hasSecondDword
bool hasSecondDword(InFmt_VOP2 *)
Definition: op_encodings.cc:671
gpu_mem_helpers.hh
gem5::VegaISA::Inst_VOP3A::extData
InFmt_VOP3_1 extData
Definition: op_encodings.hh:444
gem5::VegaISA::Inst_FLAT::Inst_FLAT
Inst_FLAT(InFmt_FLAT *, const std::string &opcode)
Definition: op_encodings.cc:1543
gem5::VegaISA::Inst_MUBUF::calcAddr
void calcAddr(GPUDynInstPtr gpuDynInst, VOFF v_off, VIDX v_idx, SRSRC s_rsrc_desc, SOFF s_offset, int inst_offset)
MUBUF insructions calculate their addresses as follows:
Definition: op_encodings.hh:741
gem5::VegaISA::Inst_FLAT::instSize
int instSize() const override
Definition: op_encodings.cc:1685
gem5::VegaISA::BufferRsrcDescriptor::swizzleEn
uint32_t swizzleEn
Definition: op_encodings.hh:53
gem5::VegaISA::Inst_EXP::~Inst_EXP
~Inst_EXP()
Definition: op_encodings.cc:1513
gem5::VegaISA::Inst_SOPC::instData
InFmt_SOPC instData
Definition: op_encodings.hh:151
gem5::VegaISA::Inst_SMEM::initMemRead
void initMemRead(GPUDynInstPtr gpuDynInst)
initiate a memory read access for N dwords
Definition: op_encodings.hh:193
gem5::VegaISA::Inst_MIMG::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1449
gem5::VegaISA::Inst_FLAT::initGlobalOperandInfo
void initGlobalOperandInfo()
Definition: op_encodings.cc:1625
gem5::VegaISA::BufferRsrcDescriptor::hashEn
uint32_t hashEn
Definition: op_encodings.hh:65
gem5::VegaISA::InFmt_VOP_DPP::SRC1_NEG
unsigned int SRC1_NEG
Definition: gpu_decoder.hh:1849
gem5::VegaISA::Inst_VINTRP::instData
InFmt_VINTRP instData
Definition: op_encodings.hh:426
gem5::VegaISA::InFmt_VOP_DPP::SRC0_NEG
unsigned int SRC0_NEG
Definition: gpu_decoder.hh:1847
gem5::VegaISA::InFmt_MTBUF
Definition: gpu_decoder.hh:1690
gem5::VegaISA::Inst_MTBUF::extData
InFmt_MTBUF_1 extData
Definition: op_encodings.hh:863
gem5::VegaISA::InFmt_VOP_DPP::SRC0_ABS
unsigned int SRC0_ABS
Definition: gpu_decoder.hh:1848
gem5::VegaISA::Inst_MUBUF::initMemWrite
void initMemWrite(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:680
gem5::VegaISA::Inst_FLAT::~Inst_FLAT
~Inst_FLAT()
Definition: op_encodings.cc:1568
gem5::GPUStaticInst::opcode
const std::string & opcode() const
Definition: gpu_static_inst.hh:263
gem5::VegaISA::InFmt_SOPP
Definition: gpu_decoder.hh:1780
gem5::VegaISA::InFmt_MUBUF
Definition: gpu_decoder.hh:1711
gem5::VegaISA::BufferRsrcDescriptor::dstSelZ
uint32_t dstSelZ
Definition: op_encodings.hh:57
gem5::VegaISA::Inst_SOPP::Inst_SOPP
Inst_SOPP(InFmt_SOPP *, const std::string &opcode)
Definition: op_encodings.cc:393
gem5::VegaISA::Inst_MIMG::instSize
int instSize() const override
Definition: op_encodings.cc:1496
gem5::VegaISA::Inst_VOPC::~Inst_VOPC
~Inst_VOPC()
Definition: op_encodings.cc:863
gem5::VegaISA::Inst_VOP3A::hasSecondDword
bool hasSecondDword(InFmt_VOP3A *)
gem5::VegaISA::Inst_SOPP::instData
InFmt_SOPP instData
Definition: op_encodings.hh:173
gem5::VegaISA::Inst_SOPK::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:150
gem5::VegaISA::Inst_MTBUF::hasSecondDword
bool hasSecondDword(InFmt_MTBUF *)
gem5::VegaISA::InFmt_VOP_SDWA::CLMP
unsigned int CLMP
Definition: gpu_decoder.hh:1859
gem5::VegaISA::Inst_VOP1::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:822
gem5::VegaISA::InFmt_VOP_DPP::SRC1_ABS
unsigned int SRC1_ABS
Definition: gpu_decoder.hh:1850
gem5::VegaISA::BufferRsrcDescriptor::dstSelX
uint32_t dstSelX
Definition: op_encodings.hh:55
gem5::VegaISA::ScalarOperand
Definition: operand.hh:97
gem5::VegaISA::Inst_SOPC::Inst_SOPC
Inst_SOPC(InFmt_SOPC *, const std::string &opcode)
Definition: op_encodings.cc:312
DPRINTF
#define DPRINTF(x,...)
Definition: trace.hh:210
gem5::VegaISA::InFmt_EXP
Definition: gpu_decoder.hh:1626
gem5::VegaISA::Inst_VOPC::instSize
int instSize() const override
Definition: op_encodings.cc:892
gem5::VegaISA::Inst_VOP2::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:696
gem5::VegaISA::Inst_VOPC::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:917
gem5::VegaISA::InFmt_VOP_DPP::BANK_MASK
unsigned int BANK_MASK
Definition: gpu_decoder.hh:1851
gem5::VegaISA::Inst_SOP2::Inst_SOP2
Inst_SOP2(InFmt_SOP2 *, const std::string &opcode)
Definition: op_encodings.cc:43
gem5::VegaISA::Inst_SOPC::instSize
int instSize() const override
Definition: op_encodings.cc:351
gem5::VegaISA::InFmt_VOP_SDWA::SRC1_ABS
unsigned int SRC1_ABS
Definition: gpu_decoder.hh:1870
gem5::VegaISA::Inst_SMEM::calcAddr
void calcAddr(GPUDynInstPtr gpu_dyn_inst, ConstScalarOperandU128 &s_rsrc_desc, ScalarRegU32 offset)
For s_buffer_load_dword/s_buffer_store_dword instruction addresses.
Definition: op_encodings.hh:227
gem5::RequestPtr
std::shared_ptr< Request > RequestPtr
Definition: request.hh:92
gem5::VegaISA::Inst_VOP1::extData
InstFormat extData
Definition: op_encodings.hh:387
gem5::VegaISA::InFmt_EXP_1
Definition: gpu_decoder.hh:1636
gem5::VegaISA::Inst_FLAT::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:1691
gem5::MemCmd::ReadReq
@ ReadReq
Definition: packet.hh:87
gem5::VegaISA::BufferRsrcDescriptor::numFmt
uint32_t numFmt
Definition: op_encodings.hh:59
gem5::LdsChunk::atomic
T atomic(const uint32_t index, AtomicOpFunctorPtr amoOp)
an atomic operation
Definition: lds_state.hh:109
gem5::VegaISA::Inst_DS::initDualMemRead
void initDualMemRead(GPUDynInstPtr gpuDynInst, Addr offset0, Addr offset1)
Definition: op_encodings.hh:531
gem5::VegaISA::BufferRsrcDescriptor::cacheSwizzle
uint32_t cacheSwizzle
Definition: op_encodings.hh:52
gem5::VegaISA::BufferRsrcDescriptor::idxStride
uint32_t idxStride
Definition: op_encodings.hh:62
gem5::VegaISA::InFmt_VINTRP
Definition: gpu_decoder.hh:1786
gem5::VegaISA::Inst_VOP2::instSize
int instSize() const override
Definition: op_encodings.cc:665
gem5::VegaISA::Inst_VOP2::sdwaDstHelper
void sdwaDstHelper(GPUDynInstPtr gpuDynInst, T &vdst)
Definition: op_encodings.hh:308
gem5::VegaISA::Inst_VOP3A::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:1018
gem5::VegaISA::Inst_FLAT::issueRequestHelper
void issueRequestHelper(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:1061
gem5::VegaISA::Inst_MUBUF::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1284
gem5::VegaISA::Inst_MUBUF::Inst_MUBUF
Inst_MUBUF(InFmt_MUBUF *, const std::string &opcode)
Definition: op_encodings.cc:1263
gem5::VegaISA::Inst_FLAT::instData
InFmt_FLAT instData
Definition: op_encodings.hh:1083
gem5::ArmISA::offset
Bitfield< 23, 0 > offset
Definition: types.hh:144
gem5::VegaISA::Inst_EXP::Inst_EXP
Inst_EXP(InFmt_EXP *, const std::string &opcode)
Definition: op_encodings.cc:1503
gem5::VegaISA::Inst_VOPC::hasSecondDword
bool hasSecondDword(InFmt_VOPC *)
Definition: op_encodings.cc:898
gem5::VegaISA::BufferRsrcDescriptor::elemSize
uint32_t elemSize
Definition: op_encodings.hh:61
gem5::VegaISA::Inst_FLAT::initMemRead
void initMemRead(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:915
gem5::VegaISA::Inst_SOPC::extData
InstFormat extData
Definition: op_encodings.hh:153
gem5::VegaISA::Inst_VOP2::instData
InFmt_VOP2 instData
Definition: op_encodings.hh:270
gem5::VegaISA::Inst_VOP3A::~Inst_VOP3A
~Inst_VOP3A()
Definition: op_encodings.cc:967
gem5::LdsChunk::write
void write(const uint32_t index, const T value)
a write operation
Definition: lds_state.hh:90
gem5::VegaISA::Inst_SMEM::extData
InFmt_SMEM_1 extData
Definition: op_encodings.hh:254
gem5::VegaISA::InstFormat::iFmt_VOP_SDWA
InFmt_VOP_SDWA iFmt_VOP_SDWA
Definition: gpu_decoder.hh:1940
gem5::VegaISA::BufferRsrcDescriptor::addTidEn
uint32_t addTidEn
Definition: op_encodings.hh:63
gem5::VegaISA::Inst_MUBUF::~Inst_MUBUF
~Inst_MUBUF()
Definition: op_encodings.cc:1279
gem5::VegaISA::InFmt_VOP_SDWA::SRC0_SEL
unsigned int SRC0_SEL
Definition: gpu_decoder.hh:1861
gem5::VegaISA::Inst_VOPC::varSize
uint32_t varSize
Definition: op_encodings.hh:410
gem5::VegaISA::Inst_SOP2::extData
InstFormat extData
Definition: op_encodings.hh:87
gem5::VegaISA::BufferRsrcDescriptor::dataFmt
uint32_t dataFmt
Definition: op_encodings.hh:60
gem5::VegaISA::Inst_VOP2::~Inst_VOP2
~Inst_VOP2()
Definition: op_encodings.cc:621
gem5::VegaISA::Inst_FLAT::initMemWrite
void initMemWrite(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:955
RubySystem.hh
gem5::VegaISA::Inst_VOP3B::instData
InFmt_VOP3B instData
Definition: op_encodings.hh:474
gem5::VegaISA::BufferRsrcDescriptor::numRecords
uint32_t numRecords
Definition: op_encodings.hh:54
gem5::Wavefront::execMask
VectorMask & execMask()
Definition: wavefront.cc:1407
gem5::Addr
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
Definition: types.hh:147
gem5::VegaISA::BufferRsrcDescriptor
Definition: op_encodings.hh:48
gem5::VegaISA::Inst_EXP
Definition: op_encodings.hh:885
gem5::VegaISA::InFmt_VOP2
Definition: gpu_decoder.hh:1802
gem5::VegaISA::Inst_VOP2::vop2Helper
void vop2Helper(GPUDynInstPtr gpuDynInst, void(*fOpImpl)(T &, T &, T &, Wavefront *))
Definition: op_encodings.hh:343
gem5::VegaISA::BufferRsrcDescriptor::atc
uint32_t atc
Definition: op_encodings.hh:64
gem5::VegaISA::BufferRsrcDescriptor::dstSelY
uint32_t dstSelY
Definition: op_encodings.hh:56
gem5::VegaISA::Inst_SOP1::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:245
gem5::VegaISA::Inst_SMEM::~Inst_SMEM
~Inst_SMEM()
Definition: op_encodings.cc:508
gem5::GPUDynInstPtr
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition: misc.hh:49
gem5::VegaISA::Inst_SOP2::hasSecondDword
bool hasSecondDword(InFmt_SOP2 *)
Definition: op_encodings.cc:91
gpu_decoder.hh
gem5::VegaISA::Inst_SOP2::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:103
gem5::VegaISA::InFmt_SOP2
Definition: gpu_decoder.hh:1758
gem5::VegaISA::Inst_VINTRP::Inst_VINTRP
Inst_VINTRP(InFmt_VINTRP *, const std::string &opcode)
Definition: op_encodings.cc:937
gem5::VegaISA::Inst_FLAT::calcAddr
void calcAddr(GPUDynInstPtr gpuDynInst, ScalarRegU32 vaddr, ScalarRegU32 saddr, ScalarRegI32 offset)
Definition: op_encodings.hh:1021
gem5::VegaISA::VecElemU32
uint32_t VecElemU32
Definition: gpu_registers.hh:165
gem5::VegaISA::Inst_SOPK::varSize
uint32_t varSize
Definition: op_encodings.hh:110
gem5::VegaISA::Inst_SOPC::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:369
gem5::VegaISA::Inst_SOP1::instSize
int instSize() const override
Definition: op_encodings.cc:279
gem5::VegaISA::Inst_VOP2::varSize
uint32_t varSize
Definition: op_encodings.hh:273
gem5::VegaISA::Inst_FLAT::vgprIsOffset
bool vgprIsOffset()
Definition: op_encodings.hh:1077
gem5::VegaISA::Inst_MIMG::~Inst_MIMG
~Inst_MIMG()
Definition: op_encodings.cc:1444
gem5::VegaISA::Inst_MTBUF::instSize
int instSize() const override
Definition: op_encodings.cc:1421
gem5::VegaISA::ScalarOperand::read
void read() override
Definition: operand.hh:408
gem5::VegaISA::Inst_FLAT::extData
InFmt_FLAT_1 extData
Definition: op_encodings.hh:1085
gem5::VegaISA::ScalarRegI32
int32_t ScalarRegI32
Definition: gpu_registers.hh:154
gem5::VegaISA::Inst_SMEM::calcAddr
void calcAddr(GPUDynInstPtr gpu_dyn_inst, ConstScalarOperandU64 &addr, ScalarRegU32 offset)
For normal s_load_dword/s_store_dword instruction addresses.
Definition: op_encodings.hh:214
gem5::VegaISA::InFmt_VOP_SDWA::DST_U
unsigned int DST_U
Definition: gpu_decoder.hh:1858
gem5::VegaISA::Inst_VOP1::varSize
uint32_t varSize
Definition: op_encodings.hh:388
gem5::VegaISA::Inst_MTBUF::Inst_MTBUF
Inst_MTBUF(InFmt_MTBUF *, const std::string &opcode)
Definition: op_encodings.cc:1356
gem5::VegaISA::Inst_VOP3B::extData
InFmt_VOP3_1 extData
Definition: op_encodings.hh:476
gem5::VegaISA::Inst_SOP1::varSize
uint32_t varSize
Definition: op_encodings.hh:132
gem5::VegaISA::Inst_EXP::instData
InFmt_EXP instData
Definition: op_encodings.hh:896
gem5::VegaISA::VecOperand::read
void read() override
read from the vrf.
Definition: operand.hh:146
gem5::VegaISA::InFmt_SOPK
Definition: gpu_decoder.hh:1773
gem5::VegaISA::Inst_SOPP
Definition: op_encodings.hh:160
gem5::VegaISA::Inst_SOPP::~Inst_SOPP
~Inst_SOPP()
Definition: op_encodings.cc:402
gem5::VegaISA::processDPP
void processDPP(GPUDynInstPtr gpuDynInst, InFmt_VOP_DPP dppInst, T &src0)
processDPP is a helper function for implementing Data Parallel Primitive instructions.
Definition: inst_util.hh:422
gem5::VegaISA::Inst_SOP1::instData
InFmt_SOP1 instData
Definition: op_encodings.hh:129
gem5::VegaISA::InFmt_MUBUF_1
Definition: gpu_decoder.hh:1724
gem5::VegaISA::Inst_VOPC::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:868
gem5::VegaISA::InFmt_MIMG_1
Definition: gpu_decoder.hh:1681
gem5::VegaISA::Inst_FLAT::initAtomicAccess
void initAtomicAccess(GPUDynInstPtr gpuDynInst)
Definition: op_encodings.hh:995
gem5::VegaISA::Inst_VINTRP::instSize
int instSize() const override
Definition: op_encodings.cc:949
gem5::VegaISA::Inst_SOPP::instSize
int instSize() const override
Definition: op_encodings.cc:431
gem5::VegaISA::Inst_SOPC::varSize
uint32_t varSize
Definition: op_encodings.hh:154
gem5::VegaISA::Inst_DS::instSize
int instSize() const override
Definition: op_encodings.cc:1223
gem5::VegaISA::Inst_DS::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:1229
gem5::VegaISA::BufferRsrcDescriptor::mType
uint32_t mType
Definition: op_encodings.hh:67
gem5::VegaISA::Inst_DS::Inst_DS
Inst_DS(InFmt_DS *, const std::string &opcode)
Definition: op_encodings.cc:1183
gem5::VegaISA::Inst_DS::initMemWrite
void initMemWrite(GPUDynInstPtr gpuDynInst, Addr offset)
Definition: op_encodings.hh:550
gem5::VegaISA::InFmt_VOP_SDWA::SRC0_ABS
unsigned int SRC0_ABS
Definition: gpu_decoder.hh:1864
gem5::VegaISA::InFmt_VOP3_1
Definition: gpu_decoder.hh:1819
gem5::MemCmd::WriteReq
@ WriteReq
Definition: packet.hh:90
gem5::VegaISA::InFmt_VOP_SDWA::SRC1_NEG
unsigned int SRC1_NEG
Definition: gpu_decoder.hh:1869
gem5::VegaISA::InstFormat
Definition: gpu_decoder.hh:1911
gem5::VegaISA::Inst_SOPK::hasSecondDword
bool hasSecondDword(InFmt_SOPK *)
Definition: op_encodings.cc:184
gem5::VegaISA::Inst_SOPP::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:407
gem5::VegaISA::Inst_MUBUF::oobMask
VectorMask oobMask
Definition: op_encodings.hh:847
gem5::VegaISA::ScalarRegU32
uint32_t ScalarRegU32
Definition: gpu_registers.hh:153
gem5::VegaISA::Inst_FLAT::calcAddrVgpr
void calcAddrVgpr(GPUDynInstPtr gpuDynInst, ConstVecOperandU64 &addr, ScalarRegI32 offset)
Definition: op_encodings.hh:1111
gem5::VegaISA::InFmt_VOP1
Definition: gpu_decoder.hh:1795
gem5::VegaISA::InFmt_VOP_SDWA::SRC1_SEL
unsigned int SRC1_SEL
Definition: gpu_decoder.hh:1867
gem5::VegaISA::Inst_EXP::extData
InFmt_EXP_1 extData
Definition: op_encodings.hh:898
gem5::VegaISA::InFmt_FLAT_1::SADDR
unsigned int SADDR
Definition: gpu_decoder.hh:1657
gem5::VegaISA::BufferRsrcDescriptor::type
uint32_t type
Definition: op_encodings.hh:68
gem5::MipsISA::vaddr
vaddr
Definition: pra_constants.hh:278
gem5::VegaISA::Inst_MTBUF::instData
InFmt_MTBUF instData
Definition: op_encodings.hh:861
gem5::VegaISA::InFmt_SOP1
Definition: gpu_decoder.hh:1751
gem5::VegaISA::InFmt_VOPC
Definition: gpu_decoder.hh:1835
gem5::AtomicOpFunctorPtr
std::unique_ptr< AtomicOpFunctor > AtomicOpFunctorPtr
Definition: amo.hh:269
gem5::VegaISA::Inst_VOP3B::Inst_VOP3B
Inst_VOP3B(InFmt_VOP3B *, const std::string &opcode)
Definition: op_encodings.cc:1077
gem5::VegaISA::Inst_VOP1::hasSecondDword
bool hasSecondDword(InFmt_VOP1 *)
Definition: op_encodings.cc:803
gem5::VegaISA::Inst_SOP1::hasSecondDword
bool hasSecondDword(InFmt_SOP1 *)
Definition: op_encodings.cc:285
gem5::VegaISA::Inst_VOP1::instData
InFmt_VOP1 instData
Definition: op_encodings.hh:385
gem5::VegaISA::Inst_SOPK::instSize
int instSize() const override
Definition: op_encodings.cc:178
gem5::VegaISA::Inst_MTBUF::~Inst_MTBUF
~Inst_MTBUF()
Definition: op_encodings.cc:1372
gem5
Reference material can be found at the JEDEC website: UFS standard http://www.jedec....
Definition: gpu_translation_state.hh:37
gem5::VegaISA::Inst_FLAT::calcAddrSgpr
void calcAddrSgpr(GPUDynInstPtr gpuDynInst, ConstVecOperandU32 &vaddr, ConstScalarOperandU64 &saddr, ScalarRegI32 offset)
Definition: op_encodings.hh:1095
gem5::VegaISA::Inst_SOP1::generateDisassembly
void generateDisassembly() override
Definition: op_encodings.cc:294
gem5::VegaISA::InFmt_DS_1
Definition: gpu_decoder.hh:1619
gem5::VegaISA::InFmt_SOPC
Definition: gpu_decoder.hh:1766
gem5::VegaISA::Inst_DS::instData
InFmt_DS instData
Definition: op_encodings.hh:634
gem5::VegaISA::Inst_VOP1::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:761
gem5::ArmISA::stride
Bitfield< 21, 20 > stride
Definition: misc_types.hh:504
gem5::VegaISA::Inst_SMEM::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:513
gem5::VegaISA::Inst_DS::initDualMemWrite
void initDualMemWrite(GPUDynInstPtr gpuDynInst, Addr offset0, Addr offset1)
Definition: op_encodings.hh:584
gem5::VegaISA::Inst_MUBUF::extData
InFmt_MUBUF_1 extData
Definition: op_encodings.hh:843
gem5::VegaISA::BufferRsrcDescriptor::stride
uint32_t stride
Definition: op_encodings.hh:51
gem5::VegaISA::Inst_VOP3B::hasSecondDword
bool hasSecondDword(InFmt_VOP3B *)
gem5::VegaISA::InFmt_FLAT_1
Definition: gpu_decoder.hh:1654
gem5::VegaISA::Inst_EXP::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1518
gem5::VegaISA::InFmt_MTBUF_1
Definition: gpu_decoder.hh:1701
gem5::VegaISA::Inst_VOP3B
Definition: op_encodings.hh:461
gem5::VegaISA::Inst_SOPK::~Inst_SOPK
~Inst_SOPK()
Definition: op_encodings.cc:145
gem5::VegaISA::InFmt_VOP_SDWA::DST_SEL
unsigned int DST_SEL
Definition: gpu_decoder.hh:1857
gem5::VegaISA::Inst_FLAT::generateGlobalDisassembly
void generateGlobalDisassembly()
Definition: op_encodings.cc:1723
gem5::VegaISA::Inst_VOPC::instData
InFmt_VOPC instData
Definition: op_encodings.hh:407
gem5::VegaISA::Inst_MTBUF::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1377
gem5::VegaISA::BufferRsrcDescriptor::heap
uint32_t heap
Definition: op_encodings.hh:66
gem5::VegaISA::InFmt_VOP_SDWA::SRC1_SEXT
unsigned int SRC1_SEXT
Definition: gpu_decoder.hh:1868
gem5::VegaISA::InFmt_FLAT
Definition: gpu_decoder.hh:1643
gem5::VegaISA::Inst_SOPC::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:334
gem5::VegaISA::Inst_FLAT::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1573
gem5::VegaISA::processSDWA_dst
void processSDWA_dst(InFmt_VOP_SDWA sdwaInst, T &dst, T &origDst)
processSDWA_dst is a helper function for implementing sub d-word addressing instructions for the dst ...
Definition: inst_util.hh:890
gem5::VegaISA::InFmt_VOP2::SRC0
unsigned int SRC0
Definition: gpu_decoder.hh:1803
gem5::VegaISA::Inst_DS::initOperandInfo
void initOperandInfo() override
Definition: op_encodings.cc:1200
gem5::VegaISA::Inst_SMEM::instData
InFmt_SMEM instData
Definition: op_encodings.hh:252
gem5::X86ISA::addr
Bitfield< 3 > addr
Definition: types.hh:84
gem5::VegaISA::InFmt_VOP3B
Definition: gpu_decoder.hh:1827
gem5::VegaISA::Inst_MTBUF
Definition: op_encodings.hh:850
gem5::VegaISA::InFmt_VOP_DPP::BC
unsigned int BC
Definition: gpu_decoder.hh:1846
gem5::VegaISA::InFmt_VOP_DPP::SRC0
unsigned int SRC0
Definition: gpu_decoder.hh:1843
gem5::VegaISA::Inst_SMEM::instSize
int instSize() const override
Definition: op_encodings.cc:559
gem5::VegaISA::Inst_SOP1::~Inst_SOP1
~Inst_SOP1()
Definition: op_encodings.cc:240
gem5::VegaISA::processSDWA_src
void processSDWA_src(InFmt_VOP_SDWA sdwaInst, T &src0, T &origSrc0)
processSDWA_src is a helper function for implementing sub d-word addressing instructions for the src ...
Definition: inst_util.hh:834
gem5::LdsChunk::read
T read(const uint32_t index)
a read operation
Definition: lds_state.hh:71

Generated on Sun Jul 30 2023 01:56:46 for gem5 by doxygen 1.8.17