gem5 [DEVELOP-FOR-25.0]
Loading...
Searching...
No Matches
flat.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 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
33
34namespace gem5
35{
36
37namespace VegaISA
38{
39 // --- Inst_FLAT__FLAT_LOAD_UBYTE class methods ---
40
42 : Inst_FLAT(iFmt, "flat_load_ubyte")
43 {
44 setFlag(MemoryRef);
46 } // Inst_FLAT__FLAT_LOAD_UBYTE
47
49 {
50 } // ~Inst_FLAT__FLAT_LOAD_UBYTE
51
52 // --- description from .arch file ---
53 // Untyped buffer load unsigned byte (zero extend to VGPR destination).
54 void
56 {
57 Wavefront *wf = gpuDynInst->wavefront();
58
59 if (gpuDynInst->exec_mask.none()) {
61 wf->untrackVMemInst(gpuDynInst);
62 if (isFlat()) {
64 wf->untrackLGKMInst(gpuDynInst);
65 }
66 return;
67 }
68
69 gpuDynInst->execUnitId = wf->execUnitId;
70 gpuDynInst->latency.init(gpuDynInst->computeUnit());
71 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
72
73 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
74
75 issueRequestHelper(gpuDynInst);
76 } // execute
77
78 void
80 {
81 initMemRead<VecElemU8>(gpuDynInst);
82 } // initiateAcc
83
84 void
86 {
87 VecOperandU32 vdst(gpuDynInst, extData.VDST);
88
89 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
90 if (gpuDynInst->exec_mask[lane]) {
91 vdst[lane] = (VecElemU32)((reinterpret_cast<VecElemU8*>(
92 gpuDynInst->d_data))[lane]);
93 }
94 }
95 vdst.write();
96 } // execute
97 // --- Inst_FLAT__FLAT_LOAD_SBYTE class methods ---
98
100 : Inst_FLAT(iFmt, "flat_load_sbyte")
101 {
102 setFlag(MemoryRef);
103 setFlag(Load);
104 } // Inst_FLAT__FLAT_LOAD_SBYTE
105
107 {
108 } // ~Inst_FLAT__FLAT_LOAD_SBYTE
109
110 // --- description from .arch file ---
111 // Untyped buffer load signed byte (sign extend to VGPR destination).
112 void
114 {
115 Wavefront *wf = gpuDynInst->wavefront();
116
117 if (gpuDynInst->exec_mask.none()) {
118 wf->decVMemInstsIssued();
119 wf->untrackVMemInst(gpuDynInst);
120 if (isFlat()) {
121 wf->decLGKMInstsIssued();
122 wf->untrackLGKMInst(gpuDynInst);
123 }
124 return;
125 }
126
127 gpuDynInst->execUnitId = wf->execUnitId;
128 gpuDynInst->latency.init(gpuDynInst->computeUnit());
129 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
130
131 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
132
133 issueRequestHelper(gpuDynInst);
134 } // execute
135
136 void
138 {
139 initMemRead<VecElemI8>(gpuDynInst);
140 } // initiateAcc
141
142 void
144 {
145 VecOperandU32 vdst(gpuDynInst, extData.VDST);
146
147 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
148 if (gpuDynInst->exec_mask[lane]) {
149 vdst[lane] = (VecElemI32)((reinterpret_cast<VecElemI8*>(
150 gpuDynInst->d_data))[lane]);
151 }
152 }
153 vdst.write();
154 } // execute
155 // --- Inst_FLAT__FLAT_LOAD_USHORT class methods ---
156
158 : Inst_FLAT(iFmt, "flat_load_ushort")
159 {
160 setFlag(MemoryRef);
161 setFlag(Load);
162 } // Inst_FLAT__FLAT_LOAD_USHORT
163
165 {
166 } // ~Inst_FLAT__FLAT_LOAD_USHORT
167
168 // --- description from .arch file ---
169 // Untyped buffer load unsigned short (zero extend to VGPR destination).
170 void
172 {
173 Wavefront *wf = gpuDynInst->wavefront();
174
175 if (gpuDynInst->exec_mask.none()) {
176 wf->decVMemInstsIssued();
177 wf->untrackVMemInst(gpuDynInst);
178 if (isFlat()) {
179 wf->decLGKMInstsIssued();
180 wf->untrackLGKMInst(gpuDynInst);
181 }
182 return;
183 }
184
185 gpuDynInst->execUnitId = wf->execUnitId;
186 gpuDynInst->latency.init(gpuDynInst->computeUnit());
187 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
188
189 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
190
191 issueRequestHelper(gpuDynInst);
192 } // execute
193
194 void
196 {
197 initMemRead<VecElemU16>(gpuDynInst);
198 } // initiateAcc
199
200 void
202 {
203 VecOperandU32 vdst(gpuDynInst, extData.VDST);
204
205 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
206 if (gpuDynInst->exec_mask[lane]) {
207 vdst[lane] = (VecElemU32)((reinterpret_cast<VecElemU16*>(
208 gpuDynInst->d_data))[lane]);
209 }
210 }
211 vdst.write();
212 } // execute
213
214 // --- Inst_FLAT__FLAT_LOAD_SSHORT class methods ---
215
217 : Inst_FLAT(iFmt, "flat_load_sshort")
218 {
219 setFlag(MemoryRef);
220 setFlag(Load);
221 } // Inst_FLAT__FLAT_LOAD_SSHORT
222
224 {
225 } // ~Inst_FLAT__FLAT_LOAD_SSHORT
226
227 // --- description from .arch file ---
228 // Untyped buffer load signed short (sign extend to VGPR destination).
229 void
234
235 void
237 {
238 } // initiateAcc
239
240 void
242 {
243 } // execute
244 // --- Inst_FLAT__FLAT_LOAD_DWORD class methods ---
245
247 : Inst_FLAT(iFmt, "flat_load_dword")
248 {
249 setFlag(MemoryRef);
250 setFlag(Load);
251 } // Inst_FLAT__FLAT_LOAD_DWORD
252
254 {
255 } // ~Inst_FLAT__FLAT_LOAD_DWORD
256
257 // --- description from .arch file ---
258 // Untyped buffer load dword.
259 void
261 {
262 Wavefront *wf = gpuDynInst->wavefront();
263
264 if (gpuDynInst->exec_mask.none()) {
265 wf->decVMemInstsIssued();
266 wf->untrackVMemInst(gpuDynInst);
267 if (isFlat()) {
268 wf->decLGKMInstsIssued();
269 wf->untrackLGKMInst(gpuDynInst);
270 }
271 return;
272 }
273
274 gpuDynInst->execUnitId = wf->execUnitId;
275 gpuDynInst->latency.init(gpuDynInst->computeUnit());
276 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
277
278 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
279
280 issueRequestHelper(gpuDynInst);
281 } // execute
282
283 void
285 {
286 initMemRead<VecElemU32>(gpuDynInst);
287 } // initiateAcc
288
289 void
291 {
292 VecOperandU32 vdst(gpuDynInst, extData.VDST);
293
294 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
295 if (gpuDynInst->exec_mask[lane]) {
296 vdst[lane] = (reinterpret_cast<VecElemU32*>(
297 gpuDynInst->d_data))[lane];
298 }
299 }
300 vdst.write();
301 } // completeAcc
302 // --- Inst_FLAT__FLAT_LOAD_DWORDX2 class methods ---
303
305 InFmt_FLAT *iFmt)
306 : Inst_FLAT(iFmt, "flat_load_dwordx2")
307 {
308 setFlag(MemoryRef);
309 setFlag(Load);
310 } // Inst_FLAT__FLAT_LOAD_DWORDX2
311
313 {
314 } // ~Inst_FLAT__FLAT_LOAD_DWORDX2
315
316 // --- description from .arch file ---
317 // Untyped buffer load 2 dwords.
318 void
320 {
321 Wavefront *wf = gpuDynInst->wavefront();
322
323 if (gpuDynInst->exec_mask.none()) {
324 wf->decVMemInstsIssued();
325 wf->untrackVMemInst(gpuDynInst);
326 if (isFlat()) {
327 wf->decLGKMInstsIssued();
328 wf->untrackLGKMInst(gpuDynInst);
329 }
330 return;
331 }
332
333 gpuDynInst->execUnitId = wf->execUnitId;
334 gpuDynInst->latency.init(gpuDynInst->computeUnit());
335 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
336
337 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
338
339 issueRequestHelper(gpuDynInst);
340 } // execute
341
342 void
344 {
345 initMemRead<2>(gpuDynInst);
346 } // initiateAcc
347
348 void
350 {
351 VecOperandU32 vdst0(gpuDynInst, extData.VDST);
352 VecOperandU32 vdst1(gpuDynInst, extData.VDST + 1);
353
354 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
355 if (gpuDynInst->exec_mask[lane] && !isFlatScratch()) {
356 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
357 gpuDynInst->d_data))[lane * 2];
358 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
359 gpuDynInst->d_data))[lane * 2 + 1];
360 } else if (gpuDynInst->exec_mask[lane] && isFlatScratch()) {
361 // Unswizzle the data opposite of swizzleData. See swizzleData
362 // in src/arch/amdgpu/vega/insts/op_encodings.hh for details.
363 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
364 gpuDynInst->d_data))[lane];
365 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
366 gpuDynInst->d_data))[lane + NumVecElemPerVecReg];
367 }
368 }
369
370 vdst0.write();
371 vdst1.write();
372 } // completeAcc
373 // --- Inst_FLAT__FLAT_LOAD_DWORDX3 class methods ---
374
376 InFmt_FLAT *iFmt)
377 : Inst_FLAT(iFmt, "flat_load_dwordx3")
378 {
379 setFlag(MemoryRef);
380 setFlag(Load);
381 } // Inst_FLAT__FLAT_LOAD_DWORDX3
382
384 {
385 } // ~Inst_FLAT__FLAT_LOAD_DWORDX3
386
387 // --- description from .arch file ---
388 // Untyped buffer load 3 dwords.
389 void
391 {
392 Wavefront *wf = gpuDynInst->wavefront();
393
394 if (gpuDynInst->exec_mask.none()) {
395 wf->decVMemInstsIssued();
396 wf->untrackVMemInst(gpuDynInst);
397 if (isFlat()) {
398 wf->decLGKMInstsIssued();
399 wf->untrackLGKMInst(gpuDynInst);
400 }
401 return;
402 }
403
404 gpuDynInst->execUnitId = wf->execUnitId;
405 gpuDynInst->latency.init(gpuDynInst->computeUnit());
406 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
407
408 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
409
410 issueRequestHelper(gpuDynInst);
411 } // execute
412
413 void
415 {
416 initMemRead<3>(gpuDynInst);
417 } // initiateAcc
418
419 void
421 {
422 VecOperandU32 vdst0(gpuDynInst, extData.VDST);
423 VecOperandU32 vdst1(gpuDynInst, extData.VDST + 1);
424 VecOperandU32 vdst2(gpuDynInst, extData.VDST + 2);
425
426 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
427 if (gpuDynInst->exec_mask[lane] && !isFlatScratch()) {
428 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
429 gpuDynInst->d_data))[lane * 3];
430 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
431 gpuDynInst->d_data))[lane * 3 + 1];
432 vdst2[lane] = (reinterpret_cast<VecElemU32*>(
433 gpuDynInst->d_data))[lane * 3 + 2];
434 } else if (gpuDynInst->exec_mask[lane] && isFlatScratch()) {
435 // Unswizzle the data opposite of swizzleData. See swizzleData
436 // in src/arch/amdgpu/vega/insts/op_encodings.hh for details.
437 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
438 gpuDynInst->d_data))[lane];
439 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
440 gpuDynInst->d_data))[lane + NumVecElemPerVecReg];
441 vdst2[lane] = (reinterpret_cast<VecElemU32*>(
442 gpuDynInst->d_data))[lane + 2*NumVecElemPerVecReg];
443 }
444 }
445
446 vdst0.write();
447 vdst1.write();
448 vdst2.write();
449 } // completeAcc
450 // --- Inst_FLAT__FLAT_LOAD_DWORDX4 class methods ---
451
453 InFmt_FLAT *iFmt)
454 : Inst_FLAT(iFmt, "flat_load_dwordx4")
455 {
456 setFlag(MemoryRef);
457 setFlag(Load);
458 } // Inst_FLAT__FLAT_LOAD_DWORDX4
459
461 {
462 } // ~Inst_FLAT__FLAT_LOAD_DWORDX4
463
464 // --- description from .arch file ---
465 // Untyped buffer load 4 dwords.
466 void
468 {
469 Wavefront *wf = gpuDynInst->wavefront();
470
471 if (gpuDynInst->exec_mask.none()) {
472 wf->decVMemInstsIssued();
473 wf->untrackVMemInst(gpuDynInst);
474 if (isFlat()) {
475 wf->decLGKMInstsIssued();
476 wf->untrackLGKMInst(gpuDynInst);
477 }
478 return;
479 }
480
481 gpuDynInst->execUnitId = wf->execUnitId;
482 gpuDynInst->latency.init(gpuDynInst->computeUnit());
483 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
484
485 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
486
487 issueRequestHelper(gpuDynInst);
488 } // execute
489
490 void
492 {
493 initMemRead<4>(gpuDynInst);
494 } // initiateAcc
495
496 void
498 {
499 VecOperandU32 vdst0(gpuDynInst, extData.VDST);
500 VecOperandU32 vdst1(gpuDynInst, extData.VDST + 1);
501 VecOperandU32 vdst2(gpuDynInst, extData.VDST + 2);
502 VecOperandU32 vdst3(gpuDynInst, extData.VDST + 3);
503
504 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
505 if (gpuDynInst->exec_mask[lane] && !isFlatScratch()) {
506 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
507 gpuDynInst->d_data))[lane * 4];
508 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
509 gpuDynInst->d_data))[lane * 4 + 1];
510 vdst2[lane] = (reinterpret_cast<VecElemU32*>(
511 gpuDynInst->d_data))[lane * 4 + 2];
512 vdst3[lane] = (reinterpret_cast<VecElemU32*>(
513 gpuDynInst->d_data))[lane * 4 + 3];
514 } else if (gpuDynInst->exec_mask[lane] && isFlatScratch()) {
515 // Unswizzle the data opposite of swizzleData. See swizzleData
516 // in src/arch/amdgpu/vega/insts/op_encodings.hh for details.
517 vdst0[lane] = (reinterpret_cast<VecElemU32*>(
518 gpuDynInst->d_data))[lane];
519 vdst1[lane] = (reinterpret_cast<VecElemU32*>(
520 gpuDynInst->d_data))[lane + NumVecElemPerVecReg];
521 vdst2[lane] = (reinterpret_cast<VecElemU32*>(
522 gpuDynInst->d_data))[lane + 2*NumVecElemPerVecReg];
523 vdst3[lane] = (reinterpret_cast<VecElemU32*>(
524 gpuDynInst->d_data))[lane + 3*NumVecElemPerVecReg];
525 }
526 }
527
528 vdst0.write();
529 vdst1.write();
530 vdst2.write();
531 vdst3.write();
532 } // completeAcc
533 // --- Inst_FLAT__FLAT_STORE_BYTE class methods ---
534
536 : Inst_FLAT(iFmt, "flat_store_byte")
537 {
538 setFlag(MemoryRef);
539 setFlag(Store);
540 } // Inst_FLAT__FLAT_STORE_BYTE
541
543 {
544 } // ~Inst_FLAT__FLAT_STORE_BYTE
545
546 // --- description from .arch file ---
547 // Untyped buffer store byte.
548 void
550 {
551 Wavefront *wf = gpuDynInst->wavefront();
552
553 if (gpuDynInst->exec_mask.none()) {
554 wf->decVMemInstsIssued();
555 wf->untrackVMemInst(gpuDynInst);
556 if (isFlat()) {
557 wf->decLGKMInstsIssued();
558 wf->untrackLGKMInst(gpuDynInst);
559 }
560 wf->decExpInstsIssued();
561 wf->untrackExpInst(gpuDynInst);
562 return;
563 }
564
565 gpuDynInst->execUnitId = wf->execUnitId;
566 gpuDynInst->latency.init(gpuDynInst->computeUnit());
567 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
568
569 ConstVecOperandU8 data(gpuDynInst, extData.DATA);
570
571 data.read();
572
573 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
574
575 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
576 if (gpuDynInst->exec_mask[lane]) {
577 (reinterpret_cast<VecElemU8*>(gpuDynInst->d_data))[lane]
578 = data[lane];
579 }
580 }
581
582 issueRequestHelper(gpuDynInst);
583 } // execute
584
585 void
587 {
588 initMemWrite<VecElemU8>(gpuDynInst);
589 } // initiateAcc
590
591 void
593 {
594 } // execute
595 // --- Inst_FLAT__FLAT_STORE_SHORT class methods ---
596
598 : Inst_FLAT(iFmt, "flat_store_short")
599 {
600 setFlag(MemoryRef);
601 setFlag(Store);
602 } // Inst_FLAT__FLAT_STORE_SHORT
603
605 {
606 } // ~Inst_FLAT__FLAT_STORE_SHORT
607
608 // --- description from .arch file ---
609 // Untyped buffer store short.
610 void
612 {
613 Wavefront *wf = gpuDynInst->wavefront();
614
615 if (gpuDynInst->exec_mask.none()) {
616 wf->decVMemInstsIssued();
617 wf->untrackVMemInst(gpuDynInst);
618 if (isFlat()) {
619 wf->decLGKMInstsIssued();
620 wf->untrackLGKMInst(gpuDynInst);
621 }
622 wf->decExpInstsIssued();
623 wf->untrackExpInst(gpuDynInst);
624 return;
625 }
626
627 gpuDynInst->execUnitId = wf->execUnitId;
628 gpuDynInst->latency.init(gpuDynInst->computeUnit());
629 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
630
631 ConstVecOperandU16 data(gpuDynInst, extData.DATA);
632
633 data.read();
634
635 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
636
637 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
638 if (gpuDynInst->exec_mask[lane]) {
639 (reinterpret_cast<VecElemU16*>(gpuDynInst->d_data))[lane]
640 = data[lane];
641 }
642 }
643
644 issueRequestHelper(gpuDynInst);
645 } // execute
646
647 void
649 {
650 initMemWrite<VecElemU16>(gpuDynInst);
651 } // initiateAcc
652
653 void
655 {
656 } // completeAcc
657 // --- Inst_FLAT__FLAT_STORE_SHORT_D16_HI class methods ---
658
661 : Inst_FLAT(iFmt, "flat_store_short_d16_hi")
662 {
663 setFlag(MemoryRef);
664 setFlag(Store);
665 } // Inst_FLAT__FLAT_STORE_SHORT_D16_HI
666
668 {
669 } // ~Inst_FLAT__FLAT_STORE_SHORT_D16_HI
670
671 // --- description from .arch file ---
672 // Untyped buffer store short.
673 void
675 {
676 Wavefront *wf = gpuDynInst->wavefront();
677
678 if (gpuDynInst->exec_mask.none()) {
679 wf->decVMemInstsIssued();
680 wf->untrackVMemInst(gpuDynInst);
681 if (isFlat()) {
682 wf->decLGKMInstsIssued();
683 wf->untrackLGKMInst(gpuDynInst);
684 }
685 wf->decExpInstsIssued();
686 wf->untrackExpInst(gpuDynInst);
687 return;
688 }
689
690 gpuDynInst->execUnitId = wf->execUnitId;
691 gpuDynInst->latency.init(gpuDynInst->computeUnit());
692 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
693
694 ConstVecOperandU32 data(gpuDynInst, extData.DATA);
695
696 data.read();
697
698 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
699
700 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
701 if (gpuDynInst->exec_mask[lane]) {
702 (reinterpret_cast<VecElemU16*>(gpuDynInst->d_data))[lane]
703 = (data[lane] >> 16);
704 }
705 }
706
707 issueRequestHelper(gpuDynInst);
708 } // execute
709
710 void
712 {
713 initMemWrite<VecElemU16>(gpuDynInst);
714 } // initiateAcc
715
716 void
720 // --- Inst_FLAT__FLAT_STORE_DWORD class methods ---
721
723 : Inst_FLAT(iFmt, "flat_store_dword")
724 {
725 setFlag(MemoryRef);
726 setFlag(Store);
727 } // Inst_FLAT__FLAT_STORE_DWORD
728
730 {
731 } // ~Inst_FLAT__FLAT_STORE_DWORD
732
733 // --- description from .arch file ---
734 // Untyped buffer store dword.
735 void
737 {
738 Wavefront *wf = gpuDynInst->wavefront();
739
740 if (gpuDynInst->exec_mask.none()) {
741 wf->decVMemInstsIssued();
742 wf->untrackVMemInst(gpuDynInst);
743 if (isFlat()) {
744 wf->decLGKMInstsIssued();
745 wf->untrackLGKMInst(gpuDynInst);
746 }
747 wf->decExpInstsIssued();
748 wf->untrackExpInst(gpuDynInst);
749 return;
750 }
751
752 gpuDynInst->execUnitId = wf->execUnitId;
753 gpuDynInst->latency.init(gpuDynInst->computeUnit());
754 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
755
756 ConstVecOperandU32 data(gpuDynInst, extData.DATA);
757
758 data.read();
759
760 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
761
762 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
763 if (gpuDynInst->exec_mask[lane]) {
764 (reinterpret_cast<VecElemU32*>(gpuDynInst->d_data))[lane]
765 = data[lane];
766 }
767 }
768
769 issueRequestHelper(gpuDynInst);
770 } // execute
771
772 void
774 {
775 initMemWrite<VecElemU32>(gpuDynInst);
776 } // initiateAcc
777
778 void
780 {
781 } // completeAcc
782 // --- Inst_FLAT__FLAT_STORE_DWORDX2 class methods ---
783
785 InFmt_FLAT *iFmt)
786 : Inst_FLAT(iFmt, "flat_store_dwordx2")
787 {
788 setFlag(MemoryRef);
789 setFlag(Store);
790 } // Inst_FLAT__FLAT_STORE_DWORDX2
791
793 {
794 } // ~Inst_FLAT__FLAT_STORE_DWORDX2
795
796 // --- description from .arch file ---
797 // Untyped buffer store 2 dwords.
798 void
800 {
801 Wavefront *wf = gpuDynInst->wavefront();
802
803 if (gpuDynInst->exec_mask.none()) {
804 wf->decVMemInstsIssued();
805 wf->untrackVMemInst(gpuDynInst);
806 if (isFlat()) {
807 wf->decLGKMInstsIssued();
808 wf->untrackLGKMInst(gpuDynInst);
809 }
810 wf->decExpInstsIssued();
811 wf->untrackExpInst(gpuDynInst);
812 return;
813 }
814
815 gpuDynInst->execUnitId = wf->execUnitId;
816 gpuDynInst->latency.init(gpuDynInst->computeUnit());
817 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
818
819 ConstVecOperandU64 data(gpuDynInst, extData.DATA);
820
821 data.read();
822
823 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
824
825 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
826 if (gpuDynInst->exec_mask[lane]) {
827 (reinterpret_cast<VecElemU64*>(gpuDynInst->d_data))[lane]
828 = data[lane];
829 }
830 }
831
832 issueRequestHelper(gpuDynInst);
833 } // execute
834
835 void
837 {
838 initMemWrite<2>(gpuDynInst);
839 } // initiateAcc
840
841 void
843 {
844 } // completeAcc
845 // --- Inst_FLAT__FLAT_STORE_DWORDX3 class methods ---
846
848 InFmt_FLAT *iFmt)
849 : Inst_FLAT(iFmt, "flat_store_dwordx3")
850 {
851 setFlag(MemoryRef);
852 setFlag(Store);
853 } // Inst_FLAT__FLAT_STORE_DWORDX3
854
856 {
857 } // ~Inst_FLAT__FLAT_STORE_DWORDX3
858
859 // --- description from .arch file ---
860 // Untyped buffer store 3 dwords.
861 void
863 {
864 Wavefront *wf = gpuDynInst->wavefront();
865
866 if (gpuDynInst->exec_mask.none()) {
867 wf->decVMemInstsIssued();
868 wf->untrackVMemInst(gpuDynInst);
869 if (isFlat()) {
870 wf->decLGKMInstsIssued();
871 wf->untrackLGKMInst(gpuDynInst);
872 }
873 wf->decExpInstsIssued();
874 wf->untrackExpInst(gpuDynInst);
875 return;
876 }
877
878 gpuDynInst->execUnitId = wf->execUnitId;
879 gpuDynInst->latency.init(gpuDynInst->computeUnit());
880 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
881
882 ConstVecOperandU32 data0(gpuDynInst, extData.DATA);
883 ConstVecOperandU32 data1(gpuDynInst, extData.DATA + 1);
884 ConstVecOperandU32 data2(gpuDynInst, extData.DATA + 2);
885
886 data0.read();
887 data1.read();
888 data2.read();
889
890 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
891
892 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
893 if (gpuDynInst->exec_mask[lane]) {
894 (reinterpret_cast<VecElemU32*>(
895 gpuDynInst->d_data))[lane * 3] = data0[lane];
896 (reinterpret_cast<VecElemU32*>(
897 gpuDynInst->d_data))[lane * 3 + 1] = data1[lane];
898 (reinterpret_cast<VecElemU32*>(
899 gpuDynInst->d_data))[lane * 3 + 2] = data2[lane];
900 }
901 }
902
903 issueRequestHelper(gpuDynInst);
904 } // execute
905
906 void
908 {
909 initMemWrite<3>(gpuDynInst);
910 } // initiateAcc
911
912 void
914 {
915 } // completeAcc
916 // --- Inst_FLAT__FLAT_STORE_DWORDX4 class methods ---
917
919 InFmt_FLAT *iFmt)
920 : Inst_FLAT(iFmt, "flat_store_dwordx4")
921 {
922 setFlag(MemoryRef);
923 setFlag(Store);
924 } // Inst_FLAT__FLAT_STORE_DWORDX4
925
927 {
928 } // ~Inst_FLAT__FLAT_STORE_DWORDX4
929
930 // --- description from .arch file ---
931 // Untyped buffer store 4 dwords.
932 void
934 {
935 Wavefront *wf = gpuDynInst->wavefront();
936
937 if (gpuDynInst->exec_mask.none()) {
938 wf->decVMemInstsIssued();
939 wf->untrackVMemInst(gpuDynInst);
940 if (isFlat()) {
941 wf->decLGKMInstsIssued();
942 wf->untrackLGKMInst(gpuDynInst);
943 }
944 wf->decExpInstsIssued();
945 wf->untrackExpInst(gpuDynInst);
946 return;
947 }
948
949 gpuDynInst->execUnitId = wf->execUnitId;
950 gpuDynInst->latency.init(gpuDynInst->computeUnit());
951 gpuDynInst->latency.set(gpuDynInst->computeUnit()->clockPeriod());
952
953 ConstVecOperandU32 data0(gpuDynInst, extData.DATA);
954 ConstVecOperandU32 data1(gpuDynInst, extData.DATA + 1);
955 ConstVecOperandU32 data2(gpuDynInst, extData.DATA + 2);
956 ConstVecOperandU32 data3(gpuDynInst, extData.DATA + 3);
957
958 data0.read();
959 data1.read();
960 data2.read();
961 data3.read();
962
963 calcAddr(gpuDynInst, extData.ADDR, extData.SADDR, instData.OFFSET);
964
965 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
966 if (gpuDynInst->exec_mask[lane]) {
967 (reinterpret_cast<VecElemU32*>(
968 gpuDynInst->d_data))[lane * 4] = data0[lane];
969 (reinterpret_cast<VecElemU32*>(
970 gpuDynInst->d_data))[lane * 4 + 1] = data1[lane];
971 (reinterpret_cast<VecElemU32*>(
972 gpuDynInst->d_data))[lane * 4 + 2] = data2[lane];
973 (reinterpret_cast<VecElemU32*>(
974 gpuDynInst->d_data))[lane * 4 + 3] = data3[lane];
975 }
976 }
977
978 issueRequestHelper(gpuDynInst);
979 } // execute
980
981 void
983 {
984 initMemWrite<4>(gpuDynInst);
985 } // initiateAcc
986
987 void
989 {
990 } // completeAcc
991 // --- Inst_FLAT__FLAT_ATOMIC_SWAP class methods ---
992
994 : Inst_FLAT(iFmt, "flat_atomic_swap")
995 {
996 setFlag(AtomicExch);
997 if (instData.GLC) {
998 setFlag(AtomicReturn);
999 } else {
1000 setFlag(AtomicNoReturn);
1001 }
1002 setFlag(MemoryRef);
1003 } // Inst_FLAT__FLAT_ATOMIC_SWAP
1004
1006 {
1007 } // ~Inst_FLAT__FLAT_ATOMIC_SWAP
1008
1009 // --- description from .arch file ---
1010 // 32b:
1011 // tmp = MEM[ADDR];
1012 // MEM[ADDR] = DATA;
1013 // RETURN_DATA = tmp.
1014 void
1019
1020 void
1022 {
1023 initAtomicAccess<VecElemU32>(gpuDynInst);
1024 } // initiateAcc
1025
1026 void
1031
1032 // --- Inst_FLAT__FLAT_ATOMIC_CMPSWAP class methods ---
1033
1034 Inst_FLAT__FLAT_ATOMIC_CMPSWAP
1035 ::Inst_FLAT__FLAT_ATOMIC_CMPSWAP(InFmt_FLAT *iFmt)
1036 : Inst_FLAT(iFmt, "flat_atomic_cmpswap")
1037 {
1038 setFlag(AtomicCAS);
1039 if (instData.GLC) {
1040 setFlag(AtomicReturn);
1041 } else {
1042 setFlag(AtomicNoReturn);
1043 }
1044 setFlag(MemoryRef);
1045 } // Inst_FLAT__FLAT_ATOMIC_CMPSWAP
1046
1048 {
1049 } // ~Inst_FLAT__FLAT_ATOMIC_CMPSWAP
1050
1051 // --- description from .arch file ---
1052 // 32b:
1053 // tmp = MEM[ADDR];
1054 // src = DATA[0];
1055 // cmp = DATA[1];
1056 // MEM[ADDR] = (tmp == cmp) ? src : tmp;
1057 // RETURN_DATA[0] = tmp.
1058 void
1063
1064 void
1066 {
1067 initAtomicAccess<VecElemU32>(gpuDynInst);
1068 } // initiateAcc
1069
1070 void
1075 // --- Inst_FLAT__FLAT_ATOMIC_ADD class methods ---
1076
1078 : Inst_FLAT(iFmt, "flat_atomic_add")
1079 {
1080 setFlag(AtomicAdd);
1081 if (instData.GLC) {
1082 setFlag(AtomicReturn);
1083 } else {
1084 setFlag(AtomicNoReturn);
1085 }
1086 setFlag(MemoryRef);
1087 } // Inst_FLAT__FLAT_ATOMIC_ADD
1088
1090 {
1091 } // ~Inst_FLAT__FLAT_ATOMIC_ADD
1092
1093 // --- description from .arch file ---
1094 // 32b:
1095 // tmp = MEM[ADDR];
1096 // MEM[ADDR] += DATA;
1097 // RETURN_DATA = tmp.
1098 void
1103
1104 void
1106 {
1107 initAtomicAccess<VecElemU32>(gpuDynInst);
1108 } // initiateAcc
1109
1110 void
1115 // --- Inst_FLAT__FLAT_ATOMIC_SUB class methods ---
1116
1118 : Inst_FLAT(iFmt, "flat_atomic_sub")
1119 {
1120 setFlag(AtomicSub);
1121 if (instData.GLC) {
1122 setFlag(AtomicReturn);
1123 } else {
1124 setFlag(AtomicNoReturn);
1125 }
1126 setFlag(MemoryRef);
1127 } // Inst_FLAT__FLAT_ATOMIC_SUB
1128
1130 {
1131 } // ~Inst_FLAT__FLAT_ATOMIC_SUB
1132
1133 // --- description from .arch file ---
1134 // 32b:
1135 // tmp = MEM[ADDR];
1136 // MEM[ADDR] -= DATA;
1137 // RETURN_DATA = tmp.
1138 void
1143
1144 void
1146 {
1147 initAtomicAccess<VecElemU32>(gpuDynInst);
1148 } // initiateAcc
1149
1150 void
1155 // --- Inst_FLAT__FLAT_ATOMIC_SMIN class methods ---
1156
1158 : Inst_FLAT(iFmt, "flat_atomic_smin")
1159 {
1160 setFlag(AtomicMin);
1161 if (instData.GLC) {
1162 setFlag(AtomicReturn);
1163 } else {
1164 setFlag(AtomicNoReturn);
1165 }
1166 setFlag(MemoryRef);
1167 } // Inst_FLAT__FLAT_ATOMIC_SMIN
1168
1170 {
1171 } // ~Inst_FLAT__FLAT_ATOMIC_SMIN
1172
1173 // --- description from .arch file ---
1174 // 32b:
1175 // tmp = MEM[ADDR];
1176 // MEM[ADDR] = (DATA < tmp) ? DATA : tmp (signed compare);
1177 // RETURN_DATA = tmp.
1178 void
1183
1184 void
1186 {
1187 initAtomicAccess<VecElemI32>(gpuDynInst);
1188 } // initiateAcc
1189
1190 void
1195 // --- Inst_FLAT__FLAT_ATOMIC_UMIN class methods ---
1196
1198 : Inst_FLAT(iFmt, "flat_atomic_umin")
1199 {
1200 setFlag(AtomicMin);
1201 if (instData.GLC) {
1202 setFlag(AtomicReturn);
1203 } else {
1204 setFlag(AtomicNoReturn);
1205 }
1206 setFlag(MemoryRef);
1207 } // Inst_FLAT__FLAT_ATOMIC_UMIN
1208
1210 {
1211 } // ~Inst_FLAT__FLAT_ATOMIC_UMIN
1212
1213 // --- description from .arch file ---
1214 // 32b:
1215 // tmp = MEM[ADDR];
1216 // MEM[ADDR] = (DATA < tmp) ? DATA : tmp (unsigned compare);
1217 // RETURN_DATA = tmp.
1218 void
1223
1224 void
1226 {
1227 initAtomicAccess<VecElemU32>(gpuDynInst);
1228 } // initiateAcc
1229
1230 void
1235 // --- Inst_FLAT__FLAT_ATOMIC_SMAX class methods ---
1236
1238 : Inst_FLAT(iFmt, "flat_atomic_smax")
1239 {
1240 setFlag(AtomicMax);
1241 if (instData.GLC) {
1242 setFlag(AtomicReturn);
1243 } else {
1244 setFlag(AtomicNoReturn);
1245 }
1246 setFlag(MemoryRef);
1247 } // Inst_FLAT__FLAT_ATOMIC_SMAX
1248
1250 {
1251 } // ~Inst_FLAT__FLAT_ATOMIC_SMAX
1252
1253 // --- description from .arch file ---
1254 // 32b:
1255 // tmp = MEM[ADDR];
1256 // MEM[ADDR] = (DATA > tmp) ? DATA : tmp (signed compare);
1257 // RETURN_DATA = tmp.
1258 void
1263
1264 void
1266 {
1267 initAtomicAccess<VecElemI32>(gpuDynInst);
1268 } // initiateAcc
1269
1270 void
1275 // --- Inst_FLAT__FLAT_ATOMIC_UMAX class methods ---
1276
1278 : Inst_FLAT(iFmt, "flat_atomic_umax")
1279 {
1280 setFlag(AtomicMax);
1281 if (instData.GLC) {
1282 setFlag(AtomicReturn);
1283 } else {
1284 setFlag(AtomicNoReturn);
1285 }
1286 setFlag(MemoryRef);
1287 } // Inst_FLAT__FLAT_ATOMIC_UMAX
1288
1290 {
1291 } // ~Inst_FLAT__FLAT_ATOMIC_UMAX
1292
1293 // --- description from .arch file ---
1294 // 32b:
1295 // tmp = MEM[ADDR];
1296 // MEM[ADDR] = (DATA > tmp) ? DATA : tmp (unsigned compare);
1297 // RETURN_DATA = tmp.
1298 void
1303
1304 void
1306 {
1307 initAtomicAccess<VecElemU32>(gpuDynInst);
1308 } // initiateAcc
1309
1310 void
1315 // --- Inst_FLAT__FLAT_ATOMIC_AND class methods ---
1316
1318 : Inst_FLAT(iFmt, "flat_atomic_and")
1319 {
1320 setFlag(AtomicAnd);
1321 if (instData.GLC) {
1322 setFlag(AtomicReturn);
1323 } else {
1324 setFlag(AtomicNoReturn);
1325 }
1326 setFlag(MemoryRef);
1327 } // Inst_FLAT__FLAT_ATOMIC_AND
1328
1330 {
1331 } // ~Inst_FLAT__FLAT_ATOMIC_AND
1332
1333 // --- description from .arch file ---
1334 // 32b:
1335 // tmp = MEM[ADDR];
1336 // MEM[ADDR] &= DATA;
1337 // RETURN_DATA = tmp.
1338 void
1343
1344 void
1346 {
1347 initAtomicAccess<VecElemU32>(gpuDynInst);
1348 } // initiateAcc
1349
1350 void
1355 // --- Inst_FLAT__FLAT_ATOMIC_OR class methods ---
1356
1358 : Inst_FLAT(iFmt, "flat_atomic_or")
1359 {
1360 setFlag(AtomicOr);
1361 if (instData.GLC) {
1362 setFlag(AtomicReturn);
1363 } else {
1364 setFlag(AtomicNoReturn);
1365 }
1366 setFlag(MemoryRef);
1367 } // Inst_FLAT__FLAT_ATOMIC_OR
1368
1370 {
1371 } // ~Inst_FLAT__FLAT_ATOMIC_OR
1372
1373 // --- description from .arch file ---
1374 // 32b:
1375 // tmp = MEM[ADDR];
1376 // MEM[ADDR] |= DATA;
1377 // RETURN_DATA = tmp.
1378 void
1383
1384 void
1386 {
1387 initAtomicAccess<VecElemU32>(gpuDynInst);
1388 } // initiateAcc
1389
1390 void
1395
1396 // --- Inst_FLAT__FLAT_ATOMIC_XOR class methods ---
1397
1399 : Inst_FLAT(iFmt, "flat_atomic_xor")
1400 {
1401 setFlag(AtomicXor);
1402 if (instData.GLC) {
1403 setFlag(AtomicReturn);
1404 } else {
1405 setFlag(AtomicNoReturn);
1406 }
1407 setFlag(MemoryRef);
1408 } // Inst_FLAT__FLAT_ATOMIC_XOR
1409
1411 {
1412 } // ~Inst_FLAT__FLAT_ATOMIC_XOR
1413
1414 // --- description from .arch file ---
1415 // 32b:
1416 // tmp = MEM[ADDR];
1417 // MEM[ADDR] ^= DATA;
1418 // RETURN_DATA = tmp.
1419 void
1424
1425 void
1427 {
1428 initAtomicAccess<VecElemU32>(gpuDynInst);
1429 } // initiateAcc
1430
1431 void
1436 // --- Inst_FLAT__FLAT_ATOMIC_INC class methods ---
1437
1439 : Inst_FLAT(iFmt, "flat_atomic_inc")
1440 {
1441 setFlag(AtomicInc);
1442 if (instData.GLC) {
1443 setFlag(AtomicReturn);
1444 } else {
1445 setFlag(AtomicNoReturn);
1446 }
1447 setFlag(MemoryRef);
1448 } // Inst_FLAT__FLAT_ATOMIC_INC
1449
1451 {
1452 } // ~Inst_FLAT__FLAT_ATOMIC_INC
1453
1454 // --- description from .arch file ---
1455 // 32b:
1456 // tmp = MEM[ADDR];
1457 // MEM[ADDR] = (tmp >= DATA) ? 0 : tmp + 1 (unsigned compare);
1458 // RETURN_DATA = tmp.
1459 void
1464
1465 void
1467 {
1468 initAtomicAccess<VecElemU32>(gpuDynInst);
1469 } // initiateAcc
1470
1471 void
1476 // --- Inst_FLAT__FLAT_ATOMIC_DEC class methods ---
1477
1479 : Inst_FLAT(iFmt, "flat_atomic_dec")
1480 {
1481 setFlag(AtomicDec);
1482 if (instData.GLC) {
1483 setFlag(AtomicReturn);
1484 } else {
1485 setFlag(AtomicNoReturn);
1486 }
1487 setFlag(MemoryRef);
1488 } // Inst_FLAT__FLAT_ATOMIC_DEC
1489
1491 {
1492 } // ~Inst_FLAT__FLAT_ATOMIC_DEC
1493
1494 // --- description from .arch file ---
1495 // 32b:
1496 // tmp = MEM[ADDR];
1497 // MEM[ADDR] = (tmp == 0 || tmp > DATA) ? DATA : tmp - 1
1498 // (unsigned compare); RETURN_DATA = tmp.
1499 void
1504
1505 void
1507 {
1508 initAtomicAccess<VecElemU32>(gpuDynInst);
1509 } // initiateAcc
1510
1511 void
1516 // --- Inst_FLAT__FLAT_ATOMIC_SWAP_X2 class methods ---
1517
1519 InFmt_FLAT *iFmt)
1520 : Inst_FLAT(iFmt, "flat_atomic_swap_x2")
1521 {
1522 setFlag(AtomicExch);
1523 if (instData.GLC) {
1524 setFlag(AtomicReturn);
1525 } else {
1526 setFlag(AtomicNoReturn);
1527 }
1528 setFlag(MemoryRef);
1529 } // Inst_FLAT__FLAT_ATOMIC_SWAP_X2
1530
1532 {
1533 } // ~Inst_FLAT__FLAT_ATOMIC_SWAP_X2
1534
1535 // --- description from .arch file ---
1536 // 64b:
1537 // tmp = MEM[ADDR];
1538 // MEM[ADDR] = DATA[0:1];
1539 // RETURN_DATA[0:1] = tmp.
1540 void
1545
1546 void
1548 {
1549 initAtomicAccess<VecElemU64>(gpuDynInst);
1550 } // initiateAcc
1551
1552 void
1557 // --- Inst_FLAT__FLAT_ATOMIC_CMPSWAP_X2 class methods ---
1558
1560 InFmt_FLAT *iFmt)
1561 : Inst_FLAT(iFmt, "flat_atomic_cmpswap_x2")
1562 {
1563 setFlag(AtomicCAS);
1564 if (instData.GLC) {
1565 setFlag(AtomicReturn);
1566 } else {
1567 setFlag(AtomicNoReturn);
1568 }
1569 setFlag(MemoryRef);
1570 } // Inst_FLAT__FLAT_ATOMIC_CMPSWAP_X2
1571
1573 {
1574 } // ~Inst_FLAT__FLAT_ATOMIC_CMPSWAP_X2
1575
1576 // --- description from .arch file ---
1577 // 64b:
1578 // tmp = MEM[ADDR];
1579 // src = DATA[0:1];
1580 // cmp = DATA[2:3];
1581 // MEM[ADDR] = (tmp == cmp) ? src : tmp;
1582 // RETURN_DATA[0:1] = tmp.
1583 void
1588
1589 void
1591 {
1592 initAtomicAccess<VecElemU64>(gpuDynInst);
1593 } // initiateAcc
1594
1595 void
1600 // --- Inst_FLAT__FLAT_ATOMIC_ADD_X2 class methods ---
1601
1603 InFmt_FLAT *iFmt)
1604 : Inst_FLAT(iFmt, "flat_atomic_add_x2")
1605 {
1606 setFlag(AtomicAdd);
1607 if (instData.GLC) {
1608 setFlag(AtomicReturn);
1609 } else {
1610 setFlag(AtomicNoReturn);
1611 }
1612 setFlag(MemoryRef);
1613 } // Inst_FLAT__FLAT_ATOMIC_ADD_X2
1614
1616 {
1617 } // ~Inst_FLAT__FLAT_ATOMIC_ADD_X2
1618
1619 // --- description from .arch file ---
1620 // 64b:
1621 // tmp = MEM[ADDR];
1622 // MEM[ADDR] += DATA[0:1];
1623 // RETURN_DATA[0:1] = tmp.
1624 void
1629
1630 void
1632 {
1633 initAtomicAccess<VecElemU64>(gpuDynInst);
1634 } // initiateAcc
1635
1636 void
1641 // --- Inst_FLAT__FLAT_ATOMIC_SUB_X2 class methods ---
1642
1644 InFmt_FLAT *iFmt)
1645 : Inst_FLAT(iFmt, "flat_atomic_sub_x2")
1646 {
1647 setFlag(AtomicSub);
1648 if (instData.GLC) {
1649 setFlag(AtomicReturn);
1650 } else {
1651 setFlag(AtomicNoReturn);
1652 }
1653 setFlag(MemoryRef);
1654 } // Inst_FLAT__FLAT_ATOMIC_SUB_X2
1655
1657 {
1658 } // ~Inst_FLAT__FLAT_ATOMIC_SUB_X2
1659
1660 // --- description from .arch file ---
1661 // 64b:
1662 // tmp = MEM[ADDR];
1663 // MEM[ADDR] -= DATA[0:1];
1664 // RETURN_DATA[0:1] = tmp.
1665 void
1670
1671 void
1673 {
1674 initAtomicAccess<VecElemU64>(gpuDynInst);
1675 } // initiateAcc
1676
1677 void
1682 // --- Inst_FLAT__FLAT_ATOMIC_SMIN_X2 class methods ---
1683
1685 InFmt_FLAT *iFmt)
1686 : Inst_FLAT(iFmt, "flat_atomic_smin_x2")
1687 {
1688 setFlag(AtomicMin);
1689 if (instData.GLC) {
1690 setFlag(AtomicReturn);
1691 } else {
1692 setFlag(AtomicNoReturn);
1693 }
1694 setFlag(MemoryRef);
1695 } // Inst_FLAT__FLAT_ATOMIC_SMIN_X2
1696
1698 {
1699 } // ~Inst_FLAT__FLAT_ATOMIC_SMIN_X2
1700
1701 // --- description from .arch file ---
1702 // 64b:
1703 // tmp = MEM[ADDR];
1704 // MEM[ADDR] -= (DATA[0:1] < tmp) ? DATA[0:1] : tmp (signed compare);
1705 // RETURN_DATA[0:1] = tmp.
1706 void
1711
1712 void
1714 {
1715 initAtomicAccess<VecElemI64>(gpuDynInst);
1716 } // initiateAcc
1717
1718 void
1723 // --- Inst_FLAT__FLAT_ATOMIC_UMIN_X2 class methods ---
1724
1726 InFmt_FLAT *iFmt)
1727 : Inst_FLAT(iFmt, "flat_atomic_umin_x2")
1728 {
1729 setFlag(AtomicMin);
1730 if (instData.GLC) {
1731 setFlag(AtomicReturn);
1732 } else {
1733 setFlag(AtomicNoReturn);
1734 }
1735 setFlag(MemoryRef);
1736 } // Inst_FLAT__FLAT_ATOMIC_UMIN_X2
1737
1739 {
1740 } // ~Inst_FLAT__FLAT_ATOMIC_UMIN_X2
1741
1742 // --- description from .arch file ---
1743 // 64b:
1744 // tmp = MEM[ADDR];
1745 // MEM[ADDR] -= (DATA[0:1] < tmp) ? DATA[0:1] : tmp (unsigned compare);
1746 // RETURN_DATA[0:1] = tmp.
1747 void
1752
1753 void
1755 {
1756 initAtomicAccess<VecElemU64>(gpuDynInst);
1757 } // initiateAcc
1758
1759 void
1764 // --- Inst_FLAT__FLAT_ATOMIC_SMAX_X2 class methods ---
1765
1767 InFmt_FLAT *iFmt)
1768 : Inst_FLAT(iFmt, "flat_atomic_smax_x2")
1769 {
1770 setFlag(AtomicMax);
1771 if (instData.GLC) {
1772 setFlag(AtomicReturn);
1773 } else {
1774 setFlag(AtomicNoReturn);
1775 }
1776 setFlag(MemoryRef);
1777 } // Inst_FLAT__FLAT_ATOMIC_SMAX_X2
1778
1780 {
1781 } // ~Inst_FLAT__FLAT_ATOMIC_SMAX_X2
1782
1783 // --- description from .arch file ---
1784 // 64b:
1785 // tmp = MEM[ADDR];
1786 // MEM[ADDR] -= (DATA[0:1] > tmp) ? DATA[0:1] : tmp (signed compare);
1787 // RETURN_DATA[0:1] = tmp.
1788 void
1793
1794 void
1796 {
1797 initAtomicAccess<VecElemI64>(gpuDynInst);
1798 } // initiateAcc
1799
1800 void
1805 // --- Inst_FLAT__FLAT_ATOMIC_UMAX_X2 class methods ---
1806
1808 InFmt_FLAT *iFmt)
1809 : Inst_FLAT(iFmt, "flat_atomic_umax_x2")
1810 {
1811 setFlag(AtomicMax);
1812 if (instData.GLC) {
1813 setFlag(AtomicReturn);
1814 } else {
1815 setFlag(AtomicNoReturn);
1816 }
1817 setFlag(MemoryRef);
1818 } // Inst_FLAT__FLAT_ATOMIC_UMAX_X2
1819
1821 {
1822 } // ~Inst_FLAT__FLAT_ATOMIC_UMAX_X2
1823
1824 // --- description from .arch file ---
1825 // 64b:
1826 // tmp = MEM[ADDR];
1827 // MEM[ADDR] -= (DATA[0:1] > tmp) ? DATA[0:1] : tmp (unsigned compare);
1828 // RETURN_DATA[0:1] = tmp.
1829 void
1834
1835 void
1837 {
1838 initAtomicAccess<VecElemU64>(gpuDynInst);
1839 } // initiateAcc
1840
1841 void
1846 // --- Inst_FLAT__FLAT_ATOMIC_AND_X2 class methods ---
1847
1849 InFmt_FLAT *iFmt)
1850 : Inst_FLAT(iFmt, "flat_atomic_and_x2")
1851 {
1852 setFlag(AtomicAnd);
1853 if (instData.GLC) {
1854 setFlag(AtomicReturn);
1855 } else {
1856 setFlag(AtomicNoReturn);
1857 }
1858 setFlag(MemoryRef);
1859 } // Inst_FLAT__FLAT_ATOMIC_AND_X2
1860
1862 {
1863 } // ~Inst_FLAT__FLAT_ATOMIC_AND_X2
1864
1865 // --- description from .arch file ---
1866 // 64b:
1867 // tmp = MEM[ADDR];
1868 // MEM[ADDR] &= DATA[0:1];
1869 // RETURN_DATA[0:1] = tmp.
1870 void
1875
1876 void
1878 {
1879 initAtomicAccess<VecElemU64>(gpuDynInst);
1880 } // initiateAcc
1881
1882 void
1887 // --- Inst_FLAT__FLAT_ATOMIC_OR_X2 class methods ---
1888
1890 InFmt_FLAT *iFmt)
1891 : Inst_FLAT(iFmt, "flat_atomic_or_x2")
1892 {
1893 setFlag(AtomicOr);
1894 if (instData.GLC) {
1895 setFlag(AtomicReturn);
1896 } else {
1897 setFlag(AtomicNoReturn);
1898 }
1899 setFlag(MemoryRef);
1900 } // Inst_FLAT__FLAT_ATOMIC_OR_X2
1901
1903 {
1904 } // ~Inst_FLAT__FLAT_ATOMIC_OR_X2
1905
1906 // --- description from .arch file ---
1907 // 64b:
1908 // tmp = MEM[ADDR];
1909 // MEM[ADDR] |= DATA[0:1];
1910 // RETURN_DATA[0:1] = tmp.
1911 void
1916
1917 void
1919 {
1920 initAtomicAccess<VecElemU64>(gpuDynInst);
1921 } // initiateAcc
1922
1923 void
1928 // --- Inst_FLAT__FLAT_ATOMIC_XOR_X2 class methods ---
1929
1931 InFmt_FLAT *iFmt)
1932 : Inst_FLAT(iFmt, "flat_atomic_xor_x2")
1933 {
1934 setFlag(AtomicXor);
1935 if (instData.GLC) {
1936 setFlag(AtomicReturn);
1937 } else {
1938 setFlag(AtomicNoReturn);
1939 }
1940 setFlag(MemoryRef);
1941 } // Inst_FLAT__FLAT_ATOMIC_XOR_X2
1942
1944 {
1945 } // ~Inst_FLAT__FLAT_ATOMIC_XOR_X2
1946
1947 // --- description from .arch file ---
1948 // 64b:
1949 // tmp = MEM[ADDR];
1950 // MEM[ADDR] ^= DATA[0:1];
1951 // RETURN_DATA[0:1] = tmp.
1952 void
1957
1958 void
1960 {
1961 initAtomicAccess<VecElemU64>(gpuDynInst);
1962 } // initiateAcc
1963
1964 void
1969 // --- Inst_FLAT__FLAT_ATOMIC_INC_X2 class methods ---
1970
1972 InFmt_FLAT *iFmt)
1973 : Inst_FLAT(iFmt, "flat_atomic_inc_x2")
1974 {
1975 setFlag(AtomicInc);
1976 if (instData.GLC) {
1977 setFlag(AtomicReturn);
1978 } else {
1979 setFlag(AtomicNoReturn);
1980 }
1981 setFlag(MemoryRef);
1982 } // Inst_FLAT__FLAT_ATOMIC_INC_X2
1983
1985 {
1986 } // ~Inst_FLAT__FLAT_ATOMIC_INC_X2
1987
1988 // --- description from .arch file ---
1989 // 64b:
1990 // tmp = MEM[ADDR];
1991 // MEM[ADDR] = (tmp >= DATA[0:1]) ? 0 : tmp + 1 (unsigned compare);
1992 // RETURN_DATA[0:1] = tmp.
1993 void
1998
1999 void
2001 {
2002 initAtomicAccess<VecElemU64>(gpuDynInst);
2003 } // initiateAcc
2004
2005 void
2010 // --- Inst_FLAT__FLAT_ATOMIC_DEC_X2 class methods ---
2011
2013 InFmt_FLAT *iFmt)
2014 : Inst_FLAT(iFmt, "flat_atomic_dec_x2")
2015 {
2016 setFlag(AtomicDec);
2017 if (instData.GLC) {
2018 setFlag(AtomicReturn);
2019 } else {
2020 setFlag(AtomicNoReturn);
2021 }
2022 setFlag(MemoryRef);
2023 } // Inst_FLAT__FLAT_ATOMIC_DEC_X2
2024
2026 {
2027 } // ~Inst_FLAT__FLAT_ATOMIC_DEC_X2
2028
2029 // --- description from .arch file ---
2030 // 64b:
2031 // tmp = MEM[ADDR];
2032 // MEM[ADDR] = (tmp == 0 || tmp > DATA[0:1]) ? DATA[0:1] : tmp - 1
2033 // (unsigned compare);
2034 // RETURN_DATA[0:1] = tmp.
2035 void
2040
2041 void
2043 {
2044 initAtomicAccess<VecElemU64>(gpuDynInst);
2045 } // initiateAcc
2046
2047 void
2052 // --- Inst_FLAT__FLAT_ATOMIC_ADD_F32 class methods ---
2053
2055 InFmt_FLAT *iFmt)
2056 : Inst_FLAT(iFmt, "flat_atomic_add_f32")
2057 {
2058 setFlag(AtomicAdd);
2059 if (instData.GLC) {
2060 setFlag(AtomicReturn);
2061 } else {
2062 setFlag(AtomicNoReturn);
2063 }
2064 setFlag(MemoryRef);
2065 } // Inst_FLAT__FLAT_ATOMIC_ADD_F32
2066
2068 {
2069 } // ~Inst_FLAT__FLAT_ATOMIC_ADD_F32
2070
2071 void
2076
2077 void
2079 {
2080 initAtomicAccess<VecElemF32>(gpuDynInst);
2081 } // initiateAcc
2082
2083 void
2088 // --- Inst_FLAT__FLAT_ATOMIC_PK_ADD_F16 class methods ---
2089
2091 InFmt_FLAT *iFmt)
2092 : Inst_FLAT(iFmt, "flat_atomic_pk_add_f16")
2093 {
2094 setFlag(AtomicAdd);
2095 if (instData.GLC) {
2096 setFlag(AtomicReturn);
2097 } else {
2098 setFlag(AtomicNoReturn);
2099 }
2100 setFlag(MemoryRef);
2101 } // Inst_FLAT__FLAT_ATOMIC_PK_ADD_F16
2102
2104 {
2105 } // ~Inst_FLAT__FLAT_ATOMIC_PK_ADD_F16
2106
2107 void
2112
2113 void
2115 {
2116 } // initiateAcc
2117
2118 void
2120 {
2121 } // completeAcc
2122 // --- Inst_FLAT__FLAT_ATOMIC_ADD_F64 class methods ---
2123
2125 InFmt_FLAT *iFmt)
2126 : Inst_FLAT(iFmt, "flat_atomic_add_f64")
2127 {
2128 setFlag(AtomicAdd);
2129 if (instData.GLC) {
2130 setFlag(AtomicReturn);
2131 } else {
2132 setFlag(AtomicNoReturn);
2133 }
2134 setFlag(MemoryRef);
2135 } // Inst_FLAT__FLAT_ATOMIC_ADD_F64
2136
2138 {
2139 } // ~Inst_FLAT__FLAT_ATOMIC_ADD_F64
2140
2141 void
2146
2147 void
2149 {
2150 initAtomicAccess<VecElemF64>(gpuDynInst);
2151 } // initiateAcc
2152
2153 void
2158 // --- Inst_FLAT__FLAT_ATOMIC_MIN_F64 class methods ---
2159
2161 InFmt_FLAT *iFmt)
2162 : Inst_FLAT(iFmt, "flat_atomic_min_f64")
2163 {
2164 setFlag(AtomicMin);
2165 if (instData.GLC) {
2166 setFlag(AtomicReturn);
2167 } else {
2168 setFlag(AtomicNoReturn);
2169 }
2170 setFlag(MemoryRef);
2171 } // Inst_FLAT__FLAT_ATOMIC_MIN_F64
2172
2174 {
2175 } // ~Inst_FLAT__FLAT_ATOMIC_MIN_F64
2176
2177 void
2182
2183 void
2185 {
2186 initAtomicAccess<VecElemF64>(gpuDynInst);
2187 } // initiateAcc
2188
2189 void
2194 // --- Inst_FLAT__FLAT_ATOMIC_MAX_F64 class methods ---
2195
2197 InFmt_FLAT *iFmt)
2198 : Inst_FLAT(iFmt, "flat_atomic_max_f64")
2199 {
2200 setFlag(AtomicMax);
2201 if (instData.GLC) {
2202 setFlag(AtomicReturn);
2203 } else {
2204 setFlag(AtomicNoReturn);
2205 }
2206 setFlag(MemoryRef);
2207 } // Inst_FLAT__FLAT_ATOMIC_MAX_F64
2208
2210 {
2211 } // ~Inst_FLAT__FLAT_ATOMIC_MAX_F64
2212
2213 void
2218
2219 void
2221 {
2222 initAtomicAccess<VecElemF64>(gpuDynInst);
2223 } // initiateAcc
2224
2225 void
2230} // namespace VegaISA
2231} // namespace gem5
const char data[]
void setFlag(Flags flag)
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2084
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2078
void execute(GPUDynInstPtr) override
Definition flat.cc:2072
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2154
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2148
void execute(GPUDynInstPtr) override
Definition flat.cc:2142
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1637
void execute(GPUDynInstPtr) override
Definition flat.cc:1625
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1631
void execute(GPUDynInstPtr) override
Definition flat.cc:1099
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1111
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1105
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1877
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1883
void execute(GPUDynInstPtr) override
Definition flat.cc:1871
void execute(GPUDynInstPtr) override
Definition flat.cc:1339
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1345
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1351
void execute(GPUDynInstPtr) override
Definition flat.cc:1584
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1590
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1596
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1071
void execute(GPUDynInstPtr) override
Definition flat.cc:1059
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1065
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2048
void execute(GPUDynInstPtr) override
Definition flat.cc:2036
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2042
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1506
void execute(GPUDynInstPtr) override
Definition flat.cc:1500
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1512
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2006
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2000
void execute(GPUDynInstPtr) override
Definition flat.cc:1994
void execute(GPUDynInstPtr) override
Definition flat.cc:1460
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1466
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1472
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2220
void execute(GPUDynInstPtr) override
Definition flat.cc:2214
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2226
void execute(GPUDynInstPtr) override
Definition flat.cc:2178
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2184
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2190
void execute(GPUDynInstPtr) override
Definition flat.cc:1912
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1924
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1918
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1391
void execute(GPUDynInstPtr) override
Definition flat.cc:1379
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1385
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:2114
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:2119
void execute(GPUDynInstPtr) override
Definition flat.cc:2108
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1795
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1801
void execute(GPUDynInstPtr) override
Definition flat.cc:1789
void execute(GPUDynInstPtr) override
Definition flat.cc:1259
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1271
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1265
void execute(GPUDynInstPtr) override
Definition flat.cc:1707
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1719
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1713
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1191
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1185
void execute(GPUDynInstPtr) override
Definition flat.cc:1179
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1672
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1678
void execute(GPUDynInstPtr) override
Definition flat.cc:1666
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1151
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1145
void execute(GPUDynInstPtr) override
Definition flat.cc:1139
void execute(GPUDynInstPtr) override
Definition flat.cc:1541
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1553
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1547
void execute(GPUDynInstPtr) override
Definition flat.cc:1015
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1021
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1027
void execute(GPUDynInstPtr) override
Definition flat.cc:1830
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1836
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1842
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1305
void execute(GPUDynInstPtr) override
Definition flat.cc:1299
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1311
void execute(GPUDynInstPtr) override
Definition flat.cc:1748
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1754
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1760
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1225
void execute(GPUDynInstPtr) override
Definition flat.cc:1219
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1231
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1965
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1959
void execute(GPUDynInstPtr) override
Definition flat.cc:1953
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:1432
void execute(GPUDynInstPtr) override
Definition flat.cc:1420
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:1426
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:349
void execute(GPUDynInstPtr) override
Definition flat.cc:319
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:343
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:414
void execute(GPUDynInstPtr) override
Definition flat.cc:390
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:420
void execute(GPUDynInstPtr) override
Definition flat.cc:467
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:491
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:497
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:284
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:290
void execute(GPUDynInstPtr) override
Definition flat.cc:260
void execute(GPUDynInstPtr) override
Definition flat.cc:113
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:137
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:143
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:241
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:236
void execute(GPUDynInstPtr) override
Definition flat.cc:230
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:79
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:85
void execute(GPUDynInstPtr) override
Definition flat.cc:55
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:195
void execute(GPUDynInstPtr) override
Definition flat.cc:171
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:201
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:592
void execute(GPUDynInstPtr) override
Definition flat.cc:549
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:586
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:842
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:836
void execute(GPUDynInstPtr) override
Definition flat.cc:799
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:913
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:907
void execute(GPUDynInstPtr) override
Definition flat.cc:862
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:988
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:982
void execute(GPUDynInstPtr) override
Definition flat.cc:933
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:773
void execute(GPUDynInstPtr) override
Definition flat.cc:736
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:779
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:717
void execute(GPUDynInstPtr) override
Definition flat.cc:674
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:711
void execute(GPUDynInstPtr) override
Definition flat.cc:611
void completeAcc(GPUDynInstPtr) override
Definition flat.cc:654
void initiateAcc(GPUDynInstPtr) override
Definition flat.cc:648
void atomicComplete(GPUDynInstPtr gpuDynInst)
void calcAddr(GPUDynInstPtr gpuDynInst, ScalarRegU32 vaddr, ScalarRegU32 saddr, ScalarRegI32 offset)
Inst_FLAT(InFmt_FLAT *, const std::string &opcode)
void initMemRead(GPUDynInstPtr gpuDynInst)
void atomicExecute(GPUDynInstPtr gpuDynInst)
void issueRequestHelper(GPUDynInstPtr gpuDynInst)
void initAtomicAccess(GPUDynInstPtr gpuDynInst)
void initMemWrite(GPUDynInstPtr gpuDynInst)
void read() override
read from the vrf.
Definition operand.hh:148
void write() override
write to the vrf.
Definition operand.hh:203
void decExpInstsIssued()
void untrackExpInst(GPUDynInstPtr gpu_dyn_inst)
void decVMemInstsIssued()
void untrackLGKMInst(GPUDynInstPtr gpu_dyn_inst)
void decLGKMInstsIssued()
void untrackVMemInst(GPUDynInstPtr gpu_dyn_inst)
classes that represnt vector/scalar operands in VEGA ISA.
Definition faults.cc:39
VecOperand< VecElemU32, false > VecOperandU32
Definition operand.hh:829
VecOperand< VecElemU8, true, 1 > ConstVecOperandU8
Definition operand.hh:840
VecOperand< VecElemU32, true > ConstVecOperandU32
Definition operand.hh:844
uint16_t VecElemU16
uint32_t VecElemU32
VecOperand< VecElemU16, true, 1 > ConstVecOperandU16
Definition operand.hh:842
const int NumVecElemPerVecReg(64)
uint64_t VecElemU64
VecOperand< VecElemU64, true > ConstVecOperandU64
Definition operand.hh:847
Copyright (c) 2024 Arm Limited All rights reserved.
Definition binary32.hh:36
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition misc.hh:49

Generated on Mon May 26 2025 09:18:33 for gem5 by doxygen 1.13.2