Fixed bug 609628 ==> x=(x+1)&0x0f generated bad code in the pic port.
authorsdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2003 16:20:24 +0000 (16:20 +0000)
committersdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 30 Mar 2003 16:20:24 +0000 (16:20 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2439 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/pic/gen.c

index e77ea3b64513c643c004526a3f893433080f06cb..b7e80966bfd7925f0b446596e8106799c6dbd6b2 100644 (file)
@@ -5469,23 +5469,32 @@ static void genAnd (iCode *ic, iCode *ifx)
            emitpcode(POC_CLRF,popGet(AOP(result),offset));
            break;
          case 0xff:
-           pic14_emitcode("movf","%s,w",
-                          aopGet(AOP(left),offset,FALSE,FALSE));
-           pic14_emitcode("movwf","%s",
-                          aopGet(AOP(result),offset,FALSE,FALSE));
-           emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-           emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+           if(AOP_TYPE(left) == AOP_ACC) {
+             emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+           } else {
+             pic14_emitcode("movf","%s,w",
+                            aopGet(AOP(left),offset,FALSE,FALSE));
+             pic14_emitcode("movwf","%s",
+                            aopGet(AOP(result),offset,FALSE,FALSE));
+             emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+             emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+           }
            break;
          default:
-           pic14_emitcode("movlw","0x%x",t);
-           pic14_emitcode("andwf","%s,w",
-                          aopGet(AOP(left),offset,FALSE,FALSE));
-           pic14_emitcode("movwf","%s",
-                          aopGet(AOP(result),offset,FALSE,FALSE));
+           if(AOP_TYPE(left) == AOP_ACC) {
+             emitpcode(POC_ANDLW, popGetLit(t));
+             emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+           } else {
+             pic14_emitcode("movlw","0x%x",t);
+             pic14_emitcode("andwf","%s,w",
+                            aopGet(AOP(left),offset,FALSE,FALSE));
+             pic14_emitcode("movwf","%s",
+                            aopGet(AOP(result),offset,FALSE,FALSE));
              
-           emitpcode(POC_MOVLW, popGetLit(t));
-           emitpcode(POC_ANDFW,popGet(AOP(left),offset));
-           emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+             emitpcode(POC_MOVLW, popGetLit(t));
+             emitpcode(POC_ANDFW,popGet(AOP(left),offset));
+             emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+           }
          }
          continue;
        }