ARM: NEON instruction templates modified to set the predicate flag to false when needed.

This commit is contained in:
Giacomo Gabrielli 2011-02-23 15:10:50 -06:00
parent 3de8e0a0d4
commit 7ee2de31c4
3 changed files with 18 additions and 3 deletions

View file

@ -202,6 +202,8 @@ def template MicroNeonMixExecute {{
{
%(op_wb)s;
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0) {

View file

@ -234,6 +234,8 @@ def template NeonLoadExecute {{
if (fault == NoFault) {
%(op_wb)s;
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0 &&
@ -313,6 +315,8 @@ def template NeonStoreExecute {{
if (fault == NoFault) {
%(op_wb)s;
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0 &&
@ -459,6 +463,8 @@ def template NeonStoreInitiateAcc {{
fault = xc->writeBytes(memUnion.bytes, %(size)d, EA,
memAccessFlags, NULL);
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0 &&
@ -515,9 +521,12 @@ def template NeonLoadInitiateAcc {{
if (fault == NoFault) {
fault = xc->readBytes(EA, NULL, %(size)d, memAccessFlags);
}
} else if (fault == NoFault && machInst.itstateMask != 0 &&
(!isMicroop() || isLastMicroop())) {
xc->setMiscReg(MISCREG_ITSTATE, machInst.newItstate);
} else {
xc->setPredicate(false);
if (fault == NoFault && machInst.itstateMask != 0 &&
(!isMicroop() || isLastMicroop())) {
xc->setMiscReg(MISCREG_ITSTATE, machInst.newItstate);
}
}
return fault;

View file

@ -225,6 +225,8 @@ def template NeonEqualRegExecute {{
{
%(op_wb)s;
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0) {
@ -275,6 +277,8 @@ def template NeonUnequalRegExecute {{
{
%(op_wb)s;
}
} else {
xc->setPredicate(false);
}
if (fault == NoFault && machInst.itstateMask != 0) {