more about genUnpackBits
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 18 Nov 2005 13:01:00 +0000 (13:01 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 18 Nov 2005 13:01:00 +0000 (13:01 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3956 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/mcs51/gen.c

index 1d64c504afc8a254c88a696617cdf77869d6468e..c9b86b9725967ccc04255d6728639214d3f45a9e 100644 (file)
@@ -9350,9 +9350,21 @@ genUnpackBits (operand * result, char *rname, int ptype, iCode *ifx)
 finish:
   if (offset < rsize)
     {
+      char *source;
+
+      if (SPEC_USIGN (etype))
+        source = zero;
+      else
+        {
+          /* signed bitfield: sign extension with 0x00 or 0xff */
+          emitcode ("rlc", "a");
+          emitcode ("subb", "a,acc");
+
+          source = "a";
+        }
       rsize -= offset;
       while (rsize--)
-        aopPut (result, zero, offset++, isOperandVolatile (result, FALSE));
+        aopPut (result, source, offset++, isOperandVolatile (result, FALSE));
     }
 }