summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/gallium/drivers/nv50/codegen/nv50_ir_build_util.cpp11
-rw-r--r--src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h12
-rw-r--r--src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp6
-rw-r--r--src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp4
4 files changed, 21 insertions, 12 deletions
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.cpp
index 322d6b9d34b..4448e8299d2 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.cpp
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.cpp
@@ -103,19 +103,18 @@ BuildUtil::mkOp3(operation op, DataType ty, Value *dst,
return insn;
}
-LValue *
-BuildUtil::mkLoad(DataType ty, Symbol *mem, Value *ptr)
+Instruction *
+BuildUtil::mkLoad(DataType ty, Value *dst, Symbol *mem, Value *ptr)
{
Instruction *insn = new_Instruction(func, OP_LOAD, ty);
- LValue *def = getScratch();
- insn->setDef(0, def);
+ insn->setDef(0, dst);
insn->setSrc(0, mem);
if (ptr)
insn->setIndirect(0, 0, ptr);
insert(insn);
- return def;
+ return insn;
}
Instruction *
@@ -502,7 +501,7 @@ BuildUtil::DataArray::load(ValueMap &m, int i, int c, Value *ptr)
if (!sym)
sym = insert(m, i, c, mkSymbol(i, c));
- return up->mkLoad(typeOfSize(eltSize), static_cast<Symbol *>(sym), ptr);
+ return up->mkLoadv(typeOfSize(eltSize), static_cast<Symbol *>(sym), ptr);
}
}
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 dd7e491cb5c..963c3505083 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_build_util.h
@@ -58,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);
@@ -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)
{
diff --git a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
index 954dfd47adb..32915174e01 100644
--- a/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
+++ b/src/gallium/drivers/nv50/codegen/nv50_ir_from_tgsi.cpp
@@ -1346,7 +1346,7 @@ Converter::fetchSrc(tgsi::Instruction::SrcRegister src, int c, Value *ptr)
assert(!ptr);
return loadImm(NULL, info->immd.data[idx * 4 + swz]);
case TGSI_FILE_CONSTANT:
- return mkLoad(TYPE_U32, srcToSym(src, c), ptr);
+ return mkLoadv(TYPE_U32, srcToSym(src, c), ptr);
case TGSI_FILE_INPUT:
if (prog->getType() == Program::TYPE_FRAGMENT) {
// don't load masked inputs, won't be assigned a slot
@@ -1356,7 +1356,7 @@ Converter::fetchSrc(tgsi::Instruction::SrcRegister src, int c, Value *ptr)
return mkOp1v(OP_RDSV, TYPE_F32, getSSA(), mkSysVal(SV_FACE, 0));
return interpolate(src, c, ptr);
}
- return mkLoad(TYPE_U32, srcToSym(src, c), ptr);
+ return mkLoadv(TYPE_U32, srcToSym(src, c), ptr);
case TGSI_FILE_OUTPUT:
assert(!"load from output file");
return NULL;
@@ -2287,7 +2287,7 @@ Converter::handleUserClipPlanes()
for (i = 0; i < info->io.genUserClip; ++i) {
Symbol *sym = mkSymbol(FILE_MEMORY_CONST, info->io.ucpBinding,
TYPE_F32, info->io.ucpBase + i * 16 + c * 4);
- Value *ucp = mkLoad(TYPE_F32, sym, NULL);
+ Value *ucp = mkLoadv(TYPE_F32, sym, NULL);
if (c == 0)
res[i] = mkOp2v(OP_MUL, TYPE_F32, getScratch(), clipVtx[c], ucp);
else
diff --git a/src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp
index c5a7772ed9f..9cea061d06b 100644
--- a/src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp
+++ b/src/gallium/drivers/nvc0/codegen/nv50_ir_lowering_nvc0.cpp
@@ -673,7 +673,7 @@ NVC0LoweringPass::handleTEX(TexInstruction *i)
tmp[0] = bld.getScratch();
bind = bld.mkSymbol(FILE_MEMORY_CONST, 15, TYPE_U32, i->tex.r * 4);
bld.mkOp2(OP_SHL, TYPE_U32, tmp[0], rRel, shCnt);
- tmp[1] = bld.mkLoad(TYPE_U32, bind, tmp[0]);
+ tmp[1] = bld.mkLoadv(TYPE_U32, bind, tmp[0]);
bld.mkOp2(OP_AND, TYPE_U32, tmp[0], tmp[1],
bld.loadImm(tmp[0], 0x00ffffffu));
rRel = tmp[0];
@@ -683,7 +683,7 @@ NVC0LoweringPass::handleTEX(TexInstruction *i)
tmp[0] = bld.getScratch();
bind = bld.mkSymbol(FILE_MEMORY_CONST, 15, TYPE_U32, i->tex.s * 4);
bld.mkOp2(OP_SHL, TYPE_U32, tmp[0], sRel, shCnt);
- tmp[1] = bld.mkLoad(TYPE_U32, bind, tmp[0]);
+ tmp[1] = bld.mkLoadv(TYPE_U32, bind, tmp[0]);
bld.mkOp2(OP_AND, TYPE_U32, tmp[0], tmp[1],
bld.loadImm(tmp[0], 0xff000000u));
sRel = tmp[0];