mirror of
https://github.com/RPCS3/rsx_program_decompiler.git
synced 2025-04-10 17:40:52 +00:00
gcc bug workaround
This commit is contained in:
parent
13f9f7d706
commit
4d1fc12b91
@ -536,84 +536,84 @@ namespace rsx
|
||||
|
||||
builder::expression_base_t decode_instruction()
|
||||
{
|
||||
switch (instruction.data.dst.opcode | (instruction.data.src1.opcode_is_branch << 6))
|
||||
switch (u32(instruction.data.dst.opcode) | (u32(instruction.data.src1.opcode_is_branch) << 6))
|
||||
{
|
||||
case opcode::nop: return base::comment("nop");
|
||||
case opcode::mov: return set_dst(src_swizzled_as_dst(0), disable_swizzle_as_dst);
|
||||
case opcode::mul: return set_dst(src_swizzled_as_dst(0) * src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case opcode::add: return set_dst(src_swizzled_as_dst(0) + src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case opcode::mad: return set_dst((src_swizzled_as_dst(0) * src_swizzled_as_dst(1)).without_scope() + src_swizzled_as_dst(2), disable_swizzle_as_dst);
|
||||
case opcode::dp3: return set_dst(base::dot(src(0).xyz(), src(1).xyz()));
|
||||
case opcode::dp4: return set_dst(base::dot(src(0), src(1)));
|
||||
case opcode::dst:
|
||||
case (u32)opcode::nop: return base::comment("nop");
|
||||
case (u32)opcode::mov: return set_dst(src_swizzled_as_dst(0), disable_swizzle_as_dst);
|
||||
case (u32)opcode::mul: return set_dst(src_swizzled_as_dst(0) * src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case (u32)opcode::add: return set_dst(src_swizzled_as_dst(0) + src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case (u32)opcode::mad: return set_dst((src_swizzled_as_dst(0) * src_swizzled_as_dst(1)).without_scope() + src_swizzled_as_dst(2), disable_swizzle_as_dst);
|
||||
case (u32)opcode::dp3: return set_dst(base::dot(src(0).xyz(), src(1).xyz()));
|
||||
case (u32)opcode::dp4: return set_dst(base::dot(src(0), src(1)));
|
||||
case (u32)opcode::dst:
|
||||
{
|
||||
auto src_0 = src(0);
|
||||
auto src_1 = src(1);
|
||||
|
||||
return set_dst(float_point_t<4>::ctor(1.0f, src_0.y() * src_1.y(), src_0.z(), src_1.w()));
|
||||
}
|
||||
case opcode::min: return set_dst(base::min(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::max: return set_dst(base::max(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::slt: return set_dst(compare(base::compare_function::less, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::sge: return set_dst(compare(base::compare_function::greater_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::sle: return set_dst(compare(base::compare_function::less_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::sgt: return set_dst(compare(base::compare_function::greater, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::sne: return set_dst(compare(base::compare_function::not_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::seq: return set_dst(compare(base::compare_function::equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::frc: return set_dst(base::fract(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::flr: return set_dst(base::floor(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::kil: return conditional(typename base::void_expr{ "discard;" });
|
||||
case opcode::pk4: return base::unimplemented("PK4");
|
||||
case opcode::up4: return base::unimplemented("UP4");
|
||||
case opcode::ddx: return set_dst(base::ddx(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::ddy: return set_dst(base::ddy(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::tex: return set_dst(base::texture(tex(), src(0).xy()));
|
||||
case opcode::txp: return set_dst(base::texture(tex(), src(0).xy() / src(0).w()));
|
||||
case opcode::txd: return set_dst(base::texture_grad(tex(), src(0).xy(), src(1).xy(), src(2).xy()));
|
||||
case opcode::rcp: return set_dst(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(0), disable_swizzle_as_dst);
|
||||
case opcode::rsq: return set_dst(base::rsqrt(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::ex2: return set_dst(base::exp2(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::lg2: return set_dst(base::log2(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::lit: return base::unimplemented("LIT");
|
||||
case opcode::lrp: return base::unimplemented("LRP");
|
||||
case opcode::str: return set_dst(1.0f);
|
||||
case opcode::sfl: return set_dst(0.0f);
|
||||
case opcode::cos: return set_dst(base::cos(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::sin: return set_dst(base::sin(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case opcode::pk2: return base::unimplemented("PK2");
|
||||
case opcode::up2: return base::unimplemented("UP2");
|
||||
case opcode::pow: return set_dst(base::pow(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::pkb: return base::unimplemented("PKB");
|
||||
case opcode::upb: return base::unimplemented("UPB");
|
||||
case opcode::pk16: return base::unimplemented("PK16");
|
||||
case opcode::up16: return base::unimplemented("UP16");
|
||||
case opcode::bem: return base::unimplemented("BEM");
|
||||
case opcode::pkg: return base::unimplemented("PKG");
|
||||
case opcode::upg: return base::unimplemented("UPG");
|
||||
case opcode::dp2a:
|
||||
case (u32)opcode::min: return set_dst(base::min(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::max: return set_dst(base::max(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::slt: return set_dst(compare(base::compare_function::less, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::sge: return set_dst(compare(base::compare_function::greater_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::sle: return set_dst(compare(base::compare_function::less_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::sgt: return set_dst(compare(base::compare_function::greater, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::sne: return set_dst(compare(base::compare_function::not_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::seq: return set_dst(compare(base::compare_function::equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::frc: return set_dst(base::fract(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::flr: return set_dst(base::floor(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::kil: return conditional(typename base::void_expr{ "discard;" });
|
||||
case (u32)opcode::pk4: return base::unimplemented("PK4");
|
||||
case (u32)opcode::up4: return base::unimplemented("UP4");
|
||||
case (u32)opcode::ddx: return set_dst(base::ddx(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::ddy: return set_dst(base::ddy(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::tex: return set_dst(base::texture(tex(), src(0).xy()));
|
||||
case (u32)opcode::txp: return set_dst(base::texture(tex(), src(0).xy() / src(0).w()));
|
||||
case (u32)opcode::txd: return set_dst(base::texture_grad(tex(), src(0).xy(), src(1).xy(), src(2).xy()));
|
||||
case (u32)opcode::rcp: return set_dst(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(0), disable_swizzle_as_dst);
|
||||
case (u32)opcode::rsq: return set_dst(base::rsqrt(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::ex2: return set_dst(base::exp2(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::lg2: return set_dst(base::log2(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::lit: return base::unimplemented("LIT");
|
||||
case (u32)opcode::lrp: return base::unimplemented("LRP");
|
||||
case (u32)opcode::str: return set_dst(1.0f);
|
||||
case (u32)opcode::sfl: return set_dst(0.0f);
|
||||
case (u32)opcode::cos: return set_dst(base::cos(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::sin: return set_dst(base::sin(src_swizzled_as_dst(0)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::pk2: return base::unimplemented("PK2");
|
||||
case (u32)opcode::up2: return base::unimplemented("UP2");
|
||||
case (u32)opcode::pow: return set_dst(base::pow(src_swizzled_as_dst(0), src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::pkb: return base::unimplemented("PKB");
|
||||
case (u32)opcode::upb: return base::unimplemented("UPB");
|
||||
case (u32)opcode::pk16: return base::unimplemented("PK16");
|
||||
case (u32)opcode::up16: return base::unimplemented("UP16");
|
||||
case (u32)opcode::bem: return base::unimplemented("BEM");
|
||||
case (u32)opcode::pkg: return base::unimplemented("PKG");
|
||||
case (u32)opcode::upg: return base::unimplemented("UPG");
|
||||
case (u32)opcode::dp2a:
|
||||
{
|
||||
auto src_0 = src(0);
|
||||
auto src_1 = src(1);
|
||||
|
||||
return set_dst(float_point_t<4>::ctor(src_0.x() * src_1.x() + src_0.y() * src_1.y() + src(2).z()));
|
||||
}
|
||||
case opcode::txl: return set_dst(base::texture_lod(tex(), src(0).xy(), src(1).x()));
|
||||
case opcode::txb: return set_dst(base::texture_bias(tex(), src(0).xy(), src(1).x()));
|
||||
case opcode::texbem: return base::unimplemented("TEXBEM");
|
||||
case opcode::txpbem: return base::unimplemented("TXPBEM");
|
||||
case opcode::bemlum: return base::unimplemented("BEMLUM");
|
||||
case opcode::refl: return base::unimplemented("REFL");
|
||||
case opcode::timeswtex: return base::unimplemented("TIMESWTEX");
|
||||
case opcode::dp2: return set_dst(base::dot(src(0).xy(), src(1).xy()));
|
||||
case opcode::nrm: return set_dst(base::normalize(src(0).xyz()).xyzx());
|
||||
case opcode::div: return set_dst(src_swizzled_as_dst(0) / src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case opcode::divsq: return set_dst(src_swizzled_as_dst(0) / base::sqrt(src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case opcode::lif: return base::unimplemented("LIF");
|
||||
case opcode::fenct: return base::comment("fenct");
|
||||
case opcode::fencb: return base::comment("fencb");
|
||||
case opcode::brk: return conditional(typename base::void_expr("break;"));
|
||||
case opcode::cal: return base::unimplemented("CAL");
|
||||
case opcode::ife:
|
||||
case (u32)opcode::txl: return set_dst(base::texture_lod(tex(), src(0).xy(), src(1).x()));
|
||||
case (u32)opcode::txb: return set_dst(base::texture_bias(tex(), src(0).xy(), src(1).x()));
|
||||
case (u32)opcode::texbem: return base::unimplemented("TEXBEM");
|
||||
case (u32)opcode::txpbem: return base::unimplemented("TXPBEM");
|
||||
case (u32)opcode::bemlum: return base::unimplemented("BEMLUM");
|
||||
case (u32)opcode::refl: return base::unimplemented("REFL");
|
||||
case (u32)opcode::timeswtex: return base::unimplemented("TIMESWTEX");
|
||||
case (u32)opcode::dp2: return set_dst(base::dot(src(0).xy(), src(1).xy()));
|
||||
case (u32)opcode::nrm: return set_dst(base::normalize(src(0).xyz()).xyzx());
|
||||
case (u32)opcode::div: return set_dst(src_swizzled_as_dst(0) / src_swizzled_as_dst(1), disable_swizzle_as_dst);
|
||||
case (u32)opcode::divsq: return set_dst(src_swizzled_as_dst(0) / base::sqrt(src_swizzled_as_dst(1)), disable_swizzle_as_dst);
|
||||
case (u32)opcode::lif: return base::unimplemented("LIF");
|
||||
case (u32)opcode::fenct: return base::comment("fenct");
|
||||
case (u32)opcode::fencb: return base::comment("fencb");
|
||||
case (u32)opcode::brk: return conditional(typename base::void_expr("break;"));
|
||||
case (u32)opcode::cal: return base::unimplemented("CAL");
|
||||
case (u32)opcode::ife:
|
||||
base::writer += typename base::writer_t{ "if (" + execution_condition(condition_operation::all).to_string() + ")\n{\n" };
|
||||
|
||||
if (instruction.data.src2.end_offset != instruction.data.src1.else_offset)
|
||||
@ -623,7 +623,7 @@ namespace rsx
|
||||
|
||||
return{ "" };
|
||||
|
||||
case opcode::loop:
|
||||
case (u32)opcode::loop:
|
||||
base::writer += typename base::writer_t
|
||||
{
|
||||
"for ("
|
||||
@ -635,8 +635,8 @@ namespace rsx
|
||||
|
||||
base::writer.after(instruction.data.src2.end_offset >> 2, "}\n");
|
||||
return{ "" };
|
||||
case opcode::rep: return base::unimplemented("REP");
|
||||
case opcode::ret: return conditional(typename base::void_expr("return;"));
|
||||
case (u32)opcode::rep: return base::unimplemented("REP");
|
||||
case (u32)opcode::ret: return conditional(typename base::void_expr("return;"));
|
||||
}
|
||||
|
||||
throw;
|
||||
|
@ -193,15 +193,15 @@ namespace rsx
|
||||
|
||||
auto get_register = [&]()
|
||||
{
|
||||
switch (src.register_type)
|
||||
switch ((u32)src.register_type)
|
||||
{
|
||||
case src_register_type::temporary:
|
||||
case (u32)src_register_type::temporary:
|
||||
return context.temporary(src.tmp_src);
|
||||
|
||||
case src_register_type::input:
|
||||
case (u32)src_register_type::input:
|
||||
return context.input(instruction.data.d1.input_src);
|
||||
|
||||
case src_register_type::constant:
|
||||
case (u32)src_register_type::constant:
|
||||
return context.constant(instruction.data.d1.const_src,
|
||||
instruction.data.d3.index_const,
|
||||
instruction.data.d0.addr_reg_sel_1,
|
||||
@ -533,15 +533,15 @@ namespace rsx
|
||||
{
|
||||
is_vec = false;
|
||||
|
||||
switch (instruction.data.d1.sca_opcode)
|
||||
switch ((u32)instruction.data.d1.sca_opcode)
|
||||
{
|
||||
case sca_opcode::mov: return set_dst(src_swizzled_as_dst(2));
|
||||
case sca_opcode::rcp: return set_dst(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(2));
|
||||
case sca_opcode::rcc: return set_dst(base::clamp(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(2), 5.42101e-20f, 1.884467e19f));
|
||||
case sca_opcode::rsq: return set_dst(base::rsqrt(base::abs(src_swizzled_as_dst(2))));
|
||||
case sca_opcode::exp: return set_dst(base::exp(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::log: return set_dst(base::log(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::lit:
|
||||
case (u32)sca_opcode::mov: return set_dst(src_swizzled_as_dst(2));
|
||||
case (u32)sca_opcode::rcp: return set_dst(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(2));
|
||||
case (u32)sca_opcode::rcc: return set_dst(base::clamp(float_point_t<1>::ctor(1.0f) / src_swizzled_as_dst(2), 5.42101e-20f, 1.884467e19f));
|
||||
case (u32)sca_opcode::rsq: return set_dst(base::rsqrt(base::abs(src_swizzled_as_dst(2))));
|
||||
case (u32)sca_opcode::exp: return set_dst(base::exp(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::log: return set_dst(base::log(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::lit:
|
||||
{
|
||||
auto t = src(2);
|
||||
|
||||
@ -550,8 +550,8 @@ namespace rsx
|
||||
|
||||
return set_dst(swizzle_as_dst(float_point_t<4>::ctor(1.0f, t.x(), z_value, 1.0f)));
|
||||
}
|
||||
case sca_opcode::bra: break;
|
||||
case sca_opcode::bri:
|
||||
case (u32)sca_opcode::bra: break;
|
||||
case (u32)sca_opcode::bri:
|
||||
{
|
||||
std::size_t from = base::writer.position;
|
||||
std::size_t to = address_value();
|
||||
@ -569,17 +569,17 @@ namespace rsx
|
||||
}
|
||||
return{ "" };
|
||||
|
||||
case sca_opcode::cal: break;
|
||||
case sca_opcode::cli: break;
|
||||
case sca_opcode::ret: return conditional(typename base::void_expr{ "return" });
|
||||
case sca_opcode::lg2: return set_dst(base::log2(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::ex2: return set_dst(base::exp2(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::sin: return set_dst(base::sin(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::cos: return set_dst(base::cos(src_swizzled_as_dst(2)));
|
||||
case sca_opcode::brb: break;
|
||||
case sca_opcode::clb: break;
|
||||
case sca_opcode::psh: break;
|
||||
case sca_opcode::pop: break;
|
||||
case (u32)sca_opcode::cal: break;
|
||||
case (u32)sca_opcode::cli: break;
|
||||
case (u32)sca_opcode::ret: return conditional(typename base::void_expr{ "return" });
|
||||
case (u32)sca_opcode::lg2: return set_dst(base::log2(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::ex2: return set_dst(base::exp2(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::sin: return set_dst(base::sin(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::cos: return set_dst(base::cos(src_swizzled_as_dst(2)));
|
||||
case (u32)sca_opcode::brb: break;
|
||||
case (u32)sca_opcode::clb: break;
|
||||
case (u32)sca_opcode::psh: break;
|
||||
case (u32)sca_opcode::pop: break;
|
||||
default:
|
||||
throw;
|
||||
}
|
||||
@ -591,31 +591,31 @@ namespace rsx
|
||||
{
|
||||
is_vec = true;
|
||||
|
||||
switch (instruction.data.d1.vec_opcode)
|
||||
switch ((u32)instruction.data.d1.vec_opcode)
|
||||
{
|
||||
case vec_opcode::mov: return set_dst(src_swizzled_as_dst(0));
|
||||
case vec_opcode::mul: return set_dst(src_swizzled_as_dst(0) * src_swizzled_as_dst(1));
|
||||
case vec_opcode::add: return set_dst(src_swizzled_as_dst(0) + src_swizzled_as_dst(2));
|
||||
case vec_opcode::mad: return set_dst((src_swizzled_as_dst(0) * src_swizzled_as_dst(1)).without_scope() + src_swizzled_as_dst(2));
|
||||
case vec_opcode::dp3: return set_dst(base::dot(src(0).xyz(), src(1).xyz()));
|
||||
case vec_opcode::dph: break;
|
||||
case vec_opcode::dp4: return set_dst(base::dot(src(0), src(1)));
|
||||
case vec_opcode::dst: break;
|
||||
case vec_opcode::min: return set_dst(base::min(src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::max: return set_dst(base::max(src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::slt: return set_dst(compare(base::compare_function::less, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::sge: return set_dst(compare(base::compare_function::greater_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::arl: return typename base::writer_t{} += address_register() = integer_t<1>::ctor(src(0).x());
|
||||
case vec_opcode::frc: return set_dst(base::fract(src_swizzled_as_dst(0)));
|
||||
case vec_opcode::flr: return set_dst(base::floor(src_swizzled_as_dst(0)));;
|
||||
case vec_opcode::seq: return set_dst(compare(base::compare_function::equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::sfl: return set_dst(0.0f);
|
||||
case vec_opcode::sgt: return set_dst(compare(base::compare_function::greater, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));;
|
||||
case vec_opcode::sle: return set_dst(compare(base::compare_function::less_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::sne: return set_dst(compare(base::compare_function::not_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case vec_opcode::str: return set_dst(1.0f);
|
||||
case vec_opcode::ssg: break;
|
||||
case vec_opcode::txl: break;
|
||||
case (u32)vec_opcode::mov: return set_dst(src_swizzled_as_dst(0));
|
||||
case (u32)vec_opcode::mul: return set_dst(src_swizzled_as_dst(0) * src_swizzled_as_dst(1));
|
||||
case (u32)vec_opcode::add: return set_dst(src_swizzled_as_dst(0) + src_swizzled_as_dst(2));
|
||||
case (u32)vec_opcode::mad: return set_dst((src_swizzled_as_dst(0) * src_swizzled_as_dst(1)).without_scope() + src_swizzled_as_dst(2));
|
||||
case (u32)vec_opcode::dp3: return set_dst(base::dot(src(0).xyz(), src(1).xyz()));
|
||||
case (u32)vec_opcode::dph: break;
|
||||
case (u32)vec_opcode::dp4: return set_dst(base::dot(src(0), src(1)));
|
||||
case (u32)vec_opcode::dst: break;
|
||||
case (u32)vec_opcode::min: return set_dst(base::min(src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::max: return set_dst(base::max(src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::slt: return set_dst(compare(base::compare_function::less, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::sge: return set_dst(compare(base::compare_function::greater_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::arl: return typename base::writer_t{} += address_register() = integer_t<1>::ctor(src(0).x());
|
||||
case (u32)vec_opcode::frc: return set_dst(base::fract(src_swizzled_as_dst(0)));
|
||||
case (u32)vec_opcode::flr: return set_dst(base::floor(src_swizzled_as_dst(0)));;
|
||||
case (u32)vec_opcode::seq: return set_dst(compare(base::compare_function::equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::sfl: return set_dst(0.0f);
|
||||
case (u32)vec_opcode::sgt: return set_dst(compare(base::compare_function::greater, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));;
|
||||
case (u32)vec_opcode::sle: return set_dst(compare(base::compare_function::less_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::sne: return set_dst(compare(base::compare_function::not_equal, src_swizzled_as_dst(0), src_swizzled_as_dst(1)));
|
||||
case (u32)vec_opcode::str: return set_dst(1.0f);
|
||||
case (u32)vec_opcode::ssg: break;
|
||||
case (u32)vec_opcode::txl: break;
|
||||
|
||||
default:
|
||||
throw;
|
||||
|
Loading…
x
Reference in New Issue
Block a user