Changeset 3120 in CLRX


Ignore:
Timestamp:
Jun 2, 2017, 4:05:08 PM (2 years ago)
Author:
matszpk
Message:

CLRadeonExtender: GCNAsm: Include TFE removed register if VDST not stored (correct?) in FLAT encoding for atomics.

Location:
CLRadeonExtender/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CLRadeonExtender/trunk/amdasm/GCNAssembler.cpp

    r3119 r3120  
    36803680        }
    36813681       
     3682        if (haveTfe && vdstReg && gcnAsm->instrRVUs[0].regField != ASMFIELD_NONE)
     3683        {   // fix for tfe
     3684            AsmRegVarUsage& rvu = gcnAsm->instrRVUs[0];
     3685            AsmRegVarUsage& lastRvu = gcnAsm->instrRVUs[3];
     3686            lastRvu = rvu;
     3687            lastRvu.rstart = lastRvu.rend-1;
     3688            lastRvu.rwFlags = ASMRVU_READ|ASMRVU_WRITE;
     3689            lastRvu.regField = GCNFIELD_FLAT_VDSTLAST;
     3690            if (lastRvu.regVar==nullptr) // fix for regusage
     3691            {   // to save register size for VDSTLAST
     3692                lastRvu.rstart = rvu.rstart;
     3693                lastRvu.rend--;
     3694            }
     3695            rvu.rend--;
     3696        }
     3697       
    36823698        if (!dstToWrite)
    36833699            gcnAsm->instrRVUs[0].regField = ASMFIELD_NONE;
    3684     }
    3685    
    3686     if (haveTfe && vdstReg && gcnAsm->instrRVUs[0].regField != ASMFIELD_NONE)
    3687     {   // fix for tfe
    3688         AsmRegVarUsage& rvu = gcnAsm->instrRVUs[0];
    3689         AsmRegVarUsage& lastRvu = gcnAsm->instrRVUs[3];
    3690         lastRvu = rvu;
    3691         lastRvu.rstart = lastRvu.rend-1;
    3692         lastRvu.rwFlags = ASMRVU_READ|ASMRVU_WRITE;
    3693         lastRvu.regField = GCNFIELD_FLAT_VDSTLAST;
    3694         if (lastRvu.regVar==nullptr) // fix for regusage
    3695         {   // to save register size for VDSTLAST
    3696             lastRvu.rstart = rvu.rstart;
    3697             lastRvu.rend--;
    3698         }
    3699         rvu.rend--;
    37003700    }
    37013701   
  • CLRadeonExtender/trunk/tests/amdasm/GCNRegVarUsage.cpp

    r3119 r3120  
    13521352            { 88, "rcx4", 3, 5, GCNFIELD_FLAT_ADDR, ASMRVU_READ, 1 },
    13531353            { 88, "rbx4", 1, 3, GCNFIELD_FLAT_DATA, ASMRVU_READ, 1 },
     1354            { 88, "rex5", 7, 8, GCNFIELD_FLAT_VDSTLAST, ASMRVU_READ|ASMRVU_WRITE, 1 },
    13541355            // flat_atomic_add_x2 rex5[5:7], rcx4[3:4], rbx4[1:2] tfe glc
    13551356            { 96, "rex5", 5, 7, GCNFIELD_FLAT_VDST, ASMRVU_WRITE, 1 },
     
    13841385            { 152, nullptr, 256+91, 256+93, GCNFIELD_FLAT_ADDR, ASMRVU_READ, 0 },
    13851386            { 152, nullptr, 256+14, 256+16, GCNFIELD_FLAT_DATA, ASMRVU_READ, 0 },
     1387            { 152, nullptr, 256+41, 256+42, GCNFIELD_FLAT_VDSTLAST,
     1388                        ASMRVU_READ|ASMRVU_WRITE, 0 },
    13861389        },
    13871390        true, ""
Note: See TracChangeset for help on using the changeset viewer.