874,881c874,888
< assert(imm >= 0 && imm < eCount);
< for (unsigned i = 0; i < eCount; i++) {
< Element srcElem1 = gtoh(srcReg1.elements[i]);
< Element srcElem2 = gtoh(srcReg2.elements[imm]);
< Element destElem;
< %(readDest)s
< %(op)s
< destReg.elements[i] = htog(destElem);
---
> if (imm < 0 && imm >= eCount) {
> #if FULL_SYSTEM
> fault = new UndefinedInstruction;
> #else
> fault = new UndefinedInstruction(false, mnemonic);
> #endif
> } else {
> for (unsigned i = 0; i < eCount; i++) {
> Element srcElem1 = gtoh(srcReg1.elements[i]);
> Element srcElem2 = gtoh(srcReg2.elements[imm]);
> Element destElem;
> %(readDest)s
> %(op)s
> destReg.elements[i] = htog(destElem);
> }
922,929c929,943
< assert(imm >= 0 && imm < eCount);
< for (unsigned i = 0; i < eCount; i++) {
< Element srcElem1 = gtoh(srcReg1.elements[i]);
< Element srcElem2 = gtoh(srcReg2.elements[imm]);
< BigElement destElem;
< %(readDest)s
< %(op)s
< destReg.elements[i] = htog(destElem);
---
> if (imm < 0 && imm >= eCount) {
> #if FULL_SYSTEM
> fault = new UndefinedInstruction;
> #else
> fault = new UndefinedInstruction(false, mnemonic);
> #endif
> } else {
> for (unsigned i = 0; i < eCount; i++) {
> Element srcElem1 = gtoh(srcReg1.elements[i]);
> Element srcElem2 = gtoh(srcReg2.elements[imm]);
> BigElement destElem;
> %(readDest)s
> %(op)s
> destReg.elements[i] = htog(destElem);
> }
968,975c982,996
< assert(imm >= 0 && imm < rCount);
< for (unsigned i = 0; i < rCount; i++) {
< FloatReg srcReg1 = srcRegs1[i];
< FloatReg srcReg2 = srcRegs2[imm];
< FloatReg destReg;
< %(readDest)s
< %(op)s
< destRegs[i] = destReg;
---
> if (imm < 0 && imm >= eCount) {
> #if FULL_SYSTEM
> fault = new UndefinedInstruction;
> #else
> fault = new UndefinedInstruction(false, mnemonic);
> #endif
> } else {
> for (unsigned i = 0; i < rCount; i++) {
> FloatReg srcReg1 = srcRegs1[i];
> FloatReg srcReg2 = srcRegs2[imm];
> FloatReg destReg;
> %(readDest)s
> %(op)s
> destRegs[i] = destReg;
> }
3280,3281c3301,3308
< assert(index < eCount);
< destReg.elements[i] = srcReg2.elements[index];
---
> if (index >= eCount)
> #if FULL_SYSTEM
> fault = new UndefinedInstruction;
> #else
> fault = new UndefinedInstruction(false, mnemonic);
> #endif
> else
> destReg.elements[i] = srcReg2.elements[index];