x = y >> 6; was failing if x and y were 16-bit ints
authorsdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Aug 2002 04:40:44 +0000 (04:40 +0000)
committersdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Sun, 11 Aug 2002 04:40:44 +0000 (04:40 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2070 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/pic/gen.c

index ae843d576104685fc98b6bb3cbb4fdc9c8a91c05..6ca5e3ecbb338e8929f783732a851e7ebdd3d0d0 100644 (file)
@@ -6777,10 +6777,12 @@ static void shiftR2Left2Result (operand *left, int offl,
     /* don't crash result[offr] */
     MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
     pic14_emitcode("xch","a,%s", aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
-  } else {
+  }
+/* else {
     movLeft2Result(left,offl, result, offr);
     MOVA(aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
   }
+*/
   /* a:x >> shCount (x = lsb(result))*/
 /*
   if(sign)
@@ -6880,15 +6882,17 @@ static void shiftR2Left2Result (operand *left, int offl,
       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
       emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16));
       emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-      emitpcode(POC_RLFW,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      emitpcode(POC_RLFW, popGet(AOP(result),offr+MSB16));
       emitpcode(POC_ANDLW,popGetLit(0x03));
       if(sign) {
        emitpcode(POC_BTFSC, 
                  newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),0,0));
        emitpcode(POC_IORLW,popGetLit(0xfc));
       }
-      emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-      emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      //emitpcode(POC_RLF,  popGet(AOP(result),offr));
 
        
     }