* .version: changed version to 2.5.4
[fw/sdcc] / src / pic / genarith.c
index 66bb1e24a60d1caec11bf293b96e3118d9300c58..78582d50197e4193f727bbd18dfc89354bcd94ea 100644 (file)
@@ -523,6 +523,8 @@ static void genAddLit (iCode *ic, int lit)
        result = IC_RESULT(ic);
        same = pic14_sameRegs(AOP(left), AOP(result));
        size = pic14_getDataSize(result);
+       if (size > pic14_getDataSize(left))
+               size = pic14_getDataSize(left);
        
        if(same) {
                
@@ -831,6 +833,11 @@ static void genAddLit (iCode *ic, int lit)
                        }
                }
        }
+
+       size = pic14_getDataSize(result);
+       if (size > pic14_getDataSize(left))
+               size = pic14_getDataSize(left);
+       addSign(result, size, 0);
 }
 
 /*-----------------------------------------------------------------*/
@@ -1093,9 +1100,11 @@ void genPlus (iCode *ic)
                                poc = POC_MOVLW;
                        while(leftsize-- > 0) {
                                emitpcode(poc, popGetAddr(AOP(IC_LEFT(ic)),offset,0));
-                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
                                emitSKPNC;
-                               emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset));
+                               emitpcode(POC_ADDLW, popGetLit(0x01));
+                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+                               //emitSKPNC;
+                               //emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset)); /* INCF does not update Carry! */
                                offset++;
                                if (size)
                                        size--;