+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
int preserve_result = 0;
int generate_result = 0;
int i=0;
+ unsigned long lit = -1;
FENTRY;
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;
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));
} // 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;
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__);