src/SDCCicode.c (operandOperation): fixed problem with bitops and 0xffffffff
authorbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 Jul 2003 11:17:52 +0000 (11:17 +0000)
committerbernhardheld <bernhardheld@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 24 Jul 2003 11:17:52 +0000 (11:17 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2770 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/SDCCicode.c

index 5d86caebe054cf518eb6f698aeabe788ca0cfc6c..3754bee34d058f6387e9ff066ffe5d7ee2b2a5ec 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2003-07-24  Bernhard Held <bernhard@bernhardheld.de>
+
+       * src/SDCCicode.c (operandOperation): fixed problem with bitops and 0xffffffff;
+       after {double d = 0xffffffff; long l = d;} l will be 0x80000000 (LONG_MIN)
+
 2003-07-23  Bernhard Held <bernhard@bernhardheld.de>
 
        added DUMMY_READ_VOLATILE:
index a49f75ab00312c205194d688b995f54c5dfa1294..e4e54e7c68ea7121a7642fdb7e7e55b646e30416 100644 (file)
@@ -1143,16 +1143,16 @@ operandOperation (operand * left, operand * right,
                               operandLitValue (right));
       break;
     case BITWISEAND:
-      retval = operandFromLit ((long)operandLitValue(left) & 
-                              (long)operandLitValue(right));
+      retval = operandFromLit ((unsigned long)operandLitValue(left) & 
+                              (unsigned long)operandLitValue(right));
       break;
     case '|':
-      retval = operandFromLit ((long)operandLitValue (left) |
-                              (long)operandLitValue (right));
+      retval = operandFromLit ((unsigned long)operandLitValue (left) |
+                              (unsigned long)operandLitValue (right));
       break;
     case '^':
-      retval = operandFromLit ((long)operandLitValue (left) ^
-                              (long)operandLitValue (right));
+      retval = operandFromLit ((unsigned long)operandLitValue (left) ^
+                              (unsigned long)operandLitValue (right));
       break;
     case AND_OP:
       retval = operandFromLit (operandLitValue (left) &&
@@ -1164,7 +1164,7 @@ operandOperation (operand * left, operand * right,
       break;
     case RRC:
       {
-       long i = (long) operandLitValue (left);
+       unsigned long i = (unsigned long) operandLitValue (left);
 
        retval = operandFromLit ((i >> (getSize (operandType (left)) * 8 - 1)) |
                                 (i << 1));
@@ -1172,7 +1172,7 @@ operandOperation (operand * left, operand * right,
       break;
     case RLC:
       {
-       long i = (long) operandLitValue (left);
+       unsigned long i = (unsigned long) operandLitValue (left);
 
        retval = operandFromLit ((i << (getSize (operandType (left)) * 8 - 1)) |
                                 (i >> 1));
@@ -1184,7 +1184,7 @@ operandOperation (operand * left, operand * right,
       break;
 
     case '~':
-      retval = operandFromLit (~((long) operandLitValue (left)));
+      retval = operandFromLit (~((unsigned long) operandLitValue (left)));
       break;
 
     case '!':