From: sdattalo Date: Sun, 30 Mar 2003 16:20:24 +0000 (+0000) Subject: Fixed bug 609628 ==> x=(x+1)&0x0f generated bad code in the pic port. X-Git-Url: https://git.gag.com/?a=commitdiff_plain;h=dd7e888d74bc2dcd173c0e507778c638bd04c74f;p=fw%2Fsdcc Fixed bug 609628 ==> x=(x+1)&0x0f generated bad code in the pic port. git-svn-id: https://sdcc.svn.sourceforge.net/svnroot/sdcc/trunk/sdcc@2439 4a8a32a2-be11-0410-ad9d-d568d2c75423 --- diff --git a/src/pic/gen.c b/src/pic/gen.c index e77ea3b6..b7e80966 100644 --- a/src/pic/gen.c +++ b/src/pic/gen.c @@ -5469,23 +5469,32 @@ static void genAnd (iCode *ic, iCode *ifx) emitpcode(POC_CLRF,popGet(AOP(result),offset)); break; case 0xff: - pic14_emitcode("movf","%s,w", - aopGet(AOP(left),offset,FALSE,FALSE)); - pic14_emitcode("movwf","%s", - aopGet(AOP(result),offset,FALSE,FALSE)); - emitpcode(POC_MOVFW,popGet(AOP(left),offset)); - emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + if(AOP_TYPE(left) == AOP_ACC) { + emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + } else { + pic14_emitcode("movf","%s,w", + aopGet(AOP(left),offset,FALSE,FALSE)); + pic14_emitcode("movwf","%s", + aopGet(AOP(result),offset,FALSE,FALSE)); + emitpcode(POC_MOVFW,popGet(AOP(left),offset)); + emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + } break; default: - pic14_emitcode("movlw","0x%x",t); - pic14_emitcode("andwf","%s,w", - aopGet(AOP(left),offset,FALSE,FALSE)); - pic14_emitcode("movwf","%s", - aopGet(AOP(result),offset,FALSE,FALSE)); + if(AOP_TYPE(left) == AOP_ACC) { + emitpcode(POC_ANDLW, popGetLit(t)); + emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + } else { + pic14_emitcode("movlw","0x%x",t); + pic14_emitcode("andwf","%s,w", + aopGet(AOP(left),offset,FALSE,FALSE)); + pic14_emitcode("movwf","%s", + aopGet(AOP(result),offset,FALSE,FALSE)); - emitpcode(POC_MOVLW, popGetLit(t)); - emitpcode(POC_ANDFW,popGet(AOP(left),offset)); - emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + emitpcode(POC_MOVLW, popGetLit(t)); + emitpcode(POC_ANDFW,popGet(AOP(left),offset)); + emitpcode(POC_MOVWF,popGet(AOP(result),offset)); + } } continue; }