From 238a6beb3f9d1f4b26a8c41f54b659f266259254 Mon Sep 17 00:00:00 2001 From: tecodev Date: Thu, 10 Feb 2005 12:44:53 +0000 Subject: [PATCH] * src/pic16/pcode.c (assignToSameBank) : fixed cast to pointer of 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 | 6 ++++++ src/pic16/gen.c | 13 ++++++++++--- src/pic16/pcode.c | 8 ++++---- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index 47b13e89..cb622841 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2005-02-10 Raphael Neider + + * 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 * src/SDCC.lex(doPragma) : save and restore warning options as well diff --git a/src/pic16/gen.c b/src/pic16/gen.c index 0a15d8cf..82665758 100644 --- a/src/pic16/gen.c +++ b/src/pic16/gen.c @@ -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)); diff --git a/src/pic16/pcode.c b/src/pic16/pcode.c index 7de4bcf8..8f6b3e4d 100644 --- a/src/pic16/pcode.c +++ b/src/pic16/pcode.c @@ -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__); -- 2.30.2