Lines Matching full:encoding
146 uint32_t encoding = (0b10 << 30); in emit_sop2_instruction() local
147 encoding |= opcode << 23; in emit_sop2_instruction()
148 encoding |= !instr->definitions.empty() ? reg(ctx, instr->definitions[0]) << 16 : 0; in emit_sop2_instruction()
149 encoding |= instr->operands.size() >= 2 ? reg(ctx, instr->operands[1]) << 8 : 0; in emit_sop2_instruction()
150 encoding |= !instr->operands.empty() ? reg(ctx, instr->operands[0]) : 0; in emit_sop2_instruction()
151 out.push_back(encoding); in emit_sop2_instruction()
176 uint32_t encoding = (0b1011 << 28); in emit_sopk_instruction() local
177 encoding |= opcode << 23; in emit_sopk_instruction()
178 encoding |= !instr->definitions.empty() && !(instr->definitions[0].physReg() == scc) in emit_sopk_instruction()
183 encoding |= imm; in emit_sopk_instruction()
184 out.push_back(encoding); in emit_sopk_instruction()
192 uint32_t encoding = (0b101111101 << 23); in emit_sop1_instruction() local
193 encoding |= !instr->definitions.empty() ? reg(ctx, instr->definitions[0]) << 16 : 0; in emit_sop1_instruction()
194 encoding |= opcode << 8; in emit_sop1_instruction()
195 encoding |= !instr->operands.empty() ? reg(ctx, instr->operands[0]) : 0; in emit_sop1_instruction()
196 out.push_back(encoding); in emit_sop1_instruction()
204 uint32_t encoding = (0b101111110 << 23); in emit_sopc_instruction() local
205 encoding |= opcode << 16; in emit_sopc_instruction()
206 encoding |= instr->operands.size() == 2 ? reg(ctx, instr->operands[1]) << 8 : 0; in emit_sopc_instruction()
207 encoding |= !instr->operands.empty() ? reg(ctx, instr->operands[0]) : 0; in emit_sopc_instruction()
208 out.push_back(encoding); in emit_sopc_instruction()
218 uint32_t encoding = (0b101111111 << 23); in emit_sopp_instruction() local
219 encoding |= opcode << 16; in emit_sopp_instruction()
225 encoding |= (uint16_t)sopp.imm; in emit_sopp_instruction()
227 out.push_back(encoding); in emit_sopp_instruction()
240 uint32_t encoding = 0; in emit_smem_instruction() local
243 encoding = (0b11000 << 27); in emit_smem_instruction()
244 encoding |= opcode << 22; in emit_smem_instruction()
245 encoding |= instr->definitions.size() ? reg(ctx, instr->definitions[0]) << 15 : 0; in emit_smem_instruction()
246 encoding |= instr->operands.size() ? (reg(ctx, instr->operands[0]) >> 1) << 9 : 0; in emit_smem_instruction()
249 encoding |= reg(ctx, instr->operands[1]); in emit_smem_instruction()
251 encoding |= 255; /* SQ_SRC_LITERAL */ in emit_smem_instruction()
253 encoding |= instr->operands[1].constantValue() >> 2; in emit_smem_instruction()
254 encoding |= 1 << 8; in emit_smem_instruction()
257 out.push_back(encoding); in emit_smem_instruction()
266 encoding = (0b110000 << 26); in emit_smem_instruction()
270 encoding = (0b111101 << 26); in emit_smem_instruction()
272 encoding |= dlc ? 1 << (ctx.gfx_level >= GFX11 ? 13 : 14) : 0; in emit_smem_instruction()
276 encoding |= opcode << 18; in emit_smem_instruction()
277 encoding |= glc ? 1 << (ctx.gfx_level >= GFX11 ? 14 : 16) : 0; in emit_smem_instruction()
279 encoding |= opcode << 13; in emit_smem_instruction()
280 encoding |= get_gfx12_cpol(smem) << 21; in emit_smem_instruction()
285 encoding |= instr->operands[1].isConstant() ? 1 << 17 : 0; /* IMM - immediate enable */ in emit_smem_instruction()
288 encoding |= soe ? 1 << 14 : 0; in emit_smem_instruction()
292 encoding |= (is_load ? reg(ctx, instr->definitions[0]) : reg(ctx, instr->operands[2])) << 6; in emit_smem_instruction()
295 encoding |= reg(ctx, instr->operands[0]) >> 1; in emit_smem_instruction()
298 out.push_back(encoding); in emit_smem_instruction()
299 encoding = 0; in emit_smem_instruction()
330 encoding |= offset; in emit_smem_instruction()
331 encoding |= soffset << 25; in emit_smem_instruction()
333 out.push_back(encoding); in emit_smem_instruction()
342 uint32_t encoding = 0; in emit_vop2_instruction() local
343 encoding |= opcode << 25; in emit_vop2_instruction()
344 encoding |= reg(ctx, instr->definitions[0], 8) << 17; in emit_vop2_instruction()
345 encoding |= (valu.opsel[3] ? 128 : 0) << 17; in emit_vop2_instruction()
346 encoding |= reg(ctx, instr->operands[1], 8) << 9; in emit_vop2_instruction()
347 encoding |= (valu.opsel[1] ? 128 : 0) << 9; in emit_vop2_instruction()
348 encoding |= reg(ctx, instr->operands[0]); in emit_vop2_instruction()
349 encoding |= valu.opsel[0] ? 128 : 0; in emit_vop2_instruction()
350 out.push_back(encoding); in emit_vop2_instruction()
359 uint32_t encoding = (0b0111111 << 25); in emit_vop1_instruction() local
361 encoding |= reg(ctx, instr->definitions[0], 8) << 17; in emit_vop1_instruction()
362 encoding |= (valu.opsel[3] ? 128 : 0) << 17; in emit_vop1_instruction()
364 encoding |= opcode << 9; in emit_vop1_instruction()
366 encoding |= reg(ctx, instr->operands[0]); in emit_vop1_instruction()
367 encoding |= valu.opsel[0] ? 128 : 0; in emit_vop1_instruction()
369 out.push_back(encoding); in emit_vop1_instruction()
378 uint32_t encoding = (0b0111110 << 25); in emit_vopc_instruction() local
379 encoding |= opcode << 17; in emit_vopc_instruction()
380 encoding |= reg(ctx, instr->operands[1], 8) << 9; in emit_vopc_instruction()
381 encoding |= (valu.opsel[1] ? 128 : 0) << 9; in emit_vopc_instruction()
382 encoding |= reg(ctx, instr->operands[0]); in emit_vopc_instruction()
383 encoding |= valu.opsel[0] ? 128 : 0; in emit_vopc_instruction()
384 out.push_back(encoding); in emit_vopc_instruction()
393 uint32_t encoding = 0; in emit_vintrp_instruction() local
400 encoding = (0b110100 << 26); in emit_vintrp_instruction()
402 encoding = (0b110101 << 26); in emit_vintrp_instruction()
409 encoding |= opcode << 16; in emit_vintrp_instruction()
410 encoding |= opsel << 11; in emit_vintrp_instruction()
411 encoding |= reg(ctx, instr->definitions[0], 8); in emit_vintrp_instruction()
412 out.push_back(encoding); in emit_vintrp_instruction()
414 encoding = 0; in emit_vintrp_instruction()
415 encoding |= interp.attribute; in emit_vintrp_instruction()
416 encoding |= interp.component << 6; in emit_vintrp_instruction()
417 encoding |= interp.high_16bits << 8; in emit_vintrp_instruction()
418 encoding |= reg(ctx, instr->operands[0]) << 9; in emit_vintrp_instruction()
423 encoding |= reg(ctx, instr->operands[2]) << 18; in emit_vintrp_instruction()
425 out.push_back(encoding); in emit_vintrp_instruction()
428 encoding = (0b110101 << 26); /* Vega ISA doc says 110010 but it's wrong */ in emit_vintrp_instruction()
430 encoding = (0b110010 << 26); in emit_vintrp_instruction()
433 assert(encoding); in emit_vintrp_instruction()
434 encoding |= reg(ctx, instr->definitions[0], 8) << 18; in emit_vintrp_instruction()
435 encoding |= opcode << 16; in emit_vintrp_instruction()
436 encoding |= interp.attribute << 10; in emit_vintrp_instruction()
437 encoding |= interp.component << 8; in emit_vintrp_instruction()
439 encoding |= (0x3 & instr->operands[0].constantValue()); in emit_vintrp_instruction()
441 encoding |= reg(ctx, instr->operands[0], 8); in emit_vintrp_instruction()
442 out.push_back(encoding); in emit_vintrp_instruction()
453 uint32_t encoding = (0b11001101 << 24); in emit_vinterp_inreg_instruction() local
454 encoding |= reg(ctx, instr->definitions[0], 8); in emit_vinterp_inreg_instruction()
455 encoding |= (uint32_t)interp.wait_exp << 8; in emit_vinterp_inreg_instruction()
456 encoding |= (uint32_t)interp.opsel << 11; in emit_vinterp_inreg_instruction()
457 encoding |= (uint32_t)interp.clamp << 15; in emit_vinterp_inreg_instruction()
458 encoding |= opcode << 16; in emit_vinterp_inreg_instruction()
459 out.push_back(encoding); in emit_vinterp_inreg_instruction()
461 encoding = 0; in emit_vinterp_inreg_instruction()
463 encoding |= reg(ctx, instr->operands[i]) << (i * 9); in emit_vinterp_inreg_instruction()
465 encoding |= interp.neg[i] << (29 + i); in emit_vinterp_inreg_instruction()
466 out.push_back(encoding); in emit_vinterp_inreg_instruction()
475 uint32_t encoding = (0b110010 << 26); in emit_vopd_instruction() local
476 encoding |= reg(ctx, instr->operands[0]); in emit_vopd_instruction()
478 encoding |= reg(ctx, instr->operands[1], 8) << 9; in emit_vopd_instruction()
479 encoding |= (uint32_t)ctx.opcode[(int)vopd.opy] << 17; in emit_vopd_instruction()
480 encoding |= opcode << 22; in emit_vopd_instruction()
481 out.push_back(encoding); in emit_vopd_instruction()
485 encoding = reg(ctx, instr->operands[opy_start]); in emit_vopd_instruction()
487 encoding |= reg(ctx, instr->operands[opy_start + 1], 8) << 9; in emit_vopd_instruction()
488 encoding |= (reg(ctx, instr->definitions[1], 8) >> 1) << 17; in emit_vopd_instruction()
489 encoding |= reg(ctx, instr->definitions[0], 8) << 24; in emit_vopd_instruction()
490 out.push_back(encoding); in emit_vopd_instruction()
499 uint32_t encoding = (0b110110 << 26); in emit_ds_instruction() local
501 encoding |= opcode << 17; in emit_ds_instruction()
502 encoding |= (ds.gds ? 1 : 0) << 16; in emit_ds_instruction()
504 encoding |= opcode << 18; in emit_ds_instruction()
505 encoding |= (ds.gds ? 1 : 0) << 17; in emit_ds_instruction()
507 encoding |= ((0xFF & ds.offset1) << 8); in emit_ds_instruction()
508 encoding |= (0xFFFF & ds.offset0); in emit_ds_instruction()
509 out.push_back(encoding); in emit_ds_instruction()
510 encoding = 0; in emit_ds_instruction()
512 encoding |= reg(ctx, instr->definitions[0], 8) << 24; in emit_ds_instruction()
516 encoding |= reg(ctx, op, 8) << (8 * i); in emit_ds_instruction()
518 out.push_back(encoding); in emit_ds_instruction()
527 uint32_t encoding = (0b11001110 << 24); in emit_ldsdir_instruction() local
528 encoding |= opcode << 20; in emit_ldsdir_instruction()
529 encoding |= (uint32_t)dir.wait_vdst << 16; in emit_ldsdir_instruction()
531 encoding |= (uint32_t)dir.wait_vsrc << 23; in emit_ldsdir_instruction()
532 encoding |= (uint32_t)dir.attr << 10; in emit_ldsdir_instruction()
533 encoding |= (uint32_t)dir.attr_chan << 8; in emit_ldsdir_instruction()
534 encoding |= reg(ctx, instr->definitions[0], 8); in emit_ldsdir_instruction()
535 out.push_back(encoding); in emit_ldsdir_instruction()
547 uint32_t encoding = (0b111000 << 26); in emit_mubuf_instruction() local
551 encoding |= (mubuf.lds ? 1 : 0) << 16; in emit_mubuf_instruction()
552 encoding |= opcode << 18; in emit_mubuf_instruction()
553 encoding |= (glc ? 1 : 0) << 14; in emit_mubuf_instruction()
555 encoding |= (mubuf.idxen ? 1 : 0) << 13; in emit_mubuf_instruction()
558 encoding |= (mubuf.addr64 ? 1 : 0) << 15; in emit_mubuf_instruction()
560 encoding |= (mubuf.offen ? 1 : 0) << 12; in emit_mubuf_instruction()
563 encoding |= (slc ? 1 : 0) << 17; in emit_mubuf_instruction()
565 encoding |= (slc ? 1 : 0) << 12; in emit_mubuf_instruction()
566 encoding |= (dlc ? 1 : 0) << 13; in emit_mubuf_instruction()
568 encoding |= (dlc ? 1 : 0) << 15; in emit_mubuf_instruction()
570 encoding |= 0x0FFF & mubuf.offset; in emit_mubuf_instruction()
571 out.push_back(encoding); in emit_mubuf_instruction()
572 encoding = 0; in emit_mubuf_instruction()
574 encoding |= (slc ? 1 : 0) << 22; in emit_mubuf_instruction()
576 encoding |= reg(ctx, instr->operands[2]) << 24; in emit_mubuf_instruction()
578 encoding |= (mubuf.tfe ? 1 : 0) << 21; in emit_mubuf_instruction()
579 encoding |= (mubuf.offen ? 1 : 0) << 22; in emit_mubuf_instruction()
580 encoding |= (mubuf.idxen ? 1 : 0) << 23; in emit_mubuf_instruction()
582 encoding |= (mubuf.tfe ? 1 : 0) << 23; in emit_mubuf_instruction()
584 encoding |= (reg(ctx, instr->operands[0]) >> 2) << 16; in emit_mubuf_instruction()
586 encoding |= reg(ctx, instr->operands[3], 8) << 8; in emit_mubuf_instruction()
588 encoding |= reg(ctx, instr->definitions[0], 8) << 8; in emit_mubuf_instruction()
589 encoding |= reg(ctx, instr->operands[1], 8); in emit_mubuf_instruction()
590 out.push_back(encoding); in emit_mubuf_instruction()
600 uint32_t encoding = 0b110001 << 26; in emit_mubuf_instruction_gfx12() local
601 encoding |= opcode << 14; in emit_mubuf_instruction_gfx12()
604 encoding |= reg(ctx, sgpr_null); in emit_mubuf_instruction_gfx12()
606 encoding |= reg(ctx, instr->operands[2]); in emit_mubuf_instruction_gfx12()
608 encoding |= (mubuf.tfe ? 1 : 0) << 22; in emit_mubuf_instruction_gfx12()
609 out.push_back(encoding); in emit_mubuf_instruction_gfx12()
611 encoding = 0; in emit_mubuf_instruction_gfx12()
613 encoding |= reg(ctx, instr->operands[3], 8); in emit_mubuf_instruction_gfx12()
615 encoding |= reg(ctx, instr->definitions[0], 8); in emit_mubuf_instruction_gfx12()
616 encoding |= reg(ctx, instr->operands[0]) << 9; in emit_mubuf_instruction_gfx12()
617 encoding |= (mubuf.offen ? 1 : 0) << 30; in emit_mubuf_instruction_gfx12()
618 encoding |= (mubuf.idxen ? 1 : 0) << 31; in emit_mubuf_instruction_gfx12()
619 encoding |= get_gfx12_cpol(mubuf) << 18; in emit_mubuf_instruction_gfx12()
620 encoding |= 1 << 23; in emit_mubuf_instruction_gfx12()
621 out.push_back(encoding); in emit_mubuf_instruction_gfx12()
623 encoding = 0; in emit_mubuf_instruction_gfx12()
625 encoding |= reg(ctx, instr->operands[1], 8); in emit_mubuf_instruction_gfx12()
626 encoding |= (mubuf.offset & 0x00ffffff) << 8; in emit_mubuf_instruction_gfx12()
627 out.push_back(encoding); in emit_mubuf_instruction_gfx12()
642 uint32_t encoding = (0b111010 << 26); in emit_mtbuf_instruction() local
643 encoding |= (img_format << 19); /* Handles both the GFX10 FORMAT and the old NFMT+DFMT */ in emit_mtbuf_instruction()
645 encoding |= opcode << 16; in emit_mtbuf_instruction()
649 encoding |= (opcode & 0x07) << 16; /* 3 LSBs of 4-bit OPCODE */ in emit_mtbuf_instruction()
650 encoding |= (dlc ? 1 : 0) << 15; in emit_mtbuf_instruction()
652 encoding |= opcode << 15; in emit_mtbuf_instruction()
654 encoding |= (glc ? 1 : 0) << 14; in emit_mtbuf_instruction()
656 encoding |= (dlc ? 1 : 0) << 13; in emit_mtbuf_instruction()
657 encoding |= (slc ? 1 : 0) << 12; in emit_mtbuf_instruction()
659 encoding |= (mtbuf.idxen ? 1 : 0) << 13; in emit_mtbuf_instruction()
660 encoding |= (mtbuf.offen ? 1 : 0) << 12; in emit_mtbuf_instruction()
662 encoding |= 0x0FFF & mtbuf.offset; in emit_mtbuf_instruction()
663 out.push_back(encoding); in emit_mtbuf_instruction()
665 encoding = 0; in emit_mtbuf_instruction()
666 encoding |= reg(ctx, instr->operands[2]) << 24; in emit_mtbuf_instruction()
668 encoding |= (mtbuf.idxen ? 1 : 0) << 23; in emit_mtbuf_instruction()
669 encoding |= (mtbuf.offen ? 1 : 0) << 22; in emit_mtbuf_instruction()
670 encoding |= (mtbuf.tfe ? 1 : 0) << 21; in emit_mtbuf_instruction()
672 encoding |= (mtbuf.tfe ? 1 : 0) << 23; in emit_mtbuf_instruction()
673 encoding |= (slc ? 1 : 0) << 22; in emit_mtbuf_instruction()
675 encoding |= (((opcode & 0x08) >> 3) << 21); /* MSB of 4-bit OPCODE */ in emit_mtbuf_instruction()
677 encoding |= (reg(ctx, instr->operands[0]) >> 2) << 16; in emit_mtbuf_instruction()
679 encoding |= reg(ctx, instr->operands[3], 8) << 8; in emit_mtbuf_instruction()
681 encoding |= reg(ctx, instr->definitions[0], 8) << 8; in emit_mtbuf_instruction()
682 encoding |= reg(ctx, instr->operands[1], 8); in emit_mtbuf_instruction()
683 out.push_back(encoding); in emit_mtbuf_instruction()
694 uint32_t encoding = 0b110001 << 26; in emit_mtbuf_instruction_gfx12() local
695 encoding |= 0b1000 << 18; in emit_mtbuf_instruction_gfx12()
696 encoding |= opcode << 14; in emit_mtbuf_instruction_gfx12()
699 encoding |= reg(ctx, sgpr_null); in emit_mtbuf_instruction_gfx12()
701 encoding |= reg(ctx, instr->operands[2]); in emit_mtbuf_instruction_gfx12()
703 encoding |= (mtbuf.tfe ? 1 : 0) << 22; in emit_mtbuf_instruction_gfx12()
704 out.push_back(encoding); in emit_mtbuf_instruction_gfx12()
706 encoding = 0; in emit_mtbuf_instruction_gfx12()
708 encoding |= reg(ctx, instr->operands[3], 8); in emit_mtbuf_instruction_gfx12()
710 encoding |= reg(ctx, instr->definitions[0], 8); in emit_mtbuf_instruction_gfx12()
711 encoding |= reg(ctx, instr->operands[0]) << 9; in emit_mtbuf_instruction_gfx12()
712 encoding |= (mtbuf.offen ? 1 : 0) << 30; in emit_mtbuf_instruction_gfx12()
713 encoding |= (mtbuf.idxen ? 1 : 0) << 31; in emit_mtbuf_instruction_gfx12()
714 encoding |= get_gfx12_cpol(mtbuf) << 18; in emit_mtbuf_instruction_gfx12()
715 encoding |= img_format << 23; in emit_mtbuf_instruction_gfx12()
716 out.push_back(encoding); in emit_mtbuf_instruction_gfx12()
718 encoding = 0; in emit_mtbuf_instruction_gfx12()
719 encoding |= reg(ctx, instr->operands[1], 8); in emit_mtbuf_instruction_gfx12()
720 encoding |= (mtbuf.offset & 0x00ffffff) << 8; in emit_mtbuf_instruction_gfx12()
721 out.push_back(encoding); in emit_mtbuf_instruction_gfx12()
736 uint32_t encoding = (0b111100 << 26); in emit_mimg_instruction() local
739 encoding |= nsa_dwords; in emit_mimg_instruction()
740 encoding |= mimg.dim << 2; in emit_mimg_instruction()
741 encoding |= mimg.unrm ? 1 << 7 : 0; in emit_mimg_instruction()
742 encoding |= (0xF & mimg.dmask) << 8; in emit_mimg_instruction()
743 encoding |= slc ? 1 << 12 : 0; in emit_mimg_instruction()
744 encoding |= dlc ? 1 << 13 : 0; in emit_mimg_instruction()
745 encoding |= glc ? 1 << 14 : 0; in emit_mimg_instruction()
746 encoding |= mimg.r128 ? 1 << 15 : 0; in emit_mimg_instruction()
747 encoding |= mimg.a16 ? 1 << 16 : 0; in emit_mimg_instruction()
748 encoding |= mimg.d16 ? 1 << 17 : 0; in emit_mimg_instruction()
749 encoding |= (opcode & 0xFF) << 18; in emit_mimg_instruction()
751 encoding |= slc ? 1 << 25 : 0; in emit_mimg_instruction()
752 encoding |= (opcode & 0x7f) << 18; in emit_mimg_instruction()
753 encoding |= (opcode >> 7) & 1; in emit_mimg_instruction()
754 encoding |= mimg.lwe ? 1 << 17 : 0; in emit_mimg_instruction()
755 encoding |= mimg.tfe ? 1 << 16 : 0; in emit_mimg_instruction()
756 encoding |= glc ? 1 << 13 : 0; in emit_mimg_instruction()
757 encoding |= mimg.unrm ? 1 << 12 : 0; in emit_mimg_instruction()
761 encoding |= mimg.a16 ? 1 << 15 : 0; in emit_mimg_instruction()
762 encoding |= mimg.da ? 1 << 14 : 0; in emit_mimg_instruction()
764 encoding |= mimg.r128 ? 1 << 15 in emit_mimg_instruction()
766 encoding |= nsa_dwords << 1; in emit_mimg_instruction()
767 encoding |= mimg.dim << 3; /* GFX10: dimensionality instead of declare array */ in emit_mimg_instruction()
768 encoding |= dlc ? 1 << 7 : 0; in emit_mimg_instruction()
770 encoding |= (0xF & mimg.dmask) << 8; in emit_mimg_instruction()
772 out.push_back(encoding); in emit_mimg_instruction()
774 encoding = reg(ctx, instr->operands[3], 8); /* VADDR */ in emit_mimg_instruction()
776 encoding |= reg(ctx, instr->definitions[0], 8) << 8; /* VDATA */ in emit_mimg_instruction()
778 encoding |= reg(ctx, instr->operands[2], 8) << 8; /* VDATA */ in emit_mimg_instruction()
780 encoding |= (0x1F & (reg(ctx, instr->operands[0]) >> 2)) << 16; /* T# (resource) */ in emit_mimg_instruction()
785 encoding |= (0x1F & (reg(ctx, instr->operands[1]) >> 2)) << 26; /* sampler */ in emit_mimg_instruction()
787 encoding |= mimg.tfe ? 1 << 21 : 0; in emit_mimg_instruction()
788 encoding |= mimg.lwe ? 1 << 22 : 0; in emit_mimg_instruction()
791 encoding |= (0x1F & (reg(ctx, instr->operands[1]) >> 2)) << 21; /* sampler */ in emit_mimg_instruction()
793 encoding |= mimg.d16 ? 1 << 31 : 0; in emit_mimg_instruction()
796 encoding |= mimg.a16 ? 1 << 30 : 0; in emit_mimg_instruction()
800 out.push_back(encoding); in emit_mimg_instruction()
817 uint32_t encoding = opcode << 14; in emit_mimg_instruction_gfx12() local
819 encoding |= 0b111001 << 26; in emit_mimg_instruction_gfx12()
820 encoding |= mimg.tfe << 3; in emit_mimg_instruction_gfx12()
821 encoding |= mimg.unrm << 13; in emit_mimg_instruction_gfx12()
823 encoding |= 0b110100 << 26; in emit_mimg_instruction_gfx12()
825 encoding |= mimg.dim; in emit_mimg_instruction_gfx12()
826 encoding |= mimg.r128 << 4; in emit_mimg_instruction_gfx12()
827 encoding |= mimg.d16 << 5; in emit_mimg_instruction_gfx12()
828 encoding |= mimg.a16 << 6; in emit_mimg_instruction_gfx12()
829 encoding |= (mimg.dmask & 0xf) << 22; in emit_mimg_instruction_gfx12()
830 out.push_back(encoding); in emit_mimg_instruction_gfx12()
839 encoding = 0; in emit_mimg_instruction_gfx12()
841 encoding |= reg(ctx, instr->definitions[0], 8); /* VDATA */ in emit_mimg_instruction_gfx12()
843 encoding |= reg(ctx, instr->operands[2], 8); /* VDATA */ in emit_mimg_instruction_gfx12()
844 encoding |= reg(ctx, instr->operands[0]) << 9; /* T# (resource) */ in emit_mimg_instruction_gfx12()
846 encoding |= mimg.lwe << 8; in emit_mimg_instruction_gfx12()
848 encoding |= reg(ctx, instr->operands[1]) << 23; /* sampler */ in emit_mimg_instruction_gfx12()
850 encoding |= mimg.tfe << 23; in emit_mimg_instruction_gfx12()
851 encoding |= vaddr[4] << 24; in emit_mimg_instruction_gfx12()
853 encoding |= get_gfx12_cpol(mimg) << 18; in emit_mimg_instruction_gfx12()
854 out.push_back(encoding); in emit_mimg_instruction_gfx12()
856 encoding = 0; in emit_mimg_instruction_gfx12()
858 encoding |= vaddr[i] << (i * 8); in emit_mimg_instruction_gfx12()
859 out.push_back(encoding); in emit_mimg_instruction_gfx12()
871 uint32_t encoding = (0b110111 << 26); in emit_flatlike_instruction() local
872 encoding |= opcode << 18; in emit_flatlike_instruction()
878 encoding |= flat.offset & 0x1fff; in emit_flatlike_instruction()
886 encoding |= flat.offset & 0xfff; in emit_flatlike_instruction()
889 encoding |= 1 << (ctx.gfx_level >= GFX11 ? 16 : 14); in emit_flatlike_instruction()
891 encoding |= 2 << (ctx.gfx_level >= GFX11 ? 16 : 14); in emit_flatlike_instruction()
892 encoding |= flat.lds ? 1 << 13 : 0; in emit_flatlike_instruction()
893 encoding |= glc ? 1 << (ctx.gfx_level >= GFX11 ? 14 : 16) : 0; in emit_flatlike_instruction()
894 encoding |= slc ? 1 << (ctx.gfx_level >= GFX11 ? 15 : 17) : 0; in emit_flatlike_instruction()
897 encoding |= dlc ? 1 << (ctx.gfx_level >= GFX11 ? 13 : 12) : 0; in emit_flatlike_instruction()
901 out.push_back(encoding); in emit_flatlike_instruction()
902 encoding = reg(ctx, instr->operands[0], 8); in emit_flatlike_instruction()
904 encoding |= reg(ctx, instr->definitions[0], 8) << 24; in emit_flatlike_instruction()
906 encoding |= reg(ctx, instr->operands[2], 8) << 8; in emit_flatlike_instruction()
910 encoding |= reg(ctx, instr->operands[1], 8) << 16; in emit_flatlike_instruction()
918 encoding |= 0x7F << 16; in emit_flatlike_instruction()
920 encoding |= reg(ctx, sgpr_null) << 16; in emit_flatlike_instruction()
923 encoding |= !instr->operands[0].isUndefined() ? 1 << 23 : 0; in emit_flatlike_instruction()
925 encoding |= flat.nv ? 1 << 23 : 0; in emit_flatlike_instruction()
926 out.push_back(encoding); in emit_flatlike_instruction()
937 uint32_t encoding = opcode << 14; in emit_flatlike_instruction_gfx12() local
938 encoding |= 0b111011 << 26; in emit_flatlike_instruction_gfx12()
941 encoding |= reg(ctx, instr->operands[1]); in emit_flatlike_instruction_gfx12()
943 encoding |= reg(ctx, sgpr_null); in emit_flatlike_instruction_gfx12()
946 encoding |= 1 << 24; in emit_flatlike_instruction_gfx12()
948 encoding |= 2 << 24; in emit_flatlike_instruction_gfx12()
949 out.push_back(encoding); in emit_flatlike_instruction_gfx12()
951 encoding = 0; in emit_flatlike_instruction_gfx12()
953 encoding |= reg(ctx, instr->definitions[0], 8); in emit_flatlike_instruction_gfx12()
955 encoding |= !instr->operands[0].isUndefined() ? 1 << 17 : 0; in emit_flatlike_instruction_gfx12()
956 encoding |= get_gfx12_cpol(flat) << 18; in emit_flatlike_instruction_gfx12()
958 encoding |= reg(ctx, instr->operands[2], 8) << 23; in emit_flatlike_instruction_gfx12()
959 out.push_back(encoding); in emit_flatlike_instruction_gfx12()
961 encoding = 0; in emit_flatlike_instruction_gfx12()
963 encoding |= reg(ctx, instr->operands[0], 8); in emit_flatlike_instruction_gfx12()
964 encoding |= (flat.offset & 0x00ffffff) << 8; in emit_flatlike_instruction_gfx12()
965 out.push_back(encoding); in emit_flatlike_instruction_gfx12()
972 uint32_t encoding; in emit_exp_instruction() local
974 encoding = (0b110001 << 26); in emit_exp_instruction()
976 encoding = (0b111110 << 26); in emit_exp_instruction()
980 encoding |= exp.row_en ? 0b1 << 13 : 0; in emit_exp_instruction()
982 encoding |= exp.valid_mask ? 0b1 << 12 : 0; in emit_exp_instruction()
983 encoding |= exp.compressed ? 0b1 << 10 : 0; in emit_exp_instruction()
985 encoding |= exp.done ? 0b1 << 11 : 0; in emit_exp_instruction()
986 encoding |= exp.dest << 4; in emit_exp_instruction()
987 encoding |= exp.enabled_mask; in emit_exp_instruction()
988 out.push_back(encoding); in emit_exp_instruction()
989 encoding = reg(ctx, exp.operands[0], 8); in emit_exp_instruction()
990 encoding |= reg(ctx, exp.operands[1], 8) << 8; in emit_exp_instruction()
991 encoding |= reg(ctx, exp.operands[2], 8) << 16; in emit_exp_instruction()
992 encoding |= reg(ctx, exp.operands[3], 8) << 24; in emit_exp_instruction()
993 out.push_back(encoding); in emit_exp_instruction()
1012 uint32_t encoding = (0xF & dpp.row_mask) << 28; in emit_dpp16_instruction() local
1013 encoding |= (0xF & dpp.bank_mask) << 24; in emit_dpp16_instruction()
1014 encoding |= dpp.abs[1] << 23; in emit_dpp16_instruction()
1015 encoding |= dpp.neg[1] << 22; in emit_dpp16_instruction()
1016 encoding |= dpp.abs[0] << 21; in emit_dpp16_instruction()
1017 encoding |= dpp.neg[0] << 20; in emit_dpp16_instruction()
1018 encoding |= dpp.fetch_inactive << 18; in emit_dpp16_instruction()
1019 encoding |= dpp.bound_ctrl << 19; in emit_dpp16_instruction()
1020 encoding |= dpp.dpp_ctrl << 8; in emit_dpp16_instruction()
1021 encoding |= reg(ctx, dpp_op, 8); in emit_dpp16_instruction()
1022 encoding |= dpp.opsel[0] && !instr->isVOP3() ? 128 : 0; in emit_dpp16_instruction()
1023 out.push_back(encoding); in emit_dpp16_instruction()
1040 uint32_t encoding = reg(ctx, dpp_op, 8); in emit_dpp8_instruction() local
1041 encoding |= dpp.opsel[0] && !instr->isVOP3() ? 128 : 0; in emit_dpp8_instruction()
1042 encoding |= dpp.lane_sel << 8; in emit_dpp8_instruction()
1043 out.push_back(encoding); in emit_dpp8_instruction()
1065 uint32_t encoding; in emit_vop3_instruction() local
1067 encoding = (0b110100 << 26); in emit_vop3_instruction()
1069 encoding = (0b110101 << 26); in emit_vop3_instruction()
1075 encoding |= opcode << 17; in emit_vop3_instruction()
1076 encoding |= (vop3.clamp ? 1 : 0) << 11; in emit_vop3_instruction()
1078 encoding |= opcode << 16; in emit_vop3_instruction()
1079 encoding |= (vop3.clamp ? 1 : 0) << 15; in emit_vop3_instruction()
1081 encoding |= vop3.opsel << 11; in emit_vop3_instruction()
1083 encoding |= vop3.abs[i] << (8 + i); in emit_vop3_instruction()
1090 encoding |= reg(ctx, instr->definitions[1]) << 8; in emit_vop3_instruction()
1091 encoding |= reg(ctx, instr->definitions[0], 8); in emit_vop3_instruction()
1092 out.push_back(encoding); in emit_vop3_instruction()
1093 encoding = 0; in emit_vop3_instruction()
1096 /* Encoding implicit sources works fine with hardware but breaks some disassemblers. */ in emit_vop3_instruction()
1103 encoding |= reg(ctx, instr->operands[i]) << (i * 9); in emit_vop3_instruction()
1104 encoding |= vop3.omod << 27; in emit_vop3_instruction()
1106 encoding |= vop3.neg[i] << (29 + i); in emit_vop3_instruction()
1107 out.push_back(encoding); in emit_vop3_instruction()
1116 uint32_t encoding; in emit_vop3p_instruction() local
1118 encoding = (0b110100111 << 23); in emit_vop3p_instruction()
1120 encoding = (0b110011 << 26); in emit_vop3p_instruction()
1125 encoding |= opcode << 16; in emit_vop3p_instruction()
1126 encoding |= (vop3.clamp ? 1 : 0) << 15; in emit_vop3p_instruction()
1127 encoding |= vop3.opsel_lo << 11; in emit_vop3p_instruction()
1128 encoding |= ((vop3.opsel_hi & 0x4) ? 1 : 0) << 14; in emit_vop3p_instruction()
1130 encoding |= vop3.neg_hi[i] << (8 + i); in emit_vop3p_instruction()
1131 encoding |= reg(ctx, instr->definitions[0], 8); in emit_vop3p_instruction()
1132 out.push_back(encoding); in emit_vop3p_instruction()
1133 encoding = 0; in emit_vop3p_instruction()
1135 encoding |= reg(ctx, instr->operands[i]) << (i * 9); in emit_vop3p_instruction()
1136 encoding |= (vop3.opsel_hi & 0x3) << 27; in emit_vop3p_instruction()
1138 encoding |= vop3.neg_lo[i] << (29 + i); in emit_vop3p_instruction()
1139 out.push_back(encoding); in emit_vop3p_instruction()
1156 uint32_t encoding = 0; in emit_sdwa_instruction() local
1161 encoding |= reg(ctx, instr->definitions[0]) << 8; in emit_sdwa_instruction()
1162 encoding |= 1 << 15; in emit_sdwa_instruction()
1164 encoding |= (sdwa.clamp ? 1 : 0) << 13; in emit_sdwa_instruction()
1166 encoding |= sdwa.dst_sel.to_sdwa_sel(instr->definitions[0].physReg().byte()) << 8; in emit_sdwa_instruction()
1170 encoding |= dst_u << 11; in emit_sdwa_instruction()
1171 encoding |= (sdwa.clamp ? 1 : 0) << 13; in emit_sdwa_instruction()
1172 encoding |= sdwa.omod << 14; in emit_sdwa_instruction()
1175 encoding |= sdwa.sel[0].to_sdwa_sel(sdwa_op.physReg().byte()) << 16; in emit_sdwa_instruction()
1176 encoding |= sdwa.sel[0].sign_extend() ? 1 << 19 : 0; in emit_sdwa_instruction()
1177 encoding |= sdwa.abs[0] << 21; in emit_sdwa_instruction()
1178 encoding |= sdwa.neg[0] << 20; in emit_sdwa_instruction()
1181 encoding |= sdwa.sel[1].to_sdwa_sel(instr->operands[1].physReg().byte()) << 24; in emit_sdwa_instruction()
1182 encoding |= sdwa.sel[1].sign_extend() ? 1 << 27 : 0; in emit_sdwa_instruction()
1183 encoding |= sdwa.abs[1] << 29; in emit_sdwa_instruction()
1184 encoding |= sdwa.neg[1] << 28; in emit_sdwa_instruction()
1187 encoding |= reg(ctx, sdwa_op, 8); in emit_sdwa_instruction()
1188 encoding |= (sdwa_op.physReg() < 256) << 23; in emit_sdwa_instruction()
1190 encoding |= (instr->operands[1].physReg() < 256) << 31; in emit_sdwa_instruction()
1191 out.push_back(encoding); in emit_sdwa_instruction()
1405 std::cerr << "Encoding:\t" << std::endl; in emit_block()
1412 …std::cerr << "encoding: " << "0x" << std::setfill('0') << std::setw(8) << std::hex << out[i] << st… in emit_block()