nvc0/ir: fix SET and SLCT emission

We were never emitting a .X flag for consuming condition code on SET,
and weren't emitting a signed type for SLCT comparison. Discovered while
working on int64 logic.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
This commit is contained in:
Ilia Mirkin 2017-02-04 23:57:53 -05:00
parent eac5099c11
commit 2e986fa806
2 changed files with 6 additions and 0 deletions

View file

@ -1142,6 +1142,8 @@ CodeEmitterGK110::emitSET(const CmpInstruction *i)
} else {
code[1] |= 0x7 << 10;
}
if (i->flagsSrc >= 0)
code[1] |= 1 << 14;
emitCondCode(i->setCond,
isFloatType(i->sType) ? 0x33 : 0x34,
isFloatType(i->sType) ? 0xf : 0x7);
@ -1161,6 +1163,8 @@ CodeEmitterGK110::emitSLCT(const CmpInstruction *i)
} else {
emitForm_21(i, 0x1a0, 0xb20);
emitCondCode(cc, 0x34, 0x7);
if (i->dType == TYPE_S32)
code[1] |= 1 << 19;
}
}

View file

@ -1194,6 +1194,8 @@ CodeEmitterNVC0::emitSET(const CmpInstruction *i)
if (i->ftz)
code[1] |= 1 << 27;
if (i->flagsSrc >= 0)
code[0] |= 1 << 6;
emitCondCode(i->setCond, 32 + 23);
emitNegAbs12(i);