Fixed problem with subtraction where the result would not be updated when borrowing.
authorslade_rich <slade_rich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 28 Dec 2004 23:34:24 +0000 (23:34 +0000)
committerslade_rich <slade_rich@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Tue, 28 Dec 2004 23:34:24 +0000 (23:34 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3620 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/pic/genarith.c

index ad58c923080f7f45f35dfd8805bcb3a53b079a98..37b3151c6c0a5f12d41a1248ee5d04b10b2e1833 100644 (file)
@@ -1604,26 +1604,19 @@ void genMinus (iCode *ic)
                
                if(size){
                        if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)))) {
+                               int lit = 0;
                                if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
                                        (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
                                        (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE))) {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_SUBLW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
-                               } else {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_SUBFW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
+                                       lit = 1;
+                               }
+                               while(size--){
+                                       emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
+                                       emitSKPC;
+                                       emitpcode(POC_INCFW, popGet(AOP(IC_RIGHT(ic)),offset));
+                                       emitpcode(lit?POC_SUBLW:POC_SUBFW,   popGet(AOP(IC_LEFT(ic)),offset));
+                                       emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
+                                       offset++;
                                }
                        } else {
                                PIC_OPCODE poc = POC_MOVFW;