X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fnv50%2Fcodegen%2Fnv50_ir_build_util.h;h=963c3505083c3bc8e0b128b4c2aff971592352c3;hb=c82714c593ac38ea87e061b92d10b34853784723;hp=691588615338e88c2ed6eae4e794846899523307;hpb=56d40aa51b34b77791cc3a49d7e86473a7459b72;p=mesa.git diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h b/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h index 69158861533..963c3505083 100644 --- a/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h +++ b/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h @@ -46,7 +46,8 @@ public: inline void remove(Instruction *i) { assert(i->bb == bb); bb->remove(i); } inline LValue *getScratch(int size = 4, DataFile = FILE_GPR); - inline LValue *getSSA(int size = 4); // scratch value for a single assignment + // scratch value for a single assignment: + inline LValue *getSSA(int size = 4, DataFile = FILE_GPR); inline Instruction *mkOp(operation, DataType, Value *); Instruction *mkOp1(operation, DataType, Value *, Value *); @@ -57,9 +58,11 @@ public: LValue *mkOp2v(operation, DataType, Value *, Value *, Value *); LValue *mkOp3v(operation, DataType, Value *, Value *, Value *, Value *); - LValue *mkLoad(DataType, Symbol *, Value *ptr); + Instruction *mkLoad(DataType, Value *dst, Symbol *, Value *ptr); Instruction *mkStore(operation, DataType, Symbol *, Value *ptr, Value *val); + LValue *mkLoadv(DataType, Symbol *, Value *ptr); + Instruction *mkMov(Value *, Value *, DataType = TYPE_U32); Instruction *mkMovToReg(int id, Value *); Instruction *mkMovFromReg(Value *, int id); @@ -76,11 +79,12 @@ public: Value **def, Value **src); Instruction *mkQuadop(uint8_t qop, Value *, uint8_t l, Value *, Value *); - FlowInstruction *mkFlow(operation, BasicBlock *target, - CondCode, Value *pred); + FlowInstruction *mkFlow(operation, void *target, CondCode, Value *pred); Instruction *mkSelect(Value *pred, Value *dst, Value *trSrc, Value *flSrc); + Instruction *mkSplit(Value *half[2], uint8_t halfSize, Value *); + void mkClobber(DataFile file, uint32_t regMask, int regUnitLog2); ImmediateValue *mkImm(float); @@ -216,18 +220,16 @@ LValue * BuildUtil::getScratch(int size, DataFile f) { LValue *lval = new_LValue(func, f); - if (size != 4) - lval->reg.size = size; + lval->reg.size = size; return lval; } LValue * -BuildUtil::getSSA(int size) +BuildUtil::getSSA(int size, DataFile f) { - LValue *lval = new_LValue(func, FILE_GPR); + LValue *lval = new_LValue(func, f); lval->ssa = 1; - if (size != 4) - lval->reg.size = size; + lval->reg.size = size; return lval; } @@ -282,6 +284,14 @@ BuildUtil::mkOp3v(operation op, DataType ty, Value *dst, return dst->asLValue(); } +inline LValue * +BuildUtil::mkLoadv(DataType ty, Symbol *mem, Value *ptr) +{ + LValue *dst = getScratch(); + mkLoad(ty, dst, mem, ptr); + return dst; +} + bool BuildUtil::DataArray::exists(ValueMap &m, unsigned int i, unsigned int c) {