mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 06:58:05 +02:00
aco: allow Builder::Result to be dereferenced
Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Georg Lehmann <dadschoorse@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20251>
This commit is contained in:
parent
e386523380
commit
c3dd1931d9
10 changed files with 96 additions and 93 deletions
|
|
@ -160,6 +160,14 @@ public:
|
|||
aco_ptr<Instruction> get_ptr() const {
|
||||
return aco_ptr<Instruction>(instr);
|
||||
}
|
||||
|
||||
Instruction * operator * () const {
|
||||
return instr;
|
||||
}
|
||||
|
||||
Instruction * operator -> () const {
|
||||
return instr;
|
||||
}
|
||||
};
|
||||
|
||||
struct Op {
|
||||
|
|
|
|||
|
|
@ -816,7 +816,7 @@ add_branch_code(exec_ctx& ctx, Block* block)
|
|||
|
||||
Builder::Result r = bld.branch(aco_opcode::p_cbranch_z, bld.def(s2), Operand(exec, bld.lm),
|
||||
block->linear_succs[1], block->linear_succs[0]);
|
||||
r.instr->branch().selection_control = sel_ctrl;
|
||||
r->branch().selection_control = sel_ctrl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -832,7 +832,7 @@ add_branch_code(exec_ctx& ctx, Block* block)
|
|||
|
||||
Builder::Result r = bld.branch(aco_opcode::p_cbranch_z, bld.def(s2), Operand(exec, bld.lm),
|
||||
block->linear_succs[1], block->linear_succs[0]);
|
||||
r.instr->branch().selection_control = sel_ctrl;
|
||||
r->branch().selection_control = sel_ctrl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ emit_masked_swizzle(isel_context* ctx, Builder& bld, Temp src, unsigned mask)
|
|||
// DPP8 comes last, as it does not allow several modifiers like `abs` that are available with DPP16
|
||||
Builder::Result ret = bld.vop1_dpp8(aco_opcode::v_mov_b32, bld.def(v1), src);
|
||||
for (unsigned i = 0; i < 8; i++) {
|
||||
ret.instr->dpp8().lane_sel[i] = (((i & and_mask) | or_mask) ^ xor_mask) & 0x7;
|
||||
ret->dpp8().lane_sel[i] = (((i & and_mask) | or_mask) ^ xor_mask) & 0x7;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1016,7 +1016,7 @@ emit_idot_instruction(isel_context* ctx, nir_alu_instr* instr, aco_opcode op, Te
|
|||
Builder bld(ctx->program, ctx->block);
|
||||
bld.is_precise = instr->exact;
|
||||
VOP3P_instruction& vop3p =
|
||||
bld.vop3p(op, Definition(dst), src[0], src[1], src[2], 0x0, 0x7).instr->vop3p();
|
||||
bld.vop3p(op, Definition(dst), src[0], src[1], src[2], 0x0, 0x7)->vop3p();
|
||||
vop3p.clamp = clamp;
|
||||
u_foreach_bit (i, neg_lo)
|
||||
vop3p.neg_lo[i] = true;
|
||||
|
|
@ -1363,7 +1363,7 @@ uadd32_sat(Builder& bld, Definition dst, Temp src0, Temp src1)
|
|||
} else {
|
||||
add = bld.vop2_e64(aco_opcode::v_add_co_u32, dst, bld.def(bld.lm), src0, src1);
|
||||
}
|
||||
add.instr->vop3().clamp = 1;
|
||||
add->vop3().clamp = 1;
|
||||
return dst.getTemp();
|
||||
}
|
||||
|
||||
|
|
@ -1382,7 +1382,7 @@ usub32_sat(Builder& bld, Definition dst, Temp src0, Temp src1)
|
|||
} else {
|
||||
sub = bld.vop2_e64(aco_opcode::v_sub_co_u32, dst, bld.def(bld.lm), src0, src1);
|
||||
}
|
||||
sub.instr->vop3().clamp = 1;
|
||||
sub->vop3().clamp = 1;
|
||||
return dst.getTemp();
|
||||
}
|
||||
|
||||
|
|
@ -1978,8 +1978,7 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr)
|
|||
carry1 = bld.tmp(bld.lm);
|
||||
bld.vop2_e64(aco_opcode::v_addc_co_u32, Definition(dst1), Definition(carry1),
|
||||
as_vgpr(ctx, src01), as_vgpr(ctx, src11), carry0)
|
||||
.instr->vop3()
|
||||
.clamp = 1;
|
||||
->vop3().clamp = 1;
|
||||
} else {
|
||||
Temp no_sat1 = bld.tmp(v1);
|
||||
carry1 = bld.vadd32(Definition(no_sat1), src01, src11, true, carry0).def(1).getTemp();
|
||||
|
|
@ -2221,8 +2220,7 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr)
|
|||
carry1 = bld.tmp(bld.lm);
|
||||
bld.vop2_e64(aco_opcode::v_subb_co_u32, Definition(dst1), Definition(carry1),
|
||||
as_vgpr(ctx, src01), as_vgpr(ctx, src11), carry0)
|
||||
.instr->vop3()
|
||||
.clamp = 1;
|
||||
->vop3().clamp = 1;
|
||||
} else {
|
||||
Temp no_sat1 = bld.tmp(v1);
|
||||
carry1 = bld.vsub32(Definition(no_sat1), src01, src11, true, carry0).def(1).getTemp();
|
||||
|
|
@ -5152,7 +5150,7 @@ emit_single_mubuf_store(isel_context* ctx, Temp descriptor, Temp voffset, Temp s
|
|||
offen, swizzled, idxen, /* addr64 */ false, /* disable_wqm */ false, glc,
|
||||
/* dlc*/ false, slc);
|
||||
|
||||
r.instr->mubuf().sync = sync;
|
||||
r->mubuf().sync = sync;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -5402,7 +5400,7 @@ emit_interp_instr(isel_context* ctx, unsigned idx, unsigned component, Temp src,
|
|||
bld.m0(prim_mask), idx, component);
|
||||
|
||||
if (ctx->program->dev.has_16bank_lds)
|
||||
interp_p1.instr->operands[0].setLateKill(true);
|
||||
interp_p1->operands[0].setLateKill(true);
|
||||
|
||||
bld.vintrp(aco_opcode::v_interp_p2_f32, Definition(dst), coord2, bld.m0(prim_mask), interp_p1,
|
||||
idx, component);
|
||||
|
|
@ -6022,7 +6020,7 @@ visit_load_push_constant(isel_context* ctx, nir_intrinsic_instr* instr)
|
|||
default: unreachable("unimplemented or forbidden load_push_constant.");
|
||||
}
|
||||
|
||||
bld.smem(op, Definition(vec), ptr, index).instr->smem().prevent_overflow = true;
|
||||
bld.smem(op, Definition(vec), ptr, index)->smem().prevent_overflow = true;
|
||||
|
||||
if (!aligned) {
|
||||
Operand byte_offset = index_cv ? Operand::c32((offset + index_cv->u32) % 4) : Operand(index);
|
||||
|
|
|
|||
|
|
@ -2383,7 +2383,7 @@ lower_to_hw_instr(Program* program)
|
|||
}
|
||||
} else {
|
||||
SDWA_instruction& sdwa =
|
||||
bld.vop1_sdwa(aco_opcode::v_mov_b32, dst, op).instr->sdwa();
|
||||
bld.vop1_sdwa(aco_opcode::v_mov_b32, dst, op)->sdwa();
|
||||
sdwa.sel[0] = SubdwordSel(bits / 8, offset / 8, signext);
|
||||
}
|
||||
}
|
||||
|
|
@ -2421,7 +2421,7 @@ lower_to_hw_instr(Program* program)
|
|||
} else if (offset == 0 && (dst.regClass() == v1 || program->gfx_level <= GFX7)) {
|
||||
bld.vop3(aco_opcode::v_bfe_u32, dst, op, Operand::zero(), Operand::c32(bits));
|
||||
} else if (has_sdwa && (op.regClass() != s1 || program->gfx_level >= GFX9)) {
|
||||
bld.vop1_sdwa(aco_opcode::v_mov_b32, dst, op).instr->sdwa().dst_sel =
|
||||
bld.vop1_sdwa(aco_opcode::v_mov_b32, dst, op)->sdwa().dst_sel =
|
||||
SubdwordSel(bits / 8, offset / 8, false);
|
||||
} else if (program->gfx_level >= GFX11) {
|
||||
uint8_t swiz[] = {4, 5, 6, 7};
|
||||
|
|
@ -2438,8 +2438,7 @@ lower_to_hw_instr(Program* program)
|
|||
} else {
|
||||
assert(dst.regClass() == v2b);
|
||||
bld.vop2_sdwa(aco_opcode::v_lshlrev_b32, dst, Operand::c32(offset), op)
|
||||
.instr->sdwa()
|
||||
.sel[1] = SubdwordSel::ubyte;
|
||||
->sdwa().sel[1] = SubdwordSel::ubyte;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
@ -2580,7 +2579,7 @@ lower_to_hw_instr(Program* program)
|
|||
Builder::Result ret =
|
||||
bld.vop1_dpp8(aco_opcode::v_mov_b32, Definition(dst0, v1), src0);
|
||||
for (unsigned j = 0; j < 8; j++) {
|
||||
ret.instr->dpp8().lane_sel[j] = j ^ 1;
|
||||
ret->dpp8().lane_sel[j] = j ^ 1;
|
||||
}
|
||||
|
||||
/* Swap even lanes between mrt0 and mrt1. */
|
||||
|
|
@ -2593,7 +2592,7 @@ lower_to_hw_instr(Program* program)
|
|||
ret = bld.vop1_dpp8(aco_opcode::v_mov_b32, Definition(dst0, v1),
|
||||
Operand(tmp.physReg(), v1));
|
||||
for (unsigned j = 0; j < 8; j++) {
|
||||
ret.instr->dpp8().lane_sel[j] = j ^ 1;
|
||||
ret->dpp8().lane_sel[j] = j ^ 1;
|
||||
}
|
||||
|
||||
mrt0[i] = Operand(dst0, v1);
|
||||
|
|
|
|||
|
|
@ -287,11 +287,11 @@ Temp fabs(Temp src, Builder b)
|
|||
{
|
||||
if (src.bytes() == 2) {
|
||||
Builder::Result res = b.vop2_e64(aco_opcode::v_mul_f16, b.def(v2b), Operand::c16(0x3c00), src);
|
||||
res.instr->vop3().abs[1] = true;
|
||||
res->vop3().abs[1] = true;
|
||||
return res;
|
||||
} else {
|
||||
Builder::Result res = b.vop2_e64(aco_opcode::v_mul_f32, b.def(v1), Operand::c32(0x3f800000u), src);
|
||||
res.instr->vop3().abs[1] = true;
|
||||
res->vop3().abs[1] = true;
|
||||
return res;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -407,10 +407,10 @@ BEGIN_TEST(assembler.gfx11.smem)
|
|||
bld.smem(aco_opcode::s_load_dword, dst, op_s2, Operand::c32(42), op_s1);
|
||||
|
||||
//! s_buffer_load_b32 s4, s[32:35], s8 glc ; f4204110 10000000
|
||||
bld.smem(aco_opcode::s_buffer_load_dword, dst, op_s4, op_s1).instr->smem().glc = true;
|
||||
bld.smem(aco_opcode::s_buffer_load_dword, dst, op_s4, op_s1)->smem().glc = true;
|
||||
|
||||
//! s_buffer_load_b32 s4, s[32:35], s8 dlc ; f4202110 10000000
|
||||
bld.smem(aco_opcode::s_buffer_load_dword, dst, op_s4, op_s1).instr->smem().dlc = true;
|
||||
bld.smem(aco_opcode::s_buffer_load_dword, dst, op_s4, op_s1)->smem().dlc = true;
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
|
@ -448,45 +448,45 @@ BEGIN_TEST(assembler.gfx11.mubuf)
|
|||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, op_v1, op_s1, 0, true);
|
||||
|
||||
//! buffer_load_b32 v42, v10, s[32:35], s30 idxen ; e0500000 1e882a0a
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, op_v1, op_s1, 0, false).instr->mubuf().idxen = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, op_v1, op_s1, 0, false)->mubuf().idxen = true;
|
||||
|
||||
//! buffer_load_b32 v42, v[20:21], s[32:35], s30 idxen offen ; e0500000 1ec82a14
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, op_v2, op_s1, 0, true).instr->mubuf().idxen = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, op_v2, op_s1, 0, true)->mubuf().idxen = true;
|
||||
|
||||
//! buffer_load_b32 v42, off, s[32:35], s30 offset:84 ; e0500054 1e082a80
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), op_s1, 84, false);
|
||||
|
||||
/* Various flags */
|
||||
//! buffer_load_b32 v42, off, s[32:35], 0 glc ; e0504000 80082a80
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false).instr->mubuf().glc = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false)->mubuf().glc = true;
|
||||
|
||||
//! buffer_load_b32 v42, off, s[32:35], 0 dlc ; e0502000 80082a80
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false).instr->mubuf().dlc = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false)->mubuf().dlc = true;
|
||||
|
||||
//! buffer_load_b32 v42, off, s[32:35], 0 slc ; e0501000 80082a80
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false).instr->mubuf().slc = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false)->mubuf().slc = true;
|
||||
|
||||
//! buffer_load_b32 v42, off, s[32:35], 0 tfe ; e0500000 80282a80
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false).instr->mubuf().tfe = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, dst, op_s4, Operand(v1), Operand::zero(), 0, false)->mubuf().tfe = true;
|
||||
|
||||
/* LDS */
|
||||
//! buffer_load_lds_b32 off, s[32:35], 0 ; e0c40000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
//! buffer_load_lds_i8 off, s[32:35], 0 ; e0b80000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_sbyte, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_sbyte, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
//! buffer_load_lds_i16 off, s[32:35], 0 ; e0c00000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_sshort, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_sshort, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
//! buffer_load_lds_u8 off, s[32:35], 0 ; e0b40000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_ubyte, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_ubyte, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
//! buffer_load_lds_u16 off, s[32:35], 0 ; e0bc0000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_ushort, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_ushort, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
//! buffer_load_lds_format_x off, s[32:35], 0 ; e0c80000 80080080
|
||||
bld.mubuf(aco_opcode::buffer_load_format_x, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false).instr->mubuf().lds = true;
|
||||
bld.mubuf(aco_opcode::buffer_load_format_x, op_s4, Operand(v1), Operand::zero(), op_m0, 0, false)->mubuf().lds = true;
|
||||
|
||||
/* Stores */
|
||||
//! buffer_store_b32 v10, off, s[32:35], s30 ; e0680000 1e080a80
|
||||
|
|
@ -531,26 +531,26 @@ BEGIN_TEST(assembler.gfx11.mtbuf)
|
|||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, op_v1, op_s1, dfmt, nfmt, 0, true);
|
||||
|
||||
//! tbuffer_load_format_x v42, v10, s[32:35], s30 format:[BUF_FMT_32_32_FLOAT] idxen ; e9900000 1e882a0a
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, op_v1, op_s1, dfmt, nfmt, 0, false).instr->mtbuf().idxen = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, op_v1, op_s1, dfmt, nfmt, 0, false)->mtbuf().idxen = true;
|
||||
|
||||
//! tbuffer_load_format_x v42, v[20:21], s[32:35], s30 format:[BUF_FMT_32_32_FLOAT] idxen offen ; e9900000 1ec82a14
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, op_v2, op_s1, dfmt, nfmt, 0, true).instr->mtbuf().idxen = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, op_v2, op_s1, dfmt, nfmt, 0, true)->mtbuf().idxen = true;
|
||||
|
||||
//! tbuffer_load_format_x v42, off, s[32:35], s30 format:[BUF_FMT_32_32_FLOAT] offset:84 ; e9900054 1e082a80
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), op_s1, dfmt, nfmt, 84, false);
|
||||
|
||||
/* Various flags */
|
||||
//! tbuffer_load_format_x v42, off, s[32:35], 0 format:[BUF_FMT_32_32_FLOAT] glc ; e9904000 80082a80
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false).instr->mtbuf().glc = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false)->mtbuf().glc = true;
|
||||
|
||||
//! tbuffer_load_format_x v42, off, s[32:35], 0 format:[BUF_FMT_32_32_FLOAT] dlc ; e9902000 80082a80
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false).instr->mtbuf().dlc = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false)->mtbuf().dlc = true;
|
||||
|
||||
//! tbuffer_load_format_x v42, off, s[32:35], 0 format:[BUF_FMT_32_32_FLOAT] slc ; e9901000 80082a80
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false).instr->mtbuf().slc = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false)->mtbuf().slc = true;
|
||||
|
||||
//! tbuffer_load_format_x v42, off, s[32:35], 0 format:[BUF_FMT_32_32_FLOAT] tfe ; e9900000 80282a80
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false).instr->mtbuf().tfe = true;
|
||||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, dst, op_s4, Operand(v1), Operand::zero(), dfmt, nfmt, 0, false)->mtbuf().tfe = true;
|
||||
|
||||
/* Stores */
|
||||
//! tbuffer_store_format_x v10, off, s[32:35], s30 format:[BUF_FMT_32_32_FLOAT] ; e9920000 1e080a80
|
||||
|
|
@ -591,46 +591,46 @@ BEGIN_TEST(assembler.gfx11.mimg)
|
|||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1);
|
||||
|
||||
//! image_sample v[84:87], v[20:21], s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_2D ; f06c0f04 20105414
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v2).instr->mimg().dim = ac_image_2d;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v2)->mimg().dim = ac_image_2d;
|
||||
|
||||
//! image_sample v42, v10, s[64:71], s[32:35] dmask:0x1 dim:SQ_RSRC_IMG_1D ; f06c0100 20102a0a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v1, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().dmask = 0x1;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v1, op_s8, op_s4, Operand(v1), op_v1)->mimg().dmask = 0x1;
|
||||
|
||||
/* Various flags */
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D dlc ; f06c2f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().dlc = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().dlc = true;
|
||||
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D glc ; f06c4f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().glc = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().glc = true;
|
||||
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D slc ; f06c1f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().slc = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().slc = true;
|
||||
|
||||
//! image_sample v[84:88], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D tfe ; f06c0f00 2030540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().tfe = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().tfe = true;
|
||||
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D lwe ; f06c0f00 2050540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().lwe = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().lwe = true;
|
||||
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D r128 ; f06c8f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().r128 = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().r128 = true;
|
||||
|
||||
//! image_sample v[84:87], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D a16 ; f06d0f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().a16 = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().a16 = true;
|
||||
|
||||
//! image_sample v[84:85], v10, s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_1D d16 ; f06e0f00 2010540a
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1).instr->mimg().d16 = true;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1)->mimg().d16 = true;
|
||||
|
||||
/* NSA */
|
||||
//! image_sample v[84:87], [v10, v40], s[64:71], s[32:35] dmask:0xf dim:SQ_RSRC_IMG_2D ; f06c0f05 2010540a 00000028
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1, Operand(bld.tmp(v1), PhysReg(256 + 40))).instr->mimg().dim = ac_image_2d;
|
||||
bld.mimg(aco_opcode::image_sample, dst_v4, op_s8, op_s4, Operand(v1), op_v1, Operand(bld.tmp(v1), PhysReg(256 + 40)))->mimg().dim = ac_image_2d;
|
||||
|
||||
/* Stores */
|
||||
//! image_store v[30:33], v10, s[64:71] dmask:0xf dim:SQ_RSRC_IMG_1D ; f0180f00 00101e0a
|
||||
bld.mimg(aco_opcode::image_store, op_s8, Operand(s4), op_v4, op_v1);
|
||||
|
||||
//! image_atomic_add v10, v20, s[64:71] dmask:0xf dim:SQ_RSRC_IMG_2D ; f0300f04 00100a14
|
||||
bld.mimg(aco_opcode::image_atomic_add, Definition(op_v1.physReg(), v1), op_s8, Operand(s4), op_v1, op_v2).instr->mimg().dim = ac_image_2d;
|
||||
bld.mimg(aco_opcode::image_atomic_add, Definition(op_v1.physReg(), v1), op_s8, Operand(s4), op_v1, op_v2)->mimg().dim = ac_image_2d;
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
|
@ -681,13 +681,13 @@ BEGIN_TEST(assembler.gfx11.flat)
|
|||
|
||||
/* Various flags */
|
||||
//! flat_load_b32 v42, v[20:21] slc ; dc508000 2a7c0014
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1)).instr->flat().slc = true;
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1))->flat().slc = true;
|
||||
|
||||
//! flat_load_b32 v42, v[20:21] glc ; dc504000 2a7c0014
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1)).instr->flat().glc = true;
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1))->flat().glc = true;
|
||||
|
||||
//! flat_load_b32 v42, v[20:21] dlc ; dc502000 2a7c0014
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1)).instr->flat().dlc = true;
|
||||
bld.flat(aco_opcode::flat_load_dword, dst_v1, op_v2, Operand(s1))->flat().dlc = true;
|
||||
|
||||
/* Stores */
|
||||
//! flat_store_b32 v[20:21], v10 ; dc680000 007c0a14
|
||||
|
|
@ -717,7 +717,7 @@ BEGIN_TEST(assembler.gfx11.exp)
|
|||
bld.exp(aco_opcode::exp, op[1], op[0], op[3], op[2], 0xf, 3, false, true);
|
||||
|
||||
//>> exp mrt3 v1, v0, v3, v2 row_en ; f800203f 02030001
|
||||
bld.exp(aco_opcode::exp, op[1], op[0], op[3], op[2], op_m0, 0xf, 3).instr->exp().row_en = true;
|
||||
bld.exp(aco_opcode::exp, op[1], op[0], op[3], op[2], op_m0, 0xf, 3)->exp().row_en = true;
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
|
@ -748,13 +748,13 @@ BEGIN_TEST(assembler.gfx11.vinterp)
|
|||
bld.vinterp_inreg(aco_opcode::v_interp_p2_f32_inreg, dst, op0, op1, op2, 0);
|
||||
|
||||
//! v_interp_p10_f32 v42, -v10, v20, s30 ; cd00002a 207a290a
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0).instr->vinterp_inreg().neg[0] = true;
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0)->vinterp_inreg().neg[0] = true;
|
||||
|
||||
//! v_interp_p10_f32 v42, v10, -v20, s30 ; cd00002a 407a290a
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0).instr->vinterp_inreg().neg[1] = true;
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0)->vinterp_inreg().neg[1] = true;
|
||||
|
||||
//! v_interp_p10_f32 v42, v10, v20, -s30 ; cd00002a 807a290a
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0).instr->vinterp_inreg().neg[2] = true;
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0)->vinterp_inreg().neg[2] = true;
|
||||
|
||||
//! v_interp_p10_f16_f32 v42, v10, v20, s30 op_sel:[1,0,0,0] ; cd02082a 007a290a
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f16_f32_inreg, dst, op0, op1, op2, 0, 0x1);
|
||||
|
|
@ -769,7 +769,7 @@ BEGIN_TEST(assembler.gfx11.vinterp)
|
|||
bld.vinterp_inreg(aco_opcode::v_interp_p2_rtz_f16_f32_inreg, dst, op0, op1, op2, 0, 0x8);
|
||||
|
||||
//! v_interp_p10_f32 v42, v10, v20, s30 clamp ; cd00802a 007a290a
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0).instr->vinterp_inreg().clamp = true;
|
||||
bld.vinterp_inreg(aco_opcode::v_interp_p10_f32_inreg, dst, op0, op1, op2, 0)->vinterp_inreg().clamp = true;
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
|
@ -785,25 +785,25 @@ BEGIN_TEST(assembler.gfx11.ldsdir)
|
|||
op.setFixed(m0);
|
||||
|
||||
//>> lds_direct_load v42 wait_vdst:15 ; ce1f002a
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op).instr->ldsdir().wait_vdst = 15;
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op)->ldsdir().wait_vdst = 15;
|
||||
|
||||
//! lds_direct_load v42 wait_vdst:6 ; ce16002a
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op).instr->ldsdir().wait_vdst = 6;
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op)->ldsdir().wait_vdst = 6;
|
||||
|
||||
//! lds_direct_load v42 ; ce10002a
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op).instr->ldsdir().wait_vdst = 0;
|
||||
bld.ldsdir(aco_opcode::lds_direct_load, dst, op)->ldsdir().wait_vdst = 0;
|
||||
|
||||
//! lds_param_load v42, attr56.x wait_vdst:8 ; ce08e02a
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 56, 0).instr->ldsdir().wait_vdst = 8;
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 56, 0)->ldsdir().wait_vdst = 8;
|
||||
|
||||
//! lds_param_load v42, attr56.x ; ce00e02a
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 56, 0).instr->ldsdir().wait_vdst = 0;
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 56, 0)->ldsdir().wait_vdst = 0;
|
||||
|
||||
//! lds_param_load v42, attr34.y ; ce00892a
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 34, 1).instr->ldsdir().wait_vdst = 0;
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 34, 1)->ldsdir().wait_vdst = 0;
|
||||
|
||||
//! lds_param_load v42, attr12.z ; ce00322a
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 12, 2).instr->ldsdir().wait_vdst = 0;
|
||||
bld.ldsdir(aco_opcode::lds_param_load, dst, op, 12, 2)->ldsdir().wait_vdst = 0;
|
||||
|
||||
finish_assembler_test();
|
||||
END_TEST
|
||||
|
|
|
|||
|
|
@ -32,8 +32,7 @@ static void create_mubuf(Temp desc=Temp(0, s8), unsigned vtx_binding=0)
|
|||
desc_op.setFixed(PhysReg(0));
|
||||
bld.mubuf(aco_opcode::buffer_load_dword, Definition(PhysReg(256), v1), desc_op,
|
||||
Operand(PhysReg(256), v1), Operand::zero(), 0, false)
|
||||
.instr->mubuf()
|
||||
.vtx_binding = vtx_binding;
|
||||
->mubuf().vtx_binding = vtx_binding;
|
||||
}
|
||||
|
||||
static void create_mubuf_store()
|
||||
|
|
@ -49,8 +48,7 @@ static void create_mtbuf(Temp desc=Temp(0, s8), unsigned vtx_binding=0)
|
|||
bld.mtbuf(aco_opcode::tbuffer_load_format_x, Definition(PhysReg(256), v1), desc_op,
|
||||
Operand(PhysReg(256), v1), Operand::zero(), V_008F0C_BUF_DATA_FORMAT_32,
|
||||
V_008F0C_BUF_NUM_FORMAT_FLOAT, 0, false)
|
||||
.instr->mtbuf()
|
||||
.vtx_binding = vtx_binding;
|
||||
->mtbuf().vtx_binding = vtx_binding;
|
||||
}
|
||||
|
||||
static void create_flat()
|
||||
|
|
|
|||
|
|
@ -698,7 +698,7 @@ BEGIN_TEST(optimize.add3)
|
|||
//! v1: %res1 = v_add_u32 %a, %tmp1
|
||||
//! p_unit_test 1, %res1
|
||||
tmp = bld.vop2_e64(aco_opcode::v_add_u32, bld.def(v1), inputs[1], inputs[2]);
|
||||
tmp.instr->vop3().clamp = true;
|
||||
tmp->vop3().clamp = true;
|
||||
writeout(1, bld.vop2(aco_opcode::v_add_u32, bld.def(v1), inputs[0], tmp));
|
||||
|
||||
//! v1: %tmp2 = v_add_u32 %b, %c
|
||||
|
|
@ -706,7 +706,7 @@ BEGIN_TEST(optimize.add3)
|
|||
//! p_unit_test 2, %res2
|
||||
tmp = bld.vop2(aco_opcode::v_add_u32, bld.def(v1), inputs[1], inputs[2]);
|
||||
tmp = bld.vop2_e64(aco_opcode::v_add_u32, bld.def(v1), inputs[0], tmp);
|
||||
tmp.instr->vop3().clamp = true;
|
||||
tmp->vop3().clamp = true;
|
||||
writeout(2, tmp);
|
||||
|
||||
finish_opt_test();
|
||||
|
|
@ -1030,7 +1030,7 @@ BEGIN_TEST(optimizer.dpp)
|
|||
//! v1: %res3 = v_add_f32 -%a, %b row_mirror bound_ctrl:1
|
||||
//! p_unit_test 3, %res3
|
||||
auto tmp3 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1), a, dpp_row_mirror);
|
||||
tmp3.instr->dpp16().neg[0] = true;
|
||||
tmp3->dpp16().neg[0] = true;
|
||||
Temp res3 = bld.vop2(aco_opcode::v_add_f32, bld.def(v1), tmp3, b);
|
||||
writeout(3, res3);
|
||||
|
||||
|
|
@ -1038,7 +1038,7 @@ BEGIN_TEST(optimizer.dpp)
|
|||
//! p_unit_test 4, %res4
|
||||
Temp tmp4 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1), a, dpp_row_mirror);
|
||||
auto res4 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1), tmp4, b);
|
||||
res4.instr->vop3().neg[0] = true;
|
||||
res4->vop3().neg[0] = true;
|
||||
writeout(4, res4);
|
||||
|
||||
//! v1: %tmp5 = v_mov_b32 %a row_mirror bound_ctrl:1
|
||||
|
|
@ -1046,22 +1046,22 @@ BEGIN_TEST(optimizer.dpp)
|
|||
//! p_unit_test 5, %res5
|
||||
Temp tmp5 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1), a, dpp_row_mirror);
|
||||
auto res5 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1), tmp5, b);
|
||||
res5.instr->vop3().clamp = true;
|
||||
res5->vop3().clamp = true;
|
||||
writeout(5, res5);
|
||||
|
||||
//! v1: %res6 = v_add_f32 |%a|, %b row_mirror bound_ctrl:1
|
||||
//! p_unit_test 6, %res6
|
||||
auto tmp6 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1), a, dpp_row_mirror);
|
||||
tmp6.instr->dpp16().neg[0] = true;
|
||||
tmp6->dpp16().neg[0] = true;
|
||||
auto res6 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1), tmp6, b);
|
||||
res6.instr->vop3().abs[0] = true;
|
||||
res6->vop3().abs[0] = true;
|
||||
writeout(6, res6);
|
||||
|
||||
//! v1: %res7 = v_subrev_f32 %a, |%b| row_mirror bound_ctrl:1
|
||||
//! p_unit_test 7, %res7
|
||||
Temp tmp7 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1), a, dpp_row_mirror);
|
||||
auto res7 = bld.vop2_e64(aco_opcode::v_sub_f32, bld.def(v1), b, tmp7);
|
||||
res7.instr->vop3().abs[0] = true;
|
||||
res7->vop3().abs[0] = true;
|
||||
writeout(7, res7);
|
||||
|
||||
/* vcc */
|
||||
|
|
|
|||
|
|
@ -375,7 +375,7 @@ BEGIN_TEST(optimizer_postRA.dpp)
|
|||
//! v1: %res3:v[2] = v_add_f32 -%a:v[0], %b:v[1] row_mirror bound_ctrl:1
|
||||
//! p_unit_test 3, %res3:v[2]
|
||||
auto tmp3 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1, reg_v2), a, dpp_row_mirror);
|
||||
tmp3.instr->dpp16().neg[0] = true;
|
||||
tmp3->dpp16().neg[0] = true;
|
||||
Temp res3 = bld.vop2(aco_opcode::v_add_f32, bld.def(v1, reg_v2), Operand(tmp3, reg_v2), b);
|
||||
writeout(3, Operand(res3, reg_v2));
|
||||
|
||||
|
|
@ -383,7 +383,7 @@ BEGIN_TEST(optimizer_postRA.dpp)
|
|||
//! p_unit_test 4, %res4:v[2]
|
||||
Temp tmp4 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1, reg_v2), a, dpp_row_mirror);
|
||||
auto res4 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1, reg_v2), Operand(tmp4, reg_v2), b);
|
||||
res4.instr->vop3().neg[0] = true;
|
||||
res4->vop3().neg[0] = true;
|
||||
writeout(4, Operand(res4, reg_v2));
|
||||
|
||||
//! v1: %tmp5:v[2] = v_mov_b32 %a:v[0] row_mirror bound_ctrl:1
|
||||
|
|
@ -391,22 +391,22 @@ BEGIN_TEST(optimizer_postRA.dpp)
|
|||
//! p_unit_test 5, %res5:v[2]
|
||||
Temp tmp5 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1, reg_v2), a, dpp_row_mirror);
|
||||
auto res5 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1, reg_v2), Operand(tmp5, reg_v2), b);
|
||||
res5.instr->vop3().clamp = true;
|
||||
res5->vop3().clamp = true;
|
||||
writeout(5, Operand(res5, reg_v2));
|
||||
|
||||
//! v1: %res6:v[2] = v_add_f32 |%a:v[0]|, %b:v[1] row_mirror bound_ctrl:1
|
||||
//! p_unit_test 6, %res6:v[2]
|
||||
auto tmp6 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1, reg_v2), a, dpp_row_mirror);
|
||||
tmp6.instr->dpp16().neg[0] = true;
|
||||
tmp6->dpp16().neg[0] = true;
|
||||
auto res6 = bld.vop2_e64(aco_opcode::v_add_f32, bld.def(v1, reg_v2), Operand(tmp6, reg_v2), b);
|
||||
res6.instr->vop3().abs[0] = true;
|
||||
res6->vop3().abs[0] = true;
|
||||
writeout(6, Operand(res6, reg_v2));
|
||||
|
||||
//! v1: %res7:v[2] = v_subrev_f32 %a:v[0], |%b:v[1]| row_mirror bound_ctrl:1
|
||||
//! p_unit_test 7, %res7:v[2]
|
||||
Temp tmp7 = bld.vop1_dpp(aco_opcode::v_mov_b32, bld.def(v1, reg_v2), a, dpp_row_mirror);
|
||||
auto res7 = bld.vop2_e64(aco_opcode::v_sub_f32, bld.def(v1, reg_v2), b, Operand(tmp7, reg_v2));
|
||||
res7.instr->vop3().abs[0] = true;
|
||||
res7->vop3().abs[0] = true;
|
||||
writeout(7, Operand(res7, reg_v2));
|
||||
|
||||
/* vcc */
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ BEGIN_TEST(validate.sdwa.allow)
|
|||
//>> Validation results:
|
||||
//! Validation passed
|
||||
|
||||
SDWA_instruction *sdwa = &bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1]).instr->sdwa();
|
||||
SDWA_instruction *sdwa = &bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1])->sdwa();
|
||||
sdwa->neg[0] = sdwa->neg[1] = sdwa->abs[0] = sdwa->abs[1] = true;
|
||||
|
||||
sdwa = &bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1b), inputs[0], inputs[1]).instr->sdwa();
|
||||
bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1b), inputs[0], inputs[1]);
|
||||
|
||||
sdwa = &bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1]).instr->sdwa();
|
||||
sdwa = &bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1])->sdwa();
|
||||
sdwa->sel[0] = SubdwordSel::sbyte2;
|
||||
sdwa->sel[1] = SubdwordSel::uword1;
|
||||
|
||||
|
|
@ -105,7 +105,7 @@ BEGIN_TEST(validate.sdwa.vopc)
|
|||
bld.vopc_sdwa(aco_opcode::v_cmp_lt_f32, bld.def(bld.lm), inputs[0], inputs[1]);
|
||||
|
||||
//~gfx(9|10)! SDWA VOPC clamp only supported on GFX8: s2: %_:vcc = v_cmp_eq_f32 %vgpr0, %vgpr1 clamp src0_sel:dword src1_sel:dword
|
||||
bld.vopc_sdwa(aco_opcode::v_cmp_eq_f32, bld.def(bld.lm, vcc), inputs[0], inputs[1]).instr->sdwa().clamp = true;
|
||||
bld.vopc_sdwa(aco_opcode::v_cmp_eq_f32, bld.def(bld.lm, vcc), inputs[0], inputs[1])->sdwa().clamp = true;
|
||||
|
||||
//! Validation failed
|
||||
|
||||
|
|
@ -123,7 +123,7 @@ BEGIN_TEST(validate.sdwa.omod)
|
|||
//~gfx8! SDWA omod only supported on GFX9+: v1: %_ = v_mul_f32 %vgpr0, %vgpr1 *2 dst_sel:dword src0_sel:dword src1_sel:dword
|
||||
//~gfx8! Validation failed
|
||||
//~gfx(9|10)! Validation passed
|
||||
bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1]).instr->sdwa().omod = 1;
|
||||
bld.vop2_sdwa(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], inputs[1])->sdwa().omod = 1;
|
||||
|
||||
finish_validator_test();
|
||||
}
|
||||
|
|
@ -385,7 +385,7 @@ BEGIN_TEST(optimize.sdwa.from_vop3)
|
|||
//! p_unit_test 0, %res0
|
||||
Temp byte0_b = bld.pseudo(aco_opcode::p_extract, bld.def(v1), inputs[1], Operand::zero(),
|
||||
Operand::c32(8u), Operand::zero());
|
||||
VOP3_instruction *mul = &bld.vop2_e64(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], byte0_b).instr->vop3();
|
||||
VOP3_instruction *mul = &bld.vop2_e64(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], byte0_b)->vop3();
|
||||
mul->neg[0] = true;
|
||||
mul->abs[0] = true;
|
||||
writeout(0, mul->definitions[0].getTemp());
|
||||
|
|
@ -396,7 +396,7 @@ BEGIN_TEST(optimize.sdwa.from_vop3)
|
|||
//! p_unit_test 1, %res1
|
||||
byte0_b = bld.pseudo(aco_opcode::p_extract, bld.def(v1), inputs[1], Operand::zero(),
|
||||
Operand::c32(8u), Operand::zero());
|
||||
mul = &bld.vop2_e64(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], byte0_b).instr->vop3();
|
||||
mul = &bld.vop2_e64(aco_opcode::v_mul_f32, bld.def(v1), inputs[0], byte0_b)->vop3();
|
||||
mul->omod = 2;
|
||||
writeout(1, mul->definitions[0].getTemp());
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue