Another big endian fix
authorjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 12 Oct 2001 12:36:05 +0000 (12:36 +0000)
committerjohanknol <johanknol@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Fri, 12 Oct 2001 12:36:05 +0000 (12:36 +0000)
git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@1391 4a8a32a2-be11-0410-ad9d-d568d2c75423

src/SDCCval.c

index 04fd633c32cdf666833ff22f14b07ef8eb5a6be5..6d645ee200cfa4010ebe33ed34364520ce58b9ff 100644 (file)
@@ -343,33 +343,31 @@ value *cheapestVal (value *val) {
   }
 
   if (SPEC_USIGN(val->type)) {
+    if (uval<=0xffff) {
+      SPEC_LONG(val->type)=0;
+      SPEC_CVAL(val->type).v_uint = uval;
+    }
     if (uval<=0xff) {
       SPEC_NOUN(val->type)=V_CHAR;
-      SPEC_LONG(val->type)=0;
-    } else {
-      if (uval<=0xffff) {
-       SPEC_LONG(val->type)=0;
-      }
     }
-  } else {
+  } else { // not unsigned
     if (sval<0) {
+      if (sval>=-32768) {
+       SPEC_LONG(val->type)=0;
+       SPEC_CVAL(val->type).v_int = sval & 0xffff;
+      }
       if (sval>=-128) {
        SPEC_NOUN(val->type)=V_CHAR;
        SPEC_CVAL(val->type).v_int &= 0xff;
+      }
+    } else { // sval>=0
+      SPEC_USIGN(val->type)=1;
+      if (sval<=65535) {
        SPEC_LONG(val->type)=0;
-      } else {
-       if (sval>=-32768) {
-         SPEC_LONG(val->type)=0;
-       }
+       SPEC_CVAL(val->type).v_int = sval;
       }
-    } else {
-      if (sval<=127) {
+      if (sval<=255) {
        SPEC_NOUN(val->type)=V_CHAR;
-       SPEC_LONG(val->type)=0;
-      } else {
-       if (sval<=32767) {
-         SPEC_LONG(val->type)=0;
-       }
       }
     }
   }