|
|
@@ -81,20 +81,21 @@ u32 ShaderIR::DecodeXmad(NodeBlock& bb, u32 pc) {
|
|
|
SetTemporary(bb, 0, product);
|
|
|
product = GetTemporary(0);
|
|
|
|
|
|
- const Node original_c = op_c;
|
|
|
+ Node original_c = op_c;
|
|
|
const Tegra::Shader::XmadMode set_mode = mode; // Workaround to clang compile error
|
|
|
- op_c = [&]() {
|
|
|
+ op_c = [&] {
|
|
|
switch (set_mode) {
|
|
|
case Tegra::Shader::XmadMode::None:
|
|
|
return original_c;
|
|
|
case Tegra::Shader::XmadMode::CLo:
|
|
|
- return BitfieldExtract(original_c, 0, 16);
|
|
|
+ return BitfieldExtract(std::move(original_c), 0, 16);
|
|
|
case Tegra::Shader::XmadMode::CHi:
|
|
|
- return BitfieldExtract(original_c, 16, 16);
|
|
|
+ return BitfieldExtract(std::move(original_c), 16, 16);
|
|
|
case Tegra::Shader::XmadMode::CBcc: {
|
|
|
- const Node shifted_b = SignedOperation(OperationCode::ILogicalShiftLeft, is_signed_b,
|
|
|
- original_b, Immediate(16));
|
|
|
- return SignedOperation(OperationCode::IAdd, is_signed_c, original_c, shifted_b);
|
|
|
+ Node shifted_b = SignedOperation(OperationCode::ILogicalShiftLeft, is_signed_b,
|
|
|
+ original_b, Immediate(16));
|
|
|
+ return SignedOperation(OperationCode::IAdd, is_signed_c, std::move(original_c),
|
|
|
+ std::move(shifted_b));
|
|
|
}
|
|
|
case Tegra::Shader::XmadMode::CSfu: {
|
|
|
const Node comp_a =
|