GenRegister l = ra->genReg(insn.dst(12));
GenRegister m = ra->genReg(insn.dst(13));
GenRegister flagReg = checkFlagRegister(ra->genReg(insn.dst(14)));
- GenRegister emaskReg = ra->genReg(GenRegister::uw1grf(ir::ocl::emask));
GenRegister zero = GenRegister::immud(0),
one = GenRegister::immud(1),
imm31 = GenRegister::immud(31);
p->curr.execWidth = 1;
p->curr.noMask = 1;
- p->AND(flagReg, flagReg, emaskReg);
-
// under condition, jump back to start point
if (simdWidth == 8)
p->curr.predicate = GEN_PREDICATE_ALIGN1_ANY8H;
auto &stackUse = dag->getUse(ir::ocl::stackptr);
// We insert the block IP mask first
-#if 0
- this->insertCurbeReg(ir::ocl::blockip, this->newCurbeEntry(GBE_CURBE_BLOCK_IP, 0, this->simdWidth * sizeof(uint16_t)));
- this->insertCurbeReg(ir::ocl::emask, this->newCurbeEntry(GBE_CURBE_EMASK, 0, this->simdWidth * sizeof(uint16_t)));
- this->insertCurbeReg(ir::ocl::notemask, this->newCurbeEntry(GBE_CURBE_NOT_EMASK, 0, sizeof(uint16_t)));
- this->insertCurbeReg(ir::ocl::barriermask, this->newCurbeEntry(GBE_CURBE_BARRIER_MASK, 0, sizeof(uint16_t)));
- // Already inserted registers go here
- const size_t localIDSizde = sizeof(uint32_t) * this->simdWidth;
- insertCurbeReg(ir::ocl::lid0, this->newCurbeEntry(GBE_CURBE_LOCAL_ID_X, 0, localIDSize));
- insertCurbeReg(ir::ocl::lid1, this->newCurbeEntry(GBE_CURBE_LOCAL_ID_Y, 0, localIDSize));
- insertCurbeReg(ir::ocl::lid2, this->newCurbeEntry(GBE_CURBE_LOCAL_ID_Z, 0, localIDSize));
- // Insert the stack buffer if used
- if (stackUse.size() != 0)
- insertCurbeReg(ir::ocl::stackbuffer, this->newCurbeEntry(GBE_CURBE_EXTRA_ARGUMENT, GBE_STACK_BUFFER, ptrSize));
-#else
using namespace ir::ocl;
allocCurbeReg(blockip, GBE_CURBE_BLOCK_IP);
- allocCurbeReg(emask, GBE_CURBE_EMASK);
- allocCurbeReg(notemask, GBE_CURBE_NOT_EMASK);
- allocCurbeReg(barriermask, GBE_CURBE_BARRIER_MASK);
allocCurbeReg(lid0, GBE_CURBE_LOCAL_ID_X);
allocCurbeReg(lid1, GBE_CURBE_LOCAL_ID_Y);
allocCurbeReg(lid2, GBE_CURBE_LOCAL_ID_Z);
if (stackUse.size() != 0)
allocCurbeReg(stackbuffer, GBE_CURBE_EXTRA_ARGUMENT, GBE_STACK_BUFFER);
-#endif
// Go over the arguments and find the related patch locations
const uint32_t argNum = fn.argNum();
for (uint32_t argID = 0u; argID < argNum; ++argID) {
"block_ip",
"barrier_id", "thread_number",
"work_dimension",
- "emask", "notemask", "barriermask", "retVal"
+ "retVal"
};
#if GBE_DEBUG
DECL_NEW_REG(FAMILY_DWORD, barrierid, 1);
DECL_NEW_REG(FAMILY_DWORD, threadn, 1);
DECL_NEW_REG(FAMILY_DWORD, workdim, 1);
- DECL_NEW_REG(FAMILY_WORD, emask, 1);
- DECL_NEW_REG(FAMILY_WORD, notemask, 1);
- DECL_NEW_REG(FAMILY_WORD, barriermask, 1);
DECL_NEW_REG(FAMILY_WORD, retVal, 1);
}
#undef DECL_NEW_REG
static const Register barrierid = Register(21);// barrierid
static const Register threadn = Register(22); // number of threads
static const Register workdim = Register(23); // work dimention.
- static const Register emask = Register(24); // store the emask bits for the branching fix.
- static const Register notemask = Register(25); // store the !emask bits for the branching fix.
- static const Register barriermask = Register(26); // software mask for barrier.
- static const Register retVal = Register(27); // helper register to do data flow analysis.
- static const uint32_t regNum = 28; // number of special registers
+ static const Register retVal = Register(24); // helper register to do data flow analysis.
+ static const uint32_t regNum = 25; // number of special registers
extern const char *specialRegMean[]; // special register name.
} /* namespace ocl */