gem5 v24.0.0.0
Loading...
Searching...
No Matches
vopc.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_VOPC__V_CMP_CLASS_F32 class methods ---
40
42 : Inst_VOPC(iFmt, "v_cmp_class_f32")
43 {
44 setFlag(ALU);
45 setFlag(F32);
46 } // Inst_VOPC__V_CMP_CLASS_F32
47
49 {
50 } // ~Inst_VOPC__V_CMP_CLASS_F32
51
52 // --- description from .arch file ---
53 // VCC = IEEE numeric class function specified in S1.u, performed on S0.f
54 // The function reports true if the floating point value is *any* of the
55 // --- numeric types selected in S1.u according to the following list:
56 // S1.u[0] -- value is a signaling NaN.
57 // S1.u[1] -- value is a quiet NaN.
58 // S1.u[2] -- value is negative infinity.
59 // S1.u[3] -- value is a negative normal value.
60 // S1.u[4] -- value is a negative denormal value.
61 // S1.u[5] -- value is negative zero.
62 // S1.u[6] -- value is positive zero.
63 // S1.u[7] -- value is a positive denormal value.
64 // S1.u[8] -- value is a positive normal value.
65 // S1.u[9] -- value is positive infinity.
66 void
68 {
69 Wavefront *wf = gpuDynInst->wavefront();
70 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
71 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
72 ConstScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
73
74 src0.readSrc();
75 src1.read();
76
77 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
78 if (wf->execMask(lane)) {
79 if (bits(src1[lane], 0) || bits(src1[lane], 1)) {
80 // is NaN
81 if (std::isnan(src0[lane])) {
82 vcc.setBit(lane, 1);
83 continue;
84 }
85 }
86 if (bits(src1[lane], 2)) {
87 // is -infinity
88 if (std::isinf(src0[lane]) && std::signbit(src0[lane])) {
89 vcc.setBit(lane, 1);
90 continue;
91 }
92 }
93 if (bits(src1[lane], 3)) {
94 // is -normal
95 if (std::isnormal(src0[lane])
96 && std::signbit(src0[lane])) {
97 vcc.setBit(lane, 1);
98 continue;
99 }
100 }
101 if (bits(src1[lane], 4)) {
102 // is -denormal
103 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
104 && std::signbit(src0[lane])) {
105 vcc.setBit(lane, 1);
106 continue;
107 }
108 }
109 if (bits(src1[lane], 5)) {
110 // is -zero
111 if (std::fpclassify(src0[lane]) == FP_ZERO
112 && std::signbit(src0[lane])) {
113 vcc.setBit(lane, 1);
114 continue;
115 }
116 }
117 if (bits(src1[lane], 6)) {
118 // is +zero
119 if (std::fpclassify(src0[lane]) == FP_ZERO
120 && !std::signbit(src0[lane])) {
121 vcc.setBit(lane, 1);
122 continue;
123 }
124 }
125 if (bits(src1[lane], 7)) {
126 // is +denormal
127 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
128 && !std::signbit(src0[lane])) {
129 vcc.setBit(lane, 1);
130 continue;
131 }
132 }
133 if (bits(src1[lane], 8)) {
134 // is +normal
135 if (std::isnormal(src0[lane])
136 && !std::signbit(src0[lane])) {
137 vcc.setBit(lane, 1);
138 continue;
139 }
140 }
141 if (bits(src1[lane], 9)) {
142 // is +infinity
143 if (std::isinf(src0[lane]) && !std::signbit(src0[lane])) {
144 vcc.setBit(lane, 1);
145 continue;
146 }
147 }
148 }
149 }
150
151 vcc.write();
152 } // execute
153 // --- Inst_VOPC__V_CMPX_CLASS_F32 class methods ---
154
156 : Inst_VOPC(iFmt, "v_cmpx_class_f32")
157 {
158 setFlag(ALU);
159 setFlag(F32);
160 setFlag(WritesEXEC);
161 } // Inst_VOPC__V_CMPX_CLASS_F32
162
164 {
165 } // ~Inst_VOPC__V_CMPX_CLASS_F32
166
167 // --- description from .arch file ---
168 // EXEC, VCC = IEEE numeric class function specified in S1.u, performed on
169 // S0.f The function reports true if the floating point value is *any* of
170 // the numeric types selected in S1.u according to the following list:
171 // S1.u[0] -- value is a signaling NaN.
172 // S1.u[1] -- value is a quiet NaN.
173 // S1.u[2] -- value is negative infinity.
174 // S1.u[3] -- value is a negative normal value.
175 // S1.u[4] -- value is a negative denormal value.
176 // S1.u[5] -- value is negative zero.
177 // S1.u[6] -- value is positive zero.
178 // S1.u[7] -- value is a positive denormal value.
179 // S1.u[8] -- value is a positive normal value.
180 // S1.u[9] -- value is positive infinity.
181 void
183 {
184 Wavefront *wf = gpuDynInst->wavefront();
185 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
186 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
187 ConstScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
188
189 src0.readSrc();
190 src1.read();
191
192 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
193 if (wf->execMask(lane)) {
194 if (bits(src1[lane], 0) || bits(src1[lane], 1)) {
195 // is NaN
196 if (std::isnan(src0[lane])) {
197 vcc.setBit(lane, 1);
198 continue;
199 }
200 }
201 if (bits(src1[lane], 2)) {
202 // is -infinity
203 if (std::isinf(src0[lane]) && std::signbit(src0[lane])) {
204 vcc.setBit(lane, 1);
205 continue;
206 }
207 }
208 if (bits(src1[lane], 3)) {
209 // is -normal
210 if (std::isnormal(src0[lane])
211 && std::signbit(src0[lane])) {
212 vcc.setBit(lane, 1);
213 continue;
214 }
215 }
216 if (bits(src1[lane], 4)) {
217 // is -denormal
218 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
219 && std::signbit(src0[lane])) {
220 vcc.setBit(lane, 1);
221 continue;
222 }
223 }
224 if (bits(src1[lane], 5)) {
225 // is -zero
226 if (std::fpclassify(src0[lane]) == FP_ZERO
227 && std::signbit(src0[lane])) {
228 vcc.setBit(lane, 1);
229 continue;
230 }
231 }
232 if (bits(src1[lane], 6)) {
233 // is +zero
234 if (std::fpclassify(src0[lane]) == FP_ZERO
235 && !std::signbit(src0[lane])) {
236 vcc.setBit(lane, 1);
237 continue;
238 }
239 }
240 if (bits(src1[lane], 7)) {
241 // is +denormal
242 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
243 && !std::signbit(src0[lane])) {
244 vcc.setBit(lane, 1);
245 continue;
246 }
247 }
248 if (bits(src1[lane], 8)) {
249 // is +normal
250 if (std::isnormal(src0[lane])
251 && !std::signbit(src0[lane])) {
252 vcc.setBit(lane, 1);
253 continue;
254 }
255 }
256 if (bits(src1[lane], 9)) {
257 // is +infinity
258 if (std::isinf(src0[lane]) && !std::signbit(src0[lane])) {
259 vcc.setBit(lane, 1);
260 continue;
261 }
262 }
263 }
264 }
265
266 vcc.write();
267 wf->execMask() = vcc.rawData();
268 } // execute
269 // --- Inst_VOPC__V_CMP_CLASS_F64 class methods ---
270
272 : Inst_VOPC(iFmt, "v_cmp_class_f64")
273 {
274 setFlag(ALU);
275 setFlag(F64);
276 } // Inst_VOPC__V_CMP_CLASS_F64
277
279 {
280 } // ~Inst_VOPC__V_CMP_CLASS_F64
281
282 // --- description from .arch file ---
283 // VCC = IEEE numeric class function specified in S1.u, performed on S0.d
284 // The function reports true if the floating point value is *any* of the
285 // --- numeric types selected in S1.u according to the following list:
286 // S1.u[0] -- value is a signaling NaN.
287 // S1.u[1] -- value is a quiet NaN.
288 // S1.u[2] -- value is negative infinity.
289 // S1.u[3] -- value is a negative normal value.
290 // S1.u[4] -- value is a negative denormal value.
291 // S1.u[5] -- value is negative zero.
292 // S1.u[6] -- value is positive zero.
293 // S1.u[7] -- value is a positive denormal value.
294 // S1.u[8] -- value is a positive normal value.
295 // S1.u[9] -- value is positive infinity.
296 void
298 {
299 Wavefront *wf = gpuDynInst->wavefront();
300 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
301 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
302 ConstScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
303
304 src0.readSrc();
305 src1.read();
306
307 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
308 if (wf->execMask(lane)) {
309 if (bits(src1[lane], 0) || bits(src1[lane], 1)) {
310 // is NaN
311 if (std::isnan(src0[lane])) {
312 vcc.setBit(lane, 1);
313 continue;
314 }
315 }
316 if (bits(src1[lane], 2)) {
317 // is -infinity
318 if (std::isinf(src0[lane]) && std::signbit(src0[lane])) {
319 vcc.setBit(lane, 1);
320 continue;
321 }
322 }
323 if (bits(src1[lane], 3)) {
324 // is -normal
325 if (std::isnormal(src0[lane])
326 && std::signbit(src0[lane])) {
327 vcc.setBit(lane, 1);
328 continue;
329 }
330 }
331 if (bits(src1[lane], 4)) {
332 // is -denormal
333 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
334 && std::signbit(src0[lane])) {
335 vcc.setBit(lane, 1);
336 continue;
337 }
338 }
339 if (bits(src1[lane], 5)) {
340 // is -zero
341 if (std::fpclassify(src0[lane]) == FP_ZERO
342 && std::signbit(src0[lane])) {
343 vcc.setBit(lane, 1);
344 continue;
345 }
346 }
347 if (bits(src1[lane], 6)) {
348 // is +zero
349 if (std::fpclassify(src0[lane]) == FP_ZERO
350 && !std::signbit(src0[lane])) {
351 vcc.setBit(lane, 1);
352 continue;
353 }
354 }
355 if (bits(src1[lane], 7)) {
356 // is +denormal
357 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
358 && !std::signbit(src0[lane])) {
359 vcc.setBit(lane, 1);
360 continue;
361 }
362 }
363 if (bits(src1[lane], 8)) {
364 // is +normal
365 if (std::isnormal(src0[lane])
366 && !std::signbit(src0[lane])) {
367 vcc.setBit(lane, 1);
368 continue;
369 }
370 }
371 if (bits(src1[lane], 9)) {
372 // is +infinity
373 if (std::isinf(src0[lane])
374 && !std::signbit(src0[lane])) {
375 vcc.setBit(lane, 1);
376 continue;
377 }
378 }
379 }
380 }
381
382 vcc.write();
383 } // execute
384 // --- Inst_VOPC__V_CMPX_CLASS_F64 class methods ---
385
387 : Inst_VOPC(iFmt, "v_cmpx_class_f64")
388 {
389 setFlag(ALU);
390 setFlag(F64);
391 setFlag(WritesEXEC);
392 } // Inst_VOPC__V_CMPX_CLASS_F64
393
395 {
396 } // ~Inst_VOPC__V_CMPX_CLASS_F64
397
398 // --- description from .arch file ---
399 // EXEC, VCC = IEEE numeric class function specified in S1.u, performed on
400 // S0.d The function reports true if the floating point value is *any* of
401 // the numeric types selected in S1.u according to the following list:
402 // S1.u[0] -- value is a signaling NaN.
403 // S1.u[1] -- value is a quiet NaN.
404 // S1.u[2] -- value is negative infinity.
405 // S1.u[3] -- value is a negative normal value.
406 // S1.u[4] -- value is a negative denormal value.
407 // S1.u[5] -- value is negative zero.
408 // S1.u[6] -- value is positive zero.
409 // S1.u[7] -- value is a positive denormal value.
410 // S1.u[8] -- value is a positive normal value.
411 // S1.u[9] -- value is positive infinity.
412 void
414 {
415 Wavefront *wf = gpuDynInst->wavefront();
416 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
417 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
418 ConstScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
419
420 src0.readSrc();
421 src1.read();
422
423 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
424 if (wf->execMask(lane)) {
425 if (bits(src1[lane], 0) || bits(src1[lane], 1)) {
426 // is NaN
427 if (std::isnan(src0[lane])) {
428 vcc.setBit(lane, 1);
429 continue;
430 }
431 }
432 if (bits(src1[lane], 2)) {
433 // is -infinity
434 if (std::isinf(src0[lane]) && std::signbit(src0[lane])) {
435 vcc.setBit(lane, 1);
436 continue;
437 }
438 }
439 if (bits(src1[lane], 3)) {
440 // is -normal
441 if (std::isnormal(src0[lane])
442 && std::signbit(src0[lane])) {
443 vcc.setBit(lane, 1);
444 continue;
445 }
446 }
447 if (bits(src1[lane], 4)) {
448 // is -denormal
449 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
450 && std::signbit(src0[lane])) {
451 vcc.setBit(lane, 1);
452 continue;
453 }
454 }
455 if (bits(src1[lane], 5)) {
456 // is -zero
457 if (std::fpclassify(src0[lane]) == FP_ZERO
458 && std::signbit(src0[lane])) {
459 vcc.setBit(lane, 1);
460 continue;
461 }
462 }
463 if (bits(src1[lane], 6)) {
464 // is +zero
465 if (std::fpclassify(src0[lane]) == FP_ZERO
466 && !std::signbit(src0[lane])) {
467 vcc.setBit(lane, 1);
468 continue;
469 }
470 }
471 if (bits(src1[lane], 7)) {
472 // is +denormal
473 if (std::fpclassify(src0[lane]) == FP_SUBNORMAL
474 && !std::signbit(src0[lane])) {
475 vcc.setBit(lane, 1);
476 continue;
477 }
478 }
479 if (bits(src1[lane], 8)) {
480 // is +normal
481 if (std::isnormal(src0[lane])
482 && !std::signbit(src0[lane])) {
483 vcc.setBit(lane, 1);
484 continue;
485 }
486 }
487 if (bits(src1[lane], 9)) {
488 // is +infinity
489 if (std::isinf(src0[lane])
490 && !std::signbit(src0[lane])) {
491 vcc.setBit(lane, 1);
492 continue;
493 }
494 }
495 }
496 }
497
498 vcc.write();
499 wf->execMask() = vcc.rawData();
500 } // execute
501 // --- Inst_VOPC__V_CMP_CLASS_F16 class methods ---
502
504 : Inst_VOPC(iFmt, "v_cmp_class_f16")
505 {
506 setFlag(ALU);
507 setFlag(F16);
508 } // Inst_VOPC__V_CMP_CLASS_F16
509
511 {
512 } // ~Inst_VOPC__V_CMP_CLASS_F16
513
514 // --- description from .arch file ---
515 // VCC = IEEE numeric class function specified in S1.u, performed on S0.f16
516 // The function reports true if the floating point value is *any* of the
517 // --- numeric types selected in S1.u according to the following list:
518 // S1.u[0] -- value is a signaling NaN.
519 // S1.u[1] -- value is a quiet NaN.
520 // S1.u[2] -- value is negative infinity.
521 // S1.u[3] -- value is a negative normal value.
522 // S1.u[4] -- value is a negative denormal value.
523 // S1.u[5] -- value is negative zero.
524 // S1.u[6] -- value is positive zero.
525 // S1.u[7] -- value is a positive denormal value.
526 // S1.u[8] -- value is a positive normal value.
527 // S1.u[9] -- value is positive infinity.
528 void
533 // --- Inst_VOPC__V_CMPX_CLASS_F16 class methods ---
534
536 : Inst_VOPC(iFmt, "v_cmpx_class_f16")
537 {
538 setFlag(ALU);
539 setFlag(F16);
540 setFlag(WritesEXEC);
541 } // Inst_VOPC__V_CMPX_CLASS_F16
542
544 {
545 } // ~Inst_VOPC__V_CMPX_CLASS_F16
546
547 // --- description from .arch file ---
548 // EXEC, VCC = IEEE numeric class function specified in S1.u, performed on
549 // --- S0.f16
550 // The function reports true if the floating point value is *any* of the
551 // --- numeric types selected in S1.u according to the following list:
552 // S1.u[0] -- value is a signaling NaN.
553 // S1.u[1] -- value is a quiet NaN.
554 // S1.u[2] -- value is negative infinity.
555 // S1.u[3] -- value is a negative normal value.
556 // S1.u[4] -- value is a negative denormal value.
557 // S1.u[5] -- value is negative zero.
558 // S1.u[6] -- value is positive zero.
559 // S1.u[7] -- value is a positive denormal value.
560 // S1.u[8] -- value is a positive normal value.
561 // S1.u[9] -- value is positive infinity.
562 void
567 // --- Inst_VOPC__V_CMP_F_F16 class methods ---
568
570 : Inst_VOPC(iFmt, "v_cmp_f_f16")
571 {
572 setFlag(ALU);
573 setFlag(F16);
574 } // Inst_VOPC__V_CMP_F_F16
575
577 {
578 } // ~Inst_VOPC__V_CMP_F_F16
579
580 // --- description from .arch file ---
581 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
582 void
584 {
586 } // execute
587 // --- Inst_VOPC__V_CMP_LT_F16 class methods ---
588
590 : Inst_VOPC(iFmt, "v_cmp_lt_f16")
591 {
592 setFlag(ALU);
593 setFlag(F16);
594 } // Inst_VOPC__V_CMP_LT_F16
595
597 {
598 } // ~Inst_VOPC__V_CMP_LT_F16
599
600 // --- description from .arch file ---
601 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
602 void
604 {
606 } // execute
607 // --- Inst_VOPC__V_CMP_EQ_F16 class methods ---
608
610 : Inst_VOPC(iFmt, "v_cmp_eq_f16")
611 {
612 setFlag(ALU);
613 setFlag(F16);
614 } // Inst_VOPC__V_CMP_EQ_F16
615
617 {
618 } // ~Inst_VOPC__V_CMP_EQ_F16
619
620 // --- description from .arch file ---
621 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
622 void
624 {
626 } // execute
627 // --- Inst_VOPC__V_CMP_LE_F16 class methods ---
628
630 : Inst_VOPC(iFmt, "v_cmp_le_f16")
631 {
632 setFlag(ALU);
633 setFlag(F16);
634 } // Inst_VOPC__V_CMP_LE_F16
635
637 {
638 } // ~Inst_VOPC__V_CMP_LE_F16
639
640 // --- description from .arch file ---
641 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
642 void
644 {
646 } // execute
647 // --- Inst_VOPC__V_CMP_GT_F16 class methods ---
648
650 : Inst_VOPC(iFmt, "v_cmp_gt_f16")
651 {
652 setFlag(ALU);
653 setFlag(F16);
654 } // Inst_VOPC__V_CMP_GT_F16
655
657 {
658 } // ~Inst_VOPC__V_CMP_GT_F16
659
660 // --- description from .arch file ---
661 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
662 void
664 {
666 } // execute
667 // --- Inst_VOPC__V_CMP_LG_F16 class methods ---
668
670 : Inst_VOPC(iFmt, "v_cmp_lg_f16")
671 {
672 setFlag(ALU);
673 setFlag(F16);
674 } // Inst_VOPC__V_CMP_LG_F16
675
677 {
678 } // ~Inst_VOPC__V_CMP_LG_F16
679
680 // --- description from .arch file ---
681 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
682 void
684 {
686 } // execute
687 // --- Inst_VOPC__V_CMP_GE_F16 class methods ---
688
690 : Inst_VOPC(iFmt, "v_cmp_ge_f16")
691 {
692 setFlag(ALU);
693 setFlag(F16);
694 } // Inst_VOPC__V_CMP_GE_F16
695
697 {
698 } // ~Inst_VOPC__V_CMP_GE_F16
699
700 // --- description from .arch file ---
701 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
702 void
704 {
706 } // execute
707 // --- Inst_VOPC__V_CMP_O_F16 class methods ---
708
710 : Inst_VOPC(iFmt, "v_cmp_o_f16")
711 {
712 setFlag(ALU);
713 setFlag(F16);
714 } // Inst_VOPC__V_CMP_O_F16
715
717 {
718 } // ~Inst_VOPC__V_CMP_O_F16
719
720 // --- description from .arch file ---
721 // D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC encoding.
722 void
724 {
726 } // execute
727 // --- Inst_VOPC__V_CMP_U_F16 class methods ---
728
730 : Inst_VOPC(iFmt, "v_cmp_u_f16")
731 {
732 setFlag(ALU);
733 setFlag(F16);
734 } // Inst_VOPC__V_CMP_U_F16
735
737 {
738 } // ~Inst_VOPC__V_CMP_U_F16
739
740 // --- description from .arch file ---
741 // D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC encoding.
742 void
744 {
746 } // execute
747 // --- Inst_VOPC__V_CMP_NGE_F16 class methods ---
748
750 : Inst_VOPC(iFmt, "v_cmp_nge_f16")
751 {
752 setFlag(ALU);
753 setFlag(F16);
754 } // Inst_VOPC__V_CMP_NGE_F16
755
757 {
758 } // ~Inst_VOPC__V_CMP_NGE_F16
759
760 // --- description from .arch file ---
761 // D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
762 void
764 {
766 } // execute
767 // --- Inst_VOPC__V_CMP_NLG_F16 class methods ---
768
770 : Inst_VOPC(iFmt, "v_cmp_nlg_f16")
771 {
772 setFlag(ALU);
773 setFlag(F16);
774 } // Inst_VOPC__V_CMP_NLG_F16
775
777 {
778 } // ~Inst_VOPC__V_CMP_NLG_F16
779
780 // --- description from .arch file ---
781 // D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
782 void
784 {
786 } // execute
787 // --- Inst_VOPC__V_CMP_NGT_F16 class methods ---
788
790 : Inst_VOPC(iFmt, "v_cmp_ngt_f16")
791 {
792 setFlag(ALU);
793 setFlag(F16);
794 } // Inst_VOPC__V_CMP_NGT_F16
795
797 {
798 } // ~Inst_VOPC__V_CMP_NGT_F16
799
800 // --- description from .arch file ---
801 // D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
802 void
804 {
806 } // execute
807 // --- Inst_VOPC__V_CMP_NLE_F16 class methods ---
808
810 : Inst_VOPC(iFmt, "v_cmp_nle_f16")
811 {
812 setFlag(ALU);
813 setFlag(F16);
814 } // Inst_VOPC__V_CMP_NLE_F16
815
817 {
818 } // ~Inst_VOPC__V_CMP_NLE_F16
819
820 // --- description from .arch file ---
821 // D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
822 void
824 {
826 } // execute
827 // --- Inst_VOPC__V_CMP_NEQ_F16 class methods ---
828
830 : Inst_VOPC(iFmt, "v_cmp_neq_f16")
831 {
832 setFlag(ALU);
833 setFlag(F16);
834 } // Inst_VOPC__V_CMP_NEQ_F16
835
837 {
838 } // ~Inst_VOPC__V_CMP_NEQ_F16
839
840 // --- description from .arch file ---
841 // D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
842 void
844 {
846 } // execute
847 // --- Inst_VOPC__V_CMP_NLT_F16 class methods ---
848
850 : Inst_VOPC(iFmt, "v_cmp_nlt_f16")
851 {
852 setFlag(ALU);
853 setFlag(F16);
854 } // Inst_VOPC__V_CMP_NLT_F16
855
857 {
858 } // ~Inst_VOPC__V_CMP_NLT_F16
859
860 // --- description from .arch file ---
861 // D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
862 void
864 {
866 } // execute
867 // --- Inst_VOPC__V_CMP_TRU_F16 class methods ---
868
870 : Inst_VOPC(iFmt, "v_cmp_tru_f16")
871 {
872 setFlag(ALU);
873 setFlag(F16);
874 } // Inst_VOPC__V_CMP_TRU_F16
875
877 {
878 } // ~Inst_VOPC__V_CMP_TRU_F16
879
880 // --- description from .arch file ---
881 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
882 void
884 {
886 } // execute
887 // --- Inst_VOPC__V_CMPX_F_F16 class methods ---
888
890 : Inst_VOPC(iFmt, "v_cmpx_f_f16")
891 {
892 setFlag(ALU);
893 setFlag(F16);
894 setFlag(WritesEXEC);
895 } // Inst_VOPC__V_CMPX_F_F16
896
898 {
899 } // ~Inst_VOPC__V_CMPX_F_F16
900
901 // --- description from .arch file ---
902 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
903 void
905 {
907 } // execute
908 // --- Inst_VOPC__V_CMPX_LT_F16 class methods ---
909
911 : Inst_VOPC(iFmt, "v_cmpx_lt_f16")
912 {
913 setFlag(ALU);
914 setFlag(F16);
915 setFlag(WritesEXEC);
916 } // Inst_VOPC__V_CMPX_LT_F16
917
919 {
920 } // ~Inst_VOPC__V_CMPX_LT_F16
921
922 // --- description from .arch file ---
923 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
924 void
926 {
928 } // execute
929 // --- Inst_VOPC__V_CMPX_EQ_F16 class methods ---
930
932 : Inst_VOPC(iFmt, "v_cmpx_eq_f16")
933 {
934 setFlag(ALU);
935 setFlag(F16);
936 setFlag(WritesEXEC);
937 } // Inst_VOPC__V_CMPX_EQ_F16
938
940 {
941 } // ~Inst_VOPC__V_CMPX_EQ_F16
942
943 // --- description from .arch file ---
944 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
945 void
947 {
949 } // execute
950 // --- Inst_VOPC__V_CMPX_LE_F16 class methods ---
951
953 : Inst_VOPC(iFmt, "v_cmpx_le_f16")
954 {
955 setFlag(ALU);
956 setFlag(F16);
957 setFlag(WritesEXEC);
958 } // Inst_VOPC__V_CMPX_LE_F16
959
961 {
962 } // ~Inst_VOPC__V_CMPX_LE_F16
963
964 // --- description from .arch file ---
965 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
966 void
968 {
970 } // execute
971 // --- Inst_VOPC__V_CMPX_GT_F16 class methods ---
972
974 : Inst_VOPC(iFmt, "v_cmpx_gt_f16")
975 {
976 setFlag(ALU);
977 setFlag(F16);
978 setFlag(WritesEXEC);
979 } // Inst_VOPC__V_CMPX_GT_F16
980
982 {
983 } // ~Inst_VOPC__V_CMPX_GT_F16
984
985 // --- description from .arch file ---
986 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
987 void
989 {
991 } // execute
992 // --- Inst_VOPC__V_CMPX_LG_F16 class methods ---
993
995 : Inst_VOPC(iFmt, "v_cmpx_lg_f16")
996 {
997 setFlag(ALU);
998 setFlag(F16);
999 setFlag(WritesEXEC);
1000 } // Inst_VOPC__V_CMPX_LG_F16
1001
1003 {
1004 } // ~Inst_VOPC__V_CMPX_LG_F16
1005
1006 // --- description from .arch file ---
1007 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
1008 void
1010 {
1012 } // execute
1013 // --- Inst_VOPC__V_CMPX_GE_F16 class methods ---
1014
1016 : Inst_VOPC(iFmt, "v_cmpx_ge_f16")
1017 {
1018 setFlag(ALU);
1019 setFlag(F16);
1020 setFlag(WritesEXEC);
1021 } // Inst_VOPC__V_CMPX_GE_F16
1022
1024 {
1025 } // ~Inst_VOPC__V_CMPX_GE_F16
1026
1027 // --- description from .arch file ---
1028 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
1029 void
1031 {
1033 } // execute
1034 // --- Inst_VOPC__V_CMPX_O_F16 class methods ---
1035
1037 : Inst_VOPC(iFmt, "v_cmpx_o_f16")
1038 {
1039 setFlag(ALU);
1040 setFlag(F16);
1041 setFlag(WritesEXEC);
1042 } // Inst_VOPC__V_CMPX_O_F16
1043
1045 {
1046 } // ~Inst_VOPC__V_CMPX_O_F16
1047
1048 // --- description from .arch file ---
1049 // EXEC,D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC
1050 // encoding.
1051 void
1053 {
1055 } // execute
1056 // --- Inst_VOPC__V_CMPX_U_F16 class methods ---
1057
1059 : Inst_VOPC(iFmt, "v_cmpx_u_f16")
1060 {
1061 setFlag(ALU);
1062 setFlag(F16);
1063 setFlag(WritesEXEC);
1064 } // Inst_VOPC__V_CMPX_U_F16
1065
1067 {
1068 } // ~Inst_VOPC__V_CMPX_U_F16
1069
1070 // --- description from .arch file ---
1071 // EXEC,D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC
1072 // encoding.
1073 void
1075 {
1077 } // execute
1078 // --- Inst_VOPC__V_CMPX_NGE_F16 class methods ---
1079
1081 : Inst_VOPC(iFmt, "v_cmpx_nge_f16")
1082 {
1083 setFlag(ALU);
1084 setFlag(F16);
1085 setFlag(WritesEXEC);
1086 } // Inst_VOPC__V_CMPX_NGE_F16
1087
1089 {
1090 } // ~Inst_VOPC__V_CMPX_NGE_F16
1091
1092 // --- description from .arch file ---
1093 // EXEC,D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
1094 void
1096 {
1098 } // execute
1099 // --- Inst_VOPC__V_CMPX_NLG_F16 class methods ---
1100
1102 : Inst_VOPC(iFmt, "v_cmpx_nlg_f16")
1103 {
1104 setFlag(ALU);
1105 setFlag(F16);
1106 setFlag(WritesEXEC);
1107 } // Inst_VOPC__V_CMPX_NLG_F16
1108
1110 {
1111 } // ~Inst_VOPC__V_CMPX_NLG_F16
1112
1113 // --- description from .arch file ---
1114 // EXEC,D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
1115 void
1117 {
1119 } // execute
1120 // --- Inst_VOPC__V_CMPX_NGT_F16 class methods ---
1121
1123 : Inst_VOPC(iFmt, "v_cmpx_ngt_f16")
1124 {
1125 setFlag(ALU);
1126 setFlag(F16);
1127 setFlag(WritesEXEC);
1128 } // Inst_VOPC__V_CMPX_NGT_F16
1129
1131 {
1132 } // ~Inst_VOPC__V_CMPX_NGT_F16
1133
1134 // --- description from .arch file ---
1135 // EXEC,D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
1136 void
1138 {
1140 } // execute
1141 // --- Inst_VOPC__V_CMPX_NLE_F16 class methods ---
1142
1144 : Inst_VOPC(iFmt, "v_cmpx_nle_f16")
1145 {
1146 setFlag(ALU);
1147 setFlag(F16);
1148 setFlag(WritesEXEC);
1149 } // Inst_VOPC__V_CMPX_NLE_F16
1150
1152 {
1153 } // ~Inst_VOPC__V_CMPX_NLE_F16
1154
1155 // --- description from .arch file ---
1156 // EXEC,D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
1157 void
1159 {
1161 } // execute
1162 // --- Inst_VOPC__V_CMPX_NEQ_F16 class methods ---
1163
1165 : Inst_VOPC(iFmt, "v_cmpx_neq_f16")
1166 {
1167 setFlag(ALU);
1168 setFlag(F16);
1169 setFlag(WritesEXEC);
1170 } // Inst_VOPC__V_CMPX_NEQ_F16
1171
1173 {
1174 } // ~Inst_VOPC__V_CMPX_NEQ_F16
1175
1176 // --- description from .arch file ---
1177 // EXEC,D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
1178 void
1180 {
1182 } // execute
1183 // --- Inst_VOPC__V_CMPX_NLT_F16 class methods ---
1184
1186 : Inst_VOPC(iFmt, "v_cmpx_nlt_f16")
1187 {
1188 setFlag(ALU);
1189 setFlag(F16);
1190 setFlag(WritesEXEC);
1191 } // Inst_VOPC__V_CMPX_NLT_F16
1192
1194 {
1195 } // ~Inst_VOPC__V_CMPX_NLT_F16
1196
1197 // --- description from .arch file ---
1198 // EXEC,D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
1199 void
1201 {
1203 } // execute
1204 // --- Inst_VOPC__V_CMPX_TRU_F16 class methods ---
1205
1207 : Inst_VOPC(iFmt, "v_cmpx_tru_f16")
1208 {
1209 setFlag(ALU);
1210 setFlag(F16);
1211 setFlag(WritesEXEC);
1212 } // Inst_VOPC__V_CMPX_TRU_F16
1213
1215 {
1216 } // ~Inst_VOPC__V_CMPX_TRU_F16
1217
1218 // --- description from .arch file ---
1219 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
1220 void
1222 {
1224 } // execute
1225 // --- Inst_VOPC__V_CMP_F_F32 class methods ---
1226
1228 : Inst_VOPC(iFmt, "v_cmp_f_f32")
1229 {
1230 setFlag(ALU);
1231 setFlag(F32);
1232 } // Inst_VOPC__V_CMP_F_F32
1233
1235 {
1236 } // ~Inst_VOPC__V_CMP_F_F32
1237
1238 // --- description from .arch file ---
1239 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
1240 void
1242 {
1243 Wavefront *wf = gpuDynInst->wavefront();
1244 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1245
1246 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1247 if (wf->execMask(lane)) {
1248 vcc.setBit(lane, 0);
1249 }
1250 }
1251
1252 vcc.write();
1253 } // execute
1254 // --- Inst_VOPC__V_CMP_LT_F32 class methods ---
1255
1257 : Inst_VOPC(iFmt, "v_cmp_lt_f32")
1258 {
1259 setFlag(ALU);
1260 setFlag(F32);
1261 } // Inst_VOPC__V_CMP_LT_F32
1262
1264 {
1265 } // ~Inst_VOPC__V_CMP_LT_F32
1266
1267 // --- description from .arch file ---
1268 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
1269 void
1271 {
1272 Wavefront *wf = gpuDynInst->wavefront();
1273 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1274 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1275 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1276
1277 src0.readSrc();
1278 src1.read();
1279
1280 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1281 if (wf->execMask(lane)) {
1282 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
1283 }
1284 }
1285
1286 vcc.write();
1287 } // execute
1288 // --- Inst_VOPC__V_CMP_EQ_F32 class methods ---
1289
1291 : Inst_VOPC(iFmt, "v_cmp_eq_f32")
1292 {
1293 setFlag(ALU);
1294 setFlag(F32);
1295 } // Inst_VOPC__V_CMP_EQ_F32
1296
1298 {
1299 } // ~Inst_VOPC__V_CMP_EQ_F32
1300
1301 // --- description from .arch file ---
1302 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
1303 void
1305 {
1306 Wavefront *wf = gpuDynInst->wavefront();
1307 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1308 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1309 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1310
1311 src0.readSrc();
1312 src1.read();
1313
1314 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1315 if (wf->execMask(lane)) {
1316 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
1317 }
1318 }
1319
1320 vcc.write();
1321 } // execute
1322 // --- Inst_VOPC__V_CMP_LE_F32 class methods ---
1323
1325 : Inst_VOPC(iFmt, "v_cmp_le_f32")
1326 {
1327 setFlag(ALU);
1328 setFlag(F32);
1329 } // Inst_VOPC__V_CMP_LE_F32
1330
1332 {
1333 } // ~Inst_VOPC__V_CMP_LE_F32
1334
1335 // --- description from .arch file ---
1336 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
1337 void
1339 {
1340 Wavefront *wf = gpuDynInst->wavefront();
1341 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1342 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1343 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1344
1345 src0.readSrc();
1346 src1.read();
1347
1348 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1349 if (wf->execMask(lane)) {
1350 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
1351 }
1352 }
1353
1354 vcc.write();
1355 } // execute
1356 // --- Inst_VOPC__V_CMP_GT_F32 class methods ---
1357
1359 : Inst_VOPC(iFmt, "v_cmp_gt_f32")
1360 {
1361 setFlag(ALU);
1362 setFlag(F32);
1363 } // Inst_VOPC__V_CMP_GT_F32
1364
1366 {
1367 } // ~Inst_VOPC__V_CMP_GT_F32
1368
1369 // --- description from .arch file ---
1370 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
1371 void
1373 {
1374 Wavefront *wf = gpuDynInst->wavefront();
1375 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1376 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1377 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1378
1379 src0.readSrc();
1380 src1.read();
1381
1382 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1383 if (wf->execMask(lane)) {
1384 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
1385 }
1386 }
1387
1388 vcc.write();
1389 } // execute
1390 // --- Inst_VOPC__V_CMP_LG_F32 class methods ---
1391
1393 : Inst_VOPC(iFmt, "v_cmp_lg_f32")
1394 {
1395 setFlag(ALU);
1396 setFlag(F32);
1397 } // Inst_VOPC__V_CMP_LG_F32
1398
1400 {
1401 } // ~Inst_VOPC__V_CMP_LG_F32
1402
1403 // --- description from .arch file ---
1404 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
1405 void
1407 {
1408 Wavefront *wf = gpuDynInst->wavefront();
1409 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1410 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1411 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1412
1413 src0.readSrc();
1414 src1.read();
1415
1416 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1417 if (wf->execMask(lane)) {
1418 vcc.setBit(lane, (src0[lane] < src1[lane]
1419 || src0[lane] > src1[lane]) ? 1 : 0);
1420 }
1421 }
1422
1423 vcc.write();
1424 } // execute
1425 // --- Inst_VOPC__V_CMP_GE_F32 class methods ---
1426
1428 : Inst_VOPC(iFmt, "v_cmp_ge_f32")
1429 {
1430 setFlag(ALU);
1431 setFlag(F32);
1432 } // Inst_VOPC__V_CMP_GE_F32
1433
1435 {
1436 } // ~Inst_VOPC__V_CMP_GE_F32
1437
1438 // --- description from .arch file ---
1439 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
1440 void
1442 {
1443 Wavefront *wf = gpuDynInst->wavefront();
1444 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1445 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1446 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1447
1448 src0.readSrc();
1449 src1.read();
1450
1451 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1452 if (wf->execMask(lane)) {
1453 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
1454 }
1455 }
1456
1457 vcc.write();
1458 } // execute
1459 // --- Inst_VOPC__V_CMP_O_F32 class methods ---
1460
1462 : Inst_VOPC(iFmt, "v_cmp_o_f32")
1463 {
1464 setFlag(ALU);
1465 setFlag(F32);
1466 } // Inst_VOPC__V_CMP_O_F32
1467
1469 {
1470 } // ~Inst_VOPC__V_CMP_O_F32
1471
1472 // --- description from .arch file ---
1473 // D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC encoding.
1474 void
1476 {
1477 Wavefront *wf = gpuDynInst->wavefront();
1478 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1479 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1480 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1481
1482 src0.readSrc();
1483 src1.read();
1484
1485 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1486 if (wf->execMask(lane)) {
1487 vcc.setBit(lane, (!std::isnan(src0[lane])
1488 && !std::isnan(src1[lane])) ? 1 : 0);
1489 }
1490 }
1491
1492 vcc.write();
1493 } // execute
1494 // --- Inst_VOPC__V_CMP_U_F32 class methods ---
1495
1497 : Inst_VOPC(iFmt, "v_cmp_u_f32")
1498 {
1499 setFlag(ALU);
1500 setFlag(F32);
1501 } // Inst_VOPC__V_CMP_U_F32
1502
1504 {
1505 } // ~Inst_VOPC__V_CMP_U_F32
1506
1507 // --- description from .arch file ---
1508 // D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC encoding.
1509 void
1511 {
1512 Wavefront *wf = gpuDynInst->wavefront();
1513 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1514 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1515 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1516
1517 src0.readSrc();
1518 src1.read();
1519
1520 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1521 if (wf->execMask(lane)) {
1522 vcc.setBit(lane, (std::isnan(src0[lane])
1523 || std::isnan(src1[lane])) ? 1 : 0);
1524 }
1525 }
1526
1527 vcc.write();
1528 } // execute
1529 // --- Inst_VOPC__V_CMP_NGE_F32 class methods ---
1530
1532 : Inst_VOPC(iFmt, "v_cmp_nge_f32")
1533 {
1534 setFlag(ALU);
1535 setFlag(F32);
1536 } // Inst_VOPC__V_CMP_NGE_F32
1537
1539 {
1540 } // ~Inst_VOPC__V_CMP_NGE_F32
1541
1542 // --- description from .arch file ---
1543 // D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
1544 void
1546 {
1547 Wavefront *wf = gpuDynInst->wavefront();
1548 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1549 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1550 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1551
1552 src0.readSrc();
1553 src1.read();
1554
1555 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1556 if (wf->execMask(lane)) {
1557 vcc.setBit(lane, !(src0[lane] >= src1[lane]) ? 1 : 0);
1558 }
1559 }
1560
1561 vcc.write();
1562 } // execute
1563 // --- Inst_VOPC__V_CMP_NLG_F32 class methods ---
1564
1566 : Inst_VOPC(iFmt, "v_cmp_nlg_f32")
1567 {
1568 setFlag(ALU);
1569 setFlag(F32);
1570 } // Inst_VOPC__V_CMP_NLG_F32
1571
1573 {
1574 } // ~Inst_VOPC__V_CMP_NLG_F32
1575
1576 // --- description from .arch file ---
1577 // D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
1578 void
1580 {
1581 Wavefront *wf = gpuDynInst->wavefront();
1582 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1583 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1584 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1585
1586 src0.readSrc();
1587 src1.read();
1588
1589 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1590 if (wf->execMask(lane)) {
1591 vcc.setBit(lane, !(src0[lane] < src1[lane]
1592 || src0[lane] > src1[lane]) ? 1 : 0);
1593 }
1594 }
1595
1596 vcc.write();
1597 } // execute
1598 // --- Inst_VOPC__V_CMP_NGT_F32 class methods ---
1599
1601 : Inst_VOPC(iFmt, "v_cmp_ngt_f32")
1602 {
1603 setFlag(ALU);
1604 setFlag(F32);
1605 } // Inst_VOPC__V_CMP_NGT_F32
1606
1608 {
1609 } // ~Inst_VOPC__V_CMP_NGT_F32
1610
1611 // --- description from .arch file ---
1612 // D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
1613 void
1615 {
1616 Wavefront *wf = gpuDynInst->wavefront();
1617 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1618 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1619 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1620
1621 src0.readSrc();
1622 src1.read();
1623
1624 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1625 if (wf->execMask(lane)) {
1626 vcc.setBit(lane, !(src0[lane] > src1[lane]) ? 1 : 0);
1627 }
1628 }
1629
1630 vcc.write();
1631 } // execute
1632 // --- Inst_VOPC__V_CMP_NLE_F32 class methods ---
1633
1635 : Inst_VOPC(iFmt, "v_cmp_nle_f32")
1636 {
1637 setFlag(ALU);
1638 setFlag(F32);
1639 } // Inst_VOPC__V_CMP_NLE_F32
1640
1642 {
1643 } // ~Inst_VOPC__V_CMP_NLE_F32
1644
1645 // --- description from .arch file ---
1646 // D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
1647 void
1649 {
1650 Wavefront *wf = gpuDynInst->wavefront();
1651 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1652 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1653 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1654
1655 src0.readSrc();
1656 src1.read();
1657
1658 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1659 if (wf->execMask(lane)) {
1660 vcc.setBit(lane, !(src0[lane] <= src1[lane]) ? 1 : 0);
1661 }
1662 }
1663
1664 vcc.write();
1665 } // execute
1666 // --- Inst_VOPC__V_CMP_NEQ_F32 class methods ---
1667
1669 : Inst_VOPC(iFmt, "v_cmp_neq_f32")
1670 {
1671 setFlag(ALU);
1672 setFlag(F32);
1673 } // Inst_VOPC__V_CMP_NEQ_F32
1674
1676 {
1677 } // ~Inst_VOPC__V_CMP_NEQ_F32
1678
1679 // --- description from .arch file ---
1680 // D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
1681 void
1683 {
1684 Wavefront *wf = gpuDynInst->wavefront();
1685 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1686 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1687 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1688
1689 src0.readSrc();
1690 src1.read();
1691
1692 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1693 if (wf->execMask(lane)) {
1694 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
1695 }
1696 }
1697
1698 vcc.write();
1699 } // execute
1700 // --- Inst_VOPC__V_CMP_NLT_F32 class methods ---
1701
1703 : Inst_VOPC(iFmt, "v_cmp_nlt_f32")
1704 {
1705 setFlag(ALU);
1706 setFlag(F32);
1707 } // Inst_VOPC__V_CMP_NLT_F32
1708
1710 {
1711 } // ~Inst_VOPC__V_CMP_NLT_F32
1712
1713 // --- description from .arch file ---
1714 // D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
1715 void
1717 {
1718 Wavefront *wf = gpuDynInst->wavefront();
1719 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1720 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1721 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1722
1723 src0.readSrc();
1724 src1.read();
1725
1726 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1727 if (wf->execMask(lane)) {
1728 vcc.setBit(lane, !(src0[lane] < src1[lane]) ? 1 : 0);
1729 }
1730 }
1731
1732 vcc.write();
1733 } // execute
1734 // --- Inst_VOPC__V_CMP_TRU_F32 class methods ---
1735
1737 : Inst_VOPC(iFmt, "v_cmp_tru_f32")
1738 {
1739 setFlag(ALU);
1740 setFlag(F32);
1741 } // Inst_VOPC__V_CMP_TRU_F32
1742
1744 {
1745 } // ~Inst_VOPC__V_CMP_TRU_F32
1746
1747 // --- description from .arch file ---
1748 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
1749 void
1751 {
1752 Wavefront *wf = gpuDynInst->wavefront();
1753 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1754
1755 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1756 if (wf->execMask(lane)) {
1757 vcc.setBit(lane, 1);
1758 }
1759 }
1760
1761 vcc.write();
1762 } // execute
1763 // --- Inst_VOPC__V_CMPX_F_F32 class methods ---
1764
1766 : Inst_VOPC(iFmt, "v_cmpx_f_f32")
1767 {
1768 setFlag(ALU);
1769 setFlag(F32);
1770 setFlag(WritesEXEC);
1771 } // Inst_VOPC__V_CMPX_F_F32
1772
1774 {
1775 } // ~Inst_VOPC__V_CMPX_F_F32
1776
1777 // --- description from .arch file ---
1778 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
1779 void
1781 {
1782 Wavefront *wf = gpuDynInst->wavefront();
1783 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1784
1785 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1786 if (wf->execMask(lane)) {
1787 vcc.setBit(lane, 0);
1788 }
1789 }
1790
1791 vcc.write();
1792 wf->execMask() = vcc.rawData();
1793 } // execute
1794 // --- Inst_VOPC__V_CMPX_LT_F32 class methods ---
1795
1797 : Inst_VOPC(iFmt, "v_cmpx_lt_f32")
1798 {
1799 setFlag(ALU);
1800 setFlag(F32);
1801 setFlag(WritesEXEC);
1802 } // Inst_VOPC__V_CMPX_LT_F32
1803
1805 {
1806 } // ~Inst_VOPC__V_CMPX_LT_F32
1807
1808 // --- description from .arch file ---
1809 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
1810 void
1812 {
1813 Wavefront *wf = gpuDynInst->wavefront();
1814 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1815 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1816 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1817
1818 src0.readSrc();
1819 src1.read();
1820
1821 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1822 if (wf->execMask(lane)) {
1823 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
1824 }
1825 }
1826
1827 vcc.write();
1828 wf->execMask() = vcc.rawData();
1829 } // execute
1830 // --- Inst_VOPC__V_CMPX_EQ_F32 class methods ---
1831
1833 : Inst_VOPC(iFmt, "v_cmpx_eq_f32")
1834 {
1835 setFlag(ALU);
1836 setFlag(F32);
1837 setFlag(WritesEXEC);
1838 } // Inst_VOPC__V_CMPX_EQ_F32
1839
1841 {
1842 } // ~Inst_VOPC__V_CMPX_EQ_F32
1843
1844 // --- description from .arch file ---
1845 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
1846 void
1848 {
1849 Wavefront *wf = gpuDynInst->wavefront();
1850 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1851 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1852 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1853
1854 src0.readSrc();
1855 src1.read();
1856
1857 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1858 if (wf->execMask(lane)) {
1859 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
1860 }
1861 }
1862
1863 vcc.write();
1864 wf->execMask() = vcc.rawData();
1865 } // execute
1866 // --- Inst_VOPC__V_CMPX_LE_F32 class methods ---
1867
1869 : Inst_VOPC(iFmt, "v_cmpx_le_f32")
1870 {
1871 setFlag(ALU);
1872 setFlag(F32);
1873 setFlag(WritesEXEC);
1874 } // Inst_VOPC__V_CMPX_LE_F32
1875
1877 {
1878 } // ~Inst_VOPC__V_CMPX_LE_F32
1879
1880 // --- description from .arch file ---
1881 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
1882 void
1884 {
1885 Wavefront *wf = gpuDynInst->wavefront();
1886 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1887 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1888 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1889
1890 src0.readSrc();
1891 src1.read();
1892
1893 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1894 if (wf->execMask(lane)) {
1895 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
1896 }
1897 }
1898
1899 vcc.write();
1900 wf->execMask() = vcc.rawData();
1901 } // execute
1902 // --- Inst_VOPC__V_CMPX_GT_F32 class methods ---
1903
1905 : Inst_VOPC(iFmt, "v_cmpx_gt_f32")
1906 {
1907 setFlag(ALU);
1908 setFlag(F32);
1909 setFlag(WritesEXEC);
1910 } // Inst_VOPC__V_CMPX_GT_F32
1911
1913 {
1914 } // ~Inst_VOPC__V_CMPX_GT_F32
1915
1916 // --- description from .arch file ---
1917 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
1918 void
1920 {
1921 Wavefront *wf = gpuDynInst->wavefront();
1922 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1923 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1924 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1925
1926 src0.readSrc();
1927 src1.read();
1928
1929 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1930 if (wf->execMask(lane)) {
1931 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
1932 }
1933 }
1934
1935 vcc.write();
1936 wf->execMask() = vcc.rawData();
1937 } // execute
1938 // --- Inst_VOPC__V_CMPX_LG_F32 class methods ---
1939
1941 : Inst_VOPC(iFmt, "v_cmpx_lg_f32")
1942 {
1943 setFlag(ALU);
1944 setFlag(F32);
1945 setFlag(WritesEXEC);
1946 } // Inst_VOPC__V_CMPX_LG_F32
1947
1949 {
1950 } // ~Inst_VOPC__V_CMPX_LG_F32
1951
1952 // --- description from .arch file ---
1953 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
1954 void
1956 {
1957 Wavefront *wf = gpuDynInst->wavefront();
1958 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1959 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1960 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1961
1962 src0.readSrc();
1963 src1.read();
1964
1965 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
1966 if (wf->execMask(lane)) {
1967 vcc.setBit(lane, (src0[lane] < src1[lane]
1968 || src0[lane] > src1[lane]) ? 1 : 0);
1969 }
1970 }
1971
1972 vcc.write();
1973 wf->execMask() = vcc.rawData();
1974 } // execute
1975 // --- Inst_VOPC__V_CMPX_GE_F32 class methods ---
1976
1978 : Inst_VOPC(iFmt, "v_cmpx_ge_f32")
1979 {
1980 setFlag(ALU);
1981 setFlag(F32);
1982 setFlag(WritesEXEC);
1983 } // Inst_VOPC__V_CMPX_GE_F32
1984
1986 {
1987 } // ~Inst_VOPC__V_CMPX_GE_F32
1988
1989 // --- description from .arch file ---
1990 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
1991 void
1993 {
1994 Wavefront *wf = gpuDynInst->wavefront();
1995 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
1996 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
1997 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
1998
1999 src0.readSrc();
2000 src1.read();
2001
2002 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2003 if (wf->execMask(lane)) {
2004 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
2005 }
2006 }
2007
2008 vcc.write();
2009 wf->execMask() = vcc.rawData();
2010 } // execute
2011 // --- Inst_VOPC__V_CMPX_O_F32 class methods ---
2012
2014 : Inst_VOPC(iFmt, "v_cmpx_o_f32")
2015 {
2016 setFlag(ALU);
2017 setFlag(F32);
2018 setFlag(WritesEXEC);
2019 } // Inst_VOPC__V_CMPX_O_F32
2020
2022 {
2023 } // ~Inst_VOPC__V_CMPX_O_F32
2024
2025 // --- description from .arch file ---
2026 // EXEC,D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC
2027 // encoding.
2028 void
2030 {
2031 Wavefront *wf = gpuDynInst->wavefront();
2032 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2033 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2034 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2035
2036 src0.readSrc();
2037 src1.read();
2038
2039 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2040 if (wf->execMask(lane)) {
2041 vcc.setBit(lane, (!std::isnan(src0[lane])
2042 && !std::isnan(src1[lane])) ? 1 : 0);
2043 }
2044 }
2045
2046 vcc.write();
2047 wf->execMask() = vcc.rawData();
2048 } // execute
2049 // --- Inst_VOPC__V_CMPX_U_F32 class methods ---
2050
2052 : Inst_VOPC(iFmt, "v_cmpx_u_f32")
2053 {
2054 setFlag(ALU);
2055 setFlag(F32);
2056 setFlag(WritesEXEC);
2057 } // Inst_VOPC__V_CMPX_U_F32
2058
2060 {
2061 } // ~Inst_VOPC__V_CMPX_U_F32
2062
2063 // --- description from .arch file ---
2064 // EXEC,D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC
2065 // encoding.
2066 void
2068 {
2069 Wavefront *wf = gpuDynInst->wavefront();
2070 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2071 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2072 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2073
2074 src0.readSrc();
2075 src1.read();
2076
2077 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2078 if (wf->execMask(lane)) {
2079 vcc.setBit(lane, (std::isnan(src0[lane])
2080 || std::isnan(src1[lane])) ? 1 : 0);
2081 }
2082 }
2083
2084 vcc.write();
2085 wf->execMask() = vcc.rawData();
2086 } // execute
2087 // --- Inst_VOPC__V_CMPX_NGE_F32 class methods ---
2088
2090 : Inst_VOPC(iFmt, "v_cmpx_nge_f32")
2091 {
2092 setFlag(ALU);
2093 setFlag(F32);
2094 setFlag(WritesEXEC);
2095 } // Inst_VOPC__V_CMPX_NGE_F32
2096
2098 {
2099 } // ~Inst_VOPC__V_CMPX_NGE_F32
2100
2101 // --- description from .arch file ---
2102 // EXEC,D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
2103 void
2105 {
2106 Wavefront *wf = gpuDynInst->wavefront();
2107 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2108 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2109 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2110
2111 src0.readSrc();
2112 src1.read();
2113
2114 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2115 if (wf->execMask(lane)) {
2116 vcc.setBit(lane, !(src0[lane] >= src1[lane]) ? 1 : 0);
2117 }
2118 }
2119
2120 vcc.write();
2121 wf->execMask() = vcc.rawData();
2122 } // execute
2123 // --- Inst_VOPC__V_CMPX_NLG_F32 class methods ---
2124
2126 : Inst_VOPC(iFmt, "v_cmpx_nlg_f32")
2127 {
2128 setFlag(ALU);
2129 setFlag(F32);
2130 setFlag(WritesEXEC);
2131 } // Inst_VOPC__V_CMPX_NLG_F32
2132
2134 {
2135 } // ~Inst_VOPC__V_CMPX_NLG_F32
2136
2137 // --- description from .arch file ---
2138 // EXEC,D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
2139 void
2141 {
2142 Wavefront *wf = gpuDynInst->wavefront();
2143 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2144 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2145 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2146
2147 src0.readSrc();
2148 src1.read();
2149
2150 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2151 if (wf->execMask(lane)) {
2152 vcc.setBit(lane, !(src0[lane] < src1[lane]
2153 || src0[lane] > src1[lane]) ? 1 : 0);
2154 }
2155 }
2156
2157 vcc.write();
2158 wf->execMask() = vcc.rawData();
2159 } // execute
2160 // --- Inst_VOPC__V_CMPX_NGT_F32 class methods ---
2161
2163 : Inst_VOPC(iFmt, "v_cmpx_ngt_f32")
2164 {
2165 setFlag(ALU);
2166 setFlag(F32);
2167 setFlag(WritesEXEC);
2168 } // Inst_VOPC__V_CMPX_NGT_F32
2169
2171 {
2172 } // ~Inst_VOPC__V_CMPX_NGT_F32
2173
2174 // --- description from .arch file ---
2175 // EXEC,D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
2176 void
2178 {
2179 Wavefront *wf = gpuDynInst->wavefront();
2180 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2181 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2182 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2183
2184 src0.readSrc();
2185 src1.read();
2186
2187 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2188 if (wf->execMask(lane)) {
2189 vcc.setBit(lane, !(src0[lane] > src1[lane]) ? 1 : 0);
2190 }
2191 }
2192
2193 vcc.write();
2194 wf->execMask() = vcc.rawData();
2195 } // execute
2196 // --- Inst_VOPC__V_CMPX_NLE_F32 class methods ---
2197
2199 : Inst_VOPC(iFmt, "v_cmpx_nle_f32")
2200 {
2201 setFlag(ALU);
2202 setFlag(F32);
2203 setFlag(WritesEXEC);
2204 } // Inst_VOPC__V_CMPX_NLE_F32
2205
2207 {
2208 } // ~Inst_VOPC__V_CMPX_NLE_F32
2209
2210 // --- description from .arch file ---
2211 // EXEC,D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
2212 void
2214 {
2215 Wavefront *wf = gpuDynInst->wavefront();
2216 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2217 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2218 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2219
2220 src0.readSrc();
2221 src1.read();
2222
2223 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2224 if (wf->execMask(lane)) {
2225 vcc.setBit(lane, !(src0[lane] <= src1[lane]) ? 1 : 0);
2226 }
2227 }
2228
2229 vcc.write();
2230 wf->execMask() = vcc.rawData();
2231 } // execute
2232 // --- Inst_VOPC__V_CMPX_NEQ_F32 class methods ---
2233
2235 : Inst_VOPC(iFmt, "v_cmpx_neq_f32")
2236 {
2237 setFlag(ALU);
2238 setFlag(F32);
2239 setFlag(WritesEXEC);
2240 } // Inst_VOPC__V_CMPX_NEQ_F32
2241
2243 {
2244 } // ~Inst_VOPC__V_CMPX_NEQ_F32
2245
2246 // --- description from .arch file ---
2247 // EXEC,D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
2248 void
2250 {
2251 Wavefront *wf = gpuDynInst->wavefront();
2252 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2253 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2254 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2255
2256 src0.readSrc();
2257 src1.read();
2258
2259 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2260 if (wf->execMask(lane)) {
2261 vcc.setBit(lane, !(src0[lane] == src1[lane]) ? 1 : 0);
2262 }
2263 }
2264
2265 vcc.write();
2266 wf->execMask() = vcc.rawData();
2267 } // execute
2268 // --- Inst_VOPC__V_CMPX_NLT_F32 class methods ---
2269
2271 : Inst_VOPC(iFmt, "v_cmpx_nlt_f32")
2272 {
2273 setFlag(ALU);
2274 setFlag(F32);
2275 setFlag(WritesEXEC);
2276 } // Inst_VOPC__V_CMPX_NLT_F32
2277
2279 {
2280 } // ~Inst_VOPC__V_CMPX_NLT_F32
2281
2282 // --- description from .arch file ---
2283 // EXEC,D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
2284 void
2286 {
2287 Wavefront *wf = gpuDynInst->wavefront();
2288 ConstVecOperandF32 src0(gpuDynInst, instData.SRC0);
2289 ConstVecOperandF32 src1(gpuDynInst, instData.VSRC1);
2290 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2291
2292 src0.readSrc();
2293 src1.read();
2294
2295 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2296 if (wf->execMask(lane)) {
2297 vcc.setBit(lane, !(src0[lane] < src1[lane]) ? 1 : 0);
2298 }
2299 }
2300
2301 vcc.write();
2302 wf->execMask() = vcc.rawData();
2303 } // execute
2304 // --- Inst_VOPC__V_CMPX_TRU_F32 class methods ---
2305
2307 : Inst_VOPC(iFmt, "v_cmpx_tru_f32")
2308 {
2309 setFlag(ALU);
2310 setFlag(F32);
2311 setFlag(WritesEXEC);
2312 } // Inst_VOPC__V_CMPX_TRU_F32
2313
2315 {
2316 } // ~Inst_VOPC__V_CMPX_TRU_F32
2317
2318 // --- description from .arch file ---
2319 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
2320 void
2322 {
2323 Wavefront *wf = gpuDynInst->wavefront();
2324 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2325
2326 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2327 if (wf->execMask(lane)) {
2328 vcc.setBit(lane, 1);
2329 }
2330 }
2331
2332 vcc.write();
2333 wf->execMask() = vcc.rawData();
2334 } // execute
2335 // --- Inst_VOPC__V_CMP_F_F64 class methods ---
2336
2338 : Inst_VOPC(iFmt, "v_cmp_f_f64")
2339 {
2340 setFlag(ALU);
2341 setFlag(F64);
2342 } // Inst_VOPC__V_CMP_F_F64
2343
2345 {
2346 } // ~Inst_VOPC__V_CMP_F_F64
2347
2348 // --- description from .arch file ---
2349 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
2350 void
2352 {
2353 Wavefront *wf = gpuDynInst->wavefront();
2354 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2355
2356 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2357 if (wf->execMask(lane)) {
2358 vcc.setBit(lane, 0);
2359 }
2360 }
2361
2362 vcc.write();
2363 } // execute
2364 // --- Inst_VOPC__V_CMP_LT_F64 class methods ---
2365
2367 : Inst_VOPC(iFmt, "v_cmp_lt_f64")
2368 {
2369 setFlag(ALU);
2370 setFlag(F64);
2371 } // Inst_VOPC__V_CMP_LT_F64
2372
2374 {
2375 } // ~Inst_VOPC__V_CMP_LT_F64
2376
2377 // --- description from .arch file ---
2378 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
2379 void
2381 {
2382 Wavefront *wf = gpuDynInst->wavefront();
2383 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2384 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2385 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2386
2387 src0.readSrc();
2388 src1.read();
2389
2390 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2391 if (wf->execMask(lane)) {
2392 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
2393 }
2394 }
2395
2396 vcc.write();
2397 } // execute
2398 // --- Inst_VOPC__V_CMP_EQ_F64 class methods ---
2399
2401 : Inst_VOPC(iFmt, "v_cmp_eq_f64")
2402 {
2403 setFlag(ALU);
2404 setFlag(F64);
2405 } // Inst_VOPC__V_CMP_EQ_F64
2406
2408 {
2409 } // ~Inst_VOPC__V_CMP_EQ_F64
2410
2411 // --- description from .arch file ---
2412 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
2413 void
2415 {
2416 Wavefront *wf = gpuDynInst->wavefront();
2417 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2418 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2419 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2420
2421 src0.readSrc();
2422 src1.read();
2423
2424 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2425 if (wf->execMask(lane)) {
2426 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
2427 }
2428 }
2429
2430 vcc.write();
2431 } // execute
2432 // --- Inst_VOPC__V_CMP_LE_F64 class methods ---
2433
2435 : Inst_VOPC(iFmt, "v_cmp_le_f64")
2436 {
2437 setFlag(ALU);
2438 setFlag(F64);
2439 } // Inst_VOPC__V_CMP_LE_F64
2440
2442 {
2443 } // ~Inst_VOPC__V_CMP_LE_F64
2444
2445 // --- description from .arch file ---
2446 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
2447 void
2449 {
2450 Wavefront *wf = gpuDynInst->wavefront();
2451 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2452 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2453 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2454
2455 src0.readSrc();
2456 src1.read();
2457
2458 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2459 if (wf->execMask(lane)) {
2460 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
2461 }
2462 }
2463
2464 vcc.write();
2465 } // execute
2466 // --- Inst_VOPC__V_CMP_GT_F64 class methods ---
2467
2469 : Inst_VOPC(iFmt, "v_cmp_gt_f64")
2470 {
2471 setFlag(ALU);
2472 setFlag(F64);
2473 } // Inst_VOPC__V_CMP_GT_F64
2474
2476 {
2477 } // ~Inst_VOPC__V_CMP_GT_F64
2478
2479 // --- description from .arch file ---
2480 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
2481 void
2483 {
2484 Wavefront *wf = gpuDynInst->wavefront();
2485 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2486 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2487 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2488
2489 src0.readSrc();
2490 src1.read();
2491
2492 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2493 if (wf->execMask(lane)) {
2494 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
2495 }
2496 }
2497
2498 vcc.write();
2499 } // execute
2500 // --- Inst_VOPC__V_CMP_LG_F64 class methods ---
2501
2503 : Inst_VOPC(iFmt, "v_cmp_lg_f64")
2504 {
2505 setFlag(ALU);
2506 setFlag(F64);
2507 } // Inst_VOPC__V_CMP_LG_F64
2508
2510 {
2511 } // ~Inst_VOPC__V_CMP_LG_F64
2512
2513 // --- description from .arch file ---
2514 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
2515 void
2517 {
2518 Wavefront *wf = gpuDynInst->wavefront();
2519 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2520 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2521 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2522
2523 src0.readSrc();
2524 src1.read();
2525
2526 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2527 if (wf->execMask(lane)) {
2528 vcc.setBit(lane, (src0[lane] < src1[lane]
2529 || src0[lane] > src1[lane]) ? 1 : 0);
2530 }
2531 }
2532
2533 vcc.write();
2534 } // execute
2535 // --- Inst_VOPC__V_CMP_GE_F64 class methods ---
2536
2538 : Inst_VOPC(iFmt, "v_cmp_ge_f64")
2539 {
2540 setFlag(ALU);
2541 setFlag(F64);
2542 } // Inst_VOPC__V_CMP_GE_F64
2543
2545 {
2546 } // ~Inst_VOPC__V_CMP_GE_F64
2547
2548 // --- description from .arch file ---
2549 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
2550 void
2552 {
2553 Wavefront *wf = gpuDynInst->wavefront();
2554 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2555 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2556 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2557
2558 src0.readSrc();
2559 src1.read();
2560
2561 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2562 if (wf->execMask(lane)) {
2563 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
2564 }
2565 }
2566
2567 vcc.write();
2568 } // execute
2569 // --- Inst_VOPC__V_CMP_O_F64 class methods ---
2570
2572 : Inst_VOPC(iFmt, "v_cmp_o_f64")
2573 {
2574 setFlag(ALU);
2575 setFlag(F64);
2576 } // Inst_VOPC__V_CMP_O_F64
2577
2579 {
2580 } // ~Inst_VOPC__V_CMP_O_F64
2581
2582 // --- description from .arch file ---
2583 // D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC encoding.
2584 void
2586 {
2587 Wavefront *wf = gpuDynInst->wavefront();
2588 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2589 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2590 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2591
2592 src0.readSrc();
2593 src1.read();
2594
2595 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2596 if (wf->execMask(lane)) {
2597 vcc.setBit(lane, (!std::isnan(src0[lane])
2598 && !std::isnan(src1[lane])) ? 1 : 0);
2599 }
2600 }
2601
2602 vcc.write();
2603 } // execute
2604 // --- Inst_VOPC__V_CMP_U_F64 class methods ---
2605
2607 : Inst_VOPC(iFmt, "v_cmp_u_f64")
2608 {
2609 setFlag(ALU);
2610 setFlag(F64);
2611 } // Inst_VOPC__V_CMP_U_F64
2612
2614 {
2615 } // ~Inst_VOPC__V_CMP_U_F64
2616
2617 // --- description from .arch file ---
2618 // D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC encoding.
2619 void
2621 {
2622 Wavefront *wf = gpuDynInst->wavefront();
2623 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2624 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2625 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2626
2627 src0.readSrc();
2628 src1.read();
2629
2630 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2631 if (wf->execMask(lane)) {
2632 vcc.setBit(lane, (std::isnan(src0[lane])
2633 || std::isnan(src1[lane])) ? 1 : 0);
2634 }
2635 }
2636
2637 vcc.write();
2638 } // execute
2639 // --- Inst_VOPC__V_CMP_NGE_F64 class methods ---
2640
2642 : Inst_VOPC(iFmt, "v_cmp_nge_f64")
2643 {
2644 setFlag(ALU);
2645 setFlag(F64);
2646 } // Inst_VOPC__V_CMP_NGE_F64
2647
2649 {
2650 } // ~Inst_VOPC__V_CMP_NGE_F64
2651
2652 // --- description from .arch file ---
2653 // D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
2654 void
2656 {
2657 Wavefront *wf = gpuDynInst->wavefront();
2658 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2659 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2660 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2661
2662 src0.readSrc();
2663 src1.read();
2664
2665 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2666 if (wf->execMask(lane)) {
2667 vcc.setBit(lane, !(src0[lane] >= src1[lane]) ? 1 : 0);
2668 }
2669 }
2670
2671 vcc.write();
2672 } // execute
2673 // --- Inst_VOPC__V_CMP_NLG_F64 class methods ---
2674
2676 : Inst_VOPC(iFmt, "v_cmp_nlg_f64")
2677 {
2678 setFlag(ALU);
2679 setFlag(F64);
2680 } // Inst_VOPC__V_CMP_NLG_F64
2681
2683 {
2684 } // ~Inst_VOPC__V_CMP_NLG_F64
2685
2686 // --- description from .arch file ---
2687 // D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
2688 void
2690 {
2691 Wavefront *wf = gpuDynInst->wavefront();
2692 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2693 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2694 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2695
2696 src0.readSrc();
2697 src1.read();
2698
2699 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2700 if (wf->execMask(lane)) {
2701 vcc.setBit(lane, !(src0[lane] < src1[lane]
2702 || src0[lane] > src1[lane]) ? 1 : 0);
2703 }
2704 }
2705
2706 vcc.write();
2707 } // execute
2708 // --- Inst_VOPC__V_CMP_NGT_F64 class methods ---
2709
2711 : Inst_VOPC(iFmt, "v_cmp_ngt_f64")
2712 {
2713 setFlag(ALU);
2714 setFlag(F64);
2715 } // Inst_VOPC__V_CMP_NGT_F64
2716
2718 {
2719 } // ~Inst_VOPC__V_CMP_NGT_F64
2720
2721 // --- description from .arch file ---
2722 // D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
2723 void
2725 {
2726 Wavefront *wf = gpuDynInst->wavefront();
2727 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2728 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2729 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2730
2731 src0.readSrc();
2732 src1.read();
2733
2734 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2735 if (wf->execMask(lane)) {
2736 vcc.setBit(lane, !(src0[lane] > src1[lane]) ? 1 : 0);
2737 }
2738 }
2739
2740 vcc.write();
2741 } // execute
2742 // --- Inst_VOPC__V_CMP_NLE_F64 class methods ---
2743
2745 : Inst_VOPC(iFmt, "v_cmp_nle_f64")
2746 {
2747 setFlag(ALU);
2748 setFlag(F64);
2749 } // Inst_VOPC__V_CMP_NLE_F64
2750
2752 {
2753 } // ~Inst_VOPC__V_CMP_NLE_F64
2754
2755 // --- description from .arch file ---
2756 // D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
2757 void
2759 {
2760 Wavefront *wf = gpuDynInst->wavefront();
2761 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2762 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2763 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2764
2765 src0.readSrc();
2766 src1.read();
2767
2768 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2769 if (wf->execMask(lane)) {
2770 vcc.setBit(lane, !(src0[lane] <= src1[lane]) ? 1 : 0);
2771 }
2772 }
2773
2774 vcc.write();
2775 } // execute
2776 // --- Inst_VOPC__V_CMP_NEQ_F64 class methods ---
2777
2779 : Inst_VOPC(iFmt, "v_cmp_neq_f64")
2780 {
2781 setFlag(ALU);
2782 setFlag(F64);
2783 } // Inst_VOPC__V_CMP_NEQ_F64
2784
2786 {
2787 } // ~Inst_VOPC__V_CMP_NEQ_F64
2788
2789 // --- description from .arch file ---
2790 // D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
2791 void
2793 {
2794 Wavefront *wf = gpuDynInst->wavefront();
2795 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2796 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2797 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2798
2799 src0.readSrc();
2800 src1.read();
2801
2802 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2803 if (wf->execMask(lane)) {
2804 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
2805 }
2806 }
2807
2808 vcc.write();
2809 } // execute
2810 // --- Inst_VOPC__V_CMP_NLT_F64 class methods ---
2811
2813 : Inst_VOPC(iFmt, "v_cmp_nlt_f64")
2814 {
2815 setFlag(ALU);
2816 setFlag(F64);
2817 } // Inst_VOPC__V_CMP_NLT_F64
2818
2820 {
2821 } // ~Inst_VOPC__V_CMP_NLT_F64
2822
2823 // --- description from .arch file ---
2824 // D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
2825 void
2827 {
2828 Wavefront *wf = gpuDynInst->wavefront();
2829 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2830 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2831 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2832
2833 src0.readSrc();
2834 src1.read();
2835
2836 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2837 if (wf->execMask(lane)) {
2838 vcc.setBit(lane, !(src0[lane] < src1[lane]) ? 1 : 0);
2839 }
2840 }
2841
2842 vcc.write();
2843 } // execute
2844 // --- Inst_VOPC__V_CMP_TRU_F64 class methods ---
2845
2847 : Inst_VOPC(iFmt, "v_cmp_tru_f64")
2848 {
2849 setFlag(ALU);
2850 setFlag(F64);
2851 } // Inst_VOPC__V_CMP_TRU_F64
2852
2854 {
2855 } // ~Inst_VOPC__V_CMP_TRU_F64
2856
2857 // --- description from .arch file ---
2858 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
2859 void
2861 {
2862 Wavefront *wf = gpuDynInst->wavefront();
2863 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2864
2865 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2866 if (wf->execMask(lane)) {
2867 vcc.setBit(lane, 1);
2868 }
2869 }
2870
2871 vcc.write();
2872 } // execute
2873 // --- Inst_VOPC__V_CMPX_F_F64 class methods ---
2874
2876 : Inst_VOPC(iFmt, "v_cmpx_f_f64")
2877 {
2878 setFlag(ALU);
2879 setFlag(F64);
2880 setFlag(WritesEXEC);
2881 } // Inst_VOPC__V_CMPX_F_F64
2882
2884 {
2885 } // ~Inst_VOPC__V_CMPX_F_F64
2886
2887 // --- description from .arch file ---
2888 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
2889 void
2891 {
2892 Wavefront *wf = gpuDynInst->wavefront();
2893 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2894
2895 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2896 if (wf->execMask(lane)) {
2897 vcc.setBit(lane, 0);
2898 }
2899 }
2900
2901 vcc.write();
2902 wf->execMask() = vcc.rawData();
2903 } // execute
2904 // --- Inst_VOPC__V_CMPX_LT_F64 class methods ---
2905
2907 : Inst_VOPC(iFmt, "v_cmpx_lt_f64")
2908 {
2909 setFlag(ALU);
2910 setFlag(F64);
2911 setFlag(WritesEXEC);
2912 } // Inst_VOPC__V_CMPX_LT_F64
2913
2915 {
2916 } // ~Inst_VOPC__V_CMPX_LT_F64
2917
2918 // --- description from .arch file ---
2919 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
2920 void
2922 {
2923 Wavefront *wf = gpuDynInst->wavefront();
2924 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2925 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2926 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2927
2928 src0.readSrc();
2929 src1.read();
2930
2931 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2932 if (wf->execMask(lane)) {
2933 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
2934 }
2935 }
2936
2937 vcc.write();
2938 wf->execMask() = vcc.rawData();
2939 } // execute
2940 // --- Inst_VOPC__V_CMPX_EQ_F64 class methods ---
2941
2943 : Inst_VOPC(iFmt, "v_cmpx_eq_f64")
2944 {
2945 setFlag(ALU);
2946 setFlag(F64);
2947 setFlag(WritesEXEC);
2948 } // Inst_VOPC__V_CMPX_EQ_F64
2949
2951 {
2952 } // ~Inst_VOPC__V_CMPX_EQ_F64
2953
2954 // --- description from .arch file ---
2955 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
2956 void
2958 {
2959 Wavefront *wf = gpuDynInst->wavefront();
2960 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2961 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2962 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2963
2964 src0.readSrc();
2965 src1.read();
2966
2967 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
2968 if (wf->execMask(lane)) {
2969 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
2970 }
2971 }
2972
2973 vcc.write();
2974 wf->execMask() = vcc.rawData();
2975 } // execute
2976 // --- Inst_VOPC__V_CMPX_LE_F64 class methods ---
2977
2979 : Inst_VOPC(iFmt, "v_cmpx_le_f64")
2980 {
2981 setFlag(ALU);
2982 setFlag(F64);
2983 setFlag(WritesEXEC);
2984 } // Inst_VOPC__V_CMPX_LE_F64
2985
2987 {
2988 } // ~Inst_VOPC__V_CMPX_LE_F64
2989
2990 // --- description from .arch file ---
2991 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
2992 void
2994 {
2995 Wavefront *wf = gpuDynInst->wavefront();
2996 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
2997 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
2998 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
2999
3000 src0.readSrc();
3001 src1.read();
3002
3003 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3004 if (wf->execMask(lane)) {
3005 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
3006 }
3007 }
3008
3009 wf->execMask() = vcc.rawData();
3010 vcc.write();
3011 } // execute
3012 // --- Inst_VOPC__V_CMPX_GT_F64 class methods ---
3013
3015 : Inst_VOPC(iFmt, "v_cmpx_gt_f64")
3016 {
3017 setFlag(ALU);
3018 setFlag(F64);
3019 setFlag(WritesEXEC);
3020 } // Inst_VOPC__V_CMPX_GT_F64
3021
3023 {
3024 } // ~Inst_VOPC__V_CMPX_GT_F64
3025
3026 // --- description from .arch file ---
3027 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
3028 void
3030 {
3031 Wavefront *wf = gpuDynInst->wavefront();
3032 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3033 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3034 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3035
3036 src0.readSrc();
3037 src1.read();
3038
3039 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3040 if (wf->execMask(lane)) {
3041 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
3042 }
3043 }
3044
3045 wf->execMask() = vcc.rawData();
3046 vcc.write();
3047 } // execute
3048 // --- Inst_VOPC__V_CMPX_LG_F64 class methods ---
3049
3051 : Inst_VOPC(iFmt, "v_cmpx_lg_f64")
3052 {
3053 setFlag(ALU);
3054 setFlag(F64);
3055 setFlag(WritesEXEC);
3056 } // Inst_VOPC__V_CMPX_LG_F64
3057
3059 {
3060 } // ~Inst_VOPC__V_CMPX_LG_F64
3061
3062 // --- description from .arch file ---
3063 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
3064 void
3066 {
3067 Wavefront *wf = gpuDynInst->wavefront();
3068 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3069 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3070 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3071
3072 src0.readSrc();
3073 src1.read();
3074
3075 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3076 if (wf->execMask(lane)) {
3077 vcc.setBit(lane, (src0[lane] < src1[lane]
3078 || src0[lane] > src1[lane]) ? 1 : 0);
3079 }
3080 }
3081
3082 wf->execMask() = vcc.rawData();
3083 vcc.write();
3084 } // execute
3085 // --- Inst_VOPC__V_CMPX_GE_F64 class methods ---
3086
3088 : Inst_VOPC(iFmt, "v_cmpx_ge_f64")
3089 {
3090 setFlag(ALU);
3091 setFlag(F64);
3092 setFlag(WritesEXEC);
3093 } // Inst_VOPC__V_CMPX_GE_F64
3094
3096 {
3097 } // ~Inst_VOPC__V_CMPX_GE_F64
3098
3099 // --- description from .arch file ---
3100 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
3101 void
3103 {
3104 Wavefront *wf = gpuDynInst->wavefront();
3105 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3106 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3107 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3108
3109 src0.readSrc();
3110 src1.read();
3111
3112 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3113 if (wf->execMask(lane)) {
3114 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
3115 }
3116 }
3117
3118 wf->execMask() = vcc.rawData();
3119 vcc.write();
3120 } // execute
3121 // --- Inst_VOPC__V_CMPX_O_F64 class methods ---
3122
3124 : Inst_VOPC(iFmt, "v_cmpx_o_f64")
3125 {
3126 setFlag(ALU);
3127 setFlag(F64);
3128 setFlag(WritesEXEC);
3129 } // Inst_VOPC__V_CMPX_O_F64
3130
3132 {
3133 } // ~Inst_VOPC__V_CMPX_O_F64
3134
3135 // --- description from .arch file ---
3136 // EXEC,D.u64[threadID] = (!isNan(S0) && !isNan(S1)); D = VCC in VOPC
3137 // encoding.
3138 void
3140 {
3141 Wavefront *wf = gpuDynInst->wavefront();
3142 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3143 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3144 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3145
3146 src0.readSrc();
3147 src1.read();
3148
3149 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3150 if (wf->execMask(lane)) {
3151 vcc.setBit(lane, (!std::isnan(src0[lane])
3152 && !std::isnan(src1[lane])) ? 1 : 0);
3153 }
3154 }
3155
3156 wf->execMask() = vcc.rawData();
3157 vcc.write();
3158 } // execute
3159 // --- Inst_VOPC__V_CMPX_U_F64 class methods ---
3160
3162 : Inst_VOPC(iFmt, "v_cmpx_u_f64")
3163 {
3164 setFlag(ALU);
3165 setFlag(F64);
3166 setFlag(WritesEXEC);
3167 } // Inst_VOPC__V_CMPX_U_F64
3168
3170 {
3171 } // ~Inst_VOPC__V_CMPX_U_F64
3172
3173 // --- description from .arch file ---
3174 // EXEC,D.u64[threadID] = (isNan(S0) || isNan(S1)); D = VCC in VOPC
3175 // encoding.
3176 void
3178 {
3179 Wavefront *wf = gpuDynInst->wavefront();
3180 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3181 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3182 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3183
3184 src0.readSrc();
3185 src1.read();
3186
3187 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3188 if (wf->execMask(lane)) {
3189 vcc.setBit(lane, (std::isnan(src0[lane])
3190 || std::isnan(src1[lane])) ? 1 : 0);
3191 }
3192 }
3193
3194 wf->execMask() = vcc.rawData();
3195 vcc.write();
3196 } // execute
3197 // --- Inst_VOPC__V_CMPX_NGE_F64 class methods ---
3198
3200 : Inst_VOPC(iFmt, "v_cmpx_nge_f64")
3201 {
3202 setFlag(ALU);
3203 setFlag(F64);
3204 setFlag(WritesEXEC);
3205 } // Inst_VOPC__V_CMPX_NGE_F64
3206
3208 {
3209 } // ~Inst_VOPC__V_CMPX_NGE_F64
3210
3211 // --- description from .arch file ---
3212 // EXEC,D.u64[threadID] = !(S0 >= S1); D = VCC in VOPC encoding.
3213 void
3215 {
3216 Wavefront *wf = gpuDynInst->wavefront();
3217 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3218 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3219 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3220
3221 src0.readSrc();
3222 src1.read();
3223
3224 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3225 if (wf->execMask(lane)) {
3226 vcc.setBit(lane, !(src0[lane] >= src1[lane]) ? 1 : 0);
3227 }
3228 }
3229
3230 wf->execMask() = vcc.rawData();
3231 vcc.write();
3232 } // execute
3233 // --- Inst_VOPC__V_CMPX_NLG_F64 class methods ---
3234
3236 : Inst_VOPC(iFmt, "v_cmpx_nlg_f64")
3237 {
3238 setFlag(ALU);
3239 setFlag(F64);
3240 setFlag(WritesEXEC);
3241 } // Inst_VOPC__V_CMPX_NLG_F64
3242
3244 {
3245 } // ~Inst_VOPC__V_CMPX_NLG_F64
3246
3247 // --- description from .arch file ---
3248 // EXEC,D.u64[threadID] = !(S0 <> S1); D = VCC in VOPC encoding.
3249 void
3251 {
3252 Wavefront *wf = gpuDynInst->wavefront();
3253 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3254 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3255 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3256
3257 src0.readSrc();
3258 src1.read();
3259
3260 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3261 if (wf->execMask(lane)) {
3262 vcc.setBit(lane, !(src0[lane] < src1[lane]
3263 || src0[lane] > src1[lane]) ? 1 : 0);
3264 }
3265 }
3266
3267 wf->execMask() = vcc.rawData();
3268 vcc.write();
3269 } // execute
3270 // --- Inst_VOPC__V_CMPX_NGT_F64 class methods ---
3271
3273 : Inst_VOPC(iFmt, "v_cmpx_ngt_f64")
3274 {
3275 setFlag(ALU);
3276 setFlag(F64);
3277 setFlag(WritesEXEC);
3278 } // Inst_VOPC__V_CMPX_NGT_F64
3279
3281 {
3282 } // ~Inst_VOPC__V_CMPX_NGT_F64
3283
3284 // --- description from .arch file ---
3285 // EXEC,D.u64[threadID] = !(S0 > S1); D = VCC in VOPC encoding.
3286 void
3288 {
3289 Wavefront *wf = gpuDynInst->wavefront();
3290 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3291 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3292 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3293
3294 src0.readSrc();
3295 src1.read();
3296
3297 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3298 if (wf->execMask(lane)) {
3299 vcc.setBit(lane, !(src0[lane] > src1[lane]) ? 1 : 0);
3300 }
3301 }
3302
3303 wf->execMask() = vcc.rawData();
3304 vcc.write();
3305 } // execute
3306 // --- Inst_VOPC__V_CMPX_NLE_F64 class methods ---
3307
3309 : Inst_VOPC(iFmt, "v_cmpx_nle_f64")
3310 {
3311 setFlag(ALU);
3312 setFlag(F64);
3313 setFlag(WritesEXEC);
3314 } // Inst_VOPC__V_CMPX_NLE_F64
3315
3317 {
3318 } // ~Inst_VOPC__V_CMPX_NLE_F64
3319
3320 // --- description from .arch file ---
3321 // EXEC,D.u64[threadID] = !(S0 <= S1); D = VCC in VOPC encoding.
3322 void
3324 {
3325 Wavefront *wf = gpuDynInst->wavefront();
3326 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3327 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3328 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3329
3330 src0.readSrc();
3331 src1.read();
3332
3333 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3334 if (wf->execMask(lane)) {
3335 vcc.setBit(lane, !(src0[lane] <= src1[lane]) ? 1 : 0);
3336 }
3337 }
3338
3339 wf->execMask() = vcc.rawData();
3340 vcc.write();
3341 } // execute
3342 // --- Inst_VOPC__V_CMPX_NEQ_F64 class methods ---
3343
3345 : Inst_VOPC(iFmt, "v_cmpx_neq_f64")
3346 {
3347 setFlag(ALU);
3348 setFlag(F64);
3349 setFlag(WritesEXEC);
3350 } // Inst_VOPC__V_CMPX_NEQ_F64
3351
3353 {
3354 } // ~Inst_VOPC__V_CMPX_NEQ_F64
3355
3356 // --- description from .arch file ---
3357 // EXEC,D.u64[threadID] = !(S0 == S1); D = VCC in VOPC encoding.
3358 void
3360 {
3361 Wavefront *wf = gpuDynInst->wavefront();
3362 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3363 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3364 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3365
3366 src0.readSrc();
3367 src1.read();
3368
3369 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3370 if (wf->execMask(lane)) {
3371 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
3372 }
3373 }
3374
3375 wf->execMask() = vcc.rawData();
3376 vcc.write();
3377 } // execute
3378 // --- Inst_VOPC__V_CMPX_NLT_F64 class methods ---
3379
3381 : Inst_VOPC(iFmt, "v_cmpx_nlt_f64")
3382 {
3383 setFlag(ALU);
3384 setFlag(F64);
3385 setFlag(WritesEXEC);
3386 } // Inst_VOPC__V_CMPX_NLT_F64
3387
3389 {
3390 } // ~Inst_VOPC__V_CMPX_NLT_F64
3391
3392 // --- description from .arch file ---
3393 // EXEC,D.u64[threadID] = !(S0 < S1); D = VCC in VOPC encoding.
3394 void
3396 {
3397 Wavefront *wf = gpuDynInst->wavefront();
3398 ConstVecOperandF64 src0(gpuDynInst, instData.SRC0);
3399 ConstVecOperandF64 src1(gpuDynInst, instData.VSRC1);
3400 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3401
3402 src0.readSrc();
3403 src1.read();
3404
3405 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3406 if (wf->execMask(lane)) {
3407 vcc.setBit(lane, !(src0[lane] < src1[lane]) ? 1 : 0);
3408 }
3409 }
3410
3411 wf->execMask() = vcc.rawData();
3412 vcc.write();
3413 } // execute
3414 // --- Inst_VOPC__V_CMPX_TRU_F64 class methods ---
3415
3417 : Inst_VOPC(iFmt, "v_cmpx_tru_f64")
3418 {
3419 setFlag(ALU);
3420 setFlag(F64);
3421 setFlag(WritesEXEC);
3422 } // Inst_VOPC__V_CMPX_TRU_F64
3423
3425 {
3426 } // ~Inst_VOPC__V_CMPX_TRU_F64
3427
3428 // --- description from .arch file ---
3429 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
3430 void
3432 {
3433 Wavefront *wf = gpuDynInst->wavefront();
3434 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3435
3436 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3437 if (wf->execMask(lane)) {
3438 vcc.setBit(lane, 1);
3439 }
3440 }
3441
3442 wf->execMask() = vcc.rawData();
3443 vcc.write();
3444 } // execute
3445 // --- Inst_VOPC__V_CMP_F_I16 class methods ---
3446
3448 : Inst_VOPC(iFmt, "v_cmp_f_i16")
3449 {
3450 setFlag(ALU);
3451 } // Inst_VOPC__V_CMP_F_I16
3452
3454 {
3455 } // ~Inst_VOPC__V_CMP_F_I16
3456
3457 // --- description from .arch file ---
3458 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
3459 void
3461 {
3462 Wavefront *wf = gpuDynInst->wavefront();
3463 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3464
3465 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3466 if (wf->execMask(lane)) {
3467 vcc.setBit(lane, 0);
3468 }
3469 }
3470
3471 vcc.write();
3472 } // execute
3473 // --- Inst_VOPC__V_CMP_LT_I16 class methods ---
3474
3476 : Inst_VOPC(iFmt, "v_cmp_lt_i16")
3477 {
3478 setFlag(ALU);
3479 } // Inst_VOPC__V_CMP_LT_I16
3480
3482 {
3483 } // ~Inst_VOPC__V_CMP_LT_I16
3484
3485 // --- description from .arch file ---
3486 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
3487 void
3489 {
3490 Wavefront *wf = gpuDynInst->wavefront();
3491 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3492 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3493 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3494
3495 src0.readSrc();
3496 src1.read();
3497
3498 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3499 if (wf->execMask(lane)) {
3500 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
3501 }
3502 }
3503
3504 vcc.write();
3505 } // execute
3506 // --- Inst_VOPC__V_CMP_EQ_I16 class methods ---
3507
3509 : Inst_VOPC(iFmt, "v_cmp_eq_i16")
3510 {
3511 setFlag(ALU);
3512 } // Inst_VOPC__V_CMP_EQ_I16
3513
3515 {
3516 } // ~Inst_VOPC__V_CMP_EQ_I16
3517
3518 // --- description from .arch file ---
3519 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
3520 void
3522 {
3523 Wavefront *wf = gpuDynInst->wavefront();
3524 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3525 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3526 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3527
3528 src0.readSrc();
3529 src1.read();
3530
3531 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3532 if (wf->execMask(lane)) {
3533 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
3534 }
3535 }
3536
3537 vcc.write();
3538 } // execute
3539 // --- Inst_VOPC__V_CMP_LE_I16 class methods ---
3540
3542 : Inst_VOPC(iFmt, "v_cmp_le_i16")
3543 {
3544 setFlag(ALU);
3545 } // Inst_VOPC__V_CMP_LE_I16
3546
3548 {
3549 } // ~Inst_VOPC__V_CMP_LE_I16
3550
3551 // --- description from .arch file ---
3552 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
3553 void
3555 {
3556 Wavefront *wf = gpuDynInst->wavefront();
3557 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3558 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3559 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3560
3561 src0.readSrc();
3562 src1.read();
3563
3564 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3565 if (wf->execMask(lane)) {
3566 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
3567 }
3568 }
3569
3570 vcc.write();
3571 } // execute
3572 // --- Inst_VOPC__V_CMP_GT_I16 class methods ---
3573
3575 : Inst_VOPC(iFmt, "v_cmp_gt_i16")
3576 {
3577 setFlag(ALU);
3578 } // Inst_VOPC__V_CMP_GT_I16
3579
3581 {
3582 } // ~Inst_VOPC__V_CMP_GT_I16
3583
3584 // --- description from .arch file ---
3585 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
3586 void
3588 {
3589 Wavefront *wf = gpuDynInst->wavefront();
3590 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3591 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3592 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3593
3594 src0.readSrc();
3595 src1.read();
3596
3597 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3598 if (wf->execMask(lane)) {
3599 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
3600 }
3601 }
3602
3603 vcc.write();
3604 } // execute
3605 // --- Inst_VOPC__V_CMP_NE_I16 class methods ---
3606
3608 : Inst_VOPC(iFmt, "v_cmp_ne_i16")
3609 {
3610 setFlag(ALU);
3611 } // Inst_VOPC__V_CMP_NE_I16
3612
3614 {
3615 } // ~Inst_VOPC__V_CMP_NE_I16
3616
3617 // --- description from .arch file ---
3618 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
3619 void
3621 {
3622 Wavefront *wf = gpuDynInst->wavefront();
3623 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3624 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3625 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3626
3627 src0.readSrc();
3628 src1.read();
3629
3630 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3631 if (wf->execMask(lane)) {
3632 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
3633 }
3634 }
3635
3636 vcc.write();
3637 } // execute
3638 // --- Inst_VOPC__V_CMP_GE_I16 class methods ---
3639
3641 : Inst_VOPC(iFmt, "v_cmp_ge_i16")
3642 {
3643 setFlag(ALU);
3644 } // Inst_VOPC__V_CMP_GE_I16
3645
3647 {
3648 } // ~Inst_VOPC__V_CMP_GE_I16
3649
3650 // --- description from .arch file ---
3651 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
3652 void
3654 {
3655 Wavefront *wf = gpuDynInst->wavefront();
3656 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
3657 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
3658 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3659
3660 src0.readSrc();
3661 src1.read();
3662
3663 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3664 if (wf->execMask(lane)) {
3665 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
3666 }
3667 }
3668
3669 vcc.write();
3670 } // execute
3671 // --- Inst_VOPC__V_CMP_T_I16 class methods ---
3672
3674 : Inst_VOPC(iFmt, "v_cmp_t_i16")
3675 {
3676 setFlag(ALU);
3677 } // Inst_VOPC__V_CMP_T_I16
3678
3680 {
3681 } // ~Inst_VOPC__V_CMP_T_I16
3682
3683 // --- description from .arch file ---
3684 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
3685 void
3687 {
3688 Wavefront *wf = gpuDynInst->wavefront();
3689 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3690
3691 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3692 if (wf->execMask(lane)) {
3693 vcc.setBit(lane, 1);
3694 }
3695 }
3696
3697 vcc.write();
3698 } // execute
3699 // --- Inst_VOPC__V_CMP_F_U16 class methods ---
3700
3702 : Inst_VOPC(iFmt, "v_cmp_f_u16")
3703 {
3704 setFlag(ALU);
3705 } // Inst_VOPC__V_CMP_F_U16
3706
3708 {
3709 } // ~Inst_VOPC__V_CMP_F_U16
3710
3711 // --- description from .arch file ---
3712 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
3713 void
3715 {
3716 Wavefront *wf = gpuDynInst->wavefront();
3717 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3718
3719 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3720 if (wf->execMask(lane)) {
3721 vcc.setBit(lane, 0);
3722 }
3723 }
3724
3725 vcc.write();
3726 } // execute
3727 // --- Inst_VOPC__V_CMP_LT_U16 class methods ---
3728
3730 : Inst_VOPC(iFmt, "v_cmp_lt_u16")
3731 {
3732 setFlag(ALU);
3733 } // Inst_VOPC__V_CMP_LT_U16
3734
3736 {
3737 } // ~Inst_VOPC__V_CMP_LT_U16
3738
3739 // --- description from .arch file ---
3740 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
3741 void
3743 {
3744 Wavefront *wf = gpuDynInst->wavefront();
3745 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3746 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3747 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3748
3749 src0.readSrc();
3750 src1.read();
3751
3752 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3753 if (wf->execMask(lane)) {
3754 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
3755 }
3756 }
3757
3758 vcc.write();
3759 } // execute
3760 // --- Inst_VOPC__V_CMP_EQ_U16 class methods ---
3761
3763 : Inst_VOPC(iFmt, "v_cmp_eq_u16")
3764 {
3765 setFlag(ALU);
3766 } // Inst_VOPC__V_CMP_EQ_U16
3767
3769 {
3770 } // ~Inst_VOPC__V_CMP_EQ_U16
3771
3772 // --- description from .arch file ---
3773 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
3774 void
3776 {
3777 Wavefront *wf = gpuDynInst->wavefront();
3778 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3779 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3780 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3781
3782 src0.readSrc();
3783 src1.read();
3784
3785 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3786 if (wf->execMask(lane)) {
3787 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
3788 }
3789 }
3790
3791 vcc.write();
3792 } // execute
3793 // --- Inst_VOPC__V_CMP_LE_U16 class methods ---
3794
3796 : Inst_VOPC(iFmt, "v_cmp_le_u16")
3797 {
3798 setFlag(ALU);
3799 } // Inst_VOPC__V_CMP_LE_U16
3800
3802 {
3803 } // ~Inst_VOPC__V_CMP_LE_U16
3804
3805 // --- description from .arch file ---
3806 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
3807 void
3809 {
3810 Wavefront *wf = gpuDynInst->wavefront();
3811 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3812 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3813 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3814
3815 src0.readSrc();
3816 src1.read();
3817
3818 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3819 if (wf->execMask(lane)) {
3820 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
3821 }
3822 }
3823
3824 vcc.write();
3825 } // execute
3826 // --- Inst_VOPC__V_CMP_GT_U16 class methods ---
3827
3829 : Inst_VOPC(iFmt, "v_cmp_gt_u16")
3830 {
3831 setFlag(ALU);
3832 } // Inst_VOPC__V_CMP_GT_U16
3833
3835 {
3836 } // ~Inst_VOPC__V_CMP_GT_U16
3837
3838 // --- description from .arch file ---
3839 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
3840 void
3842 {
3843 Wavefront *wf = gpuDynInst->wavefront();
3844 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3845 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3846 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3847
3848 src0.readSrc();
3849 src1.read();
3850
3851 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3852 if (wf->execMask(lane)) {
3853 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
3854 }
3855 }
3856
3857 vcc.write();
3858 } // execute
3859 // --- Inst_VOPC__V_CMP_NE_U16 class methods ---
3860
3862 : Inst_VOPC(iFmt, "v_cmp_ne_u16")
3863 {
3864 setFlag(ALU);
3865 } // Inst_VOPC__V_CMP_NE_U16
3866
3868 {
3869 } // ~Inst_VOPC__V_CMP_NE_U16
3870
3871 // --- description from .arch file ---
3872 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
3873 void
3875 {
3876 Wavefront *wf = gpuDynInst->wavefront();
3877 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3878 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3879 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3880
3881 src0.readSrc();
3882 src1.read();
3883
3884 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3885 if (wf->execMask(lane)) {
3886 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
3887 }
3888 }
3889
3890 vcc.write();
3891 } // execute
3892 // --- Inst_VOPC__V_CMP_GE_U16 class methods ---
3893
3895 : Inst_VOPC(iFmt, "v_cmp_ge_u16")
3896 {
3897 setFlag(ALU);
3898 } // Inst_VOPC__V_CMP_GE_U16
3899
3901 {
3902 } // ~Inst_VOPC__V_CMP_GE_U16
3903
3904 // --- description from .arch file ---
3905 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
3906 void
3908 {
3909 Wavefront *wf = gpuDynInst->wavefront();
3910 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
3911 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
3912 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3913
3914 src0.readSrc();
3915 src1.read();
3916
3917 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3918 if (wf->execMask(lane)) {
3919 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
3920 }
3921 }
3922
3923 vcc.write();
3924 } // execute
3925 // --- Inst_VOPC__V_CMP_T_U16 class methods ---
3926
3928 : Inst_VOPC(iFmt, "v_cmp_t_u16")
3929 {
3930 setFlag(ALU);
3931 } // Inst_VOPC__V_CMP_T_U16
3932
3934 {
3935 } // ~Inst_VOPC__V_CMP_T_U16
3936
3937 // --- description from .arch file ---
3938 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
3939 void
3941 {
3942 Wavefront *wf = gpuDynInst->wavefront();
3943 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3944
3945 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3946 if (wf->execMask(lane)) {
3947 vcc.setBit(lane, 1);
3948 }
3949 }
3950
3951 vcc.write();
3952 } // execute
3953 // --- Inst_VOPC__V_CMPX_F_I16 class methods ---
3954
3956 : Inst_VOPC(iFmt, "v_cmpx_f_i16")
3957 {
3958 setFlag(ALU);
3959 setFlag(WritesEXEC);
3960 } // Inst_VOPC__V_CMPX_F_I16
3961
3963 {
3964 } // ~Inst_VOPC__V_CMPX_F_I16
3965
3966 // --- description from .arch file ---
3967 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
3968 void
3970 {
3971 Wavefront *wf = gpuDynInst->wavefront();
3972 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
3973
3974 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
3975 if (wf->execMask(lane)) {
3976 vcc.setBit(lane, 0);
3977 }
3978 }
3979
3980 wf->execMask() = vcc.rawData();
3981 vcc.write();
3982 } // execute
3983 // --- Inst_VOPC__V_CMPX_LT_I16 class methods ---
3984
3986 : Inst_VOPC(iFmt, "v_cmpx_lt_i16")
3987 {
3988 setFlag(ALU);
3989 setFlag(WritesEXEC);
3990 } // Inst_VOPC__V_CMPX_LT_I16
3991
3993 {
3994 } // ~Inst_VOPC__V_CMPX_LT_I16
3995
3996 // --- description from .arch file ---
3997 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
3998 void
4000 {
4001 Wavefront *wf = gpuDynInst->wavefront();
4002 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4003 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4004 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4005
4006 src0.readSrc();
4007 src1.read();
4008
4009 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4010 if (wf->execMask(lane)) {
4011 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
4012 }
4013 }
4014
4015 wf->execMask() = vcc.rawData();
4016 vcc.write();
4017 } // execute
4018 // --- Inst_VOPC__V_CMPX_EQ_I16 class methods ---
4019
4021 : Inst_VOPC(iFmt, "v_cmpx_eq_i16")
4022 {
4023 setFlag(ALU);
4024 setFlag(WritesEXEC);
4025 } // Inst_VOPC__V_CMPX_EQ_I16
4026
4028 {
4029 } // ~Inst_VOPC__V_CMPX_EQ_I16
4030
4031 // --- description from .arch file ---
4032 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
4033 void
4035 {
4036 Wavefront *wf = gpuDynInst->wavefront();
4037 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4038 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4039 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4040
4041 src0.readSrc();
4042 src1.read();
4043
4044 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4045 if (wf->execMask(lane)) {
4046 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
4047 }
4048 }
4049
4050 wf->execMask() = vcc.rawData();
4051 vcc.write();
4052 } // execute
4053 // --- Inst_VOPC__V_CMPX_LE_I16 class methods ---
4054
4056 : Inst_VOPC(iFmt, "v_cmpx_le_i16")
4057 {
4058 setFlag(ALU);
4059 setFlag(WritesEXEC);
4060 } // Inst_VOPC__V_CMPX_LE_I16
4061
4063 {
4064 } // ~Inst_VOPC__V_CMPX_LE_I16
4065
4066 // --- description from .arch file ---
4067 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
4068 void
4070 {
4071 Wavefront *wf = gpuDynInst->wavefront();
4072 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4073 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4074 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4075
4076 src0.readSrc();
4077 src1.read();
4078
4079 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4080 if (wf->execMask(lane)) {
4081 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
4082 }
4083 }
4084
4085 wf->execMask() = vcc.rawData();
4086 vcc.write();
4087 } // execute
4088 // --- Inst_VOPC__V_CMPX_GT_I16 class methods ---
4089
4091 : Inst_VOPC(iFmt, "v_cmpx_gt_i16")
4092 {
4093 setFlag(ALU);
4094 setFlag(WritesEXEC);
4095 } // Inst_VOPC__V_CMPX_GT_I16
4096
4098 {
4099 } // ~Inst_VOPC__V_CMPX_GT_I16
4100
4101 // --- description from .arch file ---
4102 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
4103 void
4105 {
4106 Wavefront *wf = gpuDynInst->wavefront();
4107 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4108 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4109 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4110
4111 src0.readSrc();
4112 src1.read();
4113
4114 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4115 if (wf->execMask(lane)) {
4116 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
4117 }
4118 }
4119
4120 wf->execMask() = vcc.rawData();
4121 vcc.write();
4122 } // execute
4123 // --- Inst_VOPC__V_CMPX_NE_I16 class methods ---
4124
4126 : Inst_VOPC(iFmt, "v_cmpx_ne_i16")
4127 {
4128 setFlag(ALU);
4129 setFlag(WritesEXEC);
4130 } // Inst_VOPC__V_CMPX_NE_I16
4131
4133 {
4134 } // ~Inst_VOPC__V_CMPX_NE_I16
4135
4136 // --- description from .arch file ---
4137 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
4138 void
4140 {
4141 Wavefront *wf = gpuDynInst->wavefront();
4142 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4143 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4144 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4145
4146 src0.readSrc();
4147 src1.read();
4148
4149 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4150 if (wf->execMask(lane)) {
4151 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
4152 }
4153 }
4154
4155 wf->execMask() = vcc.rawData();
4156 vcc.write();
4157 } // execute
4158 // --- Inst_VOPC__V_CMPX_GE_I16 class methods ---
4159
4161 : Inst_VOPC(iFmt, "v_cmpx_ge_i16")
4162 {
4163 setFlag(ALU);
4164 setFlag(WritesEXEC);
4165 } // Inst_VOPC__V_CMPX_GE_I16
4166
4168 {
4169 } // ~Inst_VOPC__V_CMPX_GE_I16
4170
4171 // --- description from .arch file ---
4172 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
4173 void
4175 {
4176 Wavefront *wf = gpuDynInst->wavefront();
4177 ConstVecOperandI16 src0(gpuDynInst, instData.SRC0);
4178 ConstVecOperandI16 src1(gpuDynInst, instData.VSRC1);
4179 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4180
4181 src0.readSrc();
4182 src1.read();
4183
4184 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4185 if (wf->execMask(lane)) {
4186 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
4187 }
4188 }
4189
4190 wf->execMask() = vcc.rawData();
4191 vcc.write();
4192 } // execute
4193 // --- Inst_VOPC__V_CMPX_T_I16 class methods ---
4194
4196 : Inst_VOPC(iFmt, "v_cmpx_t_i16")
4197 {
4198 setFlag(ALU);
4199 setFlag(WritesEXEC);
4200 } // Inst_VOPC__V_CMPX_T_I16
4201
4203 {
4204 } // ~Inst_VOPC__V_CMPX_T_I16
4205
4206 // --- description from .arch file ---
4207 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
4208 void
4210 {
4211 Wavefront *wf = gpuDynInst->wavefront();
4212 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4213
4214 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4215 if (wf->execMask(lane)) {
4216 vcc.setBit(lane, 1);
4217 }
4218 }
4219
4220 wf->execMask() = vcc.rawData();
4221 vcc.write();
4222 } // execute
4223 // --- Inst_VOPC__V_CMPX_F_U16 class methods ---
4224
4226 : Inst_VOPC(iFmt, "v_cmpx_f_u16")
4227 {
4228 setFlag(ALU);
4229 setFlag(WritesEXEC);
4230 } // Inst_VOPC__V_CMPX_F_U16
4231
4233 {
4234 } // ~Inst_VOPC__V_CMPX_F_U16
4235
4236 // --- description from .arch file ---
4237 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
4238 void
4240 {
4241 Wavefront *wf = gpuDynInst->wavefront();
4242 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4243
4244 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4245 if (wf->execMask(lane)) {
4246 vcc.setBit(lane, 0);
4247 }
4248 }
4249
4250 wf->execMask() = vcc.rawData();
4251 vcc.write();
4252 } // execute
4253 // --- Inst_VOPC__V_CMPX_LT_U16 class methods ---
4254
4256 : Inst_VOPC(iFmt, "v_cmpx_lt_u16")
4257 {
4258 setFlag(ALU);
4259 setFlag(WritesEXEC);
4260 } // Inst_VOPC__V_CMPX_LT_U16
4261
4263 {
4264 } // ~Inst_VOPC__V_CMPX_LT_U16
4265
4266 // --- description from .arch file ---
4267 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
4268 void
4270 {
4271 Wavefront *wf = gpuDynInst->wavefront();
4272 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4273 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4274 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4275
4276 src0.readSrc();
4277 src1.read();
4278
4279 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4280 if (wf->execMask(lane)) {
4281 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
4282 }
4283 }
4284
4285 wf->execMask() = vcc.rawData();
4286 vcc.write();
4287 } // execute
4288 // --- Inst_VOPC__V_CMPX_EQ_U16 class methods ---
4289
4291 : Inst_VOPC(iFmt, "v_cmpx_eq_u16")
4292 {
4293 setFlag(ALU);
4294 setFlag(WritesEXEC);
4295 } // Inst_VOPC__V_CMPX_EQ_U16
4296
4298 {
4299 } // ~Inst_VOPC__V_CMPX_EQ_U16
4300
4301 // --- description from .arch file ---
4302 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
4303 void
4305 {
4306 Wavefront *wf = gpuDynInst->wavefront();
4307 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4308 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4309 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4310
4311 src0.readSrc();
4312 src1.read();
4313
4314 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4315 if (wf->execMask(lane)) {
4316 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
4317 }
4318 }
4319
4320 wf->execMask() = vcc.rawData();
4321 vcc.write();
4322 } // execute
4323 // --- Inst_VOPC__V_CMPX_LE_U16 class methods ---
4324
4326 : Inst_VOPC(iFmt, "v_cmpx_le_u16")
4327 {
4328 setFlag(ALU);
4329 setFlag(WritesEXEC);
4330 } // Inst_VOPC__V_CMPX_LE_U16
4331
4333 {
4334 } // ~Inst_VOPC__V_CMPX_LE_U16
4335
4336 // --- description from .arch file ---
4337 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
4338 void
4340 {
4341 Wavefront *wf = gpuDynInst->wavefront();
4342 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4343 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4344 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4345
4346 src0.readSrc();
4347 src1.read();
4348
4349 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4350 if (wf->execMask(lane)) {
4351 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
4352 }
4353 }
4354
4355 wf->execMask() = vcc.rawData();
4356 vcc.write();
4357 } // execute
4358 // --- Inst_VOPC__V_CMPX_GT_U16 class methods ---
4359
4361 : Inst_VOPC(iFmt, "v_cmpx_gt_u16")
4362 {
4363 setFlag(ALU);
4364 setFlag(WritesEXEC);
4365 } // Inst_VOPC__V_CMPX_GT_U16
4366
4368 {
4369 } // ~Inst_VOPC__V_CMPX_GT_U16
4370
4371 // --- description from .arch file ---
4372 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
4373 void
4375 {
4376 Wavefront *wf = gpuDynInst->wavefront();
4377 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4378 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4379 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4380
4381 src0.readSrc();
4382 src1.read();
4383
4384 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4385 if (wf->execMask(lane)) {
4386 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
4387 }
4388 }
4389
4390 wf->execMask() = vcc.rawData();
4391 vcc.write();
4392 } // execute
4393 // --- Inst_VOPC__V_CMPX_NE_U16 class methods ---
4394
4396 : Inst_VOPC(iFmt, "v_cmpx_ne_u16")
4397 {
4398 setFlag(ALU);
4399 setFlag(WritesEXEC);
4400 } // Inst_VOPC__V_CMPX_NE_U16
4401
4403 {
4404 } // ~Inst_VOPC__V_CMPX_NE_U16
4405
4406 // --- description from .arch file ---
4407 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
4408 void
4410 {
4411 Wavefront *wf = gpuDynInst->wavefront();
4412 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4413 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4414 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4415
4416 src0.readSrc();
4417 src1.read();
4418
4419 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4420 if (wf->execMask(lane)) {
4421 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
4422 }
4423 }
4424
4425 wf->execMask() = vcc.rawData();
4426 vcc.write();
4427 } // execute
4428 // --- Inst_VOPC__V_CMPX_GE_U16 class methods ---
4429
4431 : Inst_VOPC(iFmt, "v_cmpx_ge_u16")
4432 {
4433 setFlag(ALU);
4434 setFlag(WritesEXEC);
4435 } // Inst_VOPC__V_CMPX_GE_U16
4436
4438 {
4439 } // ~Inst_VOPC__V_CMPX_GE_U16
4440
4441 // --- description from .arch file ---
4442 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
4443 void
4445 {
4446 Wavefront *wf = gpuDynInst->wavefront();
4447 ConstVecOperandU16 src0(gpuDynInst, instData.SRC0);
4448 ConstVecOperandU16 src1(gpuDynInst, instData.VSRC1);
4449 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4450
4451 src0.readSrc();
4452 src1.read();
4453
4454 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4455 if (wf->execMask(lane)) {
4456 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
4457 }
4458 }
4459
4460 wf->execMask() = vcc.rawData();
4461 vcc.write();
4462 } // execute
4463 // --- Inst_VOPC__V_CMPX_T_U16 class methods ---
4464
4466 : Inst_VOPC(iFmt, "v_cmpx_t_u16")
4467 {
4468 setFlag(ALU);
4469 setFlag(WritesEXEC);
4470 } // Inst_VOPC__V_CMPX_T_U16
4471
4473 {
4474 } // ~Inst_VOPC__V_CMPX_T_U16
4475
4476 // --- description from .arch file ---
4477 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
4478 void
4480 {
4481 Wavefront *wf = gpuDynInst->wavefront();
4482 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4483
4484 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4485 if (wf->execMask(lane)) {
4486 vcc.setBit(lane, 1);
4487 }
4488 }
4489
4490 wf->execMask() = vcc.rawData();
4491 vcc.write();
4492 } // execute
4493 // --- Inst_VOPC__V_CMP_F_I32 class methods ---
4494
4496 : Inst_VOPC(iFmt, "v_cmp_f_i32")
4497 {
4498 setFlag(ALU);
4499 } // Inst_VOPC__V_CMP_F_I32
4500
4502 {
4503 } // ~Inst_VOPC__V_CMP_F_I32
4504
4505 // --- description from .arch file ---
4506 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
4507 void
4509 {
4510 Wavefront *wf = gpuDynInst->wavefront();
4511 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4512
4513 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4514 if (wf->execMask(lane)) {
4515 vcc.setBit(lane, 0);
4516 }
4517 }
4518
4519 vcc.write();
4520 } // execute
4521 // --- Inst_VOPC__V_CMP_LT_I32 class methods ---
4522
4524 : Inst_VOPC(iFmt, "v_cmp_lt_i32")
4525 {
4526 setFlag(ALU);
4527 } // Inst_VOPC__V_CMP_LT_I32
4528
4530 {
4531 } // ~Inst_VOPC__V_CMP_LT_I32
4532
4533 // --- description from .arch file ---
4534 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
4535 void
4537 {
4538 Wavefront *wf = gpuDynInst->wavefront();
4539 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4540 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4541 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4542
4543 src0.readSrc();
4544 src1.read();
4545
4546 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4547 if (wf->execMask(lane)) {
4548 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
4549 }
4550 }
4551
4552 vcc.write();
4553 } // execute
4554 // --- Inst_VOPC__V_CMP_EQ_I32 class methods ---
4555
4557 : Inst_VOPC(iFmt, "v_cmp_eq_i32")
4558 {
4559 setFlag(ALU);
4560 } // Inst_VOPC__V_CMP_EQ_I32
4561
4563 {
4564 } // ~Inst_VOPC__V_CMP_EQ_I32
4565
4566 // --- description from .arch file ---
4567 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
4568 void
4570 {
4571 Wavefront *wf = gpuDynInst->wavefront();
4572 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4573 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4574 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4575
4576 src0.readSrc();
4577 src1.read();
4578
4579 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4580 if (wf->execMask(lane)) {
4581 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
4582 }
4583 }
4584
4585 vcc.write();
4586 } // execute
4587 // --- Inst_VOPC__V_CMP_LE_I32 class methods ---
4588
4590 : Inst_VOPC(iFmt, "v_cmp_le_i32")
4591 {
4592 setFlag(ALU);
4593 } // Inst_VOPC__V_CMP_LE_I32
4594
4596 {
4597 } // ~Inst_VOPC__V_CMP_LE_I32
4598
4599 // --- description from .arch file ---
4600 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
4601 void
4603 {
4604 Wavefront *wf = gpuDynInst->wavefront();
4605 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4606 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4607 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4608
4609 src0.readSrc();
4610 src1.read();
4611
4612 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4613 if (wf->execMask(lane)) {
4614 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
4615 }
4616 }
4617
4618 vcc.write();
4619 } // execute
4620 // --- Inst_VOPC__V_CMP_GT_I32 class methods ---
4621
4623 : Inst_VOPC(iFmt, "v_cmp_gt_i32")
4624 {
4625 setFlag(ALU);
4626 } // Inst_VOPC__V_CMP_GT_I32
4627
4629 {
4630 } // ~Inst_VOPC__V_CMP_GT_I32
4631
4632 // --- description from .arch file ---
4633 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
4634 void
4636 {
4637 Wavefront *wf = gpuDynInst->wavefront();
4638 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4639 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4640 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4641
4642 src0.readSrc();
4643 src1.read();
4644
4645 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4646 if (wf->execMask(lane)) {
4647 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
4648 }
4649 }
4650
4651 vcc.write();
4652 } // execute
4653 // --- Inst_VOPC__V_CMP_NE_I32 class methods ---
4654
4656 : Inst_VOPC(iFmt, "v_cmp_ne_i32")
4657 {
4658 setFlag(ALU);
4659 } // Inst_VOPC__V_CMP_NE_I32
4660
4662 {
4663 } // ~Inst_VOPC__V_CMP_NE_I32
4664
4665 // --- description from .arch file ---
4666 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
4667 void
4669 {
4670 Wavefront *wf = gpuDynInst->wavefront();
4671 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4672 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4673 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4674
4675 src0.readSrc();
4676 src1.read();
4677
4678 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4679 if (wf->execMask(lane)) {
4680 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
4681 }
4682 }
4683
4684 vcc.write();
4685 } // execute
4686 // --- Inst_VOPC__V_CMP_GE_I32 class methods ---
4687
4689 : Inst_VOPC(iFmt, "v_cmp_ge_i32")
4690 {
4691 setFlag(ALU);
4692 } // Inst_VOPC__V_CMP_GE_I32
4693
4695 {
4696 } // ~Inst_VOPC__V_CMP_GE_I32
4697
4698 // --- description from .arch file ---
4699 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
4700 void
4702 {
4703 Wavefront *wf = gpuDynInst->wavefront();
4704 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
4705 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
4706 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4707
4708 src0.readSrc();
4709 src1.read();
4710
4711 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4712 if (wf->execMask(lane)) {
4713 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
4714 }
4715 }
4716
4717 vcc.write();
4718 } // execute
4719 // --- Inst_VOPC__V_CMP_T_I32 class methods ---
4720
4722 : Inst_VOPC(iFmt, "v_cmp_t_i32")
4723 {
4724 setFlag(ALU);
4725 } // Inst_VOPC__V_CMP_T_I32
4726
4728 {
4729 } // ~Inst_VOPC__V_CMP_T_I32
4730
4731 // --- description from .arch file ---
4732 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
4733 void
4735 {
4736 Wavefront *wf = gpuDynInst->wavefront();
4737 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4738
4739 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4740 if (wf->execMask(lane)) {
4741 vcc.setBit(lane, 1);
4742 }
4743 }
4744
4745 vcc.write();
4746 } // execute
4747 // --- Inst_VOPC__V_CMP_F_U32 class methods ---
4748
4750 : Inst_VOPC(iFmt, "v_cmp_f_u32")
4751 {
4752 setFlag(ALU);
4753 } // Inst_VOPC__V_CMP_F_U32
4754
4756 {
4757 } // ~Inst_VOPC__V_CMP_F_U32
4758
4759 // --- description from .arch file ---
4760 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
4761 void
4763 {
4764 Wavefront *wf = gpuDynInst->wavefront();
4765 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4766
4767 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4768 if (wf->execMask(lane)) {
4769 vcc.setBit(lane, 0);
4770 }
4771 }
4772
4773 vcc.write();
4774 } // execute
4775 // --- Inst_VOPC__V_CMP_LT_U32 class methods ---
4776
4778 : Inst_VOPC(iFmt, "v_cmp_lt_u32")
4779 {
4780 setFlag(ALU);
4781 } // Inst_VOPC__V_CMP_LT_U32
4782
4784 {
4785 } // ~Inst_VOPC__V_CMP_LT_U32
4786
4787 // --- description from .arch file ---
4788 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
4789 void
4791 {
4792 Wavefront *wf = gpuDynInst->wavefront();
4793 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4794 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4795 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4796
4797 src0.readSrc();
4798 src1.read();
4799
4800 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4801 if (wf->execMask(lane)) {
4802 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
4803 }
4804 }
4805
4806 vcc.write();
4807 } // execute
4808 // --- Inst_VOPC__V_CMP_EQ_U32 class methods ---
4809
4811 : Inst_VOPC(iFmt, "v_cmp_eq_u32")
4812 {
4813 setFlag(ALU);
4814 } // Inst_VOPC__V_CMP_EQ_U32
4815
4817 {
4818 } // ~Inst_VOPC__V_CMP_EQ_U32
4819
4820 // --- description from .arch file ---
4821 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
4822 void
4824 {
4825 Wavefront *wf = gpuDynInst->wavefront();
4826 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4827 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4828 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4829
4830 src0.readSrc();
4831 src1.read();
4832
4833 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4834 if (wf->execMask(lane)) {
4835 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
4836 }
4837 }
4838
4839 vcc.write();
4840 } // execute
4841 // --- Inst_VOPC__V_CMP_LE_U32 class methods ---
4842
4844 : Inst_VOPC(iFmt, "v_cmp_le_u32")
4845 {
4846 setFlag(ALU);
4847 } // Inst_VOPC__V_CMP_LE_U32
4848
4850 {
4851 } // ~Inst_VOPC__V_CMP_LE_U32
4852
4853 // --- description from .arch file ---
4854 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
4855 void
4857 {
4858 Wavefront *wf = gpuDynInst->wavefront();
4859 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4860 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4861 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4862
4863 src0.readSrc();
4864 src1.read();
4865
4866 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4867 if (wf->execMask(lane)) {
4868 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
4869 }
4870 }
4871
4872 vcc.write();
4873 } // execute
4874 // --- Inst_VOPC__V_CMP_GT_U32 class methods ---
4875
4877 : Inst_VOPC(iFmt, "v_cmp_gt_u32")
4878 {
4879 setFlag(ALU);
4880 } // Inst_VOPC__V_CMP_GT_U32
4881
4883 {
4884 } // ~Inst_VOPC__V_CMP_GT_U32
4885
4886 // --- description from .arch file ---
4887 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
4888 void
4890 {
4891 Wavefront *wf = gpuDynInst->wavefront();
4892 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4893 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4894 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4895
4896 src0.readSrc();
4897 src1.read();
4898
4899 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4900 if (wf->execMask(lane)) {
4901 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
4902 }
4903 }
4904
4905 vcc.write();
4906 } // execute
4907 // --- Inst_VOPC__V_CMP_NE_U32 class methods ---
4908
4910 : Inst_VOPC(iFmt, "v_cmp_ne_u32")
4911 {
4912 setFlag(ALU);
4913 } // Inst_VOPC__V_CMP_NE_U32
4914
4916 {
4917 } // ~Inst_VOPC__V_CMP_NE_U32
4918
4919 // --- description from .arch file ---
4920 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
4921 void
4923 {
4924 Wavefront *wf = gpuDynInst->wavefront();
4925 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4926 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4927 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4928
4929 src0.readSrc();
4930 src1.read();
4931
4932 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4933 if (wf->execMask(lane)) {
4934 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
4935 }
4936 }
4937
4938 vcc.write();
4939 } // execute
4940 // --- Inst_VOPC__V_CMP_GE_U32 class methods ---
4941
4943 : Inst_VOPC(iFmt, "v_cmp_ge_u32")
4944 {
4945 setFlag(ALU);
4946 } // Inst_VOPC__V_CMP_GE_U32
4947
4949 {
4950 } // ~Inst_VOPC__V_CMP_GE_U32
4951
4952 // --- description from .arch file ---
4953 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
4954 void
4956 {
4957 Wavefront *wf = gpuDynInst->wavefront();
4958 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
4959 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
4960 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4961
4962 src0.readSrc();
4963 src1.read();
4964
4965 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4966 if (wf->execMask(lane)) {
4967 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
4968 }
4969 }
4970
4971 vcc.write();
4972 } // execute
4973 // --- Inst_VOPC__V_CMP_T_U32 class methods ---
4974
4976 : Inst_VOPC(iFmt, "v_cmp_t_u32")
4977 {
4978 setFlag(ALU);
4979 } // Inst_VOPC__V_CMP_T_U32
4980
4982 {
4983 } // ~Inst_VOPC__V_CMP_T_U32
4984
4985 // --- description from .arch file ---
4986 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
4987 void
4989 {
4990 Wavefront *wf = gpuDynInst->wavefront();
4991 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
4992
4993 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
4994 if (wf->execMask(lane)) {
4995 vcc.setBit(lane, 1);
4996 }
4997 }
4998
4999 vcc.write();
5000 } // execute
5001 // --- Inst_VOPC__V_CMPX_F_I32 class methods ---
5002
5004 : Inst_VOPC(iFmt, "v_cmpx_f_i32")
5005 {
5006 setFlag(ALU);
5007 setFlag(WritesEXEC);
5008 } // Inst_VOPC__V_CMPX_F_I32
5009
5011 {
5012 } // ~Inst_VOPC__V_CMPX_F_I32
5013
5014 // --- description from .arch file ---
5015 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
5016 void
5018 {
5019 Wavefront *wf = gpuDynInst->wavefront();
5020 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5021
5022 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5023 if (wf->execMask(lane)) {
5024 vcc.setBit(lane, 0);
5025 }
5026 }
5027
5028 wf->execMask() = vcc.rawData();
5029 vcc.write();
5030 } // execute
5031 // --- Inst_VOPC__V_CMPX_LT_I32 class methods ---
5032
5034 : Inst_VOPC(iFmt, "v_cmpx_lt_i32")
5035 {
5036 setFlag(ALU);
5037 setFlag(WritesEXEC);
5038 } // Inst_VOPC__V_CMPX_LT_I32
5039
5041 {
5042 } // ~Inst_VOPC__V_CMPX_LT_I32
5043
5044 // --- description from .arch file ---
5045 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
5046 void
5048 {
5049 Wavefront *wf = gpuDynInst->wavefront();
5050 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5051 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5052 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5053
5054 src0.readSrc();
5055 src1.read();
5056
5057 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5058 if (wf->execMask(lane)) {
5059 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
5060 }
5061 }
5062
5063 wf->execMask() = vcc.rawData();
5064 vcc.write();
5065 } // execute
5066 // --- Inst_VOPC__V_CMPX_EQ_I32 class methods ---
5067
5069 : Inst_VOPC(iFmt, "v_cmpx_eq_i32")
5070 {
5071 setFlag(ALU);
5072 setFlag(WritesEXEC);
5073 } // Inst_VOPC__V_CMPX_EQ_I32
5074
5076 {
5077 } // ~Inst_VOPC__V_CMPX_EQ_I32
5078
5079 // --- description from .arch file ---
5080 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
5081 void
5083 {
5084 Wavefront *wf = gpuDynInst->wavefront();
5085 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5086 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5087 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5088
5089 src0.readSrc();
5090 src1.read();
5091
5092 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5093 if (wf->execMask(lane)) {
5094 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
5095 }
5096 }
5097
5098 wf->execMask() = vcc.rawData();
5099 vcc.write();
5100 } // execute
5101 // --- Inst_VOPC__V_CMPX_LE_I32 class methods ---
5102
5104 : Inst_VOPC(iFmt, "v_cmpx_le_i32")
5105 {
5106 setFlag(ALU);
5107 setFlag(WritesEXEC);
5108 } // Inst_VOPC__V_CMPX_LE_I32
5109
5111 {
5112 } // ~Inst_VOPC__V_CMPX_LE_I32
5113
5114 // --- description from .arch file ---
5115 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
5116 void
5118 {
5119 Wavefront *wf = gpuDynInst->wavefront();
5120 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5121 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5122 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5123
5124 src0.readSrc();
5125 src1.read();
5126
5127 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5128 if (wf->execMask(lane)) {
5129 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
5130 }
5131 }
5132
5133 wf->execMask() = vcc.rawData();
5134 vcc.write();
5135 } // execute
5136 // --- Inst_VOPC__V_CMPX_GT_I32 class methods ---
5137
5139 : Inst_VOPC(iFmt, "v_cmpx_gt_i32")
5140 {
5141 setFlag(ALU);
5142 setFlag(WritesEXEC);
5143 } // Inst_VOPC__V_CMPX_GT_I32
5144
5146 {
5147 } // ~Inst_VOPC__V_CMPX_GT_I32
5148
5149 // --- description from .arch file ---
5150 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
5151 void
5153 {
5154 Wavefront *wf = gpuDynInst->wavefront();
5155 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5156 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5157 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5158
5159 src0.readSrc();
5160 src1.read();
5161
5162 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5163 if (wf->execMask(lane)) {
5164 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
5165 }
5166 }
5167
5168 wf->execMask() = vcc.rawData();
5169 vcc.write();
5170 } // execute
5171 // --- Inst_VOPC__V_CMPX_NE_I32 class methods ---
5172
5174 : Inst_VOPC(iFmt, "v_cmpx_ne_i32")
5175 {
5176 setFlag(ALU);
5177 setFlag(WritesEXEC);
5178 } // Inst_VOPC__V_CMPX_NE_I32
5179
5181 {
5182 } // ~Inst_VOPC__V_CMPX_NE_I32
5183
5184 // --- description from .arch file ---
5185 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
5186 void
5188 {
5189 Wavefront *wf = gpuDynInst->wavefront();
5190 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5191 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5192 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5193
5194 src0.readSrc();
5195 src1.read();
5196
5197 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5198 if (wf->execMask(lane)) {
5199 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
5200 }
5201 }
5202
5203 wf->execMask() = vcc.rawData();
5204 vcc.write();
5205 } // execute
5206 // --- Inst_VOPC__V_CMPX_GE_I32 class methods ---
5207
5209 : Inst_VOPC(iFmt, "v_cmpx_ge_i32")
5210 {
5211 setFlag(ALU);
5212 setFlag(WritesEXEC);
5213 } // Inst_VOPC__V_CMPX_GE_I32
5214
5216 {
5217 } // ~Inst_VOPC__V_CMPX_GE_I32
5218
5219 // --- description from .arch file ---
5220 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
5221 void
5223 {
5224 Wavefront *wf = gpuDynInst->wavefront();
5225 ConstVecOperandI32 src0(gpuDynInst, instData.SRC0);
5226 ConstVecOperandI32 src1(gpuDynInst, instData.VSRC1);
5227 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5228
5229 src0.readSrc();
5230 src1.read();
5231
5232 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5233 if (wf->execMask(lane)) {
5234 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
5235 }
5236 }
5237
5238 wf->execMask() = vcc.rawData();
5239 vcc.write();
5240 } // execute
5241 // --- Inst_VOPC__V_CMPX_T_I32 class methods ---
5242
5244 : Inst_VOPC(iFmt, "v_cmpx_t_i32")
5245 {
5246 setFlag(ALU);
5247 setFlag(WritesEXEC);
5248 } // Inst_VOPC__V_CMPX_T_I32
5249
5251 {
5252 } // ~Inst_VOPC__V_CMPX_T_I32
5253
5254 // --- description from .arch file ---
5255 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
5256 void
5258 {
5259 Wavefront *wf = gpuDynInst->wavefront();
5260 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5261
5262 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5263 if (wf->execMask(lane)) {
5264 vcc.setBit(lane, 1);
5265 }
5266 }
5267
5268 wf->execMask() = vcc.rawData();
5269 vcc.write();
5270 } // execute
5271 // --- Inst_VOPC__V_CMPX_F_U32 class methods ---
5272
5274 : Inst_VOPC(iFmt, "v_cmpx_f_u32")
5275 {
5276 setFlag(ALU);
5277 setFlag(WritesEXEC);
5278 } // Inst_VOPC__V_CMPX_F_U32
5279
5281 {
5282 } // ~Inst_VOPC__V_CMPX_F_U32
5283
5284 // --- description from .arch file ---
5285 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
5286 void
5288 {
5289 Wavefront *wf = gpuDynInst->wavefront();
5290 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5291
5292 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5293 if (wf->execMask(lane)) {
5294 vcc.setBit(lane, 0);
5295 }
5296 }
5297
5298 wf->execMask() = vcc.rawData();
5299 vcc.write();
5300 } // execute
5301 // --- Inst_VOPC__V_CMPX_LT_U32 class methods ---
5302
5304 : Inst_VOPC(iFmt, "v_cmpx_lt_u32")
5305 {
5306 setFlag(ALU);
5307 setFlag(WritesEXEC);
5308 } // Inst_VOPC__V_CMPX_LT_U32
5309
5311 {
5312 } // ~Inst_VOPC__V_CMPX_LT_U32
5313
5314 // --- description from .arch file ---
5315 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
5316 void
5318 {
5319 Wavefront *wf = gpuDynInst->wavefront();
5320 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5321 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5322 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5323
5324 src0.readSrc();
5325 src1.read();
5326
5327 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5328 if (wf->execMask(lane)) {
5329 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
5330 }
5331 }
5332
5333 wf->execMask() = vcc.rawData();
5334 vcc.write();
5335 } // execute
5336 // --- Inst_VOPC__V_CMPX_EQ_U32 class methods ---
5337
5339 : Inst_VOPC(iFmt, "v_cmpx_eq_u32")
5340 {
5341 setFlag(ALU);
5342 setFlag(WritesEXEC);
5343 } // Inst_VOPC__V_CMPX_EQ_U32
5344
5346 {
5347 } // ~Inst_VOPC__V_CMPX_EQ_U32
5348
5349 // --- description from .arch file ---
5350 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
5351 void
5353 {
5354 Wavefront *wf = gpuDynInst->wavefront();
5355 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5356 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5357 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5358
5359 src0.readSrc();
5360 src1.read();
5361
5362 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5363 if (wf->execMask(lane)) {
5364 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
5365 }
5366 }
5367
5368 wf->execMask() = vcc.rawData();
5369 vcc.write();
5370 } // execute
5371 // --- Inst_VOPC__V_CMPX_LE_U32 class methods ---
5372
5374 : Inst_VOPC(iFmt, "v_cmpx_le_u32")
5375 {
5376 setFlag(ALU);
5377 setFlag(WritesEXEC);
5378 } // Inst_VOPC__V_CMPX_LE_U32
5379
5381 {
5382 } // ~Inst_VOPC__V_CMPX_LE_U32
5383
5384 // --- description from .arch file ---
5385 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
5386 void
5388 {
5389 Wavefront *wf = gpuDynInst->wavefront();
5390 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5391 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5392 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5393
5394 src0.readSrc();
5395 src1.read();
5396
5397 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5398 if (wf->execMask(lane)) {
5399 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
5400 }
5401 }
5402
5403 wf->execMask() = vcc.rawData();
5404 vcc.write();
5405 } // execute
5406 // --- Inst_VOPC__V_CMPX_GT_U32 class methods ---
5407
5409 : Inst_VOPC(iFmt, "v_cmpx_gt_u32")
5410 {
5411 setFlag(ALU);
5412 setFlag(WritesEXEC);
5413 } // Inst_VOPC__V_CMPX_GT_U32
5414
5416 {
5417 } // ~Inst_VOPC__V_CMPX_GT_U32
5418
5419 // --- description from .arch file ---
5420 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
5421 void
5423 {
5424 Wavefront *wf = gpuDynInst->wavefront();
5425 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5426 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5427 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5428
5429 src0.readSrc();
5430 src1.read();
5431
5432 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5433 if (wf->execMask(lane)) {
5434 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
5435 }
5436 }
5437
5438 wf->execMask() = vcc.rawData();
5439 vcc.write();
5440 } // execute
5441 // --- Inst_VOPC__V_CMPX_NE_U32 class methods ---
5442
5444 : Inst_VOPC(iFmt, "v_cmpx_ne_u32")
5445 {
5446 setFlag(ALU);
5447 setFlag(WritesEXEC);
5448 } // Inst_VOPC__V_CMPX_NE_U32
5449
5451 {
5452 } // ~Inst_VOPC__V_CMPX_NE_U32
5453
5454 // --- description from .arch file ---
5455 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
5456 void
5458 {
5459 Wavefront *wf = gpuDynInst->wavefront();
5460 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5461 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5462 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5463
5464 src0.readSrc();
5465 src1.read();
5466
5467 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5468 if (wf->execMask(lane)) {
5469 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
5470 }
5471 }
5472
5473 wf->execMask() = vcc.rawData();
5474 vcc.write();
5475 } // execute
5476 // --- Inst_VOPC__V_CMPX_GE_U32 class methods ---
5477
5479 : Inst_VOPC(iFmt, "v_cmpx_ge_u32")
5480 {
5481 setFlag(ALU);
5482 setFlag(WritesEXEC);
5483 } // Inst_VOPC__V_CMPX_GE_U32
5484
5486 {
5487 } // ~Inst_VOPC__V_CMPX_GE_U32
5488
5489 // --- description from .arch file ---
5490 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
5491 void
5493 {
5494 Wavefront *wf = gpuDynInst->wavefront();
5495 ConstVecOperandU32 src0(gpuDynInst, instData.SRC0);
5496 ConstVecOperandU32 src1(gpuDynInst, instData.VSRC1);
5497 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5498
5499 src0.readSrc();
5500 src1.read();
5501
5502 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5503 if (wf->execMask(lane)) {
5504 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
5505 }
5506 }
5507
5508 wf->execMask() = vcc.rawData();
5509 vcc.write();
5510 } // execute
5511 // --- Inst_VOPC__V_CMPX_T_U32 class methods ---
5512
5514 : Inst_VOPC(iFmt, "v_cmpx_t_u32")
5515 {
5516 setFlag(ALU);
5517 setFlag(WritesEXEC);
5518 } // Inst_VOPC__V_CMPX_T_U32
5519
5521 {
5522 } // ~Inst_VOPC__V_CMPX_T_U32
5523
5524 // --- description from .arch file ---
5525 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
5526 void
5528 {
5529 Wavefront *wf = gpuDynInst->wavefront();
5530 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5531
5532 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5533 if (wf->execMask(lane)) {
5534 vcc.setBit(lane, 1);
5535 }
5536 }
5537
5538 wf->execMask() = vcc.rawData();
5539 vcc.write();
5540 } // execute
5541 // --- Inst_VOPC__V_CMP_F_I64 class methods ---
5542
5544 : Inst_VOPC(iFmt, "v_cmp_f_i64")
5545 {
5546 setFlag(ALU);
5547 } // Inst_VOPC__V_CMP_F_I64
5548
5550 {
5551 } // ~Inst_VOPC__V_CMP_F_I64
5552
5553 // --- description from .arch file ---
5554 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
5555 void
5557 {
5558 Wavefront *wf = gpuDynInst->wavefront();
5559 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5560
5561 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5562 if (wf->execMask(lane)) {
5563 vcc.setBit(lane, 0);
5564 }
5565 }
5566
5567 vcc.write();
5568 } // execute
5569 // --- Inst_VOPC__V_CMP_LT_I64 class methods ---
5570
5572 : Inst_VOPC(iFmt, "v_cmp_lt_i64")
5573 {
5574 setFlag(ALU);
5575 } // Inst_VOPC__V_CMP_LT_I64
5576
5578 {
5579 } // ~Inst_VOPC__V_CMP_LT_I64
5580
5581 // --- description from .arch file ---
5582 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
5583 void
5585 {
5586 Wavefront *wf = gpuDynInst->wavefront();
5587 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5588 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5589 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5590
5591 src0.readSrc();
5592 src1.read();
5593
5594 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5595 if (wf->execMask(lane)) {
5596 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
5597 }
5598 }
5599
5600 vcc.write();
5601 } // execute
5602 // --- Inst_VOPC__V_CMP_EQ_I64 class methods ---
5603
5605 : Inst_VOPC(iFmt, "v_cmp_eq_i64")
5606 {
5607 setFlag(ALU);
5608 } // Inst_VOPC__V_CMP_EQ_I64
5609
5611 {
5612 } // ~Inst_VOPC__V_CMP_EQ_I64
5613
5614 // --- description from .arch file ---
5615 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
5616 void
5618 {
5619 Wavefront *wf = gpuDynInst->wavefront();
5620 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5621 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5622 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5623
5624 src0.readSrc();
5625 src1.read();
5626
5627 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5628 if (wf->execMask(lane)) {
5629 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
5630 }
5631 }
5632
5633 vcc.write();
5634 } // execute
5635 // --- Inst_VOPC__V_CMP_LE_I64 class methods ---
5636
5638 : Inst_VOPC(iFmt, "v_cmp_le_i64")
5639 {
5640 setFlag(ALU);
5641 } // Inst_VOPC__V_CMP_LE_I64
5642
5644 {
5645 } // ~Inst_VOPC__V_CMP_LE_I64
5646
5647 // --- description from .arch file ---
5648 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
5649 void
5651 {
5652 Wavefront *wf = gpuDynInst->wavefront();
5653 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5654 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5655 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5656
5657 src0.readSrc();
5658 src1.read();
5659
5660 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5661 if (wf->execMask(lane)) {
5662 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
5663 }
5664 }
5665
5666 vcc.write();
5667 } // execute
5668 // --- Inst_VOPC__V_CMP_GT_I64 class methods ---
5669
5671 : Inst_VOPC(iFmt, "v_cmp_gt_i64")
5672 {
5673 setFlag(ALU);
5674 } // Inst_VOPC__V_CMP_GT_I64
5675
5677 {
5678 } // ~Inst_VOPC__V_CMP_GT_I64
5679
5680 // --- description from .arch file ---
5681 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
5682 void
5684 {
5685 Wavefront *wf = gpuDynInst->wavefront();
5686 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5687 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5688 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5689
5690 src0.readSrc();
5691 src1.read();
5692
5693 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5694 if (wf->execMask(lane)) {
5695 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
5696 }
5697 }
5698
5699 vcc.write();
5700 } // execute
5701 // --- Inst_VOPC__V_CMP_NE_I64 class methods ---
5702
5704 : Inst_VOPC(iFmt, "v_cmp_ne_i64")
5705 {
5706 setFlag(ALU);
5707 } // Inst_VOPC__V_CMP_NE_I64
5708
5710 {
5711 } // ~Inst_VOPC__V_CMP_NE_I64
5712
5713 // --- description from .arch file ---
5714 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
5715 void
5717 {
5718 Wavefront *wf = gpuDynInst->wavefront();
5719 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5720 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5721 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5722
5723 src0.readSrc();
5724 src1.read();
5725
5726 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5727 if (wf->execMask(lane)) {
5728 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
5729 }
5730 }
5731
5732 vcc.write();
5733 } // execute
5734 // --- Inst_VOPC__V_CMP_GE_I64 class methods ---
5735
5737 : Inst_VOPC(iFmt, "v_cmp_ge_i64")
5738 {
5739 setFlag(ALU);
5740 } // Inst_VOPC__V_CMP_GE_I64
5741
5743 {
5744 } // ~Inst_VOPC__V_CMP_GE_I64
5745
5746 // --- description from .arch file ---
5747 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
5748 void
5750 {
5751 Wavefront *wf = gpuDynInst->wavefront();
5752 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
5753 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
5754 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5755
5756 src0.readSrc();
5757 src1.read();
5758
5759 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5760 if (wf->execMask(lane)) {
5761 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
5762 }
5763 }
5764
5765 vcc.write();
5766 } // execute
5767 // --- Inst_VOPC__V_CMP_T_I64 class methods ---
5768
5770 : Inst_VOPC(iFmt, "v_cmp_t_i64")
5771 {
5772 setFlag(ALU);
5773 } // Inst_VOPC__V_CMP_T_I64
5774
5776 {
5777 } // ~Inst_VOPC__V_CMP_T_I64
5778
5779 // --- description from .arch file ---
5780 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
5781 void
5783 {
5784 Wavefront *wf = gpuDynInst->wavefront();
5785 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5786
5787 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5788 if (wf->execMask(lane)) {
5789 vcc.setBit(lane, 1);
5790 }
5791 }
5792
5793 vcc.write();
5794 } // execute
5795 // --- Inst_VOPC__V_CMP_F_U64 class methods ---
5796
5798 : Inst_VOPC(iFmt, "v_cmp_f_u64")
5799 {
5800 setFlag(ALU);
5801 } // Inst_VOPC__V_CMP_F_U64
5802
5804 {
5805 } // ~Inst_VOPC__V_CMP_F_U64
5806
5807 // --- description from .arch file ---
5808 // D.u64[threadID] = 0; D = VCC in VOPC encoding.
5809 void
5811 {
5812 Wavefront *wf = gpuDynInst->wavefront();
5813 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5814
5815 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5816 if (wf->execMask(lane)) {
5817 vcc.setBit(lane, 0);
5818 }
5819 }
5820
5821 vcc.write();
5822 } // execute
5823 // --- Inst_VOPC__V_CMP_LT_U64 class methods ---
5824
5826 : Inst_VOPC(iFmt, "v_cmp_lt_u64")
5827 {
5828 setFlag(ALU);
5829 } // Inst_VOPC__V_CMP_LT_U64
5830
5832 {
5833 } // ~Inst_VOPC__V_CMP_LT_U64
5834
5835 // --- description from .arch file ---
5836 // D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
5837 void
5839 {
5840 Wavefront *wf = gpuDynInst->wavefront();
5841 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
5842 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
5843 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5844
5845 src0.readSrc();
5846 src1.read();
5847
5848 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5849 if (wf->execMask(lane)) {
5850 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
5851 }
5852 }
5853
5854 vcc.write();
5855 } // execute
5856 // --- Inst_VOPC__V_CMP_EQ_U64 class methods ---
5857
5859 : Inst_VOPC(iFmt, "v_cmp_eq_u64")
5860 {
5861 setFlag(ALU);
5862 } // Inst_VOPC__V_CMP_EQ_U64
5863
5865 {
5866 } // ~Inst_VOPC__V_CMP_EQ_U64
5867
5868 // --- description from .arch file ---
5869 // D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
5870 void
5872 {
5873 Wavefront *wf = gpuDynInst->wavefront();
5874 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
5875 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
5876 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5877
5878 src0.readSrc();
5879 src1.read();
5880
5881 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5882 if (wf->execMask(lane)) {
5883 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
5884 }
5885 }
5886
5887 vcc.write();
5888 } // execute
5889 // --- Inst_VOPC__V_CMP_LE_U64 class methods ---
5890
5892 : Inst_VOPC(iFmt, "v_cmp_le_u64")
5893 {
5894 setFlag(ALU);
5895 } // Inst_VOPC__V_CMP_LE_U64
5896
5898 {
5899 } // ~Inst_VOPC__V_CMP_LE_U64
5900
5901 // --- description from .arch file ---
5902 // D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
5903 void
5905 {
5906 Wavefront *wf = gpuDynInst->wavefront();
5907 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
5908 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
5909 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5910
5911 src0.readSrc();
5912 src1.read();
5913
5914 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5915 if (wf->execMask(lane)) {
5916 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
5917 }
5918 }
5919
5920 vcc.write();
5921 } // execute
5922 // --- Inst_VOPC__V_CMP_GT_U64 class methods ---
5923
5925 : Inst_VOPC(iFmt, "v_cmp_gt_u64")
5926 {
5927 setFlag(ALU);
5928 } // Inst_VOPC__V_CMP_GT_U64
5929
5931 {
5932 } // ~Inst_VOPC__V_CMP_GT_U64
5933
5934 // --- description from .arch file ---
5935 // D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
5936 void
5938 {
5939 Wavefront *wf = gpuDynInst->wavefront();
5940 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
5941 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
5942 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5943
5944 src0.readSrc();
5945 src1.read();
5946
5947 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5948 if (wf->execMask(lane)) {
5949 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
5950 }
5951 }
5952
5953 vcc.write();
5954 } // execute
5955 // --- Inst_VOPC__V_CMP_NE_U64 class methods ---
5956
5958 : Inst_VOPC(iFmt, "v_cmp_ne_u64")
5959 {
5960 setFlag(ALU);
5961 } // Inst_VOPC__V_CMP_NE_U64
5962
5964 {
5965 } // ~Inst_VOPC__V_CMP_NE_U64
5966
5967 // --- description from .arch file ---
5968 // D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
5969 void
5971 {
5972 Wavefront *wf = gpuDynInst->wavefront();
5973 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
5974 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
5975 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
5976
5977 src0.readSrc();
5978 src1.read();
5979
5980 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
5981 if (wf->execMask(lane)) {
5982 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
5983 }
5984 }
5985
5986 vcc.write();
5987 } // execute
5988 // --- Inst_VOPC__V_CMP_GE_U64 class methods ---
5989
5991 : Inst_VOPC(iFmt, "v_cmp_ge_u64")
5992 {
5993 setFlag(ALU);
5994 } // Inst_VOPC__V_CMP_GE_U64
5995
5997 {
5998 } // ~Inst_VOPC__V_CMP_GE_U64
5999
6000 // --- description from .arch file ---
6001 // D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
6002 void
6004 {
6005 Wavefront *wf = gpuDynInst->wavefront();
6006 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6007 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6008 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6009
6010 src0.readSrc();
6011 src1.read();
6012
6013 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6014 if (wf->execMask(lane)) {
6015 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
6016 }
6017 }
6018
6019 vcc.write();
6020 } // execute
6021 // --- Inst_VOPC__V_CMP_T_U64 class methods ---
6022
6024 : Inst_VOPC(iFmt, "v_cmp_t_u64")
6025 {
6026 setFlag(ALU);
6027 } // Inst_VOPC__V_CMP_T_U64
6028
6030 {
6031 } // ~Inst_VOPC__V_CMP_T_U64
6032
6033 // --- description from .arch file ---
6034 // D.u64[threadID] = 1; D = VCC in VOPC encoding.
6035 void
6037 {
6038 Wavefront *wf = gpuDynInst->wavefront();
6039 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6040
6041 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6042 if (wf->execMask(lane)) {
6043 vcc.setBit(lane, 1);
6044 }
6045 }
6046
6047 vcc.write();
6048 } // execute
6049 // --- Inst_VOPC__V_CMPX_F_I64 class methods ---
6050
6052 : Inst_VOPC(iFmt, "v_cmpx_f_i64")
6053 {
6054 setFlag(ALU);
6055 setFlag(WritesEXEC);
6056 } // Inst_VOPC__V_CMPX_F_I64
6057
6059 {
6060 } // ~Inst_VOPC__V_CMPX_F_I64
6061
6062 // --- description from .arch file ---
6063 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
6064 void
6066 {
6067 Wavefront *wf = gpuDynInst->wavefront();
6068 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6069
6070 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6071 if (wf->execMask(lane)) {
6072 vcc.setBit(lane, 0);
6073 }
6074 }
6075
6076 wf->execMask() = vcc.rawData();
6077 vcc.write();
6078 } // execute
6079 // --- Inst_VOPC__V_CMPX_LT_I64 class methods ---
6080
6082 : Inst_VOPC(iFmt, "v_cmpx_lt_i64")
6083 {
6084 setFlag(ALU);
6085 setFlag(WritesEXEC);
6086 } // Inst_VOPC__V_CMPX_LT_I64
6087
6089 {
6090 } // ~Inst_VOPC__V_CMPX_LT_I64
6091
6092 // --- description from .arch file ---
6093 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
6094 void
6096 {
6097 Wavefront *wf = gpuDynInst->wavefront();
6098 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6099 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6100 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6101
6102 src0.readSrc();
6103 src1.read();
6104
6105 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6106 if (wf->execMask(lane)) {
6107 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
6108 }
6109 }
6110
6111 wf->execMask() = vcc.rawData();
6112 vcc.write();
6113 } // execute
6114 // --- Inst_VOPC__V_CMPX_EQ_I64 class methods ---
6115
6117 : Inst_VOPC(iFmt, "v_cmpx_eq_i64")
6118 {
6119 setFlag(ALU);
6120 setFlag(WritesEXEC);
6121 } // Inst_VOPC__V_CMPX_EQ_I64
6122
6124 {
6125 } // ~Inst_VOPC__V_CMPX_EQ_I64
6126
6127 // --- description from .arch file ---
6128 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
6129 void
6131 {
6132 Wavefront *wf = gpuDynInst->wavefront();
6133 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6134 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6135 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6136
6137 src0.readSrc();
6138 src1.read();
6139
6140 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6141 if (wf->execMask(lane)) {
6142 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
6143 }
6144 }
6145
6146 wf->execMask() = vcc.rawData();
6147 vcc.write();
6148 } // execute
6149 // --- Inst_VOPC__V_CMPX_LE_I64 class methods ---
6150
6152 : Inst_VOPC(iFmt, "v_cmpx_le_i64")
6153 {
6154 setFlag(ALU);
6155 setFlag(WritesEXEC);
6156 } // Inst_VOPC__V_CMPX_LE_I64
6157
6159 {
6160 } // ~Inst_VOPC__V_CMPX_LE_I64
6161
6162 // --- description from .arch file ---
6163 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
6164 void
6166 {
6167 Wavefront *wf = gpuDynInst->wavefront();
6168 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6169 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6170 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6171
6172 src0.readSrc();
6173 src1.read();
6174
6175 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6176 if (wf->execMask(lane)) {
6177 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
6178 }
6179 }
6180
6181 wf->execMask() = vcc.rawData();
6182 vcc.write();
6183 } // execute
6184 // --- Inst_VOPC__V_CMPX_GT_I64 class methods ---
6185
6187 : Inst_VOPC(iFmt, "v_cmpx_gt_i64")
6188 {
6189 setFlag(ALU);
6190 setFlag(WritesEXEC);
6191 } // Inst_VOPC__V_CMPX_GT_I64
6192
6194 {
6195 } // ~Inst_VOPC__V_CMPX_GT_I64
6196
6197 // --- description from .arch file ---
6198 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
6199 void
6201 {
6202 Wavefront *wf = gpuDynInst->wavefront();
6203 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6204 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6205 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6206
6207 src0.readSrc();
6208 src1.read();
6209
6210 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6211 if (wf->execMask(lane)) {
6212 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
6213 }
6214 }
6215
6216 wf->execMask() = vcc.rawData();
6217 vcc.write();
6218 } // execute
6219 // --- Inst_VOPC__V_CMPX_NE_I64 class methods ---
6220
6222 : Inst_VOPC(iFmt, "v_cmpx_ne_i64")
6223 {
6224 setFlag(ALU);
6225 setFlag(WritesEXEC);
6226 } // Inst_VOPC__V_CMPX_NE_I64
6227
6229 {
6230 } // ~Inst_VOPC__V_CMPX_NE_I64
6231
6232 // --- description from .arch file ---
6233 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
6234 void
6236 {
6237 Wavefront *wf = gpuDynInst->wavefront();
6238 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6239 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6240 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6241
6242 src0.readSrc();
6243 src1.read();
6244
6245 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6246 if (wf->execMask(lane)) {
6247 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
6248 }
6249 }
6250
6251 wf->execMask() = vcc.rawData();
6252 vcc.write();
6253 } // execute
6254 // --- Inst_VOPC__V_CMPX_GE_I64 class methods ---
6255
6257 : Inst_VOPC(iFmt, "v_cmpx_ge_i64")
6258 {
6259 setFlag(ALU);
6260 setFlag(WritesEXEC);
6261 } // Inst_VOPC__V_CMPX_GE_I64
6262
6264 {
6265 } // ~Inst_VOPC__V_CMPX_GE_I64
6266
6267 // --- description from .arch file ---
6268 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
6269 void
6271 {
6272 Wavefront *wf = gpuDynInst->wavefront();
6273 ConstVecOperandI64 src0(gpuDynInst, instData.SRC0);
6274 ConstVecOperandI64 src1(gpuDynInst, instData.VSRC1);
6275 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6276
6277 src0.readSrc();
6278 src1.read();
6279
6280 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6281 if (wf->execMask(lane)) {
6282 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
6283 }
6284 }
6285
6286 wf->execMask() = vcc.rawData();
6287 vcc.write();
6288 } // execute
6289 // --- Inst_VOPC__V_CMPX_T_I64 class methods ---
6290
6292 : Inst_VOPC(iFmt, "v_cmpx_t_i64")
6293 {
6294 setFlag(ALU);
6295 setFlag(WritesEXEC);
6296 } // Inst_VOPC__V_CMPX_T_I64
6297
6299 {
6300 } // ~Inst_VOPC__V_CMPX_T_I64
6301
6302 // --- description from .arch file ---
6303 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
6304 void
6306 {
6307 Wavefront *wf = gpuDynInst->wavefront();
6308 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6309
6310 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6311 if (wf->execMask(lane)) {
6312 vcc.setBit(lane, 1);
6313 }
6314 }
6315
6316 wf->execMask() = vcc.rawData();
6317 vcc.write();
6318 } // execute
6319 // --- Inst_VOPC__V_CMPX_F_U64 class methods ---
6320
6322 : Inst_VOPC(iFmt, "v_cmpx_f_u64")
6323 {
6324 setFlag(ALU);
6325 setFlag(WritesEXEC);
6326 } // Inst_VOPC__V_CMPX_F_U64
6327
6329 {
6330 } // ~Inst_VOPC__V_CMPX_F_U64
6331
6332 // --- description from .arch file ---
6333 // EXEC,D.u64[threadID] = 0; D = VCC in VOPC encoding.
6334 void
6336 {
6337 Wavefront *wf = gpuDynInst->wavefront();
6338 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6339
6340 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6341 if (wf->execMask(lane)) {
6342 vcc.setBit(lane, 0);
6343 }
6344 }
6345
6346 wf->execMask() = vcc.rawData();
6347 vcc.write();
6348 } // execute
6349 // --- Inst_VOPC__V_CMPX_LT_U64 class methods ---
6350
6352 : Inst_VOPC(iFmt, "v_cmpx_lt_u64")
6353 {
6354 setFlag(ALU);
6355 setFlag(WritesEXEC);
6356 } // Inst_VOPC__V_CMPX_LT_U64
6357
6359 {
6360 } // ~Inst_VOPC__V_CMPX_LT_U64
6361
6362 // --- description from .arch file ---
6363 // EXEC,D.u64[threadID] = (S0 < S1); D = VCC in VOPC encoding.
6364 void
6366 {
6367 Wavefront *wf = gpuDynInst->wavefront();
6368 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6369 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6370 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6371
6372 src0.readSrc();
6373 src1.read();
6374
6375 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6376 if (wf->execMask(lane)) {
6377 vcc.setBit(lane, src0[lane] < src1[lane] ? 1 : 0);
6378 }
6379 }
6380
6381 wf->execMask() = vcc.rawData();
6382 vcc.write();
6383 } // execute
6384 // --- Inst_VOPC__V_CMPX_EQ_U64 class methods ---
6385
6387 : Inst_VOPC(iFmt, "v_cmpx_eq_u64")
6388 {
6389 setFlag(ALU);
6390 setFlag(WritesEXEC);
6391 } // Inst_VOPC__V_CMPX_EQ_U64
6392
6394 {
6395 } // ~Inst_VOPC__V_CMPX_EQ_U64
6396
6397 // --- description from .arch file ---
6398 // EXEC,D.u64[threadID] = (S0 == S1); D = VCC in VOPC encoding.
6399 void
6401 {
6402 Wavefront *wf = gpuDynInst->wavefront();
6403 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6404 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6405 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6406
6407 src0.readSrc();
6408 src1.read();
6409
6410 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6411 if (wf->execMask(lane)) {
6412 vcc.setBit(lane, src0[lane] == src1[lane] ? 1 : 0);
6413 }
6414 }
6415
6416 wf->execMask() = vcc.rawData();
6417 vcc.write();
6418 } // execute
6419 // --- Inst_VOPC__V_CMPX_LE_U64 class methods ---
6420
6422 : Inst_VOPC(iFmt, "v_cmpx_le_u64")
6423 {
6424 setFlag(ALU);
6425 setFlag(WritesEXEC);
6426 } // Inst_VOPC__V_CMPX_LE_U64
6427
6429 {
6430 } // ~Inst_VOPC__V_CMPX_LE_U64
6431
6432 // --- description from .arch file ---
6433 // EXEC,D.u64[threadID] = (S0 <= S1); D = VCC in VOPC encoding.
6434 void
6436 {
6437 Wavefront *wf = gpuDynInst->wavefront();
6438 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6439 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6440 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6441
6442 src0.readSrc();
6443 src1.read();
6444
6445 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6446 if (wf->execMask(lane)) {
6447 vcc.setBit(lane, src0[lane] <= src1[lane] ? 1 : 0);
6448 }
6449 }
6450
6451 wf->execMask() = vcc.rawData();
6452 vcc.write();
6453 } // execute
6454 // --- Inst_VOPC__V_CMPX_GT_U64 class methods ---
6455
6457 : Inst_VOPC(iFmt, "v_cmpx_gt_u64")
6458 {
6459 setFlag(ALU);
6460 setFlag(WritesEXEC);
6461 } // Inst_VOPC__V_CMPX_GT_U64
6462
6464 {
6465 } // ~Inst_VOPC__V_CMPX_GT_U64
6466
6467 // --- description from .arch file ---
6468 // EXEC,D.u64[threadID] = (S0 > S1); D = VCC in VOPC encoding.
6469 void
6471 {
6472 Wavefront *wf = gpuDynInst->wavefront();
6473 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6474 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6475 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6476
6477 src0.readSrc();
6478 src1.read();
6479
6480 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6481 if (wf->execMask(lane)) {
6482 vcc.setBit(lane, src0[lane] > src1[lane] ? 1 : 0);
6483 }
6484 }
6485
6486 wf->execMask() = vcc.rawData();
6487 vcc.write();
6488 } // execute
6489 // --- Inst_VOPC__V_CMPX_NE_U64 class methods ---
6490
6492 : Inst_VOPC(iFmt, "v_cmpx_ne_u64")
6493 {
6494 setFlag(ALU);
6495 setFlag(WritesEXEC);
6496 } // Inst_VOPC__V_CMPX_NE_U64
6497
6499 {
6500 } // ~Inst_VOPC__V_CMPX_NE_U64
6501
6502 // --- description from .arch file ---
6503 // EXEC,D.u64[threadID] = (S0 <> S1); D = VCC in VOPC encoding.
6504 void
6506 {
6507 Wavefront *wf = gpuDynInst->wavefront();
6508 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6509 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6510 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6511
6512 src0.readSrc();
6513 src1.read();
6514
6515 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6516 if (wf->execMask(lane)) {
6517 vcc.setBit(lane, src0[lane] != src1[lane] ? 1 : 0);
6518 }
6519 }
6520
6521 wf->execMask() = vcc.rawData();
6522 vcc.write();
6523 } // execute
6524 // --- Inst_VOPC__V_CMPX_GE_U64 class methods ---
6525
6527 : Inst_VOPC(iFmt, "v_cmpx_ge_u64")
6528 {
6529 setFlag(ALU);
6530 setFlag(WritesEXEC);
6531 } // Inst_VOPC__V_CMPX_GE_U64
6532
6534 {
6535 } // ~Inst_VOPC__V_CMPX_GE_U64
6536
6537 // --- description from .arch file ---
6538 // EXEC,D.u64[threadID] = (S0 >= S1); D = VCC in VOPC encoding.
6539 void
6541 {
6542 Wavefront *wf = gpuDynInst->wavefront();
6543 ConstVecOperandU64 src0(gpuDynInst, instData.SRC0);
6544 ConstVecOperandU64 src1(gpuDynInst, instData.VSRC1);
6545 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6546
6547 src0.readSrc();
6548 src1.read();
6549
6550 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6551 if (wf->execMask(lane)) {
6552 vcc.setBit(lane, src0[lane] >= src1[lane] ? 1 : 0);
6553 }
6554 }
6555
6556 wf->execMask() = vcc.rawData();
6557 vcc.write();
6558 } // execute
6559 // --- Inst_VOPC__V_CMPX_T_U64 class methods ---
6560
6562 : Inst_VOPC(iFmt, "v_cmpx_t_u64")
6563 {
6564 setFlag(ALU);
6565 setFlag(WritesEXEC);
6566 } // Inst_VOPC__V_CMPX_T_U64
6567
6569 {
6570 } // ~Inst_VOPC__V_CMPX_T_U64
6571
6572 // --- description from .arch file ---
6573 // EXEC,D.u64[threadID] = 1; D = VCC in VOPC encoding.
6574 void
6576 {
6577 Wavefront *wf = gpuDynInst->wavefront();
6578 ScalarOperandU64 vcc(gpuDynInst, REG_VCC_LO);
6579
6580 for (int lane = 0; lane < NumVecElemPerVecReg; ++lane) {
6581 if (wf->execMask(lane)) {
6582 vcc.setBit(lane, 1);
6583 }
6584 }
6585
6586 wf->execMask() = vcc.rawData();
6587 vcc.write();
6588 } // execute
6589} // namespace VegaISA
6590} // namespace gem5
void setFlag(Flags flag)
void execute(GPUDynInstPtr) override
Definition vopc.cc:563
void execute(GPUDynInstPtr) override
Definition vopc.cc:182
void execute(GPUDynInstPtr) override
Definition vopc.cc:413
void execute(GPUDynInstPtr) override
Definition vopc.cc:946
void execute(GPUDynInstPtr) override
Definition vopc.cc:1847
void execute(GPUDynInstPtr) override
Definition vopc.cc:2957
void execute(GPUDynInstPtr) override
Definition vopc.cc:4034
void execute(GPUDynInstPtr) override
Definition vopc.cc:5082
void execute(GPUDynInstPtr) override
Definition vopc.cc:6130
void execute(GPUDynInstPtr) override
Definition vopc.cc:4304
void execute(GPUDynInstPtr) override
Definition vopc.cc:5352
void execute(GPUDynInstPtr) override
Definition vopc.cc:6400
void execute(GPUDynInstPtr) override
Definition vopc.cc:904
void execute(GPUDynInstPtr) override
Definition vopc.cc:1780
void execute(GPUDynInstPtr) override
Definition vopc.cc:2890
void execute(GPUDynInstPtr) override
Definition vopc.cc:3969
void execute(GPUDynInstPtr) override
Definition vopc.cc:5017
void execute(GPUDynInstPtr) override
Definition vopc.cc:6065
void execute(GPUDynInstPtr) override
Definition vopc.cc:4239
void execute(GPUDynInstPtr) override
Definition vopc.cc:5287
void execute(GPUDynInstPtr) override
Definition vopc.cc:6335
void execute(GPUDynInstPtr) override
Definition vopc.cc:1030
void execute(GPUDynInstPtr) override
Definition vopc.cc:1992
void execute(GPUDynInstPtr) override
Definition vopc.cc:3102
void execute(GPUDynInstPtr) override
Definition vopc.cc:4174
void execute(GPUDynInstPtr) override
Definition vopc.cc:5222
void execute(GPUDynInstPtr) override
Definition vopc.cc:6270
void execute(GPUDynInstPtr) override
Definition vopc.cc:4444
void execute(GPUDynInstPtr) override
Definition vopc.cc:5492
void execute(GPUDynInstPtr) override
Definition vopc.cc:6540
void execute(GPUDynInstPtr) override
Definition vopc.cc:988
void execute(GPUDynInstPtr) override
Definition vopc.cc:1919
void execute(GPUDynInstPtr) override
Definition vopc.cc:3029
void execute(GPUDynInstPtr) override
Definition vopc.cc:4104
void execute(GPUDynInstPtr) override
Definition vopc.cc:5152
void execute(GPUDynInstPtr) override
Definition vopc.cc:6200
void execute(GPUDynInstPtr) override
Definition vopc.cc:4374
void execute(GPUDynInstPtr) override
Definition vopc.cc:5422
void execute(GPUDynInstPtr) override
Definition vopc.cc:6470
void execute(GPUDynInstPtr) override
Definition vopc.cc:967
void execute(GPUDynInstPtr) override
Definition vopc.cc:1883
void execute(GPUDynInstPtr) override
Definition vopc.cc:2993
void execute(GPUDynInstPtr) override
Definition vopc.cc:4069
void execute(GPUDynInstPtr) override
Definition vopc.cc:5117
void execute(GPUDynInstPtr) override
Definition vopc.cc:6165
void execute(GPUDynInstPtr) override
Definition vopc.cc:4339
void execute(GPUDynInstPtr) override
Definition vopc.cc:5387
void execute(GPUDynInstPtr) override
Definition vopc.cc:6435
void execute(GPUDynInstPtr) override
Definition vopc.cc:1009
void execute(GPUDynInstPtr) override
Definition vopc.cc:1955
void execute(GPUDynInstPtr) override
Definition vopc.cc:3065
void execute(GPUDynInstPtr) override
Definition vopc.cc:925
void execute(GPUDynInstPtr) override
Definition vopc.cc:1811
void execute(GPUDynInstPtr) override
Definition vopc.cc:2921
void execute(GPUDynInstPtr) override
Definition vopc.cc:3999
void execute(GPUDynInstPtr) override
Definition vopc.cc:5047
void execute(GPUDynInstPtr) override
Definition vopc.cc:6095
void execute(GPUDynInstPtr) override
Definition vopc.cc:4269
void execute(GPUDynInstPtr) override
Definition vopc.cc:5317
void execute(GPUDynInstPtr) override
Definition vopc.cc:6365
void execute(GPUDynInstPtr) override
Definition vopc.cc:1179
void execute(GPUDynInstPtr) override
Definition vopc.cc:2249
void execute(GPUDynInstPtr) override
Definition vopc.cc:3359
void execute(GPUDynInstPtr) override
Definition vopc.cc:4139
void execute(GPUDynInstPtr) override
Definition vopc.cc:5187
void execute(GPUDynInstPtr) override
Definition vopc.cc:6235
void execute(GPUDynInstPtr) override
Definition vopc.cc:4409
void execute(GPUDynInstPtr) override
Definition vopc.cc:5457
void execute(GPUDynInstPtr) override
Definition vopc.cc:6505
void execute(GPUDynInstPtr) override
Definition vopc.cc:1095
void execute(GPUDynInstPtr) override
Definition vopc.cc:2104
void execute(GPUDynInstPtr) override
Definition vopc.cc:3214
void execute(GPUDynInstPtr) override
Definition vopc.cc:1137
void execute(GPUDynInstPtr) override
Definition vopc.cc:2177
void execute(GPUDynInstPtr) override
Definition vopc.cc:3287
void execute(GPUDynInstPtr) override
Definition vopc.cc:1158
void execute(GPUDynInstPtr) override
Definition vopc.cc:2213
void execute(GPUDynInstPtr) override
Definition vopc.cc:3323
void execute(GPUDynInstPtr) override
Definition vopc.cc:1116
void execute(GPUDynInstPtr) override
Definition vopc.cc:2140
void execute(GPUDynInstPtr) override
Definition vopc.cc:3250
void execute(GPUDynInstPtr) override
Definition vopc.cc:1200
void execute(GPUDynInstPtr) override
Definition vopc.cc:2285
void execute(GPUDynInstPtr) override
Definition vopc.cc:3395
void execute(GPUDynInstPtr) override
Definition vopc.cc:1052
void execute(GPUDynInstPtr) override
Definition vopc.cc:2029
void execute(GPUDynInstPtr) override
Definition vopc.cc:3139
void execute(GPUDynInstPtr) override
Definition vopc.cc:1221
void execute(GPUDynInstPtr) override
Definition vopc.cc:2321
void execute(GPUDynInstPtr) override
Definition vopc.cc:3431
void execute(GPUDynInstPtr) override
Definition vopc.cc:4209
void execute(GPUDynInstPtr) override
Definition vopc.cc:5257
void execute(GPUDynInstPtr) override
Definition vopc.cc:6305
void execute(GPUDynInstPtr) override
Definition vopc.cc:4479
void execute(GPUDynInstPtr) override
Definition vopc.cc:5527
void execute(GPUDynInstPtr) override
Definition vopc.cc:6575
void execute(GPUDynInstPtr) override
Definition vopc.cc:1074
void execute(GPUDynInstPtr) override
Definition vopc.cc:2067
void execute(GPUDynInstPtr) override
Definition vopc.cc:3177
void execute(GPUDynInstPtr) override
Definition vopc.cc:529
void execute(GPUDynInstPtr) override
Definition vopc.cc:67
void execute(GPUDynInstPtr) override
Definition vopc.cc:297
void execute(GPUDynInstPtr) override
Definition vopc.cc:623
void execute(GPUDynInstPtr) override
Definition vopc.cc:1304
void execute(GPUDynInstPtr) override
Definition vopc.cc:2414
void execute(GPUDynInstPtr) override
Definition vopc.cc:3521
void execute(GPUDynInstPtr) override
Definition vopc.cc:4569
void execute(GPUDynInstPtr) override
Definition vopc.cc:5617
void execute(GPUDynInstPtr) override
Definition vopc.cc:3775
void execute(GPUDynInstPtr) override
Definition vopc.cc:4823
void execute(GPUDynInstPtr) override
Definition vopc.cc:5871
void execute(GPUDynInstPtr) override
Definition vopc.cc:583
void execute(GPUDynInstPtr) override
Definition vopc.cc:1241
void execute(GPUDynInstPtr) override
Definition vopc.cc:2351
void execute(GPUDynInstPtr) override
Definition vopc.cc:3460
void execute(GPUDynInstPtr) override
Definition vopc.cc:4508
void execute(GPUDynInstPtr) override
Definition vopc.cc:5556
void execute(GPUDynInstPtr) override
Definition vopc.cc:3714
void execute(GPUDynInstPtr) override
Definition vopc.cc:4762
void execute(GPUDynInstPtr) override
Definition vopc.cc:5810
void execute(GPUDynInstPtr) override
Definition vopc.cc:703
void execute(GPUDynInstPtr) override
Definition vopc.cc:1441
void execute(GPUDynInstPtr) override
Definition vopc.cc:2551
void execute(GPUDynInstPtr) override
Definition vopc.cc:3653
void execute(GPUDynInstPtr) override
Definition vopc.cc:4701
void execute(GPUDynInstPtr) override
Definition vopc.cc:5749
void execute(GPUDynInstPtr) override
Definition vopc.cc:3907
void execute(GPUDynInstPtr) override
Definition vopc.cc:4955
void execute(GPUDynInstPtr) override
Definition vopc.cc:6003
void execute(GPUDynInstPtr) override
Definition vopc.cc:663
void execute(GPUDynInstPtr) override
Definition vopc.cc:1372
void execute(GPUDynInstPtr) override
Definition vopc.cc:2482
void execute(GPUDynInstPtr) override
Definition vopc.cc:3587
void execute(GPUDynInstPtr) override
Definition vopc.cc:4635
void execute(GPUDynInstPtr) override
Definition vopc.cc:5683
void execute(GPUDynInstPtr) override
Definition vopc.cc:3841
void execute(GPUDynInstPtr) override
Definition vopc.cc:4889
void execute(GPUDynInstPtr) override
Definition vopc.cc:5937
void execute(GPUDynInstPtr) override
Definition vopc.cc:643
void execute(GPUDynInstPtr) override
Definition vopc.cc:1338
void execute(GPUDynInstPtr) override
Definition vopc.cc:2448
void execute(GPUDynInstPtr) override
Definition vopc.cc:3554
void execute(GPUDynInstPtr) override
Definition vopc.cc:4602
void execute(GPUDynInstPtr) override
Definition vopc.cc:5650
void execute(GPUDynInstPtr) override
Definition vopc.cc:3808
void execute(GPUDynInstPtr) override
Definition vopc.cc:4856
void execute(GPUDynInstPtr) override
Definition vopc.cc:5904
void execute(GPUDynInstPtr) override
Definition vopc.cc:683
void execute(GPUDynInstPtr) override
Definition vopc.cc:1406
void execute(GPUDynInstPtr) override
Definition vopc.cc:2516
void execute(GPUDynInstPtr) override
Definition vopc.cc:603
void execute(GPUDynInstPtr) override
Definition vopc.cc:1270
void execute(GPUDynInstPtr) override
Definition vopc.cc:2380
void execute(GPUDynInstPtr) override
Definition vopc.cc:3488
void execute(GPUDynInstPtr) override
Definition vopc.cc:4536
void execute(GPUDynInstPtr) override
Definition vopc.cc:5584
void execute(GPUDynInstPtr) override
Definition vopc.cc:3742
void execute(GPUDynInstPtr) override
Definition vopc.cc:4790
void execute(GPUDynInstPtr) override
Definition vopc.cc:5838
void execute(GPUDynInstPtr) override
Definition vopc.cc:843
void execute(GPUDynInstPtr) override
Definition vopc.cc:1682
void execute(GPUDynInstPtr) override
Definition vopc.cc:2792
void execute(GPUDynInstPtr) override
Definition vopc.cc:3620
void execute(GPUDynInstPtr) override
Definition vopc.cc:4668
void execute(GPUDynInstPtr) override
Definition vopc.cc:5716
void execute(GPUDynInstPtr) override
Definition vopc.cc:3874
void execute(GPUDynInstPtr) override
Definition vopc.cc:4922
void execute(GPUDynInstPtr) override
Definition vopc.cc:5970
void execute(GPUDynInstPtr) override
Definition vopc.cc:763
void execute(GPUDynInstPtr) override
Definition vopc.cc:1545
void execute(GPUDynInstPtr) override
Definition vopc.cc:2655
void execute(GPUDynInstPtr) override
Definition vopc.cc:803
void execute(GPUDynInstPtr) override
Definition vopc.cc:1614
void execute(GPUDynInstPtr) override
Definition vopc.cc:2724
void execute(GPUDynInstPtr) override
Definition vopc.cc:823
void execute(GPUDynInstPtr) override
Definition vopc.cc:1648
void execute(GPUDynInstPtr) override
Definition vopc.cc:2758
void execute(GPUDynInstPtr) override
Definition vopc.cc:783
void execute(GPUDynInstPtr) override
Definition vopc.cc:1579
void execute(GPUDynInstPtr) override
Definition vopc.cc:2689
void execute(GPUDynInstPtr) override
Definition vopc.cc:863
void execute(GPUDynInstPtr) override
Definition vopc.cc:1716
void execute(GPUDynInstPtr) override
Definition vopc.cc:2826
void execute(GPUDynInstPtr) override
Definition vopc.cc:723
void execute(GPUDynInstPtr) override
Definition vopc.cc:1475
void execute(GPUDynInstPtr) override
Definition vopc.cc:2585
void execute(GPUDynInstPtr) override
Definition vopc.cc:883
void execute(GPUDynInstPtr) override
Definition vopc.cc:1750
void execute(GPUDynInstPtr) override
Definition vopc.cc:2860
void execute(GPUDynInstPtr) override
Definition vopc.cc:3686
void execute(GPUDynInstPtr) override
Definition vopc.cc:4734
void execute(GPUDynInstPtr) override
Definition vopc.cc:5782
void execute(GPUDynInstPtr) override
Definition vopc.cc:3940
void execute(GPUDynInstPtr) override
Definition vopc.cc:4988
void execute(GPUDynInstPtr) override
Definition vopc.cc:6036
void execute(GPUDynInstPtr) override
Definition vopc.cc:743
void execute(GPUDynInstPtr) override
Definition vopc.cc:1510
void execute(GPUDynInstPtr) override
Definition vopc.cc:2620
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:392
std::enable_if< Condition, void >::type setBit(int bit, int bit_val)
bit access to scalar data.
Definition operand.hh:491
void read() override
read from the vrf.
Definition operand.hh:147
void readSrc()
certain vector operands can read from the vrf/srf or constants.
Definition operand.hh:131
VectorMask & execMask()
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
Definition bitfield.hh:79
constexpr unsigned NumVecElemPerVecReg
Definition vec.hh:61
Copyright (c) 2024 - Pranith Kumar Copyright (c) 2020 Inria All rights reserved.
Definition binary32.hh:36
std::shared_ptr< GPUDynInst > GPUDynInstPtr
Definition misc.hh:49
constexpr bool isinf(gem5::AMDGPU::fp16_e5m10_info a)
Definition fp16_e5m10.hh:78
constexpr bool isnan(gem5::AMDGPU::fp16_e5m10_info a)
Definition fp16_e5m10.hh:83
constexpr bool isnormal(gem5::AMDGPU::fp16_e5m10_info a)
Definition fp16_e5m10.hh:88

Generated on Tue Jun 18 2024 16:23:55 for gem5 by doxygen 1.11.0