* src/pic16/pcode.c (assignToSameBank) : fixed cast to pointer of
authortecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 10 Feb 2005 12:44:53 +0000 (12:44 +0000)
committertecodev <tecodev@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Thu, 10 Feb 2005 12:44:53 +0000 (12:44 +0000)
  different size for Alpha
* src/pic16/gen.c (genCmpEq) : improved compare with 0

git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@3675 4a8a32a2-be11-0410-ad9d-d568d2c75423

ChangeLog
src/pic16/gen.c
src/pic16/pcode.c

index 47b13e89a01e6dc073d97a68f1b8752371828610..cb622841f499c2e6a6ce6e13081c747428def463 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2005-02-10 Raphael Neider <rneider AT web.de>
+
+       * src/pic16/pcode.c (assignToSameBank) : fixed cast to pointer of
+         different size for Alpha
+       * src/pic16/gen.c (genCmpEq) : improved compare with 0
+
 2005-02-09 Raphael Neider <rneider AT web.de>
 
        * src/SDCC.lex(doPragma) : save and restore warning options as well
index 0a15d8cfcfa4677b287643dc951553b40947dcb6..82665758a21b85aa5ef5207fd97dbafce67c86a1 100644 (file)
@@ -7074,6 +7074,7 @@ static void genCmpEq (iCode *ic, iCode *ifx)
   int preserve_result = 0;
   int generate_result = 0;
   int i=0;
+  unsigned long lit = -1;
 
   FENTRY;
   
@@ -7098,6 +7099,10 @@ static void genCmpEq (iCode *ic, iCode *ifx)
       left = tmp;
     }
 
+  if (AOP_TYPE(right) == AOP_LIT) {
+    lit = (unsigned long) floatFromVal (AOP(right)->aopu.aop_lit);
+  }
+
   if ( regsInCommon(left, result) || regsInCommon(right, result) )
     preserve_result = 1;
 
@@ -7119,9 +7124,11 @@ static void genCmpEq (iCode *ic, iCode *ifx)
           else
             pic16_emitpcode(POC_MOVFW, pic16_popGet(AOP(left), i));
         }
-      if(is_LitOp(right))
-        pic16_emitpcode(POC_XORLW, pic16_popGet(AOP(right), i)); 
-      else
+      if(is_LitOp(right)) {
+        if (is_LitOp(left) || (0 != ((lit >> (8*i))&0x00FF))) {
+          pic16_emitpcode(POC_XORLW, pic16_popGet(AOP(right), i)); 
+        }
+      } else
         pic16_emitpcode(POC_XORFW, pic16_popGet(AOP(right), i)); 
 
       pic16_emitpcode(POC_BNZ,pic16_popGetLabel(falselbl->key));
index 7de4bcf8124acd99c3e617276655a0d3082b7386..8f6b3e4debe98661963926550b64817a628be911 100644 (file)
@@ -8899,18 +8899,18 @@ int assignToSameBank (int bank0, int bank1, int doAbs)
   } // if
 
   // now assign bank eff1 to bank eff0
-  pbank0 = (pseudoBank *) hTabFindByKey (coerce, eff0 % coerce->size, (void *) eff0, &comparePtr);
+  pbank0 = (pseudoBank *) hTabFindByKey (coerce, eff0 % coerce->size, (void *)((char*)0+eff0), &comparePtr);
   if (!pbank0) {
     pbank0 = Safe_calloc (1, sizeof (pseudoBank));
     pbank0->bank = eff0;
     pbank0->size = 1;
     pbank0->ref = 1;
-    hTabAddItemLong (&coerce, eff0 % coerce->size, (void *) eff0, (void *) pbank0);
+    hTabAddItemLong (&coerce, eff0 % coerce->size, (void *)((char*)0+eff0), (void *) pbank0);
   } // if
 
   pbank1 = NULL;
   hitem = hTabSearch (coerce, eff1 % coerce->size);
-  while (hitem && hitem->pkey != (void *)eff1)
+  while (hitem && hitem->pkey != (void *)((char*)0+eff1))
     hitem = hitem->next;
 
   if (hitem) pbank1 = (pseudoBank *) hitem->item;
@@ -8941,7 +8941,7 @@ int assignToSameBank (int bank0, int bank1, int doAbs)
   if (hitem)
     hitem->item = pbank0;
   else  
-    hTabAddItemLong (&coerce, eff1 % coerce->size, (void *) eff1, (void *) pbank0);
+    hTabAddItemLong (&coerce, eff1 % coerce->size, (void *)((char*)0+eff1), (void *) pbank0);
   pbank0->ref++;
 
   //fprintf (stderr, "%s:%d: leaving.\n", __FUNCTION__, __LINE__);