gm107/ir: add OP_SELP emission, used in DSQRT lowering

The current DSQRT lowering code emits an OP_SELP, so we have to handle
its emission. This will eventually go away, but no harm supporting this
op.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
Ilia Mirkin
2016-04-02 19:25:59 -04:00
parent 3610b1466d
commit d64134ecae
@@ -126,6 +126,7 @@ private:
void emitF2I();
void emitI2F();
void emitI2I();
void emitSEL();
void emitSHFL();
void emitDADD();
@@ -893,6 +894,32 @@ CodeEmitterGM107::emitI2I()
emitGPR (0x00, insn->def(0));
}
void
CodeEmitterGM107::emitSEL()
{
switch (insn->src(1).getFile()) {
case FILE_GPR:
emitInsn(0x5ca00000);
emitGPR (0x14, insn->src(1));
break;
case FILE_MEMORY_CONST:
emitInsn(0x4ca00000);
emitCBUF(0x22, -1, 0x14, 16, 2, insn->src(1));
break;
case FILE_IMMEDIATE:
emitInsn(0x38a00000);
emitIMMD(0x14, 19, insn->src(1));
break;
default:
assert(!"bad src1 file");
break;
}
emitPRED(0x27, insn->src(2));
emitGPR (0x08, insn->src(0));
emitGPR (0x00, insn->def(0));
}
void
CodeEmitterGM107::emitSHFL()
{
@@ -2963,6 +2990,9 @@ CodeEmitterGM107::emitInstruction(Instruction *i)
emitISETP();
}
break;
case OP_SELP:
emitSEL();
break;
case OP_PRESIN:
case OP_PREEX2:
emitRRO();