mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-07-12 04:35:56 +00:00
scalar_alu: Handle sharp moves with S_MOV_B64
This fixes unable to track sharp errors when this pattern is used in a shader
This commit is contained in:
parent
d3c3e56bd5
commit
8d9383cf88
1 changed files with 5 additions and 0 deletions
|
@ -586,6 +586,11 @@ void Translator::S_MOV(const GcnInst& inst) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Translator::S_MOV_B64(const GcnInst& inst) {
|
void Translator::S_MOV_B64(const GcnInst& inst) {
|
||||||
|
// Moving SGPR to SGPR is used for thread masks, like most operations, but it can also be used for moving sharps.
|
||||||
|
if (inst.dst[0].field == OperandField::ScalarGPR && inst.src[0].field == OperandField::ScalarGPR) {
|
||||||
|
ir.SetScalarReg(IR::ScalarReg(inst.dst[0].code), ir.GetScalarReg(IR::ScalarReg(inst.src[0].code)));
|
||||||
|
ir.SetScalarReg(IR::ScalarReg(inst.dst[0].code + 1), ir.GetScalarReg(IR::ScalarReg(inst.src[0].code + 1)));
|
||||||
|
}
|
||||||
const IR::U1 src = [&] {
|
const IR::U1 src = [&] {
|
||||||
switch (inst.src[0].field) {
|
switch (inst.src[0].field) {
|
||||||
case OperandField::VccLo:
|
case OperandField::VccLo:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue