break;
case NMin_Cas:
- if (i->NMin.Cas.sz == 4){
- vex_printf("cas: \n");
-
+ vex_printf("cas: \n");
+ if (i->NMin.Cas.sz == 4) {
vex_printf("ll ");
ppHRegNANOMIPS(i->NMin.Cas.oldLo);
vex_printf(", 0(");
vex_printf(", ");
ppHRegNANOMIPS(i->NMin.Cas.dataLo);
vex_printf("; end:");
- }
- else{
- vassert(0);
+ } else {
+ vex_printf("llwp ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldHi);
+ vex_printf(", 0(");
+ ppHRegNANOMIPS(i->NMin.Cas.addr);
+ vex_printf("); ");
+
+ vex_printf("bnec ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.expdLo);
+ vex_printf(", end; ");
+
+ vex_printf("bnec ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldHi);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.expdHi);
+ vex_printf(", end; ");
+
+ vex_printf("addiu ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldLo);
+ vex_printf(", 1; ");
+
+ vex_printf("addiu ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldHi);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldHi);
+ vex_printf(", 1; ");
+
+ vex_printf("scwp ");
+ ppHRegNANOMIPS(i->NMin.Cas.dataLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.dataHi);
+ vex_printf(", 0(");
+ ppHRegNANOMIPS(i->NMin.Cas.addr);
+ vex_printf("); ");
+
+ vex_printf("movn ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.expdLo);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.dataLo);
+
+ vex_printf("movn ");
+ ppHRegNANOMIPS(i->NMin.Cas.oldHi);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.expdHi);
+ vex_printf(", ");
+ ppHRegNANOMIPS(i->NMin.Cas.dataHi);
+ vex_printf("; end:");
}
break;
return;
case NMin_Cas:
- if (i->NMin.Cas.sz == 4){
- addHRegUse(u, HRmWrite, i->NMin.Cas.oldLo);
- addHRegUse(u, HRmRead, i->NMin.Cas.addr);
- addHRegUse(u, HRmRead, i->NMin.Cas.expdLo);
- addHRegUse(u, HRmModify, i->NMin.Cas.dataLo);
- } else {
- addHRegUse(u, HRmWrite, i->NMin.Cas.oldLo);
+ addHRegUse(u, HRmWrite, i->NMin.Cas.oldLo);
+ addHRegUse(u, HRmRead, i->NMin.Cas.addr);
+ addHRegUse(u, HRmRead, i->NMin.Cas.expdLo);
+ addHRegUse(u, HRmModify, i->NMin.Cas.dataLo);
+ if (i->NMin.Cas.sz == 8) {
addHRegUse(u, HRmWrite, i->NMin.Cas.oldHi);
- addHRegUse(u, HRmRead, i->NMin.Cas.addr);
- addHRegUse(u, HRmRead, i->NMin.Cas.expdLo);
addHRegUse(u, HRmRead, i->NMin.Cas.expdHi);
- addHRegUse(u, HRmModify, i->NMin.Cas.dataLo);
addHRegUse(u, HRmModify, i->NMin.Cas.dataHi);
}
return;
mapReg(m, &i->NMin.Cas.addr);
mapReg(m, &i->NMin.Cas.expdLo);
mapReg(m, &i->NMin.Cas.dataLo);
- if (&i->NMin.Cas.sz){
+ if (i->NMin.Cas.sz == 8) {
mapReg(m, &i->NMin.Cas.oldHi);
mapReg(m, &i->NMin.Cas.expdHi);
mapReg(m, &i->NMin.Cas.dataHi);
}
case NMin_Cas: {
+ vassert((i->NMin.Cas.sz == 4) || (i->NMin.Cas.sz == 8));
UInt oldLo = iregNo(i->NMin.Cas.oldLo);
- UInt oldHi = iregNo(i->NMin.Cas.oldHi);
UInt addr = iregNo(i->NMin.Cas.addr);
UInt expdLo = iregNo(i->NMin.Cas.expdLo);
- UInt expdHi = iregNo(i->NMin.Cas.expdHi);
UInt dataLo = iregNo(i->NMin.Cas.dataLo);
- UInt dataHi = iregNo(i->NMin.Cas.dataHi);
-
- vassert((i->NMin.Cas.sz == 4) || (i->NMin.Cas.sz == 8));
+ UInt oldHi = 0, expdHi = 0, dataHi = 0;
+ if (i->NMin.Cas.sz == 8) {
+ oldHi = iregNo(i->NMin.Cas.oldHi);
+ expdHi = iregNo(i->NMin.Cas.expdHi);
+ dataHi = iregNo(i->NMin.Cas.dataHi);
+ }
if (i->NMin.Cas.sz == 4) {
/*