nv50/ir: add barrier and thread_state files
Those are required on Turing+ to handle cross thread synchronization and other goodies as the c/r stack is gone. Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Ilia Mirkin <imirkin@alum.mit.edu> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11061>
This commit is contained in:
parent
f4c6c89dec
commit
f14ed4f077
|
@ -385,7 +385,8 @@ enum DataFile
|
|||
FILE_PREDICATE, // boolean predicate
|
||||
FILE_FLAGS, // zero/sign/carry/overflow bits
|
||||
FILE_ADDRESS,
|
||||
LAST_REGISTER_FILE = FILE_ADDRESS,
|
||||
FILE_BARRIER,
|
||||
LAST_REGISTER_FILE = FILE_BARRIER,
|
||||
FILE_IMMEDIATE,
|
||||
FILE_MEMORY_CONST,
|
||||
FILE_SHADER_INPUT,
|
||||
|
@ -395,6 +396,7 @@ enum DataFile
|
|||
FILE_MEMORY_SHARED,
|
||||
FILE_MEMORY_LOCAL,
|
||||
FILE_SYSTEM_VALUE,
|
||||
FILE_THREAD_STATE, // "special" barrier registers
|
||||
DATA_FILE_COUNT
|
||||
};
|
||||
|
||||
|
@ -532,6 +534,29 @@ enum SVSemantic
|
|||
SV_LAST
|
||||
};
|
||||
|
||||
enum TSSemantic
|
||||
{
|
||||
// 0-15 are fixed ones on Volta/Turing
|
||||
TS_THREAD_STATE_ENUM0 = 0,
|
||||
TS_THREAD_STATE_ENUM1 = 1,
|
||||
TS_THREAD_STATE_ENUM2 = 2,
|
||||
TS_THREAD_STATE_ENUM3 = 3,
|
||||
TS_THREAD_STATE_ENUM4 = 4,
|
||||
TS_TRAP_RETURN_PC_LO = 5,
|
||||
TS_TRAP_RETURN_PC_HI = 6,
|
||||
TS_TRAP_RETURN_MASK = 7,
|
||||
TS_MEXITED = 8,
|
||||
TS_MKILL = 9,
|
||||
TS_MACTIVE = 10,
|
||||
TS_MATEXIT = 11,
|
||||
TS_OPT_STACK = 12,
|
||||
TS_API_CALL_DEPTH = 13,
|
||||
TS_ATEXIT_PC_LO = 14,
|
||||
TS_ATEXIT_PC_HI = 15,
|
||||
// special ones to make our life easier
|
||||
TS_PQUAD_MACTIVE,
|
||||
};
|
||||
|
||||
class Program;
|
||||
class Function;
|
||||
class BasicBlock;
|
||||
|
@ -571,6 +596,7 @@ struct Storage
|
|||
SVSemantic sv;
|
||||
int index;
|
||||
} sv;
|
||||
TSSemantic ts;
|
||||
} data;
|
||||
};
|
||||
|
||||
|
|
|
@ -486,6 +486,16 @@ BuildUtil::mkSysVal(SVSemantic svName, uint32_t svIndex)
|
|||
return sym;
|
||||
}
|
||||
|
||||
Symbol *
|
||||
BuildUtil::mkTSVal(TSSemantic tsName)
|
||||
{
|
||||
Symbol *sym = new_Symbol(prog, FILE_THREAD_STATE, 0);
|
||||
sym->reg.type = TYPE_U32;
|
||||
sym->reg.size = typeSizeof(sym->reg.type);
|
||||
sym->reg.data.ts = tsName;
|
||||
return sym;
|
||||
}
|
||||
|
||||
void
|
||||
BuildUtil::DataArray::setup(unsigned array, unsigned arrayIdx,
|
||||
uint32_t base, int len, int vecDim, int eltSize,
|
||||
|
|
|
@ -178,6 +178,7 @@ public:
|
|||
DataType ty, uint32_t baseAddress);
|
||||
|
||||
Symbol *mkSysVal(SVSemantic svName, uint32_t svIndex);
|
||||
Symbol *mkTSVal(TSSemantic tsName);
|
||||
|
||||
private:
|
||||
void init(Program *);
|
||||
|
|
|
@ -348,6 +348,27 @@ static const char *SemanticStr[] =
|
|||
"(INVALID)"
|
||||
};
|
||||
|
||||
static const char *TSStr[17] =
|
||||
{
|
||||
"THREAD_STATE_ENUM0",
|
||||
"THREAD_STATE_ENUM1",
|
||||
"THREAD_STATE_ENUM2",
|
||||
"THREAD_STATE_ENUM3",
|
||||
"THREAD_STATE_ENUM4",
|
||||
"TRAP_RETURN_PC_LO",
|
||||
"TRAP_RETURN_PC_HI",
|
||||
"TRAP_RETURN_MASK",
|
||||
"MEXITED",
|
||||
"MKILL",
|
||||
"MACTIVE",
|
||||
"MATEXIT",
|
||||
"OPT_STACK",
|
||||
"API_CALL_DEPTH",
|
||||
"ATEXIT_PC_LO",
|
||||
"ATEXIT_PC_HI",
|
||||
"PQUAD_MACTIVE",
|
||||
};
|
||||
|
||||
static const char *interpStr[16] =
|
||||
{
|
||||
"pass",
|
||||
|
@ -476,6 +497,9 @@ int LValue::print(char *buf, size_t size, DataType ty) const
|
|||
case FILE_ADDRESS:
|
||||
r = 'a'; col = TXT_REGISTER;
|
||||
break;
|
||||
case FILE_BARRIER:
|
||||
r = 'b'; col = TXT_REGISTER;
|
||||
break;
|
||||
default:
|
||||
assert(!"invalid file for lvalue");
|
||||
r = '?';
|
||||
|
@ -537,6 +561,10 @@ int Symbol::print(char *buf, size_t size,
|
|||
}
|
||||
PRINT("%s]", colour[TXT_MEM]);
|
||||
return pos;
|
||||
} else if (reg.file == FILE_THREAD_STATE) {
|
||||
PRINT("%sts[%s%s%s]", colour[TXT_MEM], colour[TXT_REGISTER],
|
||||
TSStr[reg.data.ts], colour[TXT_MEM]);
|
||||
return pos;
|
||||
}
|
||||
|
||||
switch (reg.file) {
|
||||
|
@ -547,6 +575,7 @@ int Symbol::print(char *buf, size_t size,
|
|||
case FILE_MEMORY_GLOBAL: c = 'g'; break;
|
||||
case FILE_MEMORY_SHARED: c = 's'; break;
|
||||
case FILE_MEMORY_LOCAL: c = 'l'; break;
|
||||
case FILE_BARRIER: c = 'b'; break;
|
||||
default:
|
||||
assert(!"invalid file");
|
||||
c = '?';
|
||||
|
|
|
@ -207,6 +207,7 @@ TargetNV50::getFileSize(DataFile file) const
|
|||
case FILE_PREDICATE: return 0;
|
||||
case FILE_FLAGS: return 4;
|
||||
case FILE_ADDRESS: return 4;
|
||||
case FILE_BARRIER: return 0;
|
||||
case FILE_IMMEDIATE: return 0;
|
||||
case FILE_MEMORY_CONST: return 65536;
|
||||
case FILE_SHADER_INPUT: return 0x200;
|
||||
|
|
|
@ -267,12 +267,14 @@ TargetNVC0::getFileSize(DataFile file) const
|
|||
{
|
||||
const unsigned int gprs = (chipset >= NVISA_GK20A_CHIPSET) ? 255 : 63;
|
||||
const unsigned int smregs = (chipset >= NVISA_GK104_CHIPSET) ? 65536 : 32768;
|
||||
const unsigned int bs = (chipset >= NVISA_GV100_CHIPSET) ? 16 : 0;
|
||||
switch (file) {
|
||||
case FILE_NULL: return 0;
|
||||
case FILE_GPR: return MIN2(gprs, smregs / threads);
|
||||
case FILE_PREDICATE: return 7;
|
||||
case FILE_FLAGS: return 1;
|
||||
case FILE_ADDRESS: return 0;
|
||||
case FILE_BARRIER: return bs;
|
||||
case FILE_IMMEDIATE: return 0;
|
||||
case FILE_MEMORY_CONST: return 65536;
|
||||
case FILE_SHADER_INPUT: return 0x400;
|
||||
|
@ -282,6 +284,7 @@ TargetNVC0::getFileSize(DataFile file) const
|
|||
case FILE_MEMORY_SHARED: return 16 << 10;
|
||||
case FILE_MEMORY_LOCAL: return 48 << 10;
|
||||
case FILE_SYSTEM_VALUE: return 32;
|
||||
case FILE_THREAD_STATE: return bs;
|
||||
default:
|
||||
assert(!"invalid file");
|
||||
return 0;
|
||||
|
@ -291,7 +294,8 @@ TargetNVC0::getFileSize(DataFile file) const
|
|||
unsigned int
|
||||
TargetNVC0::getFileUnit(DataFile file) const
|
||||
{
|
||||
if (file == FILE_GPR || file == FILE_ADDRESS || file == FILE_SYSTEM_VALUE)
|
||||
if (file == FILE_GPR || file == FILE_ADDRESS || file == FILE_SYSTEM_VALUE ||
|
||||
file == FILE_BARRIER || file == FILE_THREAD_STATE)
|
||||
return 2;
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue