Bit operands were not being handled properly in the pic14 port.
authorsdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 22 Mar 2004 04:30:08 +0000 (04:30 +0000)
committersdattalo <sdattalo@4a8a32a2-be11-0410-ad9d-d568d2c75423>
Mon, 22 Mar 2004 04:30:08 +0000 (04:30 +0000)
(now src/regression/add.c passes again).

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

ChangeLog
src/pic/gen.c
src/pic/gen.h
src/pic/genarith.c
src/pic/pcode.c
src/pic/ralloc.h

index 2dc1f3b1cd6ef49c652633ff7340741a7741fca5..858454944902856a8ab14c90c9f2b9f72678caa5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-21  Scott Dattalo  <scott AT dattalo.com>
+       * src/pic/gen.c, src/pic/gen.h, src/pic/genarith.c, src/pic/pcode.c:
+       Bit operands were not being handled properly in the pic14 port.
+       (now src/regression/add.c passes again).
+
 2004-03-20 Erik Petrich <epetrich AT ivorytower.norman.ok.us>
 
        * src/SDCC.y (labeled_statement): case and default no longer require
index bc284a3e2e81d4e7c809387009e3d19e5fa3b573..a31f36528e1ffffe951924e2168ae59ef92c8479 100644 (file)
@@ -25,8 +25,8 @@
   what you give them.   Help stamp out software-hoarding!
   
   Notes:
-  000123 mlh   Moved aopLiteral to SDCCglue.c to help the split
-               Made everything static
+  000123 mlh  Moved aopLiteral to SDCCglue.c to help the split
+      Made everything static
 -------------------------------------------------------------------------*/
 
 #include <stdio.h>
@@ -86,23 +86,23 @@ static char *accUse[] = {"a","b"};
 //static short rbank = -1;
 
 static struct {
-       short r0Pushed;
-       short r1Pushed;
-       short accInUse;
-       short inLine;
-       short debugLine;
-       short nRegsSaved;
-       set *sendSet;
+  short r0Pushed;
+  short r1Pushed;
+  short accInUse;
+  short inLine;
+  short debugLine;
+  short nRegsSaved;
+  set *sendSet;
 } _G;
 
 /* Resolved ifx structure. This structure stores information
 about an iCode ifx that makes it easier to generate code.
 */
 typedef struct resolvedIfx {
-       symbol *lbl;     /* pointer to a label */
-       int condition;   /* true or false ifx */
-       int generated;   /* set true when the code associated with the ifx
-                         * is generated */
+  symbol *lbl;     /* pointer to a label */
+  int condition;   /* true or false ifx */
+  int generated;   /* set true when the code associated with the ifx
+                    * is generated */
 } resolvedIfx;
 
 extern int pic14_ptrRegReq ;
@@ -131,102 +131,102 @@ static  pBlock *pb;
 /*-----------------------------------------------------------------*/
 static int my_powof2 (unsigned long num)
 {
-       if(num) {
-               if( (num & (num-1)) == 0) {
-                       int nshifts = -1;
-                       while(num) {
-                               num>>=1;
-                               nshifts++;
-                       }
-                       return nshifts;
-               }
-       }
-       
-       return -1;
+  if(num) {
+    if( (num & (num-1)) == 0) {
+      int nshifts = -1;
+      while(num) {
+        num>>=1;
+        nshifts++;
+      }
+      return nshifts;
+    }
+  }
+  
+  return -1;
 }
 
 void DEBUGpic14_AopType(int line_no, operand *left, operand *right, operand *result)
 {
-       
-       DEBUGpic14_emitcode ("; ","line = %d result %s=%s, left %s=%s, right %s=%s, size = %d",
-               line_no,
-               ((result) ? AopType(AOP_TYPE(result)) : "-"),
-               ((result) ? aopGet(AOP(result),0,TRUE,FALSE) : "-"),
-               ((left)   ? AopType(AOP_TYPE(left)) : "-"),
-               ((left)   ? aopGet(AOP(left),0,TRUE,FALSE) : "-"),
-               ((right)  ? AopType(AOP_TYPE(right)) : "-"),
-               ((right)  ? aopGet(AOP(right),0,FALSE,FALSE) : "-"),
-               ((result) ? AOP_SIZE(result) : 0));
-       
+  
+  DEBUGpic14_emitcode ("; ","line = %d result %s=%s, left %s=%s, right %s=%s, size = %d",
+    line_no,
+    ((result) ? AopType(AOP_TYPE(result)) : "-"),
+    ((result) ? aopGet(AOP(result),0,TRUE,FALSE) : "-"),
+    ((left)   ? AopType(AOP_TYPE(left)) : "-"),
+    ((left)   ? aopGet(AOP(left),0,TRUE,FALSE) : "-"),
+    ((right)  ? AopType(AOP_TYPE(right)) : "-"),
+    ((right)  ? aopGet(AOP(right),0,FALSE,FALSE) : "-"),
+    ((result) ? AOP_SIZE(result) : 0));
+  
 }
 
 void DEBUGpic14_AopTypeSign(int line_no, operand *left, operand *right, operand *result)
 {
-       
-       DEBUGpic14_emitcode ("; ","line = %d, signs: result %s=%c, left %s=%c, right %s=%c",
-               line_no,
-               ((result) ? AopType(AOP_TYPE(result)) : "-"),
-               ((result) ? (SPEC_USIGN(operandType(result)) ? 'u' : 's') : '-'),
-               ((left)   ? AopType(AOP_TYPE(left)) : "-"),
-               ((left)   ? (SPEC_USIGN(operandType(left))   ? 'u' : 's') : '-'),
-               ((right)  ? AopType(AOP_TYPE(right)) : "-"),
-               ((right)  ? (SPEC_USIGN(operandType(right))  ? 'u' : 's') : '-'));
-       
+  
+  DEBUGpic14_emitcode ("; ","line = %d, signs: result %s=%c, left %s=%c, right %s=%c",
+    line_no,
+    ((result) ? AopType(AOP_TYPE(result)) : "-"),
+    ((result) ? (SPEC_USIGN(operandType(result)) ? 'u' : 's') : '-'),
+    ((left)   ? AopType(AOP_TYPE(left)) : "-"),
+    ((left)   ? (SPEC_USIGN(operandType(left))   ? 'u' : 's') : '-'),
+    ((right)  ? AopType(AOP_TYPE(right)) : "-"),
+    ((right)  ? (SPEC_USIGN(operandType(right))  ? 'u' : 's') : '-'));
+  
 }
 
 void DEBUGpic14_emitcode (char *inst,char *fmt, ...)
 {
-       va_list ap;
-       char lb[INITIAL_INLINEASM];  
-       char *lbp = lb;
-       
-       if(!debug_verbose)
-               return;
-       
-       va_start(ap,fmt);   
-       
-       if (inst && *inst) {
-               if (fmt && *fmt)
-                       sprintf(lb,"%s\t",inst);
-               else
-                       sprintf(lb,"%s",inst);
-               vsprintf(lb+(strlen(lb)),fmt,ap);
-       }  else
-               vsprintf(lb,fmt,ap);
-       
-       while (isspace(*lbp)) lbp++;
-       
-       if (lbp && *lbp) 
-               lineCurr = (lineCurr ?
-               connectLine(lineCurr,newLineNode(lb)) :
-       (lineHead = newLineNode(lb)));
-       lineCurr->isInline = _G.inLine;
-       lineCurr->isDebug  = _G.debugLine;
-       
-       addpCode2pBlock(pb,newpCodeCharP(lb));
-       
-       va_end(ap);
+  va_list ap;
+  char lb[INITIAL_INLINEASM];  
+  char *lbp = lb;
+  
+  if(!debug_verbose)
+    return;
+  
+  va_start(ap,fmt);   
+  
+  if (inst && *inst) {
+    if (fmt && *fmt)
+      sprintf(lb,"%s\t",inst);
+    else
+      sprintf(lb,"%s",inst);
+    vsprintf(lb+(strlen(lb)),fmt,ap);
+  }  else
+    vsprintf(lb,fmt,ap);
+  
+  while (isspace(*lbp)) lbp++;
+  
+  if (lbp && *lbp) 
+    lineCurr = (lineCurr ?
+    connectLine(lineCurr,newLineNode(lb)) :
+  (lineHead = newLineNode(lb)));
+  lineCurr->isInline = _G.inLine;
+  lineCurr->isDebug  = _G.debugLine;
+  
+  addpCode2pBlock(pb,newpCodeCharP(lb));
+  
+  va_end(ap);
 }
 
 
 void emitpLabel(int key)
 {
-       addpCode2pBlock(pb,newpCodeLabel(NULL,key+100+labelOffset));
+  addpCode2pBlock(pb,newpCodeLabel(NULL,key+100+labelOffset));
 }
 
 void emitpcode(PIC_OPCODE poc, pCodeOp *pcop)
 {
-       if(pcop)
-               addpCode2pBlock(pb,newpCode(poc,pcop));
-       else
-               DEBUGpic14_emitcode(";","%s  ignoring NULL pcop",__FUNCTION__);
+  if(pcop)
+    addpCode2pBlock(pb,newpCode(poc,pcop));
+  else
+    DEBUGpic14_emitcode(";","%s  ignoring NULL pcop",__FUNCTION__);
 }
 
 void emitpcodeNULLop(PIC_OPCODE poc)
 {
-       
-       addpCode2pBlock(pb,newpCode(poc,NULL));
-       
+  
+  addpCode2pBlock(pb,newpCode(poc,NULL));
+  
 }
 
 
@@ -235,34 +235,34 @@ void emitpcodeNULLop(PIC_OPCODE poc)
 /*-----------------------------------------------------------------*/
 void pic14_emitcode (char *inst,char *fmt, ...)
 {
-       va_list ap;
-       char lb[INITIAL_INLINEASM];  
-       char *lbp = lb;
-       
-       va_start(ap,fmt);   
-       
-       if (inst && *inst) {
-               if (fmt && *fmt)
-                       sprintf(lb,"%s\t",inst);
-               else
-                       sprintf(lb,"%s",inst);
-               vsprintf(lb+(strlen(lb)),fmt,ap);
-       }  else
-               vsprintf(lb,fmt,ap);
-       
-       while (isspace(*lbp)) lbp++;
-       
-       if (lbp && *lbp) 
-               lineCurr = (lineCurr ?
-               connectLine(lineCurr,newLineNode(lb)) :
-       (lineHead = newLineNode(lb)));
-       lineCurr->isInline = _G.inLine;
-       lineCurr->isDebug  = _G.debugLine;
-       
-       if(debug_verbose)
-               addpCode2pBlock(pb,newpCodeCharP(lb));
-       
-       va_end(ap);
+  va_list ap;
+  char lb[INITIAL_INLINEASM];  
+  char *lbp = lb;
+  
+  va_start(ap,fmt);   
+  
+  if (inst && *inst) {
+    if (fmt && *fmt)
+      sprintf(lb,"%s\t",inst);
+    else
+      sprintf(lb,"%s",inst);
+    vsprintf(lb+(strlen(lb)),fmt,ap);
+  }  else
+    vsprintf(lb,fmt,ap);
+  
+  while (isspace(*lbp)) lbp++;
+  
+  if (lbp && *lbp) 
+    lineCurr = (lineCurr ?
+    connectLine(lineCurr,newLineNode(lb)) :
+  (lineHead = newLineNode(lb)));
+  lineCurr->isInline = _G.inLine;
+  lineCurr->isDebug  = _G.debugLine;
+  
+  if(debug_verbose)
+    addpCode2pBlock(pb,newpCodeCharP(lb));
+  
+  va_end(ap);
 }
 
 
@@ -271,82 +271,82 @@ void pic14_emitcode (char *inst,char *fmt, ...)
 /*-----------------------------------------------------------------*/
 static regs *getFreePtr (iCode *ic, asmop **aopp, bool result)
 {
-       bool r0iu = FALSE , r1iu = FALSE;
-       bool r0ou = FALSE , r1ou = FALSE;
-       
-       /* the logic: if r0 & r1 used in the instruction
-       then we are in trouble otherwise */
-       
-       /* first check if r0 & r1 are used by this
-       instruction, in which case we are in trouble */
-       if ((r0iu = bitVectBitValue(ic->rUsed,R0_IDX)) &&
-               (r1iu = bitVectBitValue(ic->rUsed,R1_IDX))) 
-       {
-               goto endOfWorld;      
-       }
-       
-       r0ou = bitVectBitValue(ic->rMask,R0_IDX);
-       r1ou = bitVectBitValue(ic->rMask,R1_IDX);
-       
-       /* if no usage of r0 then return it */
-       if (!r0iu && !r0ou) {
-               ic->rUsed = bitVectSetBit(ic->rUsed,R0_IDX);
-               (*aopp)->type = AOP_R0;
-               
-               return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R0_IDX);
-       }
-       
-       /* if no usage of r1 then return it */
-       if (!r1iu && !r1ou) {
-               ic->rUsed = bitVectSetBit(ic->rUsed,R1_IDX);
-               (*aopp)->type = AOP_R1;
-               
-               return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R1_IDX);
-       }    
-       
-       /* now we know they both have usage */
-       /* if r0 not used in this instruction */
-       if (!r0iu) {
-               /* push it if not already pushed */
-               if (!_G.r0Pushed) {
-                       //pic14_emitcode ("push","%s",
-                       //          pic14_regWithIdx(R0_IDX)->dname);
-                       _G.r0Pushed++ ;
-               }
-               
-               ic->rUsed = bitVectSetBit(ic->rUsed,R0_IDX);
-               (*aopp)->type = AOP_R0;
-               
-               return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R0_IDX);
-       }
-       
-       /* if r1 not used then */
-       
-       if (!r1iu) {
-               /* push it if not already pushed */
-               if (!_G.r1Pushed) {
-                       //pic14_emitcode ("push","%s",
-                       //          pic14_regWithIdx(R1_IDX)->dname);
-                       _G.r1Pushed++ ;
-               }
-               
-               ic->rUsed = bitVectSetBit(ic->rUsed,R1_IDX);
-               (*aopp)->type = AOP_R1;
-               return pic14_regWithIdx(R1_IDX);
-       }
-       
+  bool r0iu = FALSE , r1iu = FALSE;
+  bool r0ou = FALSE , r1ou = FALSE;
+  
+  /* the logic: if r0 & r1 used in the instruction
+  then we are in trouble otherwise */
+  
+  /* first check if r0 & r1 are used by this
+  instruction, in which case we are in trouble */
+  if ((r0iu = bitVectBitValue(ic->rUsed,R0_IDX)) &&
+    (r1iu = bitVectBitValue(ic->rUsed,R1_IDX))) 
+  {
+    goto endOfWorld;      
+  }
+  
+  r0ou = bitVectBitValue(ic->rMask,R0_IDX);
+  r1ou = bitVectBitValue(ic->rMask,R1_IDX);
+  
+  /* if no usage of r0 then return it */
+  if (!r0iu && !r0ou) {
+    ic->rUsed = bitVectSetBit(ic->rUsed,R0_IDX);
+    (*aopp)->type = AOP_R0;
+    
+    return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R0_IDX);
+  }
+  
+  /* if no usage of r1 then return it */
+  if (!r1iu && !r1ou) {
+    ic->rUsed = bitVectSetBit(ic->rUsed,R1_IDX);
+    (*aopp)->type = AOP_R1;
+    
+    return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R1_IDX);
+  }    
+  
+  /* now we know they both have usage */
+  /* if r0 not used in this instruction */
+  if (!r0iu) {
+    /* push it if not already pushed */
+    if (!_G.r0Pushed) {
+      //pic14_emitcode ("push","%s",
+      //          pic14_regWithIdx(R0_IDX)->dname);
+      _G.r0Pushed++ ;
+    }
+    
+    ic->rUsed = bitVectSetBit(ic->rUsed,R0_IDX);
+    (*aopp)->type = AOP_R0;
+    
+    return (*aopp)->aopu.aop_ptr = pic14_regWithIdx(R0_IDX);
+  }
+  
+  /* if r1 not used then */
+  
+  if (!r1iu) {
+    /* push it if not already pushed */
+    if (!_G.r1Pushed) {
+      //pic14_emitcode ("push","%s",
+      //          pic14_regWithIdx(R1_IDX)->dname);
+      _G.r1Pushed++ ;
+    }
+    
+    ic->rUsed = bitVectSetBit(ic->rUsed,R1_IDX);
+    (*aopp)->type = AOP_R1;
+    return pic14_regWithIdx(R1_IDX);
+  }
+  
 endOfWorld :
-       /* I said end of world but not quite end of world yet */
-       /* if this is a result then we can push it on the stack*/
-       if (result) {
-               (*aopp)->type = AOP_STK;    
-               return NULL;
-       }
-       
-       /* other wise this is true end of the world */
-       werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-               "getFreePtr should never reach here");
-       exit(0);
+  /* I said end of world but not quite end of world yet */
+  /* if this is a result then we can push it on the stack*/
+  if (result) {
+    (*aopp)->type = AOP_STK;    
+    return NULL;
+  }
+  
+  /* other wise this is true end of the world */
+  werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+    "getFreePtr should never reach here");
+  exit(0);
 }
 
 /*-----------------------------------------------------------------*/
@@ -354,25 +354,25 @@ endOfWorld :
 /*-----------------------------------------------------------------*/
 asmop *newAsmop (short type)
 {
-       asmop *aop;
-       
-       aop = Safe_calloc(1,sizeof(asmop));
-       aop->type = type;
-       return aop;
+  asmop *aop;
+  
+  aop = Safe_calloc(1,sizeof(asmop));
+  aop->type = type;
+  return aop;
 }
 
 static void genSetDPTR(int n)
 {
-       if (!n)
-       {
-               pic14_emitcode(";", "Select standard DPTR");
-               pic14_emitcode("mov", "dps, #0x00");
-       }
-       else
-       {
-               pic14_emitcode(";", "Select alternate DPTR");
-               pic14_emitcode("mov", "dps, #0x01");
-       }
+  if (!n)
+  {
+    pic14_emitcode(";", "Select standard DPTR");
+    pic14_emitcode("mov", "dps, #0x00");
+  }
+  else
+  {
+    pic14_emitcode(";", "Select alternate DPTR");
+    pic14_emitcode("mov", "dps, #0x01");
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -381,46 +381,46 @@ static void genSetDPTR(int n)
 /*-----------------------------------------------------------------*/
 static void resolveIfx(resolvedIfx *resIfx, iCode *ifx)
 {
-       if(!resIfx) 
-               return;
-       
-       //  DEBUGpic14_emitcode("; ***","%s %d",__FUNCTION__,__LINE__);
-       
-       resIfx->condition = 1;    /* assume that the ifx is true */
-       resIfx->generated = 0;    /* indicate that the ifx has not been used */
-       
-       if(!ifx) {
-               resIfx->lbl = newiTempLabel(NULL);  /* oops, there is no ifx. so create a label */
-                                                                                       /*
-                                                                                       DEBUGpic14_emitcode("; ***","%s %d null ifx creating new label key =%d",
-                                                                                       __FUNCTION__,__LINE__,resIfx->lbl->key);
-               */
-       } else {
-               if(IC_TRUE(ifx)) {
-                       resIfx->lbl = IC_TRUE(ifx);
-               } else {
-                       resIfx->lbl = IC_FALSE(ifx);
-                       resIfx->condition = 0;
-               }
-               /*
-               if(IC_TRUE(ifx)) 
-               DEBUGpic14_emitcode("; ***","ifx true is non-null");
-               if(IC_FALSE(ifx)) 
-               DEBUGpic14_emitcode("; ***","ifx false is non-null");
-               */
-       }
-       
-       //  DEBUGpic14_emitcode("; ***","%s lbl->key=%d, (lab offset=%d)",__FUNCTION__,resIfx->lbl->key,labelOffset);
-       
+  if(!resIfx) 
+    return;
+  
+  //  DEBUGpic14_emitcode("; ***","%s %d",__FUNCTION__,__LINE__);
+  
+  resIfx->condition = 1;    /* assume that the ifx is true */
+  resIfx->generated = 0;    /* indicate that the ifx has not been used */
+  
+  if(!ifx) {
+    resIfx->lbl = newiTempLabel(NULL);  /* oops, there is no ifx. so create a label */
+                      /*
+                      DEBUGpic14_emitcode("; ***","%s %d null ifx creating new label key =%d",
+                      __FUNCTION__,__LINE__,resIfx->lbl->key);
+    */
+  } else {
+    if(IC_TRUE(ifx)) {
+      resIfx->lbl = IC_TRUE(ifx);
+    } else {
+      resIfx->lbl = IC_FALSE(ifx);
+      resIfx->condition = 0;
+    }
+    /*
+    if(IC_TRUE(ifx)) 
+    DEBUGpic14_emitcode("; ***","ifx true is non-null");
+    if(IC_FALSE(ifx)) 
+    DEBUGpic14_emitcode("; ***","ifx false is non-null");
+    */
+  }
+  
+  //  DEBUGpic14_emitcode("; ***","%s lbl->key=%d, (lab offset=%d)",__FUNCTION__,resIfx->lbl->key,labelOffset);
+  
 }
 /*-----------------------------------------------------------------*/
 /* pointerCode - returns the code for a pointer type               */
 /*-----------------------------------------------------------------*/
 static int pointerCode (sym_link *etype)
 {
-       
-       return PTR_TYPE(SPEC_OCLS(etype));
-       
+  
+  return PTR_TYPE(SPEC_OCLS(etype));
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -428,147 +428,147 @@ static int pointerCode (sym_link *etype)
 /*-----------------------------------------------------------------*/
 static asmop *aopForSym (iCode *ic,symbol *sym,bool result)
 {
-       asmop *aop;
-       memmap *space= SPEC_OCLS(sym->etype);
-       
-       DEBUGpic14_emitcode("; ***","%s %d",__FUNCTION__,__LINE__);
-       /* if already has one */
-       if (sym->aop)
-               return sym->aop;
-       
-       /* assign depending on the storage class */
-       /* if it is on the stack or indirectly addressable */
-       /* space we need to assign either r0 or r1 to it   */    
-       if ((sym->onStack && !options.stack10bit) || sym->iaccess) {
-               sym->aop = aop = newAsmop(0);
-               aop->aopu.aop_ptr = getFreePtr(ic,&aop,result);
-               aop->size = getSize(sym->type);
-               
-               /* now assign the address of the variable to 
-               the pointer register */
-               if (aop->type != AOP_STK) {
-                       
-                       if (sym->onStack) {
-                               if ( _G.accInUse )
-                                       pic14_emitcode("push","acc");
-                               
-                               pic14_emitcode("mov","a,_bp");
-                               pic14_emitcode("add","a,#0x%02x",
-                                       ((sym->stack < 0) ?
-                                       ((char)(sym->stack - _G.nRegsSaved )) :
-                               ((char)sym->stack)) & 0xff);
-                               pic14_emitcode("mov","%s,a",
-                                       aop->aopu.aop_ptr->name);
-                               
-                               if ( _G.accInUse )
-                                       pic14_emitcode("pop","acc");
-                       } else
-                               pic14_emitcode("mov","%s,#%s",
-                               aop->aopu.aop_ptr->name,
-                               sym->rname);
-                       aop->paged = space->paged;
-               } else
-                       aop->aopu.aop_stk = sym->stack;
-               return aop;
-       }
-       
-       if (sym->onStack && options.stack10bit)
-       {
-       /* It's on the 10 bit stack, which is located in
-       * far data space.
-               */
-               
-               //DEBUGpic14_emitcode(";","%d",__LINE__);
-               
-               if ( _G.accInUse )
-                       pic14_emitcode("push","acc");
-               
-               pic14_emitcode("mov","a,_bp");
-               pic14_emitcode("add","a,#0x%02x",
-                       ((sym->stack < 0) ?
-                       ((char)(sym->stack - _G.nRegsSaved )) :
-               ((char)sym->stack)) & 0xff);
-               
-               genSetDPTR(1);
-               pic14_emitcode ("mov","dpx1,#0x40");
-               pic14_emitcode ("mov","dph1,#0x00");
-               pic14_emitcode ("mov","dpl1, a");
-               genSetDPTR(0);
-               
-               if ( _G.accInUse )
-                       pic14_emitcode("pop","acc");
-               
-               sym->aop = aop = newAsmop(AOP_DPTR2);
-               aop->size = getSize(sym->type); 
-               return aop;
-       }
-       
-       //DEBUGpic14_emitcode(";","%d",__LINE__);
-       /* if in bit space */
-       if (IN_BITSPACE(space)) {
-               sym->aop = aop = newAsmop (AOP_CRY);
-               aop->aopu.aop_dir = sym->rname ;
-               aop->size = getSize(sym->type);
-               //DEBUGpic14_emitcode(";","%d sym->rname = %s, size = %d",__LINE__,sym->rname,aop->size);
-               return aop;
-       }
-       /* if it is in direct space */
-       if (IN_DIRSPACE(space)) {
-               sym->aop = aop = newAsmop (AOP_DIR);
-               aop->aopu.aop_dir = sym->rname ;
-               aop->size = getSize(sym->type);
-               DEBUGpic14_emitcode(";","%d sym->rname = %s, size = %d",__LINE__,sym->rname,aop->size);
-               return aop;
-       }
-       
-       /* special case for a function */
-       if (IS_FUNC(sym->type)) {   
-               
-               sym->aop = aop = newAsmop(AOP_PCODE);
-               aop->aopu.pcop = popGetImmd(sym->rname,0,0,1);
-               PCOI(aop->aopu.pcop)->_const = IN_CODESPACE(space);
-               PCOI(aop->aopu.pcop)->_function = 1;
-               PCOI(aop->aopu.pcop)->index = 0;
-               aop->size = FPTRSIZE; 
-               /*
-               sym->aop = aop = newAsmop(AOP_IMMD);    
-               aop->aopu.aop_immd = Safe_calloc(1,strlen(sym->rname)+1);
-               strcpy(aop->aopu.aop_immd,sym->rname);
-               aop->size = FPTRSIZE; 
-               */
-               DEBUGpic14_emitcode(";","%d size = %d, name =%s",__LINE__,aop->size,sym->rname);
-               return aop;
-       }
-       
-       
-       /* only remaining is far space */
-       /* in which case DPTR gets the address */
-       sym->aop = aop = newAsmop(AOP_PCODE);
-       
-       aop->aopu.pcop = popGetImmd(sym->rname,0,0,0);
-       PCOI(aop->aopu.pcop)->_const = IN_CODESPACE(space);
-       PCOI(aop->aopu.pcop)->index = 0;
-       
-       DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
-               __LINE__,sym->rname, 0, PCOI(aop->aopu.pcop)->_const);
-       
-       allocDirReg (IC_LEFT(ic));
-       
-       aop->size = FPTRSIZE; 
-       /*
-       DEBUGpic14_emitcode(";","%d size = %d, name =%s",__LINE__,aop->size,sym->rname);
-       sym->aop = aop = newAsmop(AOP_DPTR);
-       pic14_emitcode ("mov","dptr,#%s", sym->rname);
-       aop->size = getSize(sym->type);
-       
-         DEBUGpic14_emitcode(";","%d size = %d",__LINE__,aop->size);
-       */
-       
-       /* if it is in code space */
-       if (IN_CODESPACE(space))
-               aop->code = 1;
-       
-       return aop;     
+  asmop *aop;
+  memmap *space= SPEC_OCLS(sym->etype);
+  
+  DEBUGpic14_emitcode("; ***","%s %d",__FUNCTION__,__LINE__);
+  /* if already has one */
+  if (sym->aop)
+    return sym->aop;
+  
+  /* assign depending on the storage class */
+  /* if it is on the stack or indirectly addressable */
+  /* space we need to assign either r0 or r1 to it   */    
+  if ((sym->onStack && !options.stack10bit) || sym->iaccess) {
+    sym->aop = aop = newAsmop(0);
+    aop->aopu.aop_ptr = getFreePtr(ic,&aop,result);
+    aop->size = getSize(sym->type);
+    
+    /* now assign the address of the variable to 
+    the pointer register */
+    if (aop->type != AOP_STK) {
+      
+      if (sym->onStack) {
+        if ( _G.accInUse )
+          pic14_emitcode("push","acc");
+        
+        pic14_emitcode("mov","a,_bp");
+        pic14_emitcode("add","a,#0x%02x",
+          ((sym->stack < 0) ?
+          ((char)(sym->stack - _G.nRegsSaved )) :
+        ((char)sym->stack)) & 0xff);
+        pic14_emitcode("mov","%s,a",
+          aop->aopu.aop_ptr->name);
+        
+        if ( _G.accInUse )
+          pic14_emitcode("pop","acc");
+      } else
+        pic14_emitcode("mov","%s,#%s",
+        aop->aopu.aop_ptr->name,
+        sym->rname);
+      aop->paged = space->paged;
+    } else
+      aop->aopu.aop_stk = sym->stack;
+    return aop;
+  }
+  
+  if (sym->onStack && options.stack10bit)
+  {
+  /* It's on the 10 bit stack, which is located in
+  * far data space.
+    */
+    
+    //DEBUGpic14_emitcode(";","%d",__LINE__);
+    
+    if ( _G.accInUse )
+      pic14_emitcode("push","acc");
+    
+    pic14_emitcode("mov","a,_bp");
+    pic14_emitcode("add","a,#0x%02x",
+      ((sym->stack < 0) ?
+      ((char)(sym->stack - _G.nRegsSaved )) :
+    ((char)sym->stack)) & 0xff);
+    
+    genSetDPTR(1);
+    pic14_emitcode ("mov","dpx1,#0x40");
+    pic14_emitcode ("mov","dph1,#0x00");
+    pic14_emitcode ("mov","dpl1, a");
+    genSetDPTR(0);
+    
+    if ( _G.accInUse )
+      pic14_emitcode("pop","acc");
+    
+    sym->aop = aop = newAsmop(AOP_DPTR2);
+    aop->size = getSize(sym->type); 
+    return aop;
+  }
+  
+  //DEBUGpic14_emitcode(";","%d",__LINE__);
+  /* if in bit space */
+  if (IN_BITSPACE(space)) {
+    sym->aop = aop = newAsmop (AOP_CRY);
+    aop->aopu.aop_dir = sym->rname ;
+    aop->size = getSize(sym->type);
+    //DEBUGpic14_emitcode(";","%d sym->rname = %s, size = %d",__LINE__,sym->rname,aop->size);
+    return aop;
+  }
+  /* if it is in direct space */
+  if (IN_DIRSPACE(space)) {
+    sym->aop = aop = newAsmop (AOP_DIR);
+    aop->aopu.aop_dir = sym->rname ;
+    aop->size = getSize(sym->type);
+    DEBUGpic14_emitcode(";","%d sym->rname = %s, size = %d",__LINE__,sym->rname,aop->size);
+    return aop;
+  }
+  
+  /* special case for a function */
+  if (IS_FUNC(sym->type)) {   
+    
+    sym->aop = aop = newAsmop(AOP_PCODE);
+    aop->aopu.pcop = popGetImmd(sym->rname,0,0,1);
+    PCOI(aop->aopu.pcop)->_const = IN_CODESPACE(space);
+    PCOI(aop->aopu.pcop)->_function = 1;
+    PCOI(aop->aopu.pcop)->index = 0;
+    aop->size = FPTRSIZE; 
+    /*
+    sym->aop = aop = newAsmop(AOP_IMMD);    
+    aop->aopu.aop_immd = Safe_calloc(1,strlen(sym->rname)+1);
+    strcpy(aop->aopu.aop_immd,sym->rname);
+    aop->size = FPTRSIZE; 
+    */
+    DEBUGpic14_emitcode(";","%d size = %d, name =%s",__LINE__,aop->size,sym->rname);
+    return aop;
+  }
+  
+  
+  /* only remaining is far space */
+  /* in which case DPTR gets the address */
+  sym->aop = aop = newAsmop(AOP_PCODE);
+  
+  aop->aopu.pcop = popGetImmd(sym->rname,0,0,0);
+  PCOI(aop->aopu.pcop)->_const = IN_CODESPACE(space);
+  PCOI(aop->aopu.pcop)->index = 0;
+  
+  DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
+    __LINE__,sym->rname, 0, PCOI(aop->aopu.pcop)->_const);
+  
+  allocDirReg (IC_LEFT(ic));
+  
+  aop->size = FPTRSIZE; 
+  /*
+  DEBUGpic14_emitcode(";","%d size = %d, name =%s",__LINE__,aop->size,sym->rname);
+  sym->aop = aop = newAsmop(AOP_DPTR);
+  pic14_emitcode ("mov","dptr,#%s", sym->rname);
+  aop->size = getSize(sym->type);
+  
+    DEBUGpic14_emitcode(";","%d size = %d",__LINE__,aop->size);
+  */
+  
+  /* if it is in code space */
+  if (IN_CODESPACE(space))
+    aop->code = 1;
+  
+  return aop;     
 }
 
 /*-----------------------------------------------------------------*/
@@ -576,89 +576,89 @@ static asmop *aopForSym (iCode *ic,symbol *sym,bool result)
 /*-----------------------------------------------------------------*/
 static asmop *aopForRemat (operand *op) // x symbol *sym)
 {
-       symbol *sym = OP_SYMBOL(op);
-       iCode *ic = NULL;
-       asmop *aop = newAsmop(AOP_PCODE);
-       int val = 0;
-       int offset = 0;
-       
-       ic = sym->rematiCode;
-       
-       DEBUGpic14_emitcode(";","%s %d",__FUNCTION__,__LINE__);
-       if(IS_OP_POINTER(op)) {
-               DEBUGpic14_emitcode(";","%s %d IS_OP_POINTER",__FUNCTION__,__LINE__);
-       }
-       for (;;) {
-               if (ic->op == '+') {
-                       val += (int) operandLitValue(IC_RIGHT(ic));
-               } else if (ic->op == '-') {
-                       val -= (int) operandLitValue(IC_RIGHT(ic));
-               } else
-                       break;
-               
-               ic = OP_SYMBOL(IC_LEFT(ic))->rematiCode;
-       }
-       
-       offset = OP_SYMBOL(IC_LEFT(ic))->offset;
-       aop->aopu.pcop = popGetImmd(OP_SYMBOL(IC_LEFT(ic))->rname,0,val,0);
-       PCOI(aop->aopu.pcop)->_const = IS_PTR_CONST(operandType(op));
-       PCOI(aop->aopu.pcop)->index = val;
-       
-       DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
-               __LINE__,OP_SYMBOL(IC_LEFT(ic))->rname,
-               val, IS_PTR_CONST(operandType(op)));
-       
-       //    DEBUGpic14_emitcode(";","aop type  %s",AopType(AOP_TYPE(IC_LEFT(ic))));
-       
-       allocDirReg (IC_LEFT(ic));
-       
-       return aop;        
+  symbol *sym = OP_SYMBOL(op);
+  iCode *ic = NULL;
+  asmop *aop = newAsmop(AOP_PCODE);
+  int val = 0;
+  int offset = 0;
+  
+  ic = sym->rematiCode;
+  
+  DEBUGpic14_emitcode(";","%s %d",__FUNCTION__,__LINE__);
+  if(IS_OP_POINTER(op)) {
+    DEBUGpic14_emitcode(";","%s %d IS_OP_POINTER",__FUNCTION__,__LINE__);
+  }
+  for (;;) {
+    if (ic->op == '+') {
+      val += (int) operandLitValue(IC_RIGHT(ic));
+    } else if (ic->op == '-') {
+      val -= (int) operandLitValue(IC_RIGHT(ic));
+    } else
+      break;
+    
+    ic = OP_SYMBOL(IC_LEFT(ic))->rematiCode;
+  }
+  
+  offset = OP_SYMBOL(IC_LEFT(ic))->offset;
+  aop->aopu.pcop = popGetImmd(OP_SYMBOL(IC_LEFT(ic))->rname,0,val,0);
+  PCOI(aop->aopu.pcop)->_const = IS_PTR_CONST(operandType(op));
+  PCOI(aop->aopu.pcop)->index = val;
+  
+  DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
+    __LINE__,OP_SYMBOL(IC_LEFT(ic))->rname,
+    val, IS_PTR_CONST(operandType(op)));
+  
+  //    DEBUGpic14_emitcode(";","aop type  %s",AopType(AOP_TYPE(IC_LEFT(ic))));
+  
+  allocDirReg (IC_LEFT(ic));
+  
+  return aop;        
 }
 
 int aopIdx (asmop *aop, int offset)
 {
-       if(!aop)
-               return -1;
-       
-       if(aop->type !=  AOP_REG)
-               return -2;
-       
-       return aop->aopu.aop_reg[offset]->rIdx;
-       
+  if(!aop)
+    return -1;
+  
+  if(aop->type !=  AOP_REG)
+    return -2;
+  
+  return aop->aopu.aop_reg[offset]->rIdx;
+  
 }
 /*-----------------------------------------------------------------*/
 /* regsInCommon - two operands have some registers in common       */
 /*-----------------------------------------------------------------*/
 static bool regsInCommon (operand *op1, operand *op2)
 {
-       symbol *sym1, *sym2;
-       int i;
-       
-       /* if they have registers in common */
-       if (!IS_SYMOP(op1) || !IS_SYMOP(op2))
-               return FALSE ;
-       
-       sym1 = OP_SYMBOL(op1);
-       sym2 = OP_SYMBOL(op2);
-       
-       if (sym1->nRegs == 0 || sym2->nRegs == 0)
-               return FALSE ;
-       
-       for (i = 0 ; i < sym1->nRegs ; i++) {
-               int j;
-               if (!sym1->regs[i])
-                       continue ;
-               
-               for (j = 0 ; j < sym2->nRegs ;j++ ) {
-                       if (!sym2->regs[j])
-                               continue ;
-                       
-                       if (sym2->regs[j] == sym1->regs[i])
-                               return TRUE ;
-               }
-       }
-       
-       return FALSE ;
+  symbol *sym1, *sym2;
+  int i;
+  
+  /* if they have registers in common */
+  if (!IS_SYMOP(op1) || !IS_SYMOP(op2))
+    return FALSE ;
+  
+  sym1 = OP_SYMBOL(op1);
+  sym2 = OP_SYMBOL(op2);
+  
+  if (sym1->nRegs == 0 || sym2->nRegs == 0)
+    return FALSE ;
+  
+  for (i = 0 ; i < sym1->nRegs ; i++) {
+    int j;
+    if (!sym1->regs[i])
+      continue ;
+    
+    for (j = 0 ; j < sym2->nRegs ;j++ ) {
+      if (!sym2->regs[j])
+        continue ;
+      
+      if (sym2->regs[j] == sym1->regs[i])
+        return TRUE ;
+    }
+  }
+  
+  return FALSE ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -666,44 +666,44 @@ static bool regsInCommon (operand *op1, operand *op2)
 /*-----------------------------------------------------------------*/
 static bool operandsEqu ( operand *op1, operand *op2)
 {
-       symbol *sym1, *sym2;
-       
-       /* if they not symbols */
-       if (!IS_SYMOP(op1) || !IS_SYMOP(op2))
-               return FALSE;
-       
-       sym1 = OP_SYMBOL(op1);
-       sym2 = OP_SYMBOL(op2);
-       
-       /* if both are itemps & one is spilt
-       and the other is not then false */
-       if (IS_ITEMP(op1) && IS_ITEMP(op2) &&
-               sym1->isspilt != sym2->isspilt )
-               return FALSE ;
-       
-       /* if they are the same */
-       if (sym1 == sym2)
-               return TRUE ;
-       
-       if (strcmp(sym1->rname,sym2->rname) == 0)
-               return TRUE;
-       
-       
-       /* if left is a tmp & right is not */
-       if (IS_ITEMP(op1)  && 
-               !IS_ITEMP(op2) &&
-               sym1->isspilt  &&
-               (sym1->usl.spillLoc == sym2))
-               return TRUE;
-       
-       if (IS_ITEMP(op2)  && 
-               !IS_ITEMP(op1) &&
-               sym2->isspilt  &&
-               sym1->level > 0 &&
-               (sym2->usl.spillLoc == sym1))
-               return TRUE ;
-       
-       return FALSE ;
+  symbol *sym1, *sym2;
+  
+  /* if they not symbols */
+  if (!IS_SYMOP(op1) || !IS_SYMOP(op2))
+    return FALSE;
+  
+  sym1 = OP_SYMBOL(op1);
+  sym2 = OP_SYMBOL(op2);
+  
+  /* if both are itemps & one is spilt
+  and the other is not then false */
+  if (IS_ITEMP(op1) && IS_ITEMP(op2) &&
+    sym1->isspilt != sym2->isspilt )
+    return FALSE ;
+  
+  /* if they are the same */
+  if (sym1 == sym2)
+    return TRUE ;
+  
+  if (strcmp(sym1->rname,sym2->rname) == 0)
+    return TRUE;
+  
+  
+  /* if left is a tmp & right is not */
+  if (IS_ITEMP(op1)  && 
+    !IS_ITEMP(op2) &&
+    sym1->isspilt  &&
+    (sym1->usl.spillLoc == sym2))
+    return TRUE;
+  
+  if (IS_ITEMP(op2)  && 
+    !IS_ITEMP(op1) &&
+    sym2->isspilt  &&
+    sym1->level > 0 &&
+    (sym2->usl.spillLoc == sym1))
+    return TRUE ;
+  
+  return FALSE ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -711,24 +711,24 @@ static bool operandsEqu ( operand *op1, operand *op2)
 /*-----------------------------------------------------------------*/
 bool pic14_sameRegs (asmop *aop1, asmop *aop2 )
 {
-       int i;
-       
-       if (aop1 == aop2)
-               return TRUE ;
-       
-       if (aop1->type != AOP_REG ||
-               aop2->type != AOP_REG )
-               return FALSE ;
-       
-       if (aop1->size != aop2->size )
-               return FALSE ;
-       
-       for (i = 0 ; i < aop1->size ; i++ )
-               if (aop1->aopu.aop_reg[i] !=
-                       aop2->aopu.aop_reg[i] )
-                       return FALSE ;
-               
-               return TRUE ;
+  int i;
+  
+  if (aop1 == aop2)
+    return TRUE ;
+  
+  if (aop1->type != AOP_REG ||
+    aop2->type != AOP_REG )
+    return FALSE ;
+  
+  if (aop1->size != aop2->size )
+    return FALSE ;
+  
+  for (i = 0 ; i < aop1->size ; i++ )
+    if (aop1->aopu.aop_reg[i] !=
+      aop2->aopu.aop_reg[i] )
+      return FALSE ;
+    
+    return TRUE ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -736,153 +736,153 @@ bool pic14_sameRegs (asmop *aop1, asmop *aop2 )
 /*-----------------------------------------------------------------*/
 void aopOp (operand *op, iCode *ic, bool result)
 {
-       asmop *aop;
-       symbol *sym;
-       int i;
-       
-       if (!op)
-               return ;
-       
-       //    DEBUGpic14_emitcode(";","%d",__LINE__);
-       /* if this a literal */
-       if (IS_OP_LITERAL(op)) {
-               op->aop = aop = newAsmop(AOP_LIT);
-               aop->aopu.aop_lit = op->operand.valOperand;
-               aop->size = getSize(operandType(op));
-               return;
-       }
-       
-       {
-               sym_link *type = operandType(op);
-               if(IS_PTR_CONST(type))
-                       DEBUGpic14_emitcode(";","%d aop type is const pointer",__LINE__);
-       }
-       
-       /* if already has a asmop then continue */
-       if (op->aop)
-               return ;
-       
-       /* if the underlying symbol has a aop */
-       if (IS_SYMOP(op) && OP_SYMBOL(op)->aop) {
-               DEBUGpic14_emitcode(";","%d",__LINE__);
-               op->aop = OP_SYMBOL(op)->aop;
-               return;
-       }
-       
-       /* if this is a true symbol */
-       if (IS_TRUE_SYMOP(op)) {    
-               //DEBUGpic14_emitcode(";","%d - true symop",__LINE__);
-               op->aop = aopForSym(ic,OP_SYMBOL(op),result);
-               return ;
-       }
-       
-       /* this is a temporary : this has
-       only four choices :
-       a) register
-       b) spillocation
-       c) rematerialize 
-       d) conditional   
-       e) can be a return use only */
-       
-       sym = OP_SYMBOL(op);
-       
-       
-       /* if the type is a conditional */
-       if (sym->regType == REG_CND) {
-               aop = op->aop = sym->aop = newAsmop(AOP_CRY);
-               aop->size = 0;
-               return;
-       }
-       
-       /* if it is spilt then two situations
-       a) is rematerialize 
-       b) has a spill location */
-       if (sym->isspilt || sym->nRegs == 0) {
-               
-               DEBUGpic14_emitcode(";","%d",__LINE__);
-               /* rematerialize it NOW */
-               if (sym->remat) {
-                       
-                       sym->aop = op->aop = aop =
-                               aopForRemat (op);
-                       aop->size = getSize(sym->type);
-                       //DEBUGpic14_emitcode(";"," %d: size %d, %s\n",__LINE__,aop->size,aop->aopu.aop_immd);
-                       return;
-               }
-               
-               if (sym->accuse) {
-                       int i;
-                       aop = op->aop = sym->aop = newAsmop(AOP_ACC);
-                       aop->size = getSize(sym->type);
-                       for ( i = 0 ; i < 2 ; i++ )
-                               aop->aopu.aop_str[i] = accUse[i];
-                       DEBUGpic14_emitcode(";","%d size=%d",__LINE__,aop->size);
-                       return;  
-               }
-               
-               if (sym->ruonly ) {
-                       if(sym->isptr) {  // && sym->uptr 
-                               aop = op->aop = sym->aop = newAsmop(AOP_PCODE);
-                               aop->aopu.pcop = newpCodeOp(NULL,PO_GPR_POINTER); //popCopyReg(&pc_fsr);
-                               
-                               //PCOI(aop->aopu.pcop)->_const = 0;
-                               //PCOI(aop->aopu.pcop)->index = 0;
-                               /*
-                               DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
-                               __LINE__,sym->rname, 0, PCOI(aop->aopu.pcop)->_const);
-                               */
-                               //allocDirReg (IC_LEFT(ic));
-                               
-                               aop->size = getSize(sym->type);
-                               DEBUGpic14_emitcode(";","%d",__LINE__);
-                               return;
-                               
-                       } else {
-                               
-                               unsigned i;
-                               
-                               aop = op->aop = sym->aop = newAsmop(AOP_STR);
-                               aop->size = getSize(sym->type);
-                               for ( i = 0 ; i < fReturnSizePic ; i++ )
-                                       aop->aopu.aop_str[i] = fReturn[i];
-                               
-                               DEBUGpic14_emitcode(";","%d",__LINE__);
-                               return;
-                       }
-               }
-               
-               /* else spill location  */
-               if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
-                       /* force a new aop if sizes differ */
-                       sym->usl.spillLoc->aop = NULL;
-               }
-               DEBUGpic14_emitcode(";","%s %d %s sym->rname = %s, offset %d",
-                       __FUNCTION__,__LINE__,
-                       sym->usl.spillLoc->rname,
-                       sym->rname, sym->usl.spillLoc->offset);
-               
-               sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
-               //aop->aopu.pcop = popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
-               aop->aopu.pcop = popRegFromString(sym->usl.spillLoc->rname, 
-                       getSize(sym->type), 
-                       sym->usl.spillLoc->offset);
-               aop->size = getSize(sym->type);
-               
-               return;
-       }
-       
-       {
-               sym_link *type = operandType(op);
-               if(IS_PTR_CONST(type)) 
-                       DEBUGpic14_emitcode(";","%d aop type is const pointer",__LINE__);
-       }
-       
-       /* must be in a register */
-       DEBUGpic14_emitcode(";","%d register type nRegs=%d",__LINE__,sym->nRegs);
-       sym->aop = op->aop = aop = newAsmop(AOP_REG);
-       aop->size = sym->nRegs;
-       for ( i = 0 ; i < sym->nRegs ;i++)
-               aop->aopu.aop_reg[i] = sym->regs[i];
+  asmop *aop;
+  symbol *sym;
+  int i;
+  
+  if (!op)
+    return ;
+  
+  //    DEBUGpic14_emitcode(";","%d",__LINE__);
+  /* if this a literal */
+  if (IS_OP_LITERAL(op)) {
+    op->aop = aop = newAsmop(AOP_LIT);
+    aop->aopu.aop_lit = op->operand.valOperand;
+    aop->size = getSize(operandType(op));
+    return;
+  }
+  
+  {
+    sym_link *type = operandType(op);
+    if(IS_PTR_CONST(type))
+      DEBUGpic14_emitcode(";","%d aop type is const pointer",__LINE__);
+  }
+  
+  /* if already has a asmop then continue */
+  if (op->aop)
+    return ;
+  
+  /* if the underlying symbol has a aop */
+  if (IS_SYMOP(op) && OP_SYMBOL(op)->aop) {
+    DEBUGpic14_emitcode(";","%d",__LINE__);
+    op->aop = OP_SYMBOL(op)->aop;
+    return;
+  }
+  
+  /* if this is a true symbol */
+  if (IS_TRUE_SYMOP(op)) {    
+    //DEBUGpic14_emitcode(";","%d - true symop",__LINE__);
+    op->aop = aopForSym(ic,OP_SYMBOL(op),result);
+    return ;
+  }
+  
+  /* this is a temporary : this has
+  only four choices :
+  a) register
+  b) spillocation
+  c) rematerialize 
+  d) conditional   
+  e) can be a return use only */
+  
+  sym = OP_SYMBOL(op);
+  
+  
+  /* if the type is a conditional */
+  if (sym->regType == REG_CND) {
+    aop = op->aop = sym->aop = newAsmop(AOP_CRY);
+    aop->size = 0;
+    return;
+  }
+  
+  /* if it is spilt then two situations
+  a) is rematerialize 
+  b) has a spill location */
+  if (sym->isspilt || sym->nRegs == 0) {
+    
+    DEBUGpic14_emitcode(";","%d",__LINE__);
+    /* rematerialize it NOW */
+    if (sym->remat) {
+      
+      sym->aop = op->aop = aop =
+        aopForRemat (op);
+      aop->size = getSize(sym->type);
+      //DEBUGpic14_emitcode(";"," %d: size %d, %s\n",__LINE__,aop->size,aop->aopu.aop_immd);
+      return;
+    }
+    
+    if (sym->accuse) {
+      int i;
+      aop = op->aop = sym->aop = newAsmop(AOP_ACC);
+      aop->size = getSize(sym->type);
+      for ( i = 0 ; i < 2 ; i++ )
+        aop->aopu.aop_str[i] = accUse[i];
+      DEBUGpic14_emitcode(";","%d size=%d",__LINE__,aop->size);
+      return;  
+    }
+    
+    if (sym->ruonly ) {
+      if(sym->isptr) {  // && sym->uptr 
+        aop = op->aop = sym->aop = newAsmop(AOP_PCODE);
+        aop->aopu.pcop = newpCodeOp(NULL,PO_GPR_POINTER); //popCopyReg(&pc_fsr);
+        
+        //PCOI(aop->aopu.pcop)->_const = 0;
+        //PCOI(aop->aopu.pcop)->index = 0;
+        /*
+        DEBUGpic14_emitcode(";","%d: rname %s, val %d, const = %d",
+        __LINE__,sym->rname, 0, PCOI(aop->aopu.pcop)->_const);
+        */
+        //allocDirReg (IC_LEFT(ic));
+        
+        aop->size = getSize(sym->type);
+        DEBUGpic14_emitcode(";","%d",__LINE__);
+        return;
+        
+      } else {
+        
+        unsigned i;
+        
+        aop = op->aop = sym->aop = newAsmop(AOP_STR);
+        aop->size = getSize(sym->type);
+        for ( i = 0 ; i < fReturnSizePic ; i++ )
+          aop->aopu.aop_str[i] = fReturn[i];
+        
+        DEBUGpic14_emitcode(";","%d",__LINE__);
+        return;
+      }
+    }
+    
+    /* else spill location  */
+    if (sym->usl.spillLoc && getSize(sym->type) != getSize(sym->usl.spillLoc->type)) {
+      /* force a new aop if sizes differ */
+      sym->usl.spillLoc->aop = NULL;
+    }
+    DEBUGpic14_emitcode(";","%s %d %s sym->rname = %s, offset %d",
+      __FUNCTION__,__LINE__,
+      sym->usl.spillLoc->rname,
+      sym->rname, sym->usl.spillLoc->offset);
+    
+    sym->aop = op->aop = aop = newAsmop(AOP_PCODE);
+    //aop->aopu.pcop = popGetImmd(sym->usl.spillLoc->rname,0,sym->usl.spillLoc->offset);
+    aop->aopu.pcop = popRegFromString(sym->usl.spillLoc->rname, 
+      getSize(sym->type), 
+      sym->usl.spillLoc->offset);
+    aop->size = getSize(sym->type);
+    
+    return;
+  }
+  
+  {
+    sym_link *type = operandType(op);
+    if(IS_PTR_CONST(type)) 
+      DEBUGpic14_emitcode(";","%d aop type is const pointer",__LINE__);
+  }
+  
+  /* must be in a register */
+  DEBUGpic14_emitcode(";","%d register type nRegs=%d",__LINE__,sym->nRegs);
+  sym->aop = op->aop = aop = newAsmop(AOP_REG);
+  aop->size = sym->nRegs;
+  for ( i = 0 ; i < sym->nRegs ;i++)
+    aop->aopu.aop_reg[i] = sym->regs[i];
 }
 
 /*-----------------------------------------------------------------*/
@@ -890,103 +890,103 @@ void aopOp (operand *op, iCode *ic, bool result)
 /*----------------------------------------------------------------*/
 void freeAsmop (operand *op, asmop *aaop, iCode *ic, bool pop)
 {   
-       asmop *aop ;
-       
-       if (!op)
-               aop = aaop;
-       else 
-               aop = op->aop;
-       
-       if (!aop)
-               return ;
-       
-       if (aop->freed)
-               goto dealloc; 
-       
-       aop->freed = 1;
-       
-       /* depending on the asmop type only three cases need work AOP_RO
-       , AOP_R1 && AOP_STK */
+  asmop *aop ;
+  
+  if (!op)
+    aop = aaop;
+  else 
+    aop = op->aop;
+  
+  if (!aop)
+    return ;
+  
+  if (aop->freed)
+    goto dealloc; 
+  
+  aop->freed = 1;
+  
+  /* depending on the asmop type only three cases need work AOP_RO
+  , AOP_R1 && AOP_STK */
 #if 0
-       switch (aop->type) {
-       case AOP_R0 :
-               if (_G.r0Pushed ) {
-                       if (pop) {
-                               pic14_emitcode ("pop","ar0");     
-                               _G.r0Pushed--;
-                       }
-               }
-               bitVectUnSetBit(ic->rUsed,R0_IDX);
-               break;
-               
-       case AOP_R1 :
-               if (_G.r1Pushed ) {
-                       if (pop) {
-                               pic14_emitcode ("pop","ar1");
-                               _G.r1Pushed--;
-                       }
-               }
-               bitVectUnSetBit(ic->rUsed,R1_IDX);          
-               break;
-               
-       case AOP_STK :
-               {
-                       int sz = aop->size;    
-                       int stk = aop->aopu.aop_stk + aop->size;
-                       bitVectUnSetBit(ic->rUsed,R0_IDX);
-                       bitVectUnSetBit(ic->rUsed,R1_IDX);          
-                       
-                       getFreePtr(ic,&aop,FALSE);
-                       
-                       if (options.stack10bit)
-                       {
-                               /* I'm not sure what to do here yet... */
-                               /* #STUB */
-                               fprintf(stderr, 
-                                       "*** Warning: probably generating bad code for "
-                                       "10 bit stack mode.\n");
-                       }
-                       
-                       if (stk) {
-                               pic14_emitcode ("mov","a,_bp");
-                               pic14_emitcode ("add","a,#0x%02x",((char)stk) & 0xff);
-                               pic14_emitcode ("mov","%s,a",aop->aopu.aop_ptr->name);
-                       } else {
-                               pic14_emitcode ("mov","%s,_bp",aop->aopu.aop_ptr->name);
-                       }
-                       
-                       while (sz--) {
-                               pic14_emitcode("pop","acc");
-                               pic14_emitcode("mov","@%s,a",aop->aopu.aop_ptr->name);
-                               if (!sz) break;
-                               pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
-                       }
-                       op->aop = aop;
-                       freeAsmop(op,NULL,ic,TRUE);
-                       if (_G.r0Pushed) {
-                               pic14_emitcode("pop","ar0");
-                               _G.r0Pushed--;
-                       }
-                       
-                       if (_G.r1Pushed) {
-                               pic14_emitcode("pop","ar1");
-                               _G.r1Pushed--;
-                       }       
-               }
-       }
+  switch (aop->type) {
+  case AOP_R0 :
+    if (_G.r0Pushed ) {
+      if (pop) {
+        pic14_emitcode ("pop","ar0");     
+        _G.r0Pushed--;
+      }
+    }
+    bitVectUnSetBit(ic->rUsed,R0_IDX);
+    break;
+    
+  case AOP_R1 :
+    if (_G.r1Pushed ) {
+      if (pop) {
+        pic14_emitcode ("pop","ar1");
+        _G.r1Pushed--;
+      }
+    }
+    bitVectUnSetBit(ic->rUsed,R1_IDX);          
+    break;
+    
+  case AOP_STK :
+    {
+      int sz = aop->size;    
+      int stk = aop->aopu.aop_stk + aop->size;
+      bitVectUnSetBit(ic->rUsed,R0_IDX);
+      bitVectUnSetBit(ic->rUsed,R1_IDX);          
+      
+      getFreePtr(ic,&aop,FALSE);
+      
+      if (options.stack10bit)
+      {
+        /* I'm not sure what to do here yet... */
+        /* #STUB */
+        fprintf(stderr, 
+          "*** Warning: probably generating bad code for "
+          "10 bit stack mode.\n");
+      }
+      
+      if (stk) {
+        pic14_emitcode ("mov","a,_bp");
+        pic14_emitcode ("add","a,#0x%02x",((char)stk) & 0xff);
+        pic14_emitcode ("mov","%s,a",aop->aopu.aop_ptr->name);
+      } else {
+        pic14_emitcode ("mov","%s,_bp",aop->aopu.aop_ptr->name);
+      }
+      
+      while (sz--) {
+        pic14_emitcode("pop","acc");
+        pic14_emitcode("mov","@%s,a",aop->aopu.aop_ptr->name);
+        if (!sz) break;
+        pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
+      }
+      op->aop = aop;
+      freeAsmop(op,NULL,ic,TRUE);
+      if (_G.r0Pushed) {
+        pic14_emitcode("pop","ar0");
+        _G.r0Pushed--;
+      }
+      
+      if (_G.r1Pushed) {
+        pic14_emitcode("pop","ar1");
+        _G.r1Pushed--;
+      }       
+    }
+  }
 #endif
-       
+  
 dealloc:
-       /* all other cases just dealloc */
-       if (op ) {
-               op->aop = NULL;
-               if (IS_SYMOP(op)) {
-                       OP_SYMBOL(op)->aop = NULL;    
-                       /* if the symbol has a spill */
-                       if (SPIL_LOC(op))
-                               SPIL_LOC(op)->aop = NULL;
-               }
-       }
+  /* all other cases just dealloc */
+  if (op ) {
+    op->aop = NULL;
+    if (IS_SYMOP(op)) {
+      OP_SYMBOL(op)->aop = NULL;    
+      /* if the symbol has a spill */
+      if (SPIL_LOC(op))
+        SPIL_LOC(op)->aop = NULL;
+    }
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -994,156 +994,156 @@ dealloc:
 /*-----------------------------------------------------------------*/
 char *aopGet (asmop *aop, int offset, bool bit16, bool dname)
 {
-       char *s = buffer ;
-       char *rs;
-       
-       //DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* offset is greater than
-       size then zero */
-       if (offset > (aop->size - 1) &&
-               aop->type != AOP_LIT)
-               return zero;
-       
-       /* depending on type */
-       switch (aop->type) {
-               
-       case AOP_R0:
-       case AOP_R1:
-               DEBUGpic14_emitcode(";","%d",__LINE__);
-               /* if we need to increment it */       
-               while (offset > aop->coff) {        
-                       pic14_emitcode ("inc","%s",aop->aopu.aop_ptr->name);  
-                       aop->coff++;
-               }
-               
-               while (offset < aop->coff) {
-                       pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
-                       aop->coff--;
-               }
-               
-               aop->coff = offset ;
-               if (aop->paged) {
-                       pic14_emitcode("movx","a,@%s",aop->aopu.aop_ptr->name);
-                       return (dname ? "acc" : "a");
-               }       
-               sprintf(s,"@%s",aop->aopu.aop_ptr->name);
-               rs = Safe_calloc(1,strlen(s)+1);
-               strcpy(rs,s);   
-               return rs;
-               
-       case AOP_DPTR:
-       case AOP_DPTR2:
-               DEBUGpic14_emitcode(";","%d",__LINE__);
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(1);
-               }
-               
-               while (offset > aop->coff) {
-                       pic14_emitcode ("inc","dptr");
-                       aop->coff++;
-               }
-               
-               while (offset < aop->coff) {        
-                       pic14_emitcode("lcall","__decdptr");
-                       aop->coff--;
-               }
-               
-               aop->coff = offset;
-               if (aop->code) {
-                       pic14_emitcode("clr","a");
-                       pic14_emitcode("movc","a,@a+dptr");
-               }
-               else {
-                       pic14_emitcode("movx","a,@dptr");
-               }
-               
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(0);
-               }
-               
-               return (dname ? "acc" : "a");
-               
-               
-       case AOP_IMMD:
-               if (bit16) 
-                       sprintf (s,"%s",aop->aopu.aop_immd);
-               else
-                       if (offset) 
-                               sprintf(s,"(%s >> %d)",
-                               aop->aopu.aop_immd,
-                               offset*8);
-                       else
-                               sprintf(s,"%s",
-                               aop->aopu.aop_immd);
-                       DEBUGpic14_emitcode(";","%d immd %s",__LINE__,s);
-                       rs = Safe_calloc(1,strlen(s)+1);
-                       strcpy(rs,s);   
-                       return rs;
-                       
-       case AOP_DIR:
-               if (offset) {
-                       sprintf(s,"(%s + %d)",
-                               aop->aopu.aop_dir,
-                               offset);
-                       DEBUGpic14_emitcode(";","oops AOP_DIR did this %s\n",s);
-               } else
-                       sprintf(s,"%s",aop->aopu.aop_dir);
-               rs = Safe_calloc(1,strlen(s)+1);
-               strcpy(rs,s);   
-               return rs;
-               
-       case AOP_REG:
-               //if (dname) 
-               //    return aop->aopu.aop_reg[offset]->dname;
-               //else
-               return aop->aopu.aop_reg[offset]->name;
-               
-       case AOP_CRY:
-               //pic14_emitcode(";","%d",__LINE__);
-               return aop->aopu.aop_dir;
-               
-       case AOP_ACC:
-               DEBUGpic14_emitcode(";Warning -pic port ignoring get(AOP_ACC)","%d",__LINE__);
-               return "AOP_accumulator_bug";
-               
-       case AOP_LIT:
-               sprintf(s,"0x%02x", pic14aopLiteral (aop->aopu.aop_lit,offset));
-               rs = Safe_calloc(1,strlen(s)+1);
-               strcpy(rs,s);   
-               return rs;
-               
-       case AOP_STR:
-               aop->coff = offset ;
-               if (strcmp(aop->aopu.aop_str[offset],"a") == 0 &&
-                       dname)
-                       return "acc";
-               DEBUGpic14_emitcode(";","%d - %s",__LINE__, aop->aopu.aop_str[offset]);
-               
-               return aop->aopu.aop_str[offset];
-               
-       case AOP_PCODE:
-               {
-                       pCodeOp *pcop = aop->aopu.pcop;
-                       DEBUGpic14_emitcode(";","%d: aopGet AOP_PCODE type %s",__LINE__,pCodeOpType(pcop));
-                       if(pcop->name) {
-                               DEBUGpic14_emitcode(";","%s offset %d",pcop->name,PCOI(pcop)->offset);
-                               //sprintf(s,"(%s+0x%02x)", pcop->name,PCOI(aop->aopu.pcop)->offset);
-                               sprintf(s,"%s", pcop->name);
-                       } else
-                               sprintf(s,"0x%02x", PCOI(aop->aopu.pcop)->offset);
-                       
-               }
-               rs = Safe_calloc(1,strlen(s)+1);
-               strcpy(rs,s);   
-               return rs;
-               
-       }
-       
-       werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-               "aopget got unsupported aop->type");
-       exit(0);
+  char *s = buffer ;
+  char *rs;
+  
+  //DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* offset is greater than
+  size then zero */
+  if (offset > (aop->size - 1) &&
+    aop->type != AOP_LIT)
+    return zero;
+  
+  /* depending on type */
+  switch (aop->type) {
+    
+  case AOP_R0:
+  case AOP_R1:
+    DEBUGpic14_emitcode(";","%d",__LINE__);
+    /* if we need to increment it */       
+    while (offset > aop->coff) {        
+      pic14_emitcode ("inc","%s",aop->aopu.aop_ptr->name);  
+      aop->coff++;
+    }
+    
+    while (offset < aop->coff) {
+      pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
+      aop->coff--;
+    }
+    
+    aop->coff = offset ;
+    if (aop->paged) {
+      pic14_emitcode("movx","a,@%s",aop->aopu.aop_ptr->name);
+      return (dname ? "acc" : "a");
+    }       
+    sprintf(s,"@%s",aop->aopu.aop_ptr->name);
+    rs = Safe_calloc(1,strlen(s)+1);
+    strcpy(rs,s);   
+    return rs;
+    
+  case AOP_DPTR:
+  case AOP_DPTR2:
+    DEBUGpic14_emitcode(";","%d",__LINE__);
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(1);
+    }
+    
+    while (offset > aop->coff) {
+      pic14_emitcode ("inc","dptr");
+      aop->coff++;
+    }
+    
+    while (offset < aop->coff) {        
+      pic14_emitcode("lcall","__decdptr");
+      aop->coff--;
+    }
+    
+    aop->coff = offset;
+    if (aop->code) {
+      pic14_emitcode("clr","a");
+      pic14_emitcode("movc","a,@a+dptr");
+    }
+    else {
+      pic14_emitcode("movx","a,@dptr");
+    }
+    
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(0);
+    }
+    
+    return (dname ? "acc" : "a");
+    
+    
+  case AOP_IMMD:
+    if (bit16) 
+      sprintf (s,"%s",aop->aopu.aop_immd);
+    else
+      if (offset) 
+        sprintf(s,"(%s >> %d)",
+        aop->aopu.aop_immd,
+        offset*8);
+      else
+        sprintf(s,"%s",
+        aop->aopu.aop_immd);
+      DEBUGpic14_emitcode(";","%d immd %s",__LINE__,s);
+      rs = Safe_calloc(1,strlen(s)+1);
+      strcpy(rs,s);   
+      return rs;
+      
+  case AOP_DIR:
+    if (offset) {
+      sprintf(s,"(%s + %d)",
+        aop->aopu.aop_dir,
+        offset);
+      DEBUGpic14_emitcode(";","oops AOP_DIR did this %s\n",s);
+    } else
+      sprintf(s,"%s",aop->aopu.aop_dir);
+    rs = Safe_calloc(1,strlen(s)+1);
+    strcpy(rs,s);   
+    return rs;
+    
+  case AOP_REG:
+    //if (dname) 
+    //    return aop->aopu.aop_reg[offset]->dname;
+    //else
+    return aop->aopu.aop_reg[offset]->name;
+    
+  case AOP_CRY:
+    //pic14_emitcode(";","%d",__LINE__);
+    return aop->aopu.aop_dir;
+    
+  case AOP_ACC:
+    DEBUGpic14_emitcode(";Warning -pic port ignoring get(AOP_ACC)","%d",__LINE__);
+    return "AOP_accumulator_bug";
+    
+  case AOP_LIT:
+    sprintf(s,"0x%02x", pic14aopLiteral (aop->aopu.aop_lit,offset));
+    rs = Safe_calloc(1,strlen(s)+1);
+    strcpy(rs,s);   
+    return rs;
+    
+  case AOP_STR:
+    aop->coff = offset ;
+    if (strcmp(aop->aopu.aop_str[offset],"a") == 0 &&
+      dname)
+      return "acc";
+    DEBUGpic14_emitcode(";","%d - %s",__LINE__, aop->aopu.aop_str[offset]);
+    
+    return aop->aopu.aop_str[offset];
+    
+  case AOP_PCODE:
+    {
+      pCodeOp *pcop = aop->aopu.pcop;
+      DEBUGpic14_emitcode(";","%d: aopGet AOP_PCODE type %s",__LINE__,pCodeOpType(pcop));
+      if(pcop->name) {
+        DEBUGpic14_emitcode(";","%s offset %d",pcop->name,PCOI(pcop)->offset);
+        //sprintf(s,"(%s+0x%02x)", pcop->name,PCOI(aop->aopu.pcop)->offset);
+        sprintf(s,"%s", pcop->name);
+      } else
+        sprintf(s,"0x%02x", PCOI(aop->aopu.pcop)->offset);
+      
+    }
+    rs = Safe_calloc(1,strlen(s)+1);
+    strcpy(rs,s);   
+    return rs;
+    
+  }
+  
+  werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+    "aopget got unsupported aop->type");
+  exit(0);
 }
 
 
@@ -1152,16 +1152,16 @@ char *aopGet (asmop *aop, int offset, bool bit16, bool dname)
 /*-----------------------------------------------------------------*/
 pCodeOp *popGetTempReg(void)
 {
-       
-       pCodeOp *pcop;
-       
-       pcop = newpCodeOp(NULL, PO_GPR_TEMP);
-       if(pcop && pcop->type == PO_GPR_TEMP && PCOR(pcop)->r) {
-               PCOR(pcop)->r->wasUsed=1;
-               PCOR(pcop)->r->isFree=0;
-       }
-       
-       return pcop;
+  
+  pCodeOp *pcop;
+  
+  pcop = newpCodeOp(NULL, PO_GPR_TEMP);
+  if(pcop && pcop->type == PO_GPR_TEMP && PCOR(pcop)->r) {
+    PCOR(pcop)->r->wasUsed=1;
+    PCOR(pcop)->r->isFree=0;
+  }
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1169,23 +1169,23 @@ pCodeOp *popGetTempReg(void)
 /*-----------------------------------------------------------------*/
 void popReleaseTempReg(pCodeOp *pcop)
 {
-       
-       if(pcop && pcop->type == PO_GPR_TEMP && PCOR(pcop)->r)
-               PCOR(pcop)->r->isFree = 1;
-       
+  
+  if(pcop && pcop->type == PO_GPR_TEMP && PCOR(pcop)->r)
+    PCOR(pcop)->r->isFree = 1;
+  
 }
 /*-----------------------------------------------------------------*/
 /* popGetLabel - create a new pCodeOp of type PO_LABEL             */
 /*-----------------------------------------------------------------*/
 pCodeOp *popGetLabel(unsigned int key)
 {
-       
-       DEBUGpic14_emitcode ("; ***","%s  key=%d, label offset %d",__FUNCTION__,key, labelOffset);
-       
-       if(key>(unsigned int)max_key)
-               max_key = key;
-       
-       return newpCodeOpLabel(NULL,key+100+labelOffset);
+  
+  DEBUGpic14_emitcode ("; ***","%s  key=%d, label offset %d",__FUNCTION__,key, labelOffset);
+  
+  if(key>(unsigned int)max_key)
+    max_key = key;
+  
+  return newpCodeOpLabel(NULL,key+100+labelOffset);
 }
 
 /*-------------------------------------------------------------------*/
@@ -1193,10 +1193,10 @@ pCodeOp *popGetLabel(unsigned int key)
 /*-------------------------------------------------------------------*/
 pCodeOp *popGetHighLabel(unsigned int key)
 {
-       pCodeOp *pcop;
-       pcop = popGetLabel(key);
-       PCOLAB(pcop)->offset = 1;
-       return pcop;
+  pCodeOp *pcop;
+  pcop = popGetLabel(key);
+  PCOLAB(pcop)->offset = 1;
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1204,18 +1204,17 @@ pCodeOp *popGetHighLabel(unsigned int key)
 /*-----------------------------------------------------------------*/
 pCodeOp *popGetLit(unsigned int lit)
 {
-       
-       return newpCodeOpLit(lit);
+  
+  return newpCodeOpLit(lit);
 }
 
-
 /*-----------------------------------------------------------------*/
 /* popGetImmd - asm operator to pcode immediate conversion         */
 /*-----------------------------------------------------------------*/
 pCodeOp *popGetImmd(char *name, unsigned int offset, int index,int is_func)
 {
-       
-       return newpCodeOpImmd(name, offset,index, 0, is_func);
+  
+  return newpCodeOpImmd(name, offset,index, 0, is_func);
 }
 
 
@@ -1224,18 +1223,18 @@ pCodeOp *popGetImmd(char *name, unsigned int offset, int index,int is_func)
 /*-----------------------------------------------------------------*/
 pCodeOp *popGetWithString(char *str, int isExtern)
 {
-       pCodeOp *pcop;
-       
-       
-       if(!str) {
-               fprintf(stderr,"NULL string %s %d\n",__FILE__,__LINE__);
-               exit (1);
-       }
-       
-       pcop = newpCodeOp(str,PO_STR);
-       PCOS(pcop)->isPublic = isExtern ? 1 : 0;
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  
+  if(!str) {
+    fprintf(stderr,"NULL string %s %d\n",__FILE__,__LINE__);
+    exit (1);
+  }
+  
+  pcop = newpCodeOp(str,PO_STR);
+  PCOS(pcop)->isPublic = isExtern ? 1 : 0;
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1243,53 +1242,53 @@ pCodeOp *popGetWithString(char *str, int isExtern)
 /*-----------------------------------------------------------------*/
 pCodeOp *popRegFromString(char *str, int size, int offset)
 {
-       
-       pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-       pcop->type = PO_DIR;
-       
-       DEBUGpic14_emitcode(";","%d",__LINE__);
-       
-       if(!str)
-               str = "BAD_STRING";
-       
-       pcop->name = Safe_calloc(1,strlen(str)+1);
-       strcpy(pcop->name,str);
-       
-       //pcop->name = Safe_strdup( ( (str) ? str : "BAD STRING"));
-       
-       PCOR(pcop)->r = dirregWithName(pcop->name);
-       if(PCOR(pcop)->r == NULL) {
-               //fprintf(stderr,"%d - couldn't find %s in allocated registers, size =%d\n",__LINE__,aop->aopu.aop_dir,aop->size);
-               PCOR(pcop)->r = allocRegByName (pcop->name,size);
-               DEBUGpic14_emitcode(";","%d  %s   offset=%d - had to alloc by reg name",__LINE__,pcop->name,offset);
-       } else {
-               DEBUGpic14_emitcode(";","%d  %s   offset=%d",__LINE__,pcop->name,offset);
-       }
-       PCOR(pcop)->instance = offset;
-       
-       return pcop;
+  
+  pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+  pcop->type = PO_DIR;
+  
+  DEBUGpic14_emitcode(";","%d",__LINE__);
+  
+  if(!str)
+    str = "BAD_STRING";
+  
+  pcop->name = Safe_calloc(1,strlen(str)+1);
+  strcpy(pcop->name,str);
+  
+  //pcop->name = Safe_strdup( ( (str) ? str : "BAD STRING"));
+  
+  PCOR(pcop)->r = dirregWithName(pcop->name);
+  if(PCOR(pcop)->r == NULL) {
+    //fprintf(stderr,"%d - couldn't find %s in allocated registers, size =%d\n",__LINE__,aop->aopu.aop_dir,aop->size);
+    PCOR(pcop)->r = allocRegByName (pcop->name,size);
+    DEBUGpic14_emitcode(";","%d  %s   offset=%d - had to alloc by reg name",__LINE__,pcop->name,offset);
+  } else {
+    DEBUGpic14_emitcode(";","%d  %s   offset=%d",__LINE__,pcop->name,offset);
+  }
+  PCOR(pcop)->instance = offset;
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeOp *popRegFromIdx(int rIdx)
 {
-       pCodeOp *pcop;
-       
-       DEBUGpic14_emitcode ("; ***","%s,%d  , rIdx=0x%x",
-               __FUNCTION__,__LINE__,rIdx);
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-       
-       PCOR(pcop)->rIdx = rIdx;
-       PCOR(pcop)->r = typeRegWithIdx(rIdx,REG_STK,1);
-       PCOR(pcop)->r->isFree = 0;
-       PCOR(pcop)->r->wasUsed = 1;
-       
-       pcop->type = PCOR(pcop)->r->pc_type;
-       
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  DEBUGpic14_emitcode ("; ***","%s,%d  , rIdx=0x%x",
+    __FUNCTION__,__LINE__,rIdx);
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+  
+  PCOR(pcop)->rIdx = rIdx;
+  PCOR(pcop)->r = typeRegWithIdx(rIdx,REG_STK,1);
+  PCOR(pcop)->r->isFree = 0;
+  PCOR(pcop)->r->wasUsed = 1;
+  
+  pcop->type = PCOR(pcop)->r->pc_type;
+  
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1297,347 +1296,347 @@ pCodeOp *popRegFromIdx(int rIdx)
 /*-----------------------------------------------------------------*/
 pCodeOp *popGet (asmop *aop, int offset) //, bool bit16, bool dname)
 {
-       //char *s = buffer ;
-       //char *rs;
-       
-       pCodeOp *pcop;
-       
-       //DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* offset is greater than
-       size then zero */
-       
-       if (offset > (aop->size - 1) &&
-               aop->type != AOP_LIT)
-               return NULL;  //zero;
-       
-       /* depending on type */
-       switch (aop->type) {
-               
-       case AOP_R0:
-       case AOP_R1:
-       case AOP_DPTR:
-       case AOP_DPTR2:
-       case AOP_ACC:
-               DEBUGpic14_emitcode(";8051 legacy","%d type = %s",__LINE__,AopType(aop->type));
-               return NULL;
-               
-       case AOP_IMMD:
-               DEBUGpic14_emitcode(";","%d",__LINE__);
-               return popGetImmd(aop->aopu.aop_immd,offset,0,0);
-               
-       case AOP_DIR:
-               return popRegFromString(aop->aopu.aop_dir, aop->size, offset);
+  //char *s = buffer ;
+  //char *rs;
+  
+  pCodeOp *pcop;
+  
+  //DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* offset is greater than
+  size then zero */
+  
+  if (offset > (aop->size - 1) &&
+    aop->type != AOP_LIT)
+    return NULL;  //zero;
+  
+  /* depending on type */
+  switch (aop->type) {
+    
+  case AOP_R0:
+  case AOP_R1:
+  case AOP_DPTR:
+  case AOP_DPTR2:
+  case AOP_ACC:
+    DEBUGpic14_emitcode(";8051 legacy","%d type = %s",__LINE__,AopType(aop->type));
+    return NULL;
+    
+  case AOP_IMMD:
+    DEBUGpic14_emitcode(";","%d",__LINE__);
+    return popGetImmd(aop->aopu.aop_immd,offset,0,0);
+    
+  case AOP_DIR:
+    return popRegFromString(aop->aopu.aop_dir, aop->size, offset);
 #if 0
-               pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-               pcop->type = PO_DIR;
-               
-               /*
-               if (offset)
-               sprintf(s,"(%s + %d)",
-               aop->aopu.aop_dir,
-               offset);
-               else
-               sprintf(s,"%s",aop->aopu.aop_dir);
-               pcop->name = Safe_calloc(1,strlen(s)+1);
-               strcpy(pcop->name,s);   
-               */
-               pcop->name = Safe_calloc(1,strlen(aop->aopu.aop_dir)+1);
-               strcpy(pcop->name,aop->aopu.aop_dir);   
-               PCOR(pcop)->r = dirregWithName(aop->aopu.aop_dir);
-               if(PCOR(pcop)->r == NULL) {
-                       //fprintf(stderr,"%d - couldn't find %s in allocated registers, size =%d\n",__LINE__,aop->aopu.aop_dir,aop->size);
-                       PCOR(pcop)->r = allocRegByName (aop->aopu.aop_dir,aop->size);
-                       DEBUGpic14_emitcode(";","%d  %s   offset=%d - had to alloc by reg name",__LINE__,pcop->name,offset);
-               } else {
-                       DEBUGpic14_emitcode(";","%d  %s   offset=%d",__LINE__,pcop->name,offset);
-               }
-               PCOR(pcop)->instance = offset;
-               
-               return pcop;
+    pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+    pcop->type = PO_DIR;
+    
+    /*
+    if (offset)
+    sprintf(s,"(%s + %d)",
+    aop->aopu.aop_dir,
+    offset);
+    else
+    sprintf(s,"%s",aop->aopu.aop_dir);
+    pcop->name = Safe_calloc(1,strlen(s)+1);
+    strcpy(pcop->name,s);   
+    */
+    pcop->name = Safe_calloc(1,strlen(aop->aopu.aop_dir)+1);
+    strcpy(pcop->name,aop->aopu.aop_dir);   
+    PCOR(pcop)->r = dirregWithName(aop->aopu.aop_dir);
+    if(PCOR(pcop)->r == NULL) {
+      //fprintf(stderr,"%d - couldn't find %s in allocated registers, size =%d\n",__LINE__,aop->aopu.aop_dir,aop->size);
+      PCOR(pcop)->r = allocRegByName (aop->aopu.aop_dir,aop->size);
+      DEBUGpic14_emitcode(";","%d  %s   offset=%d - had to alloc by reg name",__LINE__,pcop->name,offset);
+    } else {
+      DEBUGpic14_emitcode(";","%d  %s   offset=%d",__LINE__,pcop->name,offset);
+    }
+    PCOR(pcop)->instance = offset;
+    
+    return pcop;
 #endif
-               
-       case AOP_REG:
-               {
-                       int rIdx = aop->aopu.aop_reg[offset]->rIdx;
-                       
-                       pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-                       PCOR(pcop)->rIdx = rIdx;
-                       PCOR(pcop)->r = pic14_regWithIdx(rIdx);
-                       PCOR(pcop)->r->wasUsed=1;
-                       PCOR(pcop)->r->isFree=0;
-                       
-                       PCOR(pcop)->instance = offset;
-                       pcop->type = PCOR(pcop)->r->pc_type;
-                       //rs = aop->aopu.aop_reg[offset]->name;
-                       DEBUGpic14_emitcode(";","%d regiser idx = %d ",__LINE__,rIdx);
-                       return pcop;
-               }
-               
-       case AOP_CRY:
-               pcop = newpCodeOpBit(aop->aopu.aop_dir,-1,1);
-               PCOR(pcop)->r = dirregWithName(aop->aopu.aop_dir);
-               //if(PCOR(pcop)->r == NULL)
-               //fprintf(stderr,"%d - couldn't find %s in allocated registers\n",__LINE__,aop->aopu.aop_dir);
-               return pcop;
-               
-       case AOP_LIT:
-               return newpCodeOpLit(pic14aopLiteral (aop->aopu.aop_lit,offset));
-               
-       case AOP_STR:
-               DEBUGpic14_emitcode(";","%d  %s",__LINE__,aop->aopu.aop_str[offset]);
-               return newpCodeOpRegFromStr(aop->aopu.aop_str[offset]);
-               /*
-               pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-               PCOR(pcop)->r = allocRegByName(aop->aopu.aop_str[offset]);
-               PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
-               pcop->type = PCOR(pcop)->r->pc_type;
-               pcop->name = PCOR(pcop)->r->name;
-               
-                 return pcop;
-               */
-               
-       case AOP_PCODE:
-               DEBUGpic14_emitcode(";","popGet AOP_PCODE (%s) %d %s",pCodeOpType(aop->aopu.pcop),
-                       __LINE__, 
-                       ((aop->aopu.pcop->name)? (aop->aopu.pcop->name) : "no name"));
-               pcop = pCodeOpCopy(aop->aopu.pcop);
-               PCOI(pcop)->offset = offset;
-               return pcop;
-       }
-       
-       werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-               "popGet got unsupported aop->type");
-       exit(0);
+    
+  case AOP_REG:
+    {
+      int rIdx = aop->aopu.aop_reg[offset]->rIdx;
+      
+      pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+      PCOR(pcop)->rIdx = rIdx;
+      PCOR(pcop)->r = pic14_regWithIdx(rIdx);
+      PCOR(pcop)->r->wasUsed=1;
+      PCOR(pcop)->r->isFree=0;
+      
+      PCOR(pcop)->instance = offset;
+      pcop->type = PCOR(pcop)->r->pc_type;
+      //rs = aop->aopu.aop_reg[offset]->name;
+      DEBUGpic14_emitcode(";","%d regiser idx = %d ",__LINE__,rIdx);
+      return pcop;
+    }
+    
+  case AOP_CRY:
+    pcop = newpCodeOpBit(aop->aopu.aop_dir,-1,1);
+    PCOR(pcop)->r = dirregWithName(aop->aopu.aop_dir);
+    //if(PCOR(pcop)->r == NULL)
+    //fprintf(stderr,"%d - couldn't find %s in allocated registers\n",__LINE__,aop->aopu.aop_dir);
+    return pcop;
+    
+  case AOP_LIT:
+    return newpCodeOpLit(pic14aopLiteral (aop->aopu.aop_lit,offset));
+    
+  case AOP_STR:
+    DEBUGpic14_emitcode(";","%d  %s",__LINE__,aop->aopu.aop_str[offset]);
+    return newpCodeOpRegFromStr(aop->aopu.aop_str[offset]);
+    /*
+    pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+    PCOR(pcop)->r = allocRegByName(aop->aopu.aop_str[offset]);
+    PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
+    pcop->type = PCOR(pcop)->r->pc_type;
+    pcop->name = PCOR(pcop)->r->name;
+    
+      return pcop;
+    */
+    
+  case AOP_PCODE:
+    DEBUGpic14_emitcode(";","popGet AOP_PCODE (%s) %d %s",pCodeOpType(aop->aopu.pcop),
+      __LINE__, 
+      ((aop->aopu.pcop->name)? (aop->aopu.pcop->name) : "no name"));
+    pcop = pCodeOpCopy(aop->aopu.pcop);
+    PCOI(pcop)->offset = offset;
+    return pcop;
+  }
+  
+  werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+    "popGet got unsupported aop->type");
+  exit(0);
 }
 /*-----------------------------------------------------------------*/
 /* aopPut - puts a string for a aop                                */
 /*-----------------------------------------------------------------*/
 void aopPut (asmop *aop, char *s, int offset)
 {
-       char *d = buffer ;
-       symbol *lbl ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (aop->size && offset > ( aop->size - 1)) {
-               werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                       "aopPut got offset > aop->size");
-               exit(0);
-       }
-       
-       /* will assign value to value */
-       /* depending on where it is ofcourse */
-       switch (aop->type) {
-       case AOP_DIR:
-               if (offset) {
-                       sprintf(d,"(%s + %d)",
-                               aop->aopu.aop_dir,offset);
-                       fprintf(stderr,"oops aopPut:AOP_DIR did this %s\n",s);
-                       
-               } else
-                       sprintf(d,"%s",aop->aopu.aop_dir);
-               
-               if (strcmp(d,s)) {
-                       DEBUGpic14_emitcode(";","%d",__LINE__);
-                       if(strcmp(s,"W"))
-                               pic14_emitcode("movf","%s,w",s);
-                       pic14_emitcode("movwf","%s",d);
-                       
-                       if(strcmp(s,"W")) {
-                               pic14_emitcode(";BUG!? should have this:movf","%s,w   %d",s,__LINE__);
-                               if(offset >= aop->size) {
-                                       emitpcode(POC_CLRF,popGet(aop,offset));
-                                       break;
-                               } else
-                                       emitpcode(POC_MOVLW,popGetImmd(s,offset,0,0));
-                       }
-                       
-                       emitpcode(POC_MOVWF,popGet(aop,offset));
-                       
-                       
-               }
-               break;
-               
-       case AOP_REG:
-               if (strcmp(aop->aopu.aop_reg[offset]->name,s) != 0) { // &&
-                       //strcmp(aop->aopu.aop_reg[offset]->dname,s)!= 0){
-                       /*
-                       if (*s == '@'           ||
-                       strcmp(s,"r0") == 0 ||
-                       strcmp(s,"r1") == 0 ||
-                       strcmp(s,"r2") == 0 ||
-                       strcmp(s,"r3") == 0 ||
-                       strcmp(s,"r4") == 0 ||
-                       strcmp(s,"r5") == 0 ||
-                       strcmp(s,"r6") == 0 || 
-                       strcmp(s,"r7") == 0 )
-                       pic14_emitcode("mov","%s,%s  ; %d",
-                       aop->aopu.aop_reg[offset]->dname,s,__LINE__);
-                       else
-                       */
-                       
-                       if(strcmp(s,"W")==0 )
-                               pic14_emitcode("movf","%s,w  ; %d",s,__LINE__);
-                       
-                       pic14_emitcode("movwf","%s",
-                               aop->aopu.aop_reg[offset]->name);
-                       
-                       if(strcmp(s,zero)==0) {
-                               emitpcode(POC_CLRF,popGet(aop,offset));
-                               
-                       } else if(strcmp(s,"W")==0) {
-                               pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-                               pcop->type = PO_GPR_REGISTER;
-                               
-                               PCOR(pcop)->rIdx = -1;
-                               PCOR(pcop)->r = NULL;
-                               
-                               DEBUGpic14_emitcode(";","%d",__LINE__);
-                               pcop->name = Safe_strdup(s);
-                               emitpcode(POC_MOVFW,pcop);
-                               emitpcode(POC_MOVWF,popGet(aop,offset));
-                       } else if(strcmp(s,one)==0) {
-                               emitpcode(POC_CLRF,popGet(aop,offset));
-                               emitpcode(POC_INCF,popGet(aop,offset));
-                       } else {
-                               emitpcode(POC_MOVWF,popGet(aop,offset));
-                       }
-               }
-               break;
-               
-       case AOP_DPTR:
-       case AOP_DPTR2:
-               
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(1);
-               }
-               
-               if (aop->code) {
-                       werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                               "aopPut writting to code space");
-                       exit(0);
-               }
-               
-               while (offset > aop->coff) {
-                       aop->coff++;
-                       pic14_emitcode ("inc","dptr");
-               }
-               
-               while (offset < aop->coff) {
-                       aop->coff-- ;
-                       pic14_emitcode("lcall","__decdptr");
-               }
-               
-               aop->coff = offset;
-               
-               /* if not in accumulater */
-               MOVA(s);
-               
-               pic14_emitcode ("movx","@dptr,a");
-               
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(0);
-               }
-               break;
-               
-       case AOP_R0:
-       case AOP_R1:
-               while (offset > aop->coff) {
-                       aop->coff++;
-                       pic14_emitcode("inc","%s",aop->aopu.aop_ptr->name);
-               }
-               while (offset < aop->coff) {
-                       aop->coff-- ;
-                       pic14_emitcode ("dec","%s",aop->aopu.aop_ptr->name);
-               }
-               aop->coff = offset;
-               
-               if (aop->paged) {
-                       MOVA(s);           
-                       pic14_emitcode("movx","@%s,a",aop->aopu.aop_ptr->name);
-                       
-               } else
-                       if (*s == '@') {
-                               MOVA(s);
-                               pic14_emitcode("mov","@%s,a ; %d",aop->aopu.aop_ptr->name,__LINE__);
-                       } else
-                               if (strcmp(s,"r0") == 0 ||
-                                       strcmp(s,"r1") == 0 ||
-                                       strcmp(s,"r2") == 0 ||
-                                       strcmp(s,"r3") == 0 ||
-                                       strcmp(s,"r4") == 0 ||
-                                       strcmp(s,"r5") == 0 ||
-                                       strcmp(s,"r6") == 0 || 
-                                       strcmp(s,"r7") == 0 ) {
-                                       char buffer[10];
-                                       sprintf(buffer,"a%s",s);
-                                       pic14_emitcode("mov","@%s,%s",
-                                               aop->aopu.aop_ptr->name,buffer);
-                               } else
-                                       pic14_emitcode("mov","@%s,%s",aop->aopu.aop_ptr->name,s);
-                               
-                               break;
-                               
-       case AOP_STK:
-               if (strcmp(s,"a") == 0)
-                       pic14_emitcode("push","acc");
-               else
-                       pic14_emitcode("push","%s",s);
-               
-               break;
-               
-       case AOP_CRY:
-               /* if bit variable */
-               if (!aop->aopu.aop_dir) {
-                       pic14_emitcode("clr","a");
-                       pic14_emitcode("rlc","a");
-               } else {
-                       if (s == zero) 
-                               pic14_emitcode("clr","%s",aop->aopu.aop_dir);
-                       else
-                               if (s == one)
-                                       pic14_emitcode("setb","%s",aop->aopu.aop_dir);
-                               else
-                                       if (!strcmp(s,"c"))
-                                               pic14_emitcode("mov","%s,c",aop->aopu.aop_dir);
-                                       else {
-                                               lbl = newiTempLabel(NULL);
-                                               
-                                               if (strcmp(s,"a")) {
-                                                       MOVA(s);
-                                               }
-                                               pic14_emitcode("clr","c");
-                                               pic14_emitcode("jz","%05d_DS_",lbl->key+100);
-                                               pic14_emitcode("cpl","c");
-                                               pic14_emitcode("","%05d_DS_:",lbl->key+100);
-                                               pic14_emitcode("mov","%s,c",aop->aopu.aop_dir);
-                                       }
-               }
-               break;
-               
-       case AOP_STR:
-               aop->coff = offset;
-               if (strcmp(aop->aopu.aop_str[offset],s))
-                       pic14_emitcode ("mov","%s,%s ; %d",aop->aopu.aop_str[offset],s,__LINE__);
-               break;
-               
-       case AOP_ACC:
-               aop->coff = offset;
-               if (!offset && (strcmp(s,"acc") == 0))
-                       break;
-               
-               if (strcmp(aop->aopu.aop_str[offset],s))
-                       pic14_emitcode ("mov","%s,%s ; %d",aop->aopu.aop_str[offset],s, __LINE__);
-               break;
-               
-       default :
-               werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                       "aopPut got unsupported aop->type");
-               exit(0);    
-       }    
-       
+  char *d = buffer ;
+  symbol *lbl ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (aop->size && offset > ( aop->size - 1)) {
+    werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+      "aopPut got offset > aop->size");
+    exit(0);
+  }
+  
+  /* will assign value to value */
+  /* depending on where it is ofcourse */
+  switch (aop->type) {
+  case AOP_DIR:
+    if (offset) {
+      sprintf(d,"(%s + %d)",
+        aop->aopu.aop_dir,offset);
+      fprintf(stderr,"oops aopPut:AOP_DIR did this %s\n",s);
+      
+    } else
+      sprintf(d,"%s",aop->aopu.aop_dir);
+    
+    if (strcmp(d,s)) {
+      DEBUGpic14_emitcode(";","%d",__LINE__);
+      if(strcmp(s,"W"))
+        pic14_emitcode("movf","%s,w",s);
+      pic14_emitcode("movwf","%s",d);
+      
+      if(strcmp(s,"W")) {
+        pic14_emitcode(";BUG!? should have this:movf","%s,w   %d",s,__LINE__);
+        if(offset >= aop->size) {
+          emitpcode(POC_CLRF,popGet(aop,offset));
+          break;
+        } else
+          emitpcode(POC_MOVLW,popGetImmd(s,offset,0,0));
+      }
+      
+      emitpcode(POC_MOVWF,popGet(aop,offset));
+      
+      
+    }
+    break;
+    
+  case AOP_REG:
+    if (strcmp(aop->aopu.aop_reg[offset]->name,s) != 0) { // &&
+      //strcmp(aop->aopu.aop_reg[offset]->dname,s)!= 0){
+      /*
+      if (*s == '@'           ||
+      strcmp(s,"r0") == 0 ||
+      strcmp(s,"r1") == 0 ||
+      strcmp(s,"r2") == 0 ||
+      strcmp(s,"r3") == 0 ||
+      strcmp(s,"r4") == 0 ||
+      strcmp(s,"r5") == 0 ||
+      strcmp(s,"r6") == 0 || 
+      strcmp(s,"r7") == 0 )
+      pic14_emitcode("mov","%s,%s  ; %d",
+      aop->aopu.aop_reg[offset]->dname,s,__LINE__);
+      else
+      */
+      
+      if(strcmp(s,"W")==0 )
+        pic14_emitcode("movf","%s,w  ; %d",s,__LINE__);
+      
+      pic14_emitcode("movwf","%s",
+        aop->aopu.aop_reg[offset]->name);
+      
+      if(strcmp(s,zero)==0) {
+        emitpcode(POC_CLRF,popGet(aop,offset));
+        
+      } else if(strcmp(s,"W")==0) {
+        pCodeOp *pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+        pcop->type = PO_GPR_REGISTER;
+        
+        PCOR(pcop)->rIdx = -1;
+        PCOR(pcop)->r = NULL;
+        
+        DEBUGpic14_emitcode(";","%d",__LINE__);
+        pcop->name = Safe_strdup(s);
+        emitpcode(POC_MOVFW,pcop);
+        emitpcode(POC_MOVWF,popGet(aop,offset));
+      } else if(strcmp(s,one)==0) {
+        emitpcode(POC_CLRF,popGet(aop,offset));
+        emitpcode(POC_INCF,popGet(aop,offset));
+      } else {
+        emitpcode(POC_MOVWF,popGet(aop,offset));
+      }
+    }
+    break;
+    
+  case AOP_DPTR:
+  case AOP_DPTR2:
+    
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(1);
+    }
+    
+    if (aop->code) {
+      werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+        "aopPut writting to code space");
+      exit(0);
+    }
+    
+    while (offset > aop->coff) {
+      aop->coff++;
+      pic14_emitcode ("inc","dptr");
+    }
+    
+    while (offset < aop->coff) {
+      aop->coff-- ;
+      pic14_emitcode("lcall","__decdptr");
+    }
+    
+    aop->coff = offset;
+    
+    /* if not in accumulater */
+    MOVA(s);
+    
+    pic14_emitcode ("movx","@dptr,a");
+    
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(0);
+    }
+    break;
+    
+  case AOP_R0:
+  case AOP_R1:
+    while (offset > aop->coff) {
+      aop->coff++;
+      pic14_emitcode("inc","%s",aop->aopu.aop_ptr->name);
+    }
+    while (offset < aop->coff) {
+      aop->coff-- ;
+      pic14_emitcode ("dec","%s",aop->aopu.aop_ptr->name);
+    }
+    aop->coff = offset;
+    
+    if (aop->paged) {
+      MOVA(s);           
+      pic14_emitcode("movx","@%s,a",aop->aopu.aop_ptr->name);
+      
+    } else
+      if (*s == '@') {
+        MOVA(s);
+        pic14_emitcode("mov","@%s,a ; %d",aop->aopu.aop_ptr->name,__LINE__);
+      } else
+        if (strcmp(s,"r0") == 0 ||
+          strcmp(s,"r1") == 0 ||
+          strcmp(s,"r2") == 0 ||
+          strcmp(s,"r3") == 0 ||
+          strcmp(s,"r4") == 0 ||
+          strcmp(s,"r5") == 0 ||
+          strcmp(s,"r6") == 0 || 
+          strcmp(s,"r7") == 0 ) {
+          char buffer[10];
+          sprintf(buffer,"a%s",s);
+          pic14_emitcode("mov","@%s,%s",
+            aop->aopu.aop_ptr->name,buffer);
+        } else
+          pic14_emitcode("mov","@%s,%s",aop->aopu.aop_ptr->name,s);
+        
+        break;
+        
+  case AOP_STK:
+    if (strcmp(s,"a") == 0)
+      pic14_emitcode("push","acc");
+    else
+      pic14_emitcode("push","%s",s);
+    
+    break;
+    
+  case AOP_CRY:
+    /* if bit variable */
+    if (!aop->aopu.aop_dir) {
+      pic14_emitcode("clr","a");
+      pic14_emitcode("rlc","a");
+    } else {
+      if (s == zero) 
+        pic14_emitcode("clr","%s",aop->aopu.aop_dir);
+      else
+        if (s == one)
+          pic14_emitcode("setb","%s",aop->aopu.aop_dir);
+        else
+          if (!strcmp(s,"c"))
+            pic14_emitcode("mov","%s,c",aop->aopu.aop_dir);
+          else {
+            lbl = newiTempLabel(NULL);
+            
+            if (strcmp(s,"a")) {
+              MOVA(s);
+            }
+            pic14_emitcode("clr","c");
+            pic14_emitcode("jz","%05d_DS_",lbl->key+100);
+            pic14_emitcode("cpl","c");
+            pic14_emitcode("","%05d_DS_:",lbl->key+100);
+            pic14_emitcode("mov","%s,c",aop->aopu.aop_dir);
+          }
+    }
+    break;
+    
+  case AOP_STR:
+    aop->coff = offset;
+    if (strcmp(aop->aopu.aop_str[offset],s))
+      pic14_emitcode ("mov","%s,%s ; %d",aop->aopu.aop_str[offset],s,__LINE__);
+    break;
+    
+  case AOP_ACC:
+    aop->coff = offset;
+    if (!offset && (strcmp(s,"acc") == 0))
+      break;
+    
+    if (strcmp(aop->aopu.aop_str[offset],s))
+      pic14_emitcode ("mov","%s,%s ; %d",aop->aopu.aop_str[offset],s, __LINE__);
+    break;
+    
+  default :
+    werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+      "aopPut got unsupported aop->type");
+    exit(0);    
+  }    
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1645,19 +1644,19 @@ void aopPut (asmop *aop, char *s, int offset)
 /*-----------------------------------------------------------------*/
 void mov2w (asmop *aop, int offset)
 {
-       
-       if(!aop)
-               return;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d  offset=%d",__FUNCTION__,__LINE__,offset);
-       
-       if ( aop->type == AOP_PCODE ||
-               aop->type == AOP_LIT ||
-               aop->type == AOP_IMMD )
-               emitpcode(POC_MOVLW,popGet(aop,offset));
-       else
-               emitpcode(POC_MOVFW,popGet(aop,offset));
-       
+  
+  if(!aop)
+    return;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d  offset=%d",__FUNCTION__,__LINE__,offset);
+  
+  if ( aop->type == AOP_PCODE ||
+    aop->type == AOP_LIT ||
+    aop->type == AOP_IMMD )
+    emitpcode(POC_MOVLW,popGet(aop,offset));
+  else
+    emitpcode(POC_MOVFW,popGet(aop,offset));
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1665,56 +1664,56 @@ void mov2w (asmop *aop, int offset)
 /*-----------------------------------------------------------------*/
 static void reAdjustPreg (asmop *aop)
 {
-       int size ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aop->coff = 0;
-       if ((size = aop->size) <= 1)
-               return ;
-       size-- ;
-       switch (aop->type) {
-       case AOP_R0 :
-       case AOP_R1 :
-               while (size--)
-                       pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
-               break;          
-       case AOP_DPTR :
-       case AOP_DPTR2:
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(1);
-               
-               while (size--)
-               {
-                       pic14_emitcode("lcall","__decdptr");
-               }
-               
-               if (aop->type == AOP_DPTR2)
-               {
-                       genSetDPTR(0);
-               }
-               break;
-               
-       }
-       
+  int size ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aop->coff = 0;
+  if ((size = aop->size) <= 1)
+    return ;
+  size-- ;
+  switch (aop->type) {
+  case AOP_R0 :
+  case AOP_R1 :
+    while (size--)
+      pic14_emitcode("dec","%s",aop->aopu.aop_ptr->name);
+    break;          
+  case AOP_DPTR :
+  case AOP_DPTR2:
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(1);
+    } 
+    while (size--)
+    {
+      pic14_emitcode("lcall","__decdptr");
+    }
+    
+    if (aop->type == AOP_DPTR2)
+    {
+      genSetDPTR(0);
+    }
+    break;
+    
+  }
+  
 }
 
 
 #if 0
 /*-----------------------------------------------------------------*/
-/* opIsGptr: returns non-zero if the passed operand is            */   
-/* a generic pointer type.                                        */
+/* opIsGptr: returns non-zero if the passed operand is       */   
+/* a generic pointer type.             */
 /*-----------------------------------------------------------------*/ 
 static int opIsGptr(operand *op)
 {
-       sym_link *type = operandType(op);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if ((AOP_SIZE(op) == GPTRSIZE) && IS_GENPTR(type))
-       {
-               return 1;
-       }
-       return 0;        
+  sym_link *type = operandType(op);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if ((AOP_SIZE(op) == GPTRSIZE) && IS_GENPTR(type))
+  {
+    return 1;
+  }
+  return 0;        
 }
 #endif
 
@@ -1723,29 +1722,29 @@ static int opIsGptr(operand *op)
 /*-----------------------------------------------------------------*/
 int pic14_getDataSize(operand *op)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       
-       return AOP_SIZE(op);
-       
-       // tsd- in the pic port, the genptr size is 1, so this code here
-       // fails. ( in the 8051 port, the size was 4).
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  
+  return AOP_SIZE(op);
+  
+  // tsd- in the pic port, the genptr size is 1, so this code here
+  // fails. ( in the 8051 port, the size was 4).
 #if 0
-       int size;
-       size = AOP_SIZE(op);
-       if (size == GPTRSIZE)
-       {
-               sym_link *type = operandType(op);
-               if (IS_GENPTR(type))
-               {
-               /* generic pointer; arithmetic operations
-               * should ignore the high byte (pointer type).
-                       */
-                       size--;
-                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               }
-       }
-       return size;
+  int size;
+  size = AOP_SIZE(op);
+  if (size == GPTRSIZE)
+  {
+    sym_link *type = operandType(op);
+    if (IS_GENPTR(type))
+    {
+    /* generic pointer; arithmetic operations
+    * should ignore the high byte (pointer type).
+      */
+      size--;
+      DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    }
+  }
+  return size;
 #endif
 }
 
@@ -1754,21 +1753,21 @@ int pic14_getDataSize(operand *op)
 /*-----------------------------------------------------------------*/
 void pic14_outAcc(operand *result)
 {
-       int size,offset;
-       DEBUGpic14_emitcode ("; ***","%s  %d - ",__FUNCTION__,__LINE__);
-       DEBUGpic14_AopType(__LINE__,NULL,NULL,result);
-       
-       
-       size = pic14_getDataSize(result);
-       if(size){
-               emitpcode(POC_MOVWF,popGet(AOP(result),0));
-               size--;
-               offset = 1;
-               /* unsigned or positive */
-               while(size--)
-                       emitpcode(POC_CLRF,popGet(AOP(result),offset++));
-       }
-       
+  int size,offset;
+  DEBUGpic14_emitcode ("; ***","%s  %d - ",__FUNCTION__,__LINE__);
+  DEBUGpic14_AopType(__LINE__,NULL,NULL,result);
+  
+  
+  size = pic14_getDataSize(result);
+  if(size){
+    emitpcode(POC_MOVWF,popGet(AOP(result),0));
+    size--;
+    offset = 1;
+    /* unsigned or positive */
+    while(size--)
+      emitpcode(POC_CLRF,popGet(AOP(result),offset++));
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1776,16 +1775,16 @@ void pic14_outAcc(operand *result)
 /*-----------------------------------------------------------------*/
 void pic14_outBitC(operand *result)
 {
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if the result is bit */
-       if (AOP_TYPE(result) == AOP_CRY) 
-               aopPut(AOP(result),"c",0);
-       else {
-               pic14_emitcode("clr","a  ; %d", __LINE__);
-               pic14_emitcode("rlc","a");
-               pic14_outAcc(result);
-       }
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if the result is bit */
+  if (AOP_TYPE(result) == AOP_CRY) 
+    aopPut(AOP(result),"c",0);
+  else {
+    pic14_emitcode("clr","a  ; %d", __LINE__);
+    pic14_emitcode("rlc","a");
+    pic14_outAcc(result);
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -1793,17 +1792,17 @@ void pic14_outBitC(operand *result)
 /*-----------------------------------------------------------------*/
 void pic14_toBoolean(operand *oper)
 {
-       int size = AOP_SIZE(oper) - 1;
-       int offset = 1;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if ( AOP_TYPE(oper) != AOP_ACC) {
-               emitpcode(POC_MOVFW,popGet(AOP(oper),0));
-       }
-       while (size--) {
-               emitpcode(POC_IORFW, popGet(AOP(oper),offset++));
-       }
+  int size = AOP_SIZE(oper) - 1;
+  int offset = 1;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if ( AOP_TYPE(oper) != AOP_ACC) {
+    emitpcode(POC_MOVFW,popGet(AOP(oper),0));
+  }
+  while (size--) {
+    emitpcode(POC_IORFW, popGet(AOP(oper),offset++));
+  }
 }
 
 
@@ -1812,46 +1811,46 @@ void pic14_toBoolean(operand *oper)
 /*-----------------------------------------------------------------*/
 static void genNot (iCode *ic)
 {
-       symbol *tlbl;
-       int size;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* assign asmOps to operand & result */
-       aopOp (IC_LEFT(ic),ic,FALSE);
-       aopOp (IC_RESULT(ic),ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,IC_LEFT(ic),NULL,IC_RESULT(ic));
-       /* if in bit space then a special case */
-       if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY) {
-               if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
-                       emitpcode(POC_MOVLW,popGet(AOP(IC_LEFT(ic)),0));
-                       emitpcode(POC_XORWF,popGet(AOP(IC_RESULT(ic)),0));
-               } else {
-                       emitpcode(POC_CLRF,popGet(AOP(IC_RESULT(ic)),0));
-                       emitpcode(POC_BTFSS,popGet(AOP(IC_LEFT(ic)),0));
-                       emitpcode(POC_INCF,popGet(AOP(IC_RESULT(ic)),0));
-               }
-               goto release;
-       }
-       
-       size = AOP_SIZE(IC_LEFT(ic));
-       if(size == 1) {
-               emitpcode(POC_COMFW,popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_ANDLW,popGetLit(1));
-               emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-               goto release;
-       }
-       pic14_toBoolean(IC_LEFT(ic));
-       
-       tlbl = newiTempLabel(NULL);
-       pic14_emitcode("cjne","a,#0x01,%05d_DS_",tlbl->key+100);
-       pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-       pic14_outBitC(IC_RESULT(ic));
-       
+  symbol *tlbl;
+  int size;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* assign asmOps to operand & result */
+  aopOp (IC_LEFT(ic),ic,FALSE);
+  aopOp (IC_RESULT(ic),ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,IC_LEFT(ic),NULL,IC_RESULT(ic));
+  /* if in bit space then a special case */
+  if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY) {
+    if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
+      emitpcode(POC_MOVLW,popGet(AOP(IC_LEFT(ic)),0));
+      emitpcode(POC_XORWF,popGet(AOP(IC_RESULT(ic)),0));
+    } else {
+      emitpcode(POC_CLRF,popGet(AOP(IC_RESULT(ic)),0));
+      emitpcode(POC_BTFSS,popGet(AOP(IC_LEFT(ic)),0));
+      emitpcode(POC_INCF,popGet(AOP(IC_RESULT(ic)),0));
+    }
+    goto release;
+  }
+  
+  size = AOP_SIZE(IC_LEFT(ic));
+  if(size == 1) {
+    emitpcode(POC_COMFW,popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_ANDLW,popGetLit(1));
+    emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+    goto release;
+  }
+  pic14_toBoolean(IC_LEFT(ic));
+  
+  tlbl = newiTempLabel(NULL);
+  pic14_emitcode("cjne","a,#0x01,%05d_DS_",tlbl->key+100);
+  pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+  pic14_outBitC(IC_RESULT(ic));
+  
 release:    
-       /* release the aops */
-       freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  /* release the aops */
+  freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
 }
 
 
@@ -1860,42 +1859,42 @@ release:
 /*-----------------------------------------------------------------*/
 static void genCpl (iCode *ic)
 {
-       operand *left, *result;
-       int size, offset=0;  
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp((left = IC_LEFT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       /* if both are in bit space then 
-       a special case */
-       if (AOP_TYPE(result) == AOP_CRY &&
-               AOP_TYPE(left) == AOP_CRY ) { 
-               
-               pic14_emitcode("mov","c,%s",left->aop->aopu.aop_dir); 
-               pic14_emitcode("cpl","c"); 
-               pic14_emitcode("mov","%s,c",result->aop->aopu.aop_dir); 
-               goto release; 
-       
-       
-       size = AOP_SIZE(result);
-       while (size--) {
-               
-               if(AOP_TYPE(left) == AOP_ACC) 
-                       emitpcode(POC_XORLW, popGetLit(0xff));
-               else
-                       emitpcode(POC_COMFW,popGet(AOP(left),offset));
-               
-               emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-               
-       }
-       
-       
+  operand *left, *result;
+  int size, offset=0;  
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp((left = IC_LEFT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  /* if both are in bit space then 
+  a special case */
+  if (AOP_TYPE(result) == AOP_CRY &&
+    AOP_TYPE(left) == AOP_CRY ) { 
+    
+    pic14_emitcode("mov","c,%s",left->aop->aopu.aop_dir); 
+    pic14_emitcode("cpl","c"); 
+    pic14_emitcode("mov","%s,c",result->aop->aopu.aop_dir); 
+    goto release; 
+  } 
+  
+  size = AOP_SIZE(result);
+  while (size--) {
+    
+    if(AOP_TYPE(left) == AOP_ACC) 
+      emitpcode(POC_XORLW, popGetLit(0xff));
+    else
+      emitpcode(POC_COMFW,popGet(AOP(left),offset));
+    
+    emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+    
+  }
+  
+  
 release:
-       /* release the aops */
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
-       freeAsmop(result,NULL,ic,TRUE);
+  /* release the aops */
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -1903,26 +1902,26 @@ release:
 /*-----------------------------------------------------------------*/
 static void genUminusFloat(operand *op,operand *result)
 {
-       int size ,offset =0 ;
-       char *l;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* for this we just need to flip the 
-       first it then copy the rest in place */
-       size = AOP_SIZE(op) - 1;
-       l = aopGet(AOP(op),3,FALSE,FALSE);
-       
-       MOVA(l);    
-       
-       pic14_emitcode("cpl","acc.7");
-       aopPut(AOP(result),"a",3);    
-       
-       while(size--) {
-               aopPut(AOP(result),
-                       aopGet(AOP(op),offset,FALSE,FALSE),
-                       offset);
-               offset++;
-       }          
+  int size ,offset =0 ;
+  char *l;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* for this we just need to flip the 
+  first it then copy the rest in place */
+  size = AOP_SIZE(op) - 1;
+  l = aopGet(AOP(op),3,FALSE,FALSE);
+  
+  MOVA(l);    
+  
+  pic14_emitcode("cpl","acc.7");
+  aopPut(AOP(result),"a",3);    
+  
+  while(size--) {
+    aopPut(AOP(result),
+      aopGet(AOP(op),offset,FALSE,FALSE),
+      offset);
+    offset++;
+  }          
 }
 
 /*-----------------------------------------------------------------*/
@@ -1930,58 +1929,58 @@ static void genUminusFloat(operand *op,operand *result)
 /*-----------------------------------------------------------------*/
 static void genUminus (iCode *ic)
 {
-       int size, i;
-       sym_link *optype, *rtype;
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* assign asmops */
-       aopOp(IC_LEFT(ic),ic,FALSE);
-       aopOp(IC_RESULT(ic),ic,TRUE);
-       
-       /* if both in bit space then special
-       case */
-       if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY &&
-               AOP_TYPE(IC_LEFT(ic)) == AOP_CRY ) { 
-               
-               emitpcode(POC_BCF,   popGet(AOP(IC_RESULT(ic)),0));
-               emitpcode(POC_BTFSS, popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_BSF,   popGet(AOP(IC_RESULT(ic)),0));
-               
-               goto release; 
-       
-       
-       optype = operandType(IC_LEFT(ic));
-       rtype = operandType(IC_RESULT(ic));
-       
-       /* if float then do float stuff */
-       if (IS_FLOAT(optype)) {
-               genUminusFloat(IC_LEFT(ic),IC_RESULT(ic));
-               goto release;
-       }
-       
-       /* otherwise subtract from zero by taking the 2's complement */
-       size = AOP_SIZE(IC_LEFT(ic));
-       
-       for(i=0; i<size; i++) {
-               if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
-                       emitpcode(POC_COMF,  popGet(AOP(IC_LEFT(ic)),i));
-               else {
-                       emitpcode(POC_COMFW, popGet(AOP(IC_LEFT(ic)),i));
-                       emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),i));
-               }
-       }
-       
-       emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),0));
-       for(i=1; i<size; i++) {
-               emitSKPNZ;
-               emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),i));
-       }
-       
+  int size, i;
+  sym_link *optype, *rtype;
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* assign asmops */
+  aopOp(IC_LEFT(ic),ic,FALSE);
+  aopOp(IC_RESULT(ic),ic,TRUE);
+  
+  /* if both in bit space then special
+  case */
+  if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY &&
+    AOP_TYPE(IC_LEFT(ic)) == AOP_CRY ) { 
+    
+    emitpcode(POC_BCF,   popGet(AOP(IC_RESULT(ic)),0));
+    emitpcode(POC_BTFSS, popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_BSF,   popGet(AOP(IC_RESULT(ic)),0));
+    
+    goto release; 
+  } 
+  
+  optype = operandType(IC_LEFT(ic));
+  rtype = operandType(IC_RESULT(ic));
+  
+  /* if float then do float stuff */
+  if (IS_FLOAT(optype)) {
+    genUminusFloat(IC_LEFT(ic),IC_RESULT(ic));
+    goto release;
+  }
+  
+  /* otherwise subtract from zero by taking the 2's complement */
+  size = AOP_SIZE(IC_LEFT(ic));
+  
+  for(i=0; i<size; i++) {
+    if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
+      emitpcode(POC_COMF,  popGet(AOP(IC_LEFT(ic)),i));
+    else {
+      emitpcode(POC_COMFW, popGet(AOP(IC_LEFT(ic)),i));
+      emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),i));
+    }
+  }
+  
+  emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),0));
+  for(i=1; i<size; i++) {
+    emitSKPNZ;
+    emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),i));
+  }
+  
 release:
-       /* release the aops */
-       freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);    
+  /* release the aops */
+  freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? 0 : 1));
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);    
 }
 
 /*-----------------------------------------------------------------*/
@@ -1989,141 +1988,141 @@ release:
 /*-----------------------------------------------------------------*/
 static void saveRegisters(iCode *lic) 
 {
-       int i;
-       iCode *ic;
-       bitVect *rsave;
-       sym_link *dtype;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* look for call */
-       for (ic = lic ; ic ; ic = ic->next) 
-               if (ic->op == CALL || ic->op == PCALL)
-                       break;
-               
-               if (!ic) {
-                       fprintf(stderr,"found parameter push with no function call\n");
-                       return ;
-               }
-               
-               /* if the registers have been saved already then
-               do nothing */
-               if (ic->regsSaved || IFFUNC_CALLEESAVES(OP_SYMBOL(IC_LEFT(ic))->type))
-                       return ;
-               
-                       /* find the registers in use at this time 
-               and push them away to safety */
-               rsave = bitVectCplAnd(bitVectCopy(ic->rMask),
-                       ic->rUsed);
-               
-               ic->regsSaved = 1;
-               if (options.useXstack) {
-                       if (bitVectBitValue(rsave,R0_IDX))
-                               pic14_emitcode("mov","b,r0");
-                       pic14_emitcode("mov","r0,%s",spname);
-                       for (i = 0 ; i < pic14_nRegs ; i++) {
-                               if (bitVectBitValue(rsave,i)) {
-                                       if (i == R0_IDX)
-                                               pic14_emitcode("mov","a,b");
-                                       else
-                                               pic14_emitcode("mov","a,%s",pic14_regWithIdx(i)->name);
-                                       pic14_emitcode("movx","@r0,a");
-                                       pic14_emitcode("inc","r0");
-                               }
-                       }
-                       pic14_emitcode("mov","%s,r0",spname);
-                       if (bitVectBitValue(rsave,R0_IDX))
-                               pic14_emitcode("mov","r0,b");       
-               }// else
-               //for (i = 0 ; i < pic14_nRegs ; i++) {
-               //    if (bitVectBitValue(rsave,i))
-               //      pic14_emitcode("push","%s",pic14_regWithIdx(i)->dname);
-               //}
-               
-               dtype = operandType(IC_LEFT(ic));
-               if (currFunc && dtype && 
-                       (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)) &&
-                       IFFUNC_ISISR(currFunc->type) &&
-                       !ic->bankSaved) 
-                       
-                       saverbank(FUNC_REGBANK(dtype),ic,TRUE);
-               
+  int i;
+  iCode *ic;
+  bitVect *rsave;
+  sym_link *dtype;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* look for call */
+  for (ic = lic ; ic ; ic = ic->next) 
+    if (ic->op == CALL || ic->op == PCALL)
+      break;
+    
+    if (!ic) {
+      fprintf(stderr,"found parameter push with no function call\n");
+      return ;
+    }
+    
+    /* if the registers have been saved already then
+    do nothing */
+    if (ic->regsSaved || IFFUNC_CALLEESAVES(OP_SYMBOL(IC_LEFT(ic))->type))
+      return ;
+    
+      /* find the registers in use at this time 
+    and push them away to safety */
+    rsave = bitVectCplAnd(bitVectCopy(ic->rMask),
+      ic->rUsed);
+    
+    ic->regsSaved = 1;
+    if (options.useXstack) {
+      if (bitVectBitValue(rsave,R0_IDX))
+        pic14_emitcode("mov","b,r0");
+      pic14_emitcode("mov","r0,%s",spname);
+      for (i = 0 ; i < pic14_nRegs ; i++) {
+        if (bitVectBitValue(rsave,i)) {
+          if (i == R0_IDX)
+            pic14_emitcode("mov","a,b");
+          else
+            pic14_emitcode("mov","a,%s",pic14_regWithIdx(i)->name);
+          pic14_emitcode("movx","@r0,a");
+          pic14_emitcode("inc","r0");
+        }
+      }
+      pic14_emitcode("mov","%s,r0",spname);
+      if (bitVectBitValue(rsave,R0_IDX))
+        pic14_emitcode("mov","r0,b");     
+    }// else
+    //for (i = 0 ; i < pic14_nRegs ; i++) {
+    //    if (bitVectBitValue(rsave,i))
+    //  pic14_emitcode("push","%s",pic14_regWithIdx(i)->dname);
+    //}
+    
+    dtype = operandType(IC_LEFT(ic));
+    if (currFunc && dtype && 
+      (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)) &&
+      IFFUNC_ISISR(currFunc->type) &&
+      !ic->bankSaved) 
+      
+      saverbank(FUNC_REGBANK(dtype),ic,TRUE);
+    
 }
 /*-----------------------------------------------------------------*/
 /* unsaveRegisters - pop the pushed registers                      */
 /*-----------------------------------------------------------------*/
 static void unsaveRegisters (iCode *ic)
 {
-       int i;
-       bitVect *rsave;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* find the registers in use at this time 
-       and push them away to safety */
-       rsave = bitVectCplAnd(bitVectCopy(ic->rMask),
-               ic->rUsed);
-       
-       if (options.useXstack) {
-               pic14_emitcode("mov","r0,%s",spname);   
-               for (i =  pic14_nRegs ; i >= 0 ; i--) {
-                       if (bitVectBitValue(rsave,i)) {
-                               pic14_emitcode("dec","r0");
-                               pic14_emitcode("movx","a,@r0");
-                               if (i == R0_IDX)
-                                       pic14_emitcode("mov","b,a");
-                               else
-                                       pic14_emitcode("mov","%s,a",pic14_regWithIdx(i)->name);
-                       }           
-                       
-               }
-               pic14_emitcode("mov","%s,r0",spname);
-               if (bitVectBitValue(rsave,R0_IDX))
-                       pic14_emitcode("mov","r0,b");
-       } //else
-       //for (i =  pic14_nRegs ; i >= 0 ; i--) {
-       //    if (bitVectBitValue(rsave,i))
-       //      pic14_emitcode("pop","%s",pic14_regWithIdx(i)->dname);
-       //}
-       
+  int i;
+  bitVect *rsave;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* find the registers in use at this time 
+  and push them away to safety */
+  rsave = bitVectCplAnd(bitVectCopy(ic->rMask),
+    ic->rUsed);
+  
+  if (options.useXstack) {
+    pic14_emitcode("mov","r0,%s",spname); 
+    for (i =  pic14_nRegs ; i >= 0 ; i--) {
+      if (bitVectBitValue(rsave,i)) {
+        pic14_emitcode("dec","r0");
+        pic14_emitcode("movx","a,@r0");
+        if (i == R0_IDX)
+          pic14_emitcode("mov","b,a");
+        else
+          pic14_emitcode("mov","%s,a",pic14_regWithIdx(i)->name);
+      }     
+      
+    }
+    pic14_emitcode("mov","%s,r0",spname);
+    if (bitVectBitValue(rsave,R0_IDX))
+      pic14_emitcode("mov","r0,b");
+  } //else
+  //for (i =  pic14_nRegs ; i >= 0 ; i--) {
+  //    if (bitVectBitValue(rsave,i))
+  //  pic14_emitcode("pop","%s",pic14_regWithIdx(i)->dname);
+  //}
+  
 }  
 
 
 /*-----------------------------------------------------------------*/
-/* pushSide -                                                     */
+/* pushSide -                */
 /*-----------------------------------------------------------------*/
 static void pushSide(operand * oper, int size)
 {
 #if 0
-       int offset = 0;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       while (size--) {
-               char *l = aopGet(AOP(oper),offset++,FALSE,TRUE);
-               if (AOP_TYPE(oper) != AOP_REG &&
-                       AOP_TYPE(oper) != AOP_DIR &&
-                       strcmp(l,"a") ) {
-                       pic14_emitcode("mov","a,%s",l);
-                       pic14_emitcode("push","acc");
-               } else
-                       pic14_emitcode("push","%s",l);
-       }
+  int offset = 0;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  while (size--) {
+    char *l = aopGet(AOP(oper),offset++,FALSE,TRUE);
+    if (AOP_TYPE(oper) != AOP_REG &&
+      AOP_TYPE(oper) != AOP_DIR &&
+      strcmp(l,"a") ) {
+      pic14_emitcode("mov","a,%s",l);
+      pic14_emitcode("push","acc");
+    } else
+      pic14_emitcode("push","%s",l);
+  }
 #endif
 }
 
 /*-----------------------------------------------------------------*/
-/* assignResultValue -                                            */
+/* assignResultValue -               */
 /*-----------------------------------------------------------------*/
 static void assignResultValue(operand * oper)
 {
-       int size = AOP_SIZE(oper);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       DEBUGpic14_AopType(__LINE__,oper,NULL,NULL);
-       
-       while (size--) {
-               if (GpsuedoStkPtr++)
-                       emitpcode(POC_MOVFW,popRegFromIdx(Gstack_base_addr+2-GpsuedoStkPtr));
-               emitpcode(POC_MOVWF, popGet(AOP(oper),size));
-       }
+  int size = AOP_SIZE(oper);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  DEBUGpic14_AopType(__LINE__,oper,NULL,NULL);
+  
+  while (size--) {
+    if (GpsuedoStkPtr++)
+      emitpcode(POC_MOVFW,popRegFromIdx(Gstack_base_addr+2-GpsuedoStkPtr));
+    emitpcode(POC_MOVWF, popGet(AOP(oper),size));
+  }
 }
 
 
@@ -2132,59 +2131,59 @@ static void assignResultValue(operand * oper)
 /*-----------------------------------------------------------------*/
 static void genIpush (iCode *ic)
 {
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
 #if 0
-       int size, offset = 0 ;
-       char *l;
-       
-       
-       /* if this is not a parm push : ie. it is spill push 
-       and spill push is always done on the local stack */
-       if (!ic->parmPush) {
-               
-               /* and the item is spilt then do nothing */
-               if (OP_SYMBOL(IC_LEFT(ic))->isspilt)
-                       return ;
-               
-               aopOp(IC_LEFT(ic),ic,FALSE);
-               size = AOP_SIZE(IC_LEFT(ic));
-               /* push it on the stack */
-               while(size--) {
-                       l = aopGet(AOP(IC_LEFT(ic)),offset++,FALSE,TRUE);
-                       if (*l == '#') {
-                               MOVA(l);
-                               l = "acc";
-                       }
-                       pic14_emitcode("push","%s",l);
-               }
-               return ;        
-       }
-       
-       /* this is a paramter push: in this case we call
-       the routine to find the call and save those
-       registers that need to be saved */   
-       saveRegisters(ic);
-       
-       /* then do the push */
-       aopOp(IC_LEFT(ic),ic,FALSE);
-       
-       
-       // pushSide(IC_LEFT(ic), AOP_SIZE(IC_LEFT(ic)));
-       size = AOP_SIZE(IC_LEFT(ic));
-       
-       while (size--) {
-               l = aopGet(AOP(IC_LEFT(ic)),offset++,FALSE,TRUE);
-               if (AOP_TYPE(IC_LEFT(ic)) != AOP_REG && 
-                       AOP_TYPE(IC_LEFT(ic)) != AOP_DIR &&
-                       strcmp(l,"a") ) {
-                       pic14_emitcode("mov","a,%s",l);
-                       pic14_emitcode("push","acc");
-               } else
-                       pic14_emitcode("push","%s",l);
-       }       
-       
-       freeAsmop(IC_LEFT(ic),NULL,ic,TRUE);
+  int size, offset = 0 ;
+  char *l;
+  
+  
+  /* if this is not a parm push : ie. it is spill push 
+  and spill push is always done on the local stack */
+  if (!ic->parmPush) {
+    
+    /* and the item is spilt then do nothing */
+    if (OP_SYMBOL(IC_LEFT(ic))->isspilt)
+      return ;
+    
+    aopOp(IC_LEFT(ic),ic,FALSE);
+    size = AOP_SIZE(IC_LEFT(ic));
+    /* push it on the stack */
+    while(size--) {
+      l = aopGet(AOP(IC_LEFT(ic)),offset++,FALSE,TRUE);
+      if (*l == '#') {
+        MOVA(l);
+        l = "acc";
+      }
+      pic14_emitcode("push","%s",l);
+    }
+    return ;        
+  }
+  
+  /* this is a paramter push: in this case we call
+  the routine to find the call and save those
+  registers that need to be saved */   
+  saveRegisters(ic);
+  
+  /* then do the push */
+  aopOp(IC_LEFT(ic),ic,FALSE);
+  
+  
+  // pushSide(IC_LEFT(ic), AOP_SIZE(IC_LEFT(ic)));
+  size = AOP_SIZE(IC_LEFT(ic));
+  
+  while (size--) {
+    l = aopGet(AOP(IC_LEFT(ic)),offset++,FALSE,TRUE);
+    if (AOP_TYPE(IC_LEFT(ic)) != AOP_REG && 
+      AOP_TYPE(IC_LEFT(ic)) != AOP_DIR &&
+      strcmp(l,"a") ) {
+      pic14_emitcode("mov","a,%s",l);
+      pic14_emitcode("push","acc");
+    } else
+      pic14_emitcode("push","%s",l);
+  }       
+  
+  freeAsmop(IC_LEFT(ic),NULL,ic,TRUE);
 #endif
 }
 
@@ -2193,23 +2192,23 @@ static void genIpush (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genIpop (iCode *ic)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
+  DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
 #if 0
-       int size,offset ;
-       
-       
-       /* if the temp was not pushed then */
-       if (OP_SYMBOL(IC_LEFT(ic))->isspilt)
-               return ;
-       
-       aopOp(IC_LEFT(ic),ic,FALSE);
-       size = AOP_SIZE(IC_LEFT(ic));
-       offset = (size-1);
-       while (size--) 
-               pic14_emitcode("pop","%s",aopGet(AOP(IC_LEFT(ic)),offset--,
-               FALSE,TRUE));
-       
-       freeAsmop(IC_LEFT(ic),NULL,ic,TRUE);
+  int size,offset ;
+  
+  
+  /* if the temp was not pushed then */
+  if (OP_SYMBOL(IC_LEFT(ic))->isspilt)
+    return ;
+  
+  aopOp(IC_LEFT(ic),ic,FALSE);
+  size = AOP_SIZE(IC_LEFT(ic));
+  offset = (size-1);
+  while (size--) 
+    pic14_emitcode("pop","%s",aopGet(AOP(IC_LEFT(ic)),offset--,
+    FALSE,TRUE));
+  
+  freeAsmop(IC_LEFT(ic),NULL,ic,TRUE);
 #endif
 }
 
@@ -2218,46 +2217,46 @@ static void genIpop (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void unsaverbank (int bank,iCode *ic,bool popPsw)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
+  DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
 #if 0
-       int i;
-       asmop *aop ;
-       regs *r = NULL;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (popPsw) {
-               if (options.useXstack) {
-                       aop = newAsmop(0);
-                       r = getFreePtr(ic,&aop,FALSE);
-                       
-                       
-                       pic14_emitcode("mov","%s,_spx",r->name);
-                       pic14_emitcode("movx","a,@%s",r->name);
-                       pic14_emitcode("mov","psw,a");
-                       pic14_emitcode("dec","%s",r->name);
-                       
-               }else
-                       pic14_emitcode ("pop","psw");
-       }
-       
-       for (i = (pic14_nRegs - 1) ; i >= 0 ;i--) {
-               if (options.useXstack) {       
-                       pic14_emitcode("movx","a,@%s",r->name);
-                       //pic14_emitcode("mov","(%s+%d),a",
-                       //       regspic14[i].base,8*bank+regspic14[i].offset);
-                       pic14_emitcode("dec","%s",r->name);
-                       
-               } else 
-                       pic14_emitcode("pop",""); //"(%s+%d)",
-               //regspic14[i].base,8*bank); //+regspic14[i].offset);
-       }
-       
-       if (options.useXstack) {
-               
-               pic14_emitcode("mov","_spx,%s",r->name);
-               freeAsmop(NULL,aop,ic,TRUE);
-               
-       }
+  int i;
+  asmop *aop ;
+  regs *r = NULL;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (popPsw) {
+    if (options.useXstack) {
+      aop = newAsmop(0);
+      r = getFreePtr(ic,&aop,FALSE);
+      
+      
+      pic14_emitcode("mov","%s,_spx",r->name);
+      pic14_emitcode("movx","a,@%s",r->name);
+      pic14_emitcode("mov","psw,a");
+      pic14_emitcode("dec","%s",r->name);
+      
+    }else
+      pic14_emitcode ("pop","psw");
+  }
+  
+  for (i = (pic14_nRegs - 1) ; i >= 0 ;i--) {
+    if (options.useXstack) {       
+      pic14_emitcode("movx","a,@%s",r->name);
+      //pic14_emitcode("mov","(%s+%d),a",
+      //       regspic14[i].base,8*bank+regspic14[i].offset);
+      pic14_emitcode("dec","%s",r->name);
+      
+    } else 
+      pic14_emitcode("pop",""); //"(%s+%d)",
+    //regspic14[i].base,8*bank); //+regspic14[i].offset);
+  }
+  
+  if (options.useXstack) {
+    
+    pic14_emitcode("mov","_spx,%s",r->name);
+    freeAsmop(NULL,aop,ic,TRUE);
+    
+  }
 #endif 
 }
 
@@ -2266,47 +2265,47 @@ static void unsaverbank (int bank,iCode *ic,bool popPsw)
 /*-----------------------------------------------------------------*/
 static void saverbank (int bank, iCode *ic, bool pushPsw)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
+  DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
 #if 0
-       int i;
-       asmop *aop ;
-       regs *r = NULL;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (options.useXstack) {
-               
-               aop = newAsmop(0);
-               r = getFreePtr(ic,&aop,FALSE);  
-               pic14_emitcode("mov","%s,_spx",r->name);
-               
-       }
-       
-       for (i = 0 ; i < pic14_nRegs ;i++) {
-               if (options.useXstack) {
-                       pic14_emitcode("inc","%s",r->name);
-                       //pic14_emitcode("mov","a,(%s+%d)",
-                       //         regspic14[i].base,8*bank+regspic14[i].offset);
-                       pic14_emitcode("movx","@%s,a",r->name);           
-               } else 
-                       pic14_emitcode("push","");// "(%s+%d)",
-               //regspic14[i].base,8*bank+regspic14[i].offset);
-       }
-       
-       if (pushPsw) {
-               if (options.useXstack) {
-                       pic14_emitcode("mov","a,psw");
-                       pic14_emitcode("movx","@%s,a",r->name); 
-                       pic14_emitcode("inc","%s",r->name);
-                       pic14_emitcode("mov","_spx,%s",r->name);       
-                       freeAsmop (NULL,aop,ic,TRUE);
-                       
-               } else
-                       pic14_emitcode("push","psw");
-               
-               pic14_emitcode("mov","psw,#0x%02x",(bank << 3)&0x00ff);
-       }
-       ic->bankSaved = 1;
-#endif
+  int i;
+  asmop *aop ;
+  regs *r = NULL;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (options.useXstack) {
+    
+    aop = newAsmop(0);
+    r = getFreePtr(ic,&aop,FALSE);  
+    pic14_emitcode("mov","%s,_spx",r->name);
+    
+  }
+  
+  for (i = 0 ; i < pic14_nRegs ;i++) {
+    if (options.useXstack) {
+      pic14_emitcode("inc","%s",r->name);
+      //pic14_emitcode("mov","a,(%s+%d)",
+      //         regspic14[i].base,8*bank+regspic14[i].offset);
+      pic14_emitcode("movx","@%s,a",r->name);           
+    } else 
+      pic14_emitcode("push","");// "(%s+%d)",
+    //regspic14[i].base,8*bank+regspic14[i].offset);
+  }
+  
+  if (pushPsw) {
+    if (options.useXstack) {
+      pic14_emitcode("mov","a,psw");
+      pic14_emitcode("movx","@%s,a",r->name); 
+      pic14_emitcode("inc","%s",r->name);
+      pic14_emitcode("mov","_spx,%s",r->name);       
+      freeAsmop (NULL,aop,ic,TRUE);
+      
+    } else
+      pic14_emitcode("push","psw");
+    
+    pic14_emitcode("mov","psw,#0x%02x",(bank << 3)&0x00ff);
+  }
+  ic->bankSaved = 1;
+#endif
 }
 
 /*-----------------------------------------------------------------*/
@@ -2314,131 +2313,131 @@ static void saverbank (int bank, iCode *ic, bool pushPsw)
 /*-----------------------------------------------------------------*/
 static void genCall (iCode *ic)
 {
-       sym_link *dtype;   
-       symbol *sym;
-       unsigned char *name;
-       int isExtern;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       /* if caller saves & we have not saved then */
-       if (!ic->regsSaved)
-               saveRegisters(ic);
-       
-               /* if we are calling a function that is not using
-               the same register bank then we need to save the
-       destination registers on the stack */
-       dtype = operandType(IC_LEFT(ic));
-       if (currFunc && dtype && 
-               (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)) &&
-               IFFUNC_ISISR(currFunc->type) &&
-               !ic->bankSaved) 
-               
-               saverbank(FUNC_REGBANK(dtype),ic,TRUE);
-       
-       /* if send set is not empty the assign */
-       if (_G.sendSet) {
-               iCode *sic;
-               /* For the Pic port, there is no data stack.
-               * So parameters passed to functions are stored
-               * in registers. (The pCode optimizer will get
-               * rid of most of these :).
-               */
-               int psuedoStkPtr=-1;
-               int firstTimeThruLoop = 1;
-               
-               _G.sendSet = reverseSet(_G.sendSet);
-               
-               /* First figure how many parameters are getting passed */
-               for (sic = setFirstItem(_G.sendSet) ; sic ; 
-               sic = setNextItem(_G.sendSet)) {
-                       
-                       aopOp(IC_LEFT(sic),sic,FALSE);
-                       psuedoStkPtr += AOP_SIZE(IC_LEFT(sic));
-                       freeAsmop (IC_LEFT(sic),NULL,sic,FALSE);
-               }
-               
-               for (sic = setFirstItem(_G.sendSet) ; sic ; 
-               sic = setNextItem(_G.sendSet)) {
-                       int size, offset = 0;
-                       
-                       aopOp(IC_LEFT(sic),sic,FALSE);
-                       size = AOP_SIZE(IC_LEFT(sic));
-                       
-                       while (size--) {
-                               DEBUGpic14_emitcode ("; ","%d left %s",__LINE__,
-                                       AopType(AOP_TYPE(IC_LEFT(sic))));
-                               
-                               if(!firstTimeThruLoop) {
-                               /* If this is not the first time we've been through the loop
-                               * then we need to save the parameter in a temporary
-                               * register. The last byte of the last parameter is
-                                       * passed in W. */
-                                       emitpcode(POC_MOVWF,popRegFromIdx(Gstack_base_addr - --psuedoStkPtr));
-                                       
-                               }
-                               firstTimeThruLoop=0;
-                               
-                               mov2w (AOP(IC_LEFT(sic)),  offset);
-                               offset++;
-                       }
-                       freeAsmop (IC_LEFT(sic),NULL,sic,TRUE);
-               }
-               _G.sendSet = NULL;
-       }
-       /* make the call */
-       sym = OP_SYMBOL(IC_LEFT(ic));
-       name = sym->rname[0] ? sym->rname : sym->name;
-       isExtern = IS_EXTERN(sym->etype);
-       if (isExtern) {
-               emitpcode(POC_PAGESEL,popGetWithString(name,1)); /* Extern functions maybe on another page - must call pagesel */
-       }
-       emitpcode(POC_CALL,popGetWithString(name,isExtern));
-       if (isExtern) {
-               emitpcode(POC_PAGESEL,popGetWithString("$",0)); /* May have returned from another page - must call pagesel */
-       }
-       GpsuedoStkPtr=0;
-       /* if we need assign a result value */
-       if ((IS_ITEMP(IC_RESULT(ic)) && 
-               (OP_SYMBOL(IC_RESULT(ic))->nRegs ||
-               OP_SYMBOL(IC_RESULT(ic))->spildir )) ||
-               IS_TRUE_SYMOP(IC_RESULT(ic)) ) {
-               
-               _G.accInUse++;
-               aopOp(IC_RESULT(ic),ic,FALSE);
-               _G.accInUse--;
-               
-               assignResultValue(IC_RESULT(ic));
-               
-               DEBUGpic14_emitcode ("; ","%d left %s",__LINE__,
-                       AopType(AOP_TYPE(IC_RESULT(ic))));
-               
-               freeAsmop(IC_RESULT(ic),NULL, ic,TRUE);
-       }
-       
-       /* adjust the stack for parameters if 
-       required */
-       if (ic->parmBytes) {
-               int i;
-               if (ic->parmBytes > 3) {
-                       pic14_emitcode("mov","a,%s",spname);
-                       pic14_emitcode("add","a,#0x%02x", (- ic->parmBytes) & 0xff);
-                       pic14_emitcode("mov","%s,a",spname);
-               } else 
-                       for ( i = 0 ; i <  ic->parmBytes ;i++)
-                               pic14_emitcode("dec","%s",spname);
-                       
-       }
-       
-       /* if register bank was saved then pop them */
-       if (ic->bankSaved)
-               unsaverbank(FUNC_REGBANK(dtype),ic,TRUE);
-       
-       /* if we hade saved some registers then unsave them */
-       if (ic->regsSaved && !IFFUNC_CALLEESAVES(dtype))
-               unsaveRegisters (ic);
-       
-       
+  sym_link *dtype;   
+  symbol *sym;
+  unsigned char *name;
+  int isExtern;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  /* if caller saves & we have not saved then */
+  if (!ic->regsSaved)
+    saveRegisters(ic);
+  
+    /* if we are calling a function that is not using
+    the same register bank then we need to save the
+  destination registers on the stack */
+  dtype = operandType(IC_LEFT(ic));
+  if (currFunc && dtype && 
+    (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)) &&
+    IFFUNC_ISISR(currFunc->type) &&
+    !ic->bankSaved) 
+    
+    saverbank(FUNC_REGBANK(dtype),ic,TRUE);
+  
+  /* if send set is not empty the assign */
+  if (_G.sendSet) {
+    iCode *sic;
+    /* For the Pic port, there is no data stack.
+    * So parameters passed to functions are stored
+    * in registers. (The pCode optimizer will get
+    * rid of most of these :).
+    */
+    int psuedoStkPtr=-1;
+    int firstTimeThruLoop = 1;
+    
+    _G.sendSet = reverseSet(_G.sendSet);
+    
+    /* First figure how many parameters are getting passed */
+    for (sic = setFirstItem(_G.sendSet) ; sic ; 
+    sic = setNextItem(_G.sendSet)) {
+      
+      aopOp(IC_LEFT(sic),sic,FALSE);
+      psuedoStkPtr += AOP_SIZE(IC_LEFT(sic));
+      freeAsmop (IC_LEFT(sic),NULL,sic,FALSE);
+    }
+    
+    for (sic = setFirstItem(_G.sendSet) ; sic ; 
+    sic = setNextItem(_G.sendSet)) {
+      int size, offset = 0;
+      
+      aopOp(IC_LEFT(sic),sic,FALSE);
+      size = AOP_SIZE(IC_LEFT(sic));
+      
+      while (size--) {
+        DEBUGpic14_emitcode ("; ","%d left %s",__LINE__,
+          AopType(AOP_TYPE(IC_LEFT(sic))));
+        
+        if(!firstTimeThruLoop) {
+        /* If this is not the first time we've been through the loop
+        * then we need to save the parameter in a temporary
+        * register. The last byte of the last parameter is
+          * passed in W. */
+          emitpcode(POC_MOVWF,popRegFromIdx(Gstack_base_addr - --psuedoStkPtr));
+          
+        }
+        firstTimeThruLoop=0;
+        
+        mov2w (AOP(IC_LEFT(sic)),  offset);
+        offset++;
+      }
+      freeAsmop (IC_LEFT(sic),NULL,sic,TRUE);
+    }
+    _G.sendSet = NULL;
+  }
+  /* make the call */
+  sym = OP_SYMBOL(IC_LEFT(ic));
+  name = sym->rname[0] ? sym->rname : sym->name;
+  isExtern = IS_EXTERN(sym->etype);
+  if (isExtern) {
+    emitpcode(POC_PAGESEL,popGetWithString(name,1)); /* Extern functions maybe on another page - must call pagesel */
+  }
+  emitpcode(POC_CALL,popGetWithString(name,isExtern));
+  if (isExtern) {
+    emitpcode(POC_PAGESEL,popGetWithString("$",0)); /* May have returned from another page - must call pagesel */
+  }
+  GpsuedoStkPtr=0;
+  /* if we need assign a result value */
+  if ((IS_ITEMP(IC_RESULT(ic)) && 
+    (OP_SYMBOL(IC_RESULT(ic))->nRegs ||
+    OP_SYMBOL(IC_RESULT(ic))->spildir )) ||
+    IS_TRUE_SYMOP(IC_RESULT(ic)) ) {
+    
+    _G.accInUse++;
+    aopOp(IC_RESULT(ic),ic,FALSE);
+    _G.accInUse--;
+    
+    assignResultValue(IC_RESULT(ic));
+    
+    DEBUGpic14_emitcode ("; ","%d left %s",__LINE__,
+      AopType(AOP_TYPE(IC_RESULT(ic))));
+    
+    freeAsmop(IC_RESULT(ic),NULL, ic,TRUE);
+  }
+  
+  /* adjust the stack for parameters if 
+  required */
+  if (ic->parmBytes) {
+    int i;
+    if (ic->parmBytes > 3) {
+      pic14_emitcode("mov","a,%s",spname);
+      pic14_emitcode("add","a,#0x%02x", (- ic->parmBytes) & 0xff);
+      pic14_emitcode("mov","%s,a",spname);
+    } else 
+      for ( i = 0 ; i <  ic->parmBytes ;i++)
+        pic14_emitcode("dec","%s",spname);
+      
+  }
+  
+  /* if register bank was saved then pop them */
+  if (ic->bankSaved)
+    unsaverbank(FUNC_REGBANK(dtype),ic,TRUE);
+  
+  /* if we hade saved some registers then unsave them */
+  if (ic->regsSaved && !IFFUNC_CALLEESAVES(dtype))
+    unsaveRegisters (ic);
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2446,95 +2445,95 @@ static void genCall (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genPcall (iCode *ic)
 {
-       sym_link *dtype;
-       symbol *albl = newiTempLabel(NULL);
-       symbol *blbl = newiTempLabel(NULL);
-       PIC_OPCODE poc;
-       pCodeOp *pcop;
-       operand *left;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if caller saves & we have not saved then */
-       if (!ic->regsSaved)
-               saveRegisters(ic);
-       
-               /* if we are calling a function that is not using
-               the same register bank then we need to save the
-       destination registers on the stack */
-       dtype = operandType(IC_LEFT(ic));
-       if (currFunc && dtype && 
-               IFFUNC_ISISR(currFunc->type) &&
-               (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)))
-               saverbank(FUNC_REGBANK(dtype),ic,TRUE);
-       
-       left = IC_LEFT(ic);
-       aopOp(left,ic,FALSE);
-       DEBUGpic14_AopType(__LINE__,left,NULL,NULL);
-       
-       pushSide(IC_LEFT(ic), FPTRSIZE);
-       
-       /* if send set is not empty, assign parameters */
-       if (_G.sendSet) {
-               
-               DEBUGpic14_emitcode ("; ***","%s  %d - WARNING arg-passing to indirect call not supported",__FUNCTION__,__LINE__);
-               /* no way to pass args - W always gets used to make the call */
-       }
-       /* first idea - factor out a common helper function and call it.
-       But don't know how to get it generated only once in its own block
-       
-         if(AOP_TYPE(IC_LEFT(ic)) == AOP_DIR) {
-         char *rname;
-         char *buffer;
-         rname = IC_LEFT(ic)->aop->aopu.aop_dir;
-         DEBUGpic14_emitcode ("; ***","%s  %d AOP_DIR %s",__FUNCTION__,__LINE__,rname);
-         buffer = Safe_calloc(1,strlen(rname)+16);
-         sprintf(buffer, "%s_goto_helper", rname);
-         addpCode2pBlock(pb,newpCode(POC_CALL,newpCodeOp(buffer,PO_STR)));
-         free(buffer);
-         }
-       */
-       emitpcode(POC_CALL,popGetLabel(albl->key));
-       pcop = popGetLabel(blbl->key);
-       emitpcode(POC_PAGESEL,popGetWithString(pcop->name,0)); /* Must restore PCLATH before goto, without destroying W */
-       emitpcode(POC_GOTO,pcop);
-       emitpLabel(albl->key);
-       
-       poc = ( (AOP_TYPE(left) == AOP_PCODE) ? POC_MOVLW : POC_MOVFW);
-       
-       emitpcode(poc,popGet(AOP(left),1));
-       emitpcode(POC_MOVWF,popCopyReg(&pc_pclath));
-       emitpcode(poc,popGet(AOP(left),0));
-       emitpcode(POC_MOVWF,popCopyReg(&pc_pcl));
-       
-       emitpLabel(blbl->key);
-       
-       freeAsmop(IC_LEFT(ic),NULL,ic,TRUE); 
-       
-       /* if we need to assign a result value */
-       if ((IS_ITEMP(IC_RESULT(ic)) &&
-               (OP_SYMBOL(IC_RESULT(ic))->nRegs ||
-               OP_SYMBOL(IC_RESULT(ic))->spildir)) ||
-               IS_TRUE_SYMOP(IC_RESULT(ic)) ) {
-               
-               _G.accInUse++;
-               aopOp(IC_RESULT(ic),ic,FALSE);
-               _G.accInUse--;
-               
-               assignResultValue(IC_RESULT(ic));
-               
-               freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
-       }
-       
-       /* if register bank was saved then unsave them */
-       if (currFunc && dtype && 
-               (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)))
-               unsaverbank(FUNC_REGBANK(dtype),ic,TRUE);
-       
-               /* if we hade saved some registers then
-       unsave them */
-       if (ic->regsSaved)
-               unsaveRegisters (ic);
-       
+  sym_link *dtype;
+  symbol *albl = newiTempLabel(NULL);
+  symbol *blbl = newiTempLabel(NULL);
+  PIC_OPCODE poc;
+  pCodeOp *pcop;
+  operand *left;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if caller saves & we have not saved then */
+  if (!ic->regsSaved)
+    saveRegisters(ic);
+  
+    /* if we are calling a function that is not using
+    the same register bank then we need to save the
+  destination registers on the stack */
+  dtype = operandType(IC_LEFT(ic));
+  if (currFunc && dtype && 
+    IFFUNC_ISISR(currFunc->type) &&
+    (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)))
+    saverbank(FUNC_REGBANK(dtype),ic,TRUE);
+  
+  left = IC_LEFT(ic);
+  aopOp(left,ic,FALSE);
+  DEBUGpic14_AopType(__LINE__,left,NULL,NULL);
+  
+  pushSide(IC_LEFT(ic), FPTRSIZE);
+  
+  /* if send set is not empty, assign parameters */
+  if (_G.sendSet) {
+    
+    DEBUGpic14_emitcode ("; ***","%s  %d - WARNING arg-passing to indirect call not supported",__FUNCTION__,__LINE__);
+    /* no way to pass args - W always gets used to make the call */
+  }
+  /* first idea - factor out a common helper function and call it.
+  But don't know how to get it generated only once in its own block
+  
+    if(AOP_TYPE(IC_LEFT(ic)) == AOP_DIR) {
+    char *rname;
+    char *buffer;
+    rname = IC_LEFT(ic)->aop->aopu.aop_dir;
+    DEBUGpic14_emitcode ("; ***","%s  %d AOP_DIR %s",__FUNCTION__,__LINE__,rname);
+    buffer = Safe_calloc(1,strlen(rname)+16);
+    sprintf(buffer, "%s_goto_helper", rname);
+    addpCode2pBlock(pb,newpCode(POC_CALL,newpCodeOp(buffer,PO_STR)));
+    free(buffer);
+    }
+  */
+  emitpcode(POC_CALL,popGetLabel(albl->key));
+  pcop = popGetLabel(blbl->key);
+  emitpcode(POC_PAGESEL,popGetWithString(pcop->name,0)); /* Must restore PCLATH before goto, without destroying W */
+  emitpcode(POC_GOTO,pcop);
+  emitpLabel(albl->key);
+  
+  poc = ( (AOP_TYPE(left) == AOP_PCODE) ? POC_MOVLW : POC_MOVFW);
+  
+  emitpcode(poc,popGet(AOP(left),1));
+  emitpcode(POC_MOVWF,popCopyReg(&pc_pclath));
+  emitpcode(poc,popGet(AOP(left),0));
+  emitpcode(POC_MOVWF,popCopyReg(&pc_pcl));
+  
+  emitpLabel(blbl->key);
+  
+  freeAsmop(IC_LEFT(ic),NULL,ic,TRUE); 
+  
+  /* if we need to assign a result value */
+  if ((IS_ITEMP(IC_RESULT(ic)) &&
+    (OP_SYMBOL(IC_RESULT(ic))->nRegs ||
+    OP_SYMBOL(IC_RESULT(ic))->spildir)) ||
+    IS_TRUE_SYMOP(IC_RESULT(ic)) ) {
+    
+    _G.accInUse++;
+    aopOp(IC_RESULT(ic),ic,FALSE);
+    _G.accInUse--;
+    
+    assignResultValue(IC_RESULT(ic));
+    
+    freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  }
+  
+  /* if register bank was saved then unsave them */
+  if (currFunc && dtype && 
+    (FUNC_REGBANK(currFunc->type) != FUNC_REGBANK(dtype)))
+    unsaverbank(FUNC_REGBANK(dtype),ic,TRUE);
+  
+    /* if we hade saved some registers then
+  unsave them */
+  if (ic->regsSaved)
+    unsaveRegisters (ic);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2542,17 +2541,17 @@ static void genPcall (iCode *ic)
 /*-----------------------------------------------------------------*/
 static int resultRemat (iCode *ic)
 {
-       //    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (SKIP_IC(ic) || ic->op == IFX)
-               return 0;
-       
-       if (IC_RESULT(ic) && IS_ITEMP(IC_RESULT(ic))) {
-               symbol *sym = OP_SYMBOL(IC_RESULT(ic));
-               if (sym->remat && !POINTER_SET(ic)) 
-                       return 1;
-       }
-       
-       return 0;
+  //    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (SKIP_IC(ic) || ic->op == IFX)
+    return 0;
+  
+  if (IC_RESULT(ic) && IS_ITEMP(IC_RESULT(ic))) {
+    symbol *sym = OP_SYMBOL(IC_RESULT(ic));
+    if (sym->remat && !POINTER_SET(ic)) 
+      return 1;
+  }
+  
+  return 0;
 }
 
 #if defined(__BORLANDC__) || defined(_MSC_VER)
@@ -2567,20 +2566,20 @@ static int resultRemat (iCode *ic)
 /*-----------------------------------------------------------------*/
 static bool inExcludeList(char *s)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
-       int i =0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (options.excludeRegs[i] &&
-               STRCASECMP(options.excludeRegs[i],"none") == 0)
-               return FALSE ;
-       
-       for ( i = 0 ; options.excludeRegs[i]; i++) {
-               if (options.excludeRegs[i] &&
-                       STRCASECMP(s,options.excludeRegs[i]) == 0)
-                       return TRUE;
-       }
-       return FALSE ;
+  DEBUGpic14_emitcode ("; ***","%s  %d - WARNING no code generated",__FUNCTION__,__LINE__);
+  int i =0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (options.excludeRegs[i] &&
+    STRCASECMP(options.excludeRegs[i],"none") == 0)
+    return FALSE ;
+  
+  for ( i = 0 ; options.excludeRegs[i]; i++) {
+    if (options.excludeRegs[i] &&
+      STRCASECMP(s,options.excludeRegs[i]) == 0)
+      return TRUE;
+  }
+  return FALSE ;
 }
 #endif
 
@@ -2589,187 +2588,187 @@ static bool inExcludeList(char *s)
 /*-----------------------------------------------------------------*/
 static void genFunction (iCode *ic)
 {
-       symbol *sym;
-       sym_link *ftype;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d curr label offset=%dprevious max_key=%d ",__FUNCTION__,__LINE__,labelOffset,max_key);
-       
-       labelOffset += (max_key+4);
-       max_key=0;
-       GpsuedoStkPtr=0;
-       _G.nRegsSaved = 0;
-       /* create the function header */
-       pic14_emitcode(";","-----------------------------------------");
-       pic14_emitcode(";"," function %s",(sym = OP_SYMBOL(IC_LEFT(ic)))->name);
-       pic14_emitcode(";","-----------------------------------------");
-       
-       pic14_emitcode("","%s:",sym->rname);
-       addpCode2pBlock(pb,newpCodeFunction(NULL,sym->rname,!IS_STATIC (sym->etype)));
-       
-       ftype = operandType(IC_LEFT(ic));
-       
-       /* if critical function then turn interrupts off */
-       if (IFFUNC_ISCRITICAL(ftype))
-               pic14_emitcode("clr","ea");
-       
-               /* here we need to generate the equates for the
-       register bank if required */
+  symbol *sym;
+  sym_link *ftype;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d curr label offset=%dprevious max_key=%d ",__FUNCTION__,__LINE__,labelOffset,max_key);
+  
+  labelOffset += (max_key+4);
+  max_key=0;
+  GpsuedoStkPtr=0;
+  _G.nRegsSaved = 0;
+  /* create the function header */
+  pic14_emitcode(";","-----------------------------------------");
+  pic14_emitcode(";"," function %s",(sym = OP_SYMBOL(IC_LEFT(ic)))->name);
+  pic14_emitcode(";","-----------------------------------------");
+  
+  pic14_emitcode("","%s:",sym->rname);
+  addpCode2pBlock(pb,newpCodeFunction(NULL,sym->rname,!IS_STATIC (sym->etype)));
+  
+  ftype = operandType(IC_LEFT(ic));
+  
+  /* if critical function then turn interrupts off */
+  if (IFFUNC_ISCRITICAL(ftype))
+    pic14_emitcode("clr","ea");
+  
+    /* here we need to generate the equates for the
+  register bank if required */
 #if 0
-       if (FUNC_REGBANK(ftype) != rbank) {
-               int i ;
-               
-               rbank = FUNC_REGBANK(ftype);
-               for ( i = 0 ; i < pic14_nRegs ; i++ ) {
-                       if (strcmp(regspic14[i].base,"0") == 0)
-                               pic14_emitcode("","%s = 0x%02x",
-                               regspic14[i].dname,
-                               8*rbank+regspic14[i].offset);
-                       else
-                               pic14_emitcode ("","%s = %s + 0x%02x",
-                               regspic14[i].dname,
-                               regspic14[i].base,
-                               8*rbank+regspic14[i].offset);
-               }
-       }
+  if (FUNC_REGBANK(ftype) != rbank) {
+    int i ;
+    
+    rbank = FUNC_REGBANK(ftype);
+    for ( i = 0 ; i < pic14_nRegs ; i++ ) {
+      if (strcmp(regspic14[i].base,"0") == 0)
+        pic14_emitcode("","%s = 0x%02x",
+        regspic14[i].dname,
+        8*rbank+regspic14[i].offset);
+      else
+        pic14_emitcode ("","%s = %s + 0x%02x",
+        regspic14[i].dname,
+        regspic14[i].base,
+        8*rbank+regspic14[i].offset);
+    }
+  }
 #endif
-       
-       /* if this is an interrupt service routine */
-       if (IFFUNC_ISISR(sym->type)) {
-       /*  already done in pic14createInterruptVect() - delete me
-       addpCode2pBlock(pb,newpCode(POC_GOTO,newpCodeOp("END_OF_INTERRUPT+1",PO_STR)));
-       emitpcodeNULLop(POC_NOP);
-       emitpcodeNULLop(POC_NOP);
-       emitpcodeNULLop(POC_NOP);
-               */
-               emitpcode(POC_MOVWF,  popCopyReg(&pc_wsave));
-               emitpcode(POC_SWAPFW, popCopyReg(&pc_status));
-               emitpcode(POC_CLRF,   popCopyReg(&pc_status));
-               emitpcode(POC_MOVWF,  popCopyReg(&pc_ssave));
-               emitpcode(POC_MOVFW,  popCopyReg(&pc_pclath));
-               emitpcode(POC_MOVWF,  popCopyReg(&pc_psave));
-               emitpcode(POC_CLRF,   popCopyReg(&pc_pclath));/* during an interrupt PCLATH must be cleared before a goto or call statement */
-               
-               pBlockConvert2ISR(pb);
+  
+  /* if this is an interrupt service routine */
+  if (IFFUNC_ISISR(sym->type)) {
+  /*  already done in pic14createInterruptVect() - delete me
+  addpCode2pBlock(pb,newpCode(POC_GOTO,newpCodeOp("END_OF_INTERRUPT+1",PO_STR)));
+  emitpcodeNULLop(POC_NOP);
+  emitpcodeNULLop(POC_NOP);
+  emitpcodeNULLop(POC_NOP);
+    */
+    emitpcode(POC_MOVWF,  popCopyReg(&pc_wsave));
+    emitpcode(POC_SWAPFW, popCopyReg(&pc_status));
+    emitpcode(POC_CLRF,   popCopyReg(&pc_status));
+    emitpcode(POC_MOVWF,  popCopyReg(&pc_ssave));
+    emitpcode(POC_MOVFW,  popCopyReg(&pc_pclath));
+    emitpcode(POC_MOVWF,  popCopyReg(&pc_psave));
+    emitpcode(POC_CLRF,   popCopyReg(&pc_pclath));/* during an interrupt PCLATH must be cleared before a goto or call statement */
+    
+    pBlockConvert2ISR(pb);
 #if 0  
-               if (!inExcludeList("acc"))          
-                       pic14_emitcode ("push","acc");  
-               if (!inExcludeList("b"))
-                       pic14_emitcode ("push","b");
-               if (!inExcludeList("dpl"))
-                       pic14_emitcode ("push","dpl");
-               if (!inExcludeList("dph"))
-                       pic14_emitcode ("push","dph");
-               if (options.model == MODEL_FLAT24 && !inExcludeList("dpx"))
-               {
-                       pic14_emitcode ("push", "dpx");
-                       /* Make sure we're using standard DPTR */
-                       pic14_emitcode ("push", "dps");
-                       pic14_emitcode ("mov", "dps, #0x00");
-                       if (options.stack10bit)
-                       {       
-                               /* This ISR could conceivably use DPTR2. Better save it. */
-                               pic14_emitcode ("push", "dpl1");
-                               pic14_emitcode ("push", "dph1");
-                               pic14_emitcode ("push", "dpx1");
-                       }
-               }
-               /* if this isr has no bank i.e. is going to
-               run with bank 0 , then we need to save more
+    if (!inExcludeList("acc"))      
+      pic14_emitcode ("push","acc");  
+    if (!inExcludeList("b"))
+      pic14_emitcode ("push","b");
+    if (!inExcludeList("dpl"))
+      pic14_emitcode ("push","dpl");
+    if (!inExcludeList("dph"))
+      pic14_emitcode ("push","dph");
+    if (options.model == MODEL_FLAT24 && !inExcludeList("dpx"))
+    {
+      pic14_emitcode ("push", "dpx");
+      /* Make sure we're using standard DPTR */
+      pic14_emitcode ("push", "dps");
+      pic14_emitcode ("mov", "dps, #0x00");
+      if (options.stack10bit)
+      { 
+        /* This ISR could conceivably use DPTR2. Better save it. */
+        pic14_emitcode ("push", "dpl1");
+        pic14_emitcode ("push", "dph1");
+        pic14_emitcode ("push", "dpx1");
+      }
+    }
+    /* if this isr has no bank i.e. is going to
+    run with bank 0 , then we need to save more
 registers :-) */
-               if (!FUNC_REGBANK(sym->type)) {
-                       
-               /* if this function does not call any other
-               function then we can be economical and
-                       save only those registers that are used */
-                       if (! IFFUNC_HASFCALL(sym->type)) {
-                               int i;
-                               
-                               /* if any registers used */
-                               if (sym->regsUsed) {
-                                       /* save the registers used */
-                                       for ( i = 0 ; i < sym->regsUsed->size ; i++) {
-                                               if (bitVectBitValue(sym->regsUsed,i) ||
-                                                       (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
-                                                       pic14_emitcode("push","junk");//"%s",pic14_regWithIdx(i)->dname);                           
-                                       }
-                               }
-                               
-                       } else {
-                       /* this function has  a function call cannot
-                       determines register usage so we will have the
-                               entire bank */
-                               saverbank(0,ic,FALSE);
-                       }           
-               }
+    if (!FUNC_REGBANK(sym->type)) {
+      
+    /* if this function does not call any other
+    function then we can be economical and
+      save only those registers that are used */
+      if (! IFFUNC_HASFCALL(sym->type)) {
+        int i;
+        
+        /* if any registers used */
+        if (sym->regsUsed) {
+          /* save the registers used */
+          for ( i = 0 ; i < sym->regsUsed->size ; i++) {
+            if (bitVectBitValue(sym->regsUsed,i) ||
+              (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
+              pic14_emitcode("push","junk");//"%s",pic14_regWithIdx(i)->dname);         
+          }
+        }
+        
+      } else {
+      /* this function has  a function call cannot
+      determines register usage so we will have the
+        entire bank */
+        saverbank(0,ic,FALSE);
+      }     
+    }
 #endif
-       } else {
-       /* if callee-save to be used for this function
-               then save the registers being used in this function */
-               if (IFFUNC_CALLEESAVES(sym->type)) {
-                       int i;
-                       
-                       /* if any registers used */
-                       if (sym->regsUsed) {
-                               /* save the registers used */
-                               for ( i = 0 ; i < sym->regsUsed->size ; i++) {
-                                       if (bitVectBitValue(sym->regsUsed,i) ||
-                                               (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) ) {
-                                               //pic14_emitcode("push","%s",pic14_regWithIdx(i)->dname);
-                                               _G.nRegsSaved++;
-                                       }
-                               }
-                       }
-               }
-       }
-       
-       /* set the register bank to the desired value */
-       if (FUNC_REGBANK(sym->type) || FUNC_ISISR(sym->type)) {
-               pic14_emitcode("push","psw");
-               pic14_emitcode("mov","psw,#0x%02x",(FUNC_REGBANK(sym->type) << 3)&0x00ff);   
-       }
-       
-       if (IFFUNC_ISREENT(sym->type) || options.stackAuto) {
-               
-               if (options.useXstack) {
-                       pic14_emitcode("mov","r0,%s",spname);
-                       pic14_emitcode("mov","a,_bp");
-                       pic14_emitcode("movx","@r0,a");
-                       pic14_emitcode("inc","%s",spname);
-               }
-               else
-               {
-                       /* set up the stack */
-                       pic14_emitcode ("push","_bp");     /* save the callers stack  */
-               }
-               pic14_emitcode ("mov","_bp,%s",spname);
-       }
-       
-       /* adjust the stack for the function */
-       if (sym->stack) {
-               
-               int i = sym->stack;
-               if (i > 256 ) 
-                       werror(W_STACK_OVERFLOW,sym->name);
-               
-               if (i > 3 && sym->recvSize < 4) {              
-                       
-                       pic14_emitcode ("mov","a,sp");
-                       pic14_emitcode ("add","a,#0x%02x",((char)sym->stack & 0xff));
-                       pic14_emitcode ("mov","sp,a");
-                       
-               }
-               else
-                       while(i--)
-                               pic14_emitcode("inc","sp");
-       }
-       
-       if (sym->xstack) {
-               
-               pic14_emitcode ("mov","a,_spx");
-               pic14_emitcode ("add","a,#0x%02x",((char)sym->xstack & 0xff));
-               pic14_emitcode ("mov","_spx,a");
-       }    
-       
+  } else {
+  /* if callee-save to be used for this function
+    then save the registers being used in this function */
+    if (IFFUNC_CALLEESAVES(sym->type)) {
+      int i;
+      
+      /* if any registers used */
+      if (sym->regsUsed) {
+        /* save the registers used */
+        for ( i = 0 ; i < sym->regsUsed->size ; i++) {
+          if (bitVectBitValue(sym->regsUsed,i) ||
+            (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) ) {
+            //pic14_emitcode("push","%s",pic14_regWithIdx(i)->dname);
+            _G.nRegsSaved++;
+          }
+        }
+      }
+    }
+  }
+  
+  /* set the register bank to the desired value */
+  if (FUNC_REGBANK(sym->type) || FUNC_ISISR(sym->type)) {
+    pic14_emitcode("push","psw");
+    pic14_emitcode("mov","psw,#0x%02x",(FUNC_REGBANK(sym->type) << 3)&0x00ff);   
+  }
+  
+  if (IFFUNC_ISREENT(sym->type) || options.stackAuto) {
+    
+    if (options.useXstack) {
+      pic14_emitcode("mov","r0,%s",spname);
+      pic14_emitcode("mov","a,_bp");
+      pic14_emitcode("movx","@r0,a");
+      pic14_emitcode("inc","%s",spname);
+    }
+    else
+    {
+      /* set up the stack */
+      pic14_emitcode ("push","_bp");     /* save the callers stack  */
+    }
+    pic14_emitcode ("mov","_bp,%s",spname);
+  }
+  
+  /* adjust the stack for the function */
+  if (sym->stack) {
+    
+    int i = sym->stack;
+    if (i > 256 ) 
+      werror(W_STACK_OVERFLOW,sym->name);
+    
+    if (i > 3 && sym->recvSize < 4) {        
+      
+      pic14_emitcode ("mov","a,sp");
+      pic14_emitcode ("add","a,#0x%02x",((char)sym->stack & 0xff));
+      pic14_emitcode ("mov","sp,a");
+      
+    }
+    else
+      while(i--)
+        pic14_emitcode("inc","sp");
+  }
+  
+  if (sym->xstack) {
+    
+    pic14_emitcode ("mov","a,_spx");
+    pic14_emitcode ("add","a,#0x%02x",((char)sym->xstack & 0xff));
+    pic14_emitcode ("mov","_spx,a");
+  }    
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2777,162 +2776,162 @@ registers :-) */
 /*-----------------------------------------------------------------*/
 static void genEndFunction (iCode *ic)
 {
-       symbol *sym = OP_SYMBOL(IC_LEFT(ic));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (IFFUNC_ISREENT(sym->type) || options.stackAuto)
-       {
-               pic14_emitcode ("mov","%s,_bp",spname);
-       }
-       
-       /* if use external stack but some variables were
-       added to the local stack then decrement the
-       local stack */
-       if (options.useXstack && sym->stack) {      
-               pic14_emitcode("mov","a,sp");
-               pic14_emitcode("add","a,#0x%02x",((char)-sym->stack) & 0xff);
-               pic14_emitcode("mov","sp,a");
-       }
-       
-       
-       if ((IFFUNC_ISREENT(sym->type) || options.stackAuto)) {
-               if (options.useXstack) {
-                       pic14_emitcode("mov","r0,%s",spname);
-                       pic14_emitcode("movx","a,@r0");
-                       pic14_emitcode("mov","_bp,a");
-                       pic14_emitcode("dec","%s",spname);
-               }
-               else
-               {
-                       pic14_emitcode ("pop","_bp");
-               }
-       }
-       
-       /* restore the register bank  */    
-       if (FUNC_REGBANK(sym->type) || FUNC_ISISR(sym->type))
-               pic14_emitcode ("pop","psw");
-       
-       if (IFFUNC_ISISR(sym->type)) {
-               
-               /* now we need to restore the registers */
-               /* if this isr has no bank i.e. is going to
-               run with bank 0 , then we need to save more
+  symbol *sym = OP_SYMBOL(IC_LEFT(ic));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (IFFUNC_ISREENT(sym->type) || options.stackAuto)
+  {
+    pic14_emitcode ("mov","%s,_bp",spname);
+  }
+  
+  /* if use external stack but some variables were
+  added to the local stack then decrement the
+  local stack */
+  if (options.useXstack && sym->stack) {      
+    pic14_emitcode("mov","a,sp");
+    pic14_emitcode("add","a,#0x%02x",((char)-sym->stack) & 0xff);
+    pic14_emitcode("mov","sp,a");
+  }
+  
+  
+  if ((IFFUNC_ISREENT(sym->type) || options.stackAuto)) {
+    if (options.useXstack) {
+      pic14_emitcode("mov","r0,%s",spname);
+      pic14_emitcode("movx","a,@r0");
+      pic14_emitcode("mov","_bp,a");
+      pic14_emitcode("dec","%s",spname);
+    }
+    else
+    {
+      pic14_emitcode ("pop","_bp");
+    }
+  }
+  
+  /* restore the register bank  */    
+  if (FUNC_REGBANK(sym->type) || FUNC_ISISR(sym->type))
+    pic14_emitcode ("pop","psw");
+  
+  if (IFFUNC_ISISR(sym->type)) {
+    
+    /* now we need to restore the registers */
+    /* if this isr has no bank i.e. is going to
+    run with bank 0 , then we need to save more
 registers :-) */
-               if (!FUNC_REGBANK(sym->type)) {
-                       
-               /* if this function does not call any other
-               function then we can be economical and
-                       save only those registers that are used */
-                       if (! IFFUNC_HASFCALL(sym->type)) {
-                               int i;
-                               
-                               /* if any registers used */
-                               if (sym->regsUsed) {
-                                       /* save the registers used */
-                                       for ( i = sym->regsUsed->size ; i >= 0 ; i--) {
-                                               if (bitVectBitValue(sym->regsUsed,i) ||
-                                                       (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
-                                                       pic14_emitcode("pop","junk");//"%s",pic14_regWithIdx(i)->dname);
-                                       }
-                               }
-                               
-                       } else {
-                       /* this function has  a function call cannot
-                       determines register usage so we will have the
-                               entire bank */
-                               unsaverbank(0,ic,FALSE);
-                       }           
-               }
+    if (!FUNC_REGBANK(sym->type)) {
+      
+    /* if this function does not call any other
+    function then we can be economical and
+      save only those registers that are used */
+      if (! IFFUNC_HASFCALL(sym->type)) {
+        int i;
+        
+        /* if any registers used */
+        if (sym->regsUsed) {
+          /* save the registers used */
+          for ( i = sym->regsUsed->size ; i >= 0 ; i--) {
+            if (bitVectBitValue(sym->regsUsed,i) ||
+              (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
+              pic14_emitcode("pop","junk");//"%s",pic14_regWithIdx(i)->dname);
+          }
+        }
+        
+      } else {
+      /* this function has  a function call cannot
+      determines register usage so we will have the
+        entire bank */
+        unsaverbank(0,ic,FALSE);
+      }     
+    }
 #if 0
-               if (options.model == MODEL_FLAT24 && !inExcludeList("dpx"))
-               {
-                       if (options.stack10bit)
-                       {
-                               pic14_emitcode ("pop", "dpx1");
-                               pic14_emitcode ("pop", "dph1");
-                               pic14_emitcode ("pop", "dpl1");
-                       }       
-                       pic14_emitcode ("pop", "dps");
-                       pic14_emitcode ("pop", "dpx");
-               }
-               if (!inExcludeList("dph"))
-                       pic14_emitcode ("pop","dph");
-               if (!inExcludeList("dpl"))
-                       pic14_emitcode ("pop","dpl");
-               if (!inExcludeList("b"))
-                       pic14_emitcode ("pop","b");
-               if (!inExcludeList("acc"))
-                       pic14_emitcode ("pop","acc");
-               
-               if (IFFUNC_ISCRITICAL(sym->type))
-                       pic14_emitcode("setb","ea");
+    if (options.model == MODEL_FLAT24 && !inExcludeList("dpx"))
+    {
+      if (options.stack10bit)
+      {
+        pic14_emitcode ("pop", "dpx1");
+        pic14_emitcode ("pop", "dph1");
+        pic14_emitcode ("pop", "dpl1");
+      } 
+      pic14_emitcode ("pop", "dps");
+      pic14_emitcode ("pop", "dpx");
+    }
+    if (!inExcludeList("dph"))
+      pic14_emitcode ("pop","dph");
+    if (!inExcludeList("dpl"))
+      pic14_emitcode ("pop","dpl");
+    if (!inExcludeList("b"))
+      pic14_emitcode ("pop","b");
+    if (!inExcludeList("acc"))
+      pic14_emitcode ("pop","acc");
+    
+    if (IFFUNC_ISCRITICAL(sym->type))
+      pic14_emitcode("setb","ea");
 #endif
-               
-               /* if debug then send end of function */
-               /*      if (options.debug && currFunc) { */
-               if (currFunc) {
-                       _G.debugLine = 1;
-                       pic14_emitcode(";","C$%s$%d$%d$%d ==.",
-                               FileBaseName(ic->filename),currFunc->lastLine,
-                               ic->level,ic->block); 
-                       if (IS_STATIC(currFunc->etype))     
-                               pic14_emitcode(";","XF%s$%s$0$0 ==.",moduleName,currFunc->name); 
-                       else
-                               pic14_emitcode(";","XG$%s$0$0 ==.",currFunc->name);
-                       _G.debugLine = 0;
-               }
-               
-               pic14_emitcode ("reti","");
-               emitpcode(POC_MOVFW,  popCopyReg(&pc_psave));
-               emitpcode(POC_MOVWF,  popCopyReg(&pc_pclath));
-               emitpcode(POC_CLRF,   popCopyReg(&pc_status));
-               emitpcode(POC_SWAPFW, popCopyReg(&pc_ssave));
-               emitpcode(POC_MOVWF,  popCopyReg(&pc_status));
-               emitpcode(POC_SWAPF,  popCopyReg(&pc_wsave));
-               emitpcode(POC_SWAPFW, popCopyReg(&pc_wsave));
-               addpCode2pBlock(pb,newpCodeLabel("END_OF_INTERRUPT",-1));
-               emitpcodeNULLop(POC_RETFIE);
-       }
-       else {
-               if (IFFUNC_ISCRITICAL(sym->type))
-                       pic14_emitcode("setb","ea");
-               
-               if (IFFUNC_CALLEESAVES(sym->type)) {
-                       int i;
-                       
-                       /* if any registers used */
-                       if (sym->regsUsed) {
-                               /* save the registers used */
-                               for ( i = sym->regsUsed->size ; i >= 0 ; i--) {
-                                       if (bitVectBitValue(sym->regsUsed,i) ||
-                                               (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
-                                               pic14_emitcode("pop","junk");//"%s",pic14_regWithIdx(i)->dname);
-                               }
-                       }
-                       
-               }
-               
-               /* if debug then send end of function */
-               if (currFunc) {
-                       _G.debugLine = 1;
-                       pic14_emitcode(";","C$%s$%d$%d$%d ==.",
-                               FileBaseName(ic->filename),currFunc->lastLine,
-                               ic->level,ic->block); 
-                       if (IS_STATIC(currFunc->etype))     
-                               pic14_emitcode(";","XF%s$%s$0$0 ==.",moduleName,currFunc->name); 
-                       else
-                               pic14_emitcode(";","XG$%s$0$0 ==.",currFunc->name);
-                       _G.debugLine = 0;
-               }
-               
-               pic14_emitcode ("return","");
-               emitpcodeNULLop(POC_RETURN);
-               
-               /* Mark the end of a function */
-               addpCode2pBlock(pb,newpCodeFunction(NULL,NULL,0));
-       }
-       
+    
+    /* if debug then send end of function */
+    /*  if (options.debug && currFunc) { */
+    if (currFunc) {
+      _G.debugLine = 1;
+      pic14_emitcode(";","C$%s$%d$%d$%d ==.",
+        FileBaseName(ic->filename),currFunc->lastLine,
+        ic->level,ic->block); 
+      if (IS_STATIC(currFunc->etype))     
+        pic14_emitcode(";","XF%s$%s$0$0 ==.",moduleName,currFunc->name); 
+      else
+        pic14_emitcode(";","XG$%s$0$0 ==.",currFunc->name);
+      _G.debugLine = 0;
+    }
+    
+    pic14_emitcode ("reti","");
+    emitpcode(POC_MOVFW,  popCopyReg(&pc_psave));
+    emitpcode(POC_MOVWF,  popCopyReg(&pc_pclath));
+    emitpcode(POC_CLRF,   popCopyReg(&pc_status));
+    emitpcode(POC_SWAPFW, popCopyReg(&pc_ssave));
+    emitpcode(POC_MOVWF,  popCopyReg(&pc_status));
+    emitpcode(POC_SWAPF,  popCopyReg(&pc_wsave));
+    emitpcode(POC_SWAPFW, popCopyReg(&pc_wsave));
+    addpCode2pBlock(pb,newpCodeLabel("END_OF_INTERRUPT",-1));
+    emitpcodeNULLop(POC_RETFIE);
+  }
+  else {
+    if (IFFUNC_ISCRITICAL(sym->type))
+      pic14_emitcode("setb","ea");
+    
+    if (IFFUNC_CALLEESAVES(sym->type)) {
+      int i;
+      
+      /* if any registers used */
+      if (sym->regsUsed) {
+        /* save the registers used */
+        for ( i = sym->regsUsed->size ; i >= 0 ; i--) {
+          if (bitVectBitValue(sym->regsUsed,i) ||
+            (pic14_ptrRegReq && (i == R0_IDX || i == R1_IDX)) )
+            pic14_emitcode("pop","junk");//"%s",pic14_regWithIdx(i)->dname);
+        }
+      }
+      
+    }
+    
+    /* if debug then send end of function */
+    if (currFunc) {
+      _G.debugLine = 1;
+      pic14_emitcode(";","C$%s$%d$%d$%d ==.",
+        FileBaseName(ic->filename),currFunc->lastLine,
+        ic->level,ic->block); 
+      if (IS_STATIC(currFunc->etype))     
+        pic14_emitcode(";","XF%s$%s$0$0 ==.",moduleName,currFunc->name); 
+      else
+        pic14_emitcode(";","XG$%s$0$0 ==.",currFunc->name);
+      _G.debugLine = 0;
+    }
+    
+    pic14_emitcode ("return","");
+    emitpcodeNULLop(POC_RETURN);
+    
+    /* Mark the end of a function */
+    addpCode2pBlock(pb,newpCodeFunction(NULL,NULL,0));
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2940,68 +2939,68 @@ registers :-) */
 /*-----------------------------------------------------------------*/
 static void genRet (iCode *ic)
 {
-       int size,offset = 0 , pushed = 0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if we have no return value then
-       just generate the "ret" */
-       if (!IC_LEFT(ic)) 
-               goto jumpret;       
-       
-               /* we have something to return then
-       move the return value into place */
-       aopOp(IC_LEFT(ic),ic,FALSE);
-       size = AOP_SIZE(IC_LEFT(ic));
-       
-       while (size--) {
-               char *l ;
-               if (AOP_TYPE(IC_LEFT(ic)) == AOP_DPTR) {
-                       /* #NOCHANGE */
-                       l = aopGet(AOP(IC_LEFT(ic)),offset++,
-                               FALSE,TRUE);
-                       pic14_emitcode("push","%s",l);
-                       pushed++;
-               } else {
-                       l = aopGet(AOP(IC_LEFT(ic)),offset,
-                               FALSE,FALSE);
-                       if (strcmp(fReturn[offset],l)) {
-                               if ((((AOP(IC_LEFT(ic))->type) == AOP_PCODE) && 
-                                       AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE) ||
-                                       ( (AOP(IC_LEFT(ic))->type) == AOP_IMMD) ||
-                                       ( (AOP(IC_LEFT(ic))->type) == AOP_LIT) ) {
-                                       emitpcode(POC_MOVLW, popGet(AOP(IC_LEFT(ic)),offset));
-                               }else {
-                                       emitpcode(POC_MOVFW, popGet(AOP(IC_LEFT(ic)),offset));
-                               }
-                               if(size) {
-                                       emitpcode(POC_MOVWF,popRegFromIdx(Gstack_base_addr+1-size));
-                               }
-                               offset++;
-                       }
-               }
-       }    
-       
-       if (pushed) {
-               while(pushed) {
-                       pushed--;
-                       if (strcmp(fReturn[pushed],"a"))
-                               pic14_emitcode("pop",fReturn[pushed]);
-                       else
-                               pic14_emitcode("pop","acc");
-               }
-       }
-       freeAsmop (IC_LEFT(ic),NULL,ic,TRUE);
-       
+  int size,offset = 0 , pushed = 0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if we have no return value then
+  just generate the "ret" */
+  if (!IC_LEFT(ic)) 
+    goto jumpret;       
+  
+    /* we have something to return then
+  move the return value into place */
+  aopOp(IC_LEFT(ic),ic,FALSE);
+  size = AOP_SIZE(IC_LEFT(ic));
+  
+  while (size--) {
+    char *l ;
+    if (AOP_TYPE(IC_LEFT(ic)) == AOP_DPTR) {
+      /* #NOCHANGE */
+      l = aopGet(AOP(IC_LEFT(ic)),offset++,
+        FALSE,TRUE);
+      pic14_emitcode("push","%s",l);
+      pushed++;
+    } else {
+      l = aopGet(AOP(IC_LEFT(ic)),offset,
+        FALSE,FALSE);
+      if (strcmp(fReturn[offset],l)) {
+        if ((((AOP(IC_LEFT(ic))->type) == AOP_PCODE) && 
+          AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE) ||
+          ( (AOP(IC_LEFT(ic))->type) == AOP_IMMD) ||
+          ( (AOP(IC_LEFT(ic))->type) == AOP_LIT) ) {
+          emitpcode(POC_MOVLW, popGet(AOP(IC_LEFT(ic)),offset));
+        }else {
+          emitpcode(POC_MOVFW, popGet(AOP(IC_LEFT(ic)),offset));
+        }
+        if(size) {
+          emitpcode(POC_MOVWF,popRegFromIdx(Gstack_base_addr+1-size));
+        }
+        offset++;
+      }
+    }
+  }    
+  
+  if (pushed) {
+    while(pushed) {
+      pushed--;
+      if (strcmp(fReturn[pushed],"a"))
+        pic14_emitcode("pop",fReturn[pushed]);
+      else
+        pic14_emitcode("pop","acc");
+    }
+  }
+  freeAsmop (IC_LEFT(ic),NULL,ic,TRUE);
+  
 jumpret:
 /* generate a jump to the return label
-       if the next is not the return statement */
-       if (!(ic->next && ic->next->op == LABEL &&
-               IC_LABEL(ic->next) == returnLabel)) {
-               
-               emitpcode(POC_GOTO,popGetLabel(returnLabel->key));
-               pic14_emitcode("goto","_%05d_DS_",returnLabel->key+100 + labelOffset);
-       }
-       
+  if the next is not the return statement */
+  if (!(ic->next && ic->next->op == LABEL &&
+    IC_LABEL(ic->next) == returnLabel)) {
+    
+    emitpcode(POC_GOTO,popGetLabel(returnLabel->key));
+    pic14_emitcode("goto","_%05d_DS_",returnLabel->key+100 + labelOffset);
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3009,13 +3008,13 @@ jumpret:
 /*-----------------------------------------------------------------*/
 static void genLabel (iCode *ic)
 {
-       /* special case never generate */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (IC_LABEL(ic) == entryLabel)
-               return ;
-       
-       emitpLabel(IC_LABEL(ic)->key);
-       pic14_emitcode("","_%05d_DS_:",(IC_LABEL(ic)->key+100 + labelOffset));
+  /* special case never generate */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (IC_LABEL(ic) == entryLabel)
+    return ;
+  
+  emitpLabel(IC_LABEL(ic)->key);
+  pic14_emitcode("","_%05d_DS_:",(IC_LABEL(ic)->key+100 + labelOffset));
 }
 
 /*-----------------------------------------------------------------*/
@@ -3024,8 +3023,8 @@ static void genLabel (iCode *ic)
 //tsd
 static void genGoto (iCode *ic)
 {
-       emitpcode(POC_GOTO,popGetLabel(IC_LABEL(ic)->key));
-       pic14_emitcode ("goto","_%05d_DS_",(IC_LABEL(ic)->key+100)+labelOffset);
+  emitpcode(POC_GOTO,popGetLabel(IC_LABEL(ic)->key));
+  pic14_emitcode ("goto","_%05d_DS_",(IC_LABEL(ic)->key+100)+labelOffset);
 }
 
 
@@ -3033,18 +3032,18 @@ static void genGoto (iCode *ic)
 /* genMultbits :- multiplication of bits                           */
 /*-----------------------------------------------------------------*/
 static void genMultbits (operand *left, 
-                                                operand *right, 
-                                                operand *result)
+             operand *right, 
+             operand *result)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(!pic14_sameRegs(AOP(result),AOP(right)))
-               emitpcode(POC_BSF,  popGet(AOP(result),0));
-       
-       emitpcode(POC_BTFSC,popGet(AOP(right),0));
-       emitpcode(POC_BTFSS,popGet(AOP(left),0));
-       emitpcode(POC_BCF,  popGet(AOP(result),0));
-       
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(!pic14_sameRegs(AOP(result),AOP(right)))
+    emitpcode(POC_BSF,  popGet(AOP(result),0));
+  
+  emitpcode(POC_BTFSC,popGet(AOP(right),0));
+  emitpcode(POC_BTFSS,popGet(AOP(left),0));
+  emitpcode(POC_BCF,  popGet(AOP(result),0));
+  
 }
 
 
@@ -3052,106 +3051,106 @@ static void genMultbits (operand *left,
 /* genMultOneByte : 8 bit multiplication & division                */
 /*-----------------------------------------------------------------*/
 static void genMultOneByte (operand *left,
-                                                       operand *right,
-                                                       operand *result)
-{
-       sym_link *opetype = operandType(result);
-       
-       // symbol *lbl ;
-       int size,offset;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       DEBUGpic14_AopTypeSign(__LINE__,left,right,result);
-       
-       /* (if two literals, the value is computed before) */
-       /* if one literal, literal on the right */
-       if (AOP_TYPE(left) == AOP_LIT){
-               operand *t = right;
-               right = left;
-               left = t;
-       }
-       
-       size = AOP_SIZE(result);
-       if(size == 1) {
-               
-               if (AOP_TYPE(right) == AOP_LIT){
-                       pic14_emitcode("multiply ","lit val:%s by variable %s and store in %s", 
-                               aopGet(AOP(right),0,FALSE,FALSE), 
-                               aopGet(AOP(left),0,FALSE,FALSE), 
-                               aopGet(AOP(result),0,FALSE,FALSE));
-                       pic14_emitcode("call","genMultLit");
-               } else {
-                       pic14_emitcode("multiply ","variable :%s by variable %s and store in %s", 
-                               aopGet(AOP(right),0,FALSE,FALSE), 
-                               aopGet(AOP(left),0,FALSE,FALSE), 
-                               aopGet(AOP(result),0,FALSE,FALSE));
-                       pic14_emitcode("call","genMult8X8_8");
-                       
-               }
-               genMult8X8_8 (left, right,result);
-               
-               
-               /* signed or unsigned */
-               //pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
-               //l = aopGet(AOP(left),0,FALSE,FALSE);
-               //MOVA(l);       
-               //pic14_emitcode("mul","ab");
-               /* if result size = 1, mul signed = mul unsigned */
-               //aopPut(AOP(result),"a",0);
-               
-       } else {  // (size > 1)
-               
-               pic14_emitcode("multiply (size>1) ","variable :%s by variable %s and store in %s", 
-                       aopGet(AOP(right),0,FALSE,FALSE), 
-                       aopGet(AOP(left),0,FALSE,FALSE), 
-                       aopGet(AOP(result),0,FALSE,FALSE));
-               
-               if (SPEC_USIGN(opetype)){
-                       pic14_emitcode("multiply ","unsigned result. size = %d",AOP_SIZE(result));
-                       genUMult8X8_16 (left, right, result, NULL);
-                       
-                       if (size > 2) {
-                               /* for filling the MSBs */
-                               emitpcode(POC_CLRF,  popGet(AOP(result),2));
-                               emitpcode(POC_CLRF,  popGet(AOP(result),3));
-                       }
-               }
-               else{
-                       pic14_emitcode("multiply ","signed result. size = %d",AOP_SIZE(result));
-                       
-                       pic14_emitcode("mov","a,b");
-                       
-                       /* adjust the MSB if left or right neg */
-                       
-                       /* if one literal */
-                       if (AOP_TYPE(right) == AOP_LIT){
-                               pic14_emitcode("multiply ","right is a lit");
-                               /* AND literal negative */
-                               if((int) floatFromVal (AOP(right)->aopu.aop_lit) < 0){
-                                       /* adjust MSB (c==0 after mul) */
-                                       pic14_emitcode("subb","a,%s", aopGet(AOP(left),0,FALSE,FALSE));
-                               }
-                       }
-                       else{
-                               genSMult8X8_16 (left, right, result, NULL);
-                       }
-                       
-                       if(size > 2){
-                               pic14_emitcode("multiply ","size is greater than 2, so propogate sign");
-                               /* get the sign */
-                               pic14_emitcode("rlc","a");
-                               pic14_emitcode("subb","a,acc");
-                       }
-               }
-               
-               size -= 2;   
-               offset = 2;
-               if (size > 0)
-                       while (size--)
-                               pic14_emitcode("multiply ","size is way greater than 2, so propogate sign");
-                       //aopPut(AOP(result),"a",offset++);
-       }
+              operand *right,
+              operand *result)
+{
+  sym_link *opetype = operandType(result);
+  
+  // symbol *lbl ;
+  int size,offset;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  DEBUGpic14_AopTypeSign(__LINE__,left,right,result);
+  
+  /* (if two literals, the value is computed before) */
+  /* if one literal, literal on the right */
+  if (AOP_TYPE(left) == AOP_LIT){
+    operand *t = right;
+    right = left;
+    left = t;
+  }
+  
+  size = AOP_SIZE(result);
+  if(size == 1) {
+    
+    if (AOP_TYPE(right) == AOP_LIT){
+      pic14_emitcode("multiply ","lit val:%s by variable %s and store in %s", 
+        aopGet(AOP(right),0,FALSE,FALSE), 
+        aopGet(AOP(left),0,FALSE,FALSE), 
+        aopGet(AOP(result),0,FALSE,FALSE));
+      pic14_emitcode("call","genMultLit");
+    } else {
+      pic14_emitcode("multiply ","variable :%s by variable %s and store in %s", 
+        aopGet(AOP(right),0,FALSE,FALSE), 
+        aopGet(AOP(left),0,FALSE,FALSE), 
+        aopGet(AOP(result),0,FALSE,FALSE));
+      pic14_emitcode("call","genMult8X8_8");
+      
+    }
+    genMult8X8_8 (left, right,result);
+    
+    
+    /* signed or unsigned */
+    //pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
+    //l = aopGet(AOP(left),0,FALSE,FALSE);
+    //MOVA(l);       
+    //pic14_emitcode("mul","ab");
+    /* if result size = 1, mul signed = mul unsigned */
+    //aopPut(AOP(result),"a",0);
+    
+  } else {  // (size > 1)
+    
+    pic14_emitcode("multiply (size>1) ","variable :%s by variable %s and store in %s", 
+      aopGet(AOP(right),0,FALSE,FALSE), 
+      aopGet(AOP(left),0,FALSE,FALSE), 
+      aopGet(AOP(result),0,FALSE,FALSE));
+    
+    if (SPEC_USIGN(opetype)){
+      pic14_emitcode("multiply ","unsigned result. size = %d",AOP_SIZE(result));
+      genUMult8X8_16 (left, right, result, NULL);
+      
+      if (size > 2) {
+        /* for filling the MSBs */
+        emitpcode(POC_CLRF,  popGet(AOP(result),2));
+        emitpcode(POC_CLRF,  popGet(AOP(result),3));
+      }
+    }
+    else{
+      pic14_emitcode("multiply ","signed result. size = %d",AOP_SIZE(result));
+      
+      pic14_emitcode("mov","a,b");
+      
+      /* adjust the MSB if left or right neg */
+      
+      /* if one literal */
+      if (AOP_TYPE(right) == AOP_LIT){
+        pic14_emitcode("multiply ","right is a lit");
+        /* AND literal negative */
+        if((int) floatFromVal (AOP(right)->aopu.aop_lit) < 0){
+          /* adjust MSB (c==0 after mul) */
+          pic14_emitcode("subb","a,%s", aopGet(AOP(left),0,FALSE,FALSE));
+        }
+      }
+      else{
+        genSMult8X8_16 (left, right, result, NULL);
+      }
+      
+      if(size > 2){
+        pic14_emitcode("multiply ","size is greater than 2, so propogate sign");
+        /* get the sign */
+        pic14_emitcode("rlc","a");
+        pic14_emitcode("subb","a,acc");
+      }
+    }
+    
+    size -= 2;   
+    offset = 2;
+    if (size > 0)
+      while (size--)
+        pic14_emitcode("multiply ","size is way greater than 2, so propogate sign");
+      //aopPut(AOP(result),"a",offset++);
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -3159,148 +3158,148 @@ static void genMultOneByte (operand *left,
 /*-----------------------------------------------------------------*/
 static void genMult (iCode *ic)
 {
-       operand *left = IC_LEFT(ic);
-       operand *right = IC_RIGHT(ic);
-       operand *result= IC_RESULT(ic);   
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* assign the amsops */
-       aopOp (left,ic,FALSE);
-       aopOp (right,ic,FALSE);
-       aopOp (result,ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       /* special cases first */
-       /* both are bits */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               AOP_TYPE(right)== AOP_CRY) {
-               genMultbits(left,right,result);
-               goto release ;
-       }
-       
-       /* if both are of size == 1 */
-       if (AOP_SIZE(left) == 1 &&
-               AOP_SIZE(right) == 1 ) {
-               genMultOneByte(left,right,result);
-               goto release ;
-       }
-       
-       pic14_emitcode("multiply ","sizes are greater than 2... need to insert proper algor.");
-       
-       /* should have been converted to function call */
-       //assert(0) ;
-       
+  operand *left = IC_LEFT(ic);
+  operand *right = IC_RIGHT(ic);
+  operand *result= IC_RESULT(ic);   
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* assign the amsops */
+  aopOp (left,ic,FALSE);
+  aopOp (right,ic,FALSE);
+  aopOp (result,ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  /* special cases first */
+  /* both are bits */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    AOP_TYPE(right)== AOP_CRY) {
+    genMultbits(left,right,result);
+    goto release ;
+  }
+  
+  /* if both are of size == 1 */
+  if (AOP_SIZE(left) == 1 &&
+    AOP_SIZE(right) == 1 ) {
+    genMultOneByte(left,right,result);
+    goto release ;
+  }
+  
+  pic14_emitcode("multiply ","sizes are greater than 2... need to insert proper algor.");
+  
+  /* should have been converted to function call */
+  //assert(0) ;
+  
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE); 
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE); 
 }
 
 /*-----------------------------------------------------------------*/
 /* genDivbits :- division of bits                                  */
 /*-----------------------------------------------------------------*/
 static void genDivbits (operand *left, 
-                                               operand *right, 
-                                               operand *result)
+            operand *right, 
+            operand *result)
 {
-       
-       char *l;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* the result must be bit */    
-       pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
-       l = aopGet(AOP(left),0,FALSE,FALSE);
-       
-       MOVA(l);    
-       
-       pic14_emitcode("div","ab");
-       pic14_emitcode("rrc","a");
-       aopPut(AOP(result),"c",0);
+  
+  char *l;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* the result must be bit */    
+  pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
+  l = aopGet(AOP(left),0,FALSE,FALSE);
+  
+  MOVA(l);    
+  
+  pic14_emitcode("div","ab");
+  pic14_emitcode("rrc","a");
+  aopPut(AOP(result),"c",0);
 }
 
 /*-----------------------------------------------------------------*/
 /* genDivOneByte : 8 bit division                                  */
 /*-----------------------------------------------------------------*/
 static void genDivOneByte (operand *left,
-                                                  operand *right,
-                                                  operand *result)
-{
-       sym_link *opetype = operandType(result);
-       char *l ;
-       symbol *lbl ;
-       int size,offset;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       size = AOP_SIZE(result) - 1;
-       offset = 1;
-       /* signed or unsigned */
-       if (SPEC_USIGN(opetype)) {
-               /* unsigned is easy */
-               pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
-               l = aopGet(AOP(left),0,FALSE,FALSE);
-               MOVA(l);        
-               pic14_emitcode("div","ab");
-               aopPut(AOP(result),"a",0);
-               while (size--)
-                       aopPut(AOP(result),zero,offset++);
-               return ;
-       }
-       
-       /* signed is a little bit more difficult */
-       
-       /* save the signs of the operands */
-       l = aopGet(AOP(left),0,FALSE,FALSE);    
-       MOVA(l);    
-       pic14_emitcode("xrl","a,%s",aopGet(AOP(right),0,FALSE,TRUE));
-       pic14_emitcode("push","acc"); /* save it on the stack */
-       
-       /* now sign adjust for both left & right */
-       l =  aopGet(AOP(right),0,FALSE,FALSE);    
-       MOVA(l);       
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));   
-       pic14_emitcode("cpl","a");   
-       pic14_emitcode("inc","a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       pic14_emitcode("mov","b,a");
-       
-       /* sign adjust left side */
-       l =  aopGet(AOP(left),0,FALSE,FALSE);    
-       MOVA(l);
-       
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
-       pic14_emitcode("cpl","a");
-       pic14_emitcode("inc","a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       
-       /* now the division */
-       pic14_emitcode("div","ab");
-       /* we are interested in the lower order
-       only */
-       pic14_emitcode("mov","b,a");
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("pop","acc");   
-       /* if there was an over flow we don't 
-       adjust the sign of the result */
-       pic14_emitcode("jb","ov,%05d_DS_",(lbl->key+100));
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
-       CLRC;
-       pic14_emitcode("clr","a");
-       pic14_emitcode("subb","a,b");
-       pic14_emitcode("mov","b,a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       
-       /* now we are done */
-       aopPut(AOP(result),"b",0);
-       if(size > 0){
-               pic14_emitcode("mov","c,b.7");
-               pic14_emitcode("subb","a,acc");   
-       }
-       while (size--)
-               aopPut(AOP(result),"a",offset++);
-       
+               operand *right,
+               operand *result)
+{
+  sym_link *opetype = operandType(result);
+  char *l ;
+  symbol *lbl ;
+  int size,offset;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  size = AOP_SIZE(result) - 1;
+  offset = 1;
+  /* signed or unsigned */
+  if (SPEC_USIGN(opetype)) {
+    /* unsigned is easy */
+    pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
+    l = aopGet(AOP(left),0,FALSE,FALSE);
+    MOVA(l);        
+    pic14_emitcode("div","ab");
+    aopPut(AOP(result),"a",0);
+    while (size--)
+      aopPut(AOP(result),zero,offset++);
+    return ;
+  }
+  
+  /* signed is a little bit more difficult */
+  
+  /* save the signs of the operands */
+  l = aopGet(AOP(left),0,FALSE,FALSE);    
+  MOVA(l);    
+  pic14_emitcode("xrl","a,%s",aopGet(AOP(right),0,FALSE,TRUE));
+  pic14_emitcode("push","acc"); /* save it on the stack */
+  
+  /* now sign adjust for both left & right */
+  l =  aopGet(AOP(right),0,FALSE,FALSE);    
+  MOVA(l);       
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));   
+  pic14_emitcode("cpl","a");   
+  pic14_emitcode("inc","a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  pic14_emitcode("mov","b,a");
+  
+  /* sign adjust left side */
+  l =  aopGet(AOP(left),0,FALSE,FALSE);    
+  MOVA(l);
+  
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
+  pic14_emitcode("cpl","a");
+  pic14_emitcode("inc","a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  
+  /* now the division */
+  pic14_emitcode("div","ab");
+  /* we are interested in the lower order
+  only */
+  pic14_emitcode("mov","b,a");
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("pop","acc");   
+  /* if there was an over flow we don't 
+  adjust the sign of the result */
+  pic14_emitcode("jb","ov,%05d_DS_",(lbl->key+100));
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
+  CLRC;
+  pic14_emitcode("clr","a");
+  pic14_emitcode("subb","a,b");
+  pic14_emitcode("mov","b,a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  
+  /* now we are done */
+  aopPut(AOP(result),"b",0);
+  if(size > 0){
+    pic14_emitcode("mov","c,b.7");
+    pic14_emitcode("subb","a,acc");   
+  }
+  while (size--)
+    aopPut(AOP(result),"a",offset++);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3308,133 +3307,133 @@ static void genDivOneByte (operand *left,
 /*-----------------------------------------------------------------*/
 static void genDiv (iCode *ic)
 {
-       operand *left = IC_LEFT(ic);
-       operand *right = IC_RIGHT(ic);
-       operand *result= IC_RESULT(ic);   
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* assign the amsops */
-       aopOp (left,ic,FALSE);
-       aopOp (right,ic,FALSE);
-       aopOp (result,ic,TRUE);
-       
-       /* special cases first */
-       /* both are bits */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               AOP_TYPE(right)== AOP_CRY) {
-               genDivbits(left,right,result);
-               goto release ;
-       }
-       
-       /* if both are of size == 1 */
-       if (AOP_SIZE(left) == 1 &&
-               AOP_SIZE(right) == 1 ) {
-               genDivOneByte(left,right,result);
-               goto release ;
-       }
-       
-       /* should have been converted to function call */
-       assert(0);
+  operand *left = IC_LEFT(ic);
+  operand *right = IC_RIGHT(ic);
+  operand *result= IC_RESULT(ic);   
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* assign the amsops */
+  aopOp (left,ic,FALSE);
+  aopOp (right,ic,FALSE);
+  aopOp (result,ic,TRUE);
+  
+  /* special cases first */
+  /* both are bits */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    AOP_TYPE(right)== AOP_CRY) {
+    genDivbits(left,right,result);
+    goto release ;
+  }
+  
+  /* if both are of size == 1 */
+  if (AOP_SIZE(left) == 1 &&
+    AOP_SIZE(right) == 1 ) {
+    genDivOneByte(left,right,result);
+    goto release ;
+  }
+  
+  /* should have been converted to function call */
+  assert(0);
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE); 
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE); 
 }
 
 /*-----------------------------------------------------------------*/
 /* genModbits :- modulus of bits                                   */
 /*-----------------------------------------------------------------*/
 static void genModbits (operand *left, 
-                                               operand *right, 
-                                               operand *result)
+            operand *right, 
+            operand *result)
 {
-       
-       char *l;
-       
-       /* the result must be bit */    
-       pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
-       l = aopGet(AOP(left),0,FALSE,FALSE);
-       
-       MOVA(l);       
-       
-       pic14_emitcode("div","ab");
-       pic14_emitcode("mov","a,b");
-       pic14_emitcode("rrc","a");
-       aopPut(AOP(result),"c",0);
+  
+  char *l;
+  
+  /* the result must be bit */    
+  pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
+  l = aopGet(AOP(left),0,FALSE,FALSE);
+  
+  MOVA(l);       
+  
+  pic14_emitcode("div","ab");
+  pic14_emitcode("mov","a,b");
+  pic14_emitcode("rrc","a");
+  aopPut(AOP(result),"c",0);
 }
 
 /*-----------------------------------------------------------------*/
 /* genModOneByte : 8 bit modulus                                   */
 /*-----------------------------------------------------------------*/
 static void genModOneByte (operand *left,
-                                                  operand *right,
-                                                  operand *result)
-{
-       sym_link *opetype = operandType(result);
-       char *l ;
-       symbol *lbl ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* signed or unsigned */
-       if (SPEC_USIGN(opetype)) {
-               /* unsigned is easy */
-               pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
-               l = aopGet(AOP(left),0,FALSE,FALSE);
-               MOVA(l);    
-               pic14_emitcode("div","ab");
-               aopPut(AOP(result),"b",0);
-               return ;
-       }
-       
-       /* signed is a little bit more difficult */
-       
-       /* save the signs of the operands */
-       l = aopGet(AOP(left),0,FALSE,FALSE);    
-       MOVA(l);
-       
-       pic14_emitcode("xrl","a,%s",aopGet(AOP(right),0,FALSE,FALSE));
-       pic14_emitcode("push","acc"); /* save it on the stack */
-       
-       /* now sign adjust for both left & right */
-       l =  aopGet(AOP(right),0,FALSE,FALSE);    
-       MOVA(l);
-       
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));  
-       pic14_emitcode("cpl","a");   
-       pic14_emitcode("inc","a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       pic14_emitcode("mov","b,a"); 
-       
-       /* sign adjust left side */
-       l =  aopGet(AOP(left),0,FALSE,FALSE);    
-       MOVA(l);
-       
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
-       pic14_emitcode("cpl","a");   
-       pic14_emitcode("inc","a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       
-       /* now the multiplication */
-       pic14_emitcode("div","ab");
-       /* we are interested in the lower order
-       only */
-       lbl = newiTempLabel(NULL);
-       pic14_emitcode("pop","acc");   
-       /* if there was an over flow we don't 
-       adjust the sign of the result */
-       pic14_emitcode("jb","ov,%05d_DS_",(lbl->key+100));
-       pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
-       CLRC ;
-       pic14_emitcode("clr","a");
-       pic14_emitcode("subb","a,b");
-       pic14_emitcode("mov","b,a");
-       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-       
-       /* now we are done */
-       aopPut(AOP(result),"b",0);
-       
+               operand *right,
+               operand *result)
+{
+  sym_link *opetype = operandType(result);
+  char *l ;
+  symbol *lbl ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* signed or unsigned */
+  if (SPEC_USIGN(opetype)) {
+    /* unsigned is easy */
+    pic14_emitcode("mov","b,%s", aopGet(AOP(right),0,FALSE,FALSE));
+    l = aopGet(AOP(left),0,FALSE,FALSE);
+    MOVA(l);    
+    pic14_emitcode("div","ab");
+    aopPut(AOP(result),"b",0);
+    return ;
+  }
+  
+  /* signed is a little bit more difficult */
+  
+  /* save the signs of the operands */
+  l = aopGet(AOP(left),0,FALSE,FALSE);    
+  MOVA(l);
+  
+  pic14_emitcode("xrl","a,%s",aopGet(AOP(right),0,FALSE,FALSE));
+  pic14_emitcode("push","acc"); /* save it on the stack */
+  
+  /* now sign adjust for both left & right */
+  l =  aopGet(AOP(right),0,FALSE,FALSE);    
+  MOVA(l);
+  
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));  
+  pic14_emitcode("cpl","a");   
+  pic14_emitcode("inc","a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  pic14_emitcode("mov","b,a"); 
+  
+  /* sign adjust left side */
+  l =  aopGet(AOP(left),0,FALSE,FALSE);    
+  MOVA(l);
+  
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
+  pic14_emitcode("cpl","a");   
+  pic14_emitcode("inc","a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  
+  /* now the multiplication */
+  pic14_emitcode("div","ab");
+  /* we are interested in the lower order
+  only */
+  lbl = newiTempLabel(NULL);
+  pic14_emitcode("pop","acc");   
+  /* if there was an over flow we don't 
+  adjust the sign of the result */
+  pic14_emitcode("jb","ov,%05d_DS_",(lbl->key+100));
+  pic14_emitcode("jnb","acc.7,%05d_DS_",(lbl->key+100));
+  CLRC ;
+  pic14_emitcode("clr","a");
+  pic14_emitcode("subb","a,b");
+  pic14_emitcode("mov","b,a");
+  pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+  
+  /* now we are done */
+  aopPut(AOP(result),"b",0);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3442,38 +3441,38 @@ static void genModOneByte (operand *left,
 /*-----------------------------------------------------------------*/
 static void genMod (iCode *ic)
 {
-       operand *left = IC_LEFT(ic);
-       operand *right = IC_RIGHT(ic);
-       operand *result= IC_RESULT(ic);  
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* assign the amsops */
-       aopOp (left,ic,FALSE);
-       aopOp (right,ic,FALSE);
-       aopOp (result,ic,TRUE);
-       
-       /* special cases first */
-       /* both are bits */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               AOP_TYPE(right)== AOP_CRY) {
-               genModbits(left,right,result);
-               goto release ;
-       }
-       
-       /* if both are of size == 1 */
-       if (AOP_SIZE(left) == 1 &&
-               AOP_SIZE(right) == 1 ) {
-               genModOneByte(left,right,result);
-               goto release ;
-       }
-       
-       /* should have been converted to function call */
-       assert(0);
-       
+  operand *left = IC_LEFT(ic);
+  operand *right = IC_RIGHT(ic);
+  operand *result= IC_RESULT(ic);  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* assign the amsops */
+  aopOp (left,ic,FALSE);
+  aopOp (right,ic,FALSE);
+  aopOp (result,ic,TRUE);
+  
+  /* special cases first */
+  /* both are bits */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    AOP_TYPE(right)== AOP_CRY) {
+    genModbits(left,right,result);
+    goto release ;
+  }
+  
+  /* if both are of size == 1 */
+  if (AOP_SIZE(left) == 1 &&
+    AOP_SIZE(right) == 1 ) {
+    genModOneByte(left,right,result);
+    goto release ;
+  }
+  
+  /* should have been converted to function call */
+  assert(0);
+  
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE); 
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE); 
 }
 
 /*-----------------------------------------------------------------*/
@@ -3484,44 +3483,44 @@ note: May need to add parameter to indicate when a variable is in bit space.
 */
 static void genIfxJump (iCode *ic, char *jval)
 {
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if true label then we jump if condition
-       supplied is true */
-       if ( IC_TRUE(ic) ) {
-               
-               if(strcmp(jval,"a") == 0)
-                       emitSKPZ;
-               else if (strcmp(jval,"c") == 0)
-                       emitSKPC;
-               else {
-                       DEBUGpic14_emitcode ("; ***","%d - assuming %s is in bit space",__LINE__,jval);   
-                       emitpcode(POC_BTFSC,  newpCodeOpBit(jval,-1,1));
-               }
-               
-               emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ic)->key));
-               pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ic)->key+100 + labelOffset);
-               
-       }
-       else {
-               /* false label is present */
-               if(strcmp(jval,"a") == 0)
-                       emitSKPNZ;
-               else if (strcmp(jval,"c") == 0)
-                       emitSKPNC;
-               else {
-                       DEBUGpic14_emitcode ("; ***","%d - assuming %s is in bit space",__LINE__,jval);   
-                       emitpcode(POC_BTFSS,  newpCodeOpBit(jval,-1,1));
-               }
-               
-               emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ic)->key));
-               pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ic)->key+100 + labelOffset);
-               
-       }
-       
-       
-       /* mark the icode as generated */
-       ic->generated = 1;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if true label then we jump if condition
+  supplied is true */
+  if ( IC_TRUE(ic) ) {
+    
+    if(strcmp(jval,"a") == 0)
+      emitSKPZ;
+    else if (strcmp(jval,"c") == 0)
+      emitSKPC;
+    else {
+      DEBUGpic14_emitcode ("; ***","%d - assuming %s is in bit space",__LINE__,jval);   
+      emitpcode(POC_BTFSC,  newpCodeOpBit(jval,-1,1));
+    }
+    
+    emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ic)->key));
+    pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ic)->key+100 + labelOffset);
+    
+  }
+  else {
+    /* false label is present */
+    if(strcmp(jval,"a") == 0)
+      emitSKPNZ;
+    else if (strcmp(jval,"c") == 0)
+      emitSKPNC;
+    else {
+      DEBUGpic14_emitcode ("; ***","%d - assuming %s is in bit space",__LINE__,jval);   
+      emitpcode(POC_BTFSS,  newpCodeOpBit(jval,-1,1));
+    }
+    
+    emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ic)->key));
+    pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ic)->key+100 + labelOffset);
+    
+  }
+  
+  
+  /* mark the icode as generated */
+  ic->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3529,49 +3528,49 @@ static void genIfxJump (iCode *ic, char *jval)
 /*-----------------------------------------------------------------*/
 static void genSkip(iCode *ifx,int status_bit)
 {
-       if(!ifx)
-               return;
-       
-       if ( IC_TRUE(ifx) ) {
-               switch(status_bit) {
-               case 'z':
-                       emitSKPNZ;
-                       break;
-                       
-               case 'c':
-                       emitSKPNC;
-                       break;
-                       
-               case 'd':
-                       emitSKPDC;
-                       break;
-                       
-               }
-               
-               emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-               pic14_emitcode("goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
-               
-       } else {
-               
-               switch(status_bit) {
-                       
-               case 'z':
-                       emitSKPZ;
-                       break;
-                       
-               case 'c':
-                       emitSKPC;
-                       break;
-                       
-               case 'd':
-                       emitSKPDC;
-                       break;
-               }
-               emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-               pic14_emitcode("goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
-               
-       }
-       
+  if(!ifx)
+    return;
+  
+  if ( IC_TRUE(ifx) ) {
+    switch(status_bit) {
+    case 'z':
+      emitSKPNZ;
+      break;
+      
+    case 'c':
+      emitSKPNC;
+      break;
+      
+    case 'd':
+      emitSKPDC;
+      break;
+      
+    }
+    
+    emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+    pic14_emitcode("goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
+    
+  } else {
+    
+    switch(status_bit) {
+      
+    case 'z':
+      emitSKPZ;
+      break;
+      
+    case 'c':
+      emitSKPC;
+      break;
+      
+    case 'd':
+      emitSKPDC;
+      break;
+    }
+    emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+    pic14_emitcode("goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
+    
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3579,16 +3578,16 @@ static void genSkip(iCode *ifx,int status_bit)
 /*-----------------------------------------------------------------*/
 static void genSkipc(resolvedIfx *rifx)
 {
-       if(!rifx)
-               return;
-       
-       if(rifx->condition)
-               emitSKPC;
-       else
-               emitSKPNC;
-       
-       emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
-       rifx->generated = 1;
+  if(!rifx)
+    return;
+  
+  if(rifx->condition)
+    emitSKPC;
+  else
+    emitSKPNC;
+  
+  emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
+  rifx->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3596,16 +3595,16 @@ static void genSkipc(resolvedIfx *rifx)
 /*-----------------------------------------------------------------*/
 static void genSkipz2(resolvedIfx *rifx, int invert_condition)
 {
-       if(!rifx)
-               return;
-       
-       if( (rifx->condition ^ invert_condition) & 1)
-               emitSKPZ;
-       else
-               emitSKPNZ;
-       
-       emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
-       rifx->generated = 1;
+  if(!rifx)
+    return;
+  
+  if( (rifx->condition ^ invert_condition) & 1)
+    emitSKPZ;
+  else
+    emitSKPNZ;
+  
+  emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
+  rifx->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3613,41 +3612,41 @@ static void genSkipz2(resolvedIfx *rifx, int invert_condition)
 /*-----------------------------------------------------------------*/
 static void genSkipz(iCode *ifx, int condition)
 {
-       if(!ifx)
-               return;
-       
-       if(condition)
-               emitSKPNZ;
-       else
-               emitSKPZ;
-       
-       if ( IC_TRUE(ifx) )
-               emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-       else
-               emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-       
-       if ( IC_TRUE(ifx) )
-               pic14_emitcode("goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
-       else
-               pic14_emitcode("goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
-       
+  if(!ifx)
+    return;
+  
+  if(condition)
+    emitSKPNZ;
+  else
+    emitSKPZ;
+  
+  if ( IC_TRUE(ifx) )
+    emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+  else
+    emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+  
+  if ( IC_TRUE(ifx) )
+    pic14_emitcode("goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
+  else
+    pic14_emitcode("goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
+  
 }
 /*-----------------------------------------------------------------*/
 /* genSkipCond                                                     */
 /*-----------------------------------------------------------------*/
 static void genSkipCond(resolvedIfx *rifx,operand *op, int offset, int bit)
 {
-       if(!rifx)
-               return;
-       
-       if(rifx->condition)
-               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(op),offset,FALSE,FALSE),bit,0));
-       else
-               emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(op),offset,FALSE,FALSE),bit,0));
-       
-       
-       emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
-       rifx->generated = 1;
+  if(!rifx)
+    return;
+  
+  if(rifx->condition)
+    emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(op),offset,FALSE,FALSE),bit,0));
+  else
+    emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(op),offset,FALSE,FALSE),bit,0));
+  
+  
+  emitpcode(POC_GOTO,popGetLabel(rifx->lbl->key));
+  rifx->generated = 1;
 }
 
 #if 0
@@ -3659,23 +3658,23 @@ static void genSkipCond(resolvedIfx *rifx,operand *op, int offset, int bit)
 /*-----------------------------------------------------------------*/
 static int genChkZeroes(operand *op, int lit,  int size)
 {
-       
-       int i;
-       int flag =1;
-       
-       while(size--) {
-               i = (lit >> (size*8)) & 0xff;
-               
-               if(i==0) {
-                       if(flag) 
-                               emitpcode(POC_MOVFW, popGet(AOP(op),size));
-                       else
-                               emitpcode(POC_IORFW, popGet(AOP(op),size));
-                       flag = 0;
-               }
-       }
-       
-       return (flag==0);
+  
+  int i;
+  int flag =1;
+  
+  while(size--) {
+    i = (lit >> (size*8)) & 0xff;
+    
+    if(i==0) {
+      if(flag) 
+        emitpcode(POC_MOVFW, popGet(AOP(op),size));
+      else
+        emitpcode(POC_IORFW, popGet(AOP(op),size));
+      flag = 0;
+    }
+  }
+  
+  return (flag==0);
 }
 #endif
 
@@ -3683,660 +3682,660 @@ static int genChkZeroes(operand *op, int lit,  int size)
 /* genCmp :- greater or less than comparison                       */
 /*-----------------------------------------------------------------*/
 static void genCmp (operand *left,operand *right,
-                                       operand *result, iCode *ifx, int sign)
-{
-       int size; //, offset = 0 ;
-       unsigned long lit = 0L,i = 0;
-       resolvedIfx rFalseIfx;
-       //  resolvedIfx rTrueIfx;
-       symbol *truelbl;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /*
-       if(ifx) {
-       DEBUGpic14_emitcode ("; ***","true ifx is %s",((IC_TRUE(ifx) == NULL) ? "false" : "true"));
-       DEBUGpic14_emitcode ("; ***","false ifx is %s",((IC_FALSE(ifx) == NULL) ? "false" : "true"));
-       }
-       */
-       
-       resolveIfx(&rFalseIfx,ifx);
-       truelbl  = newiTempLabel(NULL);
-       size = max(AOP_SIZE(left),AOP_SIZE(right));
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
+          operand *result, iCode *ifx, int sign)
+{
+  int size; //, offset = 0 ;
+  unsigned long lit = 0L,i = 0;
+  resolvedIfx rFalseIfx;
+  //  resolvedIfx rTrueIfx;
+  symbol *truelbl;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /*
+  if(ifx) {
+  DEBUGpic14_emitcode ("; ***","true ifx is %s",((IC_TRUE(ifx) == NULL) ? "false" : "true"));
+  DEBUGpic14_emitcode ("; ***","false ifx is %s",((IC_FALSE(ifx) == NULL) ? "false" : "true"));
+  }
+  */
+  
+  resolveIfx(&rFalseIfx,ifx);
+  truelbl  = newiTempLabel(NULL);
+  size = max(AOP_SIZE(left),AOP_SIZE(right));
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
 #define _swapp
-       
-       /* if literal is on the right then swap with left */
-       if ((AOP_TYPE(right) == AOP_LIT)) {
-               operand *tmp = right ;
-               unsigned long mask = (0x100 << (8*(size-1))) - 1;
-               lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+  
+  /* if literal is on the right then swap with left */
+  if ((AOP_TYPE(right) == AOP_LIT)) {
+    operand *tmp = right ;
+    unsigned long mask = (0x100 << (8*(size-1))) - 1;
+    lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
 #ifdef _swapp
-               
-               lit = (lit - 1) & mask;
-               right = left;
-               left = tmp;
-               rFalseIfx.condition ^= 1;
+    
+    lit = (lit - 1) & mask;
+    right = left;
+    left = tmp;
+    rFalseIfx.condition ^= 1;
 #endif
-               
-       } else if ((AOP_TYPE(left) == AOP_LIT)) {
-               lit = (unsigned long)floatFromVal(AOP(left)->aopu.aop_lit);
-       }
-       
-       
-       //if(IC_TRUE(ifx) == NULL)
-       /* if left & right are bit variables */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               AOP_TYPE(right) == AOP_CRY ) {
-               pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
-               pic14_emitcode("anl","c,/%s",AOP(left)->aopu.aop_dir);
-       } else {
-       /* subtract right from left if at the
-       end the carry flag is set then we know that
-               left is greater than right */
-               
-               //    {
-               
-               symbol *lbl  = newiTempLabel(NULL);
-               
+    
+  } else if ((AOP_TYPE(left) == AOP_LIT)) {
+    lit = (unsigned long)floatFromVal(AOP(left)->aopu.aop_lit);
+  }
+  
+  
+  //if(IC_TRUE(ifx) == NULL)
+  /* if left & right are bit variables */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    AOP_TYPE(right) == AOP_CRY ) {
+    pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
+    pic14_emitcode("anl","c,/%s",AOP(left)->aopu.aop_dir);
+  } else {
+  /* subtract right from left if at the
+  end the carry flag is set then we know that
+    left is greater than right */
+    
+    //    {
+    
+    symbol *lbl  = newiTempLabel(NULL);
+    
 #ifndef _swapp
-               if(AOP_TYPE(right) == AOP_LIT) {
-                       
-                       //lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-                       
-                       DEBUGpic14_emitcode(";right lit","lit = 0x%x,sign=%d",lit,sign);
-                       
-                       /* special cases */
-                       
-                       if(lit == 0) {
-                               
-                               if(sign != 0) 
-                                       genSkipCond(&rFalseIfx,left,size-1,7);
-                               else 
-                                       /* no need to compare to 0...*/
-                                       /* NOTE: this is a de-generate compare that most certainly 
-                                       *       creates some dead code. */
-                                       emitpcode(POC_GOTO,popGetLabel(rFalseIfx.lbl->key));
-                               
-                               if(ifx) ifx->generated = 1;
-                               return;
-                               
-                       }
-                       size--;
-                       
-                       if(size == 0) {
-                               //i = (lit >> (size*8)) & 0xff;
-                               DEBUGpic14_emitcode(";right lit","line = %d",__LINE__);
-                               
-                               emitpcode(POC_MOVFW, popGet(AOP(left),size));
-                               
-                               i = ((0-lit) & 0xff);
-                               if(sign) {
-                                       if( i == 0x81) { 
-                                       /* lit is 0x7f, all signed chars are less than
-                                               * this except for 0x7f itself */
-                                               emitpcode(POC_XORLW, popGetLit(0x7f));
-                                               genSkipz2(&rFalseIfx,0);
-                                       } else {
-                                               emitpcode(POC_ADDLW, popGetLit(0x80));
-                                               emitpcode(POC_ADDLW, popGetLit(i^0x80));
-                                               genSkipc(&rFalseIfx);
-                                       }
-                                       
-                               } else {
-                                       if(lit == 1) {
-                                               genSkipz2(&rFalseIfx,1);
-                                       } else {
-                                               emitpcode(POC_ADDLW, popGetLit(i));
-                                               genSkipc(&rFalseIfx);
-                                       }
-                               }
-                               
-                               if(ifx) ifx->generated = 1;
-                               return;
-                       }
-                       
-                       /* chars are out of the way. now do ints and longs */
-                       
-                       
-                       DEBUGpic14_emitcode(";right lit","line = %d",__LINE__);
-                       
-                       /* special cases */
-                       
-                       if(sign) {
-                               
-                               if(lit == 0) {
-                                       genSkipCond(&rFalseIfx,left,size,7);
-                                       if(ifx) ifx->generated = 1;
-                                       return;
-                               }
-                               
-                               if(lit <0x100) {
-                                       DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
-                                       
-                                       //rFalseIfx.condition ^= 1;
-                                       //genSkipCond(&rFalseIfx,left,size,7);
-                                       //rFalseIfx.condition ^= 1;
-                                       
-                                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
-                                       if(rFalseIfx.condition)
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       else
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       
-                                       emitpcode(POC_MOVLW, popGetLit(0x100-lit));
-                                       emitpcode(POC_ADDFW, popGet(AOP(left),0));
-                                       emitpcode(POC_MOVFW, popGet(AOP(left),1));
-                                       
-                                       while(size > 1)
-                                               emitpcode(POC_IORFW, popGet(AOP(left),size--));
-                                       
-                                       if(rFalseIfx.condition) {
-                                               emitSKPZ;
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                               
-                                       } else {
-                                               emitSKPNZ;
-                                       }
-                                       
-                                       genSkipc(&rFalseIfx);
-                                       emitpLabel(truelbl->key);
-                                       if(ifx) ifx->generated = 1;
-                                       return;
-                                       
-                               }
-                               
-                               if(size == 1) {
-                                       
-                                       if( (lit & 0xff) == 0) {
-                                               /* lower byte is zero */
-                                               DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
-                                               i = ((lit >> 8) & 0xff) ^0x80;
-                                               emitpcode(POC_MOVFW, popGet(AOP(left),size));
-                                               emitpcode(POC_ADDLW, popGetLit( 0x80));
-                                               emitpcode(POC_ADDLW, popGetLit(0x100-i));
-                                               genSkipc(&rFalseIfx);
-                                               
-                                               
-                                               if(ifx) ifx->generated = 1;
-                                               return;
-                                               
-                                       }
-                               } else {
-                                       /* Special cases for signed longs */
-                                       if( (lit & 0xffffff) == 0) {
-                                               /* lower byte is zero */
-                                               DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
-                                               i = ((lit >> 8*3) & 0xff) ^0x80;
-                                               emitpcode(POC_MOVFW, popGet(AOP(left),size));
-                                               emitpcode(POC_ADDLW, popGetLit( 0x80));
-                                               emitpcode(POC_ADDLW, popGetLit(0x100-i));
-                                               genSkipc(&rFalseIfx);
-                                               
-                                               
-                                               if(ifx) ifx->generated = 1;
-                                               return;
-                                               
-                                       }
-                                       
-                               }
-                               
-                               
-                               if(lit & (0x80 << (size*8))) {
-                                       /* lit is negative */
-                                       DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
-                                       
-                                       //genSkipCond(&rFalseIfx,left,size,7);
-                                       
-                                       emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
-                                       
-                                       if(rFalseIfx.condition)
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       else
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       
-                                       
-                               } else {
-                                       /* lit is positive */
-                                       DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
-                                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
-                                       if(rFalseIfx.condition)
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       else
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       
-                               }
-                               
-                               /* There are no more special cases, so perform a general compare */
-                               
-                               emitpcode(POC_MOVLW, popGetLit((lit >> (size*8)) & 0xff));
-                               emitpcode(POC_SUBFW, popGet(AOP(left),size));
-                               
-                               while(size--) {
-                                       
-                                       emitpcode(POC_MOVLW, popGetLit((lit >> (size*8)) & 0xff));
-                                       emitSKPNZ;
-                                       emitpcode(POC_SUBFW, popGet(AOP(left),size));
-                               }
-                               //rFalseIfx.condition ^= 1;
-                               genSkipc(&rFalseIfx);
-                               
-                               emitpLabel(truelbl->key);
-                               
-                               if(ifx) ifx->generated = 1;
-                               return;
-                               
-                               
-         }
-         
-         
-         /* sign is out of the way. So now do an unsigned compare */
-         DEBUGpic14_emitcode(";right lit","line = %d unsigned compare to 0x%x",__LINE__,lit);
-         
-         
-         /* General case - compare to an unsigned literal on the right.*/
-         
-         i = (lit >> (size*8)) & 0xff;
-         emitpcode(POC_MOVLW, popGetLit(i));
-         emitpcode(POC_SUBFW, popGet(AOP(left),size));
-         while(size--) {
-                 i = (lit >> (size*8)) & 0xff;
-                 
-                 if(i) {
-                         emitpcode(POC_MOVLW, popGetLit(i));
-                         emitSKPNZ;
-                         emitpcode(POC_SUBFW, popGet(AOP(left),size));
-                 } else {
-                 /* this byte of the lit is zero, 
-                         *if it's not the last then OR in the variable */
-                         if(size)
-                                 emitpcode(POC_IORFW, popGet(AOP(left),size));
-                 }
-         }
-         
-         
-         emitpLabel(lbl->key);
-         //if(emitFinalCheck)
-         genSkipc(&rFalseIfx);
-         if(sign)
-                 emitpLabel(truelbl->key);
-         
-         if(ifx) ifx->generated = 1;
-         return;
-         
-         
-       }
+    if(AOP_TYPE(right) == AOP_LIT) {
+      
+      //lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+      
+      DEBUGpic14_emitcode(";right lit","lit = 0x%x,sign=%d",lit,sign);
+      
+      /* special cases */
+      
+      if(lit == 0) {
+        
+        if(sign != 0) 
+          genSkipCond(&rFalseIfx,left,size-1,7);
+        else 
+          /* no need to compare to 0...*/
+          /* NOTE: this is a de-generate compare that most certainly 
+          *       creates some dead code. */
+          emitpcode(POC_GOTO,popGetLabel(rFalseIfx.lbl->key));
+        
+        if(ifx) ifx->generated = 1;
+        return;
+        
+      }
+      size--;
+      
+      if(size == 0) {
+        //i = (lit >> (size*8)) & 0xff;
+        DEBUGpic14_emitcode(";right lit","line = %d",__LINE__);
+        
+        emitpcode(POC_MOVFW, popGet(AOP(left),size));
+        
+        i = ((0-lit) & 0xff);
+        if(sign) {
+          if( i == 0x81) { 
+          /* lit is 0x7f, all signed chars are less than
+            * this except for 0x7f itself */
+            emitpcode(POC_XORLW, popGetLit(0x7f));
+            genSkipz2(&rFalseIfx,0);
+          } else {
+            emitpcode(POC_ADDLW, popGetLit(0x80));
+            emitpcode(POC_ADDLW, popGetLit(i^0x80));
+            genSkipc(&rFalseIfx);
+          }
+          
+        } else {
+          if(lit == 1) {
+            genSkipz2(&rFalseIfx,1);
+          } else {
+            emitpcode(POC_ADDLW, popGetLit(i));
+            genSkipc(&rFalseIfx);
+          }
+        }
+        
+        if(ifx) ifx->generated = 1;
+        return;
+      }
+      
+      /* chars are out of the way. now do ints and longs */
+      
+      
+      DEBUGpic14_emitcode(";right lit","line = %d",__LINE__);
+      
+      /* special cases */
+      
+      if(sign) {
+        
+        if(lit == 0) {
+          genSkipCond(&rFalseIfx,left,size,7);
+          if(ifx) ifx->generated = 1;
+          return;
+        }
+        
+        if(lit <0x100) {
+          DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
+          
+          //rFalseIfx.condition ^= 1;
+          //genSkipCond(&rFalseIfx,left,size,7);
+          //rFalseIfx.condition ^= 1;
+          
+          emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
+          if(rFalseIfx.condition)
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          else
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          
+          emitpcode(POC_MOVLW, popGetLit(0x100-lit));
+          emitpcode(POC_ADDFW, popGet(AOP(left),0));
+          emitpcode(POC_MOVFW, popGet(AOP(left),1));
+          
+          while(size > 1)
+            emitpcode(POC_IORFW, popGet(AOP(left),size--));
+          
+          if(rFalseIfx.condition) {
+            emitSKPZ;
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+            
+          } else {
+            emitSKPNZ;
+          }
+          
+          genSkipc(&rFalseIfx);
+          emitpLabel(truelbl->key);
+          if(ifx) ifx->generated = 1;
+          return;
+          
+        }
+        
+        if(size == 1) {
+          
+          if( (lit & 0xff) == 0) {
+            /* lower byte is zero */
+            DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
+            i = ((lit >> 8) & 0xff) ^0x80;
+            emitpcode(POC_MOVFW, popGet(AOP(left),size));
+            emitpcode(POC_ADDLW, popGetLit( 0x80));
+            emitpcode(POC_ADDLW, popGetLit(0x100-i));
+            genSkipc(&rFalseIfx);
+            
+            
+            if(ifx) ifx->generated = 1;
+            return;
+            
+          }
+        } else {
+          /* Special cases for signed longs */
+          if( (lit & 0xffffff) == 0) {
+            /* lower byte is zero */
+            DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
+            i = ((lit >> 8*3) & 0xff) ^0x80;
+            emitpcode(POC_MOVFW, popGet(AOP(left),size));
+            emitpcode(POC_ADDLW, popGetLit( 0x80));
+            emitpcode(POC_ADDLW, popGetLit(0x100-i));
+            genSkipc(&rFalseIfx);
+            
+            
+            if(ifx) ifx->generated = 1;
+            return;
+            
+          }
+          
+        }
+        
+        
+        if(lit & (0x80 << (size*8))) {
+          /* lit is negative */
+          DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
+          
+          //genSkipCond(&rFalseIfx,left,size,7);
+          
+          emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
+          
+          if(rFalseIfx.condition)
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          else
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          
+          
+        } else {
+          /* lit is positive */
+          DEBUGpic14_emitcode(";right lit","line = %d signed compare to 0x%x",__LINE__,lit);
+          emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),size,FALSE,FALSE),7,0));
+          if(rFalseIfx.condition)
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          else
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          
+        }
+        
+        /* There are no more special cases, so perform a general compare */
+        
+        emitpcode(POC_MOVLW, popGetLit((lit >> (size*8)) & 0xff));
+        emitpcode(POC_SUBFW, popGet(AOP(left),size));
+        
+        while(size--) {
+          
+          emitpcode(POC_MOVLW, popGetLit((lit >> (size*8)) & 0xff));
+          emitSKPNZ;
+          emitpcode(POC_SUBFW, popGet(AOP(left),size));
+        }
+        //rFalseIfx.condition ^= 1;
+        genSkipc(&rFalseIfx);
+        
+        emitpLabel(truelbl->key);
+        
+        if(ifx) ifx->generated = 1;
+        return;
+        
+        
+    }
+    
+    
+    /* sign is out of the way. So now do an unsigned compare */
+    DEBUGpic14_emitcode(";right lit","line = %d unsigned compare to 0x%x",__LINE__,lit);
+    
+    
+    /* General case - compare to an unsigned literal on the right.*/
+    
+    i = (lit >> (size*8)) & 0xff;
+    emitpcode(POC_MOVLW, popGetLit(i));
+    emitpcode(POC_SUBFW, popGet(AOP(left),size));
+    while(size--) {
+      i = (lit >> (size*8)) & 0xff;
+      
+      if(i) {
+        emitpcode(POC_MOVLW, popGetLit(i));
+        emitSKPNZ;
+        emitpcode(POC_SUBFW, popGet(AOP(left),size));
+      } else {
+      /* this byte of the lit is zero, 
+        *if it's not the last then OR in the variable */
+        if(size)
+          emitpcode(POC_IORFW, popGet(AOP(left),size));
+      }
+    }
+    
+    
+    emitpLabel(lbl->key);
+    //if(emitFinalCheck)
+    genSkipc(&rFalseIfx);
+    if(sign)
+      emitpLabel(truelbl->key);
+    
+    if(ifx) ifx->generated = 1;
+    return;
+    
+    
+  }
 #endif  // _swapp
-       
-       if(AOP_TYPE(left) == AOP_LIT) {
-               //symbol *lbl = newiTempLabel(NULL);
-               
-               //EXPERIMENTAL lit = (unsigned long)(floatFromVal(AOP(left)->aopu.aop_lit));
-               
-               
-               DEBUGpic14_emitcode(";left lit","lit = 0x%x,sign=%d",lit,sign);
-               
-               /* Special cases */
-               if((lit == 0) && (sign == 0)){
-                       
-                       size--;
-                       emitpcode(POC_MOVFW, popGet(AOP(right),size));
-                       while(size) 
-                               emitpcode(POC_IORFW, popGet(AOP(right),--size));
-                       
-                       genSkipz2(&rFalseIfx,0);
-                       if(ifx) ifx->generated = 1;
-                       return;
-               }
-               
-               if(size==1) {
-                       /* Special cases */
-                       lit &= 0xff;
-                       if(((lit == 0xff) && !sign) || ((lit==0x7f) && sign)) {
-                               /* degenerate compare can never be true */
-                               if(rFalseIfx.condition == 0)
-                                       emitpcode(POC_GOTO,popGetLabel(rFalseIfx.lbl->key));
-                               
-                               if(ifx) ifx->generated = 1;
-                               return;
-                       }
-                       
-                       if(sign) {
-                               /* signed comparisons to a literal byte */
-                               
-                               int lp1 = (lit+1) & 0xff;
-                               
-                               DEBUGpic14_emitcode(";left lit","line = %d lit = 0x%x",__LINE__,lit);
-                               switch (lp1) {
-                               case 0:
-                                       rFalseIfx.condition ^= 1;
-                                       genSkipCond(&rFalseIfx,right,0,7);
-                                       break;
-                               case 0x7f:
-                                       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-                                       emitpcode(POC_XORLW, popGetLit(0x7f));
-                                       genSkipz2(&rFalseIfx,1);
-                                       break;
-                               default:
-                                       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-                                       emitpcode(POC_ADDLW, popGetLit(0x80));
-                                       emitpcode(POC_ADDLW, popGetLit(((-(lit+1)) & 0xff) ^ 0x80));
-                                       rFalseIfx.condition ^= 1;
-                                       genSkipc(&rFalseIfx);
-                                       break;
-                               }
-                               if(ifx) ifx->generated = 1;
-                       } else {
-                               /* unsigned comparisons to a literal byte */
-                               
-                               switch(lit & 0xff ) {
-                               case 0:
-                                       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-                                       genSkipz2(&rFalseIfx,0);
-                                       if(ifx) ifx->generated = 1;
-                                       break;
-                               case 0x7f:
-                                       genSkipCond(&rFalseIfx,right,0,7);
-                                       if(ifx) ifx->generated = 1;
-                                       break;
-                                       
-                               default:
-                                       emitpcode(POC_MOVLW, popGetLit((lit+1) & 0xff));
-                                       emitpcode(POC_SUBFW, popGet(AOP(right),0));
-                                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                                       rFalseIfx.condition ^= 1;
-                                       if (AOP_TYPE(result) == AOP_CRY) {
-                                               genSkipc(&rFalseIfx);
-                                               if(ifx) ifx->generated = 1;
-                                       } else {
-                                               DEBUGpic14_emitcode ("; ***","%s  %d RFIfx.cond=%d",__FUNCTION__,__LINE__, rFalseIfx.condition);
-                                               emitpcode(POC_CLRF, popGet(AOP(result),0));
-                                               emitpcode(POC_RLF, popGet(AOP(result),0));
-                                               emitpcode(POC_MOVLW, popGetLit(0x01));
-                                               emitpcode(POC_XORWF, popGet(AOP(result),0));
-                                       }             
-                                       break;
-                               }
-                       }
-                       
-                       //goto check_carry;
-                       return;
-                       
-               } else {
-                       
-                       /* Size is greater than 1 */
-                       
-                       if(sign) {
-                               int lp1 = lit+1;
-                               
-                               size--;
-                               
-                               if(lp1 == 0) {
-                                       /* this means lit = 0xffffffff, or -1 */
-                                       
-                                       
-                                       DEBUGpic14_emitcode(";left lit = -1","line = %d ",__LINE__);
-                                       rFalseIfx.condition ^= 1;
-                                       genSkipCond(&rFalseIfx,right,size,7);
-                                       if(ifx) ifx->generated = 1;
-                                       return;
-                               }
-                               
-                               if(lit == 0) {
-                                       int s = size;
-                                       
-                                       if(rFalseIfx.condition) {
-                                               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       }
-                                       
-                                       emitpcode(POC_MOVFW, popGet(AOP(right),size));
-                                       while(size--)
-                                               emitpcode(POC_IORFW, popGet(AOP(right),size));
-                                       
-                                       
-                                       emitSKPZ;
-                                       if(rFalseIfx.condition) {
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                               emitpLabel(truelbl->key);
-                                       }else {
-                                               rFalseIfx.condition ^= 1;
-                                               genSkipCond(&rFalseIfx,right,s,7);
-                                       }
-                                       
-                                       if(ifx) ifx->generated = 1;
-                                       return;
-                               }
-                               
-                               if((size == 1) &&  (0 == (lp1&0xff))) {
-                                       /* lower byte of signed word is zero */
-                                       DEBUGpic14_emitcode(";left lit","line = %d  0x%x+1 low byte is zero",__LINE__,lit);
-                                       i = ((lp1 >> 8) & 0xff) ^0x80;
-                                       emitpcode(POC_MOVFW, popGet(AOP(right),size));
-                                       emitpcode(POC_ADDLW, popGetLit( 0x80));
-                                       emitpcode(POC_ADDLW, popGetLit(0x100-i));
-                                       rFalseIfx.condition ^= 1;
-                                       genSkipc(&rFalseIfx);
-                                       
-                                       
-                                       if(ifx) ifx->generated = 1;
-                                       return;
-                               }
-                               
-                               if(lit & (0x80 << (size*8))) {
-                                       /* Lit is less than zero */
-                                       DEBUGpic14_emitcode(";left lit","line = %d  0x%x is less than 0",__LINE__,lit);
-                                       //rFalseIfx.condition ^= 1;
-                                       //genSkipCond(&rFalseIfx,left,size,7);
-                                       //rFalseIfx.condition ^= 1;
-                                       emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
-                                       //emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       
-                                       if(rFalseIfx.condition)
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       else
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       
-                                       
-                               } else {
-                                       /* Lit is greater than or equal to zero */
-                                       DEBUGpic14_emitcode(";left lit","line = %d  0x%x is greater than 0",__LINE__,lit);
-                                       //rFalseIfx.condition ^= 1;
-                                       //genSkipCond(&rFalseIfx,right,size,7);
-                                       //rFalseIfx.condition ^= 1;
-                                       
-                                       //emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
-                                       //emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       
-                                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
-                                       if(rFalseIfx.condition)
-                                               emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                                       else
-                                               emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                                       
-                               }
-                               
-                               
-                               emitpcode(POC_MOVLW, popGetLit((lp1 >> (size*8)) & 0xff));
-                               emitpcode(POC_SUBFW, popGet(AOP(right),size));
-                               
-                               while(size--) {
-                                       
-                                       emitpcode(POC_MOVLW, popGetLit((lp1 >> (size*8)) & 0xff));
-                                       emitSKPNZ;
-                                       emitpcode(POC_SUBFW, popGet(AOP(right),size));
-                               }
-                               rFalseIfx.condition ^= 1;
-                               //rFalseIfx.condition = 1;
-                               genSkipc(&rFalseIfx);
-                               
-                               emitpLabel(truelbl->key);
-                               
-                               if(ifx) ifx->generated = 1;
-                               return;
-                               // end of if (sign)
-       } else {
-               
-               /* compare word or long to an unsigned literal on the right.*/
-               
-               
-               size--;
-               if(lit < 0xff) {
-                       DEBUGpic14_emitcode ("; ***","%s  %d lit =0x%x < 0xff",__FUNCTION__,__LINE__,lit);
-                       switch (lit) {
-                       case 0:
-                               break; /* handled above */
-                       /*
-                       case 0xff:
-                       emitpcode(POC_MOVFW, popGet(AOP(right),size));
-                       while(size--)
-                       emitpcode(POC_IORFW, popGet(AOP(right),size));
-                       genSkipz2(&rFalseIfx,0);
-                       break;
-                       */
-                       default:
-                               emitpcode(POC_MOVFW, popGet(AOP(right),size));
-                               while(--size)
-                                       emitpcode(POC_IORFW, popGet(AOP(right),size));
-                               
-                               emitSKPZ;
-                               if(rFalseIfx.condition)
-                                       emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
-                               else
-                                       emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
-                               
-                               
-                               emitpcode(POC_MOVLW, popGetLit(lit+1));
-                               emitpcode(POC_SUBFW, popGet(AOP(right),0));
-                               
-                               rFalseIfx.condition ^= 1;
-                               genSkipc(&rFalseIfx);
-                       }
-                       
-                       emitpLabel(truelbl->key);
-                       
-                       if(ifx) ifx->generated = 1;
-                       return;
-               }
-               
-               
-               lit++;
-               DEBUGpic14_emitcode ("; ***","%s  %d lit =0x%x",__FUNCTION__,__LINE__,lit);
-               i = (lit >> (size*8)) & 0xff;
-               
-               emitpcode(POC_MOVLW, popGetLit(i));
-               emitpcode(POC_SUBFW, popGet(AOP(right),size));
-               
-               while(size--) {
-                       i = (lit >> (size*8)) & 0xff;
-                       
-                       if(i) {
-                               emitpcode(POC_MOVLW, popGetLit(i));
-                               emitSKPNZ;
-                               emitpcode(POC_SUBFW, popGet(AOP(right),size));
-                       } else {
-                       /* this byte of the lit is zero, 
-                               *if it's not the last then OR in the variable */
-                               if(size)
-                                       emitpcode(POC_IORFW, popGet(AOP(right),size));
-                       }
-               }
-               
-               
-               emitpLabel(lbl->key);
-               
-               rFalseIfx.condition ^= 1;
-               genSkipc(&rFalseIfx);
-       }
-       
-       if(sign)
-               emitpLabel(truelbl->key);
-       if(ifx) ifx->generated = 1;
-       return;
-         }
-       }
-       /* Compare two variables */
-       
-       DEBUGpic14_emitcode(";sign","%d",sign);
-       
-       size--;
-       if(sign) {
-               /* Sigh. thus sucks... */
-               if(size) {
-                       emitpcode(POC_MOVFW, popGet(AOP(left),size));
-                       emitpcode(POC_MOVWF, popRegFromIdx(Gstack_base_addr));
-                       emitpcode(POC_MOVLW, popGetLit(0x80));
-                       emitpcode(POC_XORWF, popRegFromIdx(Gstack_base_addr));
-                       emitpcode(POC_XORFW, popGet(AOP(right),size));
-                       emitpcode(POC_SUBFW, popRegFromIdx(Gstack_base_addr));
-               } else {
-                       /* Signed char comparison */
-                       /* Special thanks to Nikolai Golovchenko for this snippet */
-                       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-                       emitpcode(POC_SUBFW, popGet(AOP(left),0));
-                       emitpcode(POC_RRFW,  popGet(AOP(left),0)); /* could be any register */
-                       emitpcode(POC_XORFW, popGet(AOP(left),0));
-                       emitpcode(POC_XORFW, popGet(AOP(right),0));
-                       emitpcode(POC_ADDLW, popGetLit(0x80));
-                       
-                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                       genSkipc(&rFalseIfx);
-                       
-                       if(ifx) ifx->generated = 1;
-                       return;
-               }
-               
-       } else {
-               
-               emitpcode(POC_MOVFW, popGet(AOP(right),size));
-               emitpcode(POC_SUBFW, popGet(AOP(left),size));
-       }
-       
-       
-       /* The rest of the bytes of a multi-byte compare */
-       while (size) {
-               
-               emitSKPZ;
-               emitpcode(POC_GOTO,  popGetLabel(lbl->key));
-               size--;
-               
-               emitpcode(POC_MOVFW, popGet(AOP(right),size));
-               emitpcode(POC_SUBFW, popGet(AOP(left),size));
-               
-               
-       }
-       
-       emitpLabel(lbl->key);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if ((AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)) || 
-               (AOP_TYPE(result) == AOP_REG)) {
-               emitpcode(POC_CLRF, popGet(AOP(result),0));
-               emitpcode(POC_RLF, popGet(AOP(result),0));
-       } else {
-               genSkipc(&rFalseIfx);
-       }             
-       //genSkipc(&rFalseIfx);
-       if(ifx) ifx->generated = 1;
-       
-       return;
-       
+  
+  if(AOP_TYPE(left) == AOP_LIT) {
+    //symbol *lbl = newiTempLabel(NULL);
+    
+    //EXPERIMENTAL lit = (unsigned long)(floatFromVal(AOP(left)->aopu.aop_lit));
+    
+    
+    DEBUGpic14_emitcode(";left lit","lit = 0x%x,sign=%d",lit,sign);
+    
+    /* Special cases */
+    if((lit == 0) && (sign == 0)){
+      
+      size--;
+      emitpcode(POC_MOVFW, popGet(AOP(right),size));
+      while(size) 
+        emitpcode(POC_IORFW, popGet(AOP(right),--size));
+      
+      genSkipz2(&rFalseIfx,0);
+      if(ifx) ifx->generated = 1;
+      return;
+    }
+    
+    if(size==1) {
+      /* Special cases */
+      lit &= 0xff;
+      if(((lit == 0xff) && !sign) || ((lit==0x7f) && sign)) {
+        /* degenerate compare can never be true */
+        if(rFalseIfx.condition == 0)
+          emitpcode(POC_GOTO,popGetLabel(rFalseIfx.lbl->key));
+        
+        if(ifx) ifx->generated = 1;
+        return;
+      }
+      
+      if(sign) {
+        /* signed comparisons to a literal byte */
+        
+        int lp1 = (lit+1) & 0xff;
+        
+        DEBUGpic14_emitcode(";left lit","line = %d lit = 0x%x",__LINE__,lit);
+        switch (lp1) {
+        case 0:
+          rFalseIfx.condition ^= 1;
+          genSkipCond(&rFalseIfx,right,0,7);
+          break;
+        case 0x7f:
+          emitpcode(POC_MOVFW, popGet(AOP(right),0));
+          emitpcode(POC_XORLW, popGetLit(0x7f));
+          genSkipz2(&rFalseIfx,1);
+          break;
+        default:
+          emitpcode(POC_MOVFW, popGet(AOP(right),0));
+          emitpcode(POC_ADDLW, popGetLit(0x80));
+          emitpcode(POC_ADDLW, popGetLit(((-(lit+1)) & 0xff) ^ 0x80));
+          rFalseIfx.condition ^= 1;
+          genSkipc(&rFalseIfx);
+          break;
+        }
+        if(ifx) ifx->generated = 1;
+      } else {
+        /* unsigned comparisons to a literal byte */
+        
+        switch(lit & 0xff ) {
+        case 0:
+          emitpcode(POC_MOVFW, popGet(AOP(right),0));
+          genSkipz2(&rFalseIfx,0);
+          if(ifx) ifx->generated = 1;
+          break;
+        case 0x7f:
+          genSkipCond(&rFalseIfx,right,0,7);
+          if(ifx) ifx->generated = 1;
+          break;
+          
+        default:
+          emitpcode(POC_MOVLW, popGetLit((lit+1) & 0xff));
+          emitpcode(POC_SUBFW, popGet(AOP(right),0));
+          DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+          rFalseIfx.condition ^= 1;
+          if (AOP_TYPE(result) == AOP_CRY) {
+            genSkipc(&rFalseIfx);
+            if(ifx) ifx->generated = 1;
+          } else {
+            DEBUGpic14_emitcode ("; ***","%s  %d RFIfx.cond=%d",__FUNCTION__,__LINE__, rFalseIfx.condition);
+            emitpcode(POC_CLRF, popGet(AOP(result),0));
+            emitpcode(POC_RLF, popGet(AOP(result),0));
+            emitpcode(POC_MOVLW, popGetLit(0x01));
+            emitpcode(POC_XORWF, popGet(AOP(result),0));
+          }       
+          break;
+        }
+      }
+      
+      //goto check_carry;
+      return;
+      
+    } else {
+      
+      /* Size is greater than 1 */
+      
+      if(sign) {
+        int lp1 = lit+1;
+        
+        size--;
+        
+        if(lp1 == 0) {
+          /* this means lit = 0xffffffff, or -1 */
+          
+          
+          DEBUGpic14_emitcode(";left lit = -1","line = %d ",__LINE__);
+          rFalseIfx.condition ^= 1;
+          genSkipCond(&rFalseIfx,right,size,7);
+          if(ifx) ifx->generated = 1;
+          return;
+        }
+        
+        if(lit == 0) {
+          int s = size;
+          
+          if(rFalseIfx.condition) {
+            emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          }
+          
+          emitpcode(POC_MOVFW, popGet(AOP(right),size));
+          while(size--)
+            emitpcode(POC_IORFW, popGet(AOP(right),size));
+          
+          
+          emitSKPZ;
+          if(rFalseIfx.condition) {
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+            emitpLabel(truelbl->key);
+          }else {
+            rFalseIfx.condition ^= 1;
+            genSkipCond(&rFalseIfx,right,s,7);
+          }
+          
+          if(ifx) ifx->generated = 1;
+          return;
+        }
+        
+        if((size == 1) &&  (0 == (lp1&0xff))) {
+          /* lower byte of signed word is zero */
+          DEBUGpic14_emitcode(";left lit","line = %d  0x%x+1 low byte is zero",__LINE__,lit);
+          i = ((lp1 >> 8) & 0xff) ^0x80;
+          emitpcode(POC_MOVFW, popGet(AOP(right),size));
+          emitpcode(POC_ADDLW, popGetLit( 0x80));
+          emitpcode(POC_ADDLW, popGetLit(0x100-i));
+          rFalseIfx.condition ^= 1;
+          genSkipc(&rFalseIfx);
+          
+          
+          if(ifx) ifx->generated = 1;
+          return;
+        }
+        
+        if(lit & (0x80 << (size*8))) {
+          /* Lit is less than zero */
+          DEBUGpic14_emitcode(";left lit","line = %d  0x%x is less than 0",__LINE__,lit);
+          //rFalseIfx.condition ^= 1;
+          //genSkipCond(&rFalseIfx,left,size,7);
+          //rFalseIfx.condition ^= 1;
+          emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
+          //emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          
+          if(rFalseIfx.condition)
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          else
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          
+          
+        } else {
+          /* Lit is greater than or equal to zero */
+          DEBUGpic14_emitcode(";left lit","line = %d  0x%x is greater than 0",__LINE__,lit);
+          //rFalseIfx.condition ^= 1;
+          //genSkipCond(&rFalseIfx,right,size,7);
+          //rFalseIfx.condition ^= 1;
+          
+          //emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
+          //emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          
+          emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),size,FALSE,FALSE),7,0));
+          if(rFalseIfx.condition)
+            emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+          else
+            emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+          
+        }
+        
+        
+        emitpcode(POC_MOVLW, popGetLit((lp1 >> (size*8)) & 0xff));
+        emitpcode(POC_SUBFW, popGet(AOP(right),size));
+        
+        while(size--) {
+          
+          emitpcode(POC_MOVLW, popGetLit((lp1 >> (size*8)) & 0xff));
+          emitSKPNZ;
+          emitpcode(POC_SUBFW, popGet(AOP(right),size));
+        }
+        rFalseIfx.condition ^= 1;
+        //rFalseIfx.condition = 1;
+        genSkipc(&rFalseIfx);
+        
+        emitpLabel(truelbl->key);
+        
+        if(ifx) ifx->generated = 1;
+        return;
+        // end of if (sign)
+  } else {
+    
+    /* compare word or long to an unsigned literal on the right.*/
+    
+    
+    size--;
+    if(lit < 0xff) {
+      DEBUGpic14_emitcode ("; ***","%s  %d lit =0x%x < 0xff",__FUNCTION__,__LINE__,lit);
+      switch (lit) {
+      case 0:
+        break; /* handled above */
+      /*
+      case 0xff:
+      emitpcode(POC_MOVFW, popGet(AOP(right),size));
+      while(size--)
+      emitpcode(POC_IORFW, popGet(AOP(right),size));
+      genSkipz2(&rFalseIfx,0);
+      break;
+      */
+      default:
+        emitpcode(POC_MOVFW, popGet(AOP(right),size));
+        while(--size)
+          emitpcode(POC_IORFW, popGet(AOP(right),size));
+        
+        emitSKPZ;
+        if(rFalseIfx.condition)
+          emitpcode(POC_GOTO,  popGetLabel(rFalseIfx.lbl->key));
+        else
+          emitpcode(POC_GOTO,  popGetLabel(truelbl->key));
+        
+        
+        emitpcode(POC_MOVLW, popGetLit(lit+1));
+        emitpcode(POC_SUBFW, popGet(AOP(right),0));
+        
+        rFalseIfx.condition ^= 1;
+        genSkipc(&rFalseIfx);
+      }
+      
+      emitpLabel(truelbl->key);
+      
+      if(ifx) ifx->generated = 1;
+      return;
+    }
+    
+    
+    lit++;
+    DEBUGpic14_emitcode ("; ***","%s  %d lit =0x%x",__FUNCTION__,__LINE__,lit);
+    i = (lit >> (size*8)) & 0xff;
+    
+    emitpcode(POC_MOVLW, popGetLit(i));
+    emitpcode(POC_SUBFW, popGet(AOP(right),size));
+    
+    while(size--) {
+      i = (lit >> (size*8)) & 0xff;
+      
+      if(i) {
+        emitpcode(POC_MOVLW, popGetLit(i));
+        emitSKPNZ;
+        emitpcode(POC_SUBFW, popGet(AOP(right),size));
+      } else {
+      /* this byte of the lit is zero, 
+        *if it's not the last then OR in the variable */
+        if(size)
+          emitpcode(POC_IORFW, popGet(AOP(right),size));
+      }
+    }
+    
+    
+    emitpLabel(lbl->key);
+    
+    rFalseIfx.condition ^= 1;
+    genSkipc(&rFalseIfx);
+  }
+  
+  if(sign)
+    emitpLabel(truelbl->key);
+  if(ifx) ifx->generated = 1;
+  return;
+    }
+  }
+  /* Compare two variables */
+  
+  DEBUGpic14_emitcode(";sign","%d",sign);
+  
+  size--;
+  if(sign) {
+    /* Sigh. thus sucks... */
+    if(size) {
+      emitpcode(POC_MOVFW, popGet(AOP(left),size));
+      emitpcode(POC_MOVWF, popRegFromIdx(Gstack_base_addr));
+      emitpcode(POC_MOVLW, popGetLit(0x80));
+      emitpcode(POC_XORWF, popRegFromIdx(Gstack_base_addr));
+      emitpcode(POC_XORFW, popGet(AOP(right),size));
+      emitpcode(POC_SUBFW, popRegFromIdx(Gstack_base_addr));
+    } else {
+      /* Signed char comparison */
+      /* Special thanks to Nikolai Golovchenko for this snippet */
+      emitpcode(POC_MOVFW, popGet(AOP(right),0));
+      emitpcode(POC_SUBFW, popGet(AOP(left),0));
+      emitpcode(POC_RRFW,  popGet(AOP(left),0)); /* could be any register */
+      emitpcode(POC_XORFW, popGet(AOP(left),0));
+      emitpcode(POC_XORFW, popGet(AOP(right),0));
+      emitpcode(POC_ADDLW, popGetLit(0x80));
+      
+      DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+      genSkipc(&rFalseIfx);
+      
+      if(ifx) ifx->generated = 1;
+      return;
+    }
+    
+  } else {
+    
+    emitpcode(POC_MOVFW, popGet(AOP(right),size));
+    emitpcode(POC_SUBFW, popGet(AOP(left),size));
+  }
+  
+  
+  /* The rest of the bytes of a multi-byte compare */
+  while (size) {
+    
+    emitSKPZ;
+    emitpcode(POC_GOTO,  popGetLabel(lbl->key));
+    size--;
+    
+    emitpcode(POC_MOVFW, popGet(AOP(right),size));
+    emitpcode(POC_SUBFW, popGet(AOP(left),size));
+    
+    
+  }
+  
+  emitpLabel(lbl->key);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if ((AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)) || 
+    (AOP_TYPE(result) == AOP_REG)) {
+    emitpcode(POC_CLRF, popGet(AOP(result),0));
+    emitpcode(POC_RLF, popGet(AOP(result),0));
+  } else {
+    genSkipc(&rFalseIfx);
+  }       
+  //genSkipc(&rFalseIfx);
+  if(ifx) ifx->generated = 1;
+  
+  return;
+  
   }
   
   // check_carry:
   if (AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)) {
-         DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-         pic14_outBitC(result);
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    pic14_outBitC(result);
   } else {
-         DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-         /* if the result is used in the next
-         ifx conditional branch then generate
-         code a little differently */
-         if (ifx )
-                 genIfxJump (ifx,"c");
-         else
-                 pic14_outBitC(result);
-         /* leave the result in acc */
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    /* if the result is used in the next
+    ifx conditional branch then generate
+    code a little differently */
+    if (ifx )
+      genIfxJump (ifx,"c");
+    else
+      pic14_outBitC(result);
+    /* leave the result in acc */
   }
   
 }
@@ -4346,28 +4345,28 @@ static void genCmp (operand *left,operand *right,
 /*-----------------------------------------------------------------*/
 static void genCmpGt (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       sym_link *letype , *retype;
-       int sign ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       left = IC_LEFT(ic);
-       right= IC_RIGHT(ic);
-       result = IC_RESULT(ic);
-       
-       letype = getSpec(operandType(left));
-       retype =getSpec(operandType(right));
-       sign =  !(SPEC_USIGN(letype) | SPEC_USIGN(retype));
-       /* assign the amsops */
-       aopOp (left,ic,FALSE);
-       aopOp (right,ic,FALSE);
-       aopOp (result,ic,TRUE);
-       
-       genCmp(right, left, result, ifx, sign);
-       
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE); 
+  operand *left, *right, *result;
+  sym_link *letype , *retype;
+  int sign ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  left = IC_LEFT(ic);
+  right= IC_RIGHT(ic);
+  result = IC_RESULT(ic);
+  
+  letype = getSpec(operandType(left));
+  retype =getSpec(operandType(right));
+  sign =  !(SPEC_USIGN(letype) | SPEC_USIGN(retype));
+  /* assign the amsops */
+  aopOp (left,ic,FALSE);
+  aopOp (right,ic,FALSE);
+  aopOp (result,ic,TRUE);
+  
+  genCmp(right, left, result, ifx, sign);
+  
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE); 
 }
 
 /*-----------------------------------------------------------------*/
@@ -4375,29 +4374,29 @@ static void genCmpGt (iCode *ic, iCode *ifx)
 /*-----------------------------------------------------------------*/
 static void genCmpLt (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       sym_link *letype , *retype;
-       int sign ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       left = IC_LEFT(ic);
-       right= IC_RIGHT(ic);
-       result = IC_RESULT(ic);
-       
-       letype = getSpec(operandType(left));
-       retype =getSpec(operandType(right));
-       sign =  !(SPEC_USIGN(letype) | SPEC_USIGN(retype));
-       
-       /* assign the amsops */
-       aopOp (left,ic,FALSE);
-       aopOp (right,ic,FALSE);
-       aopOp (result,ic,TRUE);
-       
-       genCmp(left, right, result, ifx, sign);
-       
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE); 
+  operand *left, *right, *result;
+  sym_link *letype , *retype;
+  int sign ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  left = IC_LEFT(ic);
+  right= IC_RIGHT(ic);
+  result = IC_RESULT(ic);
+  
+  letype = getSpec(operandType(left));
+  retype =getSpec(operandType(right));
+  sign =  !(SPEC_USIGN(letype) | SPEC_USIGN(retype));
+  
+  /* assign the amsops */
+  aopOp (left,ic,FALSE);
+  aopOp (right,ic,FALSE);
+  aopOp (result,ic,TRUE);
+  
+  genCmp(left, right, result, ifx, sign);
+  
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE); 
 }
 
 /*-----------------------------------------------------------------*/
@@ -4405,50 +4404,50 @@ static void genCmpLt (iCode *ic, iCode *ifx)
 /*-----------------------------------------------------------------*/
 static void genc16bit2lit(operand *op, int lit, int offset)
 {
-       int i;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d, lit = %d",__FUNCTION__,__LINE__,lit);
-       if( (lit&0xff) == 0) 
-               i=1;
-       else
-               i=0;
-       
-       switch( BYTEofLONG(lit,i)) { 
-       case 0:
-               emitpcode(POC_MOVFW,popGet(AOP(op),offset+i));
-               break;
-       case 1:
-               emitpcode(POC_DECFW,popGet(AOP(op),offset+i));
-               break;
-       case 0xff:
-               emitpcode(POC_INCFW,popGet(AOP(op),offset+i));
-               break;
-       default:
-               emitpcode(POC_MOVFW,popGet(AOP(op),offset+i));
-               emitpcode(POC_XORLW,popGetLit(BYTEofLONG(lit,i)));
-       }
-       
-       i ^= 1;
-       
-       switch( BYTEofLONG(lit,i)) { 
-       case 0:
-               emitpcode(POC_IORFW,popGet(AOP(op),offset+i));
-               break;
-       case 1:
-               emitSKPNZ;
-               emitpcode(POC_DECFW,popGet(AOP(op),offset+i));
-               break;
-       case 0xff:
-               emitSKPNZ;
-               emitpcode(POC_INCFW,popGet(AOP(op),offset+i));
-               break;
-       default:
-               emitpcode(POC_MOVLW,popGetLit(BYTEofLONG(lit,i)));
-               emitSKPNZ;
-               emitpcode(POC_XORFW,popGet(AOP(op),offset+i));
-               
-       }
-       
+  int i;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d, lit = %d",__FUNCTION__,__LINE__,lit);
+  if( (lit&0xff) == 0) 
+    i=1;
+  else
+    i=0;
+  
+  switch( BYTEofLONG(lit,i)) { 
+  case 0:
+    emitpcode(POC_MOVFW,popGet(AOP(op),offset+i));
+    break;
+  case 1:
+    emitpcode(POC_DECFW,popGet(AOP(op),offset+i));
+    break;
+  case 0xff:
+    emitpcode(POC_INCFW,popGet(AOP(op),offset+i));
+    break;
+  default:
+    emitpcode(POC_MOVFW,popGet(AOP(op),offset+i));
+    emitpcode(POC_XORLW,popGetLit(BYTEofLONG(lit,i)));
+  }
+  
+  i ^= 1;
+  
+  switch( BYTEofLONG(lit,i)) { 
+  case 0:
+    emitpcode(POC_IORFW,popGet(AOP(op),offset+i));
+    break;
+  case 1:
+    emitSKPNZ;
+    emitpcode(POC_DECFW,popGet(AOP(op),offset+i));
+    break;
+  case 0xff:
+    emitSKPNZ;
+    emitpcode(POC_INCFW,popGet(AOP(op),offset+i));
+    break;
+  default:
+    emitpcode(POC_MOVLW,popGetLit(BYTEofLONG(lit,i)));
+    emitSKPNZ;
+    emitpcode(POC_XORFW,popGet(AOP(op),offset+i));
+    
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -4456,192 +4455,192 @@ static void genc16bit2lit(operand *op, int lit, int offset)
 /*-----------------------------------------------------------------*/
 static void gencjne(operand *left, operand *right, operand *result, iCode *ifx)
 {
-       int size = max(AOP_SIZE(left),AOP_SIZE(right));
-       int offset = 0;
-       int res_offset = 0;  /* the result may be a different size then left or right */
-       int res_size = AOP_SIZE(result);
-       resolvedIfx rIfx;
-       symbol *lbl;
-       
-       unsigned long lit = 0L;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       if(result)
-               DEBUGpic14_emitcode ("; ***","%s  %d result is not null",__FUNCTION__,__LINE__);
-       resolveIfx(&rIfx,ifx);
-       lbl =  newiTempLabel(NULL);
-       
-       
-       /* if the left side is a literal or 
-       if the right is in a pointer register and left 
-       is not */
-       if ((AOP_TYPE(left) == AOP_LIT) || 
-               (IS_AOP_PREG(right) && !IS_AOP_PREG(left))) {
-               operand *t = right;
-               right = left;
-               left = t;
-       }
-       if(AOP_TYPE(right) == AOP_LIT)
-               lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-       
-       /* if the right side is a literal then anything goes */
-       if (AOP_TYPE(right) == AOP_LIT &&
-               AOP_TYPE(left) != AOP_DIR ) {
-               switch(size) {
-               case 2:
-                       genc16bit2lit(left, lit, 0);
-                       emitSKPNZ;
-                       emitpcode(POC_GOTO,popGetLabel(lbl->key));
-                       break;
-               default:
-                       while (size--) {
-                               if(lit & 0xff) {
-                                       emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                       emitpcode(POC_XORLW,popGetLit(lit & 0xff));
-                               } else {
-                                       emitpcode(POC_MOVF,popGet(AOP(left),offset));
-                               }
-                               
-                               emitSKPNZ;
-                               emitpcode(POC_GOTO,popGetLabel(lbl->key));
-                               offset++;
-                               if(res_offset < res_size-1)
-                                       res_offset++;
-                               lit >>= 8;
-                       }
-                       break;
-               }
-       }
-       
-       /* if the right side is in a register or in direct space or
-       if the left is a pointer register & right is not */    
-       else if (AOP_TYPE(right) == AOP_REG ||
-               AOP_TYPE(right) == AOP_DIR || 
-               (AOP_TYPE(left) == AOP_DIR && AOP_TYPE(right) == AOP_LIT) ||
-               (IS_AOP_PREG(left) && !IS_AOP_PREG(right))) {
-               //int lbl_key = (rIfx.condition) ? rIfx.lbl->key : lbl->key;
-               int lbl_key = lbl->key;
-               
-               if(result) {
-                       emitpcode(POC_CLRF,popGet(AOP(result),res_offset));
-                       //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
-               }else {
-                       DEBUGpic14_emitcode ("; ***","%s  %d -- ERROR",__FUNCTION__,__LINE__);
-                       fprintf(stderr, "%s  %d error - expecting result to be non_null\n",
-                               __FUNCTION__,__LINE__);
-                       return;
-               }
-               
-               /*     switch(size) { */
-               /*     case 2: */
-               /*       genc16bit2lit(left, lit, 0); */
-               /*       emitSKPNZ; */
-               /*       emitpcode(POC_GOTO,popGetLabel(lbl->key)); */
-               /*       break; */
-               /*     default: */
-               while (size--) {
-                       int emit_skip=1;
-                       if((AOP_TYPE(left) == AOP_DIR) && 
-                               ((AOP_TYPE(right) == AOP_REG) || (AOP_TYPE(right) == AOP_DIR))) {
-                               
-                               emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                               emitpcode(POC_XORFW,popGet(AOP(right),offset));
-                               
-                       } else if((AOP_TYPE(left) == AOP_DIR) && (AOP_TYPE(right) == AOP_LIT)){
-                               
-                               switch (lit & 0xff) {
-                               case 0:
-                                       emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                       break;
-                               case 1:
-                                       emitpcode(POC_DECFSZW,popGet(AOP(left),offset));
-                                       emitpcode(POC_INCF,popGet(AOP(result),res_offset));
-                                       //emitpcode(POC_GOTO,popGetLabel(lbl->key));
-                                       emit_skip=0;
-                                       break;
-                               case 0xff:
-                                       emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
-                                       //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
-                                       //emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
-                                       emitpcode(POC_GOTO,popGetLabel(lbl_key));
-                                       emit_skip=0;
-                                       break;
-                               default:
-                                       emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                       emitpcode(POC_XORLW,popGetLit(lit & 0xff));
-                               }
-                               lit >>= 8;
-                               
-                       } else {
-                               emitpcode(POC_MOVF,popGet(AOP(left),offset));
-                       }
-                       if(emit_skip) {
-                               if(AOP_TYPE(result) == AOP_CRY) {
-                                       pic14_emitcode(";***","%s  %d",__FUNCTION__,__LINE__);
-                                       if(rIfx.condition)
-                                               emitSKPNZ;
-                                       else
-                                               emitSKPZ;
-                                       emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
-                               } else {
-                                       /* fix me. probably need to check result size too */
-                                       //emitpcode(POC_CLRF,popGet(AOP(result),0));
-                                       if(rIfx.condition)
-                                               emitSKPZ;
-                                       else
-                                               emitSKPNZ;
-                                       emitpcode(POC_GOTO,popGetLabel(lbl_key));
-                                       //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
-                               }
-                               if(ifx)
-                                       ifx->generated=1;
-                       }
-                       emit_skip++;
-                       offset++;
-                       if(res_offset < res_size-1)
-                               res_offset++;
-               }
-               /*       break; */
-               /*     } */
-       } else if(AOP_TYPE(right) == AOP_REG &&
-               AOP_TYPE(left) != AOP_DIR){
-               
-               while(size--) {
-                       emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                       emitpcode(POC_XORFW,popGet(AOP(right),offset));
-                       pic14_emitcode(";***","%s  %d",__FUNCTION__,__LINE__);
-                       if(rIfx.condition)
-                               emitSKPNZ;
-                       else
-                               emitSKPZ;
-                       emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
-                       offset++;
-                       if(res_offset < res_size-1)
-                               res_offset++;
-               }
-               
-       }else{
-               /* right is a pointer reg need both a & b */
-               while(size--) {
-                       char *l = aopGet(AOP(left),offset,FALSE,FALSE);
-                       if(strcmp(l,"b"))
-                               pic14_emitcode("mov","b,%s",l);
-                       MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
-                       pic14_emitcode("cjne","a,b,%05d_DS_",lbl->key+100);    
-                       offset++;
-               }
-       }
-       
-       emitpcode(POC_INCF,popGet(AOP(result),res_offset));
-       if(!rIfx.condition)
-               emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
-       
-       emitpLabel(lbl->key);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(ifx)
-               ifx->generated = 1;
+  int size = max(AOP_SIZE(left),AOP_SIZE(right));
+  int offset = 0;
+  int res_offset = 0;  /* the result may be a different size then left or right */
+  int res_size = AOP_SIZE(result);
+  resolvedIfx rIfx;
+  symbol *lbl;
+  
+  unsigned long lit = 0L;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  if(result)
+    DEBUGpic14_emitcode ("; ***","%s  %d result is not null",__FUNCTION__,__LINE__);
+  resolveIfx(&rIfx,ifx);
+  lbl =  newiTempLabel(NULL);
+  
+  
+  /* if the left side is a literal or 
+  if the right is in a pointer register and left 
+  is not */
+  if ((AOP_TYPE(left) == AOP_LIT) || 
+    (IS_AOP_PREG(right) && !IS_AOP_PREG(left))) {
+    operand *t = right;
+    right = left;
+    left = t;
+  }
+  if(AOP_TYPE(right) == AOP_LIT)
+    lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+  
+  /* if the right side is a literal then anything goes */
+  if (AOP_TYPE(right) == AOP_LIT &&
+    AOP_TYPE(left) != AOP_DIR ) {
+    switch(size) {
+    case 2:
+      genc16bit2lit(left, lit, 0);
+      emitSKPNZ;
+      emitpcode(POC_GOTO,popGetLabel(lbl->key));
+      break;
+    default:
+      while (size--) {
+        if(lit & 0xff) {
+          emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+          emitpcode(POC_XORLW,popGetLit(lit & 0xff));
+        } else {
+          emitpcode(POC_MOVF,popGet(AOP(left),offset));
+        }
+        
+        emitSKPNZ;
+        emitpcode(POC_GOTO,popGetLabel(lbl->key));
+        offset++;
+        if(res_offset < res_size-1)
+          res_offset++;
+        lit >>= 8;
+      }
+      break;
+    }
+  }
+  
+  /* if the right side is in a register or in direct space or
+  if the left is a pointer register & right is not */    
+  else if (AOP_TYPE(right) == AOP_REG ||
+    AOP_TYPE(right) == AOP_DIR || 
+    (AOP_TYPE(left) == AOP_DIR && AOP_TYPE(right) == AOP_LIT) ||
+    (IS_AOP_PREG(left) && !IS_AOP_PREG(right))) {
+    //int lbl_key = (rIfx.condition) ? rIfx.lbl->key : lbl->key;
+    int lbl_key = lbl->key;
+    
+    if(result) {
+      emitpcode(POC_CLRF,popGet(AOP(result),res_offset));
+      //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
+    }else {
+      DEBUGpic14_emitcode ("; ***","%s  %d -- ERROR",__FUNCTION__,__LINE__);
+      fprintf(stderr, "%s  %d error - expecting result to be non_null\n",
+        __FUNCTION__,__LINE__);
+      return;
+    }
+    
+    /*     switch(size) { */
+    /*     case 2: */
+    /*       genc16bit2lit(left, lit, 0); */
+    /*       emitSKPNZ; */
+    /*       emitpcode(POC_GOTO,popGetLabel(lbl->key)); */
+    /*       break; */
+    /*     default: */
+    while (size--) {
+      int emit_skip=1;
+      if((AOP_TYPE(left) == AOP_DIR) && 
+        ((AOP_TYPE(right) == AOP_REG) || (AOP_TYPE(right) == AOP_DIR))) {
+        
+        emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+        emitpcode(POC_XORFW,popGet(AOP(right),offset));
+        
+      } else if((AOP_TYPE(left) == AOP_DIR) && (AOP_TYPE(right) == AOP_LIT)){
+        
+        switch (lit & 0xff) {
+        case 0:
+          emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+          break;
+        case 1:
+          emitpcode(POC_DECFSZW,popGet(AOP(left),offset));
+          emitpcode(POC_INCF,popGet(AOP(result),res_offset));
+          //emitpcode(POC_GOTO,popGetLabel(lbl->key));
+          emit_skip=0;
+          break;
+        case 0xff:
+          emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
+          //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
+          //emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
+          emitpcode(POC_GOTO,popGetLabel(lbl_key));
+          emit_skip=0;
+          break;
+        default:
+          emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+          emitpcode(POC_XORLW,popGetLit(lit & 0xff));
+        }
+        lit >>= 8;
+        
+      } else {
+        emitpcode(POC_MOVF,popGet(AOP(left),offset));
+      }
+      if(emit_skip) {
+        if(AOP_TYPE(result) == AOP_CRY) {
+          pic14_emitcode(";***","%s  %d",__FUNCTION__,__LINE__);
+          if(rIfx.condition)
+            emitSKPNZ;
+          else
+            emitSKPZ;
+          emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
+        } else {
+          /* fix me. probably need to check result size too */
+          //emitpcode(POC_CLRF,popGet(AOP(result),0));
+          if(rIfx.condition)
+            emitSKPZ;
+          else
+            emitSKPNZ;
+          emitpcode(POC_GOTO,popGetLabel(lbl_key));
+          //emitpcode(POC_INCF,popGet(AOP(result),res_offset));
+        }
+        if(ifx)
+          ifx->generated=1;
+      }
+      emit_skip++;
+      offset++;
+      if(res_offset < res_size-1)
+        res_offset++;
+    }
+    /*       break; */
+    /*     } */
+  } else if(AOP_TYPE(right) == AOP_REG &&
+    AOP_TYPE(left) != AOP_DIR){
+    
+    while(size--) {
+      emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+      emitpcode(POC_XORFW,popGet(AOP(right),offset));
+      pic14_emitcode(";***","%s  %d",__FUNCTION__,__LINE__);
+      if(rIfx.condition)
+        emitSKPNZ;
+      else
+        emitSKPZ;
+      emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
+      offset++;
+      if(res_offset < res_size-1)
+        res_offset++;
+    }
+    
+  }else{
+    /* right is a pointer reg need both a & b */
+    while(size--) {
+      char *l = aopGet(AOP(left),offset,FALSE,FALSE);
+      if(strcmp(l,"b"))
+        pic14_emitcode("mov","b,%s",l);
+      MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
+      pic14_emitcode("cjne","a,b,%05d_DS_",lbl->key+100);    
+      offset++;
+    }
+  }
+  
+  emitpcode(POC_INCF,popGet(AOP(result),res_offset));
+  if(!rIfx.condition)
+    emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
+  
+  emitpLabel(lbl->key);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(ifx)
+    ifx->generated = 1;
 }
 
 #if 0
@@ -4650,20 +4649,20 @@ static void gencjne(operand *left, operand *right, operand *result, iCode *ifx)
 /*-----------------------------------------------------------------*/
 static void gencjne(operand *left, operand *right, iCode *ifx)
 {
-       symbol *tlbl  = newiTempLabel(NULL);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       gencjneshort(left, right, lbl);
-       
-       pic14_emitcode("mov","a,%s",one);
-       pic14_emitcode("sjmp","%05d_DS_",tlbl->key+100);
-       pic14_emitcode("","%05d_DS_:",lbl->key+100);
-       pic14_emitcode("clr","a");
-       pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-       
-       emitpLabel(lbl->key);
-       emitpLabel(tlbl->key);
-       
+  symbol *tlbl  = newiTempLabel(NULL);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  gencjneshort(left, right, lbl);
+  
+  pic14_emitcode("mov","a,%s",one);
+  pic14_emitcode("sjmp","%05d_DS_",tlbl->key+100);
+  pic14_emitcode("","%05d_DS_:",lbl->key+100);
+  pic14_emitcode("clr","a");
+  pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+  
+  emitpLabel(lbl->key);
+  emitpLabel(tlbl->key);
+  
 }
 #endif
 
@@ -4672,296 +4671,296 @@ static void gencjne(operand *left, operand *right, iCode *ifx)
 /*-----------------------------------------------------------------*/
 static void genCmpEq (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       unsigned long lit = 0L;
-       int size,offset=0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(ifx)
-               DEBUGpic14_emitcode ("; ifx is non-null","");
-       else
-               DEBUGpic14_emitcode ("; ifx is null","");
-       
-       aopOp((left=IC_LEFT(ic)),ic,FALSE);
-       aopOp((right=IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       size = max(AOP_SIZE(left),AOP_SIZE(right));
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       /* if literal, literal on the right or 
-       if the right is in a pointer register and left 
-       is not */
-       if ((AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) || 
-               (IS_AOP_PREG(right) && !IS_AOP_PREG(left))) {
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       
-       if(ifx && !AOP_SIZE(result)){
-               symbol *tlbl;
-               /* if they are both bit variables */
-               if (AOP_TYPE(left) == AOP_CRY &&
-                       ((AOP_TYPE(right) == AOP_CRY) || (AOP_TYPE(right) == AOP_LIT))) {
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               unsigned long lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-                               if(lit == 0L){
-                                       pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                                       pic14_emitcode("cpl","c");
-                               } else if(lit == 1L) {
-                                       pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                               } else {
-                                       pic14_emitcode("clr","c");
-                               }
-                               /* AOP_TYPE(right) == AOP_CRY */
-                       } else {
-                               symbol *lbl = newiTempLabel(NULL);
-                               pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                               pic14_emitcode("jb","%s,%05d_DS_",AOP(right)->aopu.aop_dir,(lbl->key+100));
-                               pic14_emitcode("cpl","c");
-                               pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-                       }
-                       /* if true label then we jump if condition
-                       supplied is true */
-                       tlbl = newiTempLabel(NULL);
-                       if ( IC_TRUE(ifx) ) {
-                               pic14_emitcode("jnc","%05d_DS_",tlbl->key+100);
-                               pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ifx)->key+100);
-                       } else {
-                               pic14_emitcode("jc","%05d_DS_",tlbl->key+100);
-                               pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ifx)->key+100);
-                       }
-                       pic14_emitcode("","%05d_DS_:",tlbl->key+100+labelOffset);
-                       
-                       {
-                               /* left and right are both bit variables, result is carry */
-                               resolvedIfx rIfx;
-                               
-                               resolveIfx(&rIfx,ifx);
-                               
-                               emitpcode(POC_MOVLW,popGet(AOP(left),0));
-                               emitpcode(POC_ANDFW,popGet(AOP(left),0));
-                               emitpcode(POC_BTFSC,popGet(AOP(right),0));
-                               emitpcode(POC_ANDLW,popGet(AOP(left),0));
-                               genSkipz2(&rIfx,0);
-                       }
-               } else {
-                       
-                       /* They're not both bit variables. Is the right a literal? */
-                       if(AOP_TYPE(right) == AOP_LIT) {
-                               lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-                               
-                               switch(size) {
-                                       
-                               case 1:
-                                       switch(lit & 0xff) {
-                                       case 1:
-                                               if ( IC_TRUE(ifx) ) {
-                                                       emitpcode(POC_DECFW,popGet(AOP(left),offset));
-                                                       emitSKPNZ;
-                                                       emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-                                               } else {
-                                                       emitpcode(POC_DECFSZW,popGet(AOP(left),offset));
-                                                       emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-                                               }
-                                               break;
-                                       case 0xff:
-                                               if ( IC_TRUE(ifx) ) {
-                                                       emitpcode(POC_INCFW,popGet(AOP(left),offset));
-                                                       emitSKPNZ;
-                                                       emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-                                               } else {
-                                                       emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
-                                                       emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-                                               }
-                                               break;
-                                       default:
-                                               emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                               if(lit)
-                                                       emitpcode(POC_XORLW,popGetLit(lit & 0xff));
-                                               genSkip(ifx,'z');
-                                       }
-                                       
-                                       
-                                       /* end of size == 1 */
-                                       break;
-                                       
-                                       case 2:
-                                               genc16bit2lit(left,lit,offset);
-                                               genSkip(ifx,'z');
-                                               break;
-                                               /* end of size == 2 */
-                                               
-                                       default:
-                                               /* size is 4 */
-                                               if(lit==0) {
-                                                       emitpcode(POC_MOVFW,popGet(AOP(left),0));
-                                                       emitpcode(POC_IORFW,popGet(AOP(left),1));
-                                                       emitpcode(POC_IORFW,popGet(AOP(left),2));
-                                                       emitpcode(POC_IORFW,popGet(AOP(left),3));
-                                                       
-                                               } else {
-                                                       
-                                                       /* search for patterns that can be optimized */
-                                                       
-                                                       genc16bit2lit(left,lit,0);
-                                                       lit >>= 16;
-                                                       if(lit) {
-                                                               genSkipz(ifx,IC_TRUE(ifx) == NULL);
-                                                               //genSkip(ifx,'z');
-                                                               genc16bit2lit(left,lit,2);
-                                                       } else {
-                                                               emitpcode(POC_IORFW,popGet(AOP(left),2));
-                                                               emitpcode(POC_IORFW,popGet(AOP(left),3));
-                                                               
-                                                       }
-                                                       
-                                               }
-                                               
-                                               genSkip(ifx,'z');
-                               }
-                               
-                               ifx->generated = 1;
-                               goto release ;
-                               
-                               
-                       } else if(AOP_TYPE(right) == AOP_CRY ) {
-                               /* we know the left is not a bit, but that the right is */
-                               emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                               emitpcode( ( (IC_TRUE(ifx)) ? POC_BTFSC : POC_BTFSS),
-                                       popGet(AOP(right),offset));
-                               emitpcode(POC_XORLW,popGetLit(1));
-                               
-                               /* if the two are equal, then W will be 0 and the Z bit is set
-                               * we could test Z now, or go ahead and check the high order bytes if
-                               * the variable we're comparing is larger than a byte. */
-                               
-                               while(--size)
-                                       emitpcode(POC_IORFW,popGet(AOP(left),offset));
-                               
-                               if ( IC_TRUE(ifx) ) {
-                                       emitSKPNZ;
-                                       emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-                                       pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
-                               } else {
-                                       emitSKPZ;
-                                       emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-                                       pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
-                               }
-                               
-                       } else {
-                               /* They're both variables that are larger than bits */
-                               int s = size;
-                               
-                               tlbl = newiTempLabel(NULL);
-                               
-                               while(size--) {
-                                       emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                       emitpcode(POC_XORFW,popGet(AOP(right),offset));
-                                       
-                                       if ( IC_TRUE(ifx) ) {
-                                               if(size) {
-                                                       emitSKPZ;
-                                                       emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-                                                       pic14_emitcode(" goto","_%05d_DS_",tlbl->key+100+labelOffset);
-                                               } else {
-                                                       emitSKPNZ;
-                                                       emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-                                                       pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
-                                               }
-                                       } else {
-                                               emitSKPZ;
-                                               emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
-                                               pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
-                                       }
-                                       offset++;
-                               }
-                               if(s>1 && IC_TRUE(ifx)) {
-                                       emitpLabel(tlbl->key);
-                                       pic14_emitcode("","_%05d_DS_:",tlbl->key+100+labelOffset);                
-                               }
-                       }
-               }
-               /* mark the icode as generated */
-               ifx->generated = 1;
-               goto release ;
-       }
-       
-       /* if they are both bit variables */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               ((AOP_TYPE(right) == AOP_CRY) || (AOP_TYPE(right) == AOP_LIT))) {
-               if(AOP_TYPE(right) == AOP_LIT){
-                       unsigned long lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-                       if(lit == 0L){
-                               pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                               pic14_emitcode("cpl","c");
-                       } else if(lit == 1L) {
-                               pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                       } else {
-                               pic14_emitcode("clr","c");
-                       }
-                       /* AOP_TYPE(right) == AOP_CRY */
-               } else {
-                       symbol *lbl = newiTempLabel(NULL);
-                       pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                       pic14_emitcode("jb","%s,%05d_DS_",AOP(right)->aopu.aop_dir,(lbl->key+100));
-                       pic14_emitcode("cpl","c");
-                       pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-               }
-               /* c = 1 if egal */
-               if (AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)){
-                       pic14_outBitC(result);
-                       goto release ;
-               }
-               if (ifx) {
-                       genIfxJump (ifx,"c");
-                       goto release ;
-               }
-               /* if the result is used in an arithmetic operation
-               then put the result in place */
-               pic14_outBitC(result);
-       } else {
-               
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               gencjne(left,right,result,ifx);
-               /*
-               if(ifx) 
-               gencjne(left,right,newiTempLabel(NULL));
-               else {
-               if(IC_TRUE(ifx)->key)
-               gencjne(left,right,IC_TRUE(ifx)->key);
-               else
-               gencjne(left,right,IC_FALSE(ifx)->key);
-               ifx->generated = 1;
-               goto release ;
-               }
-               if (AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)) {
-               aopPut(AOP(result),"a",0);
-               goto release ;
-               }
-               
-                 if (ifx) {
-                 genIfxJump (ifx,"a");
-                 goto release ;
-                 }
-               */
-               /* if the result is used in an arithmetic operation
-               then put the result in place */
-               /*
-               if (AOP_TYPE(result) != AOP_CRY) 
-               pic14_outAcc(result);
-               */
-               /* leave the result in acc */
-       }
-       
+  operand *left, *right, *result;
+  unsigned long lit = 0L;
+  int size,offset=0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(ifx)
+    DEBUGpic14_emitcode ("; ifx is non-null","");
+  else
+    DEBUGpic14_emitcode ("; ifx is null","");
+  
+  aopOp((left=IC_LEFT(ic)),ic,FALSE);
+  aopOp((right=IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  size = max(AOP_SIZE(left),AOP_SIZE(right));
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  /* if literal, literal on the right or 
+  if the right is in a pointer register and left 
+  is not */
+  if ((AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) || 
+    (IS_AOP_PREG(right) && !IS_AOP_PREG(left))) {
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  
+  if(ifx && !AOP_SIZE(result)){
+    symbol *tlbl;
+    /* if they are both bit variables */
+    if (AOP_TYPE(left) == AOP_CRY &&
+      ((AOP_TYPE(right) == AOP_CRY) || (AOP_TYPE(right) == AOP_LIT))) {
+      if(AOP_TYPE(right) == AOP_LIT){
+        unsigned long lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+        if(lit == 0L){
+          pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+          pic14_emitcode("cpl","c");
+        } else if(lit == 1L) {
+          pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+        } else {
+          pic14_emitcode("clr","c");
+        }
+        /* AOP_TYPE(right) == AOP_CRY */
+      } else {
+        symbol *lbl = newiTempLabel(NULL);
+        pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+        pic14_emitcode("jb","%s,%05d_DS_",AOP(right)->aopu.aop_dir,(lbl->key+100));
+        pic14_emitcode("cpl","c");
+        pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+      }
+      /* if true label then we jump if condition
+      supplied is true */
+      tlbl = newiTempLabel(NULL);
+      if ( IC_TRUE(ifx) ) {
+        pic14_emitcode("jnc","%05d_DS_",tlbl->key+100);
+        pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ifx)->key+100);
+      } else {
+        pic14_emitcode("jc","%05d_DS_",tlbl->key+100);
+        pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ifx)->key+100);
+      }
+      pic14_emitcode("","%05d_DS_:",tlbl->key+100+labelOffset);
+      
+      {
+        /* left and right are both bit variables, result is carry */
+        resolvedIfx rIfx;
+        
+        resolveIfx(&rIfx,ifx);
+        
+        emitpcode(POC_MOVLW,popGet(AOP(left),0));
+        emitpcode(POC_ANDFW,popGet(AOP(left),0));
+        emitpcode(POC_BTFSC,popGet(AOP(right),0));
+        emitpcode(POC_ANDLW,popGet(AOP(left),0));
+        genSkipz2(&rIfx,0);
+      }
+    } else {
+      
+      /* They're not both bit variables. Is the right a literal? */
+      if(AOP_TYPE(right) == AOP_LIT) {
+        lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+        
+        switch(size) {
+          
+        case 1:
+          switch(lit & 0xff) {
+          case 1:
+            if ( IC_TRUE(ifx) ) {
+              emitpcode(POC_DECFW,popGet(AOP(left),offset));
+              emitSKPNZ;
+              emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+            } else {
+              emitpcode(POC_DECFSZW,popGet(AOP(left),offset));
+              emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+            }
+            break;
+          case 0xff:
+            if ( IC_TRUE(ifx) ) {
+              emitpcode(POC_INCFW,popGet(AOP(left),offset));
+              emitSKPNZ;
+              emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+            } else {
+              emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
+              emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+            }
+            break;
+          default:
+            emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+            if(lit)
+              emitpcode(POC_XORLW,popGetLit(lit & 0xff));
+            genSkip(ifx,'z');
+          }
+          
+          
+          /* end of size == 1 */
+          break;
+          
+          case 2:
+            genc16bit2lit(left,lit,offset);
+            genSkip(ifx,'z');
+            break;
+            /* end of size == 2 */
+            
+          default:
+            /* size is 4 */
+            if(lit==0) {
+              emitpcode(POC_MOVFW,popGet(AOP(left),0));
+              emitpcode(POC_IORFW,popGet(AOP(left),1));
+              emitpcode(POC_IORFW,popGet(AOP(left),2));
+              emitpcode(POC_IORFW,popGet(AOP(left),3));
+              
+            } else {
+              
+              /* search for patterns that can be optimized */
+              
+              genc16bit2lit(left,lit,0);
+              lit >>= 16;
+              if(lit) {
+                genSkipz(ifx,IC_TRUE(ifx) == NULL);
+                //genSkip(ifx,'z');
+                genc16bit2lit(left,lit,2);
+              } else {
+                emitpcode(POC_IORFW,popGet(AOP(left),2));
+                emitpcode(POC_IORFW,popGet(AOP(left),3));
+                
+              }
+              
+            }
+            
+            genSkip(ifx,'z');
+        }
+        
+        ifx->generated = 1;
+        goto release ;
+        
+        
+      } else if(AOP_TYPE(right) == AOP_CRY ) {
+        /* we know the left is not a bit, but that the right is */
+        emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+        emitpcode( ( (IC_TRUE(ifx)) ? POC_BTFSC : POC_BTFSS),
+          popGet(AOP(right),offset));
+        emitpcode(POC_XORLW,popGetLit(1));
+        
+        /* if the two are equal, then W will be 0 and the Z bit is set
+        * we could test Z now, or go ahead and check the high order bytes if
+        * the variable we're comparing is larger than a byte. */
+        
+        while(--size)
+          emitpcode(POC_IORFW,popGet(AOP(left),offset));
+        
+        if ( IC_TRUE(ifx) ) {
+          emitSKPNZ;
+          emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+          pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
+        } else {
+          emitSKPZ;
+          emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+          pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
+        }
+        
+      } else {
+        /* They're both variables that are larger than bits */
+        int s = size;
+        
+        tlbl = newiTempLabel(NULL);
+        
+        while(size--) {
+          emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+          emitpcode(POC_XORFW,popGet(AOP(right),offset));
+          
+          if ( IC_TRUE(ifx) ) {
+            if(size) {
+              emitSKPZ;
+              emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+              pic14_emitcode(" goto","_%05d_DS_",tlbl->key+100+labelOffset);
+            } else {
+              emitSKPNZ;
+              emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+              pic14_emitcode(" goto","_%05d_DS_",IC_TRUE(ifx)->key+100+labelOffset);
+            }
+          } else {
+            emitSKPZ;
+            emitpcode(POC_GOTO,popGetLabel(IC_FALSE(ifx)->key));
+            pic14_emitcode(" goto","_%05d_DS_",IC_FALSE(ifx)->key+100+labelOffset);
+          }
+          offset++;
+        }
+        if(s>1 && IC_TRUE(ifx)) {
+          emitpLabel(tlbl->key);
+          pic14_emitcode("","_%05d_DS_:",tlbl->key+100+labelOffset);                
+        }
+      }
+    }
+    /* mark the icode as generated */
+    ifx->generated = 1;
+    goto release ;
+  }
+  
+  /* if they are both bit variables */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    ((AOP_TYPE(right) == AOP_CRY) || (AOP_TYPE(right) == AOP_LIT))) {
+    if(AOP_TYPE(right) == AOP_LIT){
+      unsigned long lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+      if(lit == 0L){
+        pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+        pic14_emitcode("cpl","c");
+      } else if(lit == 1L) {
+        pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+      } else {
+        pic14_emitcode("clr","c");
+      }
+      /* AOP_TYPE(right) == AOP_CRY */
+    } else {
+      symbol *lbl = newiTempLabel(NULL);
+      pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+      pic14_emitcode("jb","%s,%05d_DS_",AOP(right)->aopu.aop_dir,(lbl->key+100));
+      pic14_emitcode("cpl","c");
+      pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+    }
+    /* c = 1 if egal */
+    if (AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)){
+      pic14_outBitC(result);
+      goto release ;
+    }
+    if (ifx) {
+      genIfxJump (ifx,"c");
+      goto release ;
+    }
+    /* if the result is used in an arithmetic operation
+    then put the result in place */
+    pic14_outBitC(result);
+  } else {
+    
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    gencjne(left,right,result,ifx);
+    /*
+    if(ifx) 
+    gencjne(left,right,newiTempLabel(NULL));
+    else {
+    if(IC_TRUE(ifx)->key)
+    gencjne(left,right,IC_TRUE(ifx)->key);
+    else
+    gencjne(left,right,IC_FALSE(ifx)->key);
+    ifx->generated = 1;
+    goto release ;
+    }
+    if (AOP_TYPE(result) == AOP_CRY && AOP_SIZE(result)) {
+    aopPut(AOP(result),"a",0);
+    goto release ;
+    }
+    
+      if (ifx) {
+      genIfxJump (ifx,"a");
+      goto release ;
+      }
+    */
+    /* if the result is used in an arithmetic operation
+    then put the result in place */
+    /*
+    if (AOP_TYPE(result) != AOP_CRY) 
+    pic14_outAcc(result);
+    */
+    /* leave the result in acc */
+  }
+  
 release:
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -4969,87 +4968,87 @@ release:
 /*-----------------------------------------------------------------*/
 static iCode *ifxForOp ( operand *op, iCode *ic )
 {
-       /* if true symbol then needs to be assigned */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (IS_TRUE_SYMOP(op))
-               return NULL ;
-       
-               /* if this has register type condition and
-               the next instruction is ifx with the same operand
-       and live to of the operand is upto the ifx only then */
-       if (ic->next &&
-               ic->next->op == IFX &&
-               IC_COND(ic->next)->key == op->key &&
-               OP_SYMBOL(op)->liveTo <= ic->next->seq )
-               return ic->next;
-       
-       if (ic->next &&
-               ic->next->op == IFX &&
-               IC_COND(ic->next)->key == op->key) {
-               DEBUGpic14_emitcode ("; WARNING ","%d IGNORING liveTo range in %s",__LINE__,__FUNCTION__);
-               return ic->next;
-       }
-       
-       DEBUGpic14_emitcode ("; NULL :(","%d",__LINE__);
-       if (ic->next &&
-               ic->next->op == IFX)
-               DEBUGpic14_emitcode ("; ic-next"," is an IFX");
-       
-       if (ic->next &&
-               ic->next->op == IFX &&
-               IC_COND(ic->next)->key == op->key) {
-               DEBUGpic14_emitcode ("; "," key is okay");
-               DEBUGpic14_emitcode ("; "," key liveTo %d, next->seq = %d",
-                       OP_SYMBOL(op)->liveTo,
-                       ic->next->seq);
-       }
-       
-       
-       return NULL;
+  /* if true symbol then needs to be assigned */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (IS_TRUE_SYMOP(op))
+    return NULL ;
+  
+    /* if this has register type condition and
+    the next instruction is ifx with the same operand
+  and live to of the operand is upto the ifx only then */
+  if (ic->next &&
+    ic->next->op == IFX &&
+    IC_COND(ic->next)->key == op->key &&
+    OP_SYMBOL(op)->liveTo <= ic->next->seq )
+    return ic->next;
+  
+  if (ic->next &&
+    ic->next->op == IFX &&
+    IC_COND(ic->next)->key == op->key) {
+    DEBUGpic14_emitcode ("; WARNING ","%d IGNORING liveTo range in %s",__LINE__,__FUNCTION__);
+    return ic->next;
+  }
+  
+  DEBUGpic14_emitcode ("; NULL :(","%d",__LINE__);
+  if (ic->next &&
+    ic->next->op == IFX)
+    DEBUGpic14_emitcode ("; ic-next"," is an IFX");
+  
+  if (ic->next &&
+    ic->next->op == IFX &&
+    IC_COND(ic->next)->key == op->key) {
+    DEBUGpic14_emitcode ("; "," key is okay");
+    DEBUGpic14_emitcode ("; "," key liveTo %d, next->seq = %d",
+      OP_SYMBOL(op)->liveTo,
+      ic->next->seq);
+  }
+  
+  
+  return NULL;
 }
 /*-----------------------------------------------------------------*/
 /* genAndOp - for && operation                                     */
 /*-----------------------------------------------------------------*/
 static void genAndOp (iCode *ic)
 {
-       operand *left,*right, *result;
-       /*     symbol *tlbl; */
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* note here that && operations that are in an
-       if statement are taken away by backPatchLabels
-       only those used in arthmetic operations remain */
-       aopOp((left=IC_LEFT(ic)),ic,FALSE);
-       aopOp((right=IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,FALSE);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       emitpcode(POC_MOVFW,popGet(AOP(left),0));
-       emitpcode(POC_ANDFW,popGet(AOP(right),0));
-       emitpcode(POC_MOVWF,popGet(AOP(result),0));
-       
-       /* if both are bit variables */
-       /*     if (AOP_TYPE(left) == AOP_CRY && */
-       /*         AOP_TYPE(right) == AOP_CRY ) { */
-       /*         pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir); */
-       /*         pic14_emitcode("anl","c,%s",AOP(right)->aopu.aop_dir); */
-       /*         pic14_outBitC(result); */
-       /*     } else { */
-       /*         tlbl = newiTempLabel(NULL); */
-       /*         pic14_toBoolean(left);     */
-       /*         pic14_emitcode("jz","%05d_DS_",tlbl->key+100); */
-       /*         pic14_toBoolean(right); */
-       /*         pic14_emitcode("","%05d_DS_:",tlbl->key+100); */
-       /*         pic14_outBitAcc(result); */
-       /*     } */
-       
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);
-}
-
-
+  operand *left,*right, *result;
+  /*     symbol *tlbl; */
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* note here that && operations that are in an
+  if statement are taken away by backPatchLabels
+  only those used in arthmetic operations remain */
+  aopOp((left=IC_LEFT(ic)),ic,FALSE);
+  aopOp((right=IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,FALSE);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  emitpcode(POC_MOVFW,popGet(AOP(left),0));
+  emitpcode(POC_ANDFW,popGet(AOP(right),0));
+  emitpcode(POC_MOVWF,popGet(AOP(result),0));
+  
+  /* if both are bit variables */
+  /*     if (AOP_TYPE(left) == AOP_CRY && */
+  /*         AOP_TYPE(right) == AOP_CRY ) { */
+  /*         pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir); */
+  /*         pic14_emitcode("anl","c,%s",AOP(right)->aopu.aop_dir); */
+  /*         pic14_outBitC(result); */
+  /*     } else { */
+  /*         tlbl = newiTempLabel(NULL); */
+  /*         pic14_toBoolean(left);     */
+  /*         pic14_emitcode("jz","%05d_DS_",tlbl->key+100); */
+  /*         pic14_toBoolean(right); */
+  /*         pic14_emitcode("","%05d_DS_:",tlbl->key+100); */
+  /*         pic14_outBitAcc(result); */
+  /*     } */
+  
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);
+}
+
+
 /*-----------------------------------------------------------------*/
 /* genOrOp - for || operation                                      */
 /*-----------------------------------------------------------------*/
@@ -5060,45 +5059,45 @@ modified this code, but it doesn't appear to ever get called
 
 static void genOrOp (iCode *ic)
 {
-       operand *left,*right, *result;
-       symbol *tlbl;
-       
-       /* note here that || operations that are in an
-       if statement are taken away by backPatchLabels
-       only those used in arthmetic operations remain */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp((left=IC_LEFT(ic)),ic,FALSE);
-       aopOp((right=IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,FALSE);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       /* if both are bit variables */
-       if (AOP_TYPE(left) == AOP_CRY &&
-               AOP_TYPE(right) == AOP_CRY ) {
-               pic14_emitcode("clrc","");
-               pic14_emitcode("btfss","(%s >> 3), (%s & 7)",
-                       AOP(left)->aopu.aop_dir,
-                       AOP(left)->aopu.aop_dir);
-               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                       AOP(right)->aopu.aop_dir,
-                       AOP(right)->aopu.aop_dir);
-               pic14_emitcode("setc","");
-               
-       } else {
-               tlbl = newiTempLabel(NULL);
-               pic14_toBoolean(left);
-               emitSKPZ;
-               pic14_emitcode("goto","%05d_DS_",tlbl->key+100+labelOffset);
-               pic14_toBoolean(right);
-               pic14_emitcode("","%05d_DS_:",tlbl->key+100+labelOffset);
-               
-               pic14_outBitAcc(result);
-       }
-       
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);            
+  operand *left,*right, *result;
+  symbol *tlbl;
+  
+  /* note here that || operations that are in an
+  if statement are taken away by backPatchLabels
+  only those used in arthmetic operations remain */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp((left=IC_LEFT(ic)),ic,FALSE);
+  aopOp((right=IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,FALSE);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  /* if both are bit variables */
+  if (AOP_TYPE(left) == AOP_CRY &&
+    AOP_TYPE(right) == AOP_CRY ) {
+    pic14_emitcode("clrc","");
+    pic14_emitcode("btfss","(%s >> 3), (%s & 7)",
+      AOP(left)->aopu.aop_dir,
+      AOP(left)->aopu.aop_dir);
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+      AOP(right)->aopu.aop_dir,
+      AOP(right)->aopu.aop_dir);
+    pic14_emitcode("setc","");
+    
+  } else {
+    tlbl = newiTempLabel(NULL);
+    pic14_toBoolean(left);
+    emitSKPZ;
+    pic14_emitcode("goto","%05d_DS_",tlbl->key+100+labelOffset);
+    pic14_toBoolean(right);
+    pic14_emitcode("","%05d_DS_:",tlbl->key+100+labelOffset);
+    
+    pic14_outBitAcc(result);
+  }
+  
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);            
 }
 
 /*-----------------------------------------------------------------*/
@@ -5106,20 +5105,20 @@ static void genOrOp (iCode *ic)
 /*-----------------------------------------------------------------*/
 static int isLiteralBit(unsigned long lit)
 {
-       unsigned long pw[32] = {1L,2L,4L,8L,16L,32L,64L,128L,
-               0x100L,0x200L,0x400L,0x800L,
-               0x1000L,0x2000L,0x4000L,0x8000L,
-               0x10000L,0x20000L,0x40000L,0x80000L,
-               0x100000L,0x200000L,0x400000L,0x800000L,
-               0x1000000L,0x2000000L,0x4000000L,0x8000000L,
-               0x10000000L,0x20000000L,0x40000000L,0x80000000L};
-       int idx;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       for(idx = 0; idx < 32; idx++)
-               if(lit == pw[idx])
-                       return idx+1;
-               return 0;
+  unsigned long pw[32] = {1L,2L,4L,8L,16L,32L,64L,128L,
+    0x100L,0x200L,0x400L,0x800L,
+    0x1000L,0x2000L,0x4000L,0x8000L,
+    0x10000L,0x20000L,0x40000L,0x80000L,
+    0x100000L,0x200000L,0x400000L,0x800000L,
+    0x1000000L,0x2000000L,0x4000000L,0x8000000L,
+    0x10000000L,0x20000000L,0x40000000L,0x80000000L};
+  int idx;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  for(idx = 0; idx < 32; idx++)
+    if(lit == pw[idx])
+      return idx+1;
+    return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5127,10 +5126,10 @@ static int isLiteralBit(unsigned long lit)
 /*-----------------------------------------------------------------*/
 static void continueIfTrue (iCode *ic)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(IC_TRUE(ic))
-               pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ic)->key+100);
-       ic->generated = 1;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(IC_TRUE(ic))
+    pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ic)->key+100);
+  ic->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5138,10 +5137,10 @@ static void continueIfTrue (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void jumpIfTrue (iCode *ic)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(!IC_TRUE(ic))
-               pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ic)->key+100);
-       ic->generated = 1;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(!IC_TRUE(ic))
+    pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ic)->key+100);
+  ic->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5149,20 +5148,20 @@ static void jumpIfTrue (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void jmpTrueOrFalse (iCode *ic, symbol *tlbl)
 {
-       // ugly but optimized by peephole
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(IC_TRUE(ic)){
-               symbol *nlbl = newiTempLabel(NULL);
-               pic14_emitcode("sjmp","%05d_DS_",nlbl->key+100);                 
-               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-               pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ic)->key+100);
-               pic14_emitcode("","%05d_DS_:",nlbl->key+100);
-       }
-       else{
-               pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ic)->key+100);
-               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-       }
-       ic->generated = 1;
+  // ugly but optimized by peephole
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(IC_TRUE(ic)){
+    symbol *nlbl = newiTempLabel(NULL);
+    pic14_emitcode("sjmp","%05d_DS_",nlbl->key+100);                 
+    pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+    pic14_emitcode("ljmp","%05d_DS_",IC_TRUE(ic)->key+100);
+    pic14_emitcode("","%05d_DS_:",nlbl->key+100);
+  }
+  else{
+    pic14_emitcode("ljmp","%05d_DS_",IC_FALSE(ic)->key+100);
+    pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+  }
+  ic->generated = 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5170,286 +5169,286 @@ static void jmpTrueOrFalse (iCode *ic, symbol *tlbl)
 /*-----------------------------------------------------------------*/
 static void genAnd (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       int size, offset=0;  
-       unsigned long lit = 0L;
-       int bytelit = 0;
-       resolvedIfx rIfx;
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp((left = IC_LEFT(ic)),ic,FALSE);
-       aopOp((right= IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       resolveIfx(&rIfx,ifx);
-       
-       /* if left is a literal & right is not then exchange them */
-       if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
-               AOP_NEEDSACC(left)) {
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if result = right then exchange them */
-       if(pic14_sameRegs(AOP(result),AOP(right))){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if right is bit then exchange them */
-       if (AOP_TYPE(right) == AOP_CRY &&
-               AOP_TYPE(left) != AOP_CRY){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       if(AOP_TYPE(right) == AOP_LIT)
-               lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
-       
-       size = AOP_SIZE(result);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       // if(bit & yy)
-       // result = bit & yy;
-       if (AOP_TYPE(left) == AOP_CRY){
-               // c = bit & literal;
-               if(AOP_TYPE(right) == AOP_LIT){
-                       if(lit & 1) {
-                               if(size && pic14_sameRegs(AOP(result),AOP(left)))
-                                       // no change
-                                       goto release;
-                               pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                       } else {
-                               // bit(result) = 0;
-                               if(size && (AOP_TYPE(result) == AOP_CRY)){
-                                       pic14_emitcode("clr","%s",AOP(result)->aopu.aop_dir);
-                                       goto release;
-                               }
-                               if((AOP_TYPE(result) == AOP_CRY) && ifx){
-                                       jumpIfTrue(ifx);
-                                       goto release;
-                               }
-                               pic14_emitcode("clr","c");
-                       }
-               } else {
-                       if (AOP_TYPE(right) == AOP_CRY){
-                               // c = bit & bit;
-                               pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
-                               pic14_emitcode("anl","c,%s",AOP(left)->aopu.aop_dir);
-                       } else {
-                               // c = bit & val;
-                               MOVA(aopGet(AOP(right),0,FALSE,FALSE));
-                               // c = lsb
-                               pic14_emitcode("rrc","a");
-                               pic14_emitcode("anl","c,%s",AOP(left)->aopu.aop_dir);
-                       }
-               }
-               // bit = c
-               // val = c
-               if(size)
-                       pic14_outBitC(result);
-               // if(bit & ...)
-               else if((AOP_TYPE(result) == AOP_CRY) && ifx)
-                       genIfxJump(ifx, "c");           
-               goto release ;
-       }
-       
-       // if(val & 0xZZ)       - size = 0, ifx != FALSE  -
-       // bit = val & 0xZZ     - size = 1, ifx = FALSE -
-       if((AOP_TYPE(right) == AOP_LIT) &&
-               (AOP_TYPE(result) == AOP_CRY) &&
-               (AOP_TYPE(left) != AOP_CRY)){
-               int posbit = isLiteralBit(lit);
-               /* left &  2^n */
-               if(posbit){
-                       posbit--;
-                       //MOVA(aopGet(AOP(left),posbit>>3,FALSE,FALSE));
-                       // bit = left & 2^n
-                       if(size)
-                               pic14_emitcode("mov","c,acc.%d",posbit&0x07);
-                       // if(left &  2^n)
-                       else{
-                               if(ifx){
-                                       int offset = 0;
-                                       while (posbit > 7) {
-                                               posbit -= 8;
-                                               offset++;
-                                       }
-                                       emitpcode(((rIfx.condition) ? POC_BTFSC : POC_BTFSS),
-                                               newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),posbit,0));
-                                       emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
-                                       
-                                       ifx->generated = 1;
-                               }
-                               goto release;
-                       }
-               } else {
-                       symbol *tlbl = newiTempLabel(NULL);
-                       int sizel = AOP_SIZE(left);
-                       if(size)
-                               pic14_emitcode("setb","c");
-                       while(sizel--){
-                               if((bytelit = ((lit >> (offset*8)) & 0x0FFL)) != 0x0L){
-                                       MOVA( aopGet(AOP(left),offset,FALSE,FALSE));
-                                       // byte ==  2^n ?
-                                       if((posbit = isLiteralBit(bytelit)) != 0)
-                                               pic14_emitcode("jb","acc.%d,%05d_DS_",(posbit-1)&0x07,tlbl->key+100);
-                                       else{
-                                               if(bytelit != 0x0FFL)
-                                                       pic14_emitcode("anl","a,%s",
-                                                       aopGet(AOP(right),offset,FALSE,TRUE));
-                                               pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
-                                       }
-                               }
-                               offset++;
-                       }
-                       // bit = left & literal
-                       if(size){
-                               pic14_emitcode("clr","c");
-                               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                       }
-                       // if(left & literal)
-                       else{
-                               if(ifx)
-                                       jmpTrueOrFalse(ifx, tlbl);
-                               goto release ;
-                       }
-               }
-               pic14_outBitC(result);
-               goto release ;
-       }
-       
-       /* if left is same as result */
-       if(pic14_sameRegs(AOP(result),AOP(left))){
-               int know_W = -1;
-               for(;size--; offset++,lit>>=8) {
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               switch(lit & 0xff) {
-                               case 0x00:
-                                       /*  and'ing with 0 has clears the result */
-                                       pic14_emitcode("clrf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
-                                       emitpcode(POC_CLRF,popGet(AOP(result),offset));
-                                       break;
-                               case 0xff:
-                                       /* and'ing with 0xff is a nop when the result and left are the same */
-                                       break;
-                                       
-                               default:
-                                       {
-                                               int p = my_powof2( (~lit) & 0xff );
-                                               if(p>=0) {
-                                                       /* only one bit is set in the literal, so use a bcf instruction */
-                                                       pic14_emitcode("bcf","%s,%d",aopGet(AOP(left),offset,FALSE,TRUE),p);
-                                                       emitpcode(POC_BCF,newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),p,0));
-                                                       
-                                               } else {
-                                                       pic14_emitcode("movlw","0x%x", (lit & 0xff));
-                                                       pic14_emitcode("andwf","%s,f",aopGet(AOP(left),offset,FALSE,TRUE));
-                                                       if(know_W != (int)(lit&0xff))
-                                                               emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                                       know_W = lit &0xff;
-                                                       emitpcode(POC_ANDWF,popGet(AOP(left),offset));
-                                               }
-                                       }    
-                               }
-                       } else {
-                               if (AOP_TYPE(left) == AOP_ACC) {
-                                       emitpcode(POC_ANDFW,popGet(AOP(right),offset));
-                               } else {                    
-                                       emitpcode(POC_MOVFW,popGet(AOP(right),offset));
-                                       emitpcode(POC_ANDWF,popGet(AOP(left),offset));
-                                       
-                               }
-                       }
-               }
-               
-       } else {
-               // left & result in different registers
-               if(AOP_TYPE(result) == AOP_CRY){
-                       // result = bit
-                       // if(size), result in bit
-                       // if(!size && ifx), conditional oper: if(left & right)
-                       symbol *tlbl = newiTempLabel(NULL);
-                       int sizer = min(AOP_SIZE(left),AOP_SIZE(right));
-                       if(size)
-                               pic14_emitcode("setb","c");
-                       while(sizer--){
-                               MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
-                               pic14_emitcode("anl","a,%s",
-                                       aopGet(AOP(left),offset,FALSE,FALSE));
-                               pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
-                               offset++;
-                       }
-                       if(size){
-                               CLRC;
-                               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                               pic14_outBitC(result);
-                       } else if(ifx)
-                               jmpTrueOrFalse(ifx, tlbl);
-               } else {
-                       for(;(size--);offset++) {
-                               // normal case
-                               // result = left & right
-                               if(AOP_TYPE(right) == AOP_LIT){
-                                       int t = (lit >> (offset*8)) & 0x0FFL;
-                                       switch(t) { 
-                                       case 0x00:
-                                               pic14_emitcode("clrf","%s",
-                                                       aopGet(AOP(result),offset,FALSE,FALSE));
-                                               emitpcode(POC_CLRF,popGet(AOP(result),offset));
-                                               break;
-                                       case 0xff:
-                                               if(AOP_TYPE(left) != AOP_ACC) {
-                                                       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:
-                                               if(AOP_TYPE(left) == AOP_ACC) {
-                                                       emitpcode(POC_ANDLW, popGetLit(t));
-                                               } 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));
-                                       }
-                                       continue;
-                               }
-                               
-                               if (AOP_TYPE(left) == AOP_ACC) {
-                                       pic14_emitcode("andwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                                       emitpcode(POC_ANDFW,popGet(AOP(right),offset));
-                               } else {
-                                       pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                                       pic14_emitcode("andwf","%s,w",
-                                               aopGet(AOP(left),offset,FALSE,FALSE));
-                                       emitpcode(POC_MOVFW,popGet(AOP(right),offset));
-                                       emitpcode(POC_ANDFW,popGet(AOP(left),offset));
-                               }
-                               pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
-                               emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-                       }
-               }
-       }
-       
+  operand *left, *right, *result;
+  int size, offset=0;  
+  unsigned long lit = 0L;
+  int bytelit = 0;
+  resolvedIfx rIfx;
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp((left = IC_LEFT(ic)),ic,FALSE);
+  aopOp((right= IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  resolveIfx(&rIfx,ifx);
+  
+  /* if left is a literal & right is not then exchange them */
+  if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
+    AOP_NEEDSACC(left)) {
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if result = right then exchange them */
+  if(pic14_sameRegs(AOP(result),AOP(right))){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if right is bit then exchange them */
+  if (AOP_TYPE(right) == AOP_CRY &&
+    AOP_TYPE(left) != AOP_CRY){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  if(AOP_TYPE(right) == AOP_LIT)
+    lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
+  
+  size = AOP_SIZE(result);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  // if(bit & yy)
+  // result = bit & yy;
+  if (AOP_TYPE(left) == AOP_CRY){
+    // c = bit & literal;
+    if(AOP_TYPE(right) == AOP_LIT){
+      if(lit & 1) {
+        if(size && pic14_sameRegs(AOP(result),AOP(left)))
+          // no change
+          goto release;
+        pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+      } else {
+        // bit(result) = 0;
+        if(size && (AOP_TYPE(result) == AOP_CRY)){
+          pic14_emitcode("clr","%s",AOP(result)->aopu.aop_dir);
+          goto release;
+        }
+        if((AOP_TYPE(result) == AOP_CRY) && ifx){
+          jumpIfTrue(ifx);
+          goto release;
+        }
+        pic14_emitcode("clr","c");
+      }
+    } else {
+      if (AOP_TYPE(right) == AOP_CRY){
+        // c = bit & bit;
+        pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
+        pic14_emitcode("anl","c,%s",AOP(left)->aopu.aop_dir);
+      } else {
+        // c = bit & val;
+        MOVA(aopGet(AOP(right),0,FALSE,FALSE));
+        // c = lsb
+        pic14_emitcode("rrc","a");
+        pic14_emitcode("anl","c,%s",AOP(left)->aopu.aop_dir);
+      }
+    }
+    // bit = c
+    // val = c
+    if(size)
+      pic14_outBitC(result);
+    // if(bit & ...)
+    else if((AOP_TYPE(result) == AOP_CRY) && ifx)
+      genIfxJump(ifx, "c");           
+    goto release ;
+  }
+  
+  // if(val & 0xZZ)       - size = 0, ifx != FALSE  -
+  // bit = val & 0xZZ     - size = 1, ifx = FALSE -
+  if((AOP_TYPE(right) == AOP_LIT) &&
+    (AOP_TYPE(result) == AOP_CRY) &&
+    (AOP_TYPE(left) != AOP_CRY)){
+    int posbit = isLiteralBit(lit);
+    /* left &  2^n */
+    if(posbit){
+      posbit--;
+      //MOVA(aopGet(AOP(left),posbit>>3,FALSE,FALSE));
+      // bit = left & 2^n
+      if(size)
+        pic14_emitcode("mov","c,acc.%d",posbit&0x07);
+      // if(left &  2^n)
+      else{
+        if(ifx){
+          int offset = 0;
+          while (posbit > 7) {
+            posbit -= 8;
+            offset++;
+          }
+          emitpcode(((rIfx.condition) ? POC_BTFSC : POC_BTFSS),
+            newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),posbit,0));
+          emitpcode(POC_GOTO,popGetLabel(rIfx.lbl->key));
+          
+          ifx->generated = 1;
+        }
+        goto release;
+      }
+    } else {
+      symbol *tlbl = newiTempLabel(NULL);
+      int sizel = AOP_SIZE(left);
+      if(size)
+        pic14_emitcode("setb","c");
+      while(sizel--){
+        if((bytelit = ((lit >> (offset*8)) & 0x0FFL)) != 0x0L){
+          MOVA( aopGet(AOP(left),offset,FALSE,FALSE));
+          // byte ==  2^n ?
+          if((posbit = isLiteralBit(bytelit)) != 0)
+            pic14_emitcode("jb","acc.%d,%05d_DS_",(posbit-1)&0x07,tlbl->key+100);
+          else{
+            if(bytelit != 0x0FFL)
+              pic14_emitcode("anl","a,%s",
+              aopGet(AOP(right),offset,FALSE,TRUE));
+            pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
+          }
+        }
+        offset++;
+      }
+      // bit = left & literal
+      if(size){
+        pic14_emitcode("clr","c");
+        pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+      }
+      // if(left & literal)
+      else{
+        if(ifx)
+          jmpTrueOrFalse(ifx, tlbl);
+        goto release ;
+      }
+    }
+    pic14_outBitC(result);
+    goto release ;
+  }
+  
+  /* if left is same as result */
+  if(pic14_sameRegs(AOP(result),AOP(left))){
+    int know_W = -1;
+    for(;size--; offset++,lit>>=8) {
+      if(AOP_TYPE(right) == AOP_LIT){
+        switch(lit & 0xff) {
+        case 0x00:
+          /*  and'ing with 0 has clears the result */
+          pic14_emitcode("clrf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
+          emitpcode(POC_CLRF,popGet(AOP(result),offset));
+          break;
+        case 0xff:
+          /* and'ing with 0xff is a nop when the result and left are the same */
+          break;
+          
+        default:
+          {
+            int p = my_powof2( (~lit) & 0xff );
+            if(p>=0) {
+              /* only one bit is set in the literal, so use a bcf instruction */
+              pic14_emitcode("bcf","%s,%d",aopGet(AOP(left),offset,FALSE,TRUE),p);
+              emitpcode(POC_BCF,newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),p,0));
+              
+            } else {
+              pic14_emitcode("movlw","0x%x", (lit & 0xff));
+              pic14_emitcode("andwf","%s,f",aopGet(AOP(left),offset,FALSE,TRUE));
+              if(know_W != (int)(lit&0xff))
+                emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+              know_W = lit &0xff;
+              emitpcode(POC_ANDWF,popGet(AOP(left),offset));
+            }
+          }    
+        }
+      } else {
+        if (AOP_TYPE(left) == AOP_ACC) {
+          emitpcode(POC_ANDFW,popGet(AOP(right),offset));
+        } else {        
+          emitpcode(POC_MOVFW,popGet(AOP(right),offset));
+          emitpcode(POC_ANDWF,popGet(AOP(left),offset));
+          
+        }
+      }
+    }
+    
+  } else {
+    // left & result in different registers
+    if(AOP_TYPE(result) == AOP_CRY){
+      // result = bit
+      // if(size), result in bit
+      // if(!size && ifx), conditional oper: if(left & right)
+      symbol *tlbl = newiTempLabel(NULL);
+      int sizer = min(AOP_SIZE(left),AOP_SIZE(right));
+      if(size)
+        pic14_emitcode("setb","c");
+      while(sizer--){
+        MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
+        pic14_emitcode("anl","a,%s",
+          aopGet(AOP(left),offset,FALSE,FALSE));
+        pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
+        offset++;
+      }
+      if(size){
+        CLRC;
+        pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+        pic14_outBitC(result);
+      } else if(ifx)
+        jmpTrueOrFalse(ifx, tlbl);
+    } else {
+      for(;(size--);offset++) {
+        // normal case
+        // result = left & right
+        if(AOP_TYPE(right) == AOP_LIT){
+          int t = (lit >> (offset*8)) & 0x0FFL;
+          switch(t) { 
+          case 0x00:
+            pic14_emitcode("clrf","%s",
+              aopGet(AOP(result),offset,FALSE,FALSE));
+            emitpcode(POC_CLRF,popGet(AOP(result),offset));
+            break;
+          case 0xff:
+            if(AOP_TYPE(left) != AOP_ACC) {
+              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:
+            if(AOP_TYPE(left) == AOP_ACC) {
+              emitpcode(POC_ANDLW, popGetLit(t));
+            } 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));
+          }
+          continue;
+        }
+        
+        if (AOP_TYPE(left) == AOP_ACC) {
+          pic14_emitcode("andwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+          emitpcode(POC_ANDFW,popGet(AOP(right),offset));
+        } else {
+          pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+          pic14_emitcode("andwf","%s,w",
+            aopGet(AOP(left),offset,FALSE,FALSE));
+          emitpcode(POC_MOVFW,popGet(AOP(right),offset));
+          emitpcode(POC_ANDFW,popGet(AOP(left),offset));
+        }
+        pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
+        emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+      }
+    }
+  }
+  
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);     
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);     
 }
 
 /*-----------------------------------------------------------------*/
@@ -5457,299 +5456,299 @@ release :
 /*-----------------------------------------------------------------*/
 static void genOr (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       int size, offset=0;
-       unsigned long lit = 0L;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp((left = IC_LEFT(ic)),ic,FALSE);
-       aopOp((right= IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       /* if left is a literal & right is not then exchange them */
-       if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
-               AOP_NEEDSACC(left)) {
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if result = right then exchange them */
-       if(pic14_sameRegs(AOP(result),AOP(right))){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if right is bit then exchange them */
-       if (AOP_TYPE(right) == AOP_CRY &&
-               AOP_TYPE(left) != AOP_CRY){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       if(AOP_TYPE(right) == AOP_LIT)
-               lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
-       
-       size = AOP_SIZE(result);
-       
-       // if(bit | yy)
-       // xx = bit | yy;
-       if (AOP_TYPE(left) == AOP_CRY){
-               if(AOP_TYPE(right) == AOP_LIT){
-                       // c = bit & literal;
-                       if(lit){
-                               // lit != 0 => result = 1
-                               if(AOP_TYPE(result) == AOP_CRY){
-                                       if(size)
-                                               emitpcode(POC_BSF, popGet(AOP(result),0));
-                                       //pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
-                                       //       AOP(result)->aopu.aop_dir,
-                                       //       AOP(result)->aopu.aop_dir);
-                                       else if(ifx)
-                                               continueIfTrue(ifx);
-                                       goto release;
-                               }
-                       } else {
-                               // lit == 0 => result = left
-                               if(size && pic14_sameRegs(AOP(result),AOP(left)))
-                                       goto release;
-                               pic14_emitcode(";XXX mov","c,%s  %s,%d",AOP(left)->aopu.aop_dir,__FILE__,__LINE__);
-                       }
-               } else {
-                       if (AOP_TYPE(right) == AOP_CRY){
-                               if(pic14_sameRegs(AOP(result),AOP(left))){
-                                       // c = bit | bit;
-                                       emitpcode(POC_BCF,   popGet(AOP(result),0));
-                                       emitpcode(POC_BTFSC, popGet(AOP(right),0));
-                                       emitpcode(POC_BSF,   popGet(AOP(result),0));
-                                       
-                                       pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
-                                               AOP(result)->aopu.aop_dir,
-                                               AOP(result)->aopu.aop_dir);
-                                       pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                               AOP(right)->aopu.aop_dir,
-                                               AOP(right)->aopu.aop_dir);
-                                       pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
-                                               AOP(result)->aopu.aop_dir,
-                                               AOP(result)->aopu.aop_dir);
-                               } else {
-                                       if( AOP_TYPE(result) == AOP_ACC) {
-                                               emitpcode(POC_MOVLW, popGetLit(0));
-                                               emitpcode(POC_BTFSS, popGet(AOP(right),0));
-                                               emitpcode(POC_BTFSC, popGet(AOP(left),0));
-                                               emitpcode(POC_MOVLW, popGetLit(1));
-                                               
-                                       } else {
-                                               
-                                               emitpcode(POC_BCF,   popGet(AOP(result),0));
-                                               emitpcode(POC_BTFSS, popGet(AOP(right),0));
-                                               emitpcode(POC_BTFSC, popGet(AOP(left),0));
-                                               emitpcode(POC_BSF,   popGet(AOP(result),0));
-                                               
-                                               pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
-                                                       AOP(result)->aopu.aop_dir,
-                                                       AOP(result)->aopu.aop_dir);
-                                               pic14_emitcode("btfss","(%s >> 3), (%s & 7)",
-                                                       AOP(right)->aopu.aop_dir,
-                                                       AOP(right)->aopu.aop_dir);
-                                               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                                       AOP(left)->aopu.aop_dir,
-                                                       AOP(left)->aopu.aop_dir);
-                                               pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
-                                                       AOP(result)->aopu.aop_dir,
-                                                       AOP(result)->aopu.aop_dir);
-                                       }
-                               }
-                       } else {
-                               // c = bit | val;
-                               symbol *tlbl = newiTempLabel(NULL);
-                               pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
-                               
-                               
-                               emitpcode(POC_BCF,   popGet(AOP(result),0));
-                               if( AOP_TYPE(right) == AOP_ACC) {
-                                       emitpcode(POC_IORLW, popGetLit(0));
-                                       emitSKPNZ;
-                                       emitpcode(POC_BTFSC, popGet(AOP(left),0));
-                                       emitpcode(POC_BSF,   popGet(AOP(result),0));
-                               }
-                               
-                               
-                               
-                               if(!((AOP_TYPE(result) == AOP_CRY) && ifx))
-                                       pic14_emitcode(";XXX setb","c");
-                               pic14_emitcode(";XXX jb","%s,%05d_DS_",
-                                       AOP(left)->aopu.aop_dir,tlbl->key+100);
-                               pic14_toBoolean(right);
-                               pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
-                               if((AOP_TYPE(result) == AOP_CRY) && ifx){
-                                       jmpTrueOrFalse(ifx, tlbl);
-                                       goto release;
-                               } else {
-                                       CLRC;
-                                       pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                               }
-                       }
-               }
-               // bit = c
-               // val = c
-               if(size)
-                       pic14_outBitC(result);
-               // if(bit | ...)
-               else if((AOP_TYPE(result) == AOP_CRY) && ifx)
-                       genIfxJump(ifx, "c");           
-               goto release ;
-       }
-       
-       // if(val | 0xZZ)       - size = 0, ifx != FALSE  -
-       // bit = val | 0xZZ     - size = 1, ifx = FALSE -
-       if((AOP_TYPE(right) == AOP_LIT) &&
-               (AOP_TYPE(result) == AOP_CRY) &&
-               (AOP_TYPE(left) != AOP_CRY)){
-               if(lit){
-                       pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
-                       // result = 1
-                       if(size)
-                               pic14_emitcode(";XXX setb","%s",AOP(result)->aopu.aop_dir);
-                       else 
-                               continueIfTrue(ifx);
-                       goto release;
-               } else {
-                       pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
-                       // lit = 0, result = boolean(left)
-                       if(size)
-                               pic14_emitcode(";XXX setb","c");
-                       pic14_toBoolean(right);
-                       if(size){
-                               symbol *tlbl = newiTempLabel(NULL);
-                               pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
-                               CLRC;
-                               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                       } else {
-                               genIfxJump (ifx,"a");
-                               goto release;
-                       }
-               }
-               pic14_outBitC(result);
-               goto release ;
-       }
-       
-       /* if left is same as result */
-       if(pic14_sameRegs(AOP(result),AOP(left))){
-               int know_W = -1;
-               for(;size--; offset++,lit>>=8) {
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               if((lit & 0xff) == 0)
-                                       /*  or'ing with 0 has no effect */
-                                       continue;
-                               else {
-                                       int p = my_powof2(lit & 0xff);
-                                       if(p>=0) {
-                                               /* only one bit is set in the literal, so use a bsf instruction */
-                                               emitpcode(POC_BSF,
-                                                       newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),p,0));
-                                       } else {
-                                               if(know_W != (int)(lit & 0xff))
-                                                       emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                               know_W = lit & 0xff;
-                                               emitpcode(POC_IORWF, popGet(AOP(left),offset));
-                                       }
-                                       
-                               }
-                       } else {
-                               if (AOP_TYPE(left) == AOP_ACC) {
-                                       emitpcode(POC_IORFW,  popGet(AOP(right),offset));
-                                       pic14_emitcode("iorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                               } else {                    
-                                       emitpcode(POC_MOVFW,  popGet(AOP(right),offset));
-                                       emitpcode(POC_IORWF,  popGet(AOP(left),offset));
-                                       
-                                       pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                                       pic14_emitcode("iorwf","%s,f",aopGet(AOP(left),offset,FALSE,FALSE));
-                                       
-                               }
-                       }
-               }
-       } else {
-               // left & result in different registers
-               if(AOP_TYPE(result) == AOP_CRY){
-                       // result = bit
-                       // if(size), result in bit
-                       // if(!size && ifx), conditional oper: if(left | right)
-                       symbol *tlbl = newiTempLabel(NULL);
-                       int sizer = max(AOP_SIZE(left),AOP_SIZE(right));
-                       pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
-                       
-                       
-                       if(size)
-                               pic14_emitcode(";XXX setb","c");
-                       while(sizer--){
-                               MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
-                               pic14_emitcode(";XXX orl","a,%s",
-                                       aopGet(AOP(left),offset,FALSE,FALSE));
-                               pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
-                               offset++;
-                       }
-                       if(size){
-                               CLRC;
-                               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                               pic14_outBitC(result);
-                       } else if(ifx)
-                               jmpTrueOrFalse(ifx, tlbl);
-               } else for(;(size--);offset++){
-                       // normal case
-                       // result = left & right
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               int t = (lit >> (offset*8)) & 0x0FFL;
-                               switch(t) { 
-                               case 0x00:
-                                       if (AOP_TYPE(left) != AOP_ACC) {
-                                               emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
-                                       }
-                                       emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
-                                       
-                                       break;
-                               default:
-                                       if (AOP_TYPE(left) == AOP_ACC) {
-                                               emitpcode(POC_IORLW,  popGetLit(t));
-                                       } else {
-                                               emitpcode(POC_MOVLW,  popGetLit(t));
-                                               emitpcode(POC_IORFW,  popGet(AOP(left),offset));
-                                       }
-                                       emitpcode(POC_MOVWF,  popGet(AOP(result),offset));            
-                               }
-                               continue;
-                       }
-                       
-                       // faster than result <- left, anl result,right
-                       // and better if result is SFR
-                       if (AOP_TYPE(left) == AOP_ACC) {
-                               emitpcode(POC_IORWF,  popGet(AOP(right),offset));
-                               pic14_emitcode("iorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                       } else {
-                               emitpcode(POC_MOVFW,  popGet(AOP(right),offset));
-                               emitpcode(POC_IORFW,  popGet(AOP(left),offset));
-                               
-                               pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                               pic14_emitcode("iorwf","%s,w",
-                                       aopGet(AOP(left),offset,FALSE,FALSE));
-                       }
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
-                       pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
-               }
-       }
-       
+  operand *left, *right, *result;
+  int size, offset=0;
+  unsigned long lit = 0L;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp((left = IC_LEFT(ic)),ic,FALSE);
+  aopOp((right= IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  /* if left is a literal & right is not then exchange them */
+  if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
+    AOP_NEEDSACC(left)) {
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if result = right then exchange them */
+  if(pic14_sameRegs(AOP(result),AOP(right))){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if right is bit then exchange them */
+  if (AOP_TYPE(right) == AOP_CRY &&
+    AOP_TYPE(left) != AOP_CRY){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  if(AOP_TYPE(right) == AOP_LIT)
+    lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
+  
+  size = AOP_SIZE(result);
+  
+  // if(bit | yy)
+  // xx = bit | yy;
+  if (AOP_TYPE(left) == AOP_CRY){
+    if(AOP_TYPE(right) == AOP_LIT){
+      // c = bit & literal;
+      if(lit){
+        // lit != 0 => result = 1
+        if(AOP_TYPE(result) == AOP_CRY){
+          if(size)
+            emitpcode(POC_BSF, popGet(AOP(result),0));
+          //pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
+          //   AOP(result)->aopu.aop_dir,
+          //   AOP(result)->aopu.aop_dir);
+          else if(ifx)
+            continueIfTrue(ifx);
+          goto release;
+        }
+      } else {
+        // lit == 0 => result = left
+        if(size && pic14_sameRegs(AOP(result),AOP(left)))
+          goto release;
+        pic14_emitcode(";XXX mov","c,%s  %s,%d",AOP(left)->aopu.aop_dir,__FILE__,__LINE__);
+      }
+    } else {
+      if (AOP_TYPE(right) == AOP_CRY){
+        if(pic14_sameRegs(AOP(result),AOP(left))){
+          // c = bit | bit;
+          emitpcode(POC_BCF,   popGet(AOP(result),0));
+          emitpcode(POC_BTFSC, popGet(AOP(right),0));
+          emitpcode(POC_BSF,   popGet(AOP(result),0));
+          
+          pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
+            AOP(result)->aopu.aop_dir,
+            AOP(result)->aopu.aop_dir);
+          pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+            AOP(right)->aopu.aop_dir,
+            AOP(right)->aopu.aop_dir);
+          pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
+            AOP(result)->aopu.aop_dir,
+            AOP(result)->aopu.aop_dir);
+        } else {
+          if( AOP_TYPE(result) == AOP_ACC) {
+            emitpcode(POC_MOVLW, popGetLit(0));
+            emitpcode(POC_BTFSS, popGet(AOP(right),0));
+            emitpcode(POC_BTFSC, popGet(AOP(left),0));
+            emitpcode(POC_MOVLW, popGetLit(1));
+            
+          } else {
+            
+            emitpcode(POC_BCF,   popGet(AOP(result),0));
+            emitpcode(POC_BTFSS, popGet(AOP(right),0));
+            emitpcode(POC_BTFSC, popGet(AOP(left),0));
+            emitpcode(POC_BSF,   popGet(AOP(result),0));
+            
+            pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
+              AOP(result)->aopu.aop_dir,
+              AOP(result)->aopu.aop_dir);
+            pic14_emitcode("btfss","(%s >> 3), (%s & 7)",
+              AOP(right)->aopu.aop_dir,
+              AOP(right)->aopu.aop_dir);
+            pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+              AOP(left)->aopu.aop_dir,
+              AOP(left)->aopu.aop_dir);
+            pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
+              AOP(result)->aopu.aop_dir,
+              AOP(result)->aopu.aop_dir);
+          }
+        }
+      } else {
+        // c = bit | val;
+        symbol *tlbl = newiTempLabel(NULL);
+        pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
+        
+        
+        emitpcode(POC_BCF,   popGet(AOP(result),0));
+        if( AOP_TYPE(right) == AOP_ACC) {
+          emitpcode(POC_IORLW, popGetLit(0));
+          emitSKPNZ;
+          emitpcode(POC_BTFSC, popGet(AOP(left),0));
+          emitpcode(POC_BSF,   popGet(AOP(result),0));
+        }
+        
+        
+        
+        if(!((AOP_TYPE(result) == AOP_CRY) && ifx))
+          pic14_emitcode(";XXX setb","c");
+        pic14_emitcode(";XXX jb","%s,%05d_DS_",
+          AOP(left)->aopu.aop_dir,tlbl->key+100);
+        pic14_toBoolean(right);
+        pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
+        if((AOP_TYPE(result) == AOP_CRY) && ifx){
+          jmpTrueOrFalse(ifx, tlbl);
+          goto release;
+        } else {
+          CLRC;
+          pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+        }
+      }
+    }
+    // bit = c
+    // val = c
+    if(size)
+      pic14_outBitC(result);
+    // if(bit | ...)
+    else if((AOP_TYPE(result) == AOP_CRY) && ifx)
+      genIfxJump(ifx, "c");           
+    goto release ;
+  }
+  
+  // if(val | 0xZZ)       - size = 0, ifx != FALSE  -
+  // bit = val | 0xZZ     - size = 1, ifx = FALSE -
+  if((AOP_TYPE(right) == AOP_LIT) &&
+    (AOP_TYPE(result) == AOP_CRY) &&
+    (AOP_TYPE(left) != AOP_CRY)){
+    if(lit){
+      pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
+      // result = 1
+      if(size)
+        pic14_emitcode(";XXX setb","%s",AOP(result)->aopu.aop_dir);
+      else 
+        continueIfTrue(ifx);
+      goto release;
+    } else {
+      pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
+      // lit = 0, result = boolean(left)
+      if(size)
+        pic14_emitcode(";XXX setb","c");
+      pic14_toBoolean(right);
+      if(size){
+        symbol *tlbl = newiTempLabel(NULL);
+        pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
+        CLRC;
+        pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+      } else {
+        genIfxJump (ifx,"a");
+        goto release;
+      }
+    }
+    pic14_outBitC(result);
+    goto release ;
+  }
+  
+  /* if left is same as result */
+  if(pic14_sameRegs(AOP(result),AOP(left))){
+    int know_W = -1;
+    for(;size--; offset++,lit>>=8) {
+      if(AOP_TYPE(right) == AOP_LIT){
+        if((lit & 0xff) == 0)
+          /*  or'ing with 0 has no effect */
+          continue;
+        else {
+          int p = my_powof2(lit & 0xff);
+          if(p>=0) {
+            /* only one bit is set in the literal, so use a bsf instruction */
+            emitpcode(POC_BSF,
+              newpCodeOpBit(aopGet(AOP(left),offset,FALSE,FALSE),p,0));
+          } else {
+            if(know_W != (int)(lit & 0xff))
+              emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+            know_W = lit & 0xff;
+            emitpcode(POC_IORWF, popGet(AOP(left),offset));
+          }
+          
+        }
+      } else {
+        if (AOP_TYPE(left) == AOP_ACC) {
+          emitpcode(POC_IORFW,  popGet(AOP(right),offset));
+          pic14_emitcode("iorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+        } else {        
+          emitpcode(POC_MOVFW,  popGet(AOP(right),offset));
+          emitpcode(POC_IORWF,  popGet(AOP(left),offset));
+          
+          pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+          pic14_emitcode("iorwf","%s,f",aopGet(AOP(left),offset,FALSE,FALSE));
+          
+        }
+      }
+    }
+  } else {
+    // left & result in different registers
+    if(AOP_TYPE(result) == AOP_CRY){
+      // result = bit
+      // if(size), result in bit
+      // if(!size && ifx), conditional oper: if(left | right)
+      symbol *tlbl = newiTempLabel(NULL);
+      int sizer = max(AOP_SIZE(left),AOP_SIZE(right));
+      pic14_emitcode(";XXX "," %s,%d",__FILE__,__LINE__);
+      
+      
+      if(size)
+        pic14_emitcode(";XXX setb","c");
+      while(sizer--){
+        MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
+        pic14_emitcode(";XXX orl","a,%s",
+          aopGet(AOP(left),offset,FALSE,FALSE));
+        pic14_emitcode(";XXX jnz","%05d_DS_",tlbl->key+100);
+        offset++;
+      }
+      if(size){
+        CLRC;
+        pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+        pic14_outBitC(result);
+      } else if(ifx)
+        jmpTrueOrFalse(ifx, tlbl);
+    } else for(;(size--);offset++){
+      // normal case
+      // result = left & right
+      if(AOP_TYPE(right) == AOP_LIT){
+        int t = (lit >> (offset*8)) & 0x0FFL;
+        switch(t) { 
+        case 0x00:
+          if (AOP_TYPE(left) != AOP_ACC) {
+            emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
+          }
+          emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
+          
+          break;
+        default:
+          if (AOP_TYPE(left) == AOP_ACC) {
+            emitpcode(POC_IORLW,  popGetLit(t));
+          } else {
+            emitpcode(POC_MOVLW,  popGetLit(t));
+            emitpcode(POC_IORFW,  popGet(AOP(left),offset));
+          }
+          emitpcode(POC_MOVWF,  popGet(AOP(result),offset));        
+        }
+        continue;
+      }
+      
+      // faster than result <- left, anl result,right
+      // and better if result is SFR
+      if (AOP_TYPE(left) == AOP_ACC) {
+        emitpcode(POC_IORWF,  popGet(AOP(right),offset));
+        pic14_emitcode("iorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+      } else {
+        emitpcode(POC_MOVFW,  popGet(AOP(right),offset));
+        emitpcode(POC_IORFW,  popGet(AOP(left),offset));
+        
+        pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+        pic14_emitcode("iorwf","%s,w",
+          aopGet(AOP(left),offset,FALSE,FALSE));
+      }
+      emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
+      pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
+    }
+  }
+  
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);     
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);     
 }
 
 /*-----------------------------------------------------------------*/
@@ -5757,246 +5756,246 @@ release :
 /*-----------------------------------------------------------------*/
 static void genXor (iCode *ic, iCode *ifx)
 {
-       operand *left, *right, *result;
-       int size, offset=0;
-       unsigned long lit = 0L;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp((left = IC_LEFT(ic)),ic,FALSE);
-       aopOp((right= IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       /* if left is a literal & right is not ||
-       if left needs acc & right does not */
-       if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
-               (AOP_NEEDSACC(left) && !AOP_NEEDSACC(right))) {
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if result = right then exchange them */
-       if(pic14_sameRegs(AOP(result),AOP(right))){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       
-       /* if right is bit then exchange them */
-       if (AOP_TYPE(right) == AOP_CRY &&
-               AOP_TYPE(left) != AOP_CRY){
-               operand *tmp = right ;
-               right = left;
-               left = tmp;
-       }
-       if(AOP_TYPE(right) == AOP_LIT)
-               lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
-       
-       size = AOP_SIZE(result);
-       
-       // if(bit ^ yy)
-       // xx = bit ^ yy;
-       if (AOP_TYPE(left) == AOP_CRY){
-               if(AOP_TYPE(right) == AOP_LIT){
-                       // c = bit & literal;
-                       if(lit>>1){
-                               // lit>>1  != 0 => result = 1
-                               if(AOP_TYPE(result) == AOP_CRY){
-                                       if(size)
-                                       {emitpcode(POC_BSF,  popGet(AOP(result),offset));
-                                       pic14_emitcode("setb","%s",AOP(result)->aopu.aop_dir);}
-                                       else if(ifx)
-                                               continueIfTrue(ifx);
-                                       goto release;
-                               }
-                               pic14_emitcode("setb","c");
-                       } else{
-                               // lit == (0 or 1)
-                               if(lit == 0){
-                                       // lit == 0, result = left
-                                       if(size && pic14_sameRegs(AOP(result),AOP(left)))
-                                               goto release;
-                                       pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                               } else{
-                                       // lit == 1, result = not(left)
-                                       if(size && pic14_sameRegs(AOP(result),AOP(left))){
-                                               emitpcode(POC_MOVLW,  popGet(AOP(result),offset));
-                                               emitpcode(POC_XORWF,  popGet(AOP(result),offset));
-                                               pic14_emitcode("cpl","%s",AOP(result)->aopu.aop_dir);
-                                               goto release;
-                                       } else {
-                                               pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
-                                               pic14_emitcode("cpl","c");
-                                       }
-                               }
-                       }
-                       
-               } else {
-                       // right != literal
-                       symbol *tlbl = newiTempLabel(NULL);
-                       if (AOP_TYPE(right) == AOP_CRY){
-                               // c = bit ^ bit;
-                               pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
-                       }
-                       else{
-                               int sizer = AOP_SIZE(right);
-                               // c = bit ^ val
-                               // if val>>1 != 0, result = 1
-                               pic14_emitcode("setb","c");
-                               while(sizer){
-                                       MOVA(aopGet(AOP(right),sizer-1,FALSE,FALSE));
-                                       if(sizer == 1)
-                                               // test the msb of the lsb
-                                               pic14_emitcode("anl","a,#0xfe");
-                                       pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
-                                       sizer--;
-                               }
-                               // val = (0,1)
-                               pic14_emitcode("rrc","a");
-                       }
-                       pic14_emitcode("jnb","%s,%05d_DS_",AOP(left)->aopu.aop_dir,(tlbl->key+100));
-                       pic14_emitcode("cpl","c");
-                       pic14_emitcode("","%05d_DS_:",(tlbl->key+100));
-               }
-               // bit = c
-               // val = c
-               if(size)
-                       pic14_outBitC(result);
-               // if(bit | ...)
-               else if((AOP_TYPE(result) == AOP_CRY) && ifx)
-                       genIfxJump(ifx, "c");           
-               goto release ;
-       }
-       
-       if(pic14_sameRegs(AOP(result),AOP(left))){
-               /* if left is same as result */
-               for(;size--; offset++) {
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               int t  = (lit >> (offset*8)) & 0x0FFL;
-                               if(t == 0x00L)
-                                       continue;
-                               else
-                                       if (IS_AOP_PREG(left)) {
-                                               MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
-                                               pic14_emitcode("xrl","a,%s",aopGet(AOP(left),offset,FALSE,TRUE));
-                                               aopPut(AOP(result),"a",offset);
-                                       } else {
-                                               emitpcode(POC_MOVLW, popGetLit(t));
-                                               emitpcode(POC_XORWF,popGet(AOP(left),offset));
-                                               pic14_emitcode("xrl","%s,%s",
-                                                       aopGet(AOP(left),offset,FALSE,TRUE),
-                                                       aopGet(AOP(right),offset,FALSE,FALSE));
-                                       }
-                       } else {
-                               if (AOP_TYPE(left) == AOP_ACC)
-                                       pic14_emitcode("xrl","a,%s",aopGet(AOP(right),offset,FALSE,FALSE));
-                               else {
-                                       emitpcode(POC_MOVFW,popGet(AOP(right),offset));
-                                       emitpcode(POC_XORWF,popGet(AOP(left),offset));
-                                       /*
-                                       if (IS_AOP_PREG(left)) {
-                                       pic14_emitcode("xrl","a,%s",aopGet(AOP(left),offset,FALSE,TRUE));
-                                       aopPut(AOP(result),"a",offset);
-                                       } else
-                                       pic14_emitcode("xrl","%s,a",
-                                       aopGet(AOP(left),offset,FALSE,TRUE));
-                                       */
-                               }
-                       }
-               }
-       } else {
-               // left & result in different registers
-               if(AOP_TYPE(result) == AOP_CRY){
-                       // result = bit
-                       // if(size), result in bit
-                       // if(!size && ifx), conditional oper: if(left ^ right)
-                       symbol *tlbl = newiTempLabel(NULL);
-                       int sizer = max(AOP_SIZE(left),AOP_SIZE(right));
-                       if(size)
-                               pic14_emitcode("setb","c");
-                       while(sizer--){
-                               if((AOP_TYPE(right) == AOP_LIT) &&
-                                       (((lit >> (offset*8)) & 0x0FFL) == 0x00L)){
-                                       MOVA(aopGet(AOP(left),offset,FALSE,FALSE));
-                               } else {
-                                       MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
-                                       pic14_emitcode("xrl","a,%s",
-                                               aopGet(AOP(left),offset,FALSE,FALSE));
-                               }
-                               pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
-                               offset++;
-                       }
-                       if(size){
-                               CLRC;
-                               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-                               pic14_outBitC(result);
-                       } else if(ifx)
-                               jmpTrueOrFalse(ifx, tlbl);
-               } else for(;(size--);offset++){
-                       // normal case
-                       // result = left & right
-                       if(AOP_TYPE(right) == AOP_LIT){
-                               int t = (lit >> (offset*8)) & 0x0FFL;
-                               switch(t) { 
-                               case 0x00:
-                                       if (AOP_TYPE(left) != AOP_ACC) {
-                                               emitpcode(POC_MOVFW,popGet(AOP(left),offset));
-                                       }
-                                       emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-                                       pic14_emitcode("movf","%s,w",
-                                               aopGet(AOP(left),offset,FALSE,FALSE));
-                                       pic14_emitcode("movwf","%s",
-                                               aopGet(AOP(result),offset,FALSE,FALSE));
-                                       break;
-                               case 0xff:
-                                       if (AOP_TYPE(left) == AOP_ACC) {
-                                               emitpcode(POC_XORLW, popGetLit(t));
-                                       } else {
-                                               emitpcode(POC_COMFW,popGet(AOP(left),offset));
-                                       }
-                                       emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-                                       break;
-                               default:
-                                       if (AOP_TYPE(left) == AOP_ACC) {
-                                               emitpcode(POC_XORLW, popGetLit(t));
-                                       } else {
-                                               emitpcode(POC_MOVLW, popGetLit(t));
-                                               emitpcode(POC_XORFW,popGet(AOP(left),offset));
-                                       }
-                                       emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-                                       pic14_emitcode("movlw","0x%x",t);
-                                       pic14_emitcode("xorwf","%s,w",
-                                               aopGet(AOP(left),offset,FALSE,FALSE));
-                                       pic14_emitcode("movwf","%s",
-                                               aopGet(AOP(result),offset,FALSE,FALSE));
-                                       
-                               }
-                               continue;
-                       }
-                       
-                       // faster than result <- left, anl result,right
-                       // and better if result is SFR
-                       if (AOP_TYPE(left) == AOP_ACC) {
-                               emitpcode(POC_XORFW,popGet(AOP(right),offset));
-                               pic14_emitcode("xorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                       } else {
-                               emitpcode(POC_MOVFW,popGet(AOP(right),offset));
-                               emitpcode(POC_XORFW,popGet(AOP(left),offset));
-                               pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                               pic14_emitcode("xorwf","%s,w",aopGet(AOP(left),offset,FALSE,FALSE));
-                       }
-                       if ( AOP_TYPE(result) != AOP_ACC){
-                               emitpcode(POC_MOVWF,popGet(AOP(result),offset));
-                               pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
-                       }
-               }
-       }
-       
+  operand *left, *right, *result;
+  int size, offset=0;
+  unsigned long lit = 0L;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp((left = IC_LEFT(ic)),ic,FALSE);
+  aopOp((right= IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  /* if left is a literal & right is not ||
+  if left needs acc & right does not */
+  if ((AOP_TYPE(left) == AOP_LIT && AOP_TYPE(right) != AOP_LIT) ||
+    (AOP_NEEDSACC(left) && !AOP_NEEDSACC(right))) {
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if result = right then exchange them */
+  if(pic14_sameRegs(AOP(result),AOP(right))){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  
+  /* if right is bit then exchange them */
+  if (AOP_TYPE(right) == AOP_CRY &&
+    AOP_TYPE(left) != AOP_CRY){
+    operand *tmp = right ;
+    right = left;
+    left = tmp;
+  }
+  if(AOP_TYPE(right) == AOP_LIT)
+    lit = (unsigned long)floatFromVal (AOP(right)->aopu.aop_lit);
+  
+  size = AOP_SIZE(result);
+  
+  // if(bit ^ yy)
+  // xx = bit ^ yy;
+  if (AOP_TYPE(left) == AOP_CRY){
+    if(AOP_TYPE(right) == AOP_LIT){
+      // c = bit & literal;
+      if(lit>>1){
+        // lit>>1  != 0 => result = 1
+        if(AOP_TYPE(result) == AOP_CRY){
+          if(size)
+          {emitpcode(POC_BSF,  popGet(AOP(result),offset));
+          pic14_emitcode("setb","%s",AOP(result)->aopu.aop_dir);}
+          else if(ifx)
+            continueIfTrue(ifx);
+          goto release;
+        }
+        pic14_emitcode("setb","c");
+      } else{
+        // lit == (0 or 1)
+        if(lit == 0){
+          // lit == 0, result = left
+          if(size && pic14_sameRegs(AOP(result),AOP(left)))
+            goto release;
+          pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+        } else{
+          // lit == 1, result = not(left)
+          if(size && pic14_sameRegs(AOP(result),AOP(left))){
+            emitpcode(POC_MOVLW,  popGet(AOP(result),offset));
+            emitpcode(POC_XORWF,  popGet(AOP(result),offset));
+            pic14_emitcode("cpl","%s",AOP(result)->aopu.aop_dir);
+            goto release;
+          } else {
+            pic14_emitcode("mov","c,%s",AOP(left)->aopu.aop_dir);
+            pic14_emitcode("cpl","c");
+          }
+        }
+      }
+      
+    } else {
+      // right != literal
+      symbol *tlbl = newiTempLabel(NULL);
+      if (AOP_TYPE(right) == AOP_CRY){
+        // c = bit ^ bit;
+        pic14_emitcode("mov","c,%s",AOP(right)->aopu.aop_dir);
+      }
+      else{
+        int sizer = AOP_SIZE(right);
+        // c = bit ^ val
+        // if val>>1 != 0, result = 1
+        pic14_emitcode("setb","c");
+        while(sizer){
+          MOVA(aopGet(AOP(right),sizer-1,FALSE,FALSE));
+          if(sizer == 1)
+            // test the msb of the lsb
+            pic14_emitcode("anl","a,#0xfe");
+          pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
+          sizer--;
+        }
+        // val = (0,1)
+        pic14_emitcode("rrc","a");
+      }
+      pic14_emitcode("jnb","%s,%05d_DS_",AOP(left)->aopu.aop_dir,(tlbl->key+100));
+      pic14_emitcode("cpl","c");
+      pic14_emitcode("","%05d_DS_:",(tlbl->key+100));
+    }
+    // bit = c
+    // val = c
+    if(size)
+      pic14_outBitC(result);
+    // if(bit | ...)
+    else if((AOP_TYPE(result) == AOP_CRY) && ifx)
+      genIfxJump(ifx, "c");           
+    goto release ;
+  }
+  
+  if(pic14_sameRegs(AOP(result),AOP(left))){
+    /* if left is same as result */
+    for(;size--; offset++) {
+      if(AOP_TYPE(right) == AOP_LIT){
+        int t  = (lit >> (offset*8)) & 0x0FFL;
+        if(t == 0x00L)
+          continue;
+        else
+          if (IS_AOP_PREG(left)) {
+            MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
+            pic14_emitcode("xrl","a,%s",aopGet(AOP(left),offset,FALSE,TRUE));
+            aopPut(AOP(result),"a",offset);
+          } else {
+            emitpcode(POC_MOVLW, popGetLit(t));
+            emitpcode(POC_XORWF,popGet(AOP(left),offset));
+            pic14_emitcode("xrl","%s,%s",
+              aopGet(AOP(left),offset,FALSE,TRUE),
+              aopGet(AOP(right),offset,FALSE,FALSE));
+          }
+      } else {
+        if (AOP_TYPE(left) == AOP_ACC)
+          pic14_emitcode("xrl","a,%s",aopGet(AOP(right),offset,FALSE,FALSE));
+        else {
+          emitpcode(POC_MOVFW,popGet(AOP(right),offset));
+          emitpcode(POC_XORWF,popGet(AOP(left),offset));
+          /*
+          if (IS_AOP_PREG(left)) {
+          pic14_emitcode("xrl","a,%s",aopGet(AOP(left),offset,FALSE,TRUE));
+          aopPut(AOP(result),"a",offset);
+          } else
+          pic14_emitcode("xrl","%s,a",
+          aopGet(AOP(left),offset,FALSE,TRUE));
+          */
+        }
+      }
+    }
+  } else {
+    // left & result in different registers
+    if(AOP_TYPE(result) == AOP_CRY){
+      // result = bit
+      // if(size), result in bit
+      // if(!size && ifx), conditional oper: if(left ^ right)
+      symbol *tlbl = newiTempLabel(NULL);
+      int sizer = max(AOP_SIZE(left),AOP_SIZE(right));
+      if(size)
+        pic14_emitcode("setb","c");
+      while(sizer--){
+        if((AOP_TYPE(right) == AOP_LIT) &&
+          (((lit >> (offset*8)) & 0x0FFL) == 0x00L)){
+          MOVA(aopGet(AOP(left),offset,FALSE,FALSE));
+        } else {
+          MOVA(aopGet(AOP(right),offset,FALSE,FALSE));
+          pic14_emitcode("xrl","a,%s",
+            aopGet(AOP(left),offset,FALSE,FALSE));
+        }
+        pic14_emitcode("jnz","%05d_DS_",tlbl->key+100);
+        offset++;
+      }
+      if(size){
+        CLRC;
+        pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+        pic14_outBitC(result);
+      } else if(ifx)
+        jmpTrueOrFalse(ifx, tlbl);
+    } else for(;(size--);offset++){
+      // normal case
+      // result = left & right
+      if(AOP_TYPE(right) == AOP_LIT){
+        int t = (lit >> (offset*8)) & 0x0FFL;
+        switch(t) { 
+        case 0x00:
+          if (AOP_TYPE(left) != AOP_ACC) {
+            emitpcode(POC_MOVFW,popGet(AOP(left),offset));
+          }
+          emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+          pic14_emitcode("movf","%s,w",
+            aopGet(AOP(left),offset,FALSE,FALSE));
+          pic14_emitcode("movwf","%s",
+            aopGet(AOP(result),offset,FALSE,FALSE));
+          break;
+        case 0xff:
+          if (AOP_TYPE(left) == AOP_ACC) {
+            emitpcode(POC_XORLW, popGetLit(t));
+          } else {
+            emitpcode(POC_COMFW,popGet(AOP(left),offset));
+          }
+          emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+          break;
+        default:
+          if (AOP_TYPE(left) == AOP_ACC) {
+            emitpcode(POC_XORLW, popGetLit(t));
+          } else {
+            emitpcode(POC_MOVLW, popGetLit(t));
+            emitpcode(POC_XORFW,popGet(AOP(left),offset));
+          }
+          emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+          pic14_emitcode("movlw","0x%x",t);
+          pic14_emitcode("xorwf","%s,w",
+            aopGet(AOP(left),offset,FALSE,FALSE));
+          pic14_emitcode("movwf","%s",
+            aopGet(AOP(result),offset,FALSE,FALSE));
+          
+        }
+        continue;
+      }
+      
+      // faster than result <- left, anl result,right
+      // and better if result is SFR
+      if (AOP_TYPE(left) == AOP_ACC) {
+        emitpcode(POC_XORFW,popGet(AOP(right),offset));
+        pic14_emitcode("xorwf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+      } else {
+        emitpcode(POC_MOVFW,popGet(AOP(right),offset));
+        emitpcode(POC_XORFW,popGet(AOP(left),offset));
+        pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+        pic14_emitcode("xorwf","%s,w",aopGet(AOP(left),offset,FALSE,FALSE));
+      }
+      if ( AOP_TYPE(result) != AOP_ACC){
+        emitpcode(POC_MOVWF,popGet(AOP(result),offset));
+        pic14_emitcode("movwf","%s",aopGet(AOP(result),offset,FALSE,FALSE));
+      }
+    }
+  }
+  
 release :
-       freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(result,NULL,ic,TRUE);     
+  freeAsmop(left,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(right,NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(result,NULL,ic,TRUE);     
 }
 
 /*-----------------------------------------------------------------*/
@@ -6004,40 +6003,40 @@ release :
 /*-----------------------------------------------------------------*/
 static void genInline (iCode *ic)
 {
-       char *buffer, *bp, *bp1;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       _G.inLine += (!options.asmpeep);
-       
-       buffer = bp = bp1 = Safe_calloc(1, strlen(IC_INLINE(ic))+1);
-       strcpy(buffer,IC_INLINE(ic));
-       
-       /* emit each line as a code */
-       while (*bp) {
-               if (*bp == '\n') {
-                       *bp++ = '\0';
-                       
-                       if(*bp1)
-                               addpCode2pBlock(pb,AssembleLine(bp1));
-                       bp1 = bp;
-               } else {
-                       if (*bp == ':') {
-                               bp++;
-                               *bp = '\0';
-                               bp++;
-                               pic14_emitcode(bp1,"");
-                               bp1 = bp;
-                       } else
-                               bp++;
-               }
-       }
-       if ((bp1 != bp) && *bp1)
-               addpCode2pBlock(pb,AssembleLine(bp1));
-       
-       Safe_free(buffer);
-       
-       _G.inLine -= (!options.asmpeep);
+  char *buffer, *bp, *bp1;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  _G.inLine += (!options.asmpeep);
+  
+  buffer = bp = bp1 = Safe_calloc(1, strlen(IC_INLINE(ic))+1);
+  strcpy(buffer,IC_INLINE(ic));
+  
+  /* emit each line as a code */
+  while (*bp) {
+    if (*bp == '\n') {
+      *bp++ = '\0';
+      
+      if(*bp1)
+        addpCode2pBlock(pb,AssembleLine(bp1));
+      bp1 = bp;
+    } else {
+      if (*bp == ':') {
+        bp++;
+        *bp = '\0';
+        bp++;
+        pic14_emitcode(bp1,"");
+        bp1 = bp;
+      } else
+        bp++;
+    }
+  }
+  if ((bp1 != bp) && *bp1)
+    addpCode2pBlock(pb,AssembleLine(bp1));
+  
+  Safe_free(buffer);
+  
+  _G.inLine -= (!options.asmpeep);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6045,40 +6044,40 @@ static void genInline (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genRRC (iCode *ic)
 {
-       operand *left , *result ;
-       int size, offset = 0, same;
-       
-       /* rotate right with carry */
-       left = IC_LEFT(ic);
-       result=IC_RESULT(ic);
-       aopOp (left,ic,FALSE);
-       aopOp (result,ic,FALSE);
-       
-       DEBUGpic14_AopType(__LINE__,left,NULL,result);
-       
-       same = pic14_sameRegs(AOP(result),AOP(left));
-       
-       size = AOP_SIZE(result);    
-       
-       /* get the lsb and put it into the carry */
-       emitpcode(POC_RRFW, popGet(AOP(left),size-1));
-       
-       offset = 0 ;
-       
-       while(size--) {
-               
-               if(same) {
-                       emitpcode(POC_RRF, popGet(AOP(left),offset));
-               } else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offset));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-               }
-               
-               offset++;
-       }
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  operand *left , *result ;
+  int size, offset = 0, same;
+  
+  /* rotate right with carry */
+  left = IC_LEFT(ic);
+  result=IC_RESULT(ic);
+  aopOp (left,ic,FALSE);
+  aopOp (result,ic,FALSE);
+  
+  DEBUGpic14_AopType(__LINE__,left,NULL,result);
+  
+  same = pic14_sameRegs(AOP(result),AOP(left));
+  
+  size = AOP_SIZE(result);    
+  
+  /* get the lsb and put it into the carry */
+  emitpcode(POC_RRFW, popGet(AOP(left),size-1));
+  
+  offset = 0 ;
+  
+  while(size--) {
+    
+    if(same) {
+      emitpcode(POC_RRF, popGet(AOP(left),offset));
+    } else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offset));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+    }
+    
+    offset++;
+  }
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6086,44 +6085,44 @@ static void genRRC (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genRLC (iCode *ic)
 {    
-       operand *left , *result ;
-       int size, offset = 0;
-       int same;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* rotate right with carry */
-       left = IC_LEFT(ic);
-       result=IC_RESULT(ic);
-       aopOp (left,ic,FALSE);
-       aopOp (result,ic,FALSE);
-       
-       DEBUGpic14_AopType(__LINE__,left,NULL,result);
-       
-       same = pic14_sameRegs(AOP(result),AOP(left));
-       
-       /* move it to the result */
-       size = AOP_SIZE(result);    
-       
-       /* get the msb and put it into the carry */
-       emitpcode(POC_RLFW, popGet(AOP(left),size-1));
-       
-       offset = 0 ;
-       
-       while(size--) {
-               
-               if(same) {
-                       emitpcode(POC_RLF, popGet(AOP(left),offset));
-               } else {
-                       emitpcode(POC_RLFW, popGet(AOP(left),offset));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-               }
-               
-               offset++;
-       }
-       
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  operand *left , *result ;
+  int size, offset = 0;
+  int same;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* rotate right with carry */
+  left = IC_LEFT(ic);
+  result=IC_RESULT(ic);
+  aopOp (left,ic,FALSE);
+  aopOp (result,ic,FALSE);
+  
+  DEBUGpic14_AopType(__LINE__,left,NULL,result);
+  
+  same = pic14_sameRegs(AOP(result),AOP(left));
+  
+  /* move it to the result */
+  size = AOP_SIZE(result);    
+  
+  /* get the msb and put it into the carry */
+  emitpcode(POC_RLFW, popGet(AOP(left),size-1));
+  
+  offset = 0 ;
+  
+  while(size--) {
+    
+    if(same) {
+      emitpcode(POC_RLF, popGet(AOP(left),offset));
+    } else {
+      emitpcode(POC_RLFW, popGet(AOP(left),offset));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+    }
+    
+    offset++;
+  }
+  
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6131,28 +6130,28 @@ static void genRLC (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genGetHbit (iCode *ic)
 {
-       operand *left, *result;
-       left = IC_LEFT(ic);
-       result=IC_RESULT(ic);
-       aopOp (left,ic,FALSE);
-       aopOp (result,ic,FALSE);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* get the highest order byte into a */
-       MOVA(aopGet(AOP(left),AOP_SIZE(left) - 1,FALSE,FALSE));
-       if(AOP_TYPE(result) == AOP_CRY){
-               pic14_emitcode("rlc","a");
-               pic14_outBitC(result);
-       }
-       else{
-               pic14_emitcode("rl","a");
-               pic14_emitcode("anl","a,#0x01");
-               pic14_outAcc(result);
-       }
-       
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  operand *left, *result;
+  left = IC_LEFT(ic);
+  result=IC_RESULT(ic);
+  aopOp (left,ic,FALSE);
+  aopOp (result,ic,FALSE);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* get the highest order byte into a */
+  MOVA(aopGet(AOP(left),AOP_SIZE(left) - 1,FALSE,FALSE));
+  if(AOP_TYPE(result) == AOP_CRY){
+    pic14_emitcode("rlc","a");
+    pic14_outBitC(result);
+  }
+  else{
+    pic14_emitcode("rl","a");
+    pic14_emitcode("anl","a,#0x01");
+    pic14_outAcc(result);
+  }
+  
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6160,37 +6159,37 @@ static void genGetHbit (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void AccRol (int shCount)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       shCount &= 0x0007;              // shCount : 0..7
-       switch(shCount){
-       case 0 :
-               break;
-       case 1 :
-               pic14_emitcode("rl","a");
-               break;
-       case 2 :
-               pic14_emitcode("rl","a");
-               pic14_emitcode("rl","a");
-               break;
-       case 3 :
-               pic14_emitcode("swap","a");
-               pic14_emitcode("rr","a");
-               break;
-       case 4 :
-               pic14_emitcode("swap","a");
-               break;
-       case 5 :
-               pic14_emitcode("swap","a");
-               pic14_emitcode("rl","a");
-               break;
-       case 6 :
-               pic14_emitcode("rr","a");
-               pic14_emitcode("rr","a");
-               break;
-       case 7 :
-               pic14_emitcode("rr","a");
-               break;
-       }
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  shCount &= 0x0007;              // shCount : 0..7
+  switch(shCount){
+  case 0 :
+    break;
+  case 1 :
+    pic14_emitcode("rl","a");
+    break;
+  case 2 :
+    pic14_emitcode("rl","a");
+    pic14_emitcode("rl","a");
+    break;
+  case 3 :
+    pic14_emitcode("swap","a");
+    pic14_emitcode("rr","a");
+    break;
+  case 4 :
+    pic14_emitcode("swap","a");
+    break;
+  case 5 :
+    pic14_emitcode("swap","a");
+    pic14_emitcode("rl","a");
+    break;
+  case 6 :
+    pic14_emitcode("rr","a");
+    pic14_emitcode("rr","a");
+    break;
+  case 7 :
+    pic14_emitcode("rr","a");
+    break;
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -6198,21 +6197,21 @@ static void AccRol (int shCount)
 /*-----------------------------------------------------------------*/
 static void AccLsh (int shCount)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(shCount != 0){
-               if(shCount == 1)
-                       pic14_emitcode("add","a,acc");
-               else 
-                       if(shCount == 2) {
-                               pic14_emitcode("add","a,acc");
-                               pic14_emitcode("add","a,acc");
-                       } else {
-                               /* rotate left accumulator */
-                               AccRol(shCount);
-                               /* and kill the lower order bits */
-                               pic14_emitcode("anl","a,#0x%02x", SLMask[shCount]);
-                       }
-       }
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(shCount != 0){
+    if(shCount == 1)
+      pic14_emitcode("add","a,acc");
+    else 
+      if(shCount == 2) {
+        pic14_emitcode("add","a,acc");
+        pic14_emitcode("add","a,acc");
+      } else {
+        /* rotate left accumulator */
+        AccRol(shCount);
+        /* and kill the lower order bits */
+        pic14_emitcode("anl","a,#0x%02x", SLMask[shCount]);
+      }
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -6220,18 +6219,18 @@ static void AccLsh (int shCount)
 /*-----------------------------------------------------------------*/
 static void AccRsh (int shCount)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(shCount != 0){
-               if(shCount == 1){
-                       CLRC;
-                       pic14_emitcode("rrc","a");
-               } else {
-                       /* rotate right accumulator */
-                       AccRol(8 - shCount);
-                       /* and kill the higher order bits */
-                       pic14_emitcode("anl","a,#0x%02x", SRMask[shCount]);
-               }
-       }
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(shCount != 0){
+    if(shCount == 1){
+      CLRC;
+      pic14_emitcode("rrc","a");
+    } else {
+      /* rotate right accumulator */
+      AccRol(8 - shCount);
+      /* and kill the higher order bits */
+      pic14_emitcode("anl","a,#0x%02x", SRMask[shCount]);
+    }
+  }
 }
 
 #if 0
@@ -6240,604 +6239,604 @@ static void AccRsh (int shCount)
 /*-----------------------------------------------------------------*/
 static void AccSRsh (int shCount)
 {
-       symbol *tlbl ;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(shCount != 0){
-               if(shCount == 1){
-                       pic14_emitcode("mov","c,acc.7");
-                       pic14_emitcode("rrc","a");
-               } else if(shCount == 2){
-                       pic14_emitcode("mov","c,acc.7");
-                       pic14_emitcode("rrc","a");
-                       pic14_emitcode("mov","c,acc.7");
-                       pic14_emitcode("rrc","a");
-               } else {
-                       tlbl = newiTempLabel(NULL);
-                       /* rotate right accumulator */
-                       AccRol(8 - shCount);
-                       /* and kill the higher order bits */
-                       pic14_emitcode("anl","a,#0x%02x", SRMask[shCount]);
-                       pic14_emitcode("jnb","acc.%d,%05d_DS_",7-shCount,tlbl->key+100);
-                       pic14_emitcode("orl","a,#0x%02x",
-                               (unsigned char)~SRMask[shCount]);
-                       pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-               }
-       }
+  symbol *tlbl ;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(shCount != 0){
+    if(shCount == 1){
+      pic14_emitcode("mov","c,acc.7");
+      pic14_emitcode("rrc","a");
+    } else if(shCount == 2){
+      pic14_emitcode("mov","c,acc.7");
+      pic14_emitcode("rrc","a");
+      pic14_emitcode("mov","c,acc.7");
+      pic14_emitcode("rrc","a");
+    } else {
+      tlbl = newiTempLabel(NULL);
+      /* rotate right accumulator */
+      AccRol(8 - shCount);
+      /* and kill the higher order bits */
+      pic14_emitcode("anl","a,#0x%02x", SRMask[shCount]);
+      pic14_emitcode("jnb","acc.%d,%05d_DS_",7-shCount,tlbl->key+100);
+      pic14_emitcode("orl","a,#0x%02x",
+        (unsigned char)~SRMask[shCount]);
+      pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+    }
+  }
 }
 #endif
 /*-----------------------------------------------------------------*/
 /* shiftR1Left2Result - shift right one byte from left to result   */
 /*-----------------------------------------------------------------*/
 static void shiftR1Left2ResultSigned (operand *left, int offl,
-                                                                         operand *result, int offr,
-                                                                         int shCount)
-{
-       int same;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
-       
-       switch(shCount) {
-       case 1:
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               if(same) 
-                       emitpcode(POC_RRF, popGet(AOP(result),offr));
-               else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               
-               break;
-       case 2:
-               
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               if(same) 
-                       emitpcode(POC_RRF, popGet(AOP(result),offr));
-               else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               emitpcode(POC_RLFW, popGet(AOP(result),offr));
-               emitpcode(POC_RRF,  popGet(AOP(result),offr));
-               
-               break;
-               
-       case 3:
-               if(same)
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr));
-               else {
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               
-               emitpcode(POC_RLFW,  popGet(AOP(result),offr));
-               emitpcode(POC_RLFW,  popGet(AOP(result),offr));
-               emitpcode(POC_ANDLW, popGetLit(0x1f));
-               
-               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),3,0));
-               emitpcode(POC_IORLW, popGetLit(0xe0));
-               
-               emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               break;
-               
-       case 4:
-               emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW,  popGetLit(0x0f));
-               emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
-               emitpcode(POC_IORLW,  popGetLit(0xf0));
-               emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
-               break;
-       case 5:
-               if(same) {
-                       emitpcode(POC_SWAPF,  popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_SWAPFW,  popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
-               }
-               emitpcode(POC_RRFW,   popGet(AOP(result),offr));
-               emitpcode(POC_ANDLW,  popGetLit(0x07));
-               emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),3,0));
-               emitpcode(POC_IORLW,  popGetLit(0xf8));
-               emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
-               break;
-               
-       case 6:
-               if(same) {
-                       emitpcode(POC_MOVLW, popGetLit(0x00));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
-                       emitpcode(POC_MOVLW, popGetLit(0xfe));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),6,0));
-                       emitpcode(POC_IORLW, popGetLit(0x01));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_CLRF,  popGet(AOP(result),offr));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF,  popGet(AOP(result),offr));
-                       emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),6,0));
-                       emitpcode(POC_BCF,   newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),0,0));
-               }
-               break;
-               
-       case 7:
-               if(same) {
-                       emitpcode(POC_MOVLW, popGetLit(0x00));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),LSB,FALSE,FALSE),7,0));
-                       emitpcode(POC_MOVLW, popGetLit(0xff));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_CLRF,  popGet(AOP(result),offr));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF,  popGet(AOP(result),offr));
-               }
-               
-       default:
-               break;
-       }
+                    operand *result, int offr,
+                    int shCount)
+{
+  int same;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
+  
+  switch(shCount) {
+  case 1:
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    if(same) 
+      emitpcode(POC_RRF, popGet(AOP(result),offr));
+    else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    
+    break;
+  case 2:
+    
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    if(same) 
+      emitpcode(POC_RRF, popGet(AOP(result),offr));
+    else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    emitpcode(POC_RLFW, popGet(AOP(result),offr));
+    emitpcode(POC_RRF,  popGet(AOP(result),offr));
+    
+    break;
+    
+  case 3:
+    if(same)
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr));
+    else {
+      emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    
+    emitpcode(POC_RLFW,  popGet(AOP(result),offr));
+    emitpcode(POC_RLFW,  popGet(AOP(result),offr));
+    emitpcode(POC_ANDLW, popGetLit(0x1f));
+    
+    emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),3,0));
+    emitpcode(POC_IORLW, popGetLit(0xe0));
+    
+    emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    break;
+    
+  case 4:
+    emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW,  popGetLit(0x0f));
+    emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
+    emitpcode(POC_IORLW,  popGetLit(0xf0));
+    emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
+    break;
+  case 5:
+    if(same) {
+      emitpcode(POC_SWAPF,  popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_SWAPFW,  popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
+    }
+    emitpcode(POC_RRFW,   popGet(AOP(result),offr));
+    emitpcode(POC_ANDLW,  popGetLit(0x07));
+    emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),3,0));
+    emitpcode(POC_IORLW,  popGetLit(0xf8));
+    emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
+    break;
+    
+  case 6:
+    if(same) {
+      emitpcode(POC_MOVLW, popGetLit(0x00));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
+      emitpcode(POC_MOVLW, popGetLit(0xfe));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),6,0));
+      emitpcode(POC_IORLW, popGetLit(0x01));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_CLRF,  popGet(AOP(result),offr));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF,  popGet(AOP(result),offr));
+      emitpcode(POC_BTFSS, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),6,0));
+      emitpcode(POC_BCF,   newpCodeOpBit(aopGet(AOP(result),offr,FALSE,FALSE),0,0));
+    }
+    break;
+    
+  case 7:
+    if(same) {
+      emitpcode(POC_MOVLW, popGetLit(0x00));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),LSB,FALSE,FALSE),7,0));
+      emitpcode(POC_MOVLW, popGetLit(0xff));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_CLRF,  popGet(AOP(result),offr));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),offl,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF,  popGet(AOP(result),offr));
+    }
+    
+  default:
+    break;
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* shiftR1Left2Result - shift right one byte from left to result   */
 /*-----------------------------------------------------------------*/
 static void shiftR1Left2Result (operand *left, int offl,
-                                                               operand *result, int offr,
-                                                               int shCount, int sign)
-{
-       int same;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
-       
-       /* Copy the msb into the carry if signed. */
-       if(sign) {
-               shiftR1Left2ResultSigned(left,offl,result,offr,shCount);
-               return;
-       }
-       
-       
-       
-       switch(shCount) {
-       case 1:
-               emitCLRC;
-               if(same) 
-                       emitpcode(POC_RRF, popGet(AOP(result),offr));
-               else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               break;
-       case 2:
-               emitCLRC;
-               if(same) {
-                       emitpcode(POC_RRF, popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               emitCLRC;
-               emitpcode(POC_RRF, popGet(AOP(result),offr));
-               
-               break;
-       case 3:
-               if(same)
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr));
-               else {
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               
-               emitpcode(POC_RLFW,  popGet(AOP(result),offr));
-               emitpcode(POC_RLFW,  popGet(AOP(result),offr));
-               emitpcode(POC_ANDLW, popGetLit(0x1f));
-               emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               break;
-               
-       case 4:
-               emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0x0f));
-               emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               break;
-               
-       case 5:
-               emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0x0f));
-               emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               emitCLRC;
-               emitpcode(POC_RRF, popGet(AOP(result),offr));
-               
-               break;
-       case 6:
-               
-               emitpcode(POC_RLFW,  popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0x80));
-               emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               emitpcode(POC_RLF,   popGet(AOP(result),offr));
-               emitpcode(POC_RLF,   popGet(AOP(result),offr));
-               break;
-               
-       case 7:
-               
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               emitpcode(POC_CLRF, popGet(AOP(result),offr));
-               emitpcode(POC_RLF,  popGet(AOP(result),offr));
-               
-               break;
-               
-       default:
-               break;
-       }
+                operand *result, int offr,
+                int shCount, int sign)
+{
+  int same;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
+  
+  /* Copy the msb into the carry if signed. */
+  if(sign) {
+    shiftR1Left2ResultSigned(left,offl,result,offr,shCount);
+    return;
+  }
+  
+  
+  
+  switch(shCount) {
+  case 1:
+    emitCLRC;
+    if(same) 
+      emitpcode(POC_RRF, popGet(AOP(result),offr));
+    else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    break;
+  case 2:
+    emitCLRC;
+    if(same) {
+      emitpcode(POC_RRF, popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    emitCLRC;
+    emitpcode(POC_RRF, popGet(AOP(result),offr));
+    
+    break;
+  case 3:
+    if(same)
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr));
+    else {
+      emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    
+    emitpcode(POC_RLFW,  popGet(AOP(result),offr));
+    emitpcode(POC_RLFW,  popGet(AOP(result),offr));
+    emitpcode(POC_ANDLW, popGetLit(0x1f));
+    emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    break;
+    
+  case 4:
+    emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0x0f));
+    emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    break;
+    
+  case 5:
+    emitpcode(POC_SWAPFW, popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0x0f));
+    emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    emitCLRC;
+    emitpcode(POC_RRF, popGet(AOP(result),offr));
+    
+    break;
+  case 6:
+    
+    emitpcode(POC_RLFW,  popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0x80));
+    emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    emitpcode(POC_RLF,   popGet(AOP(result),offr));
+    emitpcode(POC_RLF,   popGet(AOP(result),offr));
+    break;
+    
+  case 7:
+    
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    emitpcode(POC_CLRF, popGet(AOP(result),offr));
+    emitpcode(POC_RLF,  popGet(AOP(result),offr));
+    
+    break;
+    
+  default:
+    break;
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* shiftL1Left2Result - shift left one byte from left to result    */
 /*-----------------------------------------------------------------*/
 static void shiftL1Left2Result (operand *left, int offl,
-                                                               operand *result, int offr, int shCount)
-{
-       int same;
-       
-       //    char *l;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       same = ((left == result) || (AOP(left) == AOP(result))) && (offl==offr);
-       DEBUGpic14_emitcode ("; ***","same =  %d",same);
-       //    l = aopGet(AOP(left),offl,FALSE,FALSE);
-       //    MOVA(l);
-       /* shift left accumulator */
-       //AccLsh(shCount); // don't comment out just yet...
-       //    aopPut(AOP(result),"a",offr);
-       
-       switch(shCount) {
-       case 1:
-               /* Shift left 1 bit position */
-               emitpcode(POC_MOVFW, popGet(AOP(left),offl));
-               if(same) {
-                       emitpcode(POC_ADDWF, popGet(AOP(left),offl));
-               } else {
-                       emitpcode(POC_ADDFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-               break;
-       case 2:
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW,popGetLit(0x7e));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-               break;
-       case 3:
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW,popGetLit(0x3e));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-               emitpcode(POC_RLF,  popGet(AOP(result),offr));
-               break;
-       case 4:
-               emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0xf0));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               break;
-       case 5:
-               emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0xf0));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-               break;
-       case 6:
-               emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
-               emitpcode(POC_ANDLW, popGetLit(0x30));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-               emitpcode(POC_RLF,  popGet(AOP(result),offr));
-               break;
-       case 7:
-               emitpcode(POC_RRFW, popGet(AOP(left),offl));
-               emitpcode(POC_CLRF, popGet(AOP(result),offr));
-               emitpcode(POC_RRF,  popGet(AOP(result),offr));
-               break;
-               
-       default:
-               DEBUGpic14_emitcode ("; ***","%s  %d, shift count is %d",__FUNCTION__,__LINE__,shCount);
-       }
-       
+                operand *result, int offr, int shCount)
+{
+  int same;
+  
+  //    char *l;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  same = ((left == result) || (AOP(left) == AOP(result))) && (offl==offr);
+  DEBUGpic14_emitcode ("; ***","same =  %d",same);
+  //    l = aopGet(AOP(left),offl,FALSE,FALSE);
+  //    MOVA(l);
+  /* shift left accumulator */
+  //AccLsh(shCount); // don't comment out just yet...
+  //    aopPut(AOP(result),"a",offr);
+  
+  switch(shCount) {
+  case 1:
+    /* Shift left 1 bit position */
+    emitpcode(POC_MOVFW, popGet(AOP(left),offl));
+    if(same) {
+      emitpcode(POC_ADDWF, popGet(AOP(left),offl));
+    } else {
+      emitpcode(POC_ADDFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+    break;
+  case 2:
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW,popGetLit(0x7e));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+    break;
+  case 3:
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW,popGetLit(0x3e));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+    emitpcode(POC_RLF,  popGet(AOP(result),offr));
+    break;
+  case 4:
+    emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0xf0));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    break;
+  case 5:
+    emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0xf0));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+    break;
+  case 6:
+    emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
+    emitpcode(POC_ANDLW, popGetLit(0x30));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+    emitpcode(POC_RLF,  popGet(AOP(result),offr));
+    break;
+  case 7:
+    emitpcode(POC_RRFW, popGet(AOP(left),offl));
+    emitpcode(POC_CLRF, popGet(AOP(result),offr));
+    emitpcode(POC_RRF,  popGet(AOP(result),offr));
+    break;
+    
+  default:
+    DEBUGpic14_emitcode ("; ***","%s  %d, shift count is %d",__FUNCTION__,__LINE__,shCount);
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* movLeft2Result - move byte from left to result                  */
 /*-----------------------------------------------------------------*/
 static void movLeft2Result (operand *left, int offl,
-                                                       operand *result, int offr)
-{
-       char *l;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(!pic14_sameRegs(AOP(left),AOP(result)) || (offl != offr)){
-               l = aopGet(AOP(left),offl,FALSE,FALSE);
-               
-               if (*l == '@' && (IS_AOP_PREG(result))) {
-                       pic14_emitcode("mov","a,%s",l);
-                       aopPut(AOP(result),"a",offr);
-               } else {
-                       emitpcode(POC_MOVFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-               }
-       }
+              operand *result, int offr)
+{
+  char *l;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(!pic14_sameRegs(AOP(left),AOP(result)) || (offl != offr)){
+    l = aopGet(AOP(left),offl,FALSE,FALSE);
+    
+    if (*l == '@' && (IS_AOP_PREG(result))) {
+      pic14_emitcode("mov","a,%s",l);
+      aopPut(AOP(result),"a",offr);
+    } else {
+      emitpcode(POC_MOVFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+    }
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* shiftL2Left2Result - shift left two bytes from left to result   */
 /*-----------------------------------------------------------------*/
 static void shiftL2Left2Result (operand *left, int offl,
-                                                               operand *result, int offr, int shCount)
-{
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(pic14_sameRegs(AOP(result), AOP(left))) {
-               switch(shCount) {
-               case 0:
-                       break;
-               case 1:
-               case 2:
-               case 3:
-                       
-                       emitpcode(POC_MOVFW,popGet(AOP(result),offr));
-                       emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
-                       
-                       while(--shCount) {
-                               emitCLRC;
-                               emitpcode(POC_RLF, popGet(AOP(result),offr));
-                               emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
-                       }
-                       
-                       break;
-               case 4:
-               case 5:
-                       emitpcode(POC_MOVLW, popGetLit(0x0f));
-                       emitpcode(POC_ANDWF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr));
-                       emitpcode(POC_ANDFW, popGet(AOP(result),offr));
-                       emitpcode(POC_XORWF, popGet(AOP(result),offr));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
-                       if(shCount >=5) {
-                               emitpcode(POC_RLF, popGet(AOP(result),offr));
-                               emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
-                       }
-                       break;
-               case 6:
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ANDLW,popGetLit(0xc0));
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr));
-                       emitpcode(POC_XORWF,popGet(AOP(result),offr));
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       break;
-               case 7:
-                       emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRFW, popGet(AOP(result),offr));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_CLRF, popGet(AOP(result),offr));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr));
-               }
-               
-       } else {
-               switch(shCount) {
-               case 0:
-                       break;
-               case 1:
-               case 2:
-               case 3:
-               /* note, use a mov/add for the shift since the mov has a
-                       chance of getting optimized out */
-                       emitpcode(POC_MOVFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr));
-                       emitpcode(POC_RLFW,  popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
-                       
-                       while(--shCount) {
-                               emitCLRC;
-                               emitpcode(POC_RLF, popGet(AOP(result),offr));
-                               emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
-                       }
-                       break;
-                       
-               case 4:
-               case 5:
-                       emitpcode(POC_SWAPFW,popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_ANDLW, popGetLit(0xF0));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-                       emitpcode(POC_ANDLW, popGetLit(0xF0));
-                       emitpcode(POC_XORWF, popGet(AOP(result),offr));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
-                       
-                       
-                       if(shCount == 5) {
-                               emitpcode(POC_RLF, popGet(AOP(result),offr));
-                               emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
-                       }
-                       break;
-               case 6:
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRFW, popGet(AOP(result),offl));
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
-                       
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ANDLW,popGetLit(0xc0));
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr));
-                       emitpcode(POC_XORWF,popGet(AOP(result),offr));
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       break;
-               case 7:
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_CLRF, popGet(AOP(result),offr));
-                       emitpcode(POC_RRF,  popGet(AOP(result),offr));
-               }
-       }
-       
+                operand *result, int offr, int shCount)
+{
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(pic14_sameRegs(AOP(result), AOP(left))) {
+    switch(shCount) {
+    case 0:
+      break;
+    case 1:
+    case 2:
+    case 3:
+      
+      emitpcode(POC_MOVFW,popGet(AOP(result),offr));
+      emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+      
+      while(--shCount) {
+        emitCLRC;
+        emitpcode(POC_RLF, popGet(AOP(result),offr));
+        emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
+      }
+      
+      break;
+    case 4:
+    case 5:
+      emitpcode(POC_MOVLW, popGetLit(0x0f));
+      emitpcode(POC_ANDWF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr));
+      emitpcode(POC_ANDFW, popGet(AOP(result),offr));
+      emitpcode(POC_XORWF, popGet(AOP(result),offr));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
+      if(shCount >=5) {
+        emitpcode(POC_RLF, popGet(AOP(result),offr));
+        emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
+      }
+      break;
+    case 6:
+      emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr));
+      emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ANDLW,popGetLit(0xc0));
+      emitpcode(POC_XORFW,popGet(AOP(result),offr));
+      emitpcode(POC_XORWF,popGet(AOP(result),offr));
+      emitpcode(POC_XORFW,popGet(AOP(result),offr));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      break;
+    case 7:
+      emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRFW, popGet(AOP(result),offr));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_CLRF, popGet(AOP(result),offr));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr));
+    }
+    
+  } else {
+    switch(shCount) {
+    case 0:
+      break;
+    case 1:
+    case 2:
+    case 3:
+    /* note, use a mov/add for the shift since the mov has a
+      chance of getting optimized out */
+      emitpcode(POC_MOVFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr));
+      emitpcode(POC_RLFW,  popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
+      
+      while(--shCount) {
+        emitCLRC;
+        emitpcode(POC_RLF, popGet(AOP(result),offr));
+        emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
+      }
+      break;
+      
+    case 4:
+    case 5:
+      emitpcode(POC_SWAPFW,popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_ANDLW, popGetLit(0xF0));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+      emitpcode(POC_ANDLW, popGetLit(0xF0));
+      emitpcode(POC_XORWF, popGet(AOP(result),offr));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
+      
+      
+      if(shCount == 5) {
+        emitpcode(POC_RLF, popGet(AOP(result),offr));
+        emitpcode(POC_RLF, popGet(AOP(result),offr+MSB16));
+      }
+      break;
+    case 6:
+      emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRFW, popGet(AOP(result),offl));
+      emitpcode(POC_MOVWF,  popGet(AOP(result),offr));
+      
+      emitpcode(POC_RRF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr));
+      emitpcode(POC_RRFW, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ANDLW,popGetLit(0xc0));
+      emitpcode(POC_XORFW,popGet(AOP(result),offr));
+      emitpcode(POC_XORWF,popGet(AOP(result),offr));
+      emitpcode(POC_XORFW,popGet(AOP(result),offr));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      break;
+    case 7:
+      emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_CLRF, popGet(AOP(result),offr));
+      emitpcode(POC_RRF,  popGet(AOP(result),offr));
+    }
+  }
+  
 }
 /*-----------------------------------------------------------------*/
 /* shiftR2Left2Result - shift right two bytes from left to result  */
 /*-----------------------------------------------------------------*/
 static void shiftR2Left2Result (operand *left, int offl,
-                                                               operand *result, int offr,
-                                                               int shCount, int sign)
-{
-       int same=0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       same = pic14_sameRegs(AOP(result), AOP(left));
-       
-       if(same && ((offl + MSB16) == offr)){
-               same=1;
-               /* don't crash result[offr] */
-               MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
-               pic14_emitcode("xch","a,%s", aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
-       }
-       /* else {
-       movLeft2Result(left,offl, result, offr);
-       MOVA(aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
-       }
-       */
-       /* a:x >> shCount (x = lsb(result))*/
-       /*
-       if(sign)
-       AccAXRshS( aopGet(AOP(result),offr,FALSE,FALSE) , shCount);
-       else {
-       AccAXRsh( aopGet(AOP(result),offr,FALSE,FALSE) , shCount);
-       */
-       switch(shCount) {
-       case 0:
-               break;
-       case 1:
-       case 2:
-       case 3:
-               if(sign)
-                       emitpcode(POC_RLFW,popGet(AOP(result),offr+MSB16));
-               else
-                       emitCLRC;
-               
-               if(same) {
-                       emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF,popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               }
-               
-               while(--shCount) {
-                       if(sign)
-                               emitpcode(POC_RLFW,popGet(AOP(result),offr+MSB16));
-                       else
-                               emitCLRC;
-                       emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF,popGet(AOP(result),offr));
-               }
-               break;
-       case 4:
-       case 5:
-               if(same) {
-                       
-                       emitpcode(POC_MOVLW, popGetLit(0xf0));
-                       emitpcode(POC_ANDWF, popGet(AOP(result),offr));
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr));
-                       
-                       emitpcode(POC_SWAPF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ANDFW, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
-                       emitpcode(POC_ANDLW, popGetLit(0x0f));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr));
-                       
-                       emitpcode(POC_SWAPFW,popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ANDLW, popGetLit(0xf0));
-                       emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr));
-               }
-               
-               if(shCount >=5) {
-                       emitpcode(POC_RRF, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RRF, popGet(AOP(result),offr));
-               }
-               
-               if(sign) {
-                       emitpcode(POC_MOVLW, popGetLit(0xf0 + (shCount-4)*8 ));
-                       emitpcode(POC_BTFSC, 
-                               newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),7-shCount,0));
-                       emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
-               }
-               
-               break;
-               
-       case 6:
-               if(same) {
-                       
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
-                       
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RLFW, popGet(AOP(result),offr));
-                       emitpcode(POC_ANDLW,popGetLit(0x03));
-                       if(sign) {
-                               emitpcode(POC_BTFSC, 
-                                       newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),1,0));
-                               emitpcode(POC_IORLW,popGetLit(0xfc));
-                       }
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_XORWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               } else {
-                       emitpcode(POC_RLFW, popGet(AOP(left),offl));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr));
-                       emitpcode(POC_RLFW, popGet(AOP(result),offr+MSB16));
-                       emitpcode(POC_ANDLW,popGetLit(0x03));
-                       if(sign) {
-                               emitpcode(POC_BTFSC, 
-                                       newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),0,0));
-                               emitpcode(POC_IORLW,popGetLit(0xfc));
-                       }
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
-                       //emitpcode(POC_RLF,  popGet(AOP(result),offr));
-                       
-                       
-               }
-               
-               break;
-       case 7:
-               emitpcode(POC_RLFW, popGet(AOP(left),offl));
-               emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16));
-               emitpcode(POC_MOVWF,popGet(AOP(result),offr));
-               emitpcode(POC_CLRF, popGet(AOP(result),offr+MSB16));
-               if(sign) {
-                       emitSKPNC;
-                       emitpcode(POC_DECF, popGet(AOP(result),offr+MSB16));
-               } else 
-                       emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+                operand *result, int offr,
+                int shCount, int sign)
+{
+  int same=0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  same = pic14_sameRegs(AOP(result), AOP(left));
+  
+  if(same && ((offl + MSB16) == offr)){
+    same=1;
+    /* don't crash result[offr] */
+    MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
+    pic14_emitcode("xch","a,%s", aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
+  }
+  /* else {
+  movLeft2Result(left,offl, result, offr);
+  MOVA(aopGet(AOP(left),offl+MSB16,FALSE,FALSE));
+  }
+  */
+  /* a:x >> shCount (x = lsb(result))*/
+  /*
+  if(sign)
+  AccAXRshS( aopGet(AOP(result),offr,FALSE,FALSE) , shCount);
+  else {
+  AccAXRsh( aopGet(AOP(result),offr,FALSE,FALSE) , shCount);
+  */
+  switch(shCount) {
+  case 0:
+    break;
+  case 1:
+  case 2:
+  case 3:
+    if(sign)
+      emitpcode(POC_RLFW,popGet(AOP(result),offr+MSB16));
+    else
+      emitCLRC;
+    
+    if(same) {
+      emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF,popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_RRFW, popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    }
+    
+    while(--shCount) {
+      if(sign)
+        emitpcode(POC_RLFW,popGet(AOP(result),offr+MSB16));
+      else
+        emitCLRC;
+      emitpcode(POC_RRF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF,popGet(AOP(result),offr));
+    }
+    break;
+  case 4:
+  case 5:
+    if(same) {
+      
+      emitpcode(POC_MOVLW, popGetLit(0xf0));
+      emitpcode(POC_ANDWF, popGet(AOP(result),offr));
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr));
+      
+      emitpcode(POC_SWAPF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ANDFW, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_SWAPFW,popGet(AOP(left),offl));
+      emitpcode(POC_ANDLW, popGetLit(0x0f));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr));
+      
+      emitpcode(POC_SWAPFW,popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ANDLW, popGetLit(0xf0));
+      emitpcode(POC_XORWF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr));
+    }
+    
+    if(shCount >=5) {
+      emitpcode(POC_RRF, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RRF, popGet(AOP(result),offr));
+    }
+    
+    if(sign) {
+      emitpcode(POC_MOVLW, popGetLit(0xf0 + (shCount-4)*8 ));
+      emitpcode(POC_BTFSC, 
+        newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),7-shCount,0));
+      emitpcode(POC_ADDWF, popGet(AOP(result),offr+MSB16));
+    }
+    
+    break;
+    
+  case 6:
+    if(same) {
+      
+      emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+      
+      emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RLFW, popGet(AOP(result),offr));
+      emitpcode(POC_ANDLW,popGetLit(0x03));
+      if(sign) {
+        emitpcode(POC_BTFSC, 
+          newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),1,0));
+        emitpcode(POC_IORLW,popGetLit(0xfc));
+      }
+      emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_XORWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_XORFW,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    } else {
+      emitpcode(POC_RLFW, popGet(AOP(left),offl));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      emitpcode(POC_RLFW, popGet(AOP(result),offr+MSB16));
+      emitpcode(POC_ANDLW,popGetLit(0x03));
+      if(sign) {
+        emitpcode(POC_BTFSC, 
+          newpCodeOpBit(aopGet(AOP(result),offr+MSB16,FALSE,FALSE),0,0));
+        emitpcode(POC_IORLW,popGetLit(0xfc));
+      }
+      emitpcode(POC_MOVWF,popGet(AOP(result),offr+MSB16));
+      //emitpcode(POC_RLF,  popGet(AOP(result),offr));
+      
+      
+    }
+    
+    break;
+  case 7:
+    emitpcode(POC_RLFW, popGet(AOP(left),offl));
+    emitpcode(POC_RLFW, popGet(AOP(left),offl+MSB16));
+    emitpcode(POC_MOVWF,popGet(AOP(result),offr));
+    emitpcode(POC_CLRF, popGet(AOP(result),offr+MSB16));
+    if(sign) {
+      emitSKPNC;
+      emitpcode(POC_DECF, popGet(AOP(result),offr+MSB16));
+    } else 
+      emitpcode(POC_RLF,  popGet(AOP(result),offr+MSB16));
   }
 }
 
@@ -6846,32 +6845,32 @@ static void shiftR2Left2Result (operand *left, int offl,
 /* shiftLLeftOrResult - shift left one byte from left, or to result*/
 /*-----------------------------------------------------------------*/
 static void shiftLLeftOrResult (operand *left, int offl,
-                                                               operand *result, int offr, int shCount)
+                operand *result, int offr, int shCount)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
-       /* shift left accumulator */
-       AccLsh(shCount);
-       /* or with result */
-       pic14_emitcode("orl","a,%s", aopGet(AOP(result),offr,FALSE,FALSE));
-       /* back to result */
-       aopPut(AOP(result),"a",offr);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
+  /* shift left accumulator */
+  AccLsh(shCount);
+  /* or with result */
+  pic14_emitcode("orl","a,%s", aopGet(AOP(result),offr,FALSE,FALSE));
+  /* back to result */
+  aopPut(AOP(result),"a",offr);
 }
 
 /*-----------------------------------------------------------------*/
 /* shiftRLeftOrResult - shift right one byte from left,or to result*/
 /*-----------------------------------------------------------------*/
 static void shiftRLeftOrResult (operand *left, int offl,
-                                                               operand *result, int offr, int shCount)
+                operand *result, int offr, int shCount)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
-       /* shift right accumulator */
-       AccRsh(shCount);
-       /* or with result */
-       pic14_emitcode("orl","a,%s", aopGet(AOP(result),offr,FALSE,FALSE));
-       /* back to result */
-       aopPut(AOP(result),"a",offr);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  MOVA(aopGet(AOP(left),offl,FALSE,FALSE));
+  /* shift right accumulator */
+  AccRsh(shCount);
+  /* or with result */
+  pic14_emitcode("orl","a,%s", aopGet(AOP(result),offr,FALSE,FALSE));
+  /* back to result */
+  aopPut(AOP(result),"a",offr);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6879,8 +6878,8 @@ static void shiftRLeftOrResult (operand *left, int offl,
 /*-----------------------------------------------------------------*/
 static void genlshOne (operand *result, operand *left, int shCount)
 {       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       shiftL1Left2Result(left, LSB, result, LSB, shCount);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  shiftL1Left2Result(left, LSB, result, LSB, shCount);
 }
 
 /*-----------------------------------------------------------------*/
@@ -6888,31 +6887,31 @@ static void genlshOne (operand *result, operand *left, int shCount)
 /*-----------------------------------------------------------------*/
 static void genlshTwo (operand *result,operand *left, int shCount)
 {
-       int size;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       size = pic14_getDataSize(result);
-       
-       /* if shCount >= 8 */
-       if (shCount >= 8) {
-               shCount -= 8 ;
-               
-               if (size > 1){
-                       if (shCount)
-                               shiftL1Left2Result(left, LSB, result, MSB16, shCount);
-                       else 
-                               movLeft2Result(left, LSB, result, MSB16);
-               }
-               emitpcode(POC_CLRF,popGet(AOP(result),LSB));
-       }
-       
-       /*  1 <= shCount <= 7 */
-       else {  
-               if(size == 1)
-                       shiftL1Left2Result(left, LSB, result, LSB, shCount); 
-               else 
-                       shiftL2Left2Result(left, LSB, result, LSB, shCount);
-       }
+  int size;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  size = pic14_getDataSize(result);
+  
+  /* if shCount >= 8 */
+  if (shCount >= 8) {
+    shCount -= 8 ;
+    
+    if (size > 1){
+      if (shCount)
+        shiftL1Left2Result(left, LSB, result, MSB16, shCount);
+      else 
+        movLeft2Result(left, LSB, result, MSB16);
+    }
+    emitpcode(POC_CLRF,popGet(AOP(result),LSB));
+  }
+  
+  /*  1 <= shCount <= 7 */
+  else {  
+    if(size == 1)
+      shiftL1Left2Result(left, LSB, result, LSB, shCount); 
+    else 
+      shiftL2Left2Result(left, LSB, result, LSB, shCount);
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -6921,60 +6920,60 @@ static void genlshTwo (operand *result,operand *left, int shCount)
 /*-----------------------------------------------------------------*/
 static void shiftLLong (operand *left, operand *result, int offr )
 {
-       char *l;
-       int size = AOP_SIZE(result);
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(size >= LSB+offr){
-               l = aopGet(AOP(left),LSB,FALSE,FALSE);
-               MOVA(l);
-               pic14_emitcode("add","a,acc");
-               if (pic14_sameRegs(AOP(left),AOP(result)) && 
-                       size >= MSB16+offr && offr != LSB )
-                       pic14_emitcode("xch","a,%s",
-                       aopGet(AOP(left),LSB+offr,FALSE,FALSE));
-               else        
-                       aopPut(AOP(result),"a",LSB+offr);
-       }
-       
-       if(size >= MSB16+offr){
-               if (!(pic14_sameRegs(AOP(result),AOP(left)) && size >= MSB16+offr && offr != LSB) ) {
-                       l = aopGet(AOP(left),MSB16,FALSE,FALSE);
-                       MOVA(l);
-               }
-               pic14_emitcode("rlc","a");
-               if (pic14_sameRegs(AOP(left),AOP(result)) && 
-                       size >= MSB24+offr && offr != LSB)
-                       pic14_emitcode("xch","a,%s",
-                       aopGet(AOP(left),MSB16+offr,FALSE,FALSE));
-               else        
-                       aopPut(AOP(result),"a",MSB16+offr);
-       }
-       
-       if(size >= MSB24+offr){
-               if (!(pic14_sameRegs(AOP(left),AOP(left)) && size >= MSB24+offr && offr != LSB)) {
-                       l = aopGet(AOP(left),MSB24,FALSE,FALSE);
-                       MOVA(l);
-               }
-               pic14_emitcode("rlc","a");
-               if (pic14_sameRegs(AOP(left),AOP(result)) && 
-                       size >= MSB32+offr && offr != LSB )
-                       pic14_emitcode("xch","a,%s",
-                       aopGet(AOP(left),MSB24+offr,FALSE,FALSE));
-               else        
-                       aopPut(AOP(result),"a",MSB24+offr);
-       }
-       
-       if(size > MSB32+offr){
-               if (!(pic14_sameRegs(AOP(result),AOP(left)) && size >= MSB32+offr && offr != LSB)) {
-                       l = aopGet(AOP(left),MSB32,FALSE,FALSE);
-                       MOVA(l);        
-               }
-               pic14_emitcode("rlc","a");
-               aopPut(AOP(result),"a",MSB32+offr);
-       }
-       if(offr != LSB)
-               aopPut(AOP(result),zero,LSB);       
+  char *l;
+  int size = AOP_SIZE(result);
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(size >= LSB+offr){
+    l = aopGet(AOP(left),LSB,FALSE,FALSE);
+    MOVA(l);
+    pic14_emitcode("add","a,acc");
+    if (pic14_sameRegs(AOP(left),AOP(result)) && 
+      size >= MSB16+offr && offr != LSB )
+      pic14_emitcode("xch","a,%s",
+      aopGet(AOP(left),LSB+offr,FALSE,FALSE));
+    else      
+      aopPut(AOP(result),"a",LSB+offr);
+  }
+  
+  if(size >= MSB16+offr){
+    if (!(pic14_sameRegs(AOP(result),AOP(left)) && size >= MSB16+offr && offr != LSB) ) {
+      l = aopGet(AOP(left),MSB16,FALSE,FALSE);
+      MOVA(l);
+    }
+    pic14_emitcode("rlc","a");
+    if (pic14_sameRegs(AOP(left),AOP(result)) && 
+      size >= MSB24+offr && offr != LSB)
+      pic14_emitcode("xch","a,%s",
+      aopGet(AOP(left),MSB16+offr,FALSE,FALSE));
+    else      
+      aopPut(AOP(result),"a",MSB16+offr);
+  }
+  
+  if(size >= MSB24+offr){
+    if (!(pic14_sameRegs(AOP(left),AOP(left)) && size >= MSB24+offr && offr != LSB)) {
+      l = aopGet(AOP(left),MSB24,FALSE,FALSE);
+      MOVA(l);
+    }
+    pic14_emitcode("rlc","a");
+    if (pic14_sameRegs(AOP(left),AOP(result)) && 
+      size >= MSB32+offr && offr != LSB )
+      pic14_emitcode("xch","a,%s",
+      aopGet(AOP(left),MSB24+offr,FALSE,FALSE));
+    else      
+      aopPut(AOP(result),"a",MSB24+offr);
+  }
+  
+  if(size > MSB32+offr){
+    if (!(pic14_sameRegs(AOP(result),AOP(left)) && size >= MSB32+offr && offr != LSB)) {
+      l = aopGet(AOP(left),MSB32,FALSE,FALSE);
+      MOVA(l);  
+    }
+    pic14_emitcode("rlc","a");
+    aopPut(AOP(result),"a",MSB32+offr);
+  }
+  if(offr != LSB)
+    aopPut(AOP(result),zero,LSB);       
 }
 
 /*-----------------------------------------------------------------*/
@@ -6982,136 +6981,136 @@ static void shiftLLong (operand *left, operand *result, int offr )
 /*-----------------------------------------------------------------*/
 static void genlshFour (operand *result, operand *left, int shCount)
 {
-       int size;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       size = AOP_SIZE(result);
-       
-       /* if shifting more that 3 bytes */
-       if (shCount >= 24 ) {
-               shCount -= 24;
-               if (shCount)
-               /* lowest order of left goes to the highest
-               order of the destination */
-               shiftL1Left2Result(left, LSB, result, MSB32, shCount);
-               else
-                       movLeft2Result(left, LSB, result, MSB32);
-               aopPut(AOP(result),zero,LSB);
-               aopPut(AOP(result),zero,MSB16);
-               aopPut(AOP(result),zero,MSB32);
-               return;
-       }
-       
-       /* more than two bytes */
-       else if ( shCount >= 16 ) {
-               /* lower order two bytes goes to higher order two bytes */
-               shCount -= 16;
-               /* if some more remaining */
-               if (shCount)
-                       shiftL2Left2Result(left, LSB, result, MSB24, shCount);
-               else {
-                       movLeft2Result(left, MSB16, result, MSB32);
-                       movLeft2Result(left, LSB, result, MSB24);
-               }
-               aopPut(AOP(result),zero,MSB16);
-               aopPut(AOP(result),zero,LSB);
-               return;
-       }    
-       
-       /* if more than 1 byte */
-       else if ( shCount >= 8 ) {
-               /* lower order three bytes goes to higher order  three bytes */
-               shCount -= 8;
-               if(size == 2){
-                       if(shCount)
-                               shiftL1Left2Result(left, LSB, result, MSB16, shCount);
-                       else
-                               movLeft2Result(left, LSB, result, MSB16);
-               }
-               else{   /* size = 4 */
-                       if(shCount == 0){
-                               movLeft2Result(left, MSB24, result, MSB32);
-                               movLeft2Result(left, MSB16, result, MSB24);
-                               movLeft2Result(left, LSB, result, MSB16);
-                               aopPut(AOP(result),zero,LSB);
-                       }
-                       else if(shCount == 1)
-                               shiftLLong(left, result, MSB16);
-                       else{
-                               shiftL2Left2Result(left, MSB16, result, MSB24, shCount);
-                               shiftL1Left2Result(left, LSB, result, MSB16, shCount);
-                               shiftRLeftOrResult(left, LSB, result, MSB24, 8 - shCount);
-                               aopPut(AOP(result),zero,LSB);
-                       }
-               }
-       }
-       
-       /* 1 <= shCount <= 7 */
-       else if(shCount <= 2){
-               shiftLLong(left, result, LSB);
-               if(shCount == 2)
-                       shiftLLong(result, result, LSB);
-       }
-       /* 3 <= shCount <= 7, optimize */
-       else{
-               shiftL2Left2Result(left, MSB24, result, MSB24, shCount);
-               shiftRLeftOrResult(left, MSB16, result, MSB24, 8 - shCount);
-               shiftL2Left2Result(left, LSB, result, LSB, shCount);
-       }
+  int size;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  size = AOP_SIZE(result);
+  
+  /* if shifting more that 3 bytes */
+  if (shCount >= 24 ) {
+    shCount -= 24;
+    if (shCount)
+    /* lowest order of left goes to the highest
+    order of the destination */
+    shiftL1Left2Result(left, LSB, result, MSB32, shCount);
+    else
+      movLeft2Result(left, LSB, result, MSB32);
+    aopPut(AOP(result),zero,LSB);
+    aopPut(AOP(result),zero,MSB16);
+    aopPut(AOP(result),zero,MSB32);
+    return;
+  }
+  
+  /* more than two bytes */
+  else if ( shCount >= 16 ) {
+    /* lower order two bytes goes to higher order two bytes */
+    shCount -= 16;
+    /* if some more remaining */
+    if (shCount)
+      shiftL2Left2Result(left, LSB, result, MSB24, shCount);
+    else {
+      movLeft2Result(left, MSB16, result, MSB32);
+      movLeft2Result(left, LSB, result, MSB24);
+    }
+    aopPut(AOP(result),zero,MSB16);
+    aopPut(AOP(result),zero,LSB);
+    return;
+  }    
+  
+  /* if more than 1 byte */
+  else if ( shCount >= 8 ) {
+    /* lower order three bytes goes to higher order  three bytes */
+    shCount -= 8;
+    if(size == 2){
+      if(shCount)
+        shiftL1Left2Result(left, LSB, result, MSB16, shCount);
+      else
+        movLeft2Result(left, LSB, result, MSB16);
+    }
+    else{   /* size = 4 */
+      if(shCount == 0){
+        movLeft2Result(left, MSB24, result, MSB32);
+        movLeft2Result(left, MSB16, result, MSB24);
+        movLeft2Result(left, LSB, result, MSB16);
+        aopPut(AOP(result),zero,LSB);
+      }
+      else if(shCount == 1)
+        shiftLLong(left, result, MSB16);
+      else{
+        shiftL2Left2Result(left, MSB16, result, MSB24, shCount);
+        shiftL1Left2Result(left, LSB, result, MSB16, shCount);
+        shiftRLeftOrResult(left, LSB, result, MSB24, 8 - shCount);
+        aopPut(AOP(result),zero,LSB);
+      }
+    }
+  }
+  
+  /* 1 <= shCount <= 7 */
+  else if(shCount <= 2){
+    shiftLLong(left, result, LSB);
+    if(shCount == 2)
+      shiftLLong(result, result, LSB);
+  }
+  /* 3 <= shCount <= 7, optimize */
+  else{
+    shiftL2Left2Result(left, MSB24, result, MSB24, shCount);
+    shiftRLeftOrResult(left, MSB16, result, MSB24, 8 - shCount);
+    shiftL2Left2Result(left, LSB, result, LSB, shCount);
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* genLeftShiftLiteral - left shifting by known count              */
 /*-----------------------------------------------------------------*/
 static void genLeftShiftLiteral (operand *left,
-                                                                operand *right,
-                                                                operand *result,
-                                                                iCode *ic)
+                 operand *right,
+                 operand *result,
+                 iCode *ic)
 {    
-       int shCount = (int) floatFromVal (AOP(right)->aopu.aop_lit);
-       int size;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       freeAsmop(right,NULL,ic,TRUE);
-       
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       size = getSize(operandType(result));
-       
+  int shCount = (int) floatFromVal (AOP(right)->aopu.aop_lit);
+  int size;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  freeAsmop(right,NULL,ic,TRUE);
+  
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  size = getSize(operandType(result));
+  
 #if VIEW_SIZE
-       pic14_emitcode("; shift left ","result %d, left %d",size,
-               AOP_SIZE(left));
+  pic14_emitcode("; shift left ","result %d, left %d",size,
+    AOP_SIZE(left));
 #endif
-       
-       /* I suppose that the left size >= result size */
-       if(shCount == 0){
-               while(size--){
-                       movLeft2Result(left, size, result, size);
-               }
-       }
-       
-       else if(shCount >= (size * 8))
-               while(size--)
-                       aopPut(AOP(result),zero,size);
-               else{
-                       switch (size) {
-                       case 1:
-                               genlshOne (result,left,shCount);
-                               break;
-                               
-                       case 2:
-                       case 3:
-                               genlshTwo (result,left,shCount);
-                               break;
-                               
-                       case 4:
-                               genlshFour (result,left,shCount);
-                               break;
-                       }
-               }
-               freeAsmop(left,NULL,ic,TRUE);
-               freeAsmop(result,NULL,ic,TRUE);
+  
+  /* I suppose that the left size >= result size */
+  if(shCount == 0){
+    while(size--){
+      movLeft2Result(left, size, result, size);
+    }
+  }
+  
+  else if(shCount >= (size * 8))
+    while(size--)
+      aopPut(AOP(result),zero,size);
+    else{
+      switch (size) {
+      case 1:
+        genlshOne (result,left,shCount);
+        break;
+        
+      case 2:
+      case 3:
+        genlshTwo (result,left,shCount);
+        break;
+        
+      case 4:
+        genlshFour (result,left,shCount);
+        break;
+      }
+    }
+    freeAsmop(left,NULL,ic,TRUE);
+    freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*
@@ -7121,233 +7120,233 @@ static void genLeftShiftLiteral (operand *left,
 *-----------------------------------------------------------------*/
 static void genMultiAsm( PIC_OPCODE poc, operand *reg, int size, int endian)
 {
-       
-       int offset = 0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(!reg)
-               return;
-       
-       if(!endian) {
-               endian = 1;
-       } else {
-               endian = -1;
-               offset = size-1;
-       }
-       
-       while(size--) {
-               emitpcode(poc,    popGet(AOP(reg),offset));
-               offset += endian;
-       }
-       
+  
+  int offset = 0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(!reg)
+    return;
+  
+  if(!endian) {
+    endian = 1;
+  } else {
+    endian = -1;
+    offset = size-1;
+  }
+  
+  while(size--) {
+    emitpcode(poc,    popGet(AOP(reg),offset));
+    offset += endian;
+  }
+  
 }
 /*-----------------------------------------------------------------*/
 /* genLeftShift - generates code for left shifting                 */
 /*-----------------------------------------------------------------*/
 static void genLeftShift (iCode *ic)
 {
-       operand *left,*right, *result;
-       int size, offset;
-       char *l;
-       symbol *tlbl , *tlbl1;
-       pCodeOp *pctemp;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       right = IC_RIGHT(ic);
-       left  = IC_LEFT(ic);
-       result = IC_RESULT(ic);
-       
-       aopOp(right,ic,FALSE);
-       
-       /* if the shift count is known then do it 
-       as efficiently as possible */
-       if (AOP_TYPE(right) == AOP_LIT) {
-               genLeftShiftLiteral (left,right,result,ic);
-               return ;
-       }
-       
-       /* shift count is unknown then we have to form 
-       a loop get the loop count in B : Note: we take
-       only the lower order byte since shifting
-       more that 32 bits make no sense anyway, ( the
-       largest size of an object can be only 32 bits ) */  
-       
-       
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       /* now move the left to the result if they are not the
-       same */
-       if (!pic14_sameRegs(AOP(left),AOP(result)) && 
-               AOP_SIZE(result) > 1) {
-               
-               size = AOP_SIZE(result);
-               offset=0;
-               while (size--) {
-                       l = aopGet(AOP(left),offset,FALSE,TRUE);
-                       if (*l == '@' && (IS_AOP_PREG(result))) {
-                               
-                               pic14_emitcode("mov","a,%s",l);
-                               aopPut(AOP(result),"a",offset);
-                       } else {
-                               emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
-                               emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
-                               //aopPut(AOP(result),l,offset);
-                       }
-                       offset++;
-               }
-       }
-       
-       size = AOP_SIZE(result);
-       
-       /* if it is only one byte then */
-       if (size == 1) {
-               if(optimized_for_speed) {
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xf0));
-                       emitpcode(POC_BTFSS,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),2,0));
-                       emitpcode(POC_MOVFW,  popGet(AOP(left),0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),0));
-                       emitpcode(POC_BTFSS,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),0,0));
-                       emitpcode(POC_ADDWF,  popGet(AOP(result),0));
-                       emitpcode(POC_RLFW,   popGet(AOP(result),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xfe));
-                       emitpcode(POC_ADDFW,  popGet(AOP(result),0));
-                       emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),1,0));
-                       emitpcode(POC_ADDWF,  popGet(AOP(result),0));
-               } else {
-                       
-                       tlbl = newiTempLabel(NULL);
-                       if (!pic14_sameRegs(AOP(left),AOP(result))) {
-                               emitpcode(POC_MOVFW,  popGet(AOP(left),0));
-                               emitpcode(POC_MOVWF,  popGet(AOP(result),0));
-                       }
-                       
-                       emitpcode(POC_COMFW,  popGet(AOP(right),0));
-                       emitpcode(POC_RRF,    popGet(AOP(result),0));
-                       emitpLabel(tlbl->key);
-                       emitpcode(POC_RLF,    popGet(AOP(result),0));
-                       emitpcode(POC_ADDLW,  popGetLit(1));
-                       emitSKPC;
-                       emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-               }
-               goto release ;
-       }
-       
-       if (pic14_sameRegs(AOP(left),AOP(result))) {
-               
-               tlbl = newiTempLabel(NULL);
-               emitpcode(POC_COMFW,  popGet(AOP(right),0));
-               genMultiAsm(POC_RRF, result, size,1);
-               emitpLabel(tlbl->key);
-               genMultiAsm(POC_RLF, result, size,0);
-               emitpcode(POC_ADDLW,  popGetLit(1));
-               emitSKPC;
-               emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-               goto release;
-       }
-       
-       //tlbl = newiTempLabel(NULL);
-       //offset = 0 ;   
-       //tlbl1 = newiTempLabel(NULL);
-       
-       //reAdjustPreg(AOP(result));    
-       
-       //pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100); 
-       //pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
-       //l = aopGet(AOP(result),offset,FALSE,FALSE);
-       //MOVA(l);
-       //pic14_emitcode("add","a,acc");         
-       //aopPut(AOP(result),"a",offset++);
-       //while (--size) {
-       //  l = aopGet(AOP(result),offset,FALSE,FALSE);
-       //  MOVA(l);
-       //  pic14_emitcode("rlc","a");         
-       //  aopPut(AOP(result),"a",offset++);
-       //}
-       //reAdjustPreg(AOP(result));
-       
-       //pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
-       //pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
-       
-       
-       tlbl = newiTempLabel(NULL);
-       tlbl1= newiTempLabel(NULL);
-       
-       size = AOP_SIZE(result);
-       offset = 1;
-       
-       pctemp = popGetTempReg();  /* grab a temporary working register. */
-       
-       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-       
-       /* offset should be 0, 1 or 3 */
-       emitpcode(POC_ANDLW, popGetLit(0x07 + ((offset&3) << 3)));
-       emitSKPNZ;
-       emitpcode(POC_GOTO,  popGetLabel(tlbl1->key));
-       
-       emitpcode(POC_MOVWF, pctemp);
-       
-       
-       emitpLabel(tlbl->key);
-       
-       emitCLRC;
-       emitpcode(POC_RLF,  popGet(AOP(result),0));
-       while(--size)
-               emitpcode(POC_RLF,   popGet(AOP(result),offset++));
-       
-       emitpcode(POC_DECFSZ,  pctemp);
-       emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-       emitpLabel(tlbl1->key);
-       
-       popReleaseTempReg(pctemp);
-       
-       
+  operand *left,*right, *result;
+  int size, offset;
+  char *l;
+  symbol *tlbl , *tlbl1;
+  pCodeOp *pctemp;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  right = IC_RIGHT(ic);
+  left  = IC_LEFT(ic);
+  result = IC_RESULT(ic);
+  
+  aopOp(right,ic,FALSE);
+  
+  /* if the shift count is known then do it 
+  as efficiently as possible */
+  if (AOP_TYPE(right) == AOP_LIT) {
+    genLeftShiftLiteral (left,right,result,ic);
+    return ;
+  }
+  
+  /* shift count is unknown then we have to form 
+  a loop get the loop count in B : Note: we take
+  only the lower order byte since shifting
+  more that 32 bits make no sense anyway, ( the
+  largest size of an object can be only 32 bits ) */  
+  
+  
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  /* now move the left to the result if they are not the
+  same */
+  if (!pic14_sameRegs(AOP(left),AOP(result)) && 
+    AOP_SIZE(result) > 1) {
+    
+    size = AOP_SIZE(result);
+    offset=0;
+    while (size--) {
+      l = aopGet(AOP(left),offset,FALSE,TRUE);
+      if (*l == '@' && (IS_AOP_PREG(result))) {
+        
+        pic14_emitcode("mov","a,%s",l);
+        aopPut(AOP(result),"a",offset);
+      } else {
+        emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
+        emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
+        //aopPut(AOP(result),l,offset);
+      }
+      offset++;
+    }
+  }
+  
+  size = AOP_SIZE(result);
+  
+  /* if it is only one byte then */
+  if (size == 1) {
+    if(optimized_for_speed) {
+      emitpcode(POC_SWAPFW, popGet(AOP(left),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xf0));
+      emitpcode(POC_BTFSS,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),2,0));
+      emitpcode(POC_MOVFW,  popGet(AOP(left),0));
+      emitpcode(POC_MOVWF,  popGet(AOP(result),0));
+      emitpcode(POC_BTFSS,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),0,0));
+      emitpcode(POC_ADDWF,  popGet(AOP(result),0));
+      emitpcode(POC_RLFW,   popGet(AOP(result),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xfe));
+      emitpcode(POC_ADDFW,  popGet(AOP(result),0));
+      emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),1,0));
+      emitpcode(POC_ADDWF,  popGet(AOP(result),0));
+    } else {
+      
+      tlbl = newiTempLabel(NULL);
+      if (!pic14_sameRegs(AOP(left),AOP(result))) {
+        emitpcode(POC_MOVFW,  popGet(AOP(left),0));
+        emitpcode(POC_MOVWF,  popGet(AOP(result),0));
+      }
+      
+      emitpcode(POC_COMFW,  popGet(AOP(right),0));
+      emitpcode(POC_RRF,    popGet(AOP(result),0));
+      emitpLabel(tlbl->key);
+      emitpcode(POC_RLF,    popGet(AOP(result),0));
+      emitpcode(POC_ADDLW,  popGetLit(1));
+      emitSKPC;
+      emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+    }
+    goto release ;
+  }
+  
+  if (pic14_sameRegs(AOP(left),AOP(result))) {
+    
+    tlbl = newiTempLabel(NULL);
+    emitpcode(POC_COMFW,  popGet(AOP(right),0));
+    genMultiAsm(POC_RRF, result, size,1);
+    emitpLabel(tlbl->key);
+    genMultiAsm(POC_RLF, result, size,0);
+    emitpcode(POC_ADDLW,  popGetLit(1));
+    emitSKPC;
+    emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+    goto release;
+  }
+  
+  //tlbl = newiTempLabel(NULL);
+  //offset = 0 ;   
+  //tlbl1 = newiTempLabel(NULL);
+  
+  //reAdjustPreg(AOP(result));    
+  
+  //pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100); 
+  //pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
+  //l = aopGet(AOP(result),offset,FALSE,FALSE);
+  //MOVA(l);
+  //pic14_emitcode("add","a,acc");         
+  //aopPut(AOP(result),"a",offset++);
+  //while (--size) {
+  //  l = aopGet(AOP(result),offset,FALSE,FALSE);
+  //  MOVA(l);
+  //  pic14_emitcode("rlc","a");         
+  //  aopPut(AOP(result),"a",offset++);
+  //}
+  //reAdjustPreg(AOP(result));
+  
+  //pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
+  //pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
+  
+  
+  tlbl = newiTempLabel(NULL);
+  tlbl1= newiTempLabel(NULL);
+  
+  size = AOP_SIZE(result);
+  offset = 1;
+  
+  pctemp = popGetTempReg();  /* grab a temporary working register. */
+  
+  emitpcode(POC_MOVFW, popGet(AOP(right),0));
+  
+  /* offset should be 0, 1 or 3 */
+  emitpcode(POC_ANDLW, popGetLit(0x07 + ((offset&3) << 3)));
+  emitSKPNZ;
+  emitpcode(POC_GOTO,  popGetLabel(tlbl1->key));
+  
+  emitpcode(POC_MOVWF, pctemp);
+  
+  
+  emitpLabel(tlbl->key);
+  
+  emitCLRC;
+  emitpcode(POC_RLF,  popGet(AOP(result),0));
+  while(--size)
+    emitpcode(POC_RLF,   popGet(AOP(result),offset++));
+  
+  emitpcode(POC_DECFSZ,  pctemp);
+  emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+  emitpLabel(tlbl1->key);
+  
+  popReleaseTempReg(pctemp);
+  
+  
 release:
-       freeAsmop (right,NULL,ic,TRUE);
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop (right,NULL,ic,TRUE);
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
 /* genrshOne - right shift a one byte quantity by known count      */
 /*-----------------------------------------------------------------*/
 static void genrshOne (operand *result, operand *left,
-                                          int shCount, int sign)
+             int shCount, int sign)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       shiftR1Left2Result(left, LSB, result, LSB, shCount, sign);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  shiftR1Left2Result(left, LSB, result, LSB, shCount, sign);
 }
 
 /*-----------------------------------------------------------------*/
 /* genrshTwo - right shift two bytes by known amount != 0          */
 /*-----------------------------------------------------------------*/
 static void genrshTwo (operand *result,operand *left,
-                                          int shCount, int sign)
-{
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if shCount >= 8 */
-       if (shCount >= 8) {
-               shCount -= 8 ;
-               if (shCount)
-                       shiftR1Left2Result(left, MSB16, result, LSB,
-                       shCount, sign);
-               else
-                       movLeft2Result(left, MSB16, result, LSB);
-               
-               emitpcode(POC_CLRF,popGet(AOP(result),MSB16));
-               
-               if(sign) {
-                       emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(left),LSB,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF, popGet(AOP(result),MSB16));
-               }
-       }
-       
-       /*  1 <= shCount <= 7 */
-       else
-               shiftR2Left2Result(left, LSB, result, LSB, shCount, sign); 
+             int shCount, int sign)
+{
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if shCount >= 8 */
+  if (shCount >= 8) {
+    shCount -= 8 ;
+    if (shCount)
+      shiftR1Left2Result(left, MSB16, result, LSB,
+      shCount, sign);
+    else
+      movLeft2Result(left, MSB16, result, LSB);
+    
+    emitpcode(POC_CLRF,popGet(AOP(result),MSB16));
+    
+    if(sign) {
+      emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(left),LSB,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF, popGet(AOP(result),MSB16));
+    }
+  }
+  
+  /*  1 <= shCount <= 7 */
+  else
+    shiftR2Left2Result(left, LSB, result, LSB, shCount, sign); 
 }
 
 /*-----------------------------------------------------------------*/
@@ -7355,172 +7354,172 @@ static void genrshTwo (operand *result,operand *left,
 /* offl = LSB or MSB16                                             */
 /*-----------------------------------------------------------------*/
 static void shiftRLong (operand *left, int offl,
-                                               operand *result, int sign)
-{
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if(!sign)
-               pic14_emitcode("clr","c");
-       MOVA(aopGet(AOP(left),MSB32,FALSE,FALSE));
-       if(sign)
-               pic14_emitcode("mov","c,acc.7");
-       pic14_emitcode("rrc","a");
-       aopPut(AOP(result),"a",MSB32-offl);
-       if(offl == MSB16)
-               /* add sign of "a" */
-               addSign(result, MSB32, sign);
-       
-       MOVA(aopGet(AOP(left),MSB24,FALSE,FALSE));
-       pic14_emitcode("rrc","a");
-       aopPut(AOP(result),"a",MSB24-offl);
-       
-       MOVA(aopGet(AOP(left),MSB16,FALSE,FALSE));
-       pic14_emitcode("rrc","a");
-       aopPut(AOP(result),"a",MSB16-offl);
-       
-       if(offl == LSB){
-               MOVA(aopGet(AOP(left),LSB,FALSE,FALSE));
-               pic14_emitcode("rrc","a");
-               aopPut(AOP(result),"a",LSB);
-       }
+            operand *result, int sign)
+{
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if(!sign)
+    pic14_emitcode("clr","c");
+  MOVA(aopGet(AOP(left),MSB32,FALSE,FALSE));
+  if(sign)
+    pic14_emitcode("mov","c,acc.7");
+  pic14_emitcode("rrc","a");
+  aopPut(AOP(result),"a",MSB32-offl);
+  if(offl == MSB16)
+    /* add sign of "a" */
+    addSign(result, MSB32, sign);
+  
+  MOVA(aopGet(AOP(left),MSB24,FALSE,FALSE));
+  pic14_emitcode("rrc","a");
+  aopPut(AOP(result),"a",MSB24-offl);
+  
+  MOVA(aopGet(AOP(left),MSB16,FALSE,FALSE));
+  pic14_emitcode("rrc","a");
+  aopPut(AOP(result),"a",MSB16-offl);
+  
+  if(offl == LSB){
+    MOVA(aopGet(AOP(left),LSB,FALSE,FALSE));
+    pic14_emitcode("rrc","a");
+    aopPut(AOP(result),"a",LSB);
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* genrshFour - shift four byte by a known amount != 0             */
 /*-----------------------------------------------------------------*/
 static void genrshFour (operand *result, operand *left,
-                                               int shCount, int sign)
-{
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if shifting more that 3 bytes */
-       if(shCount >= 24 ) {
-               shCount -= 24;
-               if(shCount)
-                       shiftR1Left2Result(left, MSB32, result, LSB, shCount, sign);
-               else
-                       movLeft2Result(left, MSB32, result, LSB);
-               
-               addSign(result, MSB16, sign);
-       }
-       else if(shCount >= 16){
-               shCount -= 16;
-               if(shCount)
-                       shiftR2Left2Result(left, MSB24, result, LSB, shCount, sign);
-               else{
-                       movLeft2Result(left, MSB24, result, LSB);
-                       movLeft2Result(left, MSB32, result, MSB16);
-               }
-               addSign(result, MSB24, sign);
-       }
-       else if(shCount >= 8){
-               shCount -= 8;
-               if(shCount == 1)
-                       shiftRLong(left, MSB16, result, sign);
-               else if(shCount == 0){
-                       movLeft2Result(left, MSB16, result, LSB);
-                       movLeft2Result(left, MSB24, result, MSB16);
-                       movLeft2Result(left, MSB32, result, MSB24);
-                       addSign(result, MSB32, sign);
-               }
-               else{
-                       shiftR2Left2Result(left, MSB16, result, LSB, shCount, 0);
-                       shiftLLeftOrResult(left, MSB32, result, MSB16, 8 - shCount);
-                       /* the last shift is signed */
-                       shiftR1Left2Result(left, MSB32, result, MSB24, shCount, sign);
-                       addSign(result, MSB32, sign);
-               }
-       }
-       else{   /* 1 <= shCount <= 7 */
-               if(shCount <= 2){
-                       shiftRLong(left, LSB, result, sign);
-                       if(shCount == 2)
-                               shiftRLong(result, LSB, result, sign);
-               }
-               else{
-                       shiftR2Left2Result(left, LSB, result, LSB, shCount, 0);
-                       shiftLLeftOrResult(left, MSB24, result, MSB16, 8 - shCount);
-                       shiftR2Left2Result(left, MSB24, result, MSB24, shCount, sign);
-               }
-       }
+            int shCount, int sign)
+{
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if shifting more that 3 bytes */
+  if(shCount >= 24 ) {
+    shCount -= 24;
+    if(shCount)
+      shiftR1Left2Result(left, MSB32, result, LSB, shCount, sign);
+    else
+      movLeft2Result(left, MSB32, result, LSB);
+    
+    addSign(result, MSB16, sign);
+  }
+  else if(shCount >= 16){
+    shCount -= 16;
+    if(shCount)
+      shiftR2Left2Result(left, MSB24, result, LSB, shCount, sign);
+    else{
+      movLeft2Result(left, MSB24, result, LSB);
+      movLeft2Result(left, MSB32, result, MSB16);
+    }
+    addSign(result, MSB24, sign);
+  }
+  else if(shCount >= 8){
+    shCount -= 8;
+    if(shCount == 1)
+      shiftRLong(left, MSB16, result, sign);
+    else if(shCount == 0){
+      movLeft2Result(left, MSB16, result, LSB);
+      movLeft2Result(left, MSB24, result, MSB16);
+      movLeft2Result(left, MSB32, result, MSB24);
+      addSign(result, MSB32, sign);
+    }
+    else{
+      shiftR2Left2Result(left, MSB16, result, LSB, shCount, 0);
+      shiftLLeftOrResult(left, MSB32, result, MSB16, 8 - shCount);
+      /* the last shift is signed */
+      shiftR1Left2Result(left, MSB32, result, MSB24, shCount, sign);
+      addSign(result, MSB32, sign);
+    }
+  }
+  else{   /* 1 <= shCount <= 7 */
+    if(shCount <= 2){
+      shiftRLong(left, LSB, result, sign);
+      if(shCount == 2)
+        shiftRLong(result, LSB, result, sign);
+    }
+    else{
+      shiftR2Left2Result(left, LSB, result, LSB, shCount, 0);
+      shiftLLeftOrResult(left, MSB24, result, MSB16, 8 - shCount);
+      shiftR2Left2Result(left, MSB24, result, MSB24, shCount, sign);
+    }
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /* genRightShiftLiteral - right shifting by known count            */
 /*-----------------------------------------------------------------*/
 static void genRightShiftLiteral (operand *left,
-                                                                 operand *right,
-                                                                 operand *result,
-                                                                 iCode *ic,
-                                                                 int sign)
+                  operand *right,
+                  operand *result,
+                  iCode *ic,
+                  int sign)
 {    
-       int shCount = (int) floatFromVal (AOP(right)->aopu.aop_lit);
-       int lsize,res_size;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       freeAsmop(right,NULL,ic,TRUE);
-       
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
+  int shCount = (int) floatFromVal (AOP(right)->aopu.aop_lit);
+  int lsize,res_size;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  freeAsmop(right,NULL,ic,TRUE);
+  
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
 #if VIEW_SIZE
-       pic14_emitcode("; shift right ","result %d, left %d",AOP_SIZE(result),
-               AOP_SIZE(left));
+  pic14_emitcode("; shift right ","result %d, left %d",AOP_SIZE(result),
+    AOP_SIZE(left));
 #endif
-       
-       lsize = pic14_getDataSize(left);
-       res_size = pic14_getDataSize(result);
-       /* test the LEFT size !!! */
-       
-       /* I suppose that the left size >= result size */
-       if(shCount == 0){
-               while(res_size--)
-                       movLeft2Result(left, lsize, result, res_size);
-       }
-       
-       else if(shCount >= (lsize * 8)){
-               
-               if(res_size == 1) {
-                       emitpcode(POC_CLRF, popGet(AOP(result),LSB));
-                       if(sign) {
-                               emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(left),lsize-1,FALSE,FALSE),7,0));
-                               emitpcode(POC_DECF, popGet(AOP(result),LSB));
-                       }
-               } else {
-                       
-                       if(sign) {
-                               emitpcode(POC_MOVLW, popGetLit(0));
-                               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),lsize-1,FALSE,FALSE),7,0));
-                               emitpcode(POC_MOVLW, popGetLit(0xff));
-                               while(res_size--)
-                                       emitpcode(POC_MOVWF, popGet(AOP(result),res_size));
-                               
-                       } else {
-                               
-                               while(res_size--)
-                                       emitpcode(POC_CLRF, popGet(AOP(result),res_size));
-                       }
-               }
-       } else {
-               
-               switch (res_size) {
-               case 1:
-                       genrshOne (result,left,shCount,sign);
-                       break;
-                       
-               case 2:
-                       genrshTwo (result,left,shCount,sign);
-                       break;
-                       
-               case 4:
-                       genrshFour (result,left,shCount,sign);
-                       break;
-               default :
-                       break;
-               }
-               
-       }
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  
+  lsize = pic14_getDataSize(left);
+  res_size = pic14_getDataSize(result);
+  /* test the LEFT size !!! */
+  
+  /* I suppose that the left size >= result size */
+  if(shCount == 0){
+    while(res_size--)
+      movLeft2Result(left, lsize, result, res_size);
+  }
+  
+  else if(shCount >= (lsize * 8)){
+    
+    if(res_size == 1) {
+      emitpcode(POC_CLRF, popGet(AOP(result),LSB));
+      if(sign) {
+        emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(left),lsize-1,FALSE,FALSE),7,0));
+        emitpcode(POC_DECF, popGet(AOP(result),LSB));
+      }
+    } else {
+      
+      if(sign) {
+        emitpcode(POC_MOVLW, popGetLit(0));
+        emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),lsize-1,FALSE,FALSE),7,0));
+        emitpcode(POC_MOVLW, popGetLit(0xff));
+        while(res_size--)
+          emitpcode(POC_MOVWF, popGet(AOP(result),res_size));
+        
+      } else {
+        
+        while(res_size--)
+          emitpcode(POC_CLRF, popGet(AOP(result),res_size));
+      }
+    }
+  } else {
+    
+    switch (res_size) {
+    case 1:
+      genrshOne (result,left,shCount,sign);
+      break;
+      
+    case 2:
+      genrshTwo (result,left,shCount,sign);
+      break;
+      
+    case 4:
+      genrshFour (result,left,shCount,sign);
+      break;
+    default :
+      break;
+    }
+    
+  }
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -7528,140 +7527,140 @@ static void genRightShiftLiteral (operand *left,
 /*-----------------------------------------------------------------*/
 static void genSignedRightShift (iCode *ic)
 {
-       operand *right, *left, *result;
-       int size, offset;
-       //  char *l;
-       symbol *tlbl, *tlbl1 ;
-       pCodeOp *pctemp;
-       
-       //same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
-       
-       /* we do it the hard way put the shift count in b
-       and loop thru preserving the sign */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       right = IC_RIGHT(ic);
-       left  = IC_LEFT(ic);
-       result = IC_RESULT(ic);
-       
-       aopOp(right,ic,FALSE);  
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       
-       if ( AOP_TYPE(right) == AOP_LIT) {
-               genRightShiftLiteral (left,right,result,ic,1);
-               return ;
-       }
-       /* shift count is unknown then we have to form 
-       a loop get the loop count in B : Note: we take
-       only the lower order byte since shifting
-       more that 32 bits make no sense anyway, ( the
-       largest size of an object can be only 32 bits ) */  
-       
-       //pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
-       //pic14_emitcode("inc","b");
-       //freeAsmop (right,NULL,ic,TRUE);
-       //aopOp(left,ic,FALSE);
-       //aopOp(result,ic,FALSE);
-       
-       /* now move the left to the result if they are not the
-       same */
-       if (!pic14_sameRegs(AOP(left),AOP(result)) && 
-               AOP_SIZE(result) > 1) {
-               
-               size = AOP_SIZE(result);
-               offset=0;
-               while (size--) { 
-               /*
-               l = aopGet(AOP(left),offset,FALSE,TRUE);
-               if (*l == '@' && IS_AOP_PREG(result)) {
-               
-                 pic14_emitcode("mov","a,%s",l);
-                 aopPut(AOP(result),"a",offset);
-                 } else
-                 aopPut(AOP(result),l,offset);
-                       */
-                       emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
-                       
-                       offset++;
-               }
-       }
-       
-       /* mov the highest order bit to OVR */    
-       tlbl = newiTempLabel(NULL);
-       tlbl1= newiTempLabel(NULL);
-       
-       size = AOP_SIZE(result);
-       offset = size - 1;
-       
-       pctemp = popGetTempReg();  /* grab a temporary working register. */
-       
-       emitpcode(POC_MOVFW, popGet(AOP(right),0));
-       
-       /* offset should be 0, 1 or 3 */
-       emitpcode(POC_ANDLW, popGetLit(0x07 + ((offset&3) << 3)));
-       emitSKPNZ;
-       emitpcode(POC_GOTO,  popGetLabel(tlbl1->key));
-       
-       emitpcode(POC_MOVWF, pctemp);
-       
-       
-       emitpLabel(tlbl->key);
-       
-       emitpcode(POC_RLFW,  popGet(AOP(result),offset));
-       emitpcode(POC_RRF,   popGet(AOP(result),offset));
-       
-       while(--size) {
-               emitpcode(POC_RRF,   popGet(AOP(result),--offset));
-       }
-       
-       emitpcode(POC_DECFSZ,  pctemp);
-       emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-       emitpLabel(tlbl1->key);
-       
-       popReleaseTempReg(pctemp);
+  operand *right, *left, *result;
+  int size, offset;
+  //  char *l;
+  symbol *tlbl, *tlbl1 ;
+  pCodeOp *pctemp;
+  
+  //same = ((left == result) || (AOP(left) == AOP(result))) && (offl == offr);
+  
+  /* we do it the hard way put the shift count in b
+  and loop thru preserving the sign */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  right = IC_RIGHT(ic);
+  left  = IC_LEFT(ic);
+  result = IC_RESULT(ic);
+  
+  aopOp(right,ic,FALSE);  
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  
+  if ( AOP_TYPE(right) == AOP_LIT) {
+    genRightShiftLiteral (left,right,result,ic,1);
+    return ;
+  }
+  /* shift count is unknown then we have to form 
+  a loop get the loop count in B : Note: we take
+  only the lower order byte since shifting
+  more that 32 bits make no sense anyway, ( the
+  largest size of an object can be only 32 bits ) */  
+  
+  //pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
+  //pic14_emitcode("inc","b");
+  //freeAsmop (right,NULL,ic,TRUE);
+  //aopOp(left,ic,FALSE);
+  //aopOp(result,ic,FALSE);
+  
+  /* now move the left to the result if they are not the
+  same */
+  if (!pic14_sameRegs(AOP(left),AOP(result)) && 
+    AOP_SIZE(result) > 1) {
+    
+    size = AOP_SIZE(result);
+    offset=0;
+    while (size--) { 
+    /*
+    l = aopGet(AOP(left),offset,FALSE,TRUE);
+    if (*l == '@' && IS_AOP_PREG(result)) {
+    
+      pic14_emitcode("mov","a,%s",l);
+      aopPut(AOP(result),"a",offset);
+      } else
+      aopPut(AOP(result),l,offset);
+      */
+      emitpcode(POC_MOVFW,  popGet(AOP(left),offset));
+      emitpcode(POC_MOVWF,  popGet(AOP(result),offset));
+      
+      offset++;
+    }
+  }
+  
+  /* mov the highest order bit to OVR */    
+  tlbl = newiTempLabel(NULL);
+  tlbl1= newiTempLabel(NULL);
+  
+  size = AOP_SIZE(result);
+  offset = size - 1;
+  
+  pctemp = popGetTempReg();  /* grab a temporary working register. */
+  
+  emitpcode(POC_MOVFW, popGet(AOP(right),0));
+  
+  /* offset should be 0, 1 or 3 */
+  emitpcode(POC_ANDLW, popGetLit(0x07 + ((offset&3) << 3)));
+  emitSKPNZ;
+  emitpcode(POC_GOTO,  popGetLabel(tlbl1->key));
+  
+  emitpcode(POC_MOVWF, pctemp);
+  
+  
+  emitpLabel(tlbl->key);
+  
+  emitpcode(POC_RLFW,  popGet(AOP(result),offset));
+  emitpcode(POC_RRF,   popGet(AOP(result),offset));
+  
+  while(--size) {
+    emitpcode(POC_RRF,   popGet(AOP(result),--offset));
+  }
+  
+  emitpcode(POC_DECFSZ,  pctemp);
+  emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+  emitpLabel(tlbl1->key);
+  
+  popReleaseTempReg(pctemp);
 #if 0
-       size = AOP_SIZE(result);
-       offset = size - 1;
-       pic14_emitcode("mov","a,%s",aopGet(AOP(left),offset,FALSE,FALSE));
-       pic14_emitcode("rlc","a");
-       pic14_emitcode("mov","ov,c");
-       /* if it is only one byte then */
-       if (size == 1) {
-               l = aopGet(AOP(left),0,FALSE,FALSE);
-               MOVA(l);
-               pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
-               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-               pic14_emitcode("mov","c,ov");
-               pic14_emitcode("rrc","a");
-               pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
-               pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
-               aopPut(AOP(result),"a",0);
-               goto release ;
-       }
-       
-       reAdjustPreg(AOP(result));
-       pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
-       pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
-       pic14_emitcode("mov","c,ov");
-       while (size--) {
-               l = aopGet(AOP(result),offset,FALSE,FALSE);
-               MOVA(l);
-               pic14_emitcode("rrc","a");         
-               aopPut(AOP(result),"a",offset--);
-       }
-       reAdjustPreg(AOP(result));
-       pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
-       pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
-       
-release:
-#endif
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       freeAsmop(right,NULL,ic,TRUE);
+  size = AOP_SIZE(result);
+  offset = size - 1;
+  pic14_emitcode("mov","a,%s",aopGet(AOP(left),offset,FALSE,FALSE));
+  pic14_emitcode("rlc","a");
+  pic14_emitcode("mov","ov,c");
+  /* if it is only one byte then */
+  if (size == 1) {
+    l = aopGet(AOP(left),0,FALSE,FALSE);
+    MOVA(l);
+    pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
+    pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+    pic14_emitcode("mov","c,ov");
+    pic14_emitcode("rrc","a");
+    pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
+    pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
+    aopPut(AOP(result),"a",0);
+    goto release ;
+  }
+  
+  reAdjustPreg(AOP(result));
+  pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
+  pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
+  pic14_emitcode("mov","c,ov");
+  while (size--) {
+    l = aopGet(AOP(result),offset,FALSE,FALSE);
+    MOVA(l);
+    pic14_emitcode("rrc","a");         
+    aopPut(AOP(result),"a",offset--);
+  }
+  reAdjustPreg(AOP(result));
+  pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
+  pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
+  
+release:
+#endif
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(right,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -7669,116 +7668,116 @@ release:
 /*-----------------------------------------------------------------*/
 static void genRightShift (iCode *ic)
 {
-       operand *right, *left, *result;
-       sym_link *retype ;
-       int size, offset;
-       char *l;
-       symbol *tlbl, *tlbl1 ;
-       
-       /* if signed then we do it the hard way preserve the
-       sign bit moving it inwards */
-       retype = getSpec(operandType(IC_RESULT(ic)));
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (!SPEC_USIGN(retype)) {
-               genSignedRightShift (ic);
-               return ;
-       }
-       
-       /* signed & unsigned types are treated the same : i.e. the
-       signed is NOT propagated inwards : quoting from the
-       ANSI - standard : "for E1 >> E2, is equivalent to division
-       by 2**E2 if unsigned or if it has a non-negative value,
-       otherwise the result is implementation defined ", MY definition
-       is that the sign does not get propagated */
-       
-       right = IC_RIGHT(ic);
-       left  = IC_LEFT(ic);
-       result = IC_RESULT(ic);
-       
-       aopOp(right,ic,FALSE);
-       
-       /* if the shift count is known then do it 
-       as efficiently as possible */
-       if (AOP_TYPE(right) == AOP_LIT) {
-               genRightShiftLiteral (left,right,result,ic, 0);
-               return ;
-       }
-       
-       /* shift count is unknown then we have to form 
-       a loop get the loop count in B : Note: we take
-       only the lower order byte since shifting
-       more that 32 bits make no sense anyway, ( the
-       largest size of an object can be only 32 bits ) */  
-       
-       pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
-       pic14_emitcode("inc","b");
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       /* now move the left to the result if they are not the
-       same */
-       if (!pic14_sameRegs(AOP(left),AOP(result)) && 
-               AOP_SIZE(result) > 1) {
-               
-               size = AOP_SIZE(result);
-               offset=0;
-               while (size--) {
-                       l = aopGet(AOP(left),offset,FALSE,TRUE);
-                       if (*l == '@' && IS_AOP_PREG(result)) {
-                               
-                               pic14_emitcode("mov","a,%s",l);
-                               aopPut(AOP(result),"a",offset);
-                       } else
-                               aopPut(AOP(result),l,offset);
-                       offset++;
-               }
-       }
-       
-       tlbl = newiTempLabel(NULL);
-       tlbl1= newiTempLabel(NULL);
-       size = AOP_SIZE(result);
-       offset = size - 1;
-       
-       /* if it is only one byte then */
-       if (size == 1) {
-               
-               tlbl = newiTempLabel(NULL);
-               if (!pic14_sameRegs(AOP(left),AOP(result))) {
-                       emitpcode(POC_MOVFW,  popGet(AOP(left),0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(result),0));
-               }
-               
-               emitpcode(POC_COMFW,  popGet(AOP(right),0));
-               emitpcode(POC_RLF,    popGet(AOP(result),0));
-               emitpLabel(tlbl->key);
-               emitpcode(POC_RRF,    popGet(AOP(result),0));
-               emitpcode(POC_ADDLW,  popGetLit(1));
-               emitSKPC;
-               emitpcode(POC_GOTO,popGetLabel(tlbl->key));
-               
-               goto release ;
-       }
-       
-       reAdjustPreg(AOP(result));
-       pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
-       pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
-       CLRC;
-       while (size--) {
-               l = aopGet(AOP(result),offset,FALSE,FALSE);
-               MOVA(l);
-               pic14_emitcode("rrc","a");         
-               aopPut(AOP(result),"a",offset--);
-       }
-       reAdjustPreg(AOP(result));
-       
-       pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
-       pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
-       
+  operand *right, *left, *result;
+  sym_link *retype ;
+  int size, offset;
+  char *l;
+  symbol *tlbl, *tlbl1 ;
+  
+  /* if signed then we do it the hard way preserve the
+  sign bit moving it inwards */
+  retype = getSpec(operandType(IC_RESULT(ic)));
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (!SPEC_USIGN(retype)) {
+    genSignedRightShift (ic);
+    return ;
+  }
+  
+  /* signed & unsigned types are treated the same : i.e. the
+  signed is NOT propagated inwards : quoting from the
+  ANSI - standard : "for E1 >> E2, is equivalent to division
+  by 2**E2 if unsigned or if it has a non-negative value,
+  otherwise the result is implementation defined ", MY definition
+  is that the sign does not get propagated */
+  
+  right = IC_RIGHT(ic);
+  left  = IC_LEFT(ic);
+  result = IC_RESULT(ic);
+  
+  aopOp(right,ic,FALSE);
+  
+  /* if the shift count is known then do it 
+  as efficiently as possible */
+  if (AOP_TYPE(right) == AOP_LIT) {
+    genRightShiftLiteral (left,right,result,ic, 0);
+    return ;
+  }
+  
+  /* shift count is unknown then we have to form 
+  a loop get the loop count in B : Note: we take
+  only the lower order byte since shifting
+  more that 32 bits make no sense anyway, ( the
+  largest size of an object can be only 32 bits ) */  
+  
+  pic14_emitcode("mov","b,%s",aopGet(AOP(right),0,FALSE,FALSE));
+  pic14_emitcode("inc","b");
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  /* now move the left to the result if they are not the
+  same */
+  if (!pic14_sameRegs(AOP(left),AOP(result)) && 
+    AOP_SIZE(result) > 1) {
+    
+    size = AOP_SIZE(result);
+    offset=0;
+    while (size--) {
+      l = aopGet(AOP(left),offset,FALSE,TRUE);
+      if (*l == '@' && IS_AOP_PREG(result)) {
+        
+        pic14_emitcode("mov","a,%s",l);
+        aopPut(AOP(result),"a",offset);
+      } else
+        aopPut(AOP(result),l,offset);
+      offset++;
+    }
+  }
+  
+  tlbl = newiTempLabel(NULL);
+  tlbl1= newiTempLabel(NULL);
+  size = AOP_SIZE(result);
+  offset = size - 1;
+  
+  /* if it is only one byte then */
+  if (size == 1) {
+    
+    tlbl = newiTempLabel(NULL);
+    if (!pic14_sameRegs(AOP(left),AOP(result))) {
+      emitpcode(POC_MOVFW,  popGet(AOP(left),0));
+      emitpcode(POC_MOVWF,  popGet(AOP(result),0));
+    }
+    
+    emitpcode(POC_COMFW,  popGet(AOP(right),0));
+    emitpcode(POC_RLF,    popGet(AOP(result),0));
+    emitpLabel(tlbl->key);
+    emitpcode(POC_RRF,    popGet(AOP(result),0));
+    emitpcode(POC_ADDLW,  popGetLit(1));
+    emitSKPC;
+    emitpcode(POC_GOTO,popGetLabel(tlbl->key));
+    
+    goto release ;
+  }
+  
+  reAdjustPreg(AOP(result));
+  pic14_emitcode("sjmp","%05d_DS_",tlbl1->key+100);
+  pic14_emitcode("","%05d_DS_:",tlbl->key+100);    
+  CLRC;
+  while (size--) {
+    l = aopGet(AOP(result),offset,FALSE,FALSE);
+    MOVA(l);
+    pic14_emitcode("rrc","a");         
+    aopPut(AOP(result),"a",offset--);
+  }
+  reAdjustPreg(AOP(result));
+  
+  pic14_emitcode("","%05d_DS_:",tlbl1->key+100);
+  pic14_emitcode("djnz","b,%05d_DS_",tlbl->key+100);
+  
 release:
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop (right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop (right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -7786,105 +7785,105 @@ release:
 /*-----------------------------------------------------------------*/
 static void genUnpackBits (operand *result, char *rname, int ptype)
 {    
-       int shCnt ;
-       int rlen = 0 ;
-       sym_link *etype;
-       int offset = 0 ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       etype = getSpec(operandType(result));
-       
-       /* read the first byte  */
-       switch (ptype) {
-               
-       case POINTER:
-       case IPOINTER:
-               pic14_emitcode("mov","a,@%s",rname);
-               break;
-               
-       case PPOINTER:
-               pic14_emitcode("movx","a,@%s",rname);
-               break;
-               
-       case FPOINTER:
-               pic14_emitcode("movx","a,@dptr");
-               break;
-               
-       case CPOINTER:
-               pic14_emitcode("clr","a");
-               pic14_emitcode("movc","a","@a+dptr");
-               break;
-               
-       case GPOINTER:
-               pic14_emitcode("lcall","__gptrget");
-               break;
-       }
-       
-       /* if we have bitdisplacement then it fits   */
-       /* into this byte completely or if length is */
-       /* less than a byte                          */
-       if ((shCnt = SPEC_BSTR(etype)) || 
-               (SPEC_BLEN(etype) <= 8))  {
-               
-               /* shift right acc */
-               AccRsh(shCnt);
-               
-               pic14_emitcode("anl","a,#0x%02x",
-                       ((unsigned char) -1)>>(8 - SPEC_BLEN(etype)));
-               aopPut(AOP(result),"a",offset);
-               return ;
-       }
-       
-       /* bit field did not fit in a byte  */
-       rlen = SPEC_BLEN(etype) - 8;
-       aopPut(AOP(result),"a",offset++);
-       
-       while (1)  {
-               
-               switch (ptype) {
-               case POINTER:
-               case IPOINTER:
-                       pic14_emitcode("inc","%s",rname);
-                       pic14_emitcode("mov","a,@%s",rname);
-                       break;
-                       
-               case PPOINTER:
-                       pic14_emitcode("inc","%s",rname);
-                       pic14_emitcode("movx","a,@%s",rname);
-                       break;
-                       
-               case FPOINTER:
-                       pic14_emitcode("inc","dptr");
-                       pic14_emitcode("movx","a,@dptr");
-                       break;
-                       
-               case CPOINTER:
-                       pic14_emitcode("clr","a");
-                       pic14_emitcode("inc","dptr");
-                       pic14_emitcode("movc","a","@a+dptr");
-                       break;
-                       
-               case GPOINTER:
-                       pic14_emitcode("inc","dptr");
-                       pic14_emitcode("lcall","__gptrget");
-                       break;
-               }
-               
-               rlen -= 8;            
-               /* if we are done */
-               if ( rlen <= 0 )
-                       break ;
-               
-               aopPut(AOP(result),"a",offset++);
-               
-       }
-       
-       if (rlen) {
-               pic14_emitcode("anl","a,#0x%02x",((unsigned char)-1)>>(-rlen));
-               aopPut(AOP(result),"a",offset);        
-       }
-       
-       return ;
+  int shCnt ;
+  int rlen = 0 ;
+  sym_link *etype;
+  int offset = 0 ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  etype = getSpec(operandType(result));
+  
+  /* read the first byte  */
+  switch (ptype) {
+    
+  case POINTER:
+  case IPOINTER:
+    pic14_emitcode("mov","a,@%s",rname);
+    break;
+    
+  case PPOINTER:
+    pic14_emitcode("movx","a,@%s",rname);
+    break;
+    
+  case FPOINTER:
+    pic14_emitcode("movx","a,@dptr");
+    break;
+    
+  case CPOINTER:
+    pic14_emitcode("clr","a");
+    pic14_emitcode("movc","a","@a+dptr");
+    break;
+    
+  case GPOINTER:
+    pic14_emitcode("lcall","__gptrget");
+    break;
+  }
+  
+  /* if we have bitdisplacement then it fits   */
+  /* into this byte completely or if length is */
+  /* less than a byte                          */
+  if ((shCnt = SPEC_BSTR(etype)) || 
+    (SPEC_BLEN(etype) <= 8))  {
+    
+    /* shift right acc */
+    AccRsh(shCnt);
+    
+    pic14_emitcode("anl","a,#0x%02x",
+      ((unsigned char) -1)>>(8 - SPEC_BLEN(etype)));
+    aopPut(AOP(result),"a",offset);
+    return ;
+  }
+  
+  /* bit field did not fit in a byte  */
+  rlen = SPEC_BLEN(etype) - 8;
+  aopPut(AOP(result),"a",offset++);
+  
+  while (1)  {
+    
+    switch (ptype) {
+    case POINTER:
+    case IPOINTER:
+      pic14_emitcode("inc","%s",rname);
+      pic14_emitcode("mov","a,@%s",rname);
+      break;
+      
+    case PPOINTER:
+      pic14_emitcode("inc","%s",rname);
+      pic14_emitcode("movx","a,@%s",rname);
+      break;
+      
+    case FPOINTER:
+      pic14_emitcode("inc","dptr");
+      pic14_emitcode("movx","a,@dptr");
+      break;
+      
+    case CPOINTER:
+      pic14_emitcode("clr","a");
+      pic14_emitcode("inc","dptr");
+      pic14_emitcode("movc","a","@a+dptr");
+      break;
+      
+    case GPOINTER:
+      pic14_emitcode("inc","dptr");
+      pic14_emitcode("lcall","__gptrget");
+      break;
+    }
+    
+    rlen -= 8;            
+    /* if we are done */
+    if ( rlen <= 0 )
+      break ;
+    
+    aopPut(AOP(result),"a",offset++);
+    
+  }
+  
+  if (rlen) {
+    pic14_emitcode("anl","a,#0x%02x",((unsigned char)-1)>>(-rlen));
+    aopPut(AOP(result),"a",offset);        
+  }
+  
+  return ;
 }
 
 #if 0
@@ -7892,1099 +7891,1099 @@ static void genUnpackBits (operand *result, char *rname, int ptype)
 /* genDataPointerGet - generates code when ptr offset is known     */
 /*-----------------------------------------------------------------*/
 static void genDataPointerGet (operand *left, 
-                                                          operand *result, 
-                                                          iCode *ic)
-{
-       int size , offset = 0;
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       
-       /* optimization - most of the time, left and result are the same
-       * address, but different types. for the pic code, we could omit
-       * the following
-       */
-       
-       aopOp(result,ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,left,NULL,result);
-       
-       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-       
-       size = AOP_SIZE(result);
-       
-       while (size--) {
-               emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-               offset++;
-       }
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+                 operand *result, 
+                 iCode *ic)
+{
+  int size , offset = 0;
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  
+  /* optimization - most of the time, left and result are the same
+  * address, but different types. for the pic code, we could omit
+  * the following
+  */
+  
+  aopOp(result,ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,left,NULL,result);
+  
+  emitpcode(POC_MOVFW, popGet(AOP(left),0));
+  
+  size = AOP_SIZE(result);
+  
+  while (size--) {
+    emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+    offset++;
+  }
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 #endif
 /*-----------------------------------------------------------------*/
 /* genNearPointerGet - pic14_emitcode for near pointer fetch             */
 /*-----------------------------------------------------------------*/
 static void genNearPointerGet (operand *left, 
-                                                          operand *result, 
-                                                          iCode *ic)
-{
-       asmop *aop = NULL;
-       //regs *preg = NULL ;
-       char *rname ;
-       sym_link *rtype, *retype;
-       sym_link *ltype = operandType(left);    
-       //char buffer[80];
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       rtype = operandType(result);
-       retype= getSpec(rtype);
-       
-       aopOp(left,ic,FALSE);
-       
-       /* if left is rematerialisable and
-       result is not bit variable type and
-       the left is pointer to data space i.e
-       lower 128 bytes of space */
-       if (AOP_TYPE(left) == AOP_PCODE &&  //AOP_TYPE(left) == AOP_IMMD &&
-               !IS_BITVAR(retype)         &&
-               DCL_TYPE(ltype) == POINTER) {
-               //genDataPointerGet (left,result,ic);
-               return ;
-       }
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       /* if the value is already in a pointer register
-       then don't need anything more */
-       if (!AOP_INPREG(AOP(left))) {
-               /* otherwise get a free pointer register */
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               /*
-               aop = newAsmop(0);
-               preg = getFreePtr(ic,&aop,FALSE);
-               pic14_emitcode("mov","%s,%s",
-               preg->name,
-               aopGet(AOP(left),0,FALSE,TRUE));
-               rname = preg->name ;
-               */
-               rname ="BAD";
-       } else
-               rname = aopGet(AOP(left),0,FALSE,FALSE);
-       
-       aopOp (result,ic,FALSE);
-       
-       /* if bitfield then unpack the bits */
-       if (IS_BITFIELD(retype)) 
-               genUnpackBits (result,rname,POINTER);
-       else {
-               /* we have can just get the values */
-               int size = AOP_SIZE(result);
-               int offset = 0 ;        
-               
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               
-               emitpcode(POC_MOVFW,popGet(AOP(left),0));
-               emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
-               while(size--) {
-                       emitpcode(POC_MOVFW,popCopyReg(&pc_indf));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offset++));
-                       if(size)
-                               emitpcode(POC_INCF,popCopyReg(&pc_fsr));
-               }
-               /*
-               while (size--) {
-               if (IS_AOP_PREG(result) || AOP_TYPE(result) == AOP_STK ) {
-
-                       pic14_emitcode("mov","a,@%s",rname);
-                       aopPut(AOP(result),"a",offset);
-                       } else {
-                       sprintf(buffer,"@%s",rname);
-                       aopPut(AOP(result),buffer,offset);
-                       }
-                       offset++ ;
-                       if (size)
-                       pic14_emitcode("inc","%s",rname);
-               }
-               */
-       }
-       
-       /* now some housekeeping stuff */
-       if (aop) {
-               /* we had to allocate for this iCode */
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               freeAsmop(NULL,aop,ic,TRUE);
-       } else { 
-       /* we did not allocate which means left
-          already in a pointer register, then
-          if size > 0 && this could be used again
-          we have to point it back to where it 
-               belongs */
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if (AOP_SIZE(result) > 1 &&
-                       !OP_SYMBOL(left)->remat &&
-                       ( OP_SYMBOL(left)->liveTo > ic->seq ||
-                       ic->depth )) {
-                       int size = AOP_SIZE(result) - 1;
-                       while (size--)
-                               pic14_emitcode("dec","%s",rname);
-               }
-       }
-       
-       /* done */
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       
+                 operand *result, 
+                 iCode *ic)
+{
+  asmop *aop = NULL;
+  //regs *preg = NULL ;
+  char *rname ;
+  sym_link *rtype, *retype;
+  sym_link *ltype = operandType(left);    
+  //char buffer[80];
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  rtype = operandType(result);
+  retype= getSpec(rtype);
+  
+  aopOp(left,ic,FALSE);
+  
+  /* if left is rematerialisable and
+  result is not bit variable type and
+  the left is pointer to data space i.e
+  lower 128 bytes of space */
+  if (AOP_TYPE(left) == AOP_PCODE &&  //AOP_TYPE(left) == AOP_IMMD &&
+    !IS_BITVAR(retype)         &&
+    DCL_TYPE(ltype) == POINTER) {
+    //genDataPointerGet (left,result,ic);
+    return ;
+  }
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  /* if the value is already in a pointer register
+  then don't need anything more */
+  if (!AOP_INPREG(AOP(left))) {
+    /* otherwise get a free pointer register */
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    /*
+    aop = newAsmop(0);
+    preg = getFreePtr(ic,&aop,FALSE);
+    pic14_emitcode("mov","%s,%s",
+    preg->name,
+    aopGet(AOP(left),0,FALSE,TRUE));
+    rname = preg->name ;
+    */
+    rname ="BAD";
+  } else
+    rname = aopGet(AOP(left),0,FALSE,FALSE);
+  
+  aopOp (result,ic,FALSE);
+  
+  /* if bitfield then unpack the bits */
+  if (IS_BITFIELD(retype)) 
+    genUnpackBits (result,rname,POINTER);
+  else {
+    /* we have can just get the values */
+    int size = AOP_SIZE(result);
+    int offset = 0 ;  
+    
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    
+    emitpcode(POC_MOVFW,popGet(AOP(left),0));
+    emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
+    while(size--) {
+      emitpcode(POC_MOVFW,popCopyReg(&pc_indf));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offset++));
+      if(size)
+        emitpcode(POC_INCF,popCopyReg(&pc_fsr));
+    }
+    /*
+    while (size--) {
+    if (IS_AOP_PREG(result) || AOP_TYPE(result) == AOP_STK ) {
+
+      pic14_emitcode("mov","a,@%s",rname);
+      aopPut(AOP(result),"a",offset);
+      } else {
+      sprintf(buffer,"@%s",rname);
+      aopPut(AOP(result),buffer,offset);
+      }
+      offset++ ;
+      if (size)
+      pic14_emitcode("inc","%s",rname);
+    }
+    */
+  }
+  
+  /* now some housekeeping stuff */
+  if (aop) {
+    /* we had to allocate for this iCode */
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    freeAsmop(NULL,aop,ic,TRUE);
+  } else { 
+  /* we did not allocate which means left
+     already in a pointer register, then
+     if size > 0 && this could be used again
+     we have to point it back to where it 
+    belongs */
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if (AOP_SIZE(result) > 1 &&
+      !OP_SYMBOL(left)->remat &&
+      ( OP_SYMBOL(left)->liveTo > ic->seq ||
+      ic->depth )) {
+      int size = AOP_SIZE(result) - 1;
+      while (size--)
+        pic14_emitcode("dec","%s",rname);
+    }
+  }
+  
+  /* done */
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* genPagedPointerGet - pic14_emitcode for paged pointer fetch           */
 /*-----------------------------------------------------------------*/
 static void genPagedPointerGet (operand *left, 
-                                                               operand *result, 
-                                                               iCode *ic)
-{
-       asmop *aop = NULL;
-       regs *preg = NULL ;
-       char *rname ;
-       sym_link *rtype, *retype;    
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       rtype = operandType(result);
-       retype= getSpec(rtype);
-       
-       aopOp(left,ic,FALSE);
-       
-       /* if the value is already in a pointer register
-       then don't need anything more */
-       if (!AOP_INPREG(AOP(left))) {
-               /* otherwise get a free pointer register */
-               aop = newAsmop(0);
-               preg = getFreePtr(ic,&aop,FALSE);
-               pic14_emitcode("mov","%s,%s",
-                       preg->name,
-                       aopGet(AOP(left),0,FALSE,TRUE));
-               rname = preg->name ;
-       } else
-               rname = aopGet(AOP(left),0,FALSE,FALSE);
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       aopOp (result,ic,FALSE);
-       
-       /* if bitfield then unpack the bits */
-       if (IS_BITFIELD(retype)) 
-               genUnpackBits (result,rname,PPOINTER);
-       else {
-               /* we have can just get the values */
-               int size = AOP_SIZE(result);
-               int offset = 0 ;        
-               
-               while (size--) {
-                       
-                       pic14_emitcode("movx","a,@%s",rname);
-                       aopPut(AOP(result),"a",offset);
-                       
-                       offset++ ;
-                       
-                       if (size)
-                               pic14_emitcode("inc","%s",rname);
-               }
-       }
-       
-       /* now some housekeeping stuff */
-       if (aop) {
-               /* we had to allocate for this iCode */
-               freeAsmop(NULL,aop,ic,TRUE);
-       } else { 
-       /* we did not allocate which means left
-          already in a pointer register, then
-          if size > 0 && this could be used again
-          we have to point it back to where it 
-               belongs */
-               if (AOP_SIZE(result) > 1 &&
-                       !OP_SYMBOL(left)->remat &&
-                       ( OP_SYMBOL(left)->liveTo > ic->seq ||
-                       ic->depth )) {
-                       int size = AOP_SIZE(result) - 1;
-                       while (size--)
-                               pic14_emitcode("dec","%s",rname);
-               }
-       }
-       
-       /* done */
-       freeAsmop(result,NULL,ic,TRUE);
-       
-       
+                operand *result, 
+                iCode *ic)
+{
+  asmop *aop = NULL;
+  regs *preg = NULL ;
+  char *rname ;
+  sym_link *rtype, *retype;    
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  rtype = operandType(result);
+  retype= getSpec(rtype);
+  
+  aopOp(left,ic,FALSE);
+  
+  /* if the value is already in a pointer register
+  then don't need anything more */
+  if (!AOP_INPREG(AOP(left))) {
+    /* otherwise get a free pointer register */
+    aop = newAsmop(0);
+    preg = getFreePtr(ic,&aop,FALSE);
+    pic14_emitcode("mov","%s,%s",
+      preg->name,
+      aopGet(AOP(left),0,FALSE,TRUE));
+    rname = preg->name ;
+  } else
+    rname = aopGet(AOP(left),0,FALSE,FALSE);
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  aopOp (result,ic,FALSE);
+  
+  /* if bitfield then unpack the bits */
+  if (IS_BITFIELD(retype)) 
+    genUnpackBits (result,rname,PPOINTER);
+  else {
+    /* we have can just get the values */
+    int size = AOP_SIZE(result);
+    int offset = 0 ;  
+    
+    while (size--) {
+      
+      pic14_emitcode("movx","a,@%s",rname);
+      aopPut(AOP(result),"a",offset);
+      
+      offset++ ;
+      
+      if (size)
+        pic14_emitcode("inc","%s",rname);
+    }
+  }
+  
+  /* now some housekeeping stuff */
+  if (aop) {
+    /* we had to allocate for this iCode */
+    freeAsmop(NULL,aop,ic,TRUE);
+  } else { 
+  /* we did not allocate which means left
+     already in a pointer register, then
+     if size > 0 && this could be used again
+     we have to point it back to where it 
+    belongs */
+    if (AOP_SIZE(result) > 1 &&
+      !OP_SYMBOL(left)->remat &&
+      ( OP_SYMBOL(left)->liveTo > ic->seq ||
+      ic->depth )) {
+      int size = AOP_SIZE(result) - 1;
+      while (size--)
+        pic14_emitcode("dec","%s",rname);
+    }
+  }
+  
+  /* done */
+  freeAsmop(result,NULL,ic,TRUE);
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* genFarPointerGet - gget value from far space                    */
 /*-----------------------------------------------------------------*/
 static void genFarPointerGet (operand *left,
-                                                         operand *result, iCode *ic)
-{
-       int size, offset ;
-       sym_link *retype = getSpec(operandType(result));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp(left,ic,FALSE);
-       
-       /* if the operand is already in dptr 
-       then we do nothing else we move the value to dptr */
-       if (AOP_TYPE(left) != AOP_STR) {
-               /* if this is remateriazable */
-               if (AOP_TYPE(left) == AOP_IMMD)
-                       pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
-               else { /* we need to get it byte by byte */
-                       pic14_emitcode("mov","dpl,%s",aopGet(AOP(left),0,FALSE,FALSE));
-                       pic14_emitcode("mov","dph,%s",aopGet(AOP(left),1,FALSE,FALSE));
-                       if (options.model == MODEL_FLAT24)
-                       {
-                               pic14_emitcode("mov", "dpx,%s",aopGet(AOP(left),2,FALSE,FALSE));
-                       }
-               }
-       }
-       /* so dptr know contains the address */
-       freeAsmop(left,NULL,ic,TRUE);
-       aopOp(result,ic,FALSE);
-       
-       /* if bit then unpack */
-       if (IS_BITFIELD(retype)) 
-               genUnpackBits(result,"dptr",FPOINTER);
-       else {
-               size = AOP_SIZE(result);
-               offset = 0 ;
-               
-               while (size--) {
-                       pic14_emitcode("movx","a,@dptr");
-                       aopPut(AOP(result),"a",offset++);
-                       if (size)
-                               pic14_emitcode("inc","dptr");
-               }
-       }
-       
-       freeAsmop(result,NULL,ic,TRUE);
+                operand *result, iCode *ic)
+{
+  int size, offset ;
+  sym_link *retype = getSpec(operandType(result));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp(left,ic,FALSE);
+  
+  /* if the operand is already in dptr 
+  then we do nothing else we move the value to dptr */
+  if (AOP_TYPE(left) != AOP_STR) {
+    /* if this is remateriazable */
+    if (AOP_TYPE(left) == AOP_IMMD)
+      pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
+    else { /* we need to get it byte by byte */
+      pic14_emitcode("mov","dpl,%s",aopGet(AOP(left),0,FALSE,FALSE));
+      pic14_emitcode("mov","dph,%s",aopGet(AOP(left),1,FALSE,FALSE));
+      if (options.model == MODEL_FLAT24)
+      {
+        pic14_emitcode("mov", "dpx,%s",aopGet(AOP(left),2,FALSE,FALSE));
+      }
+    }
+  }
+  /* so dptr know contains the address */
+  freeAsmop(left,NULL,ic,TRUE);
+  aopOp(result,ic,FALSE);
+  
+  /* if bit then unpack */
+  if (IS_BITFIELD(retype)) 
+    genUnpackBits(result,"dptr",FPOINTER);
+  else {
+    size = AOP_SIZE(result);
+    offset = 0 ;
+    
+    while (size--) {
+      pic14_emitcode("movx","a,@dptr");
+      aopPut(AOP(result),"a",offset++);
+      if (size)
+        pic14_emitcode("inc","dptr");
+    }
+  }
+  
+  freeAsmop(result,NULL,ic,TRUE);
 }
 #if 0
 /*-----------------------------------------------------------------*/
 /* genCodePointerGet - get value from code space                  */
 /*-----------------------------------------------------------------*/
 static void genCodePointerGet (operand *left,
-                                                          operand *result, iCode *ic)
-{
-       int size, offset ;
-       sym_link *retype = getSpec(operandType(result));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp(left,ic,FALSE);
-       
-       /* if the operand is already in dptr 
-       then we do nothing else we move the value to dptr */
-       if (AOP_TYPE(left) != AOP_STR) {
-               /* if this is remateriazable */
-               if (AOP_TYPE(left) == AOP_IMMD)
-                       pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
-               else { /* we need to get it byte by byte */
-                       pic14_emitcode("mov","dpl,%s",aopGet(AOP(left),0,FALSE,FALSE));
-                       pic14_emitcode("mov","dph,%s",aopGet(AOP(left),1,FALSE,FALSE));
-                       if (options.model == MODEL_FLAT24)
-                       {
-                               pic14_emitcode("mov", "dpx,%s",aopGet(AOP(left),2,FALSE,FALSE));
-                       }
-               }
-       }
-       /* so dptr know contains the address */
-       freeAsmop(left,NULL,ic,TRUE);
-       aopOp(result,ic,FALSE);
-       
-       /* if bit then unpack */
-       if (IS_BITFIELD(retype)) 
-               genUnpackBits(result,"dptr",CPOINTER);
-       else {
-               size = AOP_SIZE(result);
-               offset = 0 ;
-               
-               while (size--) {
-                       pic14_emitcode("clr","a");
-                       pic14_emitcode("movc","a,@a+dptr");
-                       aopPut(AOP(result),"a",offset++);
-                       if (size)
-                               pic14_emitcode("inc","dptr");
-               }
-       }
-       
-       freeAsmop(result,NULL,ic,TRUE);
+                 operand *result, iCode *ic)
+{
+  int size, offset ;
+  sym_link *retype = getSpec(operandType(result));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp(left,ic,FALSE);
+  
+  /* if the operand is already in dptr 
+  then we do nothing else we move the value to dptr */
+  if (AOP_TYPE(left) != AOP_STR) {
+    /* if this is remateriazable */
+    if (AOP_TYPE(left) == AOP_IMMD)
+      pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
+    else { /* we need to get it byte by byte */
+      pic14_emitcode("mov","dpl,%s",aopGet(AOP(left),0,FALSE,FALSE));
+      pic14_emitcode("mov","dph,%s",aopGet(AOP(left),1,FALSE,FALSE));
+      if (options.model == MODEL_FLAT24)
+      {
+        pic14_emitcode("mov", "dpx,%s",aopGet(AOP(left),2,FALSE,FALSE));
+      }
+    }
+  }
+  /* so dptr know contains the address */
+  freeAsmop(left,NULL,ic,TRUE);
+  aopOp(result,ic,FALSE);
+  
+  /* if bit then unpack */
+  if (IS_BITFIELD(retype)) 
+    genUnpackBits(result,"dptr",CPOINTER);
+  else {
+    size = AOP_SIZE(result);
+    offset = 0 ;
+    
+    while (size--) {
+      pic14_emitcode("clr","a");
+      pic14_emitcode("movc","a,@a+dptr");
+      aopPut(AOP(result),"a",offset++);
+      if (size)
+        pic14_emitcode("inc","dptr");
+    }
+  }
+  
+  freeAsmop(result,NULL,ic,TRUE);
 }
 #endif
 /*-----------------------------------------------------------------*/
 /* genGenPointerGet - gget value from generic pointer space        */
 /*-----------------------------------------------------------------*/
 static void genGenPointerGet (operand *left,
-                                                         operand *result, iCode *ic)
-{
-       int size, offset ;
-       sym_link *retype = getSpec(operandType(result));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       
-       DEBUGpic14_AopType(__LINE__,left,NULL,result);
-       
-       /* if the operand is already in dptr 
-       then we do nothing else we move the value to dptr */
-       //  if (AOP_TYPE(left) != AOP_STR) {
-       /* if this is remateriazable */
-       if (AOP_TYPE(left) == AOP_IMMD) {
-               pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
-               pic14_emitcode("mov","b,#%d",pointerCode(retype));
-       }
-       else { /* we need to get it byte by byte */
-               
-               emitpcode(POC_MOVFW,popGet(AOP(left),0));
-               emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
-               
-               size = AOP_SIZE(result);
-               offset = 0 ;
-               
-               while(size--) {
-                       emitpcode(POC_MOVFW,popCopyReg(&pc_indf));
-                       emitpcode(POC_MOVWF,popGet(AOP(result),offset++));
-                       if(size)
-                               emitpcode(POC_INCF,popCopyReg(&pc_fsr));
-               }
-               goto release;
-       }
-       //}
-       /* so dptr know contains the address */
-       
-       /* if bit then unpack */
-       //if (IS_BITFIELD(retype)) 
-       //  genUnpackBits(result,"dptr",GPOINTER);
-       
+                operand *result, iCode *ic)
+{
+  int size, offset ;
+  sym_link *retype = getSpec(operandType(result));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  
+  DEBUGpic14_AopType(__LINE__,left,NULL,result);
+  
+  /* if the operand is already in dptr 
+  then we do nothing else we move the value to dptr */
+  //  if (AOP_TYPE(left) != AOP_STR) {
+  /* if this is remateriazable */
+  if (AOP_TYPE(left) == AOP_IMMD) {
+    pic14_emitcode("mov","dptr,%s",aopGet(AOP(left),0,TRUE,FALSE));
+    pic14_emitcode("mov","b,#%d",pointerCode(retype));
+  }
+  else { /* we need to get it byte by byte */
+    
+    emitpcode(POC_MOVFW,popGet(AOP(left),0));
+    emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
+    
+    size = AOP_SIZE(result);
+    offset = 0 ;
+    
+    while(size--) {
+      emitpcode(POC_MOVFW,popCopyReg(&pc_indf));
+      emitpcode(POC_MOVWF,popGet(AOP(result),offset++));
+      if(size)
+        emitpcode(POC_INCF,popCopyReg(&pc_fsr));
+    }
+    goto release;
+  }
+  //}
+  /* so dptr know contains the address */
+  
+  /* if bit then unpack */
+  //if (IS_BITFIELD(retype)) 
+  //  genUnpackBits(result,"dptr",GPOINTER);
+  
 release:
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* genConstPointerGet - get value from const generic pointer space */
 /*-----------------------------------------------------------------*/
 static void genConstPointerGet (operand *left,
-                                                               operand *result, iCode *ic)
-{
-       //sym_link *retype = getSpec(operandType(result));
-       symbol *albl = newiTempLabel(NULL);
-       symbol *blbl = newiTempLabel(NULL);
-       PIC_OPCODE poc;
-       pCodeOp *pcop;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp(left,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       
-       
-       DEBUGpic14_AopType(__LINE__,left,NULL,result);
-       
-       DEBUGpic14_emitcode ("; "," %d getting const pointer",__LINE__);
-       
-       emitpcode(POC_CALL,popGetLabel(albl->key));
-       pcop = popGetLabel(blbl->key);
-       emitpcode(POC_PAGESEL,popGetWithString(pcop->name,0)); /* Must restore PCLATH before goto, without destroying W */
-       emitpcode(POC_GOTO,pcop);
-       emitpLabel(albl->key);
-       
-       poc = ( (AOP_TYPE(left) == AOP_PCODE) ? POC_MOVLW : POC_MOVFW);
-       
-       emitpcode(poc,popGet(AOP(left),1));
-       emitpcode(POC_MOVWF,popCopyReg(&pc_pclath));
-       emitpcode(poc,popGet(AOP(left),0));
-       emitpcode(POC_MOVWF,popCopyReg(&pc_pcl));
-       
-       emitpLabel(blbl->key);
-       
-       emitpcode(POC_MOVWF,popGet(AOP(result),0));
-       
-       
-       freeAsmop(left,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       
+                operand *result, iCode *ic)
+{
+  //sym_link *retype = getSpec(operandType(result));
+  symbol *albl = newiTempLabel(NULL);
+  symbol *blbl = newiTempLabel(NULL);
+  PIC_OPCODE poc;
+  pCodeOp *pcop;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp(left,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  
+  
+  DEBUGpic14_AopType(__LINE__,left,NULL,result);
+  
+  DEBUGpic14_emitcode ("; "," %d getting const pointer",__LINE__);
+  
+  emitpcode(POC_CALL,popGetLabel(albl->key));
+  pcop = popGetLabel(blbl->key);
+  emitpcode(POC_PAGESEL,popGetWithString(pcop->name,0)); /* Must restore PCLATH before goto, without destroying W */
+  emitpcode(POC_GOTO,pcop);
+  emitpLabel(albl->key);
+  
+  poc = ( (AOP_TYPE(left) == AOP_PCODE) ? POC_MOVLW : POC_MOVFW);
+  
+  emitpcode(poc,popGet(AOP(left),1));
+  emitpcode(POC_MOVWF,popCopyReg(&pc_pclath));
+  emitpcode(poc,popGet(AOP(left),0));
+  emitpcode(POC_MOVWF,popCopyReg(&pc_pcl));
+  
+  emitpLabel(blbl->key);
+  
+  emitpcode(POC_MOVWF,popGet(AOP(result),0));
+  
+  
+  freeAsmop(left,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  
 }
 /*-----------------------------------------------------------------*/
 /* genPointerGet - generate code for pointer get                   */
 /*-----------------------------------------------------------------*/
 static void genPointerGet (iCode *ic)
 {
-       operand *left, *result ;
-       sym_link *type, *etype;
-       int p_type;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       left = IC_LEFT(ic);
-       result = IC_RESULT(ic) ;
-       
-       /* depending on the type of pointer we need to
-       move it to the correct pointer register */
-       type = operandType(left);
-       etype = getSpec(type);
-       
-       if (IS_PTR_CONST(type))
-               DEBUGpic14_emitcode ("; ***","%d - const pointer",__LINE__);
-       
-       /* if left is of type of pointer then it is simple */
-       if (IS_PTR(type) && !IS_FUNC(type->next)) 
-               p_type = DCL_TYPE(type);
-       else {
-               /* we have to go by the storage class */
-               p_type = PTR_TYPE(SPEC_OCLS(etype));
-               
-               DEBUGpic14_emitcode ("; ***","%d - resolve pointer by storage class",__LINE__);
-               
-               if (SPEC_OCLS(etype)->codesp ) {
-                       DEBUGpic14_emitcode ("; ***","%d - cpointer",__LINE__);
-                       //p_type = CPOINTER ;   
-               }
-               else
-                       if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged)
-                               DEBUGpic14_emitcode ("; ***","%d - fpointer",__LINE__);
-                       /*p_type = FPOINTER ;*/ 
-                       else
-                               if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged)
-                                       DEBUGpic14_emitcode ("; ***","%d - ppointer",__LINE__);
-                               /*                  p_type = PPOINTER; */
-                               else
-                                       if (SPEC_OCLS(etype) == idata )
-                                               DEBUGpic14_emitcode ("; ***","%d - ipointer",__LINE__);
-                                       /*                      p_type = IPOINTER; */
-                                       else
-                                               DEBUGpic14_emitcode ("; ***","%d - pointer",__LINE__);
-                                       /*                      p_type = POINTER ; */
-       }
-       
-       /* now that we have the pointer type we assign
-       the pointer values */
-       switch (p_type) {
-               
-       case POINTER:   
-       case IPOINTER:
-               genNearPointerGet (left,result,ic);
-               break;
-               
-       case PPOINTER:
-               genPagedPointerGet(left,result,ic);
-               break;
-               
-       case FPOINTER:
-               genFarPointerGet (left,result,ic);
-               break;
-               
-       case CPOINTER:
-               genConstPointerGet (left,result,ic);
-               //pic14_emitcodePointerGet (left,result,ic);
-               break;
-               
-       case GPOINTER:
-               if (IS_PTR_CONST(type))
-                       genConstPointerGet (left,result,ic);
-               else
-                       genGenPointerGet (left,result,ic);
-               break;
-       }
-       
+  operand *left, *result ;
+  sym_link *type, *etype;
+  int p_type;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  left = IC_LEFT(ic);
+  result = IC_RESULT(ic) ;
+  
+  /* depending on the type of pointer we need to
+  move it to the correct pointer register */
+  type = operandType(left);
+  etype = getSpec(type);
+  
+  if (IS_PTR_CONST(type))
+    DEBUGpic14_emitcode ("; ***","%d - const pointer",__LINE__);
+  
+  /* if left is of type of pointer then it is simple */
+  if (IS_PTR(type) && !IS_FUNC(type->next)) 
+    p_type = DCL_TYPE(type);
+  else {
+    /* we have to go by the storage class */
+    p_type = PTR_TYPE(SPEC_OCLS(etype));
+    
+    DEBUGpic14_emitcode ("; ***","%d - resolve pointer by storage class",__LINE__);
+    
+    if (SPEC_OCLS(etype)->codesp ) {
+      DEBUGpic14_emitcode ("; ***","%d - cpointer",__LINE__);
+      //p_type = CPOINTER ; 
+    }
+    else
+      if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged)
+        DEBUGpic14_emitcode ("; ***","%d - fpointer",__LINE__);
+      /*p_type = FPOINTER ;*/ 
+      else
+        if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged)
+          DEBUGpic14_emitcode ("; ***","%d - ppointer",__LINE__);
+        /*        p_type = PPOINTER; */
+        else
+          if (SPEC_OCLS(etype) == idata )
+            DEBUGpic14_emitcode ("; ***","%d - ipointer",__LINE__);
+          /*      p_type = IPOINTER; */
+          else
+            DEBUGpic14_emitcode ("; ***","%d - pointer",__LINE__);
+          /*      p_type = POINTER ; */
+  }
+  
+  /* now that we have the pointer type we assign
+  the pointer values */
+  switch (p_type) {
+    
+  case POINTER: 
+  case IPOINTER:
+    genNearPointerGet (left,result,ic);
+    break;
+    
+  case PPOINTER:
+    genPagedPointerGet(left,result,ic);
+    break;
+    
+  case FPOINTER:
+    genFarPointerGet (left,result,ic);
+    break;
+    
+  case CPOINTER:
+    genConstPointerGet (left,result,ic);
+    //pic14_emitcodePointerGet (left,result,ic);
+    break;
+    
+  case GPOINTER:
+    if (IS_PTR_CONST(type))
+      genConstPointerGet (left,result,ic);
+    else
+      genGenPointerGet (left,result,ic);
+    break;
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* genPackBits - generates code for packed bit storage             */
 /*-----------------------------------------------------------------*/
 static void genPackBits (sym_link    *etype ,
-                                                operand *right ,
-                                                char *rname, int p_type)
-{
-       int shCount = 0 ;
-       int offset = 0  ;
-       int rLen = 0 ;
-       int blen, bstr ;   
-       char *l ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       blen = SPEC_BLEN(etype);
-       bstr = SPEC_BSTR(etype);
-       
-       l = aopGet(AOP(right),offset++,FALSE,FALSE);
-       MOVA(l);   
-       
-       /* if the bit lenth is less than or    */
-       /* it exactly fits a byte then         */
-       if (SPEC_BLEN(etype) <= 8 )  {
-               shCount = SPEC_BSTR(etype) ;
-               
-               /* shift left acc */
-               AccLsh(shCount);
-               
-               if (SPEC_BLEN(etype) < 8 ) { /* if smaller than a byte */
-                       
-                       
-                       switch (p_type) {
-                       case POINTER:
-                               pic14_emitcode ("mov","b,a");
-                               pic14_emitcode("mov","a,@%s",rname);
-                               break;
-                               
-                       case FPOINTER:
-                               pic14_emitcode ("mov","b,a");
-                               pic14_emitcode("movx","a,@dptr");
-                               break;
-                               
-                       case GPOINTER:
-                               pic14_emitcode ("push","b");
-                               pic14_emitcode ("push","acc");
-                               pic14_emitcode ("lcall","__gptrget");
-                               pic14_emitcode ("pop","b");
-                               break;
-                       }
-                       
-                       pic14_emitcode ("anl","a,#0x%02x",(unsigned char)
-                               ((unsigned char)(0xFF << (blen+bstr)) | 
-                               (unsigned char)(0xFF >> (8-bstr)) ) );
-                       pic14_emitcode ("orl","a,b");
-                       if (p_type == GPOINTER)
-                               pic14_emitcode("pop","b");
-               }
-       }
-       
-       switch (p_type) {
-       case POINTER:
-               pic14_emitcode("mov","@%s,a",rname);
-               break;
-               
-       case FPOINTER:
-               pic14_emitcode("movx","@dptr,a");
-               break;
-               
-       case GPOINTER:
-               DEBUGpic14_emitcode(";lcall","__gptrput");
-               break;
-       }
-       
-       /* if we r done */
-       if ( SPEC_BLEN(etype) <= 8 )
-               return ;
-       
-       pic14_emitcode("inc","%s",rname);
-       rLen = SPEC_BLEN(etype) ;     
-       
-       /* now generate for lengths greater than one byte */
-       while (1) {
-               
-               l = aopGet(AOP(right),offset++,FALSE,TRUE);
-               
-               rLen -= 8 ;
-               if (rLen <= 0 )
-                       break ;
-               
-               switch (p_type) {
-               case POINTER:
-                       if (*l == '@') {
-                               MOVA(l);
-                               pic14_emitcode("mov","@%s,a",rname);
-                       } else
-                               pic14_emitcode("mov","@%s,%s",rname,l);
-                       break;
-                       
-               case FPOINTER:
-                       MOVA(l);
-                       pic14_emitcode("movx","@dptr,a");
-                       break;
-                       
-               case GPOINTER:
-                       MOVA(l);
-                       DEBUGpic14_emitcode(";lcall","__gptrput");
-                       break;  
-               }   
-               pic14_emitcode ("inc","%s",rname);
-       }
-       
-       MOVA(l);
-       
-       /* last last was not complete */
-       if (rLen)   {
-               /* save the byte & read byte */
-               switch (p_type) {
-               case POINTER:
-                       pic14_emitcode ("mov","b,a");
-                       pic14_emitcode("mov","a,@%s",rname);
-                       break;
-                       
-               case FPOINTER:
-                       pic14_emitcode ("mov","b,a");
-                       pic14_emitcode("movx","a,@dptr");
-                       break;
-                       
-               case GPOINTER:
-                       pic14_emitcode ("push","b");
-                       pic14_emitcode ("push","acc");
-                       pic14_emitcode ("lcall","__gptrget");
-                       pic14_emitcode ("pop","b");
-                       break;
-               }
-               
-               pic14_emitcode ("anl","a,#0x%02x",((unsigned char)-1 << -rLen) );
-               pic14_emitcode ("orl","a,b");
-       }
-       
-       if (p_type == GPOINTER)
-               pic14_emitcode("pop","b");
-       
-       switch (p_type) {
-               
-       case POINTER:
-               pic14_emitcode("mov","@%s,a",rname);
-               break;
-               
-       case FPOINTER:
-               pic14_emitcode("movx","@dptr,a");
-               break;
-               
-       case GPOINTER:
-               DEBUGpic14_emitcode(";lcall","__gptrput");
-               break;                  
-       }
+             operand *right ,
+             char *rname, int p_type)
+{
+  int shCount = 0 ;
+  int offset = 0  ;
+  int rLen = 0 ;
+  int blen, bstr ;   
+  char *l ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  blen = SPEC_BLEN(etype);
+  bstr = SPEC_BSTR(etype);
+  
+  l = aopGet(AOP(right),offset++,FALSE,FALSE);
+  MOVA(l);   
+  
+  /* if the bit lenth is less than or    */
+  /* it exactly fits a byte then         */
+  if (SPEC_BLEN(etype) <= 8 )  {
+    shCount = SPEC_BSTR(etype) ;
+    
+    /* shift left acc */
+    AccLsh(shCount);
+    
+    if (SPEC_BLEN(etype) < 8 ) { /* if smaller than a byte */
+      
+      
+      switch (p_type) {
+      case POINTER:
+        pic14_emitcode ("mov","b,a");
+        pic14_emitcode("mov","a,@%s",rname);
+        break;
+        
+      case FPOINTER:
+        pic14_emitcode ("mov","b,a");
+        pic14_emitcode("movx","a,@dptr");
+        break;
+        
+      case GPOINTER:
+        pic14_emitcode ("push","b");
+        pic14_emitcode ("push","acc");
+        pic14_emitcode ("lcall","__gptrget");
+        pic14_emitcode ("pop","b");
+        break;
+      }
+      
+      pic14_emitcode ("anl","a,#0x%02x",(unsigned char)
+        ((unsigned char)(0xFF << (blen+bstr)) | 
+        (unsigned char)(0xFF >> (8-bstr)) ) );
+      pic14_emitcode ("orl","a,b");
+      if (p_type == GPOINTER)
+        pic14_emitcode("pop","b");
+    }
+  }
+  
+  switch (p_type) {
+  case POINTER:
+    pic14_emitcode("mov","@%s,a",rname);
+    break;
+    
+  case FPOINTER:
+    pic14_emitcode("movx","@dptr,a");
+    break;
+    
+  case GPOINTER:
+    DEBUGpic14_emitcode(";lcall","__gptrput");
+    break;
+  }
+  
+  /* if we r done */
+  if ( SPEC_BLEN(etype) <= 8 )
+    return ;
+  
+  pic14_emitcode("inc","%s",rname);
+  rLen = SPEC_BLEN(etype) ;     
+  
+  /* now generate for lengths greater than one byte */
+  while (1) {
+    
+    l = aopGet(AOP(right),offset++,FALSE,TRUE);
+    
+    rLen -= 8 ;
+    if (rLen <= 0 )
+      break ;
+    
+    switch (p_type) {
+    case POINTER:
+      if (*l == '@') {
+        MOVA(l);
+        pic14_emitcode("mov","@%s,a",rname);
+      } else
+        pic14_emitcode("mov","@%s,%s",rname,l);
+      break;
+      
+    case FPOINTER:
+      MOVA(l);
+      pic14_emitcode("movx","@dptr,a");
+      break;
+      
+    case GPOINTER:
+      MOVA(l);
+      DEBUGpic14_emitcode(";lcall","__gptrput");
+      break;  
+    }   
+    pic14_emitcode ("inc","%s",rname);
+  }
+  
+  MOVA(l);
+  
+  /* last last was not complete */
+  if (rLen)   {
+    /* save the byte & read byte */
+    switch (p_type) {
+    case POINTER:
+      pic14_emitcode ("mov","b,a");
+      pic14_emitcode("mov","a,@%s",rname);
+      break;
+      
+    case FPOINTER:
+      pic14_emitcode ("mov","b,a");
+      pic14_emitcode("movx","a,@dptr");
+      break;
+      
+    case GPOINTER:
+      pic14_emitcode ("push","b");
+      pic14_emitcode ("push","acc");
+      pic14_emitcode ("lcall","__gptrget");
+      pic14_emitcode ("pop","b");
+      break;
+    }
+    
+    pic14_emitcode ("anl","a,#0x%02x",((unsigned char)-1 << -rLen) );
+    pic14_emitcode ("orl","a,b");
+  }
+  
+  if (p_type == GPOINTER)
+    pic14_emitcode("pop","b");
+  
+  switch (p_type) {
+    
+  case POINTER:
+    pic14_emitcode("mov","@%s,a",rname);
+    break;
+    
+  case FPOINTER:
+    pic14_emitcode("movx","@dptr,a");
+    break;
+    
+  case GPOINTER:
+    DEBUGpic14_emitcode(";lcall","__gptrput");
+    break;      
+  }
 }
 /*-----------------------------------------------------------------*/
 /* genDataPointerSet - remat pointer to data space                 */
 /*-----------------------------------------------------------------*/
 static void genDataPointerSet(operand *right,
-                                                         operand *result,
-                                                         iCode *ic)
-{
-       int size, offset = 0 ;
-       char *l, buffer[256];
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp(right,ic,FALSE);
-       
-       l = aopGet(AOP(result),0,FALSE,TRUE);
-       size = AOP_SIZE(right);
-       /*
-       if ( AOP_TYPE(result) == AOP_PCODE) {
-       fprintf(stderr,"genDataPointerSet   %s, %d\n",
-       AOP(result)->aopu.pcop->name,
-       PCOI(AOP(result)->aopu.pcop)->offset);
-       }
-       */
-       
-       // tsd, was l+1 - the underline `_' prefix was being stripped
-       while (size--) {
-               if (offset) {
-                       sprintf(buffer,"(%s + %d)",l,offset);
-                       fprintf(stderr,"oops  %s\n",buffer);
-               } else
-                       sprintf(buffer,"%s",l);
-               
-               if (AOP_TYPE(right) == AOP_LIT) {
-                       unsigned int lit = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit);
-                       lit = lit >> (8*offset);
-                       if(lit&0xff) {
-                               pic14_emitcode("movlw","%d",lit);
-                               pic14_emitcode("movwf","%s",buffer);
-                               
-                               emitpcode(POC_MOVLW, popGetLit(lit&0xff));
-                               //emitpcode(POC_MOVWF, popRegFromString(buffer));
-                               emitpcode(POC_MOVWF, popGet(AOP(result),0));
-                               
-                       } else {
-                               pic14_emitcode("clrf","%s",buffer);
-                               //emitpcode(POC_CLRF, popRegFromString(buffer));
-                               emitpcode(POC_CLRF, popGet(AOP(result),0));
-                       }
-               }else {
-                       pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
-                       pic14_emitcode("movwf","%s",buffer);
-                       
-                       emitpcode(POC_MOVFW, popGet(AOP(right),offset));
-                       //emitpcode(POC_MOVWF, popRegFromString(buffer));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),0));
-                       
-               }
-               
-               offset++;
-       }
-       
-       freeAsmop(right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+                operand *result,
+                iCode *ic)
+{
+  int size, offset = 0 ;
+  char *l, buffer[256];
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp(right,ic,FALSE);
+  
+  l = aopGet(AOP(result),0,FALSE,TRUE);
+  size = AOP_SIZE(right);
+  /*
+  if ( AOP_TYPE(result) == AOP_PCODE) {
+  fprintf(stderr,"genDataPointerSet   %s, %d\n",
+  AOP(result)->aopu.pcop->name,
+  PCOI(AOP(result)->aopu.pcop)->offset);
+  }
+  */
+  
+  // tsd, was l+1 - the underline `_' prefix was being stripped
+  while (size--) {
+    if (offset) {
+      sprintf(buffer,"(%s + %d)",l,offset);
+      fprintf(stderr,"oops  %s\n",buffer);
+    } else
+      sprintf(buffer,"%s",l);
+    
+    if (AOP_TYPE(right) == AOP_LIT) {
+      unsigned int lit = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit);
+      lit = lit >> (8*offset);
+      if(lit&0xff) {
+        pic14_emitcode("movlw","%d",lit);
+        pic14_emitcode("movwf","%s",buffer);
+        
+        emitpcode(POC_MOVLW, popGetLit(lit&0xff));
+        //emitpcode(POC_MOVWF, popRegFromString(buffer));
+        emitpcode(POC_MOVWF, popGet(AOP(result),0));
+        
+      } else {
+        pic14_emitcode("clrf","%s",buffer);
+        //emitpcode(POC_CLRF, popRegFromString(buffer));
+        emitpcode(POC_CLRF, popGet(AOP(result),0));
+      }
+    }else {
+      pic14_emitcode("movf","%s,w",aopGet(AOP(right),offset,FALSE,FALSE));
+      pic14_emitcode("movwf","%s",buffer);
+      
+      emitpcode(POC_MOVFW, popGet(AOP(right),offset));
+      //emitpcode(POC_MOVWF, popRegFromString(buffer));
+      emitpcode(POC_MOVWF, popGet(AOP(result),0));
+      
+    }
+    
+    offset++;
+  }
+  
+  freeAsmop(right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
 /* genNearPointerSet - pic14_emitcode for near pointer put                */
 /*-----------------------------------------------------------------*/
 static void genNearPointerSet (operand *right,
-                                                          operand *result, 
-                                                          iCode *ic)
-{
-       asmop *aop = NULL;
-       char *l;
-       sym_link *retype;
-       sym_link *ptype = operandType(result);
-       
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       retype= getSpec(operandType(right));
-       
-       aopOp(result,ic,FALSE);
-       
-       
-       /* if the result is rematerializable &
-       in data space & not a bit variable */
-       //if (AOP_TYPE(result) == AOP_IMMD &&
-       if (AOP_TYPE(result) == AOP_PCODE &&  //AOP_TYPE(result) == AOP_IMMD &&
-               DCL_TYPE(ptype) == POINTER   &&
-               !IS_BITFIELD(retype)) {
-               genDataPointerSet (right,result,ic);
-               freeAsmop(result,NULL,ic,TRUE);
-               return;
-       }
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp(right,ic,FALSE);
-       DEBUGpic14_AopType(__LINE__,NULL,right,result);
-       
-       /* if the value is already in a pointer register
-       then don't need anything more */
-       if (!AOP_INPREG(AOP(result))) {
-               /* otherwise get a free pointer register */
-               //aop = newAsmop(0);
-               //preg = getFreePtr(ic,&aop,FALSE);
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               //pic14_emitcode("mov","%s,%s",
-               //         preg->name,
-               //         aopGet(AOP(result),0,FALSE,TRUE));
-               //rname = preg->name ;
-               //pic14_emitcode("movwf","fsr");
-               emitpcode(POC_MOVFW, popGet(AOP(result),0));
-               emitpcode(POC_MOVWF, popCopyReg(&pc_fsr));
-               emitpcode(POC_MOVFW, popGet(AOP(right),0));
-               emitpcode(POC_MOVWF, popCopyReg(&pc_indf));
-               goto release;
-               
-       }// else
-       //   rname = aopGet(AOP(result),0,FALSE,FALSE);
-       
-       
-       /* if bitfield then unpack the bits */
-       if (IS_BITFIELD(retype)) {
-               werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                       "The programmer is obviously confused");
-               //genPackBits (retype,right,rname,POINTER);
-               exit(1);
-       }
-       else {
-               /* we have can just get the values */
-               int size = AOP_SIZE(right);
-               int offset = 0 ;    
-               
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               while (size--) {
-                       l = aopGet(AOP(right),offset,FALSE,TRUE);
-                       if (*l == '@' ) {
-                               //MOVA(l);
-                               //pic14_emitcode("mov","@%s,a",rname);
-                               pic14_emitcode("movf","indf,w ;1");
-                       } else {
-                               
-                               if (AOP_TYPE(right) == AOP_LIT) {
-                                       unsigned int lit = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit);
-                                       if(lit) {
-                                               pic14_emitcode("movlw","%s",l);
-                                               pic14_emitcode("movwf","indf ;2");
-                                       } else 
-                                               pic14_emitcode("clrf","indf");
-                               }else {
-                                       pic14_emitcode("movf","%s,w",l);
-                                       pic14_emitcode("movwf","indf ;2");
-                               }
-                               //pic14_emitcode("mov","@%s,%s",rname,l);
-                       }
-                       if (size)
-                               pic14_emitcode("incf","fsr,f ;3");
-                       //pic14_emitcode("inc","%s",rname);
-                       offset++;
-               }
-       }
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* now some housekeeping stuff */
-       if (aop) {
-               /* we had to allocate for this iCode */
-               freeAsmop(NULL,aop,ic,TRUE);
-       } else { 
-       /* we did not allocate which means left
-       already in a pointer register, then
-       if size > 0 && this could be used again
-       we have to point it back to where it 
-               belongs */
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if (AOP_SIZE(right) > 1 &&
-                       !OP_SYMBOL(result)->remat &&
-                       ( OP_SYMBOL(result)->liveTo > ic->seq ||
-                       ic->depth )) {
-                       int size = AOP_SIZE(right) - 1;
-                       while (size--)
-                               pic14_emitcode("decf","fsr,f");
-                       //pic14_emitcode("dec","%s",rname);
-               }
-       }
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* done */
+                 operand *result, 
+                 iCode *ic)
+{
+  asmop *aop = NULL;
+  char *l;
+  sym_link *retype;
+  sym_link *ptype = operandType(result);
+  
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  retype= getSpec(operandType(right));
+  
+  aopOp(result,ic,FALSE);
+  
+  
+  /* if the result is rematerializable &
+  in data space & not a bit variable */
+  //if (AOP_TYPE(result) == AOP_IMMD &&
+  if (AOP_TYPE(result) == AOP_PCODE &&  //AOP_TYPE(result) == AOP_IMMD &&
+    DCL_TYPE(ptype) == POINTER   &&
+    !IS_BITFIELD(retype)) {
+    genDataPointerSet (right,result,ic);
+    freeAsmop(result,NULL,ic,TRUE);
+    return;
+  }
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp(right,ic,FALSE);
+  DEBUGpic14_AopType(__LINE__,NULL,right,result);
+  
+  /* if the value is already in a pointer register
+  then don't need anything more */
+  if (!AOP_INPREG(AOP(result))) {
+    /* otherwise get a free pointer register */
+    //aop = newAsmop(0);
+    //preg = getFreePtr(ic,&aop,FALSE);
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    //pic14_emitcode("mov","%s,%s",
+    //         preg->name,
+    //         aopGet(AOP(result),0,FALSE,TRUE));
+    //rname = preg->name ;
+    //pic14_emitcode("movwf","fsr");
+    emitpcode(POC_MOVFW, popGet(AOP(result),0));
+    emitpcode(POC_MOVWF, popCopyReg(&pc_fsr));
+    emitpcode(POC_MOVFW, popGet(AOP(right),0));
+    emitpcode(POC_MOVWF, popCopyReg(&pc_indf));
+    goto release;
+    
+  }// else
+  //   rname = aopGet(AOP(result),0,FALSE,FALSE);
+  
+  
+  /* if bitfield then unpack the bits */
+  if (IS_BITFIELD(retype)) {
+    werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+      "The programmer is obviously confused");
+    //genPackBits (retype,right,rname,POINTER);
+    exit(1);
+  }
+  else {
+    /* we have can just get the values */
+    int size = AOP_SIZE(right);
+    int offset = 0 ;    
+    
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    while (size--) {
+      l = aopGet(AOP(right),offset,FALSE,TRUE);
+      if (*l == '@' ) {
+        //MOVA(l);
+        //pic14_emitcode("mov","@%s,a",rname);
+        pic14_emitcode("movf","indf,w ;1");
+      } else {
+        
+        if (AOP_TYPE(right) == AOP_LIT) {
+          unsigned int lit = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit);
+          if(lit) {
+            pic14_emitcode("movlw","%s",l);
+            pic14_emitcode("movwf","indf ;2");
+          } else 
+            pic14_emitcode("clrf","indf");
+        }else {
+          pic14_emitcode("movf","%s,w",l);
+          pic14_emitcode("movwf","indf ;2");
+        }
+        //pic14_emitcode("mov","@%s,%s",rname,l);
+      }
+      if (size)
+        pic14_emitcode("incf","fsr,f ;3");
+      //pic14_emitcode("inc","%s",rname);
+      offset++;
+    }
+  }
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* now some housekeeping stuff */
+  if (aop) {
+    /* we had to allocate for this iCode */
+    freeAsmop(NULL,aop,ic,TRUE);
+  } else { 
+  /* we did not allocate which means left
+  already in a pointer register, then
+  if size > 0 && this could be used again
+  we have to point it back to where it 
+    belongs */
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if (AOP_SIZE(right) > 1 &&
+      !OP_SYMBOL(result)->remat &&
+      ( OP_SYMBOL(result)->liveTo > ic->seq ||
+      ic->depth )) {
+      int size = AOP_SIZE(right) - 1;
+      while (size--)
+        pic14_emitcode("decf","fsr,f");
+      //pic14_emitcode("dec","%s",rname);
+    }
+  }
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* done */
 release:
-       freeAsmop(right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
 /* genPagedPointerSet - pic14_emitcode for Paged pointer put             */
 /*-----------------------------------------------------------------*/
 static void genPagedPointerSet (operand *right,
-                                                               operand *result, 
-                                                               iCode *ic)
-{
-       asmop *aop = NULL;
-       regs *preg = NULL ;
-       char *rname , *l;
-       sym_link *retype;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       retype= getSpec(operandType(right));
-       
-       aopOp(result,ic,FALSE);
-       
-       /* if the value is already in a pointer register
-       then don't need anything more */
-       if (!AOP_INPREG(AOP(result))) {
-               /* otherwise get a free pointer register */
-               aop = newAsmop(0);
-               preg = getFreePtr(ic,&aop,FALSE);
-               pic14_emitcode("mov","%s,%s",
-                       preg->name,
-                       aopGet(AOP(result),0,FALSE,TRUE));
-               rname = preg->name ;
-       } else
-               rname = aopGet(AOP(result),0,FALSE,FALSE);
-       
-       freeAsmop(result,NULL,ic,TRUE);
-       aopOp (right,ic,FALSE);
-       
-       /* if bitfield then unpack the bits */
-       if (IS_BITFIELD(retype)) 
-               genPackBits (retype,right,rname,PPOINTER);
-       else {
-               /* we have can just get the values */
-               int size = AOP_SIZE(right);
-               int offset = 0 ;        
-               
-               while (size--) {
-                       l = aopGet(AOP(right),offset,FALSE,TRUE);
-                       
-                       MOVA(l);
-                       pic14_emitcode("movx","@%s,a",rname);
-                       
-                       if (size)
-                               pic14_emitcode("inc","%s",rname);
-                       
-                       offset++;
-               }
-       }
-       
-       /* now some housekeeping stuff */
-       if (aop) {
-               /* we had to allocate for this iCode */
-               freeAsmop(NULL,aop,ic,TRUE);
-       } else { 
-       /* we did not allocate which means left
-          already in a pointer register, then
-          if size > 0 && this could be used again
-          we have to point it back to where it 
-               belongs */
-               if (AOP_SIZE(right) > 1 &&
-                       !OP_SYMBOL(result)->remat &&
-                       ( OP_SYMBOL(result)->liveTo > ic->seq ||
-                       ic->depth )) {
-                       int size = AOP_SIZE(right) - 1;
-                       while (size--)
-                               pic14_emitcode("dec","%s",rname);
-               }
-       }
-       
-       /* done */
-       freeAsmop(right,NULL,ic,TRUE);
-       
-       
+                operand *result, 
+                iCode *ic)
+{
+  asmop *aop = NULL;
+  regs *preg = NULL ;
+  char *rname , *l;
+  sym_link *retype;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  retype= getSpec(operandType(right));
+  
+  aopOp(result,ic,FALSE);
+  
+  /* if the value is already in a pointer register
+  then don't need anything more */
+  if (!AOP_INPREG(AOP(result))) {
+    /* otherwise get a free pointer register */
+    aop = newAsmop(0);
+    preg = getFreePtr(ic,&aop,FALSE);
+    pic14_emitcode("mov","%s,%s",
+      preg->name,
+      aopGet(AOP(result),0,FALSE,TRUE));
+    rname = preg->name ;
+  } else
+    rname = aopGet(AOP(result),0,FALSE,FALSE);
+  
+  freeAsmop(result,NULL,ic,TRUE);
+  aopOp (right,ic,FALSE);
+  
+  /* if bitfield then unpack the bits */
+  if (IS_BITFIELD(retype)) 
+    genPackBits (retype,right,rname,PPOINTER);
+  else {
+    /* we have can just get the values */
+    int size = AOP_SIZE(right);
+    int offset = 0 ;  
+    
+    while (size--) {
+      l = aopGet(AOP(right),offset,FALSE,TRUE);
+      
+      MOVA(l);
+      pic14_emitcode("movx","@%s,a",rname);
+      
+      if (size)
+        pic14_emitcode("inc","%s",rname);
+      
+      offset++;
+    }
+  }
+  
+  /* now some housekeeping stuff */
+  if (aop) {
+    /* we had to allocate for this iCode */
+    freeAsmop(NULL,aop,ic,TRUE);
+  } else { 
+  /* we did not allocate which means left
+     already in a pointer register, then
+     if size > 0 && this could be used again
+     we have to point it back to where it 
+    belongs */
+    if (AOP_SIZE(right) > 1 &&
+      !OP_SYMBOL(result)->remat &&
+      ( OP_SYMBOL(result)->liveTo > ic->seq ||
+      ic->depth )) {
+      int size = AOP_SIZE(right) - 1;
+      while (size--)
+        pic14_emitcode("dec","%s",rname);
+    }
+  }
+  
+  /* done */
+  freeAsmop(right,NULL,ic,TRUE);
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
 /* genFarPointerSet - set value from far space                     */
 /*-----------------------------------------------------------------*/
 static void genFarPointerSet (operand *right,
-                                                         operand *result, iCode *ic)
-{
-       int size, offset ;
-       sym_link *retype = getSpec(operandType(right));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp(result,ic,FALSE);
-       
-       /* if the operand is already in dptr 
-       then we do nothing else we move the value to dptr */
-       if (AOP_TYPE(result) != AOP_STR) {
-               /* if this is remateriazable */
-               if (AOP_TYPE(result) == AOP_IMMD)
-                       pic14_emitcode("mov","dptr,%s",aopGet(AOP(result),0,TRUE,FALSE));
-               else { /* we need to get it byte by byte */
-                       pic14_emitcode("mov","dpl,%s",aopGet(AOP(result),0,FALSE,FALSE));
-                       pic14_emitcode("mov","dph,%s",aopGet(AOP(result),1,FALSE,FALSE));
-                       if (options.model == MODEL_FLAT24)
-                       {
-                               pic14_emitcode("mov", "dpx,%s",aopGet(AOP(result),2,FALSE,FALSE));
-                       }
-               }
-       }
-       /* so dptr know contains the address */
-       freeAsmop(result,NULL,ic,TRUE);
-       aopOp(right,ic,FALSE);
-       
-       /* if bit then unpack */
-       if (IS_BITFIELD(retype)) 
-               genPackBits(retype,right,"dptr",FPOINTER);
-       else {
-               size = AOP_SIZE(right);
-               offset = 0 ;
-               
-               while (size--) {
-                       char *l = aopGet(AOP(right),offset++,FALSE,FALSE);
-                       MOVA(l);
-                       pic14_emitcode("movx","@dptr,a");
-                       if (size)
-                               pic14_emitcode("inc","dptr");
-               }
-       }
-       
-       freeAsmop(right,NULL,ic,TRUE);
+                operand *result, iCode *ic)
+{
+  int size, offset ;
+  sym_link *retype = getSpec(operandType(right));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp(result,ic,FALSE);
+  
+  /* if the operand is already in dptr 
+  then we do nothing else we move the value to dptr */
+  if (AOP_TYPE(result) != AOP_STR) {
+    /* if this is remateriazable */
+    if (AOP_TYPE(result) == AOP_IMMD)
+      pic14_emitcode("mov","dptr,%s",aopGet(AOP(result),0,TRUE,FALSE));
+    else { /* we need to get it byte by byte */
+      pic14_emitcode("mov","dpl,%s",aopGet(AOP(result),0,FALSE,FALSE));
+      pic14_emitcode("mov","dph,%s",aopGet(AOP(result),1,FALSE,FALSE));
+      if (options.model == MODEL_FLAT24)
+      {
+        pic14_emitcode("mov", "dpx,%s",aopGet(AOP(result),2,FALSE,FALSE));
+      }
+    }
+  }
+  /* so dptr know contains the address */
+  freeAsmop(result,NULL,ic,TRUE);
+  aopOp(right,ic,FALSE);
+  
+  /* if bit then unpack */
+  if (IS_BITFIELD(retype)) 
+    genPackBits(retype,right,"dptr",FPOINTER);
+  else {
+    size = AOP_SIZE(right);
+    offset = 0 ;
+    
+    while (size--) {
+      char *l = aopGet(AOP(right),offset++,FALSE,FALSE);
+      MOVA(l);
+      pic14_emitcode("movx","@dptr,a");
+      if (size)
+        pic14_emitcode("inc","dptr");
+    }
+  }
+  
+  freeAsmop(right,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
 /* genGenPointerSet - set value from generic pointer space         */
 /*-----------------------------------------------------------------*/
 static void genGenPointerSet (operand *right,
-                                                         operand *result, iCode *ic)
-{
-       int size, offset ;
-       sym_link *retype = getSpec(operandType(right));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp(result,ic,FALSE);
-       aopOp(right,ic,FALSE);
-       size = AOP_SIZE(right);
-       
-       DEBUGpic14_AopType(__LINE__,NULL,right,result);
-       
-       /* if the operand is already in dptr 
-       then we do nothing else we move the value to dptr */
-       if (AOP_TYPE(result) != AOP_STR) {
-               /* if this is remateriazable */
-               if (AOP_TYPE(result) == AOP_IMMD) {
-                       pic14_emitcode("mov","dptr,%s",aopGet(AOP(result),0,TRUE,FALSE));
-                       pic14_emitcode("mov","b,%s + 1",aopGet(AOP(result),0,TRUE,FALSE));
-               }
-               else { /* we need to get it byte by byte */
-                       //char *l = aopGet(AOP(result),0,FALSE,FALSE);
-                       size = AOP_SIZE(right);
-                       offset = 0 ;
-                       
-                       /* hack hack! see if this the FSR. If so don't load W */
-                       if(AOP_TYPE(right) != AOP_ACC) {
-                               
-                               
-                               emitpcode(POC_MOVFW,popGet(AOP(result),0));
-                               emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
-                               
-                               if(AOP_SIZE(result) > 1) {
-                                       emitpcode(POC_BCF,  popCopyGPR2Bit(PCOP(&pc_status),PIC_IRP_BIT));
-                                       emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(result),1,FALSE,FALSE),0,0));
-                                       emitpcode(POC_BSF,  popCopyGPR2Bit(PCOP(&pc_status),PIC_IRP_BIT));
-                                       
-                               }
-                               
-                               //if(size==2)
-                               //emitpcode(POC_DECF,popCopyReg(&pc_fsr));
-                               //if(size==4) {
-                               //  emitpcode(POC_MOVLW,popGetLit(0xfd));
-                               //  emitpcode(POC_ADDWF,popCopyReg(&pc_fsr));
-                               //}
-                               
-                               while(size--) {
-                                       emitpcode(POC_MOVFW,popGet(AOP(right),offset++));
-                                       emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
-                                       
-                                       if(size)
-                                               emitpcode(POC_INCF,popCopyReg(&pc_fsr));
-                               }
-                               
-                               
-                               goto release;
-                       
-                       
-                       if(aopIdx(AOP(result),0) != 4) {
-                               
-                               emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
-                               goto release;
-                       }
-                       
-                       emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
-                       goto release;
-                       
-               }
-       }
-       /* so dptr know contains the address */
-       
-       
-       /* if bit then unpack */
-       if (IS_BITFIELD(retype)) 
-               genPackBits(retype,right,"dptr",GPOINTER);
-       else {
-               size = AOP_SIZE(right);
-               offset = 0 ;
-               
-               DEBUGpic14_emitcode ("; ***","%s  %d size=%d",__FUNCTION__,__LINE__,size);
-               
-               while (size--) {
-                       
-                       emitpcode(POC_MOVFW,popGet(AOP(result),offset));
-                       emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
-                       
-                       if (AOP_TYPE(right) == AOP_LIT) 
-                               emitpcode(POC_MOVLW, popGet(AOP(right),offset));
-                       else
-                               emitpcode(POC_MOVFW, popGet(AOP(right),offset));
-                       
-                       emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
-                       
-                       offset++;
-               }
-       }
-       
+                operand *result, iCode *ic)
+{
+  int size, offset ;
+  sym_link *retype = getSpec(operandType(right));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp(result,ic,FALSE);
+  aopOp(right,ic,FALSE);
+  size = AOP_SIZE(right);
+  
+  DEBUGpic14_AopType(__LINE__,NULL,right,result);
+  
+  /* if the operand is already in dptr 
+  then we do nothing else we move the value to dptr */
+  if (AOP_TYPE(result) != AOP_STR) {
+    /* if this is remateriazable */
+    if (AOP_TYPE(result) == AOP_IMMD) {
+      pic14_emitcode("mov","dptr,%s",aopGet(AOP(result),0,TRUE,FALSE));
+      pic14_emitcode("mov","b,%s + 1",aopGet(AOP(result),0,TRUE,FALSE));
+    }
+    else { /* we need to get it byte by byte */
+      //char *l = aopGet(AOP(result),0,FALSE,FALSE);
+      size = AOP_SIZE(right);
+      offset = 0 ;
+      
+      /* hack hack! see if this the FSR. If so don't load W */
+      if(AOP_TYPE(right) != AOP_ACC) {
+        
+        
+        emitpcode(POC_MOVFW,popGet(AOP(result),0));
+        emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
+        
+        if(AOP_SIZE(result) > 1) {
+          emitpcode(POC_BCF,  popCopyGPR2Bit(PCOP(&pc_status),PIC_IRP_BIT));
+          emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(result),1,FALSE,FALSE),0,0));
+          emitpcode(POC_BSF,  popCopyGPR2Bit(PCOP(&pc_status),PIC_IRP_BIT));
+          
+        }
+        
+        //if(size==2)
+        //emitpcode(POC_DECF,popCopyReg(&pc_fsr));
+        //if(size==4) {
+        //  emitpcode(POC_MOVLW,popGetLit(0xfd));
+        //  emitpcode(POC_ADDWF,popCopyReg(&pc_fsr));
+        //}
+        
+        while(size--) {
+          emitpcode(POC_MOVFW,popGet(AOP(right),offset++));
+          emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
+          
+          if(size)
+            emitpcode(POC_INCF,popCopyReg(&pc_fsr));
+        }
+        
+        
+        goto release;
+      } 
+      
+      if(aopIdx(AOP(result),0) != 4) {
+        
+        emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
+        goto release;
+      }
+      
+      emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
+      goto release;
+      
+    }
+  }
+  /* so dptr know contains the address */
+  
+  
+  /* if bit then unpack */
+  if (IS_BITFIELD(retype)) 
+    genPackBits(retype,right,"dptr",GPOINTER);
+  else {
+    size = AOP_SIZE(right);
+    offset = 0 ;
+    
+    DEBUGpic14_emitcode ("; ***","%s  %d size=%d",__FUNCTION__,__LINE__,size);
+    
+    while (size--) {
+      
+      emitpcode(POC_MOVFW,popGet(AOP(result),offset));
+      emitpcode(POC_MOVWF,popCopyReg(&pc_fsr));
+      
+      if (AOP_TYPE(right) == AOP_LIT) 
+        emitpcode(POC_MOVLW, popGet(AOP(right),offset));
+      else
+        emitpcode(POC_MOVFW, popGet(AOP(right),offset));
+      
+      emitpcode(POC_MOVWF,popCopyReg(&pc_indf));
+      
+      offset++;
+    }
+  }
+  
 release:
-       freeAsmop(right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -8992,68 +8991,68 @@ release:
 /*-----------------------------------------------------------------*/
 static void genPointerSet (iCode *ic)
 {    
-       operand *right, *result ;
-       sym_link *type, *etype;
-       int p_type;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       right = IC_RIGHT(ic);
-       result = IC_RESULT(ic) ;
-       
-       /* depending on the type of pointer we need to
-       move it to the correct pointer register */
-       type = operandType(result);
-       etype = getSpec(type);
-       /* if left is of type of pointer then it is simple */
-       if (IS_PTR(type) && !IS_FUNC(type->next)) {
-               p_type = DCL_TYPE(type);
-       }
-       else {
-               /* we have to go by the storage class */
-               p_type = PTR_TYPE(SPEC_OCLS(etype));
-               
-               /*      if (SPEC_OCLS(etype)->codesp ) { */
-               /*          p_type = CPOINTER ;  */
-               /*      } */
-               /*      else */
-               /*          if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged) */
-               /*              p_type = FPOINTER ; */
-               /*          else */
-               /*              if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged) */
-               /*                  p_type = PPOINTER ; */
-               /*              else */
-               /*                  if (SPEC_OCLS(etype) == idata ) */
-               /*                      p_type = IPOINTER ; */
-               /*                  else */
-               /*                      p_type = POINTER ; */
-       }
-       
-       /* now that we have the pointer type we assign
-       the pointer values */
-       switch (p_type) {
-               
-       case POINTER:
-       case IPOINTER:
-               genNearPointerSet (right,result,ic);
-               break;
-               
-       case PPOINTER:
-               genPagedPointerSet (right,result,ic);
-               break;
-               
-       case FPOINTER:
-               genFarPointerSet (right,result,ic);
-               break;
-               
-       case GPOINTER:
-               genGenPointerSet (right,result,ic);
-               break;
-               
-       default:
-               werror (E_INTERNAL_ERROR, __FILE__, __LINE__, 
-                       "genPointerSet: illegal pointer type");
-       }
+  operand *right, *result ;
+  sym_link *type, *etype;
+  int p_type;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  right = IC_RIGHT(ic);
+  result = IC_RESULT(ic) ;
+  
+  /* depending on the type of pointer we need to
+  move it to the correct pointer register */
+  type = operandType(result);
+  etype = getSpec(type);
+  /* if left is of type of pointer then it is simple */
+  if (IS_PTR(type) && !IS_FUNC(type->next)) {
+    p_type = DCL_TYPE(type);
+  }
+  else {
+    /* we have to go by the storage class */
+    p_type = PTR_TYPE(SPEC_OCLS(etype));
+    
+    /*  if (SPEC_OCLS(etype)->codesp ) { */
+    /*      p_type = CPOINTER ;  */
+    /*  } */
+    /*  else */
+    /*      if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged) */
+    /*    p_type = FPOINTER ; */
+    /*      else */
+    /*    if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged) */
+    /*        p_type = PPOINTER ; */
+    /*    else */
+    /*        if (SPEC_OCLS(etype) == idata ) */
+    /*      p_type = IPOINTER ; */
+    /*        else */
+    /*      p_type = POINTER ; */
+  }
+  
+  /* now that we have the pointer type we assign
+  the pointer values */
+  switch (p_type) {
+    
+  case POINTER:
+  case IPOINTER:
+    genNearPointerSet (right,result,ic);
+    break;
+    
+  case PPOINTER:
+    genPagedPointerSet (right,result,ic);
+    break;
+    
+  case FPOINTER:
+    genFarPointerSet (right,result,ic);
+    break;
+    
+  case GPOINTER:
+    genGenPointerSet (right,result,ic);
+    break;
+    
+  default:
+    werror (E_INTERNAL_ERROR, __FILE__, __LINE__, 
+      "genPointerSet: illegal pointer type");
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -9061,39 +9060,39 @@ static void genPointerSet (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genIfx (iCode *ic, iCode *popIc)
 {
-       operand *cond = IC_COND(ic);
-       int isbit =0;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp(cond,ic,FALSE);
-       
-       /* get the value into acc */
-       if (AOP_TYPE(cond) != AOP_CRY)
-               pic14_toBoolean(cond);
-       else
-               isbit = 1;
-       /* the result is now in the accumulator */
-       freeAsmop(cond,NULL,ic,TRUE);
-       
-       /* if there was something to be popped then do it */
-       if (popIc)
-               genIpop(popIc);
-       
-       /* if the condition is  a bit variable */
-       if (isbit && IS_ITEMP(cond) && 
-               SPIL_LOC(cond)) {
-               genIfxJump(ic,SPIL_LOC(cond)->rname);
-               DEBUGpic14_emitcode ("; isbit  SPIL_LOC","%s",SPIL_LOC(cond)->rname);
-       }
-       else {
-               if (isbit && !IS_ITEMP(cond))
-                       genIfxJump(ic,OP_SYMBOL(cond)->rname);
-               else
-                       genIfxJump(ic,"a");
-       }
-       ic->generated = 1;
-       
+  operand *cond = IC_COND(ic);
+  int isbit =0;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp(cond,ic,FALSE);
+  
+  /* get the value into acc */
+  if (AOP_TYPE(cond) != AOP_CRY)
+    pic14_toBoolean(cond);
+  else
+    isbit = 1;
+  /* the result is now in the accumulator */
+  freeAsmop(cond,NULL,ic,TRUE);
+  
+  /* if there was something to be popped then do it */
+  if (popIc)
+    genIpop(popIc);
+  
+  /* if the condition is  a bit variable */
+  if (isbit && IS_ITEMP(cond) && 
+    SPIL_LOC(cond)) {
+    genIfxJump(ic,SPIL_LOC(cond)->rname);
+    DEBUGpic14_emitcode ("; isbit  SPIL_LOC","%s",SPIL_LOC(cond)->rname);
+  }
+  else {
+    if (isbit && !IS_ITEMP(cond))
+      genIfxJump(ic,OP_SYMBOL(cond)->rname);
+    else
+      genIfxJump(ic,"a");
+  }
+  ic->generated = 1;
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -9101,38 +9100,38 @@ static void genIfx (iCode *ic, iCode *popIc)
 /*-----------------------------------------------------------------*/
 static void genAddrOf (iCode *ic)
 {
-       operand *right, *result, *left;
-       int size, offset ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       
-       //aopOp(IC_RESULT(ic),ic,FALSE);
-       
-       aopOp((left=IC_LEFT(ic)),ic,FALSE);
-       aopOp((right=IC_RIGHT(ic)),ic,FALSE);
-       aopOp((result=IC_RESULT(ic)),ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,left,right,result);
-       
-       size = AOP_SIZE(IC_RESULT(ic));
-       offset = 0;
-       
-       while (size--) {
-               /* fixing bug #863624, reported from (errolv) */
-               emitpcode(POC_MOVLW, popGetImmd(OP_SYMBOL(left)->rname, offset, 0, IS_FUNC(OP_SYM_TYPE(left))));
-               emitpcode(POC_MOVWF, popGet(AOP(result), offset));
-               
+  operand *right, *result, *left;
+  int size, offset ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  
+  //aopOp(IC_RESULT(ic),ic,FALSE);
+  
+  aopOp((left=IC_LEFT(ic)),ic,FALSE);
+  aopOp((right=IC_RIGHT(ic)),ic,FALSE);
+  aopOp((result=IC_RESULT(ic)),ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,left,right,result);
+  
+  size = AOP_SIZE(IC_RESULT(ic));
+  offset = 0;
+  
+  while (size--) {
+    /* fixing bug #863624, reported from (errolv) */
+    emitpcode(POC_MOVLW, popGetImmd(OP_SYMBOL(left)->rname, offset, 0, IS_FUNC(OP_SYM_TYPE(left))));
+    emitpcode(POC_MOVWF, popGet(AOP(result), offset));
+    
 #if 0
-               emitpcode(POC_MOVLW, popGet(AOP(left),offset));
-               emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+    emitpcode(POC_MOVLW, popGet(AOP(left),offset));
+    emitpcode(POC_MOVWF, popGet(AOP(result),offset));
 #endif
-               offset++;
-       }
-       
-       freeAsmop(left,NULL,ic,FALSE);
-       freeAsmop(result,NULL,ic,TRUE);
-       
+    offset++;
+  }
+  
+  freeAsmop(left,NULL,ic,FALSE);
+  freeAsmop(result,NULL,ic,TRUE);
+  
 }
 
 #if 0
@@ -9141,26 +9140,26 @@ static void genAddrOf (iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genFarFarAssign (operand *result, operand *right, iCode *ic)
 {
-       int size = AOP_SIZE(right);
-       int offset = 0;
-       char *l ;
-       /* first push the right side on to the stack */
-       while (size--) {
-               l = aopGet(AOP(right),offset++,FALSE,FALSE);
-               MOVA(l);
-               pic14_emitcode ("push","acc");
-       }
-       
-       freeAsmop(right,NULL,ic,FALSE);
-       /* now assign DPTR to result */
-       aopOp(result,ic,FALSE);
-       size = AOP_SIZE(result);
-       while (size--) {
-               pic14_emitcode ("pop","acc");
-               aopPut(AOP(result),"a",--offset);
-       }
-       freeAsmop(result,NULL,ic,FALSE);
-       
+  int size = AOP_SIZE(right);
+  int offset = 0;
+  char *l ;
+  /* first push the right side on to the stack */
+  while (size--) {
+    l = aopGet(AOP(right),offset++,FALSE,FALSE);
+    MOVA(l);
+    pic14_emitcode ("push","acc");
+  }
+  
+  freeAsmop(right,NULL,ic,FALSE);
+  /* now assign DPTR to result */
+  aopOp(result,ic,FALSE);
+  size = AOP_SIZE(result);
+  while (size--) {
+    pic14_emitcode ("pop","acc");
+    aopPut(AOP(result),"a",--offset);
+  }
+  freeAsmop(result,NULL,ic,FALSE);
+  
 }
 #endif
 
@@ -9169,126 +9168,126 @@ static void genFarFarAssign (operand *result, operand *right, iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genAssign (iCode *ic)
 {
-       operand *result, *right;
-       int size, offset,know_W;
-       unsigned long lit = 0L;
-       
-       result = IC_RESULT(ic);
-       right  = IC_RIGHT(ic) ;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       /* if they are the same */
-       if (operandsEqu (IC_RESULT(ic),IC_RIGHT(ic)))
-               return ;
-       
-       aopOp(right,ic,FALSE);
-       aopOp(result,ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,NULL,right,result);
-       
-       /* if they are the same registers */
-       if (pic14_sameRegs(AOP(right),AOP(result)))
-               goto release;
-       
-       /* if the result is a bit */
-       if (AOP_TYPE(result) == AOP_CRY) {
-               
-       /* if the right size is a literal then
-               we know what the value is */
-               if (AOP_TYPE(right) == AOP_LIT) {
-                       
-                       emitpcode(  ( ((int) operandLitValue(right)) ? POC_BSF : POC_BCF),
-                               popGet(AOP(result),0));
-                       
-                       if (((int) operandLitValue(right))) 
-                               pic14_emitcode("bsf","(%s >> 3),(%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       else
-                               pic14_emitcode("bcf","(%s >> 3),(%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       goto release;
-               }
-               
-               /* the right is also a bit variable */
-               if (AOP_TYPE(right) == AOP_CRY) {
-                       emitpcode(POC_BCF,    popGet(AOP(result),0));
-                       emitpcode(POC_BTFSC,  popGet(AOP(right),0));
-                       emitpcode(POC_BSF,    popGet(AOP(result),0));
-                       
-                       pic14_emitcode("bcf","(%s >> 3),(%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       pic14_emitcode("btfsc","(%s >> 3),(%s & 7)",
-                               AOP(right)->aopu.aop_dir,
-                               AOP(right)->aopu.aop_dir);
-                       pic14_emitcode("bsf","(%s >> 3),(%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       goto release ;
-               }
-               
-               /* we need to or */
-               emitpcode(POC_BCF,    popGet(AOP(result),0));
-               pic14_toBoolean(right);
-               emitSKPZ;
-               emitpcode(POC_BSF,    popGet(AOP(result),0));
-               //aopPut(AOP(result),"a",0);
-               goto release ;
-       }
-       
-       /* bit variables done */
-       /* general case */
-       size = AOP_SIZE(result);
-       offset = 0 ;
-       if(AOP_TYPE(right) == AOP_LIT)
-               lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
-       
-       if( AOP_TYPE(right) == AOP_DIR  && (AOP_TYPE(result) == AOP_REG) && size==1)  {
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if(aopIdx(AOP(result),0) == 4) {
-                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                       emitpcode(POC_MOVFW, popGet(AOP(right),offset));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-                       goto release;
-               } else
-                       DEBUGpic14_emitcode ("; WARNING","%s  %d ignoring register storage",__FUNCTION__,__LINE__);
-       }
-       
-       know_W=-1;
-       while (size--) {
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if(AOP_TYPE(right) == AOP_LIT) {
-                       if(lit&0xff) {
-                               if(know_W != (int)(lit&0xff))
-                                       emitpcode(POC_MOVLW,popGetLit(lit&0xff));
-                               know_W = lit&0xff;
-                               emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-                       } else
-                               emitpcode(POC_CLRF, popGet(AOP(result),offset));
-                       
-                       lit >>= 8;
-                       
-               } else if (AOP_TYPE(right) == AOP_CRY) {
-                       emitpcode(POC_CLRF, popGet(AOP(result),offset));
-                       if(offset == 0) {
-                               emitpcode(POC_BTFSS, popGet(AOP(right),0));
-                               emitpcode(POC_INCF, popGet(AOP(result),0));
-                       }
-               } else {
-                       mov2w (AOP(right), offset);
-                       emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-               }
-               
-               offset++;
-       }
-       
-       
+  operand *result, *right;
+  int size, offset,know_W;
+  unsigned long lit = 0L;
+  
+  result = IC_RESULT(ic);
+  right  = IC_RIGHT(ic) ;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  /* if they are the same */
+  if (operandsEqu (IC_RESULT(ic),IC_RIGHT(ic)))
+    return ;
+  
+  aopOp(right,ic,FALSE);
+  aopOp(result,ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,NULL,right,result);
+  
+  /* if they are the same registers */
+  if (pic14_sameRegs(AOP(right),AOP(result)))
+    goto release;
+  
+  /* if the result is a bit */
+  if (AOP_TYPE(result) == AOP_CRY) {
+    
+  /* if the right size is a literal then
+    we know what the value is */
+    if (AOP_TYPE(right) == AOP_LIT) {
+      
+      emitpcode(  ( ((int) operandLitValue(right)) ? POC_BSF : POC_BCF),
+        popGet(AOP(result),0));
+      
+      if (((int) operandLitValue(right))) 
+        pic14_emitcode("bsf","(%s >> 3),(%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      else
+        pic14_emitcode("bcf","(%s >> 3),(%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      goto release;
+    }
+    
+    /* the right is also a bit variable */
+    if (AOP_TYPE(right) == AOP_CRY) {
+      emitpcode(POC_BCF,    popGet(AOP(result),0));
+      emitpcode(POC_BTFSC,  popGet(AOP(right),0));
+      emitpcode(POC_BSF,    popGet(AOP(result),0));
+      
+      pic14_emitcode("bcf","(%s >> 3),(%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      pic14_emitcode("btfsc","(%s >> 3),(%s & 7)",
+        AOP(right)->aopu.aop_dir,
+        AOP(right)->aopu.aop_dir);
+      pic14_emitcode("bsf","(%s >> 3),(%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      goto release ;
+    }
+    
+    /* we need to or */
+    emitpcode(POC_BCF,    popGet(AOP(result),0));
+    pic14_toBoolean(right);
+    emitSKPZ;
+    emitpcode(POC_BSF,    popGet(AOP(result),0));
+    //aopPut(AOP(result),"a",0);
+    goto release ;
+  }
+  
+  /* bit variables done */
+  /* general case */
+  size = AOP_SIZE(result);
+  offset = 0 ;
+  if(AOP_TYPE(right) == AOP_LIT)
+    lit = (unsigned long)floatFromVal(AOP(right)->aopu.aop_lit);
+  
+  if( AOP_TYPE(right) == AOP_DIR  && (AOP_TYPE(result) == AOP_REG) && size==1)  {
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if(aopIdx(AOP(result),0) == 4) {
+      DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+      emitpcode(POC_MOVFW, popGet(AOP(right),offset));
+      emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+      goto release;
+    } else
+      DEBUGpic14_emitcode ("; WARNING","%s  %d ignoring register storage",__FUNCTION__,__LINE__);
+  }
+  
+  know_W=-1;
+  while (size--) {
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if(AOP_TYPE(right) == AOP_LIT) {
+      if(lit&0xff) {
+        if(know_W != (int)(lit&0xff))
+          emitpcode(POC_MOVLW,popGetLit(lit&0xff));
+        know_W = lit&0xff;
+        emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+      } else
+        emitpcode(POC_CLRF, popGet(AOP(result),offset));
+      
+      lit >>= 8;
+      
+    } else if (AOP_TYPE(right) == AOP_CRY) {
+      emitpcode(POC_CLRF, popGet(AOP(result),offset));
+      if(offset == 0) {
+        emitpcode(POC_BTFSS, popGet(AOP(right),0));
+        emitpcode(POC_INCF, popGet(AOP(result),0));
+      }
+    } else {
+      mov2w (AOP(right), offset);
+      emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+    }
+    
+    offset++;
+  }
+  
+  
 release:
-       freeAsmop (right,NULL,ic,FALSE);
-       freeAsmop (result,NULL,ic,TRUE);
+  freeAsmop (right,NULL,ic,FALSE);
+  freeAsmop (result,NULL,ic,TRUE);
 }   
 
 /*-----------------------------------------------------------------*/
@@ -9296,43 +9295,43 @@ release:
 /*-----------------------------------------------------------------*/
 static void genJumpTab (iCode *ic)
 {
-       symbol *jtab;
-       char *l;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp(IC_JTCOND(ic),ic,FALSE);
-       /* get the condition into accumulator */
-       l = aopGet(AOP(IC_JTCOND(ic)),0,FALSE,FALSE);
-       MOVA(l);
-       /* multiply by three */
-       pic14_emitcode("add","a,acc");
-       pic14_emitcode("add","a,%s",aopGet(AOP(IC_JTCOND(ic)),0,FALSE,FALSE));
-       
-       jtab = newiTempLabel(NULL);
-       pic14_emitcode("mov","dptr,#%05d_DS_",jtab->key+100);
-       pic14_emitcode("jmp","@a+dptr");
-       pic14_emitcode("","%05d_DS_:",jtab->key+100);
-       
-       emitpcode(POC_MOVLW, popGetHighLabel(jtab->key));
-       emitpcode(POC_MOVWF, popCopyReg(&pc_pclath));
-       emitpcode(POC_MOVLW, popGetLabel(jtab->key));
-       emitpcode(POC_ADDFW, popGet(AOP(IC_JTCOND(ic)),0));
-       emitSKPNC;
-       emitpcode(POC_INCF, popCopyReg(&pc_pclath));
-       emitpcode(POC_MOVWF, popCopyReg(&pc_pcl));
-       emitpLabel(jtab->key);
-       
-       freeAsmop(IC_JTCOND(ic),NULL,ic,TRUE);
-       
-       /* now generate the jump labels */
-       for (jtab = setFirstItem(IC_JTLABELS(ic)) ; jtab;
-       jtab = setNextItem(IC_JTLABELS(ic))) {
-               pic14_emitcode("ljmp","%05d_DS_",jtab->key+100);
-               emitpcode(POC_GOTO,popGetLabel(jtab->key));
-               
-       }
-       
+  symbol *jtab;
+  char *l;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp(IC_JTCOND(ic),ic,FALSE);
+  /* get the condition into accumulator */
+  l = aopGet(AOP(IC_JTCOND(ic)),0,FALSE,FALSE);
+  MOVA(l);
+  /* multiply by three */
+  pic14_emitcode("add","a,acc");
+  pic14_emitcode("add","a,%s",aopGet(AOP(IC_JTCOND(ic)),0,FALSE,FALSE));
+  
+  jtab = newiTempLabel(NULL);
+  pic14_emitcode("mov","dptr,#%05d_DS_",jtab->key+100);
+  pic14_emitcode("jmp","@a+dptr");
+  pic14_emitcode("","%05d_DS_:",jtab->key+100);
+  
+  emitpcode(POC_MOVLW, popGetHighLabel(jtab->key));
+  emitpcode(POC_MOVWF, popCopyReg(&pc_pclath));
+  emitpcode(POC_MOVLW, popGetLabel(jtab->key));
+  emitpcode(POC_ADDFW, popGet(AOP(IC_JTCOND(ic)),0));
+  emitSKPNC;
+  emitpcode(POC_INCF, popCopyReg(&pc_pclath));
+  emitpcode(POC_MOVWF, popCopyReg(&pc_pcl));
+  emitpLabel(jtab->key);
+  
+  freeAsmop(IC_JTCOND(ic),NULL,ic,TRUE);
+  
+  /* now generate the jump labels */
+  for (jtab = setFirstItem(IC_JTLABELS(ic)) ; jtab;
+  jtab = setNextItem(IC_JTLABELS(ic))) {
+    pic14_emitcode("ljmp","%05d_DS_",jtab->key+100);
+    emitpcode(POC_GOTO,popGetLabel(jtab->key));
+    
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -9349,121 +9348,121 @@ iCode tree, I'm going to not be using this routine :(.
 static int genMixedOperation (iCode *ic)
 {
 #if 0
-       operand *result = IC_RESULT(ic);
-       sym_link *ctype = operandType(IC_LEFT(ic));
-       operand *right = IC_RIGHT(ic);
-       int ret = 0;
-       int big,small;
-       int offset;
-       
-       iCode *nextic;
-       operand *nextright=NULL,*nextleft=NULL,*nextresult=NULL;
-       
-       pic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       nextic = ic->next;
-       if(!nextic)
-               return 0;
-       
-       nextright = IC_RIGHT(nextic);
-       nextleft  = IC_LEFT(nextic);
-       nextresult = IC_RESULT(nextic);
-       
-       aopOp(right,ic,FALSE);
-       aopOp(result,ic,FALSE);
-       aopOp(nextright,  nextic, FALSE);
-       aopOp(nextleft,   nextic, FALSE);
-       aopOp(nextresult, nextic, FALSE);
-       
-       if (pic14_sameRegs(AOP(IC_RESULT(ic)), AOP(IC_RIGHT(nextic)))) {
-               
-               operand *t = right;
-               right = nextright;
-               nextright = t; 
-               
-               pic14_emitcode(";remove right +","");
-               
-       } else   if (pic14_sameRegs(AOP(IC_RESULT(ic)), AOP(IC_LEFT(nextic)))) {
-       /*
-       operand *t = right;
-       right = nextleft;
-       nextleft = t; 
-               */
-               pic14_emitcode(";remove left +","");
-       } else
-               return 0;
-       
-       big = AOP_SIZE(nextleft);
-       small = AOP_SIZE(nextright);
-       
-       switch(nextic->op) {
-               
-       case '+':
-               pic14_emitcode(";optimize a +","");
-               /* if unsigned or not an integral type */
-               if (AOP_TYPE(IC_LEFT(nextic)) == AOP_CRY) {
-                       pic14_emitcode(";add a bit to something","");
-               } else {
-                       
-                       pic14_emitcode("movf","%s,w",AOP(nextright)->aopu.aop_dir);
-                       
-                       if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ) {
-                               pic14_emitcode("addwf","%s,w",AOP(nextleft)->aopu.aop_dir);
-                               pic14_emitcode("movwf","%s",aopGet(AOP(IC_RESULT(nextic)),0,FALSE,FALSE));
-                       } else
-                               pic14_emitcode("addwf","%s,f",AOP(nextleft)->aopu.aop_dir);
-                       
-                       offset = 0;
-                       while(--big) {
-                               
-                               offset++;
-                               
-                               if(--small) {
-                                       if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ){
-                                               pic14_emitcode("movf","%s,w",aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
-                                               pic14_emitcode("movwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
-                                       }
-                                       
-                                       pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
-                                       emitSKPNC;
-                                       pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                               AOP(IC_RIGHT(nextic))->aopu.aop_dir,
-                                               AOP(IC_RIGHT(nextic))->aopu.aop_dir);
-                                       pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
-                                       pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE));
-                                       
-                               } else {
-                                       pic14_emitcode("rlf","known_zero,w");
-                                       
-                                       /*
-                                       if right is signed
-                                       btfsc  right,7
-                                       addlw ff
-                                       */
-                                       if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ){
-                                               pic14_emitcode("addwf","%s,w",aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
-                                               pic14_emitcode("movwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
-                                       } else {
-                                               pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
-                                       }
-                               }
-                       }
-                       ret = 1;
-               }
-       }
-       ret = 1;
-       
+  operand *result = IC_RESULT(ic);
+  sym_link *ctype = operandType(IC_LEFT(ic));
+  operand *right = IC_RIGHT(ic);
+  int ret = 0;
+  int big,small;
+  int offset;
+  
+  iCode *nextic;
+  operand *nextright=NULL,*nextleft=NULL,*nextresult=NULL;
+  
+  pic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  nextic = ic->next;
+  if(!nextic)
+    return 0;
+  
+  nextright = IC_RIGHT(nextic);
+  nextleft  = IC_LEFT(nextic);
+  nextresult = IC_RESULT(nextic);
+  
+  aopOp(right,ic,FALSE);
+  aopOp(result,ic,FALSE);
+  aopOp(nextright,  nextic, FALSE);
+  aopOp(nextleft,   nextic, FALSE);
+  aopOp(nextresult, nextic, FALSE);
+  
+  if (pic14_sameRegs(AOP(IC_RESULT(ic)), AOP(IC_RIGHT(nextic)))) {
+    
+    operand *t = right;
+    right = nextright;
+    nextright = t; 
+    
+    pic14_emitcode(";remove right +","");
+    
+  } else   if (pic14_sameRegs(AOP(IC_RESULT(ic)), AOP(IC_LEFT(nextic)))) {
+  /*
+  operand *t = right;
+  right = nextleft;
+  nextleft = t; 
+    */
+    pic14_emitcode(";remove left +","");
+  } else
+    return 0;
+  
+  big = AOP_SIZE(nextleft);
+  small = AOP_SIZE(nextright);
+  
+  switch(nextic->op) {
+    
+  case '+':
+    pic14_emitcode(";optimize a +","");
+    /* if unsigned or not an integral type */
+    if (AOP_TYPE(IC_LEFT(nextic)) == AOP_CRY) {
+      pic14_emitcode(";add a bit to something","");
+    } else {
+      
+      pic14_emitcode("movf","%s,w",AOP(nextright)->aopu.aop_dir);
+      
+      if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ) {
+        pic14_emitcode("addwf","%s,w",AOP(nextleft)->aopu.aop_dir);
+        pic14_emitcode("movwf","%s",aopGet(AOP(IC_RESULT(nextic)),0,FALSE,FALSE));
+      } else
+        pic14_emitcode("addwf","%s,f",AOP(nextleft)->aopu.aop_dir);
+      
+      offset = 0;
+      while(--big) {
+        
+        offset++;
+        
+        if(--small) {
+          if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ){
+            pic14_emitcode("movf","%s,w",aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
+            pic14_emitcode("movwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
+          }
+          
+          pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
+          emitSKPNC;
+          pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+            AOP(IC_RIGHT(nextic))->aopu.aop_dir,
+            AOP(IC_RIGHT(nextic))->aopu.aop_dir);
+          pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
+          pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE));
+          
+        } else {
+          pic14_emitcode("rlf","known_zero,w");
+          
+          /*
+          if right is signed
+          btfsc  right,7
+          addlw ff
+          */
+          if (!pic14_sameRegs(AOP(IC_LEFT(nextic)), AOP(IC_RESULT(nextic))) ){
+            pic14_emitcode("addwf","%s,w",aopGet(AOP(IC_LEFT(nextic)),offset,FALSE,FALSE));
+            pic14_emitcode("movwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
+          } else {
+            pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(nextic)),offset,FALSE,FALSE) );
+          }
+        }
+      }
+      ret = 1;
+    }
+  }
+  ret = 1;
+  
 release:
-       freeAsmop(right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       freeAsmop(nextright,NULL,ic,TRUE);
-       freeAsmop(nextleft,NULL,ic,TRUE);
-       if(ret)
-               nextic->generated = 1;
-       
-       return ret;
+  freeAsmop(right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  freeAsmop(nextright,NULL,ic,TRUE);
+  freeAsmop(nextleft,NULL,ic,TRUE);
+  if(ret)
+    nextic->generated = 1;
+  
+  return ret;
 #else
-       return 0;
+  return 0;
 #endif
 }
 /*-----------------------------------------------------------------*/
@@ -9471,274 +9470,274 @@ release:
 /*-----------------------------------------------------------------*/
 static void genCast (iCode *ic)
 {
-       operand *result = IC_RESULT(ic);
-       sym_link *ctype = operandType(IC_LEFT(ic));
-       sym_link *rtype = operandType(IC_RIGHT(ic));
-       operand *right = IC_RIGHT(ic);
-       int size, offset ;
-       
-       DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* if they are equivalent then do nothing */
-       if (operandsEqu(IC_RESULT(ic),IC_RIGHT(ic)))
-               return ;
-       
-       aopOp(right,ic,FALSE) ;
-       aopOp(result,ic,FALSE);
-       
-       DEBUGpic14_AopType(__LINE__,NULL,right,result);
-       
-       /* if the result is a bit */
-       if (AOP_TYPE(result) == AOP_CRY) {
-       /* if the right size is a literal then
-               we know what the value is */
-               DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if (AOP_TYPE(right) == AOP_LIT) {
-                       
-                       emitpcode(  ( ((int) operandLitValue(right)) ? POC_BSF : POC_BCF),
-                               popGet(AOP(result),0));
-                       
-                       if (((int) operandLitValue(right))) 
-                               pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       else
-                               pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
-                               AOP(result)->aopu.aop_dir,
-                               AOP(result)->aopu.aop_dir);
-                       
-                       goto release;
-               }
-               
-               /* the right is also a bit variable */
-               if (AOP_TYPE(right) == AOP_CRY) {
-                       
-                       emitCLRC;
-                       emitpcode(POC_BTFSC,  popGet(AOP(right),0));
-                       
-                       pic14_emitcode("clrc","");
-                       pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                               AOP(right)->aopu.aop_dir,
-                               AOP(right)->aopu.aop_dir);
-                       aopPut(AOP(result),"c",0);
-                       goto release ;
-               }
-               
-               /* we need to or */
-               if (AOP_TYPE(right) == AOP_REG) {
-                       emitpcode(POC_BCF,    popGet(AOP(result),0));
-                       emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),0,0));
-                       emitpcode(POC_BSF,    popGet(AOP(result),0));
-               }
-               pic14_toBoolean(right);
-               aopPut(AOP(result),"a",0);
-               goto release ;
-       }
-       
-       if ((AOP_TYPE(right) == AOP_CRY) && (AOP_TYPE(result) == AOP_REG)) {
-               int offset = 1;
-               size = AOP_SIZE(result);
-               
-               DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-               
-               emitpcode(POC_CLRF,   popGet(AOP(result),0));
-               emitpcode(POC_BTFSC,  popGet(AOP(right),0));
-               emitpcode(POC_INCF,   popGet(AOP(result),0));
-               
-               while (size--)
-                       emitpcode(POC_CLRF,   popGet(AOP(result),offset++));
-               
-               goto release;
-       }
-       
-       /* if they are the same size : or less */
-       if (AOP_SIZE(result) <= AOP_SIZE(right)) {
-               
-               /* if they are in the same place */
-               if (pic14_sameRegs(AOP(right),AOP(result)))
-                       goto release;
-               
-               DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-               if (IS_PTR_CONST(rtype))
-                       DEBUGpic14_emitcode ("; ***","%d - right is const pointer",__LINE__);
-               if (IS_PTR_CONST(operandType(IC_RESULT(ic))))
-                       DEBUGpic14_emitcode ("; ***","%d - result is const pointer",__LINE__);
-               
-               if ((AOP_TYPE(right) == AOP_PCODE) && AOP(right)->aopu.pcop->type == PO_IMMEDIATE) {
-                       emitpcode(POC_MOVLW, popGet(AOP(right),0));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),0));
-                       emitpcode(POC_MOVLW, popGet(AOP(right),1));
-                       emitpcode(POC_MOVWF, popGet(AOP(result),1));
-                       if(AOP_SIZE(result) <2)
-                               fprintf(stderr,"%d -- result is not big enough to hold a ptr\n",__LINE__);
-                       
-               } else {
-                       
-                       /* if they in different places then copy */
-                       size = AOP_SIZE(result);
-                       offset = 0 ;
-                       while (size--) {
-                               emitpcode(POC_MOVFW, popGet(AOP(right),offset));
-                               emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-                               
-                               //aopPut(AOP(result),
-                               // aopGet(AOP(right),offset,FALSE,FALSE),
-                               // offset);
-                               
-                               offset++;
-                       }
-               }
-               goto release;
-       }
-       
-       
-       /* if the result is of type pointer */
-       if (IS_PTR(ctype)) {
-               
-               int p_type;
-               sym_link *type = operandType(right);
-               sym_link *etype = getSpec(type);
-               DEBUGpic14_emitcode("; ***","%s  %d - pointer cast",__FUNCTION__,__LINE__);
-               
-               /* pointer to generic pointer */
-               if (IS_GENPTR(ctype)) {
-                       char *l = zero;
-                       
-                       if (IS_PTR(type)) 
-                               p_type = DCL_TYPE(type);
-                       else {
-                               /* we have to go by the storage class */
-                               p_type = PTR_TYPE(SPEC_OCLS(etype));
-                               
-                               /*              if (SPEC_OCLS(etype)->codesp )  */
-                               /*                  p_type = CPOINTER ;  */
-                               /*              else */
-                               /*                  if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged) */
-                               /*                      p_type = FPOINTER ; */
-                               /*                  else */
-                               /*                      if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged) */
-                               /*                          p_type = PPOINTER; */
-                               /*                      else */
-                               /*                          if (SPEC_OCLS(etype) == idata ) */
-                               /*                              p_type = IPOINTER ; */
-                               /*                          else */
-                               /*                              p_type = POINTER ; */
-                       }
-                       
-                       /* the first two bytes are known */
-                       DEBUGpic14_emitcode("; ***","%s  %d - pointer cast2",__FUNCTION__,__LINE__);
-                       size = GPTRSIZE - 1; 
-                       offset = 0 ;
-                       while (size--) {
-                               if(offset < AOP_SIZE(right)) {
-                                       DEBUGpic14_emitcode("; ***","%s  %d - pointer cast3",__FUNCTION__,__LINE__);
-                                       if ((AOP_TYPE(right) == AOP_PCODE) && 
-                                               AOP(right)->aopu.pcop->type == PO_IMMEDIATE) {
-                                               emitpcode(POC_MOVLW, popGet(AOP(right),offset));
-                                               emitpcode(POC_MOVWF, popGet(AOP(result),offset));
-                                       } else { 
-                                               aopPut(AOP(result),
-                                                       aopGet(AOP(right),offset,FALSE,FALSE),
-                                                       offset);
-                                       }
-                               } else 
-                                       emitpcode(POC_CLRF,popGet(AOP(result),offset));
-                               offset++;
-                       }
-                       /* the last byte depending on type */
-                       switch (p_type) {
-                       case IPOINTER:
-                       case POINTER:
-                               emitpcode(POC_CLRF,popGet(AOP(result),GPTRSIZE - 1));
-                               break;
-                       case FPOINTER:
-                               pic14_emitcode(";BUG!? ","%d",__LINE__);
-                               l = one;
-                               break;
-                       case CPOINTER:
-                               pic14_emitcode(";BUG!? ","%d",__LINE__);
-                               l = "#0x02";
-                               break;                          
-                       case PPOINTER:
-                               pic14_emitcode(";BUG!? ","%d",__LINE__);
-                               l = "#0x03";
-                               break;
-                               
-                       default:
-                               /* this should never happen */
-                               werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                                       "got unknown pointer type");
-                               exit(1);
-                       }
-                       //aopPut(AOP(result),l, GPTRSIZE - 1);      
-                       goto release ;
-               }
-               
-               /* just copy the pointers */
-               size = AOP_SIZE(result);
-               offset = 0 ;
-               while (size--) {
-                       aopPut(AOP(result),
-                               aopGet(AOP(right),offset,FALSE,FALSE),
-                               offset);
-                       offset++;
-               }
-               goto release ;
-       }
-       
-       
-       
-       /* so we now know that the size of destination is greater
-       than the size of the source.
-       Now, if the next iCode is an operator then we might be
-       able to optimize the operation without performing a cast.
-       */
-       if(genMixedOperation(ic))
-               goto release;
-       
-       DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       /* we move to result for the size of source */
-       size = AOP_SIZE(right);
-       offset = 0 ;
-       while (size--) {
-               emitpcode(POC_MOVFW,   popGet(AOP(right),offset));
-               emitpcode(POC_MOVWF,   popGet(AOP(result),offset));
-               offset++;
-       }
-       
-       /* now depending on the sign of the destination */
-       size = AOP_SIZE(result) - AOP_SIZE(right);
-       /* if unsigned or not an integral type */
-       if (SPEC_USIGN(rtype) || !IS_SPEC(rtype)) {
-               while (size--)
-                       emitpcode(POC_CLRF,   popGet(AOP(result),offset++));
-       } else {
-               /* we need to extend the sign :{ */
-               
-               if(size == 1) {
-                       /* Save one instruction of casting char to int */
-                       emitpcode(POC_CLRF,   popGet(AOP(result),offset));
-                       emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),offset-1,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF,   popGet(AOP(result),offset));
-               } else {
-                       emitpcodeNULLop(POC_CLRW);
-                       
-                       if(offset)
-                               emitpcode(POC_BTFSC,   newpCodeOpBit(aopGet(AOP(right),offset-1,FALSE,FALSE),7,0));
-                       else
-                               emitpcode(POC_BTFSC,   newpCodeOpBit(aopGet(AOP(right),offset,FALSE,FALSE),7,0));
-                       
-                       emitpcode(POC_MOVLW,   popGetLit(0xff));
-                       
-                       while (size--)
-                               emitpcode(POC_MOVWF,   popGet(AOP(result),offset++));
-               }
-       }
-       
+  operand *result = IC_RESULT(ic);
+  sym_link *ctype = operandType(IC_LEFT(ic));
+  sym_link *rtype = operandType(IC_RIGHT(ic));
+  operand *right = IC_RIGHT(ic);
+  int size, offset ;
+  
+  DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* if they are equivalent then do nothing */
+  if (operandsEqu(IC_RESULT(ic),IC_RIGHT(ic)))
+    return ;
+  
+  aopOp(right,ic,FALSE) ;
+  aopOp(result,ic,FALSE);
+  
+  DEBUGpic14_AopType(__LINE__,NULL,right,result);
+  
+  /* if the result is a bit */
+  if (AOP_TYPE(result) == AOP_CRY) {
+  /* if the right size is a literal then
+    we know what the value is */
+    DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if (AOP_TYPE(right) == AOP_LIT) {
+      
+      emitpcode(  ( ((int) operandLitValue(right)) ? POC_BSF : POC_BCF),
+        popGet(AOP(result),0));
+      
+      if (((int) operandLitValue(right))) 
+        pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      else
+        pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
+        AOP(result)->aopu.aop_dir,
+        AOP(result)->aopu.aop_dir);
+      
+      goto release;
+    }
+    
+    /* the right is also a bit variable */
+    if (AOP_TYPE(right) == AOP_CRY) {
+      
+      emitCLRC;
+      emitpcode(POC_BTFSC,  popGet(AOP(right),0));
+      
+      pic14_emitcode("clrc","");
+      pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+        AOP(right)->aopu.aop_dir,
+        AOP(right)->aopu.aop_dir);
+      aopPut(AOP(result),"c",0);
+      goto release ;
+    }
+    
+    /* we need to or */
+    if (AOP_TYPE(right) == AOP_REG) {
+      emitpcode(POC_BCF,    popGet(AOP(result),0));
+      emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),0,0));
+      emitpcode(POC_BSF,    popGet(AOP(result),0));
+    }
+    pic14_toBoolean(right);
+    aopPut(AOP(result),"a",0);
+    goto release ;
+  }
+  
+  if ((AOP_TYPE(right) == AOP_CRY) && (AOP_TYPE(result) == AOP_REG)) {
+    int offset = 1;
+    size = AOP_SIZE(result);
+    
+    DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+    
+    emitpcode(POC_CLRF,   popGet(AOP(result),0));
+    emitpcode(POC_BTFSC,  popGet(AOP(right),0));
+    emitpcode(POC_INCF,   popGet(AOP(result),0));
+    
+    while (size--)
+      emitpcode(POC_CLRF,   popGet(AOP(result),offset++));
+    
+    goto release;
+  }
+  
+  /* if they are the same size : or less */
+  if (AOP_SIZE(result) <= AOP_SIZE(right)) {
+    
+    /* if they are in the same place */
+    if (pic14_sameRegs(AOP(right),AOP(result)))
+      goto release;
+    
+    DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+    if (IS_PTR_CONST(rtype))
+      DEBUGpic14_emitcode ("; ***","%d - right is const pointer",__LINE__);
+    if (IS_PTR_CONST(operandType(IC_RESULT(ic))))
+      DEBUGpic14_emitcode ("; ***","%d - result is const pointer",__LINE__);
+    
+    if ((AOP_TYPE(right) == AOP_PCODE) && AOP(right)->aopu.pcop->type == PO_IMMEDIATE) {
+      emitpcode(POC_MOVLW, popGet(AOP(right),0));
+      emitpcode(POC_MOVWF, popGet(AOP(result),0));
+      emitpcode(POC_MOVLW, popGet(AOP(right),1));
+      emitpcode(POC_MOVWF, popGet(AOP(result),1));
+      if(AOP_SIZE(result) <2)
+        fprintf(stderr,"%d -- result is not big enough to hold a ptr\n",__LINE__);
+      
+    } else {
+      
+      /* if they in different places then copy */
+      size = AOP_SIZE(result);
+      offset = 0 ;
+      while (size--) {
+        emitpcode(POC_MOVFW, popGet(AOP(right),offset));
+        emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+        
+        //aopPut(AOP(result),
+        // aopGet(AOP(right),offset,FALSE,FALSE),
+        // offset);
+        
+        offset++;
+      }
+    }
+    goto release;
+  }
+  
+  
+  /* if the result is of type pointer */
+  if (IS_PTR(ctype)) {
+    
+    int p_type;
+    sym_link *type = operandType(right);
+    sym_link *etype = getSpec(type);
+    DEBUGpic14_emitcode("; ***","%s  %d - pointer cast",__FUNCTION__,__LINE__);
+    
+    /* pointer to generic pointer */
+    if (IS_GENPTR(ctype)) {
+      char *l = zero;
+      
+      if (IS_PTR(type)) 
+        p_type = DCL_TYPE(type);
+      else {
+        /* we have to go by the storage class */
+        p_type = PTR_TYPE(SPEC_OCLS(etype));
+        
+        /*    if (SPEC_OCLS(etype)->codesp )  */
+        /*        p_type = CPOINTER ;  */
+        /*    else */
+        /*        if (SPEC_OCLS(etype)->fmap && !SPEC_OCLS(etype)->paged) */
+        /*      p_type = FPOINTER ; */
+        /*        else */
+        /*      if (SPEC_OCLS(etype)->fmap && SPEC_OCLS(etype)->paged) */
+        /*          p_type = PPOINTER; */
+        /*      else */
+        /*          if (SPEC_OCLS(etype) == idata ) */
+        /*        p_type = IPOINTER ; */
+        /*          else */
+        /*        p_type = POINTER ; */
+      }
+      
+      /* the first two bytes are known */
+      DEBUGpic14_emitcode("; ***","%s  %d - pointer cast2",__FUNCTION__,__LINE__);
+      size = GPTRSIZE - 1; 
+      offset = 0 ;
+      while (size--) {
+        if(offset < AOP_SIZE(right)) {
+          DEBUGpic14_emitcode("; ***","%s  %d - pointer cast3",__FUNCTION__,__LINE__);
+          if ((AOP_TYPE(right) == AOP_PCODE) && 
+            AOP(right)->aopu.pcop->type == PO_IMMEDIATE) {
+            emitpcode(POC_MOVLW, popGet(AOP(right),offset));
+            emitpcode(POC_MOVWF, popGet(AOP(result),offset));
+          } else { 
+            aopPut(AOP(result),
+              aopGet(AOP(right),offset,FALSE,FALSE),
+              offset);
+          }
+        } else 
+          emitpcode(POC_CLRF,popGet(AOP(result),offset));
+        offset++;
+      }
+      /* the last byte depending on type */
+      switch (p_type) {
+      case IPOINTER:
+      case POINTER:
+        emitpcode(POC_CLRF,popGet(AOP(result),GPTRSIZE - 1));
+        break;
+      case FPOINTER:
+        pic14_emitcode(";BUG!? ","%d",__LINE__);
+        l = one;
+        break;
+      case CPOINTER:
+        pic14_emitcode(";BUG!? ","%d",__LINE__);
+        l = "#0x02";
+        break;        
+      case PPOINTER:
+        pic14_emitcode(";BUG!? ","%d",__LINE__);
+        l = "#0x03";
+        break;
+        
+      default:
+        /* this should never happen */
+        werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+          "got unknown pointer type");
+        exit(1);
+      }
+      //aopPut(AOP(result),l, GPTRSIZE - 1);      
+      goto release ;
+    }
+    
+    /* just copy the pointers */
+    size = AOP_SIZE(result);
+    offset = 0 ;
+    while (size--) {
+      aopPut(AOP(result),
+        aopGet(AOP(right),offset,FALSE,FALSE),
+        offset);
+      offset++;
+    }
+    goto release ;
+  }
+  
+  
+  
+  /* so we now know that the size of destination is greater
+  than the size of the source.
+  Now, if the next iCode is an operator then we might be
+  able to optimize the operation without performing a cast.
+  */
+  if(genMixedOperation(ic))
+    goto release;
+  
+  DEBUGpic14_emitcode("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  /* we move to result for the size of source */
+  size = AOP_SIZE(right);
+  offset = 0 ;
+  while (size--) {
+    emitpcode(POC_MOVFW,   popGet(AOP(right),offset));
+    emitpcode(POC_MOVWF,   popGet(AOP(result),offset));
+    offset++;
+  }
+  
+  /* now depending on the sign of the destination */
+  size = AOP_SIZE(result) - AOP_SIZE(right);
+  /* if unsigned or not an integral type */
+  if (SPEC_USIGN(rtype) || !IS_SPEC(rtype)) {
+    while (size--)
+      emitpcode(POC_CLRF,   popGet(AOP(result),offset++));
+  } else {
+    /* we need to extend the sign :{ */
+    
+    if(size == 1) {
+      /* Save one instruction of casting char to int */
+      emitpcode(POC_CLRF,   popGet(AOP(result),offset));
+      emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(right),offset-1,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF,   popGet(AOP(result),offset));
+    } else {
+      emitpcodeNULLop(POC_CLRW);
+      
+      if(offset)
+        emitpcode(POC_BTFSC,   newpCodeOpBit(aopGet(AOP(right),offset-1,FALSE,FALSE),7,0));
+      else
+        emitpcode(POC_BTFSC,   newpCodeOpBit(aopGet(AOP(right),offset,FALSE,FALSE),7,0));
+      
+      emitpcode(POC_MOVLW,   popGetLit(0xff));
+      
+      while (size--)
+        emitpcode(POC_MOVWF,   popGet(AOP(result),offset++));
+    }
+  }
+  
 release:
-       freeAsmop(right,NULL,ic,TRUE);
-       freeAsmop(result,NULL,ic,TRUE);
-       
+  freeAsmop(right,NULL,ic,TRUE);
+  freeAsmop(result,NULL,ic,TRUE);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -9746,61 +9745,61 @@ release:
 /*-----------------------------------------------------------------*/
 static int genDjnz (iCode *ic, iCode *ifx)
 {
-       symbol *lbl, *lbl1;
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (!ifx)
-               return 0;
-       
-               /* if the if condition has a false label
-       then we cannot save */
-       if (IC_FALSE(ifx))
-               return 0;
-       
-               /* if the minus is not of the form 
-       a = a - 1 */
-       if (!isOperandEqual(IC_RESULT(ic),IC_LEFT(ic)) ||
-               !IS_OP_LITERAL(IC_RIGHT(ic)))
-               return 0;
-       
-       if (operandLitValue(IC_RIGHT(ic)) != 1)
-               return 0;
-       
-               /* if the size of this greater than one then no
-       saving */
-       if (getSize(operandType(IC_RESULT(ic))) > 1)
-               return 0;
-       
-       /* otherwise we can save BIG */
-       lbl = newiTempLabel(NULL);
-       lbl1= newiTempLabel(NULL);
-       
-       aopOp(IC_RESULT(ic),ic,FALSE);
-       
-       if (IS_AOP_PREG(IC_RESULT(ic))) {
-               pic14_emitcode("dec","%s",
-                       aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               pic14_emitcode("mov","a,%s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               pic14_emitcode("jnz","%05d_DS_",lbl->key+100);
-       } else {        
-               
-               
-               emitpcode(POC_DECFSZ,popGet(AOP(IC_RESULT(ic)),0));
-               emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
-               
-               pic14_emitcode("decfsz","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               pic14_emitcode ("goto","_%05d_DS_",IC_TRUE(ifx)->key+100 + labelOffset);
-               
-       }
-       /*     pic14_emitcode ("sjmp","%05d_DS_",lbl1->key+100); */
-       /*     pic14_emitcode ("","%05d_DS_:",lbl->key+100); */
-       /*     pic14_emitcode ("ljmp","%05d_DS_",IC_TRUE(ifx)->key+100); */
-       /*     pic14_emitcode ("","%05d_DS_:",lbl1->key+100); */
-       
-       
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
-       ifx->generated = 1;
-       return 1;
+  symbol *lbl, *lbl1;
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (!ifx)
+    return 0;
+  
+    /* if the if condition has a false label
+  then we cannot save */
+  if (IC_FALSE(ifx))
+    return 0;
+  
+    /* if the minus is not of the form 
+  a = a - 1 */
+  if (!isOperandEqual(IC_RESULT(ic),IC_LEFT(ic)) ||
+    !IS_OP_LITERAL(IC_RIGHT(ic)))
+    return 0;
+  
+  if (operandLitValue(IC_RIGHT(ic)) != 1)
+    return 0;
+  
+    /* if the size of this greater than one then no
+  saving */
+  if (getSize(operandType(IC_RESULT(ic))) > 1)
+    return 0;
+  
+  /* otherwise we can save BIG */
+  lbl = newiTempLabel(NULL);
+  lbl1= newiTempLabel(NULL);
+  
+  aopOp(IC_RESULT(ic),ic,FALSE);
+  
+  if (IS_AOP_PREG(IC_RESULT(ic))) {
+    pic14_emitcode("dec","%s",
+      aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    pic14_emitcode("mov","a,%s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    pic14_emitcode("jnz","%05d_DS_",lbl->key+100);
+  } else {  
+    
+    
+    emitpcode(POC_DECFSZ,popGet(AOP(IC_RESULT(ic)),0));
+    emitpcode(POC_GOTO,popGetLabel(IC_TRUE(ifx)->key));
+    
+    pic14_emitcode("decfsz","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    pic14_emitcode ("goto","_%05d_DS_",IC_TRUE(ifx)->key+100 + labelOffset);
+    
+  }
+  /*     pic14_emitcode ("sjmp","%05d_DS_",lbl1->key+100); */
+  /*     pic14_emitcode ("","%05d_DS_:",lbl->key+100); */
+  /*     pic14_emitcode ("ljmp","%05d_DS_",IC_TRUE(ifx)->key+100); */
+  /*     pic14_emitcode ("","%05d_DS_:",lbl1->key+100); */
+  
+  
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  ifx->generated = 1;
+  return 1;
 }
 
 /*-----------------------------------------------------------------*/
@@ -9808,35 +9807,35 @@ static int genDjnz (iCode *ic, iCode *ifx)
 /*-----------------------------------------------------------------*/
 static void genReceive (iCode *ic)
 {
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (isOperandInFarSpace(IC_RESULT(ic)) &&
-               ( OP_SYMBOL(IC_RESULT(ic))->isspilt ||
-               IS_TRUE_SYMOP(IC_RESULT(ic))) ) {
-               
-               int size = getSize(operandType(IC_RESULT(ic)));
-               int offset =  fReturnSizePic - size;
-               while (size--) {
-                       pic14_emitcode ("push","%s", (strcmp(fReturn[fReturnSizePic - offset - 1],"a") ?
-                               fReturn[fReturnSizePic - offset - 1] : "acc"));
-                       offset++;
-               }
-               aopOp(IC_RESULT(ic),ic,FALSE);
-               size = AOP_SIZE(IC_RESULT(ic));
-               offset = 0;
-               while (size--) {
-                       pic14_emitcode ("pop","acc");
-                       aopPut (AOP(IC_RESULT(ic)),"a",offset++);
-               }
-               
-       } else {
-               _G.accInUse++;
-               aopOp(IC_RESULT(ic),ic,FALSE);
-               _G.accInUse--;
-               assignResultValue(IC_RESULT(ic));
-       }
-       
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (isOperandInFarSpace(IC_RESULT(ic)) &&
+    ( OP_SYMBOL(IC_RESULT(ic))->isspilt ||
+    IS_TRUE_SYMOP(IC_RESULT(ic))) ) {
+    
+    int size = getSize(operandType(IC_RESULT(ic)));
+    int offset =  fReturnSizePic - size;
+    while (size--) {
+      pic14_emitcode ("push","%s", (strcmp(fReturn[fReturnSizePic - offset - 1],"a") ?
+        fReturn[fReturnSizePic - offset - 1] : "acc"));
+      offset++;
+    }
+    aopOp(IC_RESULT(ic),ic,FALSE);
+    size = AOP_SIZE(IC_RESULT(ic));
+    offset = 0;
+    while (size--) {
+      pic14_emitcode ("pop","acc");
+      aopPut (AOP(IC_RESULT(ic)),"a",offset++);
+    }
+    
+  } else {
+    _G.accInUse++;
+    aopOp(IC_RESULT(ic),ic,FALSE);
+    _G.accInUse--;
+    assignResultValue(IC_RESULT(ic));
+  }
+  
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -9845,10 +9844,10 @@ static void genReceive (iCode *ic)
 static void
 genDummyRead (iCode * ic)
 {
-       pic14_emitcode ("; genDummyRead","");
-       pic14_emitcode ("; not implemented","");
-       
-       ic = ic;
+  pic14_emitcode ("; genDummyRead","");
+  pic14_emitcode ("; not implemented","");
+  
+  ic = ic;
 }
 
 /*-----------------------------------------------------------------*/
@@ -9865,271 +9864,271 @@ genDummyRead (iCode * ic)
 
 void genpic14Code (iCode *lic)
 {
-       iCode *ic;
-       int cln = 0;
-       
-       lineHead = lineCurr = NULL;
-       
-       pb = newpCodeChain(GcurMemmap,0,newpCodeCharP("; Starting pCode block"));
-       addpBlock(pb);
-       
-       /* if debug information required */
-       if (options.debug && currFunc) { 
-               if (currFunc) {
-                       debugFile->writeFunction(currFunc);
-                       _G.debugLine = 1;
-                       if (IS_STATIC(currFunc->etype)) {
-                               pic14_emitcode("",";F%s$%s$0$0     %d",moduleName,currFunc->name,__LINE__);
-                               //addpCode2pBlock(pb,newpCodeLabel(moduleName,currFunc->name));
-                       } else {
-                               pic14_emitcode("",";G$%s$0$0   %d",currFunc->name,__LINE__);
-                               //addpCode2pBlock(pb,newpCodeLabel(NULL,currFunc->name));
-                       }
-                       _G.debugLine = 0;
-               }
-       }
-       
-       
-       for (ic = lic ; ic ; ic = ic->next ) {
-               
-               DEBUGpic14_emitcode(";ic","");
-               if ( cln != ic->lineno ) {
-                       if ( options.debug ) {
-                               _G.debugLine = 1;
-                               pic14_emitcode("",";C$%s$%d$%d$%d ==.",
-                                       FileBaseName(ic->filename),ic->lineno,
-                                       ic->level,ic->block);
-                               _G.debugLine = 0;
-                       }
-                       /*
-                       pic14_emitcode("#CSRC","%s %d",FileBaseName(ic->filename),ic->lineno);
-                       pic14_emitcode ("", ";\t%s:%d: %s", ic->filename, ic->lineno, 
-                       printCLine(ic->filename, ic->lineno));
-                       */
-                       if (!options.noCcodeInAsm) {
-                               addpCode2pBlock(pb,
-                                       newpCodeCSource(ic->lineno, 
-                                       ic->filename, 
-                                       printCLine(ic->filename, ic->lineno)));
-                       }
-                       
-                       cln = ic->lineno ;
-               }
-               
-               // if you want printILine too, look at ../mcs51/gen.c, i don't understand this :)
-               
-               /* if the result is marked as
-               spilt and rematerializable or code for
-               this has already been generated then
-               do nothing */
-               if (resultRemat(ic) || ic->generated ) 
-                       continue ;
-               
-               /* depending on the operation */
-               switch (ic->op) {
-               case '!' :
-                       genNot(ic);
-                       break;
-                       
-               case '~' :
-                       genCpl(ic);
-                       break;
-                       
-               case UNARYMINUS:
-                       genUminus (ic);
-                       break;
-                       
-               case IPUSH:
-                       genIpush (ic);
-                       break;
-                       
-               case IPOP:
-               /* IPOP happens only when trying to restore a 
-               spilt live range, if there is an ifx statement
-               following this pop then the if statement might
-               be using some of the registers being popped which
-               would destory the contents of the register so
-                       we need to check for this condition and handle it */
-                       if (ic->next            && 
-                               ic->next->op == IFX &&
-                               regsInCommon(IC_LEFT(ic),IC_COND(ic->next))) 
-                               genIfx (ic->next,ic);
-                       else
-                               genIpop (ic);
-                       break; 
-                       
-               case CALL:
-                       genCall (ic);
-                       break;
-                       
-               case PCALL:
-                       genPcall (ic);
-                       break;
-                       
-               case FUNCTION:
-                       genFunction (ic);
-                       break;
-                       
-               case ENDFUNCTION:
-                       genEndFunction (ic);
-                       break;
-                       
-               case RETURN:
-                       genRet (ic);
-                       break;
-                       
-               case LABEL:
-                       genLabel (ic);
-                       break;
-                       
-               case GOTO:
-                       genGoto (ic);
-                       break;
-                       
-               case '+' :
-                       genPlus (ic) ;
-                       break;
-                       
-               case '-' :
-                       if ( ! genDjnz (ic,ifxForOp(IC_RESULT(ic),ic)))
-                               genMinus (ic);
-                       break;
-                       
-               case '*' :
-                       genMult (ic);
-                       break;
-                       
-               case '/' :
-                       genDiv (ic) ;
-                       break;
-                       
-               case '%' :
-                       genMod (ic);
-                       break;
-                       
-               case '>' :
-                       genCmpGt (ic,ifxForOp(IC_RESULT(ic),ic));                     
-                       break;
-                       
-               case '<' :
-                       genCmpLt (ic,ifxForOp(IC_RESULT(ic),ic));
-                       break;
-                       
-               case LE_OP:
-               case GE_OP:
-               case NE_OP:
-                       
-               /* note these two are xlated by algebraic equivalence
-                       during parsing SDCC.y */
-                       werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
-                               "got '>=' or '<=' shouldn't have come here");
-                       break;  
-                       
-               case EQ_OP:
-                       genCmpEq (ic,ifxForOp(IC_RESULT(ic),ic));
-                       break;      
-                       
-               case AND_OP:
-                       genAndOp (ic);
-                       break;
-                       
-               case OR_OP:
-                       genOrOp (ic);
-                       break;
-                       
-               case '^' :
-                       genXor (ic,ifxForOp(IC_RESULT(ic),ic));
-                       break;
-                       
-               case '|' :
-                       genOr (ic,ifxForOp(IC_RESULT(ic),ic));
-                       break;
-                       
-               case BITWISEAND:
-                       genAnd (ic,ifxForOp(IC_RESULT(ic),ic));
-                       break;
-                       
-               case INLINEASM:
-                       genInline (ic);
-                       break;
-                       
-               case RRC:
-                       genRRC (ic);
-                       break;
-                       
-               case RLC:
-                       genRLC (ic);
-                       break;
-                       
-               case GETHBIT:
-                       genGetHbit (ic);
-                       break;
-                       
-               case LEFT_OP:
-                       genLeftShift (ic);
-                       break;
-                       
-               case RIGHT_OP:
-                       genRightShift (ic);
-                       break;
-                       
-               case GET_VALUE_AT_ADDRESS:
-                       genPointerGet(ic);
-                       break;
-                       
-               case '=' :
-                       if (POINTER_SET(ic))
-                               genPointerSet(ic);
-                       else
-                               genAssign(ic);
-                       break;
-                       
-               case IFX:
-                       genIfx (ic,NULL);
-                       break;
-                       
-               case ADDRESS_OF:
-                       genAddrOf (ic);
-                       break;
-                       
-               case JUMPTABLE:
-                       genJumpTab (ic);
-                       break;
-                       
-               case CAST:
-                       genCast (ic);
-                       break;
-                       
-               case RECEIVE:
-                       genReceive(ic);
-                       break;
-                       
-               case SEND:
-                       addSet(&_G.sendSet,ic);
-                       break;
-                       
-               case DUMMY_READ_VOLATILE:
-                       genDummyRead (ic);
-                       break;
-                       
-               default :
-                       ic = ic;
-               }
-       }
-       
-       
-       /* now we are ready to call the
-       peep hole optimizer */
-       if (!options.nopeep) {
-               peepHole (&lineHead);
-       }
-       /* now do the actual printing */
-       printLine (lineHead,codeOutFile);
-       
+  iCode *ic;
+  int cln = 0;
+  
+  lineHead = lineCurr = NULL;
+  
+  pb = newpCodeChain(GcurMemmap,0,newpCodeCharP("; Starting pCode block"));
+  addpBlock(pb);
+  
+  /* if debug information required */
+  if (options.debug && currFunc) { 
+    if (currFunc) {
+      debugFile->writeFunction(currFunc);
+      _G.debugLine = 1;
+      if (IS_STATIC(currFunc->etype)) {
+        pic14_emitcode("",";F%s$%s$0$0     %d",moduleName,currFunc->name,__LINE__);
+        //addpCode2pBlock(pb,newpCodeLabel(moduleName,currFunc->name));
+      } else {
+        pic14_emitcode("",";G$%s$0$0   %d",currFunc->name,__LINE__);
+        //addpCode2pBlock(pb,newpCodeLabel(NULL,currFunc->name));
+      }
+      _G.debugLine = 0;
+    }
+  }
+  
+  
+  for (ic = lic ; ic ; ic = ic->next ) {
+    
+    DEBUGpic14_emitcode(";ic","");
+    if ( cln != ic->lineno ) {
+      if ( options.debug ) {
+        _G.debugLine = 1;
+        pic14_emitcode("",";C$%s$%d$%d$%d ==.",
+          FileBaseName(ic->filename),ic->lineno,
+          ic->level,ic->block);
+        _G.debugLine = 0;
+      }
+      /*
+      pic14_emitcode("#CSRC","%s %d",FileBaseName(ic->filename),ic->lineno);
+      pic14_emitcode ("", ";\t%s:%d: %s", ic->filename, ic->lineno, 
+      printCLine(ic->filename, ic->lineno));
+      */
+      if (!options.noCcodeInAsm) {
+        addpCode2pBlock(pb,
+          newpCodeCSource(ic->lineno, 
+          ic->filename, 
+          printCLine(ic->filename, ic->lineno)));
+      }
+      
+      cln = ic->lineno ;
+    }
+    
+    // if you want printILine too, look at ../mcs51/gen.c, i don't understand this :)
+    
+    /* if the result is marked as
+    spilt and rematerializable or code for
+    this has already been generated then
+    do nothing */
+    if (resultRemat(ic) || ic->generated ) 
+      continue ;
+    
+    /* depending on the operation */
+    switch (ic->op) {
+    case '!' :
+      genNot(ic);
+      break;
+      
+    case '~' :
+      genCpl(ic);
+      break;
+      
+    case UNARYMINUS:
+      genUminus (ic);
+      break;
+      
+    case IPUSH:
+      genIpush (ic);
+      break;
+      
+    case IPOP:
+    /* IPOP happens only when trying to restore a 
+    spilt live range, if there is an ifx statement
+    following this pop then the if statement might
+    be using some of the registers being popped which
+    would destory the contents of the register so
+      we need to check for this condition and handle it */
+      if (ic->next            && 
+        ic->next->op == IFX &&
+        regsInCommon(IC_LEFT(ic),IC_COND(ic->next))) 
+        genIfx (ic->next,ic);
+      else
+        genIpop (ic);
+      break; 
+      
+    case CALL:
+      genCall (ic);
+      break;
+      
+    case PCALL:
+      genPcall (ic);
+      break;
+      
+    case FUNCTION:
+      genFunction (ic);
+      break;
+      
+    case ENDFUNCTION:
+      genEndFunction (ic);
+      break;
+      
+    case RETURN:
+      genRet (ic);
+      break;
+      
+    case LABEL:
+      genLabel (ic);
+      break;
+      
+    case GOTO:
+      genGoto (ic);
+      break;
+      
+    case '+' :
+      genPlus (ic) ;
+      break;
+      
+    case '-' :
+      if ( ! genDjnz (ic,ifxForOp(IC_RESULT(ic),ic)))
+        genMinus (ic);
+      break;
+      
+    case '*' :
+      genMult (ic);
+      break;
+      
+    case '/' :
+      genDiv (ic) ;
+      break;
+      
+    case '%' :
+      genMod (ic);
+      break;
+      
+    case '>' :
+      genCmpGt (ic,ifxForOp(IC_RESULT(ic),ic));         
+      break;
+      
+    case '<' :
+      genCmpLt (ic,ifxForOp(IC_RESULT(ic),ic));
+      break;
+      
+    case LE_OP:
+    case GE_OP:
+    case NE_OP:
+      
+    /* note these two are xlated by algebraic equivalence
+      during parsing SDCC.y */
+      werror(E_INTERNAL_ERROR,__FILE__,__LINE__,
+        "got '>=' or '<=' shouldn't have come here");
+      break;  
+      
+    case EQ_OP:
+      genCmpEq (ic,ifxForOp(IC_RESULT(ic),ic));
+      break;      
+      
+    case AND_OP:
+      genAndOp (ic);
+      break;
+      
+    case OR_OP:
+      genOrOp (ic);
+      break;
+      
+    case '^' :
+      genXor (ic,ifxForOp(IC_RESULT(ic),ic));
+      break;
+      
+    case '|' :
+      genOr (ic,ifxForOp(IC_RESULT(ic),ic));
+      break;
+      
+    case BITWISEAND:
+      genAnd (ic,ifxForOp(IC_RESULT(ic),ic));
+      break;
+      
+    case INLINEASM:
+      genInline (ic);
+      break;
+      
+    case RRC:
+      genRRC (ic);
+      break;
+      
+    case RLC:
+      genRLC (ic);
+      break;
+      
+    case GETHBIT:
+      genGetHbit (ic);
+      break;
+      
+    case LEFT_OP:
+      genLeftShift (ic);
+      break;
+      
+    case RIGHT_OP:
+      genRightShift (ic);
+      break;
+      
+    case GET_VALUE_AT_ADDRESS:
+      genPointerGet(ic);
+      break;
+      
+    case '=' :
+      if (POINTER_SET(ic))
+        genPointerSet(ic);
+      else
+        genAssign(ic);
+      break;
+      
+    case IFX:
+      genIfx (ic,NULL);
+      break;
+      
+    case ADDRESS_OF:
+      genAddrOf (ic);
+      break;
+      
+    case JUMPTABLE:
+      genJumpTab (ic);
+      break;
+      
+    case CAST:
+      genCast (ic);
+      break;
+      
+    case RECEIVE:
+      genReceive(ic);
+      break;
+      
+    case SEND:
+      addSet(&_G.sendSet,ic);
+      break;
+      
+    case DUMMY_READ_VOLATILE:
+      genDummyRead (ic);
+      break;
+      
+    default :
+      ic = ic;
+    }
+  }
+  
+  
+  /* now we are ready to call the
+  peep hole optimizer */
+  if (!options.nopeep) {
+    peepHole (&lineHead);
+  }
+  /* now do the actual printing */
+  printLine (lineHead,codeOutFile);
+  
 #ifdef PCODE_DEBUG
-       DFPRINTF((stderr,"printing pBlock\n\n"));
-       printpBlock(stdout,pb);
+  DFPRINTF((stderr,"printing pBlock\n\n"));
+  printpBlock(stdout,pb);
 #endif
-       
-       return;
+  
+  return;
 }
index 81b407da24d2780941a4a53470a968ffb9a074f1..4083c1ae6ac3efc606c42d99dd61092e904e02d4 100644 (file)
@@ -30,12 +30,12 @@ struct pCodeOp;
 
 enum
 {
-       AOP_LIT = 1,
-       AOP_REG, AOP_DIR,
-       AOP_DPTR, AOP_DPTR2, AOP_R0, AOP_R1,
-       AOP_STK, AOP_IMMD, AOP_STR,
-       AOP_CRY, AOP_ACC,
-       AOP_PCODE
+  AOP_LIT = 1,
+  AOP_REG, AOP_DIR,
+  AOP_DPTR, AOP_DPTR2, AOP_R0, AOP_R1,
+  AOP_STK, AOP_IMMD, AOP_STR,
+  AOP_CRY, AOP_ACC,
+  AOP_PCODE
 
 };
 
@@ -45,47 +45,43 @@ enum
 typedef struct asmop
 {
 
-       short type;  /* can have values
-                       AOP_LIT    -  operand is a literal value
-                       AOP_REG    -  is in registers
-                       AOP_DIR    -  direct just a name
-                       AOP_DPTR   -  dptr contains address of operand
-                       AOP_DPTR2  -  dptr2 contains address of operand (DS80C390 only).
-                       AOP_R0/R1  -  r0/r1 contains address of operand               
-                       AOP_STK    -  should be pushed on stack this
-                       can happen only for the result
-                       AOP_IMMD   -  immediate value for eg. remateriazable 
-                       AOP_CRY    -  carry contains the value of this
-                       AOP_STR    -  array of strings
-                       AOP_ACC    -  result is in the acc:b pair
-                     */
-       short coff;                     /* current offset */
-       short size;                     /* total size */
-       unsigned code:1;                /* is in Code space */
-       unsigned paged:1;               /* in paged memory  */
-       unsigned freed:1;               /* already freed    */
-       union
-               {
-               value *aop_lit;         /* if literal */
-               regs *aop_reg[4];       /* array of registers */
-               char *aop_dir;          /* if direct  */
-               regs *aop_ptr;          /* either -> to r0 or r1 */
-               char *aop_immd;         /* if immediate others are implied */
-               int aop_stk;            /* stack offset when AOP_STK */
-               char *aop_str[4];       /* just a string array containing the location */
-/*             regs *aop_alloc_reg;     * points to a dynamically allocated register */
-               pCodeOp *pcop;
-       }
-       aopu;
+  short type;  /* can have values
+                 AOP_LIT    -  operand is a literal value
+                 AOP_REG    -  is in registers
+                 AOP_DIR    -  direct just a name
+                 AOP_DPTR   -  dptr contains address of operand
+                 AOP_DPTR2  -  dptr2 contains address of operand (DS80C390 only).
+                 AOP_R0/R1  -  r0/r1 contains address of operand               
+                 AOP_STK    -  should be pushed on stack this
+                 can happen only for the result
+                 AOP_IMMD   -  immediate value for eg. remateriazable 
+                 AOP_CRY    -  carry contains the value of this
+                 AOP_STR    -  array of strings
+                 AOP_ACC    -  result is in the acc:b pair
+              */
+  short coff;          /* current offset */
+  short size;          /* total size */
+  unsigned code:1;      /* is in Code space */
+  unsigned paged:1;    /* in paged memory  */
+  unsigned freed:1;    /* already freed    */
+  union
+  {
+    value *aop_lit;     /* if literal */
+    regs *aop_reg[4];   /* array of registers */
+    char *aop_dir;      /* if direct  */
+    regs *aop_ptr;      /* either -> to r0 or r1 */
+    char *aop_immd;     /* if immediate others are implied */
+    int aop_stk;        /* stack offset when AOP_STK */
+    char *aop_str[4];   /* just a string array containing the location */
+    pCodeOp *pcop;
+  }
+  aopu;
 }
 asmop;
 
 void genpic14Code (iCode *);
 
-//extern char *fReturnpic14[];
-//extern char *fReturn390[];
 extern unsigned fReturnSizePic;
-//extern char **fReturn;
 
 
 #define AOP(op) op->aop
index 8bb0747804671a5767aaf656198901baf32dd98c..be495a96d28785811112afb68b69f826f747e90f 100644 (file)
@@ -25,8 +25,8 @@
   what you give them.   Help stamp out software-hoarding!
   
   Notes:
-  000123 mlh   Moved aopLiteral to SDCCglue.c to help the split
-               Made everything static
+  000123 mlh  Moved aopLiteral to SDCCglue.c to help the split
+      Made everything static
 -------------------------------------------------------------------------*/
 
 #include <stdio.h>
@@ -37,7 +37,7 @@
 #include "newalloc.h"
 
 #if defined(_MSC_VER) && (_MSC_VER < 1300)
-#define __FUNCTION__           __FILE__
+#define __FUNCTION__    __FILE__
 #endif
 
 #include "common.h"
@@ -52,104 +52,145 @@ void DEBUGpic14_AopType(int line_no, operand *left, operand *right, operand *res
 
 const char *AopType(short type)
 {
-       switch(type) {
-       case AOP_LIT:
-               return "AOP_LIT";
-               break;
-       case AOP_REG:
-               return "AOP_REG";
-               break;
-       case AOP_DIR:
-               return "AOP_DIR";
-               break;
-       case AOP_DPTR:
-               return "AOP_DPTR";
-               break;
-       case AOP_DPTR2:
-               return "AOP_DPTR2";
-               break;
-       case AOP_R0:
-               return "AOP_R0";
-               break;
-       case AOP_R1:
-               return "AOP_R1";
-               break;
-       case AOP_STK:
-               return "AOP_STK";
-               break;
-       case AOP_IMMD:
-               return "AOP_IMMD";
-               break;
-       case AOP_STR:
-               return "AOP_STR";
-               break;
-       case AOP_CRY:
-               return "AOP_CRY";
-               break;
-       case AOP_ACC:
-               return "AOP_ACC";
-               break;
-       case AOP_PCODE:
-               return "AOP_PCODE";
-               break;
-       }
-       
-       return "BAD TYPE";
+  switch(type) {
+  case AOP_LIT:
+    return "AOP_LIT";
+    break;
+  case AOP_REG:
+    return "AOP_REG";
+    break;
+  case AOP_DIR:
+    return "AOP_DIR";
+    break;
+  case AOP_DPTR:
+    return "AOP_DPTR";
+    break;
+  case AOP_DPTR2:
+    return "AOP_DPTR2";
+    break;
+  case AOP_R0:
+    return "AOP_R0";
+    break;
+  case AOP_R1:
+    return "AOP_R1";
+    break;
+  case AOP_STK:
+    return "AOP_STK";
+    break;
+  case AOP_IMMD:
+    return "AOP_IMMD";
+    break;
+  case AOP_STR:
+    return "AOP_STR";
+    break;
+  case AOP_CRY:
+    return "AOP_CRY";
+    break;
+  case AOP_ACC:
+    return "AOP_ACC";
+    break;
+  case AOP_PCODE:
+    return "AOP_PCODE";
+    break;
+  }
+  
+  return "BAD TYPE";
+}
+
+void DebugAop(asmop *aop)
+{
+  if(!aop)
+    return;
+  printf("%s\n",AopType(aop->type));
+  printf(" current offset: %d\n",aop->coff);
+  printf("           size: %d\n",aop->size);
+
+  switch(aop->type) {
+  case AOP_LIT:
+    printf("          name: %s\n",aop->aopu.aop_lit->name);
+    break;
+  case AOP_REG:
+    printf("          name: %s\n",aop->aopu.aop_reg[0]->name);
+    break;
+  case AOP_CRY:
+  case AOP_DIR:
+    printf("          name: %s\n",aop->aopu.aop_dir);
+    break;
+  case AOP_DPTR:
+  case AOP_DPTR2:
+  case AOP_R0:
+  case AOP_R1:
+  case AOP_ACC:
+    printf("not supported\n");
+    break;
+  case AOP_STK:
+    printf("   Stack offset: %d\n",aop->aopu.aop_stk);
+    break;
+  case AOP_IMMD:
+    printf("     immediate: %s\n",aop->aopu.aop_immd);
+    break;
+  case AOP_STR:
+    printf("    aop_str[0]: %s\n",aop->aopu.aop_str[0]);
+    break;
+  case AOP_PCODE:
+    //printpCode(stdout,aop->aopu.pcop);
+    break;
+  }
 }
 
 const char *pCodeOpType(  pCodeOp *pcop)
 {
-       
-       if(pcop) {
-               
-               switch(pcop->type) {
-                       
-               case  PO_NONE:
-                       return "PO_NONE";
-               case  PO_W:
-                       return  "PO_W";
-               case  PO_STATUS:
-                       return  "PO_STATUS";
-               case  PO_FSR:
-                       return  "PO_FSR";
-               case  PO_INDF:
-                       return  "PO_INDF";
-               case  PO_INTCON:
-                       return  "PO_INTCON";
-               case  PO_GPR_REGISTER:
-                       return  "PO_GPR_REGISTER";
-               case  PO_GPR_POINTER:
-                       return  "PO_GPR_POINTER";
-               case  PO_GPR_BIT:
-                       return  "PO_GPR_BIT";
-               case  PO_GPR_TEMP:
-                       return  "PO_GPR_TEMP";
-               case  PO_SFR_REGISTER:
-                       return  "PO_SFR_REGISTER";
-               case  PO_PCL:
-                       return  "PO_PCL";
-               case  PO_PCLATH:
-                       return  "PO_PCLATH";
-               case  PO_LITERAL:
-                       return  "PO_LITERAL";
-               case  PO_IMMEDIATE:
-                       return  "PO_IMMEDIATE";
-               case  PO_DIR:
-                       return  "PO_DIR";
-               case  PO_CRY:
-                       return  "PO_CRY";
-               case  PO_BIT:
-                       return  "PO_BIT";
-               case  PO_STR:
-                       return  "PO_STR";
-               case  PO_LABEL:
-                       return  "PO_LABEL";
-               case  PO_WILD:
-                       return  "PO_WILD";
-               }
-       }
-       
-       return "BAD PO_TYPE";
+  
+  if(pcop) {
+    
+    switch(pcop->type) {
+      
+    case  PO_NONE:
+      return "PO_NONE";
+    case  PO_W:
+      return  "PO_W";
+    case  PO_STATUS:
+      return  "PO_STATUS";
+    case  PO_FSR:
+      return  "PO_FSR";
+    case  PO_INDF:
+      return  "PO_INDF";
+    case  PO_INTCON:
+      return  "PO_INTCON";
+    case  PO_GPR_REGISTER:
+      return  "PO_GPR_REGISTER";
+    case  PO_GPR_POINTER:
+      return  "PO_GPR_POINTER";
+    case  PO_GPR_BIT:
+      return  "PO_GPR_BIT";
+    case  PO_GPR_TEMP:
+      return  "PO_GPR_TEMP";
+    case  PO_SFR_REGISTER:
+      return  "PO_SFR_REGISTER";
+    case  PO_PCL:
+      return  "PO_PCL";
+    case  PO_PCLATH:
+      return  "PO_PCLATH";
+    case  PO_LITERAL:
+      return  "PO_LITERAL";
+    case  PO_IMMEDIATE:
+      return  "PO_IMMEDIATE";
+    case  PO_DIR:
+      return  "PO_DIR";
+    case  PO_CRY:
+      return  "PO_CRY";
+    case  PO_BIT:
+      return  "PO_BIT";
+    case  PO_STR:
+      return  "PO_STR";
+    case  PO_LABEL:
+      return  "PO_LABEL";
+    case  PO_WILD:
+      return  "PO_WILD";
+    }
+  }
+  
+  return "BAD PO_TYPE";
 }
 
 /*-----------------------------------------------------------------*/
@@ -157,91 +198,91 @@ const char *pCodeOpType(  pCodeOp *pcop)
 /*-----------------------------------------------------------------*/
 bool genPlusIncr (iCode *ic)
 {
-       unsigned int icount ;
-       unsigned int size = pic14_getDataSize(IC_RESULT(ic));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
-               AopType(AOP_TYPE(IC_RESULT(ic))),
-               AopType(AOP_TYPE(IC_LEFT(ic))),
-               AopType(AOP_TYPE(IC_RIGHT(ic))));
-       
-       /* will try to generate an increment */
-       /* if the right side is not a literal 
-       we cannot */
-       if (AOP_TYPE(IC_RIGHT(ic)) != AOP_LIT)
-               return FALSE ;
-       
-       DEBUGpic14_emitcode ("; ","%s  %d",__FUNCTION__,__LINE__);
-       /* if the literal value of the right hand side
-       is greater than 1 then it is faster to add */
-       if ((icount = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit)) > 2)
-               return FALSE ;
-       
-       /* if increment 16 bits in register */
-       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) &&
-               (icount == 1)) {
-               
-               int offset = MSB16;
-               
-               emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),LSB));
-               //pic14_emitcode("incf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
-               
-               while(--size) {
-                       emitSKPNZ;
-                       emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset++));
-                       //pic14_emitcode(" incf","%s,f",aopGet(AOP(IC_RESULT(ic)),offset++,FALSE,FALSE));
-               }
-               
-               return TRUE;
-       }
-       
-       DEBUGpic14_emitcode ("; ","%s  %d",__FUNCTION__,__LINE__);
-       /* if left is in accumulator  - probably a bit operation*/
-       if( strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a")  &&
-               (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) ) {
-               
-               emitpcode(POC_BCF, popGet(AOP(IC_RESULT(ic)),0));
-               pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir,
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               if(icount)
-                       emitpcode(POC_XORLW,popGetLit(1));
-               //pic14_emitcode("xorlw","1");
-               else
-                       emitpcode(POC_ANDLW,popGetLit(1));
-               //pic14_emitcode("andlw","1");
-               
-               emitSKPZ;
-               emitpcode(POC_BSF, popGet(AOP(IC_RESULT(ic)),0));
-               pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir,
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               
-               return TRUE;
-       }
-       
-       
-       
-       /* if the sizes are greater than 1 then we cannot */
-       if (AOP_SIZE(IC_RESULT(ic)) > 1 ||
-               AOP_SIZE(IC_LEFT(ic)) > 1   )
-               return FALSE ;
-       
-       /* If we are incrementing the same register by two: */
-       
-       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-               
-               while (icount--) 
-                       emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),0));
-               //pic14_emitcode("incf","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               
-               return TRUE ;
-       }
-       
-       DEBUGpic14_emitcode ("; ","couldn't increment ");
-       
-       return FALSE ;
+  unsigned int icount ;
+  unsigned int size = pic14_getDataSize(IC_RESULT(ic));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
+    AopType(AOP_TYPE(IC_RESULT(ic))),
+    AopType(AOP_TYPE(IC_LEFT(ic))),
+    AopType(AOP_TYPE(IC_RIGHT(ic))));
+  
+  /* will try to generate an increment */
+  /* if the right side is not a literal 
+  we cannot */
+  if (AOP_TYPE(IC_RIGHT(ic)) != AOP_LIT)
+    return FALSE ;
+  
+  DEBUGpic14_emitcode ("; ","%s  %d",__FUNCTION__,__LINE__);
+  /* if the literal value of the right hand side
+  is greater than 1 then it is faster to add */
+  if ((icount = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit)) > 2)
+    return FALSE ;
+  
+  /* if increment 16 bits in register */
+  if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) &&
+    (icount == 1)) {
+    
+    int offset = MSB16;
+    
+    emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),LSB));
+    //pic14_emitcode("incf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
+    
+    while(--size) {
+      emitSKPNZ;
+      emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset++));
+      //pic14_emitcode(" incf","%s,f",aopGet(AOP(IC_RESULT(ic)),offset++,FALSE,FALSE));
+    }
+    
+    return TRUE;
+  }
+  
+  DEBUGpic14_emitcode ("; ","%s  %d",__FUNCTION__,__LINE__);
+  /* if left is in accumulator  - probably a bit operation*/
+  if( strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a")  &&
+    (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) ) {
+    
+    emitpcode(POC_BCF, popGet(AOP(IC_RESULT(ic)),0));
+    pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
+      AOP(IC_RESULT(ic))->aopu.aop_dir,
+      AOP(IC_RESULT(ic))->aopu.aop_dir);
+    if(icount)
+      emitpcode(POC_XORLW,popGetLit(1));
+    //pic14_emitcode("xorlw","1");
+    else
+      emitpcode(POC_ANDLW,popGetLit(1));
+    //pic14_emitcode("andlw","1");
+    
+    emitSKPZ;
+    emitpcode(POC_BSF, popGet(AOP(IC_RESULT(ic)),0));
+    pic14_emitcode("bsf","(%s >> 3), (%s & 7)",
+      AOP(IC_RESULT(ic))->aopu.aop_dir,
+      AOP(IC_RESULT(ic))->aopu.aop_dir);
+    
+    return TRUE;
+  }
+  
+  
+  
+  /* if the sizes are greater than 1 then we cannot */
+  if (AOP_SIZE(IC_RESULT(ic)) > 1 ||
+    AOP_SIZE(IC_LEFT(ic)) > 1   )
+    return FALSE ;
+  
+  /* If we are incrementing the same register by two: */
+  
+  if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+    
+    while (icount--) 
+      emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),0));
+    //pic14_emitcode("incf","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    
+    return TRUE ;
+  }
+  
+  DEBUGpic14_emitcode ("; ","couldn't increment ");
+  
+  return FALSE ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -249,19 +290,19 @@ bool genPlusIncr (iCode *ic)
 /*-----------------------------------------------------------------*/
 void pic14_outBitAcc(operand *result)
 {
-       symbol *tlbl = newiTempLabel(NULL);
-       /* if the result is a bit */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if (AOP_TYPE(result) == AOP_CRY){
-               aopPut(AOP(result),"a",0);
-       }
-       else {
-               pic14_emitcode("jz","%05d_DS_",tlbl->key+100);
-               pic14_emitcode("mov","a,#01");
-               pic14_emitcode("","%05d_DS_:",tlbl->key+100);
-               pic14_outAcc(result);
-       }
+  symbol *tlbl = newiTempLabel(NULL);
+  /* if the result is a bit */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if (AOP_TYPE(result) == AOP_CRY){
+    aopPut(AOP(result),"a",0);
+  }
+  else {
+    pic14_emitcode("jz","%05d_DS_",tlbl->key+100);
+    pic14_emitcode("mov","a,#01");
+    pic14_emitcode("","%05d_DS_:",tlbl->key+100);
+    pic14_outAcc(result);
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -269,75 +310,90 @@ void pic14_outBitAcc(operand *result)
 /*-----------------------------------------------------------------*/
 void genPlusBits (iCode *ic)
 {
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
-               AopType(AOP_TYPE(IC_RESULT(ic))),
-               AopType(AOP_TYPE(IC_LEFT(ic))),
-               AopType(AOP_TYPE(IC_RIGHT(ic))));
-               /*
-               The following block of code will add two bits. 
-               Note that it'll even work if the destination is
-               the carry (C in the status register).
-               It won't work if the 'Z' bit is a source or destination.
-       */
-       
-       /* If the result is stored in the accumulator (w) */
-       //if(strcmp(aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE),"a") == 0 ) {
-       switch(AOP_TYPE(IC_RESULT(ic))) {
-       case AOP_ACC:
-               emitpcode(POC_CLRW, NULL);
-               emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
-               emitpcode(POC_XORLW, popGetLit(1));
-               emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_XORLW, popGetLit(1));
-               
-               pic14_emitcode("clrw","");
-               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-               pic14_emitcode("xorlw","1");
-               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                       AOP(IC_LEFT(ic))->aopu.aop_dir,
-                       AOP(IC_LEFT(ic))->aopu.aop_dir);
-               pic14_emitcode("xorlw","1");
-               break;
-       case AOP_REG:
-               emitpcode(POC_MOVLW, popGetLit(0));
-               emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
-               emitpcode(POC_XORLW, popGetLit(1));
-               emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_XORLW, popGetLit(1));
-               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),0));
-               break;
-       default:
-               emitpcode(POC_MOVLW, popGet(AOP(IC_RESULT(ic)),0));
-               emitpcode(POC_BCF,   popGet(AOP(IC_RESULT(ic)),0));
-               emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
-               emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
-               emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
-               
-               pic14_emitcode("movlw","(1 << (%s & 7))",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir,
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir,
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-               pic14_emitcode("xorwf","(%s >>3),f",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                       AOP(IC_LEFT(ic))->aopu.aop_dir,
-                       AOP(IC_LEFT(ic))->aopu.aop_dir);
-               pic14_emitcode("xorwf","(%s>>3),f",
-                       AOP(IC_RESULT(ic))->aopu.aop_dir);
-               break;
-       }
-       
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
+           AopType(AOP_TYPE(IC_RESULT(ic))),
+           AopType(AOP_TYPE(IC_LEFT(ic))),
+           AopType(AOP_TYPE(IC_RIGHT(ic))));
+  /*
+    The following block of code will add two bits. 
+    Note that it'll even work if the destination is
+    the carry (C in the status register).
+    It won't work if the 'Z' bit is a source or destination.
+  */
+  
+  /* If the result is stored in the accumulator (w) */
+  //if(strcmp(aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE),"a") == 0 ) {
+  switch(AOP_TYPE(IC_RESULT(ic))) {
+  case AOP_ACC:
+    emitpcode(POC_CLRW, NULL);
+    emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+    emitpcode(POC_XORLW, popGetLit(1));
+    emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_XORLW, popGetLit(1));
+    
+    pic14_emitcode("clrw","");
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_RIGHT(ic))->aopu.aop_dir,
+       AOP(IC_RIGHT(ic))->aopu.aop_dir);
+    pic14_emitcode("xorlw","1");
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_LEFT(ic))->aopu.aop_dir,
+       AOP(IC_LEFT(ic))->aopu.aop_dir);
+    pic14_emitcode("xorlw","1");
+    break;
+  case AOP_REG:
+    emitpcode(POC_MOVLW, popGetLit(0));
+    emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+    emitpcode(POC_XORLW, popGetLit(1));
+    emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_XORLW, popGetLit(1));
+    emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),0));
+    break;
+    /*  case AOP_CRY:
+    if(pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic)))) {
+
+    } else {
+
+    }
+    break;*/
+  default:
+    if(pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic)))) {
+      DebugAop(AOP(IC_LEFT(ic)));
+      emitpcode(POC_MOVLW, popGet(AOP(IC_LEFT(ic)),0));
+      emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+      emitpcode(POC_XORWF, popGet(AOP(IC_LEFT(ic)),0));
+    } else {
+      emitpcode(POC_MOVLW, popGet(AOP(IC_RESULT(ic)),0));
+      emitpcode(POC_BCF,   popGet(AOP(IC_RESULT(ic)),0));
+      emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+      emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
+      emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
+      emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
+    }
+
+
+    pic14_emitcode("movlw","(1 << (%s & 7))",
+       AOP(IC_RESULT(ic))->aopu.aop_dir,
+       AOP(IC_RESULT(ic))->aopu.aop_dir);
+    pic14_emitcode("bcf","(%s >> 3), (%s & 7)",
+       AOP(IC_RESULT(ic))->aopu.aop_dir,
+       AOP(IC_RESULT(ic))->aopu.aop_dir);
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_RIGHT(ic))->aopu.aop_dir,
+       AOP(IC_RIGHT(ic))->aopu.aop_dir);
+    pic14_emitcode("xorwf","(%s >>3),f",
+       AOP(IC_RESULT(ic))->aopu.aop_dir);
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_LEFT(ic))->aopu.aop_dir,
+       AOP(IC_LEFT(ic))->aopu.aop_dir);
+    pic14_emitcode("xorwf","(%s>>3),f",
+       AOP(IC_RESULT(ic))->aopu.aop_dir);
+    break;
+  }
+  
 }
 
 #if 0
@@ -348,29 +404,29 @@ void genPlusBits (iCode *ic)
 */
 static void adjustArithmeticResult(iCode *ic)
 {
-       if (AOP_SIZE(IC_RESULT(ic)) == 3 && 
-               AOP_SIZE(IC_LEFT(ic)) == 3   &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))))
-               aopPut(AOP(IC_RESULT(ic)),
-               aopGet(AOP(IC_LEFT(ic)),2,FALSE,FALSE),
-               2);
-       
-       if (AOP_SIZE(IC_RESULT(ic)) == 3 && 
-               AOP_SIZE(IC_RIGHT(ic)) == 3   &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic))))
-               aopPut(AOP(IC_RESULT(ic)),
-               aopGet(AOP(IC_RIGHT(ic)),2,FALSE,FALSE),
-               2);
-       
-       if (AOP_SIZE(IC_RESULT(ic)) == 3 &&
-               AOP_SIZE(IC_LEFT(ic)) < 3    &&
-               AOP_SIZE(IC_RIGHT(ic)) < 3   &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))) &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic)))) {
-               char buffer[5];
-               sprintf(buffer,"#%d",pointerCode(getSpec(operandType(IC_LEFT(ic)))));
-               aopPut(AOP(IC_RESULT(ic)),buffer,2);
-       }
+  if (AOP_SIZE(IC_RESULT(ic)) == 3 && 
+    AOP_SIZE(IC_LEFT(ic)) == 3   &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))))
+    aopPut(AOP(IC_RESULT(ic)),
+    aopGet(AOP(IC_LEFT(ic)),2,FALSE,FALSE),
+    2);
+  
+  if (AOP_SIZE(IC_RESULT(ic)) == 3 && 
+    AOP_SIZE(IC_RIGHT(ic)) == 3   &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic))))
+    aopPut(AOP(IC_RESULT(ic)),
+    aopGet(AOP(IC_RIGHT(ic)),2,FALSE,FALSE),
+    2);
+  
+  if (AOP_SIZE(IC_RESULT(ic)) == 3 &&
+    AOP_SIZE(IC_LEFT(ic)) < 3    &&
+    AOP_SIZE(IC_RIGHT(ic)) < 3   &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))) &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic)))) {
+    char buffer[5];
+    sprintf(buffer,"#%d",pointerCode(getSpec(operandType(IC_LEFT(ic)))));
+    aopPut(AOP(IC_RESULT(ic)),buffer,2);
+  }
 }
 //#else
 /* This is the pure and virtuous version of this code.
@@ -379,33 +435,33 @@ static void adjustArithmeticResult(iCode *ic)
 */
 static void adjustArithmeticResult(iCode *ic)
 {
-       if (opIsGptr(IC_RESULT(ic)) &&
-               opIsGptr(IC_LEFT(ic))   &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))))
-       {
-               aopPut(AOP(IC_RESULT(ic)),
-                       aopGet(AOP(IC_LEFT(ic)), GPTRSIZE - 1,FALSE,FALSE),
-                       GPTRSIZE - 1);
-       }
-       
-       if (opIsGptr(IC_RESULT(ic)) &&
-               opIsGptr(IC_RIGHT(ic))   &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic))))
-       {
-               aopPut(AOP(IC_RESULT(ic)),
-                       aopGet(AOP(IC_RIGHT(ic)),GPTRSIZE - 1,FALSE,FALSE),
-                       GPTRSIZE - 1);
-       }
-       
-       if (opIsGptr(IC_RESULT(ic))        &&
-               AOP_SIZE(IC_LEFT(ic)) < GPTRSIZE   &&
-               AOP_SIZE(IC_RIGHT(ic)) < GPTRSIZE  &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))) &&
-               !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic)))) {
-               char buffer[5];
-               sprintf(buffer,"#%d",pointerCode(getSpec(operandType(IC_LEFT(ic)))));
-               aopPut(AOP(IC_RESULT(ic)),buffer,GPTRSIZE - 1);
-       }
+  if (opIsGptr(IC_RESULT(ic)) &&
+    opIsGptr(IC_LEFT(ic))   &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))))
+  {
+    aopPut(AOP(IC_RESULT(ic)),
+      aopGet(AOP(IC_LEFT(ic)), GPTRSIZE - 1,FALSE,FALSE),
+      GPTRSIZE - 1);
+  }
+  
+  if (opIsGptr(IC_RESULT(ic)) &&
+    opIsGptr(IC_RIGHT(ic))   &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic))))
+  {
+    aopPut(AOP(IC_RESULT(ic)),
+      aopGet(AOP(IC_RIGHT(ic)),GPTRSIZE - 1,FALSE,FALSE),
+      GPTRSIZE - 1);
+  }
+  
+  if (opIsGptr(IC_RESULT(ic))      &&
+    AOP_SIZE(IC_LEFT(ic)) < GPTRSIZE   &&
+    AOP_SIZE(IC_RIGHT(ic)) < GPTRSIZE  &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_LEFT(ic))) &&
+    !pic14_sameRegs(AOP(IC_RESULT(ic)),AOP(IC_RIGHT(ic)))) {
+    char buffer[5];
+    sprintf(buffer,"#%d",pointerCode(getSpec(operandType(IC_LEFT(ic)))));
+    aopPut(AOP(IC_RESULT(ic)),buffer,GPTRSIZE - 1);
+  }
 }
 #endif
 
@@ -414,361 +470,361 @@ static void adjustArithmeticResult(iCode *ic)
 /*-----------------------------------------------------------------*/
 static void genAddLit2byte (operand *result, int offr, int lit)
 {
-       
-       switch(lit & 0xff) {
-       case 0:
-               break;
-       case 1:
-               emitpcode(POC_INCF, popGet(AOP(result),offr));
-               break;
-       case 0xff:
-               emitpcode(POC_DECF, popGet(AOP(result),offr));
-               break;
-       default:
-               emitpcode(POC_MOVLW,popGetLit(lit&0xff));
-               emitpcode(POC_ADDWF,popGet(AOP(result),offr));
-       }
-       
+  
+  switch(lit & 0xff) {
+  case 0:
+    break;
+  case 1:
+    emitpcode(POC_INCF, popGet(AOP(result),offr));
+    break;
+  case 0xff:
+    emitpcode(POC_DECF, popGet(AOP(result),offr));
+    break;
+  default:
+    emitpcode(POC_MOVLW,popGetLit(lit&0xff));
+    emitpcode(POC_ADDWF,popGet(AOP(result),offr));
+  }
+  
 }
 
 static void emitMOVWF(operand *reg, int offset)
 {
-       if(!reg)
-               return;
-       
-       if (AOP_TYPE(reg) == AOP_ACC) {
-               DEBUGpic14_emitcode ("; ***","%s  %d ignoring mov into W",__FUNCTION__,__LINE__);
-               return;
-       }
-       
-       emitpcode(POC_MOVWF, popGet(AOP(reg),offset));
-       
+  if(!reg)
+    return;
+  
+  if (AOP_TYPE(reg) == AOP_ACC) {
+    DEBUGpic14_emitcode ("; ***","%s  %d ignoring mov into W",__FUNCTION__,__LINE__);
+    return;
+  }
+  
+  emitpcode(POC_MOVWF, popGet(AOP(reg),offset));
+  
 }
 
 static void genAddLit (iCode *ic, int lit)
 {
-       
-       int size,same;
-       int lo;
-       
-       operand *result;
-       operand *left;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       
-       left = IC_LEFT(ic);
-       result = IC_RESULT(ic);
-       same = pic14_sameRegs(AOP(left), AOP(result));
-       size = pic14_getDataSize(result);
-       
-       if(same) {
-               
-               /* Handle special cases first */
-               if(size == 1) 
-                       genAddLit2byte (result, 0, lit);
-               
-               else if(size == 2) {
-                       int hi = 0xff & (lit >> 8);
-                       lo = lit & 0xff;
-                       
-                       switch(hi) {
-                       case 0: 
-                               
-                               /* lit = 0x00LL */
-                               DEBUGpic14_emitcode ("; hi = 0","%s  %d",__FUNCTION__,__LINE__);
-                               switch(lo) {
-                               case 0:
-                                       break;
-                               case 1:
-                                       emitpcode(POC_INCF, popGet(AOP(result),0));
-                                       emitSKPNZ;
-                                       emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                       break;
-                               case 0xff:
-                                       emitpcode(POC_DECF, popGet(AOP(result),0));
-                                       emitpcode(POC_INCFSZW, popGet(AOP(result),0));
-                                       emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                       
-                                       break;
-                               default:
-                                       emitpcode(POC_MOVLW,popGetLit(lit&0xff));
-                                       emitpcode(POC_ADDWF,popGet(AOP(result),0));
-                                       emitSKPNC;
-                                       emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                       
-                                       
-                               }
-                               break;
-                               
-                               case 1:
-                                       /* lit = 0x01LL */
-                                       DEBUGpic14_emitcode ("; hi = 1","%s  %d",__FUNCTION__,__LINE__);
-                                       switch(lo) {
-                                       case 0:  /* 0x0100 */
-                                               emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                               break;
-                                       case 1:  /* 0x0101  */
-                                               emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                               emitpcode(POC_INCF, popGet(AOP(result),0));
-                                               emitSKPNZ;
-                                               emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                               break;
-                                       case 0xff: /* 0x01ff */
-                                               emitpcode(POC_DECF, popGet(AOP(result),0));
-                                               emitpcode(POC_INCFSZW, popGet(AOP(result),0));
-                                               emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                               emitpcode(POC_INCF, popGet(AOP(result),MSB16));
-                                       }         
-                                       break;
-                                       
-                                       case 0xff:
-                                               DEBUGpic14_emitcode ("; hi = ff","%s  %d",__FUNCTION__,__LINE__);
-                                               /* lit = 0xffLL */
-                                               switch(lo) {
-                                               case 0:  /* 0xff00 */
-                                                       emitpcode(POC_DECF, popGet(AOP(result),MSB16));
-                                                       break;
-                                               case 1:  /*0xff01 */
-                                                       emitpcode(POC_INCFSZ, popGet(AOP(result),0));
-                                                       emitpcode(POC_DECF, popGet(AOP(result),MSB16));
-                                                       break;
-                                                       /*      case 0xff: * 0xffff *
-                                                       emitpcode(POC_INCFSZW, popGet(AOP(result),0,FALSE,FALSE));
-                                                       emitpcode(POC_INCF, popGet(AOP(result),MSB16,FALSE,FALSE));
-                                                       emitpcode(POC_DECF, popGet(AOP(result),0,FALSE,FALSE));
-                                                       break;
-                                                       */
-                                               default:
-                                                       emitpcode(POC_MOVLW,popGetLit(lo));
-                                                       emitpcode(POC_ADDWF,popGet(AOP(result),0));
-                                                       emitSKPC;
-                                                       emitpcode(POC_DECF, popGet(AOP(result),MSB16));
-                                                       
-                                               }
-                                               
-                                               break;
-                                               
-                                               default:
-                                                       DEBUGpic14_emitcode ("; hi is generic","%d   %s  %d",hi,__FUNCTION__,__LINE__);
-                                                       
-                                                       /* lit = 0xHHLL */
-                                                       switch(lo) {
-                                                       case 0:  /* 0xHH00 */
-                                                               genAddLit2byte (result, MSB16, hi);
-                                                               break;
-                                                       case 1:  /* 0xHH01 */
-                                                               emitpcode(POC_MOVLW,popGetLit((hi+1)&0xff));
-                                                               emitpcode(POC_INCFSZ, popGet(AOP(result),0));
-                                                               emitpcode(POC_MOVLW,popGetLit(hi));
-                                                               emitpcode(POC_ADDWF,popGet(AOP(result),MSB16));
-                                                               break;
-                                                               /*      case 0xff: * 0xHHff *
-                                                               emitpcode(POC_MOVFW, popGet(AOP(result),0,FALSE,FALSE));
-                                                               emitpcode(POC_DECF, popGet(AOP(result),MSB16,FALSE,FALSE));
-                                                               emitpcode(POC_MOVLW,popGetLit(hi));
-                                                               emitpcode(POC_ADDWF,popGet(AOP(result),MSB16,FALSE,FALSE));
-                                                               break;
-                                                               */      default:  /* 0xHHLL */
-                                                               emitpcode(POC_MOVLW,popGetLit(lo));
-                                                               emitpcode(POC_ADDWF, popGet(AOP(result),0));
-                                                               emitpcode(POC_MOVLW,popGetLit(hi));
-                                                               emitSKPNC;
-                                                               emitpcode(POC_MOVLW,popGetLit((hi+1) & 0xff));
-                                                               emitpcode(POC_ADDWF,popGet(AOP(result),MSB16));
-                                                               break;
-                                                       }
-                                                       
-         }
-       } else {
-               int carry_info = 0;
-               int offset = 0;
-               /* size > 2 */
-               DEBUGpic14_emitcode (";  add lit to long","%s  %d",__FUNCTION__,__LINE__);
-               
-               while(size--) {
-                       lo = BYTEofLONG(lit,0);
-                       
-                       if(carry_info) {
-                               switch(lo) {
-                               case 0:
-                                       switch(carry_info) {
-                                       case 1:
-                                               emitSKPNZ;
-                                               emitpcode(POC_INCF, popGet(AOP(result),offset));
-                                               break;
-                                       case 2:
-                                               emitpcode(POC_RLFW, popGet(AOP(result),offset));
-                                               emitpcode(POC_ANDLW,popGetLit(1));
-                                               emitpcode(POC_ADDWF, popGet(AOP(result),offset));
-                                               break;
-                                       default: /* carry_info = 3  */
-                                               emitSKPNC;
-                                               emitpcode(POC_INCF, popGet(AOP(result),offset));
-                                               carry_info = 1;
-                                               break;
-                                       }
-                                       break;
-                                       case 0xff:
-                                               emitpcode(POC_MOVLW,popGetLit(lo));
-                                               if(carry_info==1) 
-                                                       emitSKPZ;
-                                               else
-                                                       emitSKPC;
-                                               emitpcode(POC_ADDWF, popGet(AOP(result),offset));
-                                               break;
-                                       default:
-                                               emitpcode(POC_MOVLW,popGetLit(lo));
-                                               if(carry_info==1) 
-                                                       emitSKPNZ;
-                                               else
-                                                       emitSKPNC;
-                                               emitpcode(POC_MOVLW,popGetLit(lo+1));
-                                               emitpcode(POC_ADDWF, popGet(AOP(result),offset));
-                                               carry_info=2;
-                                               break;
-                               }
-                       }else {
-                               /* no carry info from previous step */
-                               /* this means this is the first time to add */
-                               switch(lo) {
-                               case 0:
-                                       break;
-                               case 1:
-                                       emitpcode(POC_INCF, popGet(AOP(result),offset));
-                                       carry_info=1;
-                                       break;
-                               default:
-                                       emitpcode(POC_MOVLW,popGetLit(lo));
-                                       emitpcode(POC_ADDWF, popGet(AOP(result),offset));
-                                       if(lit <0x100) 
-                                               carry_info = 3;  /* Were adding only one byte and propogating the carry */
-                                       else
-                                               carry_info = 2;
-                                       break;
-                               }
-                       }
-                       offset++;
-                       lit >>= 8;
-               }
-               
-               /*
-               lo = BYTEofLONG(lit,0);
+  
+  int size,same;
+  int lo;
+  
+  operand *result;
+  operand *left;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  
+  left = IC_LEFT(ic);
+  result = IC_RESULT(ic);
+  same = pic14_sameRegs(AOP(left), AOP(result));
+  size = pic14_getDataSize(result);
+  
+  if(same) {
+    
+    /* Handle special cases first */
+    if(size == 1) 
+      genAddLit2byte (result, 0, lit);
+    
+    else if(size == 2) {
+      int hi = 0xff & (lit >> 8);
+      lo = lit & 0xff;
+      
+      switch(hi) {
+      case 0: 
+        
+        /* lit = 0x00LL */
+        DEBUGpic14_emitcode ("; hi = 0","%s  %d",__FUNCTION__,__LINE__);
+        switch(lo) {
+        case 0:
+          break;
+        case 1:
+          emitpcode(POC_INCF, popGet(AOP(result),0));
+          emitSKPNZ;
+          emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+          break;
+        case 0xff:
+          emitpcode(POC_DECF, popGet(AOP(result),0));
+          emitpcode(POC_INCFSZW, popGet(AOP(result),0));
+          emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+          
+          break;
+        default:
+          emitpcode(POC_MOVLW,popGetLit(lit&0xff));
+          emitpcode(POC_ADDWF,popGet(AOP(result),0));
+          emitSKPNC;
+          emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+          
+          
+        }
+        break;
+        
+        case 1:
+          /* lit = 0x01LL */
+          DEBUGpic14_emitcode ("; hi = 1","%s  %d",__FUNCTION__,__LINE__);
+          switch(lo) {
+          case 0:  /* 0x0100 */
+            emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+            break;
+          case 1:  /* 0x0101  */
+            emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+            emitpcode(POC_INCF, popGet(AOP(result),0));
+            emitSKPNZ;
+            emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+            break;
+          case 0xff: /* 0x01ff */
+            emitpcode(POC_DECF, popGet(AOP(result),0));
+            emitpcode(POC_INCFSZW, popGet(AOP(result),0));
+            emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+            emitpcode(POC_INCF, popGet(AOP(result),MSB16));
+          }   
+          break;
+          
+          case 0xff:
+            DEBUGpic14_emitcode ("; hi = ff","%s  %d",__FUNCTION__,__LINE__);
+            /* lit = 0xffLL */
+            switch(lo) {
+            case 0:  /* 0xff00 */
+              emitpcode(POC_DECF, popGet(AOP(result),MSB16));
+              break;
+            case 1:  /*0xff01 */
+              emitpcode(POC_INCFSZ, popGet(AOP(result),0));
+              emitpcode(POC_DECF, popGet(AOP(result),MSB16));
+              break;
+              /*  case 0xff: * 0xffff *
+              emitpcode(POC_INCFSZW, popGet(AOP(result),0,FALSE,FALSE));
+              emitpcode(POC_INCF, popGet(AOP(result),MSB16,FALSE,FALSE));
+              emitpcode(POC_DECF, popGet(AOP(result),0,FALSE,FALSE));
+              break;
+              */
+            default:
+              emitpcode(POC_MOVLW,popGetLit(lo));
+              emitpcode(POC_ADDWF,popGet(AOP(result),0));
+              emitSKPC;
+              emitpcode(POC_DECF, popGet(AOP(result),MSB16));
+              
+            }
+            
+            break;
+            
+            default:
+              DEBUGpic14_emitcode ("; hi is generic","%d   %s  %d",hi,__FUNCTION__,__LINE__);
+              
+              /* lit = 0xHHLL */
+              switch(lo) {
+              case 0:  /* 0xHH00 */
+                genAddLit2byte (result, MSB16, hi);
+                break;
+              case 1:  /* 0xHH01 */
+                emitpcode(POC_MOVLW,popGetLit((hi+1)&0xff));
+                emitpcode(POC_INCFSZ, popGet(AOP(result),0));
+                emitpcode(POC_MOVLW,popGetLit(hi));
+                emitpcode(POC_ADDWF,popGet(AOP(result),MSB16));
+                break;
+                /*  case 0xff: * 0xHHff *
+                emitpcode(POC_MOVFW, popGet(AOP(result),0,FALSE,FALSE));
+                emitpcode(POC_DECF, popGet(AOP(result),MSB16,FALSE,FALSE));
+                emitpcode(POC_MOVLW,popGetLit(hi));
+                emitpcode(POC_ADDWF,popGet(AOP(result),MSB16,FALSE,FALSE));
+                break;
+                */  default:  /* 0xHHLL */
+                emitpcode(POC_MOVLW,popGetLit(lo));
+                emitpcode(POC_ADDWF, popGet(AOP(result),0));
+                emitpcode(POC_MOVLW,popGetLit(hi));
+                emitSKPNC;
+                emitpcode(POC_MOVLW,popGetLit((hi+1) & 0xff));
+                emitpcode(POC_ADDWF,popGet(AOP(result),MSB16));
+                break;
+              }
+              
+    }
+  } else {
+    int carry_info = 0;
+    int offset = 0;
+    /* size > 2 */
+    DEBUGpic14_emitcode (";  add lit to long","%s  %d",__FUNCTION__,__LINE__);
+    
+    while(size--) {
+      lo = BYTEofLONG(lit,0);
+      
+      if(carry_info) {
+        switch(lo) {
+        case 0:
+          switch(carry_info) {
+          case 1:
+            emitSKPNZ;
+            emitpcode(POC_INCF, popGet(AOP(result),offset));
+            break;
+          case 2:
+            emitpcode(POC_RLFW, popGet(AOP(result),offset));
+            emitpcode(POC_ANDLW,popGetLit(1));
+            emitpcode(POC_ADDWF, popGet(AOP(result),offset));
+            break;
+          default: /* carry_info = 3  */
+            emitSKPNC;
+            emitpcode(POC_INCF, popGet(AOP(result),offset));
+            carry_info = 1;
+            break;
+          }
+          break;
+          case 0xff:
+            emitpcode(POC_MOVLW,popGetLit(lo));
+            if(carry_info==1) 
+              emitSKPZ;
+            else
+              emitSKPC;
+            emitpcode(POC_ADDWF, popGet(AOP(result),offset));
+            break;
+          default:
+            emitpcode(POC_MOVLW,popGetLit(lo));
+            if(carry_info==1) 
+              emitSKPNZ;
+            else
+              emitSKPNC;
+            emitpcode(POC_MOVLW,popGetLit(lo+1));
+            emitpcode(POC_ADDWF, popGet(AOP(result),offset));
+            carry_info=2;
+            break;
+        }
+      }else {
+        /* no carry info from previous step */
+        /* this means this is the first time to add */
+        switch(lo) {
+        case 0:
+          break;
+        case 1:
+          emitpcode(POC_INCF, popGet(AOP(result),offset));
+          carry_info=1;
+          break;
+        default:
+          emitpcode(POC_MOVLW,popGetLit(lo));
+          emitpcode(POC_ADDWF, popGet(AOP(result),offset));
+          if(lit <0x100) 
+            carry_info = 3;  /* Were adding only one byte and propogating the carry */
+          else
+            carry_info = 2;
+          break;
+        }
+      }
+      offset++;
+      lit >>= 8;
+    }
+    
+    /*
+    lo = BYTEofLONG(lit,0);
 
-               if(lit < 0x100) {
-                       if(lo) {
-                               if(lo == 1) {
-                                       emitpcode(POC_INCF, popGet(AOP(result),0,FALSE,FALSE));
-                                       emitSKPNZ;
-                               } else {
-                                       emitpcode(POC_MOVLW,popGetLit(lo));
-                                       emitpcode(POC_ADDWF, popGet(AOP(result),0,FALSE,FALSE));
-                                       emitSKPNC;
-                               }
-                               emitpcode(POC_INCF, popGet(AOP(result),1,FALSE,FALSE));
-                               emitSKPNZ;
-                               emitpcode(POC_INCF, popGet(AOP(result),2,FALSE,FALSE));
-                               emitSKPNZ;
-                               emitpcode(POC_INCF, popGet(AOP(result),3,FALSE,FALSE));
+    if(lit < 0x100) {
+      if(lo) {
+        if(lo == 1) {
+          emitpcode(POC_INCF, popGet(AOP(result),0,FALSE,FALSE));
+          emitSKPNZ;
+        } else {
+          emitpcode(POC_MOVLW,popGetLit(lo));
+          emitpcode(POC_ADDWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitSKPNC;
+        }
+        emitpcode(POC_INCF, popGet(AOP(result),1,FALSE,FALSE));
+        emitSKPNZ;
+        emitpcode(POC_INCF, popGet(AOP(result),2,FALSE,FALSE));
+        emitSKPNZ;
+        emitpcode(POC_INCF, popGet(AOP(result),3,FALSE,FALSE));
 
-                               
-                       
-               }
-                       
-               */
-       }
+        } 
+      } 
+    }
+      
+    */
+  }
   } else {
-         int offset = 1;
-         DEBUGpic14_emitcode (";  left and result aren't same","%s  %d",__FUNCTION__,__LINE__);
-         
-         if(size == 1) {
-                 
-                 if(AOP_TYPE(left) == AOP_ACC) {
-                         /* left addend is already in accumulator */
-                         switch(lit & 0xff) {
-                         case 0:
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                                 break;
-                         default:
-                                 emitpcode(POC_ADDLW, popGetLit(lit & 0xff));
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                         }
-                 } else {
-                         /* left addend is in a register */
-                         switch(lit & 0xff) {
-                         case 0:
-                                 emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                                 emitMOVWF(result, 0);
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                                 break;
-                         case 1:
-                                 emitpcode(POC_INCFW, popGet(AOP(left),0));
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                                 break;
-                         case 0xff:
-                                 emitpcode(POC_DECFW, popGet(AOP(left),0));
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                                 break;
-                         default:
-                                 emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                 emitpcode(POC_ADDFW, popGet(AOP(left),0));
-                                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                                 emitMOVWF(result,0);
-                         }
-                 }
-                 
-         } else {
-                 int clear_carry=0;
-                 
-                 /* left is not the accumulator */
-                 if(lit & 0xff) {
-                         emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                         emitpcode(POC_ADDFW, popGet(AOP(left),0));
-                 } else {
-                         emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                         /* We don't know the state of the carry bit at this point */
-                         clear_carry = 1;
-                 }
-                 //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
-                 emitMOVWF(result,0);
-                 while(--size) {
-                         
-                         lit >>= 8;
-                         if(lit & 0xff) {
-                                 if(clear_carry) {
-                                 /* The ls byte of the lit must've been zero - that 
-                                         means we don't have to deal with carry */
-                                         
-                                         emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                         emitpcode(POC_ADDFW,  popGet(AOP(left),offset));
-                                         emitpcode(POC_MOVWF, popGet(AOP(left),offset));
-                                         
-                                         clear_carry = 0;
-                                         
-                                 } else {
-                                         emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                         //emitpcode(POC_MOVWF, popGet(AOP(result),offset,FALSE,FALSE));
-                                         emitMOVWF(result,offset);
-                                         emitpcode(POC_MOVFW, popGet(AOP(left),offset));
-                                         emitSKPNC;
-                                         emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
-                                         emitpcode(POC_ADDWF,  popGet(AOP(result),offset));
-                                 }
-                                 
-                         } else {
-                                 emitpcode(POC_CLRF,  popGet(AOP(result),offset));
-                                 emitpcode(POC_RLF,   popGet(AOP(result),offset));
-                                 emitpcode(POC_MOVFW, popGet(AOP(left),offset));
-                                 emitpcode(POC_ADDWF, popGet(AOP(result),offset));
-                         }
-                         offset++;
-                 }
-         }
+    int offset = 1;
+    DEBUGpic14_emitcode (";  left and result aren't same","%s  %d",__FUNCTION__,__LINE__);
+    
+    if(size == 1) {
+      
+      if(AOP_TYPE(left) == AOP_ACC) {
+        /* left addend is already in accumulator */
+        switch(lit & 0xff) {
+        case 0:
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+          break;
+        default:
+          emitpcode(POC_ADDLW, popGetLit(lit & 0xff));
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+        }
+      } else {
+        /* left addend is in a register */
+        switch(lit & 0xff) {
+        case 0:
+          emitpcode(POC_MOVFW, popGet(AOP(left),0));
+          emitMOVWF(result, 0);
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+          break;
+        case 1:
+          emitpcode(POC_INCFW, popGet(AOP(left),0));
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+          break;
+        case 0xff:
+          emitpcode(POC_DECFW, popGet(AOP(left),0));
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+          break;
+        default:
+          emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+          emitpcode(POC_ADDFW, popGet(AOP(left),0));
+          //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+          emitMOVWF(result,0);
+        }
+      }
+      
+    } else {
+      int clear_carry=0;
+      
+      /* left is not the accumulator */
+      if(lit & 0xff) {
+        emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+        emitpcode(POC_ADDFW, popGet(AOP(left),0));
+      } else {
+        emitpcode(POC_MOVFW, popGet(AOP(left),0));
+        /* We don't know the state of the carry bit at this point */
+        clear_carry = 1;
+      }
+      //emitpcode(POC_MOVWF, popGet(AOP(result),0,FALSE,FALSE));
+      emitMOVWF(result,0);
+      while(--size) {
+        
+        lit >>= 8;
+        if(lit & 0xff) {
+          if(clear_carry) {
+          /* The ls byte of the lit must've been zero - that 
+            means we don't have to deal with carry */
+            
+            emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+            emitpcode(POC_ADDFW,  popGet(AOP(left),offset));
+            emitpcode(POC_MOVWF, popGet(AOP(left),offset));
+            
+            clear_carry = 0;
+            
+          } else {
+            emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+            //emitpcode(POC_MOVWF, popGet(AOP(result),offset,FALSE,FALSE));
+            emitMOVWF(result,offset);
+            emitpcode(POC_MOVFW, popGet(AOP(left),offset));
+            emitSKPNC;
+            emitpcode(POC_INCFSZW,popGet(AOP(left),offset));
+            emitpcode(POC_ADDWF,  popGet(AOP(result),offset));
+          }
+          
+        } else {
+          emitpcode(POC_CLRF,  popGet(AOP(result),offset));
+          emitpcode(POC_RLF,   popGet(AOP(result),offset));
+          emitpcode(POC_MOVFW, popGet(AOP(left),offset));
+          emitpcode(POC_ADDWF, popGet(AOP(result),offset));
+        }
+        offset++;
+      }
+    }
   }
 }
 
@@ -777,318 +833,318 @@ static void genAddLit (iCode *ic, int lit)
 /*-----------------------------------------------------------------*/
 void genPlus (iCode *ic)
 {
-       int size, offset = 0;
-       
-       /* special cases :- */
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       aopOp (IC_LEFT(ic),ic,FALSE);
-       aopOp (IC_RIGHT(ic),ic,FALSE);
-       aopOp (IC_RESULT(ic),ic,TRUE);
-       
-       DEBUGpic14_AopType(__LINE__,IC_LEFT(ic),IC_RIGHT(ic),IC_RESULT(ic));
-       
-       /* if literal, literal on the right or
-       if left requires ACC or right is already
-       in ACC */
-       
-       if (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) {
-               operand *t = IC_RIGHT(ic);
-               IC_RIGHT(ic) = IC_LEFT(ic);
-               IC_LEFT(ic) = t;
-       }
-       
-       /* if both left & right are in bit space */
-       if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
-               AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
-               genPlusBits (ic);
-               goto release ;
-       }
-       
-       /* if left in bit space & right literal */
-       if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
-               AOP_TYPE(IC_RIGHT(ic)) == AOP_LIT) {
-               /* if result in bit space */
-               if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY){
-                       if((unsigned long)floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit) != 0L) {
-                               emitpcode(POC_MOVLW, popGet(AOP(IC_RESULT(ic)),0));
-                               if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
-                                       emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
-                               emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
-                       }
-               } else {
-                       size = pic14_getDataSize(IC_RESULT(ic));
-                       while (size--) {
-                               MOVA(aopGet(AOP(IC_RIGHT(ic)),offset,FALSE,FALSE));  
-                               pic14_emitcode("addc","a,#00  ;%d",__LINE__);
-                               aopPut(AOP(IC_RESULT(ic)),"a",offset++);
-                       }
-               }
-               goto release ;
-       }
-       
-       /* if I can do an increment instead
-       of add then GOOD for ME */
-       if (genPlusIncr (ic) == TRUE)
-               goto release;   
-       
-       size = pic14_getDataSize(IC_RESULT(ic));
-       
-       if(AOP(IC_RIGHT(ic))->type == AOP_LIT) {
-               /* Add a literal to something else */
-               //bool know_W=0;
-               unsigned lit = (unsigned) floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit);
-               //      unsigned l1=0;
-               
-               //      offset = 0;
-               DEBUGpic14_emitcode(";","adding lit to something. size %d",size);
-               
-               genAddLit (ic,  lit);
-               goto release;
-               
-       } else if(AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
-               
-               pic14_emitcode(";bitadd","right is bit: %s",aopGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
-               pic14_emitcode(";bitadd","left is bit: %s",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-               pic14_emitcode(";bitadd","result is bit: %s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               
-               /* here we are adding a bit to a char or int */
-               if(size == 1) {
-                       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-                               
-                               emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_INCF ,  popGet(AOP(IC_RESULT(ic)),0));
-                               
-                               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                               pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                       } else {
-                               
-                               if(AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
-                                       emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                       emitpcode(POC_XORLW , popGetLit(1));
-                                       
-                                       pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                               AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                               AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                                       pic14_emitcode(" xorlw","1");
-                               } else {
-                                       emitpcode(POC_MOVFW , popGet(AOP(IC_LEFT(ic)),0));
-                                       emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                       emitpcode(POC_INCFW , popGet(AOP(IC_LEFT(ic)),0));
-                                       
-                                       pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-                                       pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                               AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                               AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                                       pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-                               }
-                               
-                               if(AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
-                                       
-                                       if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
-                                               emitpcode(POC_ANDLW , popGetLit(1));
-                                               emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                               emitSKPZ;
-                                               emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                       } else {
-                                               emitpcode(POC_MOVWF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                               pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                                       }
-                               }
-                       }
-                       
-               } else {
-                       int offset = 1;
-                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-                               emitCLRZ;
-                               emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),0));
-                               
-                               pic14_emitcode("clrz","");
-                               
-                               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                               pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                               
-                       } else {
-                               
-                               emitpcode(POC_MOVFW, popGet(AOP(IC_LEFT(ic)),0));
-                               emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_INCFW, popGet(AOP(IC_LEFT(ic)),0));
-                               //emitpcode(POC_MOVWF, popGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
-                               emitMOVWF(IC_RIGHT(ic),0);
-                               
-                               pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-                               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                               pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-                               pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                               
-                       }
-                       
-                       while(--size){
-                               emitSKPZ;
-                               emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),offset++));
-                               //pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RIGHT(ic)),offset++,FALSE,FALSE));
-                       }
-                       
-               }
-               
-       } else {
-               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);    
-               
-               /* Add the first bytes */
-               
-               if(strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a") == 0 ) {
-                       emitpcode(POC_ADDFW, popGet(AOP(IC_RIGHT(ic)),0));
-                       emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-               } else {
-                       
-                       if ( AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
-                               emitpcode(POC_ADDFW, popGet(AOP(IC_RIGHT(ic)),0));
-                               if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
-                                       emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-                       } else {
-                               
-                               emitpcode(POC_MOVFW,popGet(AOP(IC_RIGHT(ic)),0));
-                               
-                               if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
-                                       emitpcode(POC_ADDWF, popGet(AOP(IC_LEFT(ic)),0));
-                               else {
-                                       PIC_OPCODE poc = POC_ADDFW;
-                                       
-                                       if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                                               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                                               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
-                                               poc = POC_ADDLW;
-                                       emitpcode(poc, popGet(AOP(IC_LEFT(ic)),0));
-                                       if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
-                                               emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-                               }
-                       }
-               }
-               
-               size = min( AOP_SIZE(IC_RESULT(ic)), AOP_SIZE(IC_RIGHT(ic))) - 1;
-               offset = 1;
-               
-               
-               if(size){
-                       if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)))) {
-                               if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE))) {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitSKPNC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_ADDLW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
-                               } else {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitSKPNC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_ADDWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
-                               }
-                       } else {
-                               PIC_OPCODE poc = POC_MOVFW;
-                               if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
-                                       poc = POC_MOVLW;
-                               while(size--){
-                                       if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-                                               emitpcode(poc, popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                                       }
-                                       emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitSKPNC;
-                                       emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitpcode(POC_ADDWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                       offset++;
-                               }
-                       }
-               }
-       }
-       
-       if (AOP_SIZE(IC_RESULT(ic)) > AOP_SIZE(IC_RIGHT(ic))) {
-               int sign =  !(SPEC_USIGN(getSpec(operandType(IC_LEFT(ic)))) |
-                       SPEC_USIGN(getSpec(operandType(IC_RIGHT(ic)))) );
-               
-               
-               /* Need to extend result to higher bytes */
-               size = AOP_SIZE(IC_RESULT(ic)) - AOP_SIZE(IC_RIGHT(ic)) - 1;
-               
-               /* First grab the carry from the lower bytes */
-               if (AOP_SIZE(IC_LEFT(ic)) > AOP_SIZE(IC_RIGHT(ic))) { 
-                       int leftsize = AOP_SIZE(IC_LEFT(ic)) - AOP_SIZE(IC_RIGHT(ic));
-                       PIC_OPCODE poc = POC_MOVFW;
-                       if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
-                               poc = POC_MOVLW;
-                       while(leftsize-- > 0) {
-                               emitpcode(poc, popGet(AOP(IC_LEFT(ic)),offset));
-                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                               emitSKPNC;
-                               emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset));
-                               offset++;
-                               if (size)
-                                       size--;
-                               else
-                                       break;
-                       }
-               } else {
-                       emitpcode(POC_CLRF, popGet(AOP(IC_RESULT(ic)),offset));
-                       emitpcode(POC_RLF,  popGet(AOP(IC_RESULT(ic)),offset));
-               }
-               
-               
-               if(sign) {
-               /* Now this is really horrid. Gotta check the sign of the addends and propogate
-                       * to the result */
-                       
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_LEFT(ic)),offset-1,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
-                       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_RIGHT(ic)),offset-1,FALSE,FALSE),7,0));
-                       emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
-                       
-                       /* if chars or ints or being signed extended to longs: */
-                       if(size) {
-                               emitpcode(POC_MOVLW, popGetLit(0));
-                               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_RESULT(ic)),offset,FALSE,FALSE),7,0));
-                               emitpcode(POC_MOVLW, popGetLit(0xff));
-                       }
-               }
-               
-               offset++;
-               while(size--) {
-                       
-                       if(sign)
-                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                       else
-                               emitpcode(POC_CLRF,  popGet(AOP(IC_RESULT(ic)),offset));
-                       
-                       offset++;
-               }
-       }
-       
-       
-       //adjustArithmeticResult(ic);
-       
-release:
-       freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(IC_RIGHT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  int size, offset = 0;
+  
+  /* special cases :- */
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  aopOp (IC_LEFT(ic),ic,FALSE);
+  aopOp (IC_RIGHT(ic),ic,FALSE);
+  aopOp (IC_RESULT(ic),ic,TRUE);
+  
+  DEBUGpic14_AopType(__LINE__,IC_LEFT(ic),IC_RIGHT(ic),IC_RESULT(ic));
+  
+  /* if literal, literal on the right or
+     if left requires ACC or right is already
+     in ACC */
+  
+  if (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) {
+    operand *t = IC_RIGHT(ic);
+    IC_RIGHT(ic) = IC_LEFT(ic);
+    IC_LEFT(ic) = t;
+  }
+  
+  /* if both left & right are in bit space */
+  if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
+      AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
+    genPlusBits (ic);
+    goto release ;
+  }
+  
+  /* if left in bit space & right literal */
+  if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
+      AOP_TYPE(IC_RIGHT(ic)) == AOP_LIT) {
+    /* if result in bit space */
+    if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY){
+      if((unsigned long)floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit) != 0L) {
+  emitpcode(POC_MOVLW, popGet(AOP(IC_RESULT(ic)),0));
+  if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
+    emitpcode(POC_BTFSC, popGet(AOP(IC_LEFT(ic)),0));
+  emitpcode(POC_XORWF, popGet(AOP(IC_RESULT(ic)),0));
+      }
+    } else {
+      size = pic14_getDataSize(IC_RESULT(ic));
+      while (size--) {
+  MOVA(aopGet(AOP(IC_RIGHT(ic)),offset,FALSE,FALSE));  
+  pic14_emitcode("addc","a,#00  ;%d",__LINE__);
+  aopPut(AOP(IC_RESULT(ic)),"a",offset++);
+      }
+    }
+    goto release ;
+  }
+  
+  /* if I can do an increment instead
+     of add then GOOD for ME */
+  if (genPlusIncr (ic) == TRUE)
+    goto release;   
+  
+  size = pic14_getDataSize(IC_RESULT(ic));
+  
+  if(AOP(IC_RIGHT(ic))->type == AOP_LIT) {
+    /* Add a literal to something else */
+    //bool know_W=0;
+    unsigned lit = (unsigned) floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit);
+    //      unsigned l1=0;
+    
+    //      offset = 0;
+    DEBUGpic14_emitcode(";","adding lit to something. size %d",size);
+    
+    genAddLit (ic,  lit);
+    goto release;
+    
+  } else if(AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
+    
+    pic14_emitcode(";bitadd","right is bit: %s",aopGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
+    pic14_emitcode(";bitadd","left is bit: %s",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+    pic14_emitcode(";bitadd","result is bit: %s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    
+    /* here we are adding a bit to a char or int */
+    if(size == 1) {
+      if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+        
+  emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+  emitpcode(POC_INCF ,  popGet(AOP(IC_RESULT(ic)),0));
+        
+  pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+           AOP(IC_RIGHT(ic))->aopu.aop_dir,
+           AOP(IC_RIGHT(ic))->aopu.aop_dir);
+  pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+      } else {
+        
+  if(AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
+    emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+    emitpcode(POC_XORLW , popGetLit(1));
+          
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_RIGHT(ic))->aopu.aop_dir,
+       AOP(IC_RIGHT(ic))->aopu.aop_dir);
+    pic14_emitcode(" xorlw","1");
+  } else {
+    emitpcode(POC_MOVFW , popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+    emitpcode(POC_INCFW , popGet(AOP(IC_LEFT(ic)),0));
+          
+    pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+    pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+       AOP(IC_RIGHT(ic))->aopu.aop_dir,
+       AOP(IC_RIGHT(ic))->aopu.aop_dir);
+    pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+  }
+        
+  if(AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
+          
+    if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
+      emitpcode(POC_ANDLW , popGetLit(1));
+      emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0));
+      emitSKPZ;
+      emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0));
+    } else {
+      emitpcode(POC_MOVWF ,   popGet(AOP(IC_RESULT(ic)),0));
+      pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    }
+  }
+      }
+      
+    } else {
+      int offset = 1;
+      DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+      if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+  emitCLRZ;
+  emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+  emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),0));
+        
+  pic14_emitcode("clrz","");
+        
+  pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+           AOP(IC_RIGHT(ic))->aopu.aop_dir,
+           AOP(IC_RIGHT(ic))->aopu.aop_dir);
+  pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+        
+      } else {
+        
+  emitpcode(POC_MOVFW, popGet(AOP(IC_LEFT(ic)),0));
+  emitpcode(POC_BTFSC, popGet(AOP(IC_RIGHT(ic)),0));
+  emitpcode(POC_INCFW, popGet(AOP(IC_LEFT(ic)),0));
+  //emitpcode(POC_MOVWF, popGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
+  emitMOVWF(IC_RIGHT(ic),0);
+        
+  pic14_emitcode("movf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+  pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+           AOP(IC_RIGHT(ic))->aopu.aop_dir,
+           AOP(IC_RIGHT(ic))->aopu.aop_dir);
+  pic14_emitcode(" incf","%s,w", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+  pic14_emitcode("movwf","%s", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+        
+      }
+      
+      while(--size){
+  emitSKPZ;
+  emitpcode(POC_INCF,  popGet(AOP(IC_RESULT(ic)),offset++));
+  //pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RIGHT(ic)),offset++,FALSE,FALSE));
+      }
+      
+    }
+    
+  } else {
+    DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);    
+    
+    /* Add the first bytes */
+    
+    if(strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a") == 0 ) {
+      emitpcode(POC_ADDFW, popGet(AOP(IC_RIGHT(ic)),0));
+      emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+    } else {
+      
+      if ( AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
+  emitpcode(POC_ADDFW, popGet(AOP(IC_RIGHT(ic)),0));
+  if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
+    emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+      } else {
+        
+  emitpcode(POC_MOVFW,popGet(AOP(IC_RIGHT(ic)),0));
+        
+  if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
+    emitpcode(POC_ADDWF, popGet(AOP(IC_LEFT(ic)),0));
+  else {
+    PIC_OPCODE poc = POC_ADDFW;
+          
+    if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+                   (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+                   (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
+      poc = POC_ADDLW;
+    emitpcode(poc, popGet(AOP(IC_LEFT(ic)),0));
+    if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
+      emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+  }
+      }
+    }
+    
+    size = min( AOP_SIZE(IC_RESULT(ic)), AOP_SIZE(IC_RIGHT(ic))) - 1;
+    offset = 1;
+    
+    
+    if(size){
+      if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)))) {
+  if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+                 (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+                 (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE))) {
+    while(size--){
+      emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
+      emitSKPNC;
+      emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
+      emitpcode(POC_ADDLW,   popGet(AOP(IC_LEFT(ic)),offset));
+      emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
+      offset++;
+    }
+  } else {
+    while(size--){
+      emitpcode(POC_MOVFW,   popGet(AOP(IC_LEFT(ic)),offset));
+      emitSKPNC;
+      emitpcode(POC_INCFSZW, popGet(AOP(IC_LEFT(ic)),offset));
+      emitpcode(POC_ADDWF,   popGet(AOP(IC_RESULT(ic)),offset));
+      offset++;
+    }
+  }
+      } else {
+  PIC_OPCODE poc = POC_MOVFW;
+  if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+                 (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+                 (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
+    poc = POC_MOVLW;
+  while(size--){
+    if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+      emitpcode(poc, popGet(AOP(IC_LEFT(ic)),offset));
+      emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+    }
+    emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
+    emitSKPNC;
+    emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
+    emitpcode(POC_ADDWF,   popGet(AOP(IC_RESULT(ic)),offset));
+    offset++;
+  }
+      }
+    }
+  }
+  
+  if (AOP_SIZE(IC_RESULT(ic)) > AOP_SIZE(IC_RIGHT(ic))) {
+    int sign =  !(SPEC_USIGN(getSpec(operandType(IC_LEFT(ic)))) |
+      SPEC_USIGN(getSpec(operandType(IC_RIGHT(ic)))) );
+    
+    
+    /* Need to extend result to higher bytes */
+    size = AOP_SIZE(IC_RESULT(ic)) - AOP_SIZE(IC_RIGHT(ic)) - 1;
+    
+    /* First grab the carry from the lower bytes */
+    if (AOP_SIZE(IC_LEFT(ic)) > AOP_SIZE(IC_RIGHT(ic))) { 
+      int leftsize = AOP_SIZE(IC_LEFT(ic)) - AOP_SIZE(IC_RIGHT(ic));
+      PIC_OPCODE poc = POC_MOVFW;
+      if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+               (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
+  poc = POC_MOVLW;
+      while(leftsize-- > 0) {
+  emitpcode(poc, popGet(AOP(IC_LEFT(ic)),offset));
+  emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+  emitSKPNC;
+  emitpcode(POC_INCF, popGet(AOP(IC_RESULT(ic)),offset));
+  offset++;
+  if (size)
+    size--;
+  else
+    break;
+      }
+    } else {
+      emitpcode(POC_CLRF, popGet(AOP(IC_RESULT(ic)),offset));
+      emitpcode(POC_RLF,  popGet(AOP(IC_RESULT(ic)),offset));
+    }
+    
+    
+    if(sign) {
+      /* Now this is really horrid. Gotta check the sign of the addends and propogate
+       * to the result */
+      
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_LEFT(ic)),offset-1,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
+      emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_RIGHT(ic)),offset-1,FALSE,FALSE),7,0));
+      emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
+      
+      /* if chars or ints or being signed extended to longs: */
+      if(size) {
+  emitpcode(POC_MOVLW, popGetLit(0));
+  emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(IC_RESULT(ic)),offset,FALSE,FALSE),7,0));
+  emitpcode(POC_MOVLW, popGetLit(0xff));
+      }
+    }
+    
+    offset++;
+    while(size--) {
+      
+      if(sign)
+  emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+      else
+  emitpcode(POC_CLRF,  popGet(AOP(IC_RESULT(ic)),offset));
+      
+      offset++;
+    }
+  }
+  
+  
+  //adjustArithmeticResult(ic);
+  
+ release:
+  freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(IC_RIGHT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -1096,104 +1152,104 @@ release:
 /*-----------------------------------------------------------------*/
 bool genMinusDec (iCode *ic)
 {
-       unsigned int icount ;
-       unsigned int size = pic14_getDataSize(IC_RESULT(ic));
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       /* will try to generate an increment */
-       /* if the right side is not a literal 
-       we cannot */
-       if ((AOP_TYPE(IC_RIGHT(ic)) != AOP_LIT) || 
-               (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY) || 
-               (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) )
-               return FALSE ;
-       
-       DEBUGpic14_emitcode ("; lit val","%d",(unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit));
-       
-       /* if the literal value of the right hand side
-       is greater than 4 then it is not worth it */
-       if ((icount = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit)) > 2)
-               return FALSE ;
-       
-       /* if decrement 16 bits in register */
-       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) &&
-               (size > 1) &&
-               (icount == 1)) {
-               
-               if(size == 2) { 
-                       emitpcode(POC_DECF,    popGet(AOP(IC_RESULT(ic)),LSB));
-                       emitpcode(POC_INCFSZW, popGet(AOP(IC_RESULT(ic)),LSB));
-                       emitpcode(POC_INCF,    popGet(AOP(IC_RESULT(ic)),MSB16));
-                       emitpcode(POC_DECF,    popGet(AOP(IC_RESULT(ic)),MSB16));
-                       
-                       pic14_emitcode("decf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
-                       pic14_emitcode("incfsz","%s,w",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
-                       pic14_emitcode(" decf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB16,FALSE,FALSE));
-               } else {
-                       /* size is 3 or 4 */
-                       emitpcode(POC_MOVLW,  popGetLit(0xff));
-                       emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),LSB));
-                       emitSKPNC;
-                       emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB16));
-                       emitSKPNC;
-                       emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB24));
-                       
-                       pic14_emitcode("movlw","0xff");
-                       pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
-                       
-                       emitSKPNC;
-                       pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB16,FALSE,FALSE));
-                       emitSKPNC;
-                       pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB24,FALSE,FALSE));
-                       
-                       if(size > 3) {
-                               emitSKPNC;
-                               emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB32));
-                               
-                               pic14_emitcode("skpnc","");
-                               emitSKPNC;
-                               pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB32,FALSE,FALSE));
-                       }
-                       
-               }
-               
-               return TRUE;
-               
-       }
-       
-       /* if the sizes are greater than 1 then we cannot */
-       if (AOP_SIZE(IC_RESULT(ic)) > 1 ||
-               AOP_SIZE(IC_LEFT(ic)) > 1   )
-               return FALSE ;
-       
-               /* we can if the aops of the left & result match or
-               if they are in registers and the registers are the
-       same */
-       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic)))) {
-               
-               while (icount--) 
-                       emitpcode(POC_DECF, popGet(AOP(IC_RESULT(ic)),0));
-               
-               //pic14_emitcode ("decf","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               
-               return TRUE ;
-       }
-       
-       DEBUGpic14_emitcode ("; returning"," result=%s, left=%s",
-               aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE),
-               aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-       if(size==1) {
-               
-               pic14_emitcode("decf","%s,w",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-               pic14_emitcode("movwf","%s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               
-               emitpcode(POC_DECFW,  popGet(AOP(IC_LEFT(ic)),0));
-               emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),0));
-               
-               return TRUE;
-       }
-       
-       return FALSE ;
+  unsigned int icount ;
+  unsigned int size = pic14_getDataSize(IC_RESULT(ic));
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  /* will try to generate an increment */
+  /* if the right side is not a literal 
+  we cannot */
+  if ((AOP_TYPE(IC_RIGHT(ic)) != AOP_LIT) || 
+    (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY) || 
+    (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) )
+    return FALSE ;
+  
+  DEBUGpic14_emitcode ("; lit val","%d",(unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit));
+  
+  /* if the literal value of the right hand side
+  is greater than 4 then it is not worth it */
+  if ((icount = (unsigned int) floatFromVal (AOP(IC_RIGHT(ic))->aopu.aop_lit)) > 2)
+    return FALSE ;
+  
+  /* if decrement 16 bits in register */
+  if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) &&
+    (size > 1) &&
+    (icount == 1)) {
+    
+    if(size == 2) { 
+      emitpcode(POC_DECF,    popGet(AOP(IC_RESULT(ic)),LSB));
+      emitpcode(POC_INCFSZW, popGet(AOP(IC_RESULT(ic)),LSB));
+      emitpcode(POC_INCF,    popGet(AOP(IC_RESULT(ic)),MSB16));
+      emitpcode(POC_DECF,    popGet(AOP(IC_RESULT(ic)),MSB16));
+      
+      pic14_emitcode("decf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
+      pic14_emitcode("incfsz","%s,w",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
+      pic14_emitcode(" decf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB16,FALSE,FALSE));
+    } else {
+      /* size is 3 or 4 */
+      emitpcode(POC_MOVLW,  popGetLit(0xff));
+      emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),LSB));
+      emitSKPNC;
+      emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB16));
+      emitSKPNC;
+      emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB24));
+      
+      pic14_emitcode("movlw","0xff");
+      pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),LSB,FALSE,FALSE));
+      
+      emitSKPNC;
+      pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB16,FALSE,FALSE));
+      emitSKPNC;
+      pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB24,FALSE,FALSE));
+      
+      if(size > 3) {
+        emitSKPNC;
+        emitpcode(POC_ADDWF,  popGet(AOP(IC_RESULT(ic)),MSB32));
+        
+        pic14_emitcode("skpnc","");
+        emitSKPNC;
+        pic14_emitcode("addwf","%s,f",aopGet(AOP(IC_RESULT(ic)),MSB32,FALSE,FALSE));
+      }
+      
+    }
+    
+    return TRUE;
+    
+  }
+  
+  /* if the sizes are greater than 1 then we cannot */
+  if (AOP_SIZE(IC_RESULT(ic)) > 1 ||
+    AOP_SIZE(IC_LEFT(ic)) > 1   )
+    return FALSE ;
+  
+    /* we can if the aops of the left & result match or
+    if they are in registers and the registers are the
+  same */
+  if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic)))) {
+    
+    while (icount--) 
+      emitpcode(POC_DECF, popGet(AOP(IC_RESULT(ic)),0));
+    
+    //pic14_emitcode ("decf","%s,f",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    
+    return TRUE ;
+  }
+  
+  DEBUGpic14_emitcode ("; returning"," result=%s, left=%s",
+    aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE),
+    aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+  if(size==1) {
+    
+    pic14_emitcode("decf","%s,w",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+    pic14_emitcode("movwf","%s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    
+    emitpcode(POC_DECFW,  popGet(AOP(IC_LEFT(ic)),0));
+    emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),0));
+    
+    return TRUE;
+  }
+  
+  return FALSE ;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1201,29 +1257,29 @@ bool genMinusDec (iCode *ic)
 /*-----------------------------------------------------------------*/
 void addSign(operand *result, int offset, int sign)
 {
-       int size = (pic14_getDataSize(result) - offset);
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       
-       if(size > 0){
-               if(sign && offset) {
-                       
-                       if(size == 1) {
-                               emitpcode(POC_CLRF,popGet(AOP(result),offset));
-                               emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(result),offset-1,FALSE,FALSE),7,0));
-                               emitpcode(POC_DECF, popGet(AOP(result),offset));
-                       } else {
-                               
-                               emitpcode(POC_MOVLW, popGetLit(0));
-                               emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(result),offset-1,FALSE,FALSE),7,0));
-                               emitpcode(POC_MOVLW, popGetLit(0xff));
-                               while(size--)
-                                       emitpcode(POC_MOVWF, popGet(AOP(result),size));
-                               
-                       }
-               } else
-                       while(size--)
-                               emitpcode(POC_CLRF,popGet(AOP(result),offset++));
-       }
+  int size = (pic14_getDataSize(result) - offset);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  
+  if(size > 0){
+    if(sign && offset) {
+      
+      if(size == 1) {
+        emitpcode(POC_CLRF,popGet(AOP(result),offset));
+        emitpcode(POC_BTFSC,newpCodeOpBit(aopGet(AOP(result),offset-1,FALSE,FALSE),7,0));
+        emitpcode(POC_DECF, popGet(AOP(result),offset));
+      } else {
+        
+        emitpcode(POC_MOVLW, popGetLit(0));
+        emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(result),offset-1,FALSE,FALSE),7,0));
+        emitpcode(POC_MOVLW, popGetLit(0xff));
+        while(size--)
+          emitpcode(POC_MOVWF, popGet(AOP(result),size));
+        
+      }
+    } else
+      while(size--)
+        emitpcode(POC_CLRF,popGet(AOP(result),offset++));
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -1231,24 +1287,24 @@ void addSign(operand *result, int offset, int sign)
 /*-----------------------------------------------------------------*/
 void genMinusBits (iCode *ic)
 {
-       symbol *lbl = newiTempLabel(NULL);
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY){
-               pic14_emitcode("mov","c,%s",AOP(IC_LEFT(ic))->aopu.aop_dir);
-               pic14_emitcode("jnb","%s,%05d_DS_",AOP(IC_RIGHT(ic))->aopu.aop_dir,(lbl->key+100));
-               pic14_emitcode("cpl","c");
-               pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-               pic14_outBitC(IC_RESULT(ic));
-       }
-       else{
-               pic14_emitcode("mov","c,%s",AOP(IC_RIGHT(ic))->aopu.aop_dir);
-               pic14_emitcode("subb","a,acc");
-               pic14_emitcode("jnb","%s,%05d_DS_",AOP(IC_LEFT(ic))->aopu.aop_dir,(lbl->key+100));
-               pic14_emitcode("inc","a");
-               pic14_emitcode("","%05d_DS_:",(lbl->key+100));
-               aopPut(AOP(IC_RESULT(ic)),"a",0);
-               addSign(IC_RESULT(ic), MSB16, SPEC_USIGN(getSpec(operandType(IC_RESULT(ic)))));
-       }
+  symbol *lbl = newiTempLabel(NULL);
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY){
+    pic14_emitcode("mov","c,%s",AOP(IC_LEFT(ic))->aopu.aop_dir);
+    pic14_emitcode("jnb","%s,%05d_DS_",AOP(IC_RIGHT(ic))->aopu.aop_dir,(lbl->key+100));
+    pic14_emitcode("cpl","c");
+    pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+    pic14_outBitC(IC_RESULT(ic));
+  }
+  else{
+    pic14_emitcode("mov","c,%s",AOP(IC_RIGHT(ic))->aopu.aop_dir);
+    pic14_emitcode("subb","a,acc");
+    pic14_emitcode("jnb","%s,%05d_DS_",AOP(IC_LEFT(ic))->aopu.aop_dir,(lbl->key+100));
+    pic14_emitcode("inc","a");
+    pic14_emitcode("","%05d_DS_:",(lbl->key+100));
+    aopPut(AOP(IC_RESULT(ic)),"a",0);
+    addSign(IC_RESULT(ic), MSB16, SPEC_USIGN(getSpec(operandType(IC_RESULT(ic)))));
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -1256,347 +1312,347 @@ void genMinusBits (iCode *ic)
 /*-----------------------------------------------------------------*/
 void genMinus (iCode *ic)
 {
-       int size, offset = 0, same=0;
-       unsigned long lit = 0L;
-       
-       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-       aopOp (IC_LEFT(ic),ic,FALSE);
-       aopOp (IC_RIGHT(ic),ic,FALSE);
-       aopOp (IC_RESULT(ic),ic,TRUE);
-       
-       if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY  &&
-               AOP_TYPE(IC_RIGHT(ic)) == AOP_LIT) {
-               operand *t = IC_RIGHT(ic);
-               IC_RIGHT(ic) = IC_LEFT(ic);
-               IC_LEFT(ic) = t;
-       }
-       
-       DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
-               AopType(AOP_TYPE(IC_RESULT(ic))),
-               AopType(AOP_TYPE(IC_LEFT(ic))),
-               AopType(AOP_TYPE(IC_RIGHT(ic))));
-       
-       /* special cases :- */
-       /* if both left & right are in bit space */
-       if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
-               AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
-               genPlusBits (ic);
-               goto release ;
-       }
-       
-       /* if I can do an decrement instead
-       of subtract then GOOD for ME */
-       //  if (genMinusDec (ic) == TRUE)
-       //    goto release;   
-       
-       size = pic14_getDataSize(IC_RESULT(ic));   
-       same = pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)));
-       
-       if(AOP(IC_RIGHT(ic))->type == AOP_LIT) {
-               /* Add a literal to something else */
-               
-               lit = (unsigned long)floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit);
-               lit = - (long)lit;
-               
-               genAddLit ( ic,  lit);
-               
+  int size, offset = 0, same=0;
+  unsigned long lit = 0L;
+  
+  DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+  aopOp (IC_LEFT(ic),ic,FALSE);
+  aopOp (IC_RIGHT(ic),ic,FALSE);
+  aopOp (IC_RESULT(ic),ic,TRUE);
+  
+  if (AOP_TYPE(IC_RESULT(ic)) == AOP_CRY  &&
+    AOP_TYPE(IC_RIGHT(ic)) == AOP_LIT) {
+    operand *t = IC_RIGHT(ic);
+    IC_RIGHT(ic) = IC_LEFT(ic);
+    IC_LEFT(ic) = t;
+  }
+  
+  DEBUGpic14_emitcode ("; ","result %s, left %s, right %s",
+    AopType(AOP_TYPE(IC_RESULT(ic))),
+    AopType(AOP_TYPE(IC_LEFT(ic))),
+    AopType(AOP_TYPE(IC_RIGHT(ic))));
+  
+  /* special cases :- */
+  /* if both left & right are in bit space */
+  if (AOP_TYPE(IC_LEFT(ic)) == AOP_CRY &&
+    AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
+    genPlusBits (ic);
+    goto release ;
+  }
+  
+  /* if I can do an decrement instead
+  of subtract then GOOD for ME */
+  //  if (genMinusDec (ic) == TRUE)
+  //    goto release;   
+  
+  size = pic14_getDataSize(IC_RESULT(ic));   
+  same = pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)));
+  
+  if(AOP(IC_RIGHT(ic))->type == AOP_LIT) {
+    /* Add a literal to something else */
+    
+    lit = (unsigned long)floatFromVal(AOP(IC_RIGHT(ic))->aopu.aop_lit);
+    lit = - (long)lit;
+    
+    genAddLit ( ic,  lit);
+    
 #if 0
-               /* add the first byte: */
-               pic14_emitcode("movlw","0x%x", lit & 0xff);
-               pic14_emitcode("addwf","%s,f", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-               emitpcode(POC_MOVLW,  popGetLit(lit & 0xff));
-               emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),0));
-               
-               
-               offset = 1;
-               size--;
-               
-               while(size-- > 0) {
-                       
-                       lit >>= 8;
-                       
-                       if(lit & 0xff) {
-                               
-                               if((lit & 0xff) == 0xff) {
-                                       emitpcode(POC_MOVLW,  popGetLit(0xff));
-                                       emitSKPC;
-                                       emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
-                               } else {
-                                       emitpcode(POC_MOVLW,  popGetLit(lit & 0xff));
-                                       emitSKPNC;
-                                       emitpcode(POC_MOVLW,  popGetLit((lit+1) & 0xff));
-                                       emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
-                               }
-                               
-                       } else {
-                               /* do the rlf known zero trick here */
-                               emitpcode(POC_MOVLW,  popGetLit(1));
-                               emitSKPNC;
-                               emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
-                       }
-                       offset++;
-               }
+    /* add the first byte: */
+    pic14_emitcode("movlw","0x%x", lit & 0xff);
+    pic14_emitcode("addwf","%s,f", aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+    emitpcode(POC_MOVLW,  popGetLit(lit & 0xff));
+    emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),0));
+    
+    
+    offset = 1;
+    size--;
+    
+    while(size-- > 0) {
+      
+      lit >>= 8;
+      
+      if(lit & 0xff) {
+        
+        if((lit & 0xff) == 0xff) {
+          emitpcode(POC_MOVLW,  popGetLit(0xff));
+          emitSKPC;
+          emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
+        } else {
+          emitpcode(POC_MOVLW,  popGetLit(lit & 0xff));
+          emitSKPNC;
+          emitpcode(POC_MOVLW,  popGetLit((lit+1) & 0xff));
+          emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
+        }
+        
+      } else {
+        /* do the rlf known zero trick here */
+        emitpcode(POC_MOVLW,  popGetLit(1));
+        emitSKPNC;
+        emitpcode(POC_ADDWF,  popGet(AOP(IC_LEFT(ic)),offset));
+      }
+      offset++;
+    }
 #endif
-       } else if(AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
-               // bit subtraction
-               
-               pic14_emitcode(";bitsub","right is bit: %s",aopGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
-               pic14_emitcode(";bitsub","left is bit: %s",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
-               pic14_emitcode(";bitsub","result is bit: %s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-               
-               /* here we are subtracting a bit from a char or int */
-               if(size == 1) {
-                       if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-                               
-                               emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_DECF ,  popGet(AOP(IC_RESULT(ic)),0));
-                               
-                               pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir,
-                                       AOP(IC_RIGHT(ic))->aopu.aop_dir);
-                               pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                       } else {
-                               
-                               if(AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
-                                       emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                       emitpcode(POC_XORLW , popGetLit(1));
-                               }else  if( (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) ||
-                                       (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) ) {
-                                       
-                                       lit = (unsigned long)floatFromVal(AOP(IC_LEFT(ic))->aopu.aop_lit);
-                                       
-                                       if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
-                                               if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic))) ) {
-                                                       if(lit & 1) {
-                                                               emitpcode(POC_MOVLW , popGet(AOP(IC_RIGHT(ic)),0));
-                                                               emitpcode(POC_XORWF , popGet(AOP(IC_RIGHT(ic)),0));
-                                                       }
-                                               }else{
-                                                       emitpcode(POC_BCF ,     popGet(AOP(IC_RESULT(ic)),0));
-                                                       if(lit & 1) 
-                                                               emitpcode(POC_BTFSS , popGet(AOP(IC_RIGHT(ic)),0));
-                                                       else
-                                                               emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                                       emitpcode(POC_BSF ,     popGet(AOP(IC_RESULT(ic)),0));
-                                               }
-                                               goto release;
-                                       } else {
-                                               emitpcode(POC_MOVLW , popGetLit(lit & 0xff));
-                                               emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                               emitpcode(POC_MOVLW , popGetLit((lit-1) & 0xff));
-                                               emitpcode(POC_MOVWF , popGet(AOP(IC_RESULT(ic)),0));
-                                               
-                                       }
-                                       
-                               } else {
-                                       emitpcode(POC_MOVFW , popGet(AOP(IC_LEFT(ic)),0));
-                                       emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
-                                       emitpcode(POC_DECFW , popGet(AOP(IC_LEFT(ic)),0));
-                               }
-                               
-                               if(AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
-                                       
-                                       emitpcode(POC_MOVWF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                       
-                               } else  {
-                                       emitpcode(POC_ANDLW , popGetLit(1));
-                                       /*
-                                       emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                                       emitSKPZ;
-                                       emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
-                                       */
-                               }
-                               
-                       }
-                       
-               }
-       } else   if(// (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) || 
-               (AOP(IC_LEFT(ic))->type == AOP_LIT) &&
-               (AOP_TYPE(IC_RIGHT(ic)) != AOP_ACC)) {
-               
-               lit = (unsigned long)floatFromVal(AOP(IC_LEFT(ic))->aopu.aop_lit);
-               DEBUGpic14_emitcode ("; left is lit","line %d result %s, left %s, right %s",__LINE__,
-                       AopType(AOP_TYPE(IC_RESULT(ic))),
-                       AopType(AOP_TYPE(IC_LEFT(ic))),
-                       AopType(AOP_TYPE(IC_RIGHT(ic))));
-               
-               
-               if( (size == 1) && ((lit & 0xff) == 0) ) {
-                       /* res = 0 - right */
-                       if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic))) ) {
-                               emitpcode(POC_COMF,  popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_INCF,  popGet(AOP(IC_RIGHT(ic)),0));
-                       } else { 
-                               emitpcode(POC_COMFW,  popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),0));
-                               emitpcode(POC_INCF,   popGet(AOP(IC_RESULT(ic)),0));
-                       }
-                       goto release;
-               }
-               
-               emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),0));
-               emitpcode(POC_SUBLW, popGetLit(lit & 0xff));    
-               emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-               
-               
-               offset = 1;
-               while(--size) {
-                       lit >>= 8;
-                       
-                       if(size == 1) {
-                       /* This is the last byte in a multibyte subtraction 
-                       * There are a couple of tricks we can do by not worrying about 
-                               * propogating the carry */
-                               if(lit == 0xff) {
-                                       /* 0xff - x == ~x */
-                                       if(same) {
-                                               emitpcode(POC_COMF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                       } else {
-                                               emitpcode(POC_COMFW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                       }
-                               } else {
-                                       emitpcode(POC_MOVFW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitSKPC;
-                                       emitpcode(POC_INCFW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitpcode(POC_SUBLW, popGetLit(lit & 0xff));
-                                       emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                               }
-                               
-                               goto release;
-                       }
-                       
-                       if(same) {
-                               
-                               if(lit & 0xff) {
-                                       emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                       emitSKPC;
-                                       emitpcode(POC_MOVLW, popGetLit((lit & 0xff)-1));
-                                       emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
-                               } else {
-                                       emitSKPNC;
-                                       emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                       
-                               }
-                       } else {
-                               
-                               if(lit & 0xff) {
-                                       emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
-                                       emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
-                               } else
-                                       emitpcode(POC_CLRF, popGet(AOP(IC_RESULT(ic)),offset));
-                               
-                               emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),offset));
-                               emitSKPC;
-                               emitpcode(POC_INCFSZW,popGet(AOP(IC_RIGHT(ic)),offset));
-                               emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
-                       }
-               }
-               
-               
-       } else {
-               
-               DEBUGpic14_emitcode ("; ","line %d result %s, left %s, right %s",__LINE__,
-                       AopType(AOP_TYPE(IC_RESULT(ic))),
-                       AopType(AOP_TYPE(IC_LEFT(ic))),
-                       AopType(AOP_TYPE(IC_RIGHT(ic))));
-               
-               if(strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a") == 0 ) {
-                       DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                       emitpcode(POC_SUBFW, popGet(AOP(IC_RIGHT(ic)),0));
-                       emitpcode(POC_SUBLW, popGetLit(0));
-                       emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-               } else {
-                       
-                       if ( AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
-                               emitpcode(POC_SUBFW, popGet(AOP(IC_RIGHT(ic)),0));
-                               emitpcode(POC_SUBLW, popGetLit(0));
-                               if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
-                                       emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-                       } else {
-                               
-                               DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
-                               if(AOP_TYPE(IC_RIGHT(ic)) != AOP_ACC) 
-                                       emitpcode(POC_MOVFW,popGet(AOP(IC_RIGHT(ic)),0));
-                               
-                               if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
-                                       emitpcode(POC_SUBWF, popGet(AOP(IC_LEFT(ic)),0));
-                               else {
-                                       if( (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) ||
-                                               (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) ) {
-                                               emitpcode(POC_SUBLW, popGet(AOP(IC_LEFT(ic)),0));
-                                       } else {
-                                               emitpcode(POC_SUBFW, popGet(AOP(IC_LEFT(ic)),0));
-                                       }
-                                       if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
-                                               if ( AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
-                                                       emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                                       emitSKPZ;
-                                                       emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0));
-                                               }else
-                                                       emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
-                                       }
-                               }
-                       }
-               }
-               
-               size = min( AOP_SIZE(IC_RESULT(ic)), AOP_SIZE(IC_RIGHT(ic))) - 1;
-               offset = 1;
-               
-               if(size){
-                       if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)))) {
-                               if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE))) {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_SUBLW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
-                               } else {
-                                       while(size--){
-                                               emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitSKPC;
-                                               emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
-                                               emitpcode(POC_SUBFW,   popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
-                                               offset++;
-                                       }
-                               }
-                       } else {
-                               PIC_OPCODE poc = POC_MOVFW;
-                               if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
-                                       (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
-                                       poc = POC_MOVLW;
-                               while(size--){
-                                       if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
-                                               emitpcode(POC_MOVFW,  popGet(AOP(IC_LEFT(ic)),offset));
-                                               emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                       }
-                                       emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitSKPC;
-                                       emitpcode(POC_INCFSZW,popGet(AOP(IC_RIGHT(ic)),offset));
-                                       emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
-                                       offset++;
-                               }
-                       }
-               }
-       }
-       
-       //    adjustArithmeticResult(ic);
-       
+  } else if(AOP_TYPE(IC_RIGHT(ic)) == AOP_CRY) {
+    // bit subtraction
+    
+    pic14_emitcode(";bitsub","right is bit: %s",aopGet(AOP(IC_RIGHT(ic)),0,FALSE,FALSE));
+    pic14_emitcode(";bitsub","left is bit: %s",aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE));
+    pic14_emitcode(";bitsub","result is bit: %s",aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+    
+    /* here we are subtracting a bit from a char or int */
+    if(size == 1) {
+      if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+        
+        emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+        emitpcode(POC_DECF ,  popGet(AOP(IC_RESULT(ic)),0));
+        
+        pic14_emitcode("btfsc","(%s >> 3), (%s & 7)",
+          AOP(IC_RIGHT(ic))->aopu.aop_dir,
+          AOP(IC_RIGHT(ic))->aopu.aop_dir);
+        pic14_emitcode(" incf","%s,f", aopGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+      } else {
+        
+        if(AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
+          emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+          emitpcode(POC_XORLW , popGetLit(1));
+        }else  if( (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) ||
+          (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) ) {
+          
+          lit = (unsigned long)floatFromVal(AOP(IC_LEFT(ic))->aopu.aop_lit);
+          
+          if(AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
+            if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic))) ) {
+              if(lit & 1) {
+                emitpcode(POC_MOVLW , popGet(AOP(IC_RIGHT(ic)),0));
+                emitpcode(POC_XORWF , popGet(AOP(IC_RIGHT(ic)),0));
+              }
+            }else{
+              emitpcode(POC_BCF ,     popGet(AOP(IC_RESULT(ic)),0));
+              if(lit & 1) 
+                emitpcode(POC_BTFSS , popGet(AOP(IC_RIGHT(ic)),0));
+              else
+                emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+              emitpcode(POC_BSF ,     popGet(AOP(IC_RESULT(ic)),0));
+            }
+            goto release;
+          } else {
+            emitpcode(POC_MOVLW , popGetLit(lit & 0xff));
+            emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+            emitpcode(POC_MOVLW , popGetLit((lit-1) & 0xff));
+            emitpcode(POC_MOVWF , popGet(AOP(IC_RESULT(ic)),0));
+            
+          }
+          
+        } else {
+          emitpcode(POC_MOVFW , popGet(AOP(IC_LEFT(ic)),0));
+          emitpcode(POC_BTFSC , popGet(AOP(IC_RIGHT(ic)),0));
+          emitpcode(POC_DECFW , popGet(AOP(IC_LEFT(ic)),0));
+        }
+        
+        if(AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
+          
+          emitpcode(POC_MOVWF ,   popGet(AOP(IC_RESULT(ic)),0));
+          
+        } else  {
+          emitpcode(POC_ANDLW , popGetLit(1));
+          /*
+          emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+          emitSKPZ;
+          emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0,FALSE,FALSE));
+          */
+        }
+        
+      }
+      
+    }
+  } else   if(// (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) || 
+    (AOP(IC_LEFT(ic))->type == AOP_LIT) &&
+    (AOP_TYPE(IC_RIGHT(ic)) != AOP_ACC)) {
+    
+    lit = (unsigned long)floatFromVal(AOP(IC_LEFT(ic))->aopu.aop_lit);
+    DEBUGpic14_emitcode ("; left is lit","line %d result %s, left %s, right %s",__LINE__,
+      AopType(AOP_TYPE(IC_RESULT(ic))),
+      AopType(AOP_TYPE(IC_LEFT(ic))),
+      AopType(AOP_TYPE(IC_RIGHT(ic))));
+    
+    
+    if( (size == 1) && ((lit & 0xff) == 0) ) {
+      /* res = 0 - right */
+      if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic))) ) {
+        emitpcode(POC_COMF,  popGet(AOP(IC_RIGHT(ic)),0));
+        emitpcode(POC_INCF,  popGet(AOP(IC_RIGHT(ic)),0));
+      } else { 
+        emitpcode(POC_COMFW,  popGet(AOP(IC_RIGHT(ic)),0));
+        emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),0));
+        emitpcode(POC_INCF,   popGet(AOP(IC_RESULT(ic)),0));
+      }
+      goto release;
+    }
+    
+    emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),0));
+    emitpcode(POC_SUBLW, popGetLit(lit & 0xff));    
+    emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+    
+    
+    offset = 1;
+    while(--size) {
+      lit >>= 8;
+      
+      if(size == 1) {
+      /* This is the last byte in a multibyte subtraction 
+      * There are a couple of tricks we can do by not worrying about 
+        * propogating the carry */
+        if(lit == 0xff) {
+          /* 0xff - x == ~x */
+          if(same) {
+            emitpcode(POC_COMF,  popGet(AOP(IC_RESULT(ic)),offset));
+            emitSKPC;
+            emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
+          } else {
+            emitpcode(POC_COMFW, popGet(AOP(IC_RIGHT(ic)),offset));
+            emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+            emitSKPC;
+            emitpcode(POC_DECF,  popGet(AOP(IC_RESULT(ic)),offset));
+          }
+        } else {
+          emitpcode(POC_MOVFW, popGet(AOP(IC_RIGHT(ic)),offset));
+          emitSKPC;
+          emitpcode(POC_INCFW, popGet(AOP(IC_RIGHT(ic)),offset));
+          emitpcode(POC_SUBLW, popGetLit(lit & 0xff));
+          emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+        }
+        
+        goto release;
+      }
+      
+      if(same) {
+        
+        if(lit & 0xff) {
+          emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+          emitSKPC;
+          emitpcode(POC_MOVLW, popGetLit((lit & 0xff)-1));
+          emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
+        } else {
+          emitSKPNC;
+          emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
+          
+        }
+      } else {
+        
+        if(lit & 0xff) {
+          emitpcode(POC_MOVLW, popGetLit(lit & 0xff));
+          emitpcode(POC_MOVWF, popGet(AOP(IC_RESULT(ic)),offset));
+        } else
+          emitpcode(POC_CLRF, popGet(AOP(IC_RESULT(ic)),offset));
+        
+        emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),offset));
+        emitSKPC;
+        emitpcode(POC_INCFSZW,popGet(AOP(IC_RIGHT(ic)),offset));
+        emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
+      }
+    }
+    
+    
+  } else {
+    
+    DEBUGpic14_emitcode ("; ","line %d result %s, left %s, right %s",__LINE__,
+      AopType(AOP_TYPE(IC_RESULT(ic))),
+      AopType(AOP_TYPE(IC_LEFT(ic))),
+      AopType(AOP_TYPE(IC_RIGHT(ic))));
+    
+    if(strcmp(aopGet(AOP(IC_LEFT(ic)),0,FALSE,FALSE),"a") == 0 ) {
+      DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+      emitpcode(POC_SUBFW, popGet(AOP(IC_RIGHT(ic)),0));
+      emitpcode(POC_SUBLW, popGetLit(0));
+      emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+    } else {
+      
+      if ( AOP_TYPE(IC_LEFT(ic)) == AOP_ACC) {
+        emitpcode(POC_SUBFW, popGet(AOP(IC_RIGHT(ic)),0));
+        emitpcode(POC_SUBLW, popGetLit(0));
+        if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC)
+          emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+      } else {
+        
+        DEBUGpic14_emitcode ("; ***","%s  %d",__FUNCTION__,__LINE__);
+        if(AOP_TYPE(IC_RIGHT(ic)) != AOP_ACC) 
+          emitpcode(POC_MOVFW,popGet(AOP(IC_RIGHT(ic)),0));
+        
+        if (pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) )
+          emitpcode(POC_SUBWF, popGet(AOP(IC_LEFT(ic)),0));
+        else {
+          if( (AOP_TYPE(IC_LEFT(ic)) == AOP_IMMD) ||
+            (AOP_TYPE(IC_LEFT(ic)) == AOP_LIT) ) {
+            emitpcode(POC_SUBLW, popGet(AOP(IC_LEFT(ic)),0));
+          } else {
+            emitpcode(POC_SUBFW, popGet(AOP(IC_LEFT(ic)),0));
+          }
+          if ( AOP_TYPE(IC_RESULT(ic)) != AOP_ACC) {
+            if ( AOP_TYPE(IC_RESULT(ic)) == AOP_CRY) {
+              emitpcode(POC_BCF ,   popGet(AOP(IC_RESULT(ic)),0));
+              emitSKPZ;
+              emitpcode(POC_BSF ,   popGet(AOP(IC_RESULT(ic)),0));
+            }else
+              emitpcode(POC_MOVWF,popGet(AOP(IC_RESULT(ic)),0));
+          }
+        }
+      }
+    }
+    
+    size = min( AOP_SIZE(IC_RESULT(ic)), AOP_SIZE(IC_RIGHT(ic))) - 1;
+    offset = 1;
+    
+    if(size){
+      if (pic14_sameRegs(AOP(IC_RIGHT(ic)), AOP(IC_RESULT(ic)))) {
+        if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+          (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+          (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE))) {
+          while(size--){
+            emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
+            emitSKPC;
+            emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
+            emitpcode(POC_SUBLW,   popGet(AOP(IC_LEFT(ic)),offset));
+            emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
+            offset++;
+          }
+        } else {
+          while(size--){
+            emitpcode(POC_MOVFW,   popGet(AOP(IC_RIGHT(ic)),offset));
+            emitSKPC;
+            emitpcode(POC_INCFSZW, popGet(AOP(IC_RIGHT(ic)),offset));
+            emitpcode(POC_SUBFW,   popGet(AOP(IC_LEFT(ic)),offset));
+            emitpcode(POC_MOVWF,   popGet(AOP(IC_RESULT(ic)),offset));
+            offset++;
+          }
+        }
+      } else {
+        PIC_OPCODE poc = POC_MOVFW;
+        if ((AOP_TYPE(IC_LEFT(ic)) == AOP_PCODE) && (
+          (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_LITERAL) || 
+          (AOP(IC_LEFT(ic))->aopu.pcop->type == PO_IMMEDIATE)))
+          poc = POC_MOVLW;
+        while(size--){
+          if (!pic14_sameRegs(AOP(IC_LEFT(ic)), AOP(IC_RESULT(ic))) ) {
+            emitpcode(POC_MOVFW,  popGet(AOP(IC_LEFT(ic)),offset));
+            emitpcode(POC_MOVWF,  popGet(AOP(IC_RESULT(ic)),offset));
+          }
+          emitpcode(POC_MOVFW,  popGet(AOP(IC_RIGHT(ic)),offset));
+          emitSKPC;
+          emitpcode(POC_INCFSZW,popGet(AOP(IC_RIGHT(ic)),offset));
+          emitpcode(POC_SUBWF,  popGet(AOP(IC_RESULT(ic)),offset));
+          offset++;
+        }
+      }
+    }
+  }
+  
+  //    adjustArithmeticResult(ic);
+  
 release:
-       freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(IC_RIGHT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
-       freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
+  freeAsmop(IC_LEFT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(IC_RIGHT(ic),NULL,ic,(RESULTONSTACK(ic) ? FALSE : TRUE));
+  freeAsmop(IC_RESULT(ic),NULL,ic,TRUE);
 }
 /*-----------------------------------------------------------------*
 * genUMult8XLit_16 - unsigned multiplication of two 8-bit numbers.
@@ -1604,190 +1660,190 @@ release:
 * 
 *-----------------------------------------------------------------*/
 void genUMult8XLit_16 (operand *left,
-                                          operand *right,
-                                          operand *result,
-                                          pCodeOpReg *result_hi)
-                                          
+             operand *right,
+             operand *result,
+             pCodeOpReg *result_hi)
+             
 {
-       
-       unsigned int lit;
-       unsigned int i,have_first_bit;
-       int same;
-       pCodeOp *temp;
-       
-       if (AOP_TYPE(right) != AOP_LIT){
-               fprintf(stderr,"%s %d - right operand is not a literal\n",__FILE__,__LINE__);
-               exit(1);
-       }
-       
-       
-       if(!result_hi) {
-               result_hi = PCOR(popGet(AOP(result),1));
-       }
-       
-       lit = (unsigned int)floatFromVal(AOP(right)->aopu.aop_lit);
-       lit &= 0xff;
-       pic14_emitcode(";","Unrolled 8 X 8 multiplication");
-       
-       same = pic14_sameRegs(AOP(left), AOP(result));
-       
-       if(same) {
-               switch(lit) {
-               case 0:
-                       emitpcode(POC_CLRF,  popGet(AOP(left),0));
-                       return;
-               case 2:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 3:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 4:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 5:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
-                       return;
-               case 6:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 7:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 7*F
-                       return;
-               case 8:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 8*F
-                       return;
-               case 9:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 10:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 11:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 8*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 11*F
-                       return;
-               case 12:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));
-                       return;
-               case 13:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 8*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 13*F
-                       return;
-               case 14:
-                       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 8*F
-                       emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 11*F
-                       emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 14*F
-                       return;
-               case 15:
-                       temp = popGetTempReg();
-                       if(!temp) {
-                               fprintf(stderr,"ERROR: unable to allocate register. %s:%d\n",__FUNCTION__,__LINE__);
-                               exit(1);
-                       }
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),0));
-                       emitpcode(POC_MOVWF,  temp);
-                       emitpcode(POC_ANDLW,  popGetLit(0xf0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(left),0));
-                       emitpcode(POC_SWAPFW, temp);
-                       emitpcode(POC_SUBWF,  popGet(AOP(left),0));
-                       popReleaseTempReg(temp);
-                       return;
-               case 16:
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xf0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(left),0));
-                       return;
-               case 17:
-                       emitpcode(POC_SWAPFW, popGet(AOP(left),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xf0));
-                       emitpcode(POC_ADDWF,  popGet(AOP(left),0));
-                       return;
-               case 32:
-                       emitpcode(POC_SWAPF,  popGet(AOP(left),0));
-                       emitpcode(POC_RLFW,   popGet(AOP(left),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xe0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(left),0));
-                       return;
-               case 64:
-                       emitpcode(POC_SWAPF,  popGet(AOP(left),0));
-                       emitpcode(POC_RLF,    popGet(AOP(left),0));
-                       emitpcode(POC_RLFW,   popGet(AOP(left),0));
-                       emitpcode(POC_ANDLW,  popGetLit(0xc0));
-                       emitpcode(POC_MOVWF,  popGet(AOP(left),0));
-                       return;
-               case 128:
-                       emitpcode(POC_RRFW,   popGet(AOP(left),0));
-                       emitpcode(POC_CLRF,   popGet(AOP(left),0));
-                       emitpcode(POC_RRF,    popGet(AOP(left),0));
-                       return;
-                       
-       }
+  
+  unsigned int lit;
+  unsigned int i,have_first_bit;
+  int same;
+  pCodeOp *temp;
+  
+  if (AOP_TYPE(right) != AOP_LIT){
+    fprintf(stderr,"%s %d - right operand is not a literal\n",__FILE__,__LINE__);
+    exit(1);
+  }
+  
+  
+  if(!result_hi) {
+    result_hi = PCOR(popGet(AOP(result),1));
+  }
+  
+  lit = (unsigned int)floatFromVal(AOP(right)->aopu.aop_lit);
+  lit &= 0xff;
+  pic14_emitcode(";","Unrolled 8 X 8 multiplication");
+  
+  same = pic14_sameRegs(AOP(left), AOP(result));
+  
+  if(same) {
+    switch(lit) {
+    case 0:
+      emitpcode(POC_CLRF,  popGet(AOP(left),0));
+      return;
+    case 2:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 3:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 4:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 5:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
+      return;
+    case 6:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 7:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 7*F
+      return;
+    case 8:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 8*F
+      return;
+    case 9:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 10:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 5*F
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 11:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 8*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 11*F
+      return;
+    case 12:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));
+      return;
+    case 13:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 8*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 13*F
+      return;
+    case 14:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 2*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 3*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 5*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 8*F
+      emitpcode(POC_ADDFW, popGet(AOP(left),0));  // W = 11*F
+      emitpcode(POC_ADDWF, popGet(AOP(left),0));  // F = 14*F
+      return;
+    case 15:
+      temp = popGetTempReg();
+      if(!temp) {
+        fprintf(stderr,"ERROR: unable to allocate register. %s:%d\n",__FUNCTION__,__LINE__);
+        exit(1);
+      }
+      emitpcode(POC_SWAPFW, popGet(AOP(left),0));
+      emitpcode(POC_MOVWF,  temp);
+      emitpcode(POC_ANDLW,  popGetLit(0xf0));
+      emitpcode(POC_MOVWF,  popGet(AOP(left),0));
+      emitpcode(POC_SWAPFW, temp);
+      emitpcode(POC_SUBWF,  popGet(AOP(left),0));
+      popReleaseTempReg(temp);
+      return;
+    case 16:
+      emitpcode(POC_SWAPFW, popGet(AOP(left),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xf0));
+      emitpcode(POC_MOVWF,  popGet(AOP(left),0));
+      return;
+    case 17:
+      emitpcode(POC_SWAPFW, popGet(AOP(left),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xf0));
+      emitpcode(POC_ADDWF,  popGet(AOP(left),0));
+      return;
+    case 32:
+      emitpcode(POC_SWAPF,  popGet(AOP(left),0));
+      emitpcode(POC_RLFW,   popGet(AOP(left),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xe0));
+      emitpcode(POC_MOVWF,  popGet(AOP(left),0));
+      return;
+    case 64:
+      emitpcode(POC_SWAPF,  popGet(AOP(left),0));
+      emitpcode(POC_RLF,    popGet(AOP(left),0));
+      emitpcode(POC_RLFW,   popGet(AOP(left),0));
+      emitpcode(POC_ANDLW,  popGetLit(0xc0));
+      emitpcode(POC_MOVWF,  popGet(AOP(left),0));
+      return;
+    case 128:
+      emitpcode(POC_RRFW,   popGet(AOP(left),0));
+      emitpcode(POC_CLRF,   popGet(AOP(left),0));
+      emitpcode(POC_RRF,    popGet(AOP(left),0));
+      return;
+      
+  }
   } else {
-         
-         switch(lit) {
-         case 0:
-                 emitpcode(POC_CLRF,  popGet(AOP(result),0));
-                 emitpcode(POC_CLRF,  popCopyReg(result_hi));
-                 return;
-         case 2:
-                 emitpcode(POC_MOVFW, popGet(AOP(left),0));
-                 emitpcode(POC_MOVWF, popGet(AOP(result),0));
-                 emitpcode(POC_ADDWF, popGet(AOP(result),0));
-                 emitpcode(POC_CLRF,  popCopyReg(result_hi));
-                 emitpcode(POC_RLF,   popCopyReg(result_hi));
-                 return;
-         }
-         
+    
+    switch(lit) {
+    case 0:
+      emitpcode(POC_CLRF,  popGet(AOP(result),0));
+      emitpcode(POC_CLRF,  popCopyReg(result_hi));
+      return;
+    case 2:
+      emitpcode(POC_MOVFW, popGet(AOP(left),0));
+      emitpcode(POC_MOVWF, popGet(AOP(result),0));
+      emitpcode(POC_ADDWF, popGet(AOP(result),0));
+      emitpcode(POC_CLRF,  popCopyReg(result_hi));
+      emitpcode(POC_RLF,   popCopyReg(result_hi));
+      return;
+    }
+    
   }
   
   emitpcode(POC_MOVFW, popGet(AOP(left),0));
@@ -1796,18 +1852,18 @@ void genUMult8XLit_16 (operand *left,
   
   have_first_bit = 0;
   for(i=0; i<8; i++) {
-         
-         if(lit & 1) {
-                 emitpcode(POC_ADDWF, popCopyReg(result_hi));
-                 have_first_bit = 1;
-         }
-         
-         if(have_first_bit) {
-                 emitpcode(POC_RRF,   popCopyReg(result_hi));
-                 emitpcode(POC_RRF,   popGet(AOP(result),0));
-         }
-         
-         lit >>= 1;
+    
+    if(lit & 1) {
+      emitpcode(POC_ADDWF, popCopyReg(result_hi));
+      have_first_bit = 1;
+    }
+    
+    if(have_first_bit) {
+      emitpcode(POC_RRF,   popCopyReg(result_hi));
+      emitpcode(POC_RRF,   popGet(AOP(result),0));
+    }
+    
+    lit >>= 1;
   }
   
 }
@@ -1818,94 +1874,94 @@ void genUMult8XLit_16 (operand *left,
 * 
 *-----------------------------------------------------------------*/
 void genUMult8X8_16 (operand *left,
-                                        operand *right,
-                                        operand *result,
-                                        pCodeOpReg *result_hi)
-                                        
+           operand *right,
+           operand *result,
+           pCodeOpReg *result_hi)
+           
 {
-       
-       int i;
-       int looped = 1;
-       
-       if(!result_hi) {
-               result_hi = PCOR(popGet(AOP(result),1));
-       }
-       
-       if (AOP_TYPE(right) == AOP_LIT) {
-               genUMult8XLit_16(left,right,result,result_hi);
-               return;
-       }
-       
-       if(!looped) {
-               pic14_emitcode(";","Unrolled 8 X 8 multiplication");
-               
-               emitpcode(POC_MOVFW, popGet(AOP(right),0));
-               emitpcode(POC_CLRF,  popGet(AOP(result),0));
-               emitpcode(POC_CLRF,  popCopyReg(result_hi));
-               emitCLRC;
-               
-               for(i=0; i<8; i++) {
-                       emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(left),0,FALSE,FALSE),i,0));
-                       emitpcode(POC_ADDWF, popCopyReg(result_hi));
-                       emitpcode(POC_RRF,   popCopyReg(result_hi));
-                       emitpcode(POC_RRF,   popGet(AOP(result),0));
-               }
-               
-               
-               /*
-               Here's another version that does the same thing and takes the 
-               same number of instructions. The one above is slightly better
-               because the entry instructions have a higher probability of
-               being optimized out.
-               */
-               /*
-               emitpcode(POC_CLRF,  popCopyReg(result_hi));
-               emitpcode(POC_RRFW,  popGet(AOP(left),0));
-               emitpcode(POC_MOVWF, popGet(AOP(result),0));
-               emitpcode(POC_MOVFW, popGet(AOP(right),0));
-               
-                 for(i=0; i<8; i++) {
-                 emitSKPNC;
-                 emitpcode(POC_ADDWF, popCopyReg(result_hi));
-                 emitpcode(POC_RRF,   popCopyReg(result_hi));
-                 emitpcode(POC_RRF,   popGet(AOP(result),0));
-                 }
-               */
-               
-       } else {
-               symbol  *tlbl = newiTempLabel(NULL);
-               pCodeOp *temp;
-               
-               
-               pic14_emitcode(";","Looped 8 X 8 multiplication");
-               
-               emitpcode(POC_CLRF,  popGet(AOP(result),0));
-               emitpcode(POC_CLRF,  popCopyReg(result_hi));
-               
-               emitpcode(POC_BSF,   newpCodeOpBit(aopGet(AOP(result),0,FALSE,FALSE),7,0));
-               
-               emitpcode(POC_MOVFW, popGet(AOP(right),0));
-               
-               temp = popGetTempReg();
-               emitpcode(POC_MOVWF, popCopyReg(PCOR(temp)));
-               
-               emitpcode(POC_MOVFW, popGet(AOP(left),0));
-               
-               emitpLabel(tlbl->key);
-               
-               emitpcode(POC_RRF,   popCopyReg(PCOR(temp)));
-               emitSKPNC;
-               emitpcode(POC_ADDWF, popCopyReg(result_hi));
-               
-               emitpcode(POC_RRF,   popCopyReg(result_hi));
-               emitpcode(POC_RRF,   popGet(AOP(result),0));
-               
-               emitSKPC;
-               emitpcode(POC_GOTO,  popGetLabel(tlbl->key));
-               
-               popReleaseTempReg(temp);
-               
-       }
+  
+  int i;
+  int looped = 1;
+  
+  if(!result_hi) {
+    result_hi = PCOR(popGet(AOP(result),1));
+  }
+  
+  if (AOP_TYPE(right) == AOP_LIT) {
+    genUMult8XLit_16(left,right,result,result_hi);
+    return;
+  }
+  
+  if(!looped) {
+    pic14_emitcode(";","Unrolled 8 X 8 multiplication");
+    
+    emitpcode(POC_MOVFW, popGet(AOP(right),0));
+    emitpcode(POC_CLRF,  popGet(AOP(result),0));
+    emitpcode(POC_CLRF,  popCopyReg(result_hi));
+    emitCLRC;
+    
+    for(i=0; i<8; i++) {
+      emitpcode(POC_BTFSC,  newpCodeOpBit(aopGet(AOP(left),0,FALSE,FALSE),i,0));
+      emitpcode(POC_ADDWF, popCopyReg(result_hi));
+      emitpcode(POC_RRF,   popCopyReg(result_hi));
+      emitpcode(POC_RRF,   popGet(AOP(result),0));
+    }
+    
+    
+    /*
+    Here's another version that does the same thing and takes the 
+    same number of instructions. The one above is slightly better
+    because the entry instructions have a higher probability of
+    being optimized out.
+    */
+    /*
+    emitpcode(POC_CLRF,  popCopyReg(result_hi));
+    emitpcode(POC_RRFW,  popGet(AOP(left),0));
+    emitpcode(POC_MOVWF, popGet(AOP(result),0));
+    emitpcode(POC_MOVFW, popGet(AOP(right),0));
+    
+      for(i=0; i<8; i++) {
+      emitSKPNC;
+      emitpcode(POC_ADDWF, popCopyReg(result_hi));
+      emitpcode(POC_RRF,   popCopyReg(result_hi));
+      emitpcode(POC_RRF,   popGet(AOP(result),0));
+      }
+    */
+    
+  } else {
+    symbol  *tlbl = newiTempLabel(NULL);
+    pCodeOp *temp;
+    
+    
+    pic14_emitcode(";","Looped 8 X 8 multiplication");
+    
+    emitpcode(POC_CLRF,  popGet(AOP(result),0));
+    emitpcode(POC_CLRF,  popCopyReg(result_hi));
+    
+    emitpcode(POC_BSF,   newpCodeOpBit(aopGet(AOP(result),0,FALSE,FALSE),7,0));
+    
+    emitpcode(POC_MOVFW, popGet(AOP(right),0));
+    
+    temp = popGetTempReg();
+    emitpcode(POC_MOVWF, popCopyReg(PCOR(temp)));
+    
+    emitpcode(POC_MOVFW, popGet(AOP(left),0));
+    
+    emitpLabel(tlbl->key);
+    
+    emitpcode(POC_RRF,   popCopyReg(PCOR(temp)));
+    emitSKPNC;
+    emitpcode(POC_ADDWF, popCopyReg(result_hi));
+    
+    emitpcode(POC_RRF,   popCopyReg(result_hi));
+    emitpcode(POC_RRF,   popGet(AOP(result),0));
+    
+    emitSKPC;
+    emitpcode(POC_GOTO,  popGetLabel(tlbl->key));
+    
+    popReleaseTempReg(temp);
+    
+  }
 }
 
 /*-----------------------------------------------------------------*
@@ -1915,23 +1971,23 @@ void genUMult8X8_16 (operand *left,
 * post-fix the sign bit.
 *-----------------------------------------------------------------*/
 void genSMult8X8_16 (operand *left,
-                                        operand *right,
-                                        operand *result,
-                                        pCodeOpReg *result_hi)
+           operand *right,
+           operand *result,
+           pCodeOpReg *result_hi)
 {
-       
-       if(!result_hi) {
-               result_hi = PCOR(popGet(AOP(result),1));
-       }
-       
-       genUMult8X8_16(left,right,result,result_hi);
-       
-       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),0,FALSE,FALSE),7,0));
-       emitpcode(POC_SUBWF, popCopyReg(result_hi));
-       emitpcode(POC_MOVFW, popGet(AOP(left),0));
-       emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),7,0));
-       emitpcode(POC_SUBWF, popGet(AOP(result),1));
-       
+  
+  if(!result_hi) {
+    result_hi = PCOR(popGet(AOP(result),1));
+  }
+  
+  genUMult8X8_16(left,right,result,result_hi);
+  
+  emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(left),0,FALSE,FALSE),7,0));
+  emitpcode(POC_SUBWF, popCopyReg(result_hi));
+  emitpcode(POC_MOVFW, popGet(AOP(left),0));
+  emitpcode(POC_BTFSC, newpCodeOpBit(aopGet(AOP(right),0,FALSE,FALSE),7,0));
+  emitpcode(POC_SUBWF, popGet(AOP(result),1));
+  
 }
 
 /*-----------------------------------------------------------------*
@@ -1942,17 +1998,17 @@ void genSMult8X8_16 (operand *left,
 *
 *-----------------------------------------------------------------*/
 void genMult8X8_8 (operand *left,
-                                  operand *right,
-                                  operand *result)
+           operand *right,
+           operand *result)
 {
-       pCodeOp *result_hi = popGetTempReg();
-       
-       if (AOP_TYPE(right) == AOP_LIT)
-               genUMult8XLit_16(left,right,result,PCOR(result_hi));
-       else
-               genUMult8X8_16(left,right,result,PCOR(result_hi));
-       
-       popReleaseTempReg(result_hi);
+  pCodeOp *result_hi = popGetTempReg();
+  
+  if (AOP_TYPE(right) == AOP_LIT)
+    genUMult8XLit_16(left,right,result,PCOR(result_hi));
+  else
+    genUMult8X8_16(left,right,result,PCOR(result_hi));
+  
+  popReleaseTempReg(result_hi);
 }
 #if 0
 /*-----------------------------------------------------------------*/
@@ -1960,45 +2016,45 @@ void genMult8X8_8 (operand *left,
 /*-----------------------------------------------------------------*/
 void genMultConst(unsigned C)
 {
-       
-       unsigned lit;
-       unsigned sr3; // Shift right 3
-       unsigned mask;
-       
-       int size = 1;
-       
-       /*
-       Convert a string of 3 binary 1's in the lit into
-       0111 = 1000 - 1;
-       */
-       
-       mask = 7 << ( (size*8) - 3);
-       lit = C;
-       sr3 = 0;
-       
-       while(mask < (1<<size*8)) {
-               
-               if( (mask & lit) == lit) {
-                       unsigned lsb;
-                       
-                       /* We found 3 (or more) consecutive 1's */
-                       
-                       lsb = mask & ~(mask & (mask-1));  // lsb of mask.
-                       
-                       consecutive_bits = ((lit + lsb) & lit) ^ lit;
-                       
-                       lit ^= consecutive_bits;
-                       
-                       mask <<= 3;
-                       
-                       sr3 |= (consecutive + lsb);
-                       
-               }
-               
-               mask >>= 1;
-               
-       }
-       
+  
+  unsigned lit;
+  unsigned sr3; // Shift right 3
+  unsigned mask;
+  
+  int size = 1;
+  
+  /*
+  Convert a string of 3 binary 1's in the lit into
+  0111 = 1000 - 1;
+  */
+  
+  mask = 7 << ( (size*8) - 3);
+  lit = C;
+  sr3 = 0;
+  
+  while(mask < (1<<size*8)) {
+    
+    if( (mask & lit) == lit) {
+      unsigned lsb;
+      
+      /* We found 3 (or more) consecutive 1's */
+      
+      lsb = mask & ~(mask & (mask-1));  // lsb of mask.
+      
+      consecutive_bits = ((lit + lsb) & lit) ^ lit;
+      
+      lit ^= consecutive_bits;
+      
+      mask <<= 3;
+      
+      sr3 |= (consecutive + lsb);
+      
+    }
+    
+    mask >>= 1;
+    
+  }
+  
 }
 
 #endif
index 74715026521ca3a5baca915f79052ccd511884fd..d22307a58b781cee1a26b5f8020871cd31edb00d 100644 (file)
@@ -43,12 +43,12 @@ static void FixRegisterBanking(pBlock *pb,int cur_bank);
 /****************************************************************/
 
 peepCommand peepCommands[] = {
-       
-       {NOTBITSKIP, "_NOTBITSKIP_"},
-       {BITSKIP, "_BITSKIP_"},
-       {INVERTBITSKIP, "_INVERTBITSKIP_"},
-       
-       {-1, NULL}
+  
+  {NOTBITSKIP, "_NOTBITSKIP_"},
+  {BITSKIP, "_BITSKIP_"},
+  {INVERTBITSKIP, "_INVERTBITSKIP_"},
+  
+  {-1, NULL}
 };
 
 
@@ -75,9 +75,9 @@ static pFile *the_pFile = NULL;
 static pBlock *pb_dead_pcodes = NULL;
 
 /* Hardcoded flags to change the behavior of the PIC port */
-static int peepOptimizing = 1;        /* run the peephole optimizer if nonzero */
+static int peepOptimizing = 0;        /* run the peephole optimizer if nonzero */
 static int functionInlining = 1;      /* inline functions if nonzero */
-int debug_verbose = 0;                /* Set true to inundate .asm file */
+int debug_verbose = 1;                /* Set true to inundate .asm file */
 
 // static int GpCodeSequenceNumber = 1;
 int GpcFlowSeq = 1;
@@ -90,6 +90,7 @@ extern void RegsUnMapLiveRanges(void);
 extern void BuildFlowTree(pBlock *pb);
 extern void pCodeRegOptimizeRegUsage(int level);
 extern int picIsInitialized(void);
+extern const char *pCodeOpType(pCodeOp *pcop);
 
 /****************************************************************/
 /*                      Forward declarations                    */
@@ -124,1124 +125,1124 @@ void pCodeRegMapLiveRanges(pBlock *pb);
 /****************************************************************/
 
 pCodeInstruction pciADDWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ADDWF,
-               "ADDWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ADDWF,
+    "ADDWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z) // outCond
 };
 
 pCodeInstruction pciADDFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ADDFW,
-               "ADDWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ADDFW,
+    "ADDWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciADDLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ADDLW,
-               "ADDLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_LITERAL),   // inCond
-               (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ADDLW,
+    "ADDLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_LITERAL),   // inCond
+    (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciANDLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ANDLW,
-               "ANDLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_LITERAL),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ANDLW,
+    "ANDLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_LITERAL),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciANDWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ANDWF,
-               "ANDWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ANDWF,
+    "ANDWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z) // outCond
 };
 
 pCodeInstruction pciANDFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_ANDFW,
-               "ANDWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_ANDFW,
+    "ANDWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciBCF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_BCF,
-               "BCF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,1,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_BSF,
-               (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
-               PCC_REGISTER // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_BCF,
+    "BCF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,1,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_BSF,
+    (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
+    PCC_REGISTER // outCond
 };
 
 pCodeInstruction pciBSF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_BSF,
-               "BSF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,1,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_BCF,
-               (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
-               (PCC_REGISTER | PCC_EXAMINE_PCOP) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_BSF,
+    "BSF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,1,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_BCF,
+    (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
+    (PCC_REGISTER | PCC_EXAMINE_PCOP) // outCond
 };
 
 pCodeInstruction pciBTFSC = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_BTFSC,
-               "BTFSC",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,1,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_BTFSS,
-               (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
-               PCC_EXAMINE_PCOP // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_BTFSC,
+    "BTFSC",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,1,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_BTFSS,
+    (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
+    PCC_EXAMINE_PCOP // outCond
 };
 
 pCodeInstruction pciBTFSS = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_BTFSS,
-               "BTFSS",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,1,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_BTFSC,
-               (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
-               PCC_EXAMINE_PCOP // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_BTFSS,
+    "BTFSS",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,1,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_BTFSC,
+    (PCC_REGISTER | PCC_EXAMINE_PCOP),   // inCond
+    PCC_EXAMINE_PCOP // outCond
 };
 
 pCodeInstruction pciCALL = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_CALL,
-               "CALL",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               1,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_NONE  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_CALL,
+    "CALL",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    1,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_NONE  // outCond
 };
 
 pCodeInstruction pciCOMF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_COMF,
-               "COMF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,  // inCond
-               PCC_REGISTER   // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_COMF,
+    "COMF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,  // inCond
+    PCC_REGISTER   // outCond
 };
 
 pCodeInstruction pciCOMFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_COMFW,
-               "COMF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,  // inCond
-               PCC_W   // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_COMFW,
+    "COMF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,  // inCond
+    PCC_W   // outCond
 };
 
 pCodeInstruction pciCLRF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_CLRF,
-               "CLRF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_REGISTER  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_CLRF,
+    "CLRF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_REGISTER  // outCond
 };
 
 pCodeInstruction pciCLRW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_CLRW,
-               "CLRW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               0,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_W  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_CLRW,
+    "CLRW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    0,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_W  // outCond
 };
 
 pCodeInstruction pciCLRWDT = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_CLRWDT,
-               "CLRWDT",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               0,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_NONE  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_CLRWDT,
+    "CLRWDT",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    0,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_NONE  // outCond
 };
 
 pCodeInstruction pciDECF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_DECF,
-               "DECF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_REGISTER    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_DECF,
+    "DECF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_REGISTER    // outCond
 };
 
 pCodeInstruction pciDECFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_DECFW,
-               "DECF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_W    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_DECFW,
+    "DECF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_W    // outCond
 };
 
 pCodeInstruction pciDECFSZ = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_DECFSZ,
-               "DECFSZ",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_REGISTER    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_DECFSZ,
+    "DECFSZ",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_REGISTER    // outCond
 };
 
 pCodeInstruction pciDECFSZW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_DECFSZW,
-               "DECFSZ",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_W           // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_DECFSZW,
+    "DECFSZ",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_W           // outCond
 };
 
 pCodeInstruction pciGOTO = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeGOTO,
-               genericDestruct,
-               genericPrint},
-               POC_GOTO,
-               "GOTO",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               1,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE,   // inCond
-               PCC_NONE    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeGOTO,
+    genericDestruct,
+    genericPrint},
+    POC_GOTO,
+    "GOTO",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    1,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE,   // inCond
+    PCC_NONE    // outCond
 };
 
 pCodeInstruction pciINCF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_INCF,
-               "INCF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_REGISTER    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_INCF,
+    "INCF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_REGISTER    // outCond
 };
 
 pCodeInstruction pciINCFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_INCFW,
-               "INCF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_W    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_INCFW,
+    "INCF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_W    // outCond
 };
 
 pCodeInstruction pciINCFSZ = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_INCFSZ,
-               "INCFSZ",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_REGISTER    // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_INCFSZ,
+    "INCFSZ",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_REGISTER    // outCond
 };
 
 pCodeInstruction pciINCFSZW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeSKIP,
-               genericDestruct,
-               genericPrint},
-               POC_INCFSZW,
-               "INCFSZ",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               1,1,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_W           // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeSKIP,
+    genericDestruct,
+    genericPrint},
+    POC_INCFSZW,
+    "INCFSZ",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    1,1,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_W           // outCond
 };
 
 pCodeInstruction pciIORWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_IORWF,
-               "IORWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_IORWF,
+    "IORWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z) // outCond
 };
 
 pCodeInstruction pciIORFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_IORFW,
-               "IORWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_IORFW,
+    "IORWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciIORLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_IORLW,
-               "IORLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_LITERAL),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_IORLW,
+    "IORLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_LITERAL),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciMOVF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_MOVF,
-               "MOVF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               PCC_Z // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_MOVF,
+    "MOVF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    PCC_Z // outCond
 };
 
 pCodeInstruction pciMOVFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_MOVFW,
-               "MOVF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_REGISTER,   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_MOVFW,
+    "MOVF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_REGISTER,   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciMOVWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_MOVWF,
-               "MOVWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_W,   // inCond
-               PCC_REGISTER // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+   //   genericAnalyze,
+   genericDestruct,
+   genericPrint},
+  POC_MOVWF,
+  "MOVWF",
+  NULL, // from branch
+  NULL, // to branch
+  NULL, // label
+  NULL, // operand
+  NULL, // flow block
+  NULL, // C source 
+  1,    // num ops
+  0,0,  // dest, bit instruction
+  0,0,  // branch, skip
+  0,    // literal operand
+  POC_NOP,
+  PCC_W,   // inCond
+  PCC_REGISTER // outCond
 };
 
 pCodeInstruction pciMOVLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               genericDestruct,
-               genericPrint},
-               POC_MOVLW,
-               "MOVLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_NONE | PCC_LITERAL),   // inCond
-               PCC_W // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+   genericDestruct,
+   genericPrint},
+  POC_MOVLW,
+  "MOVLW",
+  NULL, // from branch
+  NULL, // to branch
+  NULL, // label
+  NULL, // operand
+  NULL, // flow block
+  NULL, // C source 
+  1,    // num ops
+  0,0,  // dest, bit instruction
+  0,0,  // branch, skip
+  1,    // literal operand
+  POC_NOP,
+  (PCC_NONE | PCC_LITERAL),   // inCond
+  PCC_W // outCond
 };
 
 pCodeInstruction pciNOP = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               genericDestruct,
-               genericPrint},
-               POC_NOP,
-               "NOP",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               0,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE,   // inCond
-               PCC_NONE // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    genericDestruct,
+    genericPrint},
+    POC_NOP,
+    "NOP",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    0,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE,   // inCond
+    PCC_NONE // outCond
 };
 
 pCodeInstruction pciRETFIE = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeRETURN,
-               genericDestruct,
-               genericPrint},
-               POC_RETFIE,
-               "RETFIE",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               0,    // num ops
-               0,0,  // dest, bit instruction
-               1,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE,   // inCond
-               PCC_NONE // outCond (not true... affects the GIE bit too)
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeRETURN,
+    genericDestruct,
+    genericPrint},
+    POC_RETFIE,
+    "RETFIE",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    0,    // num ops
+    0,0,  // dest, bit instruction
+    1,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE,   // inCond
+    PCC_NONE // outCond (not true... affects the GIE bit too)
 };
 
 pCodeInstruction pciRETLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeRETURN,
-               genericDestruct,
-               genericPrint},
-               POC_RETLW,
-               "RETLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               1,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               PCC_LITERAL,   // inCond
-               PCC_W // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeRETURN,
+    genericDestruct,
+    genericPrint},
+    POC_RETLW,
+    "RETLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    1,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    PCC_LITERAL,   // inCond
+    PCC_W // outCond
 };
 
 pCodeInstruction pciRETURN = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   AnalyzeRETURN,
-               genericDestruct,
-               genericPrint},
-               POC_RETURN,
-               "RETURN",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               0,    // num ops
-               0,0,  // dest, bit instruction
-               1,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE,   // inCond
-               PCC_NONE // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   AnalyzeRETURN,
+    genericDestruct,
+    genericPrint},
+    POC_RETURN,
+    "RETURN",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    0,    // num ops
+    0,0,  // dest, bit instruction
+    1,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE,   // inCond
+    PCC_NONE // outCond
 };
 
 pCodeInstruction pciRLF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_RLF,
-               "RLF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_C | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_RLF,
+    "RLF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_C | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciRLFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_RLFW,
-               "RLF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_C | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_RLFW,
+    "RLF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_C | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciRRF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_RRF,
-               "RRF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_C | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_RRF,
+    "RRF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_C | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciRRFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_RRFW,
-               "RRF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_C | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_RRFW,
+    "RRF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_C | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciSUBWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_SUBWF,
-               "SUBWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_SUBWF,
+    "SUBWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z) // outCond
 };
 
 pCodeInstruction pciSUBFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_SUBFW,
-               "SUBWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_SUBFW,
+    "SUBWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciSUBLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_SUBLW,
-               "SUBLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_LITERAL),   // inCond
-               (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_SUBLW,
+    "SUBLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_LITERAL),   // inCond
+    (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 pCodeInstruction pciSWAPF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_SWAPF,
-               "SWAPF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_REGISTER),   // inCond
-               (PCC_REGISTER) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_SWAPF,
+    "SWAPF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_REGISTER),   // inCond
+    (PCC_REGISTER) // outCond
 };
 
 pCodeInstruction pciSWAPFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_SWAPFW,
-               "SWAPF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_REGISTER),   // inCond
-               (PCC_W) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_SWAPFW,
+    "SWAPF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_REGISTER),   // inCond
+    (PCC_W) // outCond
 };
 
 pCodeInstruction pciTRIS = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_TRIS,
-               "TRIS",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE,   // inCond
-               PCC_REGISTER // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_TRIS,
+    "TRIS",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE,   // inCond
+    PCC_REGISTER // outCond
 };
 
 pCodeInstruction pciXORWF = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_XORWF,
-               "XORWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               1,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_REGISTER | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_XORWF,
+    "XORWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    1,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_REGISTER | PCC_Z) // outCond
 };
 
 pCodeInstruction pciXORFW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_XORFW,
-               "XORWF",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               2,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_REGISTER),   // inCond
-               (PCC_W | PCC_Z) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_XORFW,
+    "XORWF",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    2,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_REGISTER),   // inCond
+    (PCC_W | PCC_Z) // outCond
 };
 
 pCodeInstruction pciXORLW = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_XORLW,
-               "XORLW",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               1,    // literal operand
-               POC_NOP,
-               (PCC_W | PCC_LITERAL),   // inCond
-               (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_XORLW,
+    "XORLW",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    1,    // literal operand
+    POC_NOP,
+    (PCC_W | PCC_LITERAL),   // inCond
+    (PCC_W | PCC_Z | PCC_C | PCC_DC) // outCond
 };
 
 
 pCodeInstruction pciBANKSEL = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_BANKSEL,
-               "BANKSEL",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_REGISTER  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_BANKSEL,
+    "BANKSEL",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_REGISTER  // outCond
 };
 
 pCodeInstruction pciPAGESEL = {
-       {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
-               //   genericAnalyze,
-               genericDestruct,
-               genericPrint},
-               POC_PAGESEL,
-               "PAGESEL",
-               NULL, // from branch
-               NULL, // to branch
-               NULL, // label
-               NULL, // operand
-               NULL, // flow block
-               NULL, // C source 
-               1,    // num ops
-               0,0,  // dest, bit instruction
-               0,0,  // branch, skip
-               0,    // literal operand
-               POC_NOP,
-               PCC_NONE, // inCond
-               PCC_REGISTER  // outCond
+  {PC_OPCODE, NULL, NULL, 0, 0, NULL, 
+    //   genericAnalyze,
+    genericDestruct,
+    genericPrint},
+    POC_PAGESEL,
+    "PAGESEL",
+    NULL, // from branch
+    NULL, // to branch
+    NULL, // label
+    NULL, // operand
+    NULL, // flow block
+    NULL, // C source 
+    1,    // num ops
+    0,0,  // dest, bit instruction
+    0,0,  // branch, skip
+    0,    // literal operand
+    POC_NOP,
+    PCC_NONE, // inCond
+    PCC_REGISTER  // outCond
 };
 
 pCodeInstruction *pic14Mnemonics[MAX_PIC14MNEMONICS];
@@ -1251,15 +1252,15 @@ pCodeInstruction *pic14Mnemonics[MAX_PIC14MNEMONICS];
 /* return a unique ID number to assist pCodes debuging             */
 /*-----------------------------------------------------------------*/
 unsigned PCodeID(void) {
-       static unsigned int pcodeId = 1; /* unique ID number to be assigned to all pCodes */
-       /*
-       static unsigned int stop;
-       if (pcodeId == 5801)
-       stop++;
-       if ((pcodeId >= 855)&&(pcodeId <= 856))
-       stop++;
-       */
-       return pcodeId++;
+  static unsigned int pcodeId = 1; /* unique ID number to be assigned to all pCodes */
+  /*
+  static unsigned int stop;
+  if (pcodeId == 5801)
+  stop++;
+  if ((pcodeId >= 855)&&(pcodeId <= 856))
+  stop++;
+  */
+  return pcodeId++;
 }
 
 #ifdef HAVE_VSNPRINTF
@@ -1274,27 +1275,27 @@ unsigned PCodeID(void) {
 /*-----------------------------------------------------------------*/
 void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
 {
-       va_list val;
-       int len;
-       
-       if(!str || !*str)
-               return;
-       
-       va_start(val, format);
-       
-       vsnprintf(*str, *size, format, val);
-       
-       va_end (val);
-       
-       len = strlen(*str);
-       if((size_t)len > *size) {
-               fprintf(stderr,"WARNING, it looks like %s has overflowed\n",__FUNCTION__);
-               fprintf(stderr,"len = %d is > str size %d\n",len,(int)*size);
-       }
-       
-       *str += len;
-       *size -= len;
-       
+  va_list val;
+  int len;
+  
+  if(!str || !*str)
+    return;
+  
+  va_start(val, format);
+  
+  vsnprintf(*str, *size, format, val);
+  
+  va_end (val);
+  
+  len = strlen(*str);
+  if((size_t)len > *size) {
+    fprintf(stderr,"WARNING, it looks like %s has overflowed\n",__FUNCTION__);
+    fprintf(stderr,"len = %d is > str size %d\n",len,(int)*size);
+  }
+  
+  *str += len;
+  *size -= len;
+  
 }
 
 #else  //  HAVE_VSNPRINTF
@@ -1303,28 +1304,28 @@ void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
 
 void SAFE_snprintf(char **str, size_t *size, const  char  *format, ...)
 {
-       va_list val;
-       int len;
-       static char buffer[1024]; /* grossly conservative, but still not inherently safe */
-       
-       if(!str || !*str)
-               return;
-       
-       va_start(val, format);
-       
-       vsprintf(buffer, format, val);
-       va_end (val);
-       
-       len = strlen(buffer);
-       if(len > *size) {
-               fprintf(stderr,"WARNING, it looks like %s has overflowed\n",__FUNCTION__);
-               fprintf(stderr,"len = %d is > str size %d\n",len,*size);
-       }
-       
-       strcpy(*str, buffer);
-       *str += len;
-       *size -= len;
-       
+  va_list val;
+  int len;
+  static char buffer[1024]; /* grossly conservative, but still not inherently safe */
+  
+  if(!str || !*str)
+    return;
+  
+  va_start(val, format);
+  
+  vsprintf(buffer, format, val);
+  va_end (val);
+  
+  len = strlen(buffer);
+  if(len > *size) {
+    fprintf(stderr,"WARNING, it looks like %s has overflowed\n",__FUNCTION__);
+    fprintf(stderr,"len = %d is > str size %d\n",len,*size);
+  }
+  
+  strcpy(*str, buffer);
+  *str += len;
+  *size -= len;
+  
 }
 
 #endif    //  HAVE_VSNPRINTF
@@ -1337,50 +1338,50 @@ extern void init_pic(char *);
 
 void  pCodeInitRegisters(void)
 {
-       static int initialized=0;
-       int shareBankAddress,stkSize;
-       
-       if(initialized)
-               return;
-       initialized = 1;
-       
-       shareBankAddress = 0x7f; /* FIXME - some PIC ICs like 16C7X which do not have a shared bank need a different approach. */
-       stkSize = 8; // Set pseudo stack size to 8
-       initStack(shareBankAddress, stkSize); // Putting the pseudo stack in shared memory so all modules use the same register when passing fn parameters
-       init_pic(port->processor);
-       
-       pc_status.r = allocProcessorRegister(IDX_STATUS,"STATUS", PO_STATUS, 0x180);
-       pc_pcl.r = allocProcessorRegister(IDX_PCL,"PCL", PO_PCL, 0x80);
-       pc_pclath.r = allocProcessorRegister(IDX_PCLATH,"PCLATH", PO_PCLATH, 0x180);
-       pc_fsr.r = allocProcessorRegister(IDX_FSR,"FSR", PO_FSR, 0x180);
-       pc_indf.r = allocProcessorRegister(IDX_INDF,"INDF", PO_INDF, 0x80);
-       pc_intcon.r = allocProcessorRegister(IDX_INTCON,"INTCON", PO_INTCON, 0x180);
-       
-       pc_status.rIdx = IDX_STATUS;
-       pc_fsr.rIdx = IDX_FSR;
-       pc_indf.rIdx = IDX_INDF;
-       pc_intcon.rIdx = IDX_INTCON;
-       pc_pcl.rIdx = IDX_PCL;
-       pc_pclath.rIdx = IDX_PCLATH;
-       
-       pc_wsave.r = allocInternalRegister(IDX_WSAVE,"WSAVE", PO_GPR_REGISTER, 0x180); /* Interrupt storage for working register - must be same address in all banks ie section SHAREBANK. */
-       pc_ssave.r = allocInternalRegister(IDX_SSAVE,"SSAVE", PO_GPR_REGISTER, 0); /* Interrupt storage for status register. */
-       pc_psave.r = allocInternalRegister(IDX_PSAVE,"PSAVE", PO_GPR_REGISTER, 0); /* Interrupt storage for pclath register. */
-       
-       pc_wsave.rIdx = pc_wsave.r->rIdx;
-       pc_ssave.rIdx = pc_ssave.r->rIdx;
-       pc_psave.rIdx = pc_psave.r->rIdx;
-       
-       pc_wsave.r->isFixed = 1; /* Some PIC ICs do not have a sharebank - this register needs to be reserved across all banks. */
-       pc_wsave.r->address = shareBankAddress-stkSize;
-       pc_ssave.r->isFixed = 1; /* This register must be in the first bank. */
-       pc_ssave.r->address = shareBankAddress-stkSize-1;
-       pc_psave.r->isFixed = 1; /* This register must be in the first bank. */
-       pc_psave.r->address = shareBankAddress-stkSize-2;
-       
-       /* probably should put this in a separate initialization routine */
-       pb_dead_pcodes = newpBlock();
-       
+  static int initialized=0;
+  int shareBankAddress,stkSize;
+  
+  if(initialized)
+    return;
+  initialized = 1;
+  
+  shareBankAddress = 0x7f; /* FIXME - some PIC ICs like 16C7X which do not have a shared bank need a different approach. */
+  stkSize = 8; // Set pseudo stack size to 8
+  initStack(shareBankAddress, stkSize); // Putting the pseudo stack in shared memory so all modules use the same register when passing fn parameters
+  init_pic(port->processor);
+  
+  pc_status.r = allocProcessorRegister(IDX_STATUS,"STATUS", PO_STATUS, 0x180);
+  pc_pcl.r = allocProcessorRegister(IDX_PCL,"PCL", PO_PCL, 0x80);
+  pc_pclath.r = allocProcessorRegister(IDX_PCLATH,"PCLATH", PO_PCLATH, 0x180);
+  pc_fsr.r = allocProcessorRegister(IDX_FSR,"FSR", PO_FSR, 0x180);
+  pc_indf.r = allocProcessorRegister(IDX_INDF,"INDF", PO_INDF, 0x80);
+  pc_intcon.r = allocProcessorRegister(IDX_INTCON,"INTCON", PO_INTCON, 0x180);
+  
+  pc_status.rIdx = IDX_STATUS;
+  pc_fsr.rIdx = IDX_FSR;
+  pc_indf.rIdx = IDX_INDF;
+  pc_intcon.rIdx = IDX_INTCON;
+  pc_pcl.rIdx = IDX_PCL;
+  pc_pclath.rIdx = IDX_PCLATH;
+  
+  pc_wsave.r = allocInternalRegister(IDX_WSAVE,"WSAVE", PO_GPR_REGISTER, 0x180); /* Interrupt storage for working register - must be same address in all banks ie section SHAREBANK. */
+  pc_ssave.r = allocInternalRegister(IDX_SSAVE,"SSAVE", PO_GPR_REGISTER, 0); /* Interrupt storage for status register. */
+  pc_psave.r = allocInternalRegister(IDX_PSAVE,"PSAVE", PO_GPR_REGISTER, 0); /* Interrupt storage for pclath register. */
+  
+  pc_wsave.rIdx = pc_wsave.r->rIdx;
+  pc_ssave.rIdx = pc_ssave.r->rIdx;
+  pc_psave.rIdx = pc_psave.r->rIdx;
+  
+  pc_wsave.r->isFixed = 1; /* Some PIC ICs do not have a sharebank - this register needs to be reserved across all banks. */
+  pc_wsave.r->address = shareBankAddress-stkSize;
+  pc_ssave.r->isFixed = 1; /* This register must be in the first bank. */
+  pc_ssave.r->address = shareBankAddress-stkSize-1;
+  pc_psave.r->isFixed = 1; /* This register must be in the first bank. */
+  pc_psave.r->address = shareBankAddress-stkSize-2;
+  
+  /* probably should put this in a separate initialization routine */
+  pb_dead_pcodes = newpBlock();
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1391,124 +1392,124 @@ void  pCodeInitRegisters(void)
 
 int mnem2key(char const *mnem)
 {
-       int key = 0;
-       
-       if(!mnem)
-               return 0;
-       
-       while(*mnem) {
-               
-               key += toupper(*mnem++) +1;
-               
-       }
-       
-       return (key & 0x1f);
-       
+  int key = 0;
+  
+  if(!mnem)
+    return 0;
+  
+  while(*mnem) {
+    
+    key += toupper(*mnem++) +1;
+    
+  }
+  
+  return (key & 0x1f);
+  
 }
 
 void pic14initMnemonics(void)
 {
-       int i = 0;
-       int key;
-       //  char *str;
-       pCodeInstruction *pci;
-       
-       if(mnemonics_initialized)
-               return;
-       
-       //FIXME - probably should NULL out the array before making the assignments
-       //since we check the array contents below this initialization.
-       
-       pic14Mnemonics[POC_ADDLW] = &pciADDLW;
-       pic14Mnemonics[POC_ADDWF] = &pciADDWF;
-       pic14Mnemonics[POC_ADDFW] = &pciADDFW;
-       pic14Mnemonics[POC_ANDLW] = &pciANDLW;
-       pic14Mnemonics[POC_ANDWF] = &pciANDWF;
-       pic14Mnemonics[POC_ANDFW] = &pciANDFW;
-       pic14Mnemonics[POC_BCF] = &pciBCF;
-       pic14Mnemonics[POC_BSF] = &pciBSF;
-       pic14Mnemonics[POC_BTFSC] = &pciBTFSC;
-       pic14Mnemonics[POC_BTFSS] = &pciBTFSS;
-       pic14Mnemonics[POC_CALL] = &pciCALL;
-       pic14Mnemonics[POC_COMF] = &pciCOMF;
-       pic14Mnemonics[POC_COMFW] = &pciCOMFW;
-       pic14Mnemonics[POC_CLRF] = &pciCLRF;
-       pic14Mnemonics[POC_CLRW] = &pciCLRW;
-       pic14Mnemonics[POC_CLRWDT] = &pciCLRWDT;
-       pic14Mnemonics[POC_DECF] = &pciDECF;
-       pic14Mnemonics[POC_DECFW] = &pciDECFW;
-       pic14Mnemonics[POC_DECFSZ] = &pciDECFSZ;
-       pic14Mnemonics[POC_DECFSZW] = &pciDECFSZW;
-       pic14Mnemonics[POC_GOTO] = &pciGOTO;
-       pic14Mnemonics[POC_INCF] = &pciINCF;
-       pic14Mnemonics[POC_INCFW] = &pciINCFW;
-       pic14Mnemonics[POC_INCFSZ] = &pciINCFSZ;
-       pic14Mnemonics[POC_INCFSZW] = &pciINCFSZW;
-       pic14Mnemonics[POC_IORLW] = &pciIORLW;
-       pic14Mnemonics[POC_IORWF] = &pciIORWF;
-       pic14Mnemonics[POC_IORFW] = &pciIORFW;
-       pic14Mnemonics[POC_MOVF] = &pciMOVF;
-       pic14Mnemonics[POC_MOVFW] = &pciMOVFW;
-       pic14Mnemonics[POC_MOVLW] = &pciMOVLW;
-       pic14Mnemonics[POC_MOVWF] = &pciMOVWF;
-       pic14Mnemonics[POC_NOP] = &pciNOP;
-       pic14Mnemonics[POC_RETFIE] = &pciRETFIE;
-       pic14Mnemonics[POC_RETLW] = &pciRETLW;
-       pic14Mnemonics[POC_RETURN] = &pciRETURN;
-       pic14Mnemonics[POC_RLF] = &pciRLF;
-       pic14Mnemonics[POC_RLFW] = &pciRLFW;
-       pic14Mnemonics[POC_RRF] = &pciRRF;
-       pic14Mnemonics[POC_RRFW] = &pciRRFW;
-       pic14Mnemonics[POC_SUBLW] = &pciSUBLW;
-       pic14Mnemonics[POC_SUBWF] = &pciSUBWF;
-       pic14Mnemonics[POC_SUBFW] = &pciSUBFW;
-       pic14Mnemonics[POC_SWAPF] = &pciSWAPF;
-       pic14Mnemonics[POC_SWAPFW] = &pciSWAPFW;
-       pic14Mnemonics[POC_TRIS] = &pciTRIS;
-       pic14Mnemonics[POC_XORLW] = &pciXORLW;
-       pic14Mnemonics[POC_XORWF] = &pciXORWF;
-       pic14Mnemonics[POC_XORFW] = &pciXORFW;
-       pic14Mnemonics[POC_BANKSEL] = &pciBANKSEL;
-       pic14Mnemonics[POC_PAGESEL] = &pciPAGESEL;
-       
-       for(i=0; i<MAX_PIC14MNEMONICS; i++)
-               if(pic14Mnemonics[i])
-                       hTabAddItem(&pic14MnemonicsHash, mnem2key(pic14Mnemonics[i]->mnemonic), pic14Mnemonics[i]);
-               pci = hTabFirstItem(pic14MnemonicsHash, &key);
-               
-               while(pci) {
-                       DFPRINTF((stderr, "element %d key %d, mnem %s\n",i++,key,pci->mnemonic));
-                       pci = hTabNextItem(pic14MnemonicsHash, &key);
-               }
-               
-               mnemonics_initialized = 1;
+  int i = 0;
+  int key;
+  //  char *str;
+  pCodeInstruction *pci;
+  
+  if(mnemonics_initialized)
+    return;
+  
+  //FIXME - probably should NULL out the array before making the assignments
+  //since we check the array contents below this initialization.
+  
+  pic14Mnemonics[POC_ADDLW] = &pciADDLW;
+  pic14Mnemonics[POC_ADDWF] = &pciADDWF;
+  pic14Mnemonics[POC_ADDFW] = &pciADDFW;
+  pic14Mnemonics[POC_ANDLW] = &pciANDLW;
+  pic14Mnemonics[POC_ANDWF] = &pciANDWF;
+  pic14Mnemonics[POC_ANDFW] = &pciANDFW;
+  pic14Mnemonics[POC_BCF] = &pciBCF;
+  pic14Mnemonics[POC_BSF] = &pciBSF;
+  pic14Mnemonics[POC_BTFSC] = &pciBTFSC;
+  pic14Mnemonics[POC_BTFSS] = &pciBTFSS;
+  pic14Mnemonics[POC_CALL] = &pciCALL;
+  pic14Mnemonics[POC_COMF] = &pciCOMF;
+  pic14Mnemonics[POC_COMFW] = &pciCOMFW;
+  pic14Mnemonics[POC_CLRF] = &pciCLRF;
+  pic14Mnemonics[POC_CLRW] = &pciCLRW;
+  pic14Mnemonics[POC_CLRWDT] = &pciCLRWDT;
+  pic14Mnemonics[POC_DECF] = &pciDECF;
+  pic14Mnemonics[POC_DECFW] = &pciDECFW;
+  pic14Mnemonics[POC_DECFSZ] = &pciDECFSZ;
+  pic14Mnemonics[POC_DECFSZW] = &pciDECFSZW;
+  pic14Mnemonics[POC_GOTO] = &pciGOTO;
+  pic14Mnemonics[POC_INCF] = &pciINCF;
+  pic14Mnemonics[POC_INCFW] = &pciINCFW;
+  pic14Mnemonics[POC_INCFSZ] = &pciINCFSZ;
+  pic14Mnemonics[POC_INCFSZW] = &pciINCFSZW;
+  pic14Mnemonics[POC_IORLW] = &pciIORLW;
+  pic14Mnemonics[POC_IORWF] = &pciIORWF;
+  pic14Mnemonics[POC_IORFW] = &pciIORFW;
+  pic14Mnemonics[POC_MOVF] = &pciMOVF;
+  pic14Mnemonics[POC_MOVFW] = &pciMOVFW;
+  pic14Mnemonics[POC_MOVLW] = &pciMOVLW;
+  pic14Mnemonics[POC_MOVWF] = &pciMOVWF;
+  pic14Mnemonics[POC_NOP] = &pciNOP;
+  pic14Mnemonics[POC_RETFIE] = &pciRETFIE;
+  pic14Mnemonics[POC_RETLW] = &pciRETLW;
+  pic14Mnemonics[POC_RETURN] = &pciRETURN;
+  pic14Mnemonics[POC_RLF] = &pciRLF;
+  pic14Mnemonics[POC_RLFW] = &pciRLFW;
+  pic14Mnemonics[POC_RRF] = &pciRRF;
+  pic14Mnemonics[POC_RRFW] = &pciRRFW;
+  pic14Mnemonics[POC_SUBLW] = &pciSUBLW;
+  pic14Mnemonics[POC_SUBWF] = &pciSUBWF;
+  pic14Mnemonics[POC_SUBFW] = &pciSUBFW;
+  pic14Mnemonics[POC_SWAPF] = &pciSWAPF;
+  pic14Mnemonics[POC_SWAPFW] = &pciSWAPFW;
+  pic14Mnemonics[POC_TRIS] = &pciTRIS;
+  pic14Mnemonics[POC_XORLW] = &pciXORLW;
+  pic14Mnemonics[POC_XORWF] = &pciXORWF;
+  pic14Mnemonics[POC_XORFW] = &pciXORFW;
+  pic14Mnemonics[POC_BANKSEL] = &pciBANKSEL;
+  pic14Mnemonics[POC_PAGESEL] = &pciPAGESEL;
+  
+  for(i=0; i<MAX_PIC14MNEMONICS; i++)
+    if(pic14Mnemonics[i])
+      hTabAddItem(&pic14MnemonicsHash, mnem2key(pic14Mnemonics[i]->mnemonic), pic14Mnemonics[i]);
+    pci = hTabFirstItem(pic14MnemonicsHash, &key);
+    
+    while(pci) {
+      DFPRINTF((stderr, "element %d key %d, mnem %s\n",i++,key,pci->mnemonic));
+      pci = hTabNextItem(pic14MnemonicsHash, &key);
+    }
+    
+    mnemonics_initialized = 1;
 }
 
 int getpCodePeepCommand(char *cmd);
 
 int getpCode(char *mnem,unsigned dest)
 {
-       
-       pCodeInstruction *pci;
-       int key = mnem2key(mnem);
-       
-       if(!mnemonics_initialized)
-               pic14initMnemonics();
-       
-       pci = hTabFirstItemWK(pic14MnemonicsHash, key);
-       
-       while(pci) {
-               
-               if(STRCASECMP(pci->mnemonic, mnem) == 0) {
-                       if((pci->num_ops <= 1) || (pci->isModReg == dest) || (pci->isBitInst))
-                               return(pci->op);
-               }
-               
-               pci = hTabNextItemWK (pic14MnemonicsHash);
-               
-       }
-       
-       return -1;
+  
+  pCodeInstruction *pci;
+  int key = mnem2key(mnem);
+  
+  if(!mnemonics_initialized)
+    pic14initMnemonics();
+  
+  pci = hTabFirstItemWK(pic14MnemonicsHash, key);
+  
+  while(pci) {
+    
+    if(STRCASECMP(pci->mnemonic, mnem) == 0) {
+      if((pci->num_ops <= 1) || (pci->isModReg == dest) || (pci->isBitInst))
+        return(pci->op);
+    }
+    
+    pci = hTabNextItemWK (pic14MnemonicsHash);
+    
+  }
+  
+  return -1;
 }
 
 /*-----------------------------------------------------------------*
@@ -1517,24 +1518,24 @@ int getpCode(char *mnem,unsigned dest)
 *-----------------------------------------------------------------*/
 void pic14initpCodePeepCommands(void)
 {
-       
-       int key, i;
-       peepCommand *pcmd;
-       
-       i = 0;
-       do {
-               hTabAddItem(&pic14pCodePeepCommandsHash, 
-                       mnem2key(peepCommands[i].cmd), &peepCommands[i]);
-               i++;
-       } while (peepCommands[i].cmd);
-       
-       pcmd = hTabFirstItem(pic14pCodePeepCommandsHash, &key);
-       
-       while(pcmd) {
-               //fprintf(stderr, "peep command %s  key %d\n",pcmd->cmd,pcmd->id);
-               pcmd = hTabNextItem(pic14pCodePeepCommandsHash, &key);
-       }
-       
+  
+  int key, i;
+  peepCommand *pcmd;
+  
+  i = 0;
+  do {
+    hTabAddItem(&pic14pCodePeepCommandsHash, 
+      mnem2key(peepCommands[i].cmd), &peepCommands[i]);
+    i++;
+  } while (peepCommands[i].cmd);
+  
+  pcmd = hTabFirstItem(pic14pCodePeepCommandsHash, &key);
+  
+  while(pcmd) {
+    //fprintf(stderr, "peep command %s  key %d\n",pcmd->cmd,pcmd->id);
+    pcmd = hTabNextItem(pic14pCodePeepCommandsHash, &key);
+  }
+  
 }
 
 /*-----------------------------------------------------------------
@@ -1544,45 +1545,45 @@ void pic14initpCodePeepCommands(void)
 
 int getpCodePeepCommand(char *cmd)
 {
-       
-       peepCommand *pcmd;
-       int key = mnem2key(cmd);
-       
-       
-       pcmd = hTabFirstItemWK(pic14pCodePeepCommandsHash, key);
-       
-       while(pcmd) {
-               // fprintf(stderr," comparing %s to %s\n",pcmd->cmd,cmd);
-               if(STRCASECMP(pcmd->cmd, cmd) == 0) {
-                       return pcmd->id;
-               }
-               
-               pcmd = hTabNextItemWK (pic14pCodePeepCommandsHash);
-               
-       }
-       
-       return -1;
+  
+  peepCommand *pcmd;
+  int key = mnem2key(cmd);
+  
+  
+  pcmd = hTabFirstItemWK(pic14pCodePeepCommandsHash, key);
+  
+  while(pcmd) {
+    // fprintf(stderr," comparing %s to %s\n",pcmd->cmd,cmd);
+    if(STRCASECMP(pcmd->cmd, cmd) == 0) {
+      return pcmd->id;
+    }
+    
+    pcmd = hTabNextItemWK (pic14pCodePeepCommandsHash);
+    
+  }
+  
+  return -1;
 }
 
 char getpBlock_dbName(pBlock *pb)
 {
-       if(!pb)
-               return 0;
-       
-       if(pb->cmemmap)
-               return pb->cmemmap->dbName;
-       
-       return pb->dbName;
+  if(!pb)
+    return 0;
+  
+  if(pb->cmemmap)
+    return pb->cmemmap->dbName;
+  
+  return pb->dbName;
 }
 void pBlockConvert2ISR(pBlock *pb)
 {
-       if(!pb)
-               return;
-       
-       if(pb->cmemmap)
-               pb->cmemmap = NULL;
-       
-       pb->dbName = 'I';
+  if(!pb)
+    return;
+  
+  if(pb->cmemmap)
+    pb->cmemmap = NULL;
+  
+  pb->dbName = 'I';
 }
 
 /*-----------------------------------------------------------------*/
@@ -1593,96 +1594,96 @@ void pBlockConvert2ISR(pBlock *pb)
 
 void movepBlock2Head(char dbName)
 {
-       pBlock *pb;
-
-       if (!the_pFile)
-               return;
-
-       pb = the_pFile->pbHead;
-
-       while(pb) {
-               
-               if(getpBlock_dbName(pb) == dbName) {
-                       pBlock *pbn = pb->next;
-                       pb->next = the_pFile->pbHead;
-                       the_pFile->pbHead->prev = pb;
-                       the_pFile->pbHead = pb;
-                       
-                       if(pb->prev)
-                               pb->prev->next = pbn;
-                       
-                       // If the pBlock that we just moved was the last
-                       // one in the link of all of the pBlocks, then we
-                       // need to point the tail to the block just before
-                       // the one we moved.
-                       // Note: if pb->next is NULL, then pb must have 
-                       // been the last pBlock in the chain.
-                       
-                       if(pbn)
-                               pbn->prev = pb->prev;
-                       else
-                               the_pFile->pbTail = pb->prev;
-                       
-                       pb = pbn;
-                       
-               } else
-                       pb = pb->next;
-               
-       }
-       
+  pBlock *pb;
+
+  if (!the_pFile)
+    return;
+
+  pb = the_pFile->pbHead;
+
+  while(pb) {
+    
+    if(getpBlock_dbName(pb) == dbName) {
+      pBlock *pbn = pb->next;
+      pb->next = the_pFile->pbHead;
+      the_pFile->pbHead->prev = pb;
+      the_pFile->pbHead = pb;
+      
+      if(pb->prev)
+        pb->prev->next = pbn;
+      
+      // If the pBlock that we just moved was the last
+      // one in the link of all of the pBlocks, then we
+      // need to point the tail to the block just before
+      // the one we moved.
+      // Note: if pb->next is NULL, then pb must have 
+      // been the last pBlock in the chain.
+      
+      if(pbn)
+        pbn->prev = pb->prev;
+      else
+        the_pFile->pbTail = pb->prev;
+      
+      pb = pbn;
+      
+    } else
+      pb = pb->next;
+    
+  }
+  
 }
 
 void copypCode(FILE *of, char dbName)
 {
-       pBlock *pb;
-       
-       if(!of || !the_pFile)
-               return;
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               if(getpBlock_dbName(pb) == dbName) {
-                       pBlockStats(of,pb);
-                       printpBlock(of,pb);
-                       fprintf (of, "\n");
-               }
-       }
-       
+  pBlock *pb;
+  
+  if(!of || !the_pFile)
+    return;
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    if(getpBlock_dbName(pb) == dbName) {
+      pBlockStats(of,pb);
+      printpBlock(of,pb);
+      fprintf (of, "\n");
+    }
+  }
+  
 }
 void pcode_test(void)
 {
-       
-       DFPRINTF((stderr,"pcode is alive!\n"));
-       
-       //initMnemonics();
-       
-       if(the_pFile) {
-               
-               pBlock *pb;
-               FILE *pFile;
-               char buffer[100];
-               
-               /* create the file name */
-               strcpy(buffer,dstFileName);
-               strcat(buffer,".p");
-               
-               if( !(pFile = fopen(buffer, "w" ))) {
-                       werror(E_FILE_OPEN_ERR,buffer);
-                       exit(1);
-               }
-               
-               fprintf(pFile,"pcode dump\n\n");
-               
-               for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-                       fprintf(pFile,"\n\tNew pBlock\n\n");
-                       if(pb->cmemmap)
-                               fprintf(pFile,"%s",pb->cmemmap->sname);
-                       else
-                               fprintf(pFile,"internal pblock");
-                       
-                       fprintf(pFile,", dbName =%c\n",getpBlock_dbName(pb));
-                       printpBlock(pFile,pb);
-               }
-       }
+  
+  DFPRINTF((stderr,"pcode is alive!\n"));
+  
+  //initMnemonics();
+  
+  if(the_pFile) {
+    
+    pBlock *pb;
+    FILE *pFile;
+    char buffer[100];
+    
+    /* create the file name */
+    strcpy(buffer,dstFileName);
+    strcat(buffer,".p");
+    
+    if( !(pFile = fopen(buffer, "w" ))) {
+      werror(E_FILE_OPEN_ERR,buffer);
+      exit(1);
+    }
+    
+    fprintf(pFile,"pcode dump\n\n");
+    
+    for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+      fprintf(pFile,"\n\tNew pBlock\n\n");
+      if(pb->cmemmap)
+        fprintf(pFile,"%s",pb->cmemmap->sname);
+      else
+        fprintf(pFile,"internal pblock");
+      
+      fprintf(pFile,", dbName =%c\n",getpBlock_dbName(pb));
+      printpBlock(pFile,pb);
+    }
+  }
 }
 /*-----------------------------------------------------------------*/
 /* int RegCond(pCodeOp *pcop) - if pcop points to the STATUS reg-  */
@@ -1693,27 +1694,27 @@ void pcode_test(void)
 
 static int RegCond(pCodeOp *pcop)
 {
-       
-       if(!pcop)
-               return 0;
-       
-       if (pcop->type == PO_GPR_BIT) {
-               char *name = pcop->name;
-               if (!name) 
-                       name = PCOR(pcop)->r->name;
-               //      if (strcmp(name, pc_status.pcop.name) != 0) { <<< This breaks the peep 2 optimisation
-               switch(PCORB(pcop)->bit) {
-               case PIC_C_BIT:
-                       return PCC_C;
-               case PIC_DC_BIT:
-                       return PCC_DC;
-               case PIC_Z_BIT:
-                       return PCC_Z;
-               }
-               //    }
-       }
-       
-       return 0;
+  
+  if(!pcop)
+    return 0;
+  
+  if (pcop->type == PO_GPR_BIT) {
+    char *name = pcop->name;
+    if (!name) 
+      name = PCOR(pcop)->r->name;
+    //      if (strcmp(name, pc_status.pcop.name) != 0) { <<< This breaks the peep 2 optimisation
+    switch(PCORB(pcop)->bit) {
+    case PIC_C_BIT:
+      return PCC_C;
+    case PIC_DC_BIT:
+      return PCC_DC;
+    case PIC_Z_BIT:
+      return PCC_Z;
+    }
+    //    }
+  }
+  
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1739,33 +1740,33 @@ static int RegCond(pCodeOp *pcop)
 /*-----------------------------------------------------------------*/
 pCode *newpCode (PIC_OPCODE op, pCodeOp *pcop)
 {
-       pCodeInstruction *pci ;
-       
-       if(!mnemonics_initialized)
-               pic14initMnemonics();
-
-       pci = Safe_calloc(1, sizeof(pCodeInstruction));
-       
-       if((op>=0) && (op < MAX_PIC14MNEMONICS) && pic14Mnemonics[op]) {
-               memcpy(pci, pic14Mnemonics[op], sizeof(pCodeInstruction));
-               pci->pc.id = PCodeID();
-               pci->pcop = pcop;
-               
-               if(pci->inCond & PCC_EXAMINE_PCOP)
-                       pci->inCond  |= RegCond(pcop);
-               
-               if(pci->outCond & PCC_EXAMINE_PCOP)
-                       pci->outCond  |= RegCond(pcop);
-               
-               pci->pc.prev = pci->pc.next = NULL;
-               return (pCode *)pci;
-       }
-       
-       fprintf(stderr, "pCode mnemonic error %s,%d\n",__FUNCTION__,__LINE__);
-       exit(1);
-       
-       return NULL;
-}      
+  pCodeInstruction *pci ;
+  
+  if(!mnemonics_initialized)
+    pic14initMnemonics();
+
+  pci = Safe_calloc(1, sizeof(pCodeInstruction));
+  
+  if((op>=0) && (op < MAX_PIC14MNEMONICS) && pic14Mnemonics[op]) {
+    memcpy(pci, pic14Mnemonics[op], sizeof(pCodeInstruction));
+    pci->pc.id = PCodeID();
+    pci->pcop = pcop;
+    
+    if(pci->inCond & PCC_EXAMINE_PCOP)
+      pci->inCond  |= RegCond(pcop);
+    
+    if(pci->outCond & PCC_EXAMINE_PCOP)
+      pci->outCond  |= RegCond(pcop);
+    
+    pci->pc.prev = pci->pc.next = NULL;
+    return (pCode *)pci;
+  }
+  
+  fprintf(stderr, "pCode mnemonic error %s,%d\n",__FUNCTION__,__LINE__);
+  exit(1);
+  
+  return NULL;
+}       
 
 /*-----------------------------------------------------------------*/
 /* newpCodeWild - create a "wild" as in wild card pCode            */
@@ -1786,31 +1787,31 @@ pCode *newpCode (PIC_OPCODE op, pCodeOp *pcop)
 
 pCode *newpCodeWild(int pCodeID, pCodeOp *optional_operand, pCodeOp *optional_label)
 {
-       
-       pCodeWild *pcw;
-
-       pcw = Safe_calloc(1,sizeof(pCodeWild));
-       
-       pcw->pci.pc.type = PC_WILD;
-       pcw->pci.pc.prev = pcw->pci.pc.next = NULL;
-       pcw->id = PCodeID();
-       pcw->pci.from = pcw->pci.to = pcw->pci.label = NULL;
-       pcw->pci.pc.pb = NULL;
-       
-       //  pcw->pci.pc.analyze = genericAnalyze;
-       pcw->pci.pc.destruct = genericDestruct;
-       pcw->pci.pc.print = genericPrint;
-       
-       pcw->id = pCodeID;              // this is the 'n' in %n
-       pcw->operand = optional_operand;
-       pcw->label   = optional_label;
-       
-       pcw->mustBeBitSkipInst = 0;
-       pcw->mustNotBeBitSkipInst = 0;
-       pcw->invertBitSkipInst = 0;
-       
-       return ( (pCode *)pcw);
-       
+  
+  pCodeWild *pcw;
+
+  pcw = Safe_calloc(1,sizeof(pCodeWild));
+  
+  pcw->pci.pc.type = PC_WILD;
+  pcw->pci.pc.prev = pcw->pci.pc.next = NULL;
+  pcw->id = PCodeID();
+  pcw->pci.from = pcw->pci.to = pcw->pci.label = NULL;
+  pcw->pci.pc.pb = NULL;
+  
+  //  pcw->pci.pc.analyze = genericAnalyze;
+  pcw->pci.pc.destruct = genericDestruct;
+  pcw->pci.pc.print = genericPrint;
+  
+  pcw->id = pCodeID;              // this is the 'n' in %n
+  pcw->operand = optional_operand;
+  pcw->label   = optional_label;
+  
+  pcw->mustBeBitSkipInst = 0;
+  pcw->mustNotBeBitSkipInst = 0;
+  pcw->invertBitSkipInst = 0;
+  
+  return ( (pCode *)pcw);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1820,28 +1821,28 @@ pCode *newpCodeWild(int pCodeID, pCodeOp *optional_operand, pCodeOp *optional_la
 
 pCode *newpCodeInlineP(char *cP)
 {
-       
-       pCodeComment *pcc ;
-
-       pcc = Safe_calloc(1,sizeof(pCodeComment));
-       
-       pcc->pc.type = PC_INLINE;
-       pcc->pc.prev = pcc->pc.next = NULL;
-       pcc->pc.id = PCodeID();
-       //pcc->pc.from = pcc->pc.to = pcc->pc.label = NULL;
-       pcc->pc.pb = NULL;
-       
-       //  pcc->pc.analyze = genericAnalyze;
-       pcc->pc.destruct = genericDestruct;
-       pcc->pc.print = genericPrint;
-       
-       if(cP)
-               pcc->comment = Safe_strdup(cP);
-       else
-               pcc->comment = NULL;
-       
-       return ( (pCode *)pcc);
-       
+  
+  pCodeComment *pcc ;
+
+  pcc = Safe_calloc(1,sizeof(pCodeComment));
+  
+  pcc->pc.type = PC_INLINE;
+  pcc->pc.prev = pcc->pc.next = NULL;
+  pcc->pc.id = PCodeID();
+  //pcc->pc.from = pcc->pc.to = pcc->pc.label = NULL;
+  pcc->pc.pb = NULL;
+  
+  //  pcc->pc.analyze = genericAnalyze;
+  pcc->pc.destruct = genericDestruct;
+  pcc->pc.print = genericPrint;
+  
+  if(cP)
+    pcc->comment = Safe_strdup(cP);
+  else
+    pcc->comment = NULL;
+  
+  return ( (pCode *)pcc);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1850,28 +1851,28 @@ pCode *newpCodeInlineP(char *cP)
 
 pCode *newpCodeCharP(char *cP)
 {
-       
-       pCodeComment *pcc ;
-
-       pcc = Safe_calloc(1,sizeof(pCodeComment));
-       
-       pcc->pc.type = PC_COMMENT;
-       pcc->pc.prev = pcc->pc.next = NULL;
-       pcc->pc.id = PCodeID();
-       //pcc->pc.from = pcc->pc.to = pcc->pc.label = NULL;
-       pcc->pc.pb = NULL;
-       
-       //  pcc->pc.analyze = genericAnalyze;
-       pcc->pc.destruct = genericDestruct;
-       pcc->pc.print = genericPrint;
-       
-       if(cP)
-               pcc->comment = Safe_strdup(cP);
-       else
-               pcc->comment = NULL;
-       
-       return ( (pCode *)pcc);
-       
+  
+  pCodeComment *pcc ;
+
+  pcc = Safe_calloc(1,sizeof(pCodeComment));
+  
+  pcc->pc.type = PC_COMMENT;
+  pcc->pc.prev = pcc->pc.next = NULL;
+  pcc->pc.id = PCodeID();
+  //pcc->pc.from = pcc->pc.to = pcc->pc.label = NULL;
+  pcc->pc.pb = NULL;
+  
+  //  pcc->pc.analyze = genericAnalyze;
+  pcc->pc.destruct = genericDestruct;
+  pcc->pc.print = genericPrint;
+  
+  if(cP)
+    pcc->comment = Safe_strdup(cP);
+  else
+    pcc->comment = NULL;
+  
+  return ( (pCode *)pcc);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1881,41 +1882,41 @@ pCode *newpCodeCharP(char *cP)
 
 pCode *newpCodeFunction(char *mod,char *f,int isPublic)
 {
-       pCodeFunction *pcf;
-       
-       pcf = Safe_calloc(1,sizeof(pCodeFunction));
-       //_ALLOC(pcf,sizeof(pCodeFunction));
-       
-       pcf->pc.type = PC_FUNCTION;
-       pcf->pc.prev = pcf->pc.next = NULL;
-       pcf->pc.id = PCodeID();
-       //pcf->pc.from = pcf->pc.to = pcf->pc.label = NULL;
-       pcf->pc.pb = NULL;
-       
-       //  pcf->pc.analyze = genericAnalyze;
-       pcf->pc.destruct = genericDestruct;
-       pcf->pc.print = pCodePrintFunction;
-       
-       pcf->ncalled = 0;
-       
-       if(mod) {
-               //_ALLOC_ATOMIC(pcf->modname,strlen(mod)+1);
-               pcf->modname = Safe_calloc(1,strlen(mod)+1);
-               strcpy(pcf->modname,mod);
-       } else
-               pcf->modname = NULL;
-       
-       if(f) {
-               //_ALLOC_ATOMIC(pcf->fname,strlen(f)+1);
-               pcf->fname = Safe_calloc(1,strlen(f)+1);
-               strcpy(pcf->fname,f);
-       } else
-               pcf->fname = NULL;
-       
-       pcf->isPublic = (unsigned)isPublic;
-       
-       return ( (pCode *)pcf);
-       
+  pCodeFunction *pcf;
+  
+  pcf = Safe_calloc(1,sizeof(pCodeFunction));
+  //_ALLOC(pcf,sizeof(pCodeFunction));
+  
+  pcf->pc.type = PC_FUNCTION;
+  pcf->pc.prev = pcf->pc.next = NULL;
+  pcf->pc.id = PCodeID();
+  //pcf->pc.from = pcf->pc.to = pcf->pc.label = NULL;
+  pcf->pc.pb = NULL;
+  
+  //  pcf->pc.analyze = genericAnalyze;
+  pcf->pc.destruct = genericDestruct;
+  pcf->pc.print = pCodePrintFunction;
+  
+  pcf->ncalled = 0;
+  
+  if(mod) {
+    //_ALLOC_ATOMIC(pcf->modname,strlen(mod)+1);
+    pcf->modname = Safe_calloc(1,strlen(mod)+1);
+    strcpy(pcf->modname,mod);
+  } else
+    pcf->modname = NULL;
+  
+  if(f) {
+    //_ALLOC_ATOMIC(pcf->fname,strlen(f)+1);
+    pcf->fname = Safe_calloc(1,strlen(f)+1);
+    strcpy(pcf->fname,f);
+  } else
+    pcf->fname = NULL;
+  
+  pcf->isPublic = (unsigned)isPublic;
+  
+  return ( (pCode *)pcf);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -1923,70 +1924,70 @@ pCode *newpCodeFunction(char *mod,char *f,int isPublic)
 /*-----------------------------------------------------------------*/
 void destructpCodeFlow(pCode *pc)
 {
-       if(!pc || !isPCFL(pc))
-               return;
-       
-               /*
-               if(PCFL(pc)->from)
-               if(PCFL(pc)->to)
-       */
-       unlinkpCode(pc);
-       
-       deleteSet(&PCFL(pc)->registers);
-       deleteSet(&PCFL(pc)->from);
-       deleteSet(&PCFL(pc)->to);
-       free(pc);
-       
+  if(!pc || !isPCFL(pc))
+    return;
+  
+    /*
+    if(PCFL(pc)->from)
+    if(PCFL(pc)->to)
+  */
+  unlinkpCode(pc);
+  
+  deleteSet(&PCFL(pc)->registers);
+  deleteSet(&PCFL(pc)->from);
+  deleteSet(&PCFL(pc)->to);
+  free(pc);
+  
 }
 
 pCode *newpCodeFlow(void )
 {
-       pCodeFlow *pcflow;
-       
-       //_ALLOC(pcflow,sizeof(pCodeFlow));
-       pcflow = Safe_calloc(1,sizeof(pCodeFlow));
-       
-       pcflow->pc.type = PC_FLOW;
-       pcflow->pc.prev = pcflow->pc.next = NULL;
-       pcflow->pc.pb = NULL;
-       
-       //  pcflow->pc.analyze = genericAnalyze;
-       pcflow->pc.destruct = destructpCodeFlow;
-       pcflow->pc.print = genericPrint;
-       
-       pcflow->pc.seq = GpcFlowSeq++;
-       
-       pcflow->from = pcflow->to = NULL;
-       
-       pcflow->inCond = PCC_NONE;
-       pcflow->outCond = PCC_NONE;
-       
-       pcflow->firstBank = 'U'; /* Undetermined */
-       pcflow->lastBank = 'U'; /* Undetermined */
-       
-       pcflow->FromConflicts = 0;
-       pcflow->ToConflicts = 0;
-       
-       pcflow->end = NULL;
-       
-       pcflow->registers = newSet();
-       
-       return ( (pCode *)pcflow);
-       
+  pCodeFlow *pcflow;
+  
+  //_ALLOC(pcflow,sizeof(pCodeFlow));
+  pcflow = Safe_calloc(1,sizeof(pCodeFlow));
+  
+  pcflow->pc.type = PC_FLOW;
+  pcflow->pc.prev = pcflow->pc.next = NULL;
+  pcflow->pc.pb = NULL;
+  
+  //  pcflow->pc.analyze = genericAnalyze;
+  pcflow->pc.destruct = destructpCodeFlow;
+  pcflow->pc.print = genericPrint;
+  
+  pcflow->pc.seq = GpcFlowSeq++;
+  
+  pcflow->from = pcflow->to = NULL;
+  
+  pcflow->inCond = PCC_NONE;
+  pcflow->outCond = PCC_NONE;
+  
+  pcflow->firstBank = 'U'; /* Undetermined */
+  pcflow->lastBank = 'U'; /* Undetermined */
+  
+  pcflow->FromConflicts = 0;
+  pcflow->ToConflicts = 0;
+  
+  pcflow->end = NULL;
+  
+  pcflow->registers = newSet();
+  
+  return ( (pCode *)pcflow);
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeFlowLink *newpCodeFlowLink(pCodeFlow *pcflow)
 {
-       pCodeFlowLink *pcflowLink;
-       
-       pcflowLink = Safe_calloc(1,sizeof(pCodeFlowLink));
-       
-       pcflowLink->pcflow = pcflow;
-       pcflowLink->bank_conflict = 0;
-       
-       return pcflowLink;
+  pCodeFlowLink *pcflowLink;
+  
+  pcflowLink = Safe_calloc(1,sizeof(pCodeFlowLink));
+  
+  pcflowLink->pcflow = pcflow;
+  pcflowLink->bank_conflict = 0;
+  
+  return pcflowLink;
 }
 
 /*-----------------------------------------------------------------*/
@@ -1995,81 +1996,81 @@ pCodeFlowLink *newpCodeFlowLink(pCodeFlow *pcflow)
 
 pCode *newpCodeCSource(int ln, char *f, char *l)
 {
-       
-       pCodeCSource *pccs;
-
-       pccs = Safe_calloc(1,sizeof(pCodeCSource));
-       
-       pccs->pc.type = PC_CSOURCE;
-       pccs->pc.prev = pccs->pc.next = NULL;
-       pccs->pc.id = PCodeID();
-       pccs->pc.pb = NULL;
-       
-       pccs->pc.destruct = genericDestruct;
-       pccs->pc.print = genericPrint;
-       
-       pccs->line_number = ln;
-       if(l)
-               pccs->line = Safe_strdup(l);
-       else
-               pccs->line = NULL;
-       
-       if(f)
-               pccs->file_name = Safe_strdup(f);
-       else
-               pccs->file_name = NULL;
-       
-       return ( (pCode *)pccs);
-       
+  
+  pCodeCSource *pccs;
+
+  pccs = Safe_calloc(1,sizeof(pCodeCSource));
+  
+  pccs->pc.type = PC_CSOURCE;
+  pccs->pc.prev = pccs->pc.next = NULL;
+  pccs->pc.id = PCodeID();
+  pccs->pc.pb = NULL;
+  
+  pccs->pc.destruct = genericDestruct;
+  pccs->pc.print = genericPrint;
+  
+  pccs->line_number = ln;
+  if(l)
+    pccs->line = Safe_strdup(l);
+  else
+    pccs->line = NULL;
+  
+  if(f)
+    pccs->file_name = Safe_strdup(f);
+  else
+    pccs->file_name = NULL;
+  
+  return ( (pCode *)pccs);
+  
 }
 /*-----------------------------------------------------------------*/
 /* pCodeLabelDestruct - free memory used by a label.               */
 /*-----------------------------------------------------------------*/
 static void pCodeLabelDestruct(pCode *pc)
 {
-       
-       if(!pc)
-               return;
-       
-       if((pc->type == PC_LABEL) && PCL(pc)->label)
-               free(PCL(pc)->label);
-       
-       free(pc);
-       
+  
+  if(!pc)
+    return;
+  
+  if((pc->type == PC_LABEL) && PCL(pc)->label)
+    free(PCL(pc)->label);
+  
+  free(pc);
+  
 }
 
 pCode *newpCodeLabel(char *name, int key)
 {
-       
-       char *s = buffer;
-       pCodeLabel *pcl;
-
-       pcl = Safe_calloc(1,sizeof(pCodeLabel) );
-       
-       pcl->pc.type = PC_LABEL;
-       pcl->pc.prev = pcl->pc.next = NULL;
-       pcl->pc.id = PCodeID();
-       //pcl->pc.from = pcl->pc.to = pcl->pc.label = NULL;
-       pcl->pc.pb = NULL;
-       
-       //  pcl->pc.analyze = genericAnalyze;
-       pcl->pc.destruct = pCodeLabelDestruct;
-       pcl->pc.print = pCodePrintLabel;
-       
-       pcl->key = key;
-       
-       pcl->label = NULL;
-       if(key>0) {
-               sprintf(s,"_%05d_DS_",key);
-       } else
-               s = name;
-       
-       if(s)
-               pcl->label = Safe_strdup(s);
-       
-       //fprintf(stderr,"newpCodeLabel: key=%d, name=%s\n",key, ((s)?s:""));
-       return ( (pCode *)pcl);
-       
+  
+  char *s = buffer;
+  pCodeLabel *pcl;
+
+  pcl = Safe_calloc(1,sizeof(pCodeLabel) );
+  
+  pcl->pc.type = PC_LABEL;
+  pcl->pc.prev = pcl->pc.next = NULL;
+  pcl->pc.id = PCodeID();
+  //pcl->pc.from = pcl->pc.to = pcl->pc.label = NULL;
+  pcl->pc.pb = NULL;
+  
+  //  pcl->pc.analyze = genericAnalyze;
+  pcl->pc.destruct = pCodeLabelDestruct;
+  pcl->pc.print = pCodePrintLabel;
+  
+  pcl->key = key;
+  
+  pcl->label = NULL;
+  if(key>0) {
+    sprintf(s,"_%05d_DS_",key);
+  } else
+    s = name;
+  
+  if(s)
+    pcl->label = Safe_strdup(s);
+  
+  //fprintf(stderr,"newpCodeLabel: key=%d, name=%s\n",key, ((s)?s:""));
+  return ( (pCode *)pcl);
+  
 }
 
 
@@ -2078,19 +2079,19 @@ pCode *newpCodeLabel(char *name, int key)
 /*-----------------------------------------------------------------*/
 pBlock *newpBlock(void)
 {
-       
-       pBlock *PpB;
-       
-       PpB = Safe_calloc(1,sizeof(pBlock) );
-       PpB->next = PpB->prev = NULL;
-       
-       PpB->function_entries = PpB->function_exits = PpB->function_calls = NULL;
-       PpB->tregisters = NULL;
-       PpB->visited = 0;
-       PpB->FlowTree = NULL;
-       
-       return PpB;
-       
+  
+  pBlock *PpB;
+  
+  PpB = Safe_calloc(1,sizeof(pBlock) );
+  PpB->next = PpB->prev = NULL;
+  
+  PpB->function_entries = PpB->function_exits = PpB->function_calls = NULL;
+  PpB->tregisters = NULL;
+  PpB->visited = 0;
+  PpB->FlowTree = NULL;
+  
+  return PpB;
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2104,14 +2105,14 @@ pBlock *newpBlock(void)
 
 pBlock *newpCodeChain(memmap *cm,char c, pCode *pc)
 {
-       
-       pBlock *pB  = newpBlock();
-       
-       pB->pcHead  = pB->pcTail = pc;
-       pB->cmemmap = cm;
-       pB->dbName  = c;
-       
-       return pB;
+  
+  pBlock *pB  = newpBlock();
+  
+  pB->pcHead  = pB->pcTail = pc;
+  pB->cmemmap = cm;
+  pB->dbName  = c;
+  
+  return pB;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2123,163 +2124,163 @@ pBlock *newpCodeChain(memmap *cm,char c, pCode *pc)
 
 pCodeOp *newpCodeOpLabel(char *name, int key)
 {
-       char *s=NULL;
-       static int label_key=-1;
-       
-       pCodeOp *pcop;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpLabel) );
-       pcop->type = PO_LABEL;
-       
-       pcop->name = NULL;
-       
-       if(key>0)
-               sprintf(s=buffer,"_%05d_DS_",key);
-       else 
-               s = name, key = label_key--;
-       
-       PCOLAB(pcop)->offset = 0;
-       if(s)
-               pcop->name = Safe_strdup(s);
-       
-       ((pCodeOpLabel *)pcop)->key = key;
-       
-       //fprintf(stderr,"newpCodeOpLabel: key=%d, name=%s\n",key,((s)?s:""));
-       return pcop;
+  char *s=NULL;
+  static int label_key=-1;
+  
+  pCodeOp *pcop;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpLabel) );
+  pcop->type = PO_LABEL;
+  
+  pcop->name = NULL;
+  
+  if(key>0)
+    sprintf(s=buffer,"_%05d_DS_",key);
+  else 
+    s = name, key = label_key--;
+  
+  PCOLAB(pcop)->offset = 0;
+  if(s)
+    pcop->name = Safe_strdup(s);
+  
+  ((pCodeOpLabel *)pcop)->key = key;
+  
+  //fprintf(stderr,"newpCodeOpLabel: key=%d, name=%s\n",key,((s)?s:""));
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeOp *newpCodeOpLit(int lit)
 {
-       char *s = buffer;
-       pCodeOp *pcop;
-       
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpLit) );
-       pcop->type = PO_LITERAL;
-       
-       pcop->name = NULL;
-       if(lit>=0) {
-               sprintf(s,"0x%02x",lit);
-               if(s)
-                       pcop->name = Safe_strdup(s);
-       }
-       
-       ((pCodeOpLit *)pcop)->lit = lit;
-       
-       return pcop;
+  char *s = buffer;
+  pCodeOp *pcop;
+  
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpLit) );
+  pcop->type = PO_LITERAL;
+  
+  pcop->name = NULL;
+  if(lit>=0) {
+    sprintf(s,"0x%02x",lit);
+    if(s)
+      pcop->name = Safe_strdup(s);
+  }
+  
+  ((pCodeOpLit *)pcop)->lit = lit;
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeOp *newpCodeOpImmd(char *name, int offset, int index, int code_space, int is_func)
 {
-       pCodeOp *pcop;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpImmd) );
-       pcop->type = PO_IMMEDIATE;
-       if(name) {
-               regs *r = NULL;
-               pcop->name = Safe_strdup(name);
-               
-               if(!is_func) 
-                       r = dirregWithName(name);
-               
-               PCOI(pcop)->r = r;
-               if(r) {
-                       //fprintf(stderr, " newpCodeOpImmd reg %s exists\n",name);
-                       PCOI(pcop)->rIdx = r->rIdx;
-               } else {
-                       //fprintf(stderr, " newpCodeOpImmd reg %s doesn't exist\n",name);
-                       PCOI(pcop)->rIdx = -1;
-               }
-               //fprintf(stderr,"%s %s %d\n",__FUNCTION__,name,offset);
-       } else {
-               pcop->name = NULL;
-       }
-       
-       PCOI(pcop)->index = index;
-       PCOI(pcop)->offset = offset;
-       PCOI(pcop)->_const = code_space;
-       PCOI(pcop)->_function = is_func;
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpImmd) );
+  pcop->type = PO_IMMEDIATE;
+  if(name) {
+    regs *r = NULL;
+    pcop->name = Safe_strdup(name);
+    
+    if(!is_func) 
+      r = dirregWithName(name);
+    
+    PCOI(pcop)->r = r;
+    if(r) {
+      //fprintf(stderr, " newpCodeOpImmd reg %s exists\n",name);
+      PCOI(pcop)->rIdx = r->rIdx;
+    } else {
+      //fprintf(stderr, " newpCodeOpImmd reg %s doesn't exist\n",name);
+      PCOI(pcop)->rIdx = -1;
+    }
+    //fprintf(stderr,"%s %s %d\n",__FUNCTION__,name,offset);
+  } else {
+    pcop->name = NULL;
+  }
+  
+  PCOI(pcop)->index = index;
+  PCOI(pcop)->offset = offset;
+  PCOI(pcop)->_const = code_space;
+  PCOI(pcop)->_function = is_func;
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeOp *newpCodeOpWild(int id, pCodeWildBlock *pcwb, pCodeOp *subtype)
 {
-       char *s = buffer;
-       pCodeOp *pcop;
-       
-       
-       if(!pcwb || !subtype) {
-               fprintf(stderr, "Wild opcode declaration error: %s-%d\n",__FILE__,__LINE__);
-               exit(1);
-       }
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpWild));
-       pcop->type = PO_WILD;
-       sprintf(s,"%%%d",id);
-       pcop->name = Safe_strdup(s);
-       
-       PCOW(pcop)->id = id;
-       PCOW(pcop)->pcwb = pcwb;
-       PCOW(pcop)->subtype = subtype;
-       PCOW(pcop)->matched = NULL;
-       
-       return pcop;
+  char *s = buffer;
+  pCodeOp *pcop;
+  
+  
+  if(!pcwb || !subtype) {
+    fprintf(stderr, "Wild opcode declaration error: %s-%d\n",__FILE__,__LINE__);
+    exit(1);
+  }
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpWild));
+  pcop->type = PO_WILD;
+  sprintf(s,"%%%d",id);
+  pcop->name = Safe_strdup(s);
+  
+  PCOW(pcop)->id = id;
+  PCOW(pcop)->pcwb = pcwb;
+  PCOW(pcop)->subtype = subtype;
+  PCOW(pcop)->matched = NULL;
+  
+  return pcop;
 }
 /*-----------------------------------------------------------------*/
 /* Find a symbol with matching name                                */
 /*-----------------------------------------------------------------*/
 static symbol *symFindWithName(memmap * map, const char *name)
 {
-       symbol *sym;
-       
-       for (sym = setFirstItem(map->syms); sym; sym = setNextItem (map->syms)) {
-               if (sym->rname && (strcmp(sym->rname,name)==0))
-                       return sym;
-       }
-       return 0;
+  symbol *sym;
+  
+  for (sym = setFirstItem(map->syms); sym; sym = setNextItem (map->syms)) {
+    if (sym->rname && (strcmp(sym->rname,name)==0))
+      return sym;
+  }
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pCodeOp *newpCodeOpBit(char *name, int ibit, int inBitSpace)
 {
-       pCodeOp *pcop;
-       struct regs *r = 0;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpRegBit) );
-       pcop->type = PO_GPR_BIT;
-       
-       PCORB(pcop)->bit = ibit;
-       PCORB(pcop)->inBitSpace = inBitSpace;
-       
-       if (name) r = regFindWithName(name);
-       if (!r) {
-               // Register has not been allocated - check for symbol information
-               symbol *sym;
-               sym = symFindWithName(bit, name);
-               if (!sym) sym = symFindWithName(sfrbit, name);
-               if (!sym) sym = symFindWithName(sfr, name);
-               if (sym) {
-                       r = allocNewDirReg(sym->etype,name);
-               }
-       }
-       if (r) {
-               pcop->name = NULL;
-               PCOR(pcop)->r = r;
-               PCOR(pcop)->rIdx = r->rIdx;
-       } else {
-               pcop->name = Safe_strdup(name);   
-               PCOR(pcop)->r = NULL;
-               PCOR(pcop)->rIdx = 0;
-       }
-       return pcop;
+  pCodeOp *pcop;
+  struct regs *r = 0;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpRegBit) );
+  pcop->type = PO_GPR_BIT;
+  
+  PCORB(pcop)->bit = ibit;
+  PCORB(pcop)->inBitSpace = inBitSpace;
+  
+  if (name) r = regFindWithName(name);
+  if (!r) {
+    // Register has not been allocated - check for symbol information
+    symbol *sym;
+    sym = symFindWithName(bit, name);
+    if (!sym) sym = symFindWithName(sfrbit, name);
+    if (!sym) sym = symFindWithName(sfr, name);
+    if (sym) {
+      r = allocNewDirReg(sym->etype,name);
+    }
+  }
+  if (r) {
+    pcop->name = NULL;
+    PCOR(pcop)->r = r;
+    PCOR(pcop)->rIdx = r->rIdx;
+  } else {
+    pcop->name = Safe_strdup(name);   
+    PCOR(pcop)->r = NULL;
+    PCOR(pcop)->rIdx = 0;
+  }
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*
@@ -2292,52 +2293,52 @@ pCodeOp *newpCodeOpBit(char *name, int ibit, int inBitSpace)
 
 pCodeOp *newpCodeOpReg(int rIdx)
 {
-       pCodeOp *pcop;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-       
-       pcop->name = NULL;
-       
-       if(rIdx >= 0) {
-               PCOR(pcop)->rIdx = rIdx;
-               PCOR(pcop)->r = pic14_regWithIdx(rIdx);
-       } else {
-               PCOR(pcop)->r = pic14_findFreeReg(REG_GPR);
-               
-               if(PCOR(pcop)->r)
-                       PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
-       }
-       
-       if(PCOR(pcop)->r)
-               pcop->type = PCOR(pcop)->r->pc_type;
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+  
+  pcop->name = NULL;
+  
+  if(rIdx >= 0) {
+    PCOR(pcop)->rIdx = rIdx;
+    PCOR(pcop)->r = pic14_regWithIdx(rIdx);
+  } else {
+    PCOR(pcop)->r = pic14_findFreeReg(REG_GPR);
+    
+    if(PCOR(pcop)->r)
+      PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
+  }
+  
+  if(PCOR(pcop)->r)
+    pcop->type = PCOR(pcop)->r->pc_type;
+  
+  return pcop;
 }
 
 pCodeOp *newpCodeOpRegFromStr(char *name)
 {
-       pCodeOp *pcop;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
-       PCOR(pcop)->r = allocRegByName(name, 1);
-       PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
-       pcop->type = PCOR(pcop)->r->pc_type;
-       pcop->name = PCOR(pcop)->r->name;
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpReg) );
+  PCOR(pcop)->r = allocRegByName(name, 1);
+  PCOR(pcop)->rIdx = PCOR(pcop)->r->rIdx;
+  pcop->type = PCOR(pcop)->r->pc_type;
+  pcop->name = PCOR(pcop)->r->name;
+  
+  return pcop;
 }
 
 pCodeOp *newpCodeOpStr(char *name)
 {
-       pCodeOp *pcop;
-       
-       pcop = Safe_calloc(1,sizeof(pCodeOpStr));
-       pcop->type = PO_STR;
-       pcop->name = Safe_strdup(name);   
-       
-       PCOS(pcop)->isPublic = 0;
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  pcop = Safe_calloc(1,sizeof(pCodeOpStr));
+  pcop->type = PO_STR;
+  pcop->name = Safe_strdup(name);   
+  
+  PCOS(pcop)->isPublic = 0;
+  
+  return pcop;
 }
 
 
@@ -2346,100 +2347,100 @@ pCodeOp *newpCodeOpStr(char *name)
 
 pCodeOp *newpCodeOp(char *name, PIC_OPTYPE type)
 {
-       pCodeOp *pcop;
-       
-       switch(type) {
-       case PO_BIT:
-       case PO_GPR_BIT:
-               pcop = newpCodeOpBit(name, -1,0);
-               break;
-               
-       case PO_LITERAL:
-               pcop = newpCodeOpLit(-1);
-               break;
-               
-       case PO_LABEL:
-               pcop = newpCodeOpLabel(NULL,-1);
-               break;
-               
-       case PO_GPR_TEMP:
-               pcop = newpCodeOpReg(-1);
-               break;
-               
-       case PO_GPR_POINTER:
-       case PO_GPR_REGISTER:
-               if(name)
-                       pcop = newpCodeOpRegFromStr(name);
-               else
-                       pcop = newpCodeOpReg(-1);
-               break;
-               
-       case PO_STR:
-               pcop = newpCodeOpStr(name);
-               break;
-               
-       default:
-               pcop = Safe_calloc(1,sizeof(pCodeOp) );
-               pcop->type = type;
-               if(name)
-                       pcop->name = Safe_strdup(name);   
-               else
-                       pcop->name = NULL;
-       }
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  switch(type) {
+  case PO_BIT:
+  case PO_GPR_BIT:
+    pcop = newpCodeOpBit(name, -1,0);
+    break;
+    
+  case PO_LITERAL:
+    pcop = newpCodeOpLit(-1);
+    break;
+    
+  case PO_LABEL:
+    pcop = newpCodeOpLabel(NULL,-1);
+    break;
+    
+  case PO_GPR_TEMP:
+    pcop = newpCodeOpReg(-1);
+    break;
+    
+  case PO_GPR_POINTER:
+  case PO_GPR_REGISTER:
+    if(name)
+      pcop = newpCodeOpRegFromStr(name);
+    else
+      pcop = newpCodeOpReg(-1);
+    break;
+    
+  case PO_STR:
+    pcop = newpCodeOpStr(name);
+    break;
+    
+  default:
+    pcop = Safe_calloc(1,sizeof(pCodeOp) );
+    pcop->type = type;
+    if(name)
+      pcop->name = Safe_strdup(name);   
+    else
+      pcop->name = NULL;
+  }
+  
+  return pcop;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void pCodeConstString(char *name, char *value)
 {
-       pBlock *pb;
-       
-       //  fprintf(stderr, " %s  %s  %s\n",__FUNCTION__,name,value);
-       
-       if(!name || !value)
-               return;
-       
-       pb = newpCodeChain(NULL, 'P',newpCodeCharP("; Starting pCode block"));
-       
-       addpBlock(pb);
-       
-       sprintf(buffer,"; %s = %s",name,value);
-       
-       addpCode2pBlock(pb,newpCodeCharP(buffer));
-       addpCode2pBlock(pb,newpCodeLabel(name,-1));
-       
-       do {
-               addpCode2pBlock(pb,newpCode(POC_RETLW,newpCodeOpLit(*value)));
-       }while (*value++);
-       
-       
+  pBlock *pb;
+  
+  //  fprintf(stderr, " %s  %s  %s\n",__FUNCTION__,name,value);
+  
+  if(!name || !value)
+    return;
+  
+  pb = newpCodeChain(NULL, 'P',newpCodeCharP("; Starting pCode block"));
+  
+  addpBlock(pb);
+  
+  sprintf(buffer,"; %s = %s",name,value);
+  
+  addpCode2pBlock(pb,newpCodeCharP(buffer));
+  addpCode2pBlock(pb,newpCodeLabel(name,-1));
+  
+  do {
+    addpCode2pBlock(pb,newpCode(POC_RETLW,newpCodeOpLit(*value)));
+  }while (*value++);
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void pCodeReadCodeTable(void)
 {
-       pBlock *pb;
-       
-       fprintf(stderr, " %s\n",__FUNCTION__);
-       
-       pb = newpCodeChain(NULL, 'P',newpCodeCharP("; Starting pCode block"));
-       
-       addpBlock(pb);
-       
-       addpCode2pBlock(pb,newpCodeCharP("; ReadCodeTable - built in function"));
-       addpCode2pBlock(pb,newpCodeCharP("; Inputs: temp1,temp2 = code pointer"));
-       addpCode2pBlock(pb,newpCodeCharP("; Outpus: W (from RETLW at temp2:temp1)"));
-       addpCode2pBlock(pb,newpCodeLabel("ReadCodeTable:",-1));
-       
-       addpCode2pBlock(pb,newpCode(POC_MOVFW,newpCodeOpRegFromStr("temp2")));
-       addpCode2pBlock(pb,newpCode(POC_MOVWF,newpCodeOpRegFromStr("PCLATH")));
-       addpCode2pBlock(pb,newpCode(POC_MOVFW,newpCodeOpRegFromStr("temp1")));
-       addpCode2pBlock(pb,newpCode(POC_MOVWF,newpCodeOpRegFromStr("PCL")));
-       
-       
+  pBlock *pb;
+  
+  fprintf(stderr, " %s\n",__FUNCTION__);
+  
+  pb = newpCodeChain(NULL, 'P',newpCodeCharP("; Starting pCode block"));
+  
+  addpBlock(pb);
+  
+  addpCode2pBlock(pb,newpCodeCharP("; ReadCodeTable - built in function"));
+  addpCode2pBlock(pb,newpCodeCharP("; Inputs: temp1,temp2 = code pointer"));
+  addpCode2pBlock(pb,newpCodeCharP("; Outpus: W (from RETLW at temp2:temp1)"));
+  addpCode2pBlock(pb,newpCodeLabel("ReadCodeTable:",-1));
+  
+  addpCode2pBlock(pb,newpCode(POC_MOVFW,newpCodeOpRegFromStr("temp2")));
+  addpCode2pBlock(pb,newpCode(POC_MOVWF,newpCodeOpRegFromStr("PCLATH")));
+  addpCode2pBlock(pb,newpCode(POC_MOVFW,newpCodeOpRegFromStr("temp1")));
+  addpCode2pBlock(pb,newpCode(POC_MOVWF,newpCodeOpRegFromStr("PCL")));
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2447,24 +2448,24 @@ void pCodeReadCodeTable(void)
 /*-----------------------------------------------------------------*/
 void addpCode2pBlock(pBlock *pb, pCode *pc)
 {
-       
-       if(!pc)
-               return;
-       
-       if(!pb->pcHead) {
-       /* If this is the first pcode to be added to a block that
-       * was initialized with a NULL pcode, then go ahead and
-               * make this pcode the head and tail */
-               pb->pcHead  = pb->pcTail = pc;
-       } else {
-               //    if(pb->pcTail)
-               pb->pcTail->next = pc;
-               
-               pc->prev = pb->pcTail;
-               pc->pb = pb;
-               
-               pb->pcTail = pc;
-       }
+  
+  if(!pc)
+    return;
+  
+  if(!pb->pcHead) {
+  /* If this is the first pcode to be added to a block that
+  * was initialized with a NULL pcode, then go ahead and
+    * make this pcode the head and tail */
+    pb->pcHead  = pb->pcTail = pc;
+  } else {
+    //    if(pb->pcTail)
+    pb->pcTail->next = pc;
+    
+    pc->prev = pb->pcTail;
+    pc->pb = pb;
+    
+    pb->pcTail = pc;
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -2472,21 +2473,21 @@ void addpCode2pBlock(pBlock *pb, pCode *pc)
 /*-----------------------------------------------------------------*/
 void addpBlock(pBlock *pb)
 {
-       // fprintf(stderr," Adding pBlock: dbName =%c\n",getpBlock_dbName(pb));
-       
-       if(!the_pFile) {
-               /* First time called, we'll pass through here. */
-               //_ALLOC(the_pFile,sizeof(pFile));
-               the_pFile = Safe_calloc(1,sizeof(pFile));
-               the_pFile->pbHead = the_pFile->pbTail = pb;
-               the_pFile->functions = NULL;
-               return;
-       }
-       
-       the_pFile->pbTail->next = pb;
-       pb->prev = the_pFile->pbTail;
-       pb->next = NULL;
-       the_pFile->pbTail = pb;
+  // fprintf(stderr," Adding pBlock: dbName =%c\n",getpBlock_dbName(pb));
+  
+  if(!the_pFile) {
+    /* First time called, we'll pass through here. */
+    //_ALLOC(the_pFile,sizeof(pFile));
+    the_pFile = Safe_calloc(1,sizeof(pFile));
+    the_pFile->pbHead = the_pFile->pbTail = pb;
+    the_pFile->functions = NULL;
+    return;
+  }
+  
+  the_pFile->pbTail->next = pb;
+  pb->prev = the_pFile->pbTail;
+  pb->next = NULL;
+  the_pFile->pbTail = pb;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2494,36 +2495,36 @@ void addpBlock(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void removepBlock(pBlock *pb)
 {
-       pBlock *pbs;
-       
-       if(!the_pFile)
-               return;
-       
-       
-       //fprintf(stderr," Removing pBlock: dbName =%c\n",getpBlock_dbName(pb));
-       
-       for(pbs = the_pFile->pbHead; pbs; pbs = pbs->next) {
-               if(pbs == pb) {
-                       
-                       if(pbs == the_pFile->pbHead)
-                               the_pFile->pbHead = pbs->next;
-                       
-                       if (pbs == the_pFile->pbTail) 
-                               the_pFile->pbTail = pbs->prev;
-                       
-                       if(pbs->next)
-                               pbs->next->prev = pbs->prev;
-                       
-                       if(pbs->prev)
-                               pbs->prev->next = pbs->next;
-                       
-                       return;
-                       
-               }
-       }
-       
-       fprintf(stderr, "Warning: call to %s:%s didn't find pBlock\n",__FILE__,__FUNCTION__);
-       
+  pBlock *pbs;
+  
+  if(!the_pFile)
+    return;
+  
+  
+  //fprintf(stderr," Removing pBlock: dbName =%c\n",getpBlock_dbName(pb));
+  
+  for(pbs = the_pFile->pbHead; pbs; pbs = pbs->next) {
+    if(pbs == pb) {
+      
+      if(pbs == the_pFile->pbHead)
+        the_pFile->pbHead = pbs->next;
+      
+      if (pbs == the_pFile->pbTail) 
+        the_pFile->pbTail = pbs->prev;
+      
+      if(pbs->next)
+        pbs->next->prev = pbs->prev;
+      
+      if(pbs->prev)
+        pbs->prev->next = pbs->next;
+      
+      return;
+      
+    }
+  }
+  
+  fprintf(stderr, "Warning: call to %s:%s didn't find pBlock\n",__FILE__,__FUNCTION__);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2531,16 +2532,16 @@ void removepBlock(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void printpCode(FILE *of, pCode *pc)
 {
-       
-       if(!pc || !of)
-               return;
-       
-       if(pc->print) {
-               pc->print(of,pc);
-               return;
-       }
-       
-       fprintf(of,"warning - unable to print pCode\n");
+  
+  if(!pc || !of)
+    return;
+  
+  if(pc->print) {
+    pc->print(of,pc);
+    return;
+  }
+  
+  fprintf(of,"warning - unable to print pCode\n");
 }
 
 /*-----------------------------------------------------------------*/
@@ -2548,17 +2549,17 @@ void printpCode(FILE *of, pCode *pc)
 /*-----------------------------------------------------------------*/
 void printpBlock(FILE *of, pBlock *pb)
 {
-       pCode *pc;
-       
-       if(!pb)
-               return;
-       
-       if(!of)
-               of = stderr;
-       
-       for(pc = pb->pcHead; pc; pc = pc->next)
-               printpCode(of,pc);
-       
+  pCode *pc;
+  
+  if(!pb)
+    return;
+  
+  if(!of)
+    of = stderr;
+  
+  for(pc = pb->pcHead; pc; pc = pc->next)
+    printpCode(of,pc);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -2571,20 +2572,20 @@ void printpBlock(FILE *of, pBlock *pb)
 
 void unlinkpCode(pCode *pc)
 {
-       
-       
-       if(pc) {
+  
+  
+  if(pc) {
 #ifdef PCODE_DEBUG
-               fprintf(stderr,"Unlinking: ");
-               printpCode(stderr, pc);
+    fprintf(stderr,"Unlinking: ");
+    printpCode(stderr, pc);
 #endif
-               if(pc->prev) 
-                       pc->prev->next = pc->next;
-               if(pc->next)
-                       pc->next->prev = pc->prev;
-               
-               pc->prev = pc->next = NULL;
-       }
+    if(pc->prev) 
+      pc->prev->next = pc->next;
+    if(pc->next)
+      pc->next->prev = pc->prev;
+    
+    pc->prev = pc->next = NULL;
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -2592,29 +2593,29 @@ void unlinkpCode(pCode *pc)
 
 static void genericDestruct(pCode *pc)
 {
-       
-       unlinkpCode(pc);
-       
-       if(isPCI(pc)) {
-       /* For instructions, tell the register (if there's one used)
-               * that it's no longer needed */
-               regs *reg = getRegFromInstruction(pc);
-               if(reg)
-                       deleteSetItem (&(reg->reglives.usedpCodes),pc);
-       }
-       
-       /* Instead of deleting the memory used by this pCode, mark
-       * the object as bad so that if there's a pointer to this pCode
-       * dangling around somewhere then (hopefully) when the type is
-       * checked we'll catch it.
-       */
-       
-       pc->type = PC_BAD;
-       
-       addpCode2pBlock(pb_dead_pcodes, pc);
-       
-       //free(pc);
-       
+  
+  unlinkpCode(pc);
+  
+  if(isPCI(pc)) {
+  /* For instructions, tell the register (if there's one used)
+    * that it's no longer needed */
+    regs *reg = getRegFromInstruction(pc);
+    if(reg)
+      deleteSetItem (&(reg->reglives.usedpCodes),pc);
+  }
+  
+  /* Instead of deleting the memory used by this pCode, mark
+  * the object as bad so that if there's a pointer to this pCode
+  * dangling around somewhere then (hopefully) when the type is
+  * checked we'll catch it.
+  */
+  
+  pc->type = PC_BAD;
+  
+  addpCode2pBlock(pb_dead_pcodes, pc);
+  
+  //free(pc);
+  
 }
 
 
@@ -2622,19 +2623,19 @@ static void genericDestruct(pCode *pc)
 /*  Copies the pCodeInstruction flow pointer from source pCode     */
 /*-----------------------------------------------------------------*/
 static void CopyFlow(pCodeInstruction *pcd, pCode *pcs) {
-       pCode *p;
-       pCodeFlow *pcflow = 0;
-       for (p=pcs; p; p=p->prev) {
-               if (isPCI(p)) {
-                       pcflow = PCI(p)->pcflow;
-                       break;
-               }
-               if (isPCF(p)) {
-                       pcflow = (pCodeFlow*)p;
-                       break;
-               }
-       }
-       PCI(pcd)->pcflow = pcflow;
+  pCode *p;
+  pCodeFlow *pcflow = 0;
+  for (p=pcs; p; p=p->prev) {
+    if (isPCI(p)) {
+      pcflow = PCI(p)->pcflow;
+      break;
+    }
+    if (isPCF(p)) {
+      pcflow = (pCodeFlow*)p;
+      break;
+    }
+  }
+  PCI(pcd)->pcflow = pcflow;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2643,21 +2644,21 @@ static void CopyFlow(pCodeInstruction *pcd, pCode *pcs) {
 /*-----------------------------------------------------------------*/
 void pCodeInsertAfter(pCode *pc1, pCode *pc2)
 {
-       
-       if(!pc1 || !pc2)
-               return;
-       
-       pc2->next = pc1->next;
-       if(pc1->next)
-               pc1->next->prev = pc2;
-       
-       pc2->pb = pc1->pb;
-       pc2->prev = pc1;
-       pc1->next = pc2;
-       
-       /* If this is an instrution type propogate the flow */
-       if (isPCI(pc2))
-               CopyFlow(PCI(pc2),pc1);
+  
+  if(!pc1 || !pc2)
+    return;
+  
+  pc2->next = pc1->next;
+  if(pc1->next)
+    pc1->next->prev = pc2;
+  
+  pc2->pb = pc1->pb;
+  pc2->prev = pc1;
+  pc1->next = pc2;
+  
+  /* If this is an instrution type propogate the flow */
+  if (isPCI(pc2))
+    CopyFlow(PCI(pc2),pc1);
 }
 
 /*------------------------------------------------------------------*/
@@ -2666,21 +2667,21 @@ void pCodeInsertAfter(pCode *pc1, pCode *pc2)
 /*------------------------------------------------------------------*/
 void pCodeInsertBefore(pCode *pc1, pCode *pc2)
 {
-       
-       if(!pc1 || !pc2)
-               return;
-       
-       pc2->prev = pc1->prev;
-       if(pc1->prev)
-               pc1->prev->next = pc2;
-       
-       pc2->pb = pc1->pb;
-       pc2->next = pc1;
-       pc1->prev = pc2;
-       
-       /* If this is an instrution type propogate the flow */
-       if (isPCI(pc2))
-               CopyFlow(PCI(pc2),pc1);
+  
+  if(!pc1 || !pc2)
+    return;
+  
+  pc2->prev = pc1->prev;
+  if(pc1->prev)
+    pc1->prev->next = pc2;
+  
+  pc2->pb = pc1->pb;
+  pc2->next = pc1;
+  pc1->prev = pc2;
+  
+  /* If this is an instrution type propogate the flow */
+  if (isPCI(pc2))
+    CopyFlow(PCI(pc2),pc1);
 }
 
 /*-----------------------------------------------------------------*/
@@ -2688,108 +2689,108 @@ void pCodeInsertBefore(pCode *pc1, pCode *pc2)
 /*-----------------------------------------------------------------*/
 pCodeOp *pCodeOpCopy(pCodeOp *pcop)
 {
-       pCodeOp *pcopnew=NULL;
-       
-       if(!pcop)
-               return NULL;
-       
-       switch(pcop->type) { 
-       case PO_CRY:
-       case PO_BIT:
-               //DFPRINTF((stderr,"pCodeOpCopy bit\n"));
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpRegBit) );
-               PCORB(pcopnew)->bit = PCORB(pcop)->bit;
-               PCORB(pcopnew)->inBitSpace = PCORB(pcop)->inBitSpace;
-               
-               break;
-               
-       case PO_WILD:
-               /* Here we expand the wild card into the appropriate type: */
-               /* By recursively calling pCodeOpCopy */
-               //DFPRINTF((stderr,"pCodeOpCopy wild\n"));
-               if(PCOW(pcop)->matched)
-                       pcopnew = pCodeOpCopy(PCOW(pcop)->matched);
-               else {
-                       // Probably a label
-                       pcopnew = pCodeOpCopy(PCOW(pcop)->subtype);
-                       pcopnew->name = Safe_strdup(PCOW(pcop)->pcwb->vars[PCOW(pcop)->id]);
-                       //DFPRINTF((stderr,"copied a wild op named %s\n",pcopnew->name));
-               }
-               
-               return pcopnew;
-               break;
-               
-       case PO_LABEL:
-               //DFPRINTF((stderr,"pCodeOpCopy label\n"));
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpLabel) );
-               PCOLAB(pcopnew)->key =  PCOLAB(pcop)->key;
-               break;
-               
-       case PO_IMMEDIATE:
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpImmd) );
-               PCOI(pcopnew)->index = PCOI(pcop)->index;
-               PCOI(pcopnew)->offset = PCOI(pcop)->offset;
-               PCOI(pcopnew)->_const = PCOI(pcop)->_const;
-               PCOI(pcopnew)->_function = PCOI(pcop)->_function;
-               break;
-               
-       case PO_LITERAL:
-               //DFPRINTF((stderr,"pCodeOpCopy lit\n"));
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpLit) );
-               PCOL(pcopnew)->lit = PCOL(pcop)->lit;
-               break;
-               
-       case PO_GPR_BIT:
-               
-               pcopnew = newpCodeOpBit(pcop->name, PCORB(pcop)->bit,PCORB(pcop)->inBitSpace);
-               PCOR(pcopnew)->r = PCOR(pcop)->r;
-               PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
-               DFPRINTF((stderr," pCodeOpCopy Bit -register index\n"));
-               return pcopnew;
-               break;
-               
-       case PO_GPR_POINTER:
-       case PO_GPR_REGISTER:
-       case PO_GPR_TEMP:
-       case PO_FSR:
-       case PO_INDF:
-               //DFPRINTF((stderr,"pCodeOpCopy GPR register\n"));
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpReg) );
-               PCOR(pcopnew)->r = PCOR(pcop)->r;
-               PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
-               PCOR(pcopnew)->instance = PCOR(pcop)->instance;
-               DFPRINTF((stderr," register index %d\n", PCOR(pcop)->r->rIdx));
-               break;
-               
-       case PO_DIR:
-               //fprintf(stderr,"pCodeOpCopy PO_DIR\n");
-               pcopnew = Safe_calloc(1,sizeof(pCodeOpReg) );
-               PCOR(pcopnew)->r = PCOR(pcop)->r;
-               PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
-               PCOR(pcopnew)->instance = PCOR(pcop)->instance;
-               break;
-       case PO_STATUS:
-               DFPRINTF((stderr,"pCodeOpCopy PO_STATUS\n"));
-       case PO_SFR_REGISTER:
-       case PO_STR:
-       case PO_NONE:
-       case PO_W:
-       case PO_INTCON:
-       case PO_PCL:
-       case PO_PCLATH:
-               
-               //DFPRINTF((stderr,"pCodeOpCopy register type %d\n", pcop->type));
-               pcopnew = Safe_calloc(1,sizeof(pCodeOp) );
-               
-       }
-       
-       pcopnew->type = pcop->type;
-       if(pcop->name)
-               pcopnew->name = Safe_strdup(pcop->name);
-       else
-               pcopnew->name = NULL;
-       
-       return pcopnew;
+  pCodeOp *pcopnew=NULL;
+  
+  if(!pcop)
+    return NULL;
+  
+  switch(pcop->type) { 
+  case PO_CRY:
+  case PO_BIT:
+    //DFPRINTF((stderr,"pCodeOpCopy bit\n"));
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpRegBit) );
+    PCORB(pcopnew)->bit = PCORB(pcop)->bit;
+    PCORB(pcopnew)->inBitSpace = PCORB(pcop)->inBitSpace;
+    
+    break;
+    
+  case PO_WILD:
+    /* Here we expand the wild card into the appropriate type: */
+    /* By recursively calling pCodeOpCopy */
+    //DFPRINTF((stderr,"pCodeOpCopy wild\n"));
+    if(PCOW(pcop)->matched)
+      pcopnew = pCodeOpCopy(PCOW(pcop)->matched);
+    else {
+      // Probably a label
+      pcopnew = pCodeOpCopy(PCOW(pcop)->subtype);
+      pcopnew->name = Safe_strdup(PCOW(pcop)->pcwb->vars[PCOW(pcop)->id]);
+      //DFPRINTF((stderr,"copied a wild op named %s\n",pcopnew->name));
+    }
+    
+    return pcopnew;
+    break;
+    
+  case PO_LABEL:
+    //DFPRINTF((stderr,"pCodeOpCopy label\n"));
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpLabel) );
+    PCOLAB(pcopnew)->key =  PCOLAB(pcop)->key;
+    break;
+    
+  case PO_IMMEDIATE:
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpImmd) );
+    PCOI(pcopnew)->index = PCOI(pcop)->index;
+    PCOI(pcopnew)->offset = PCOI(pcop)->offset;
+    PCOI(pcopnew)->_const = PCOI(pcop)->_const;
+    PCOI(pcopnew)->_function = PCOI(pcop)->_function;
+    break;
+    
+  case PO_LITERAL:
+    //DFPRINTF((stderr,"pCodeOpCopy lit\n"));
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpLit) );
+    PCOL(pcopnew)->lit = PCOL(pcop)->lit;
+    break;
+    
+  case PO_GPR_BIT:
+    
+    pcopnew = newpCodeOpBit(pcop->name, PCORB(pcop)->bit,PCORB(pcop)->inBitSpace);
+    PCOR(pcopnew)->r = PCOR(pcop)->r;
+    PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
+    DFPRINTF((stderr," pCodeOpCopy Bit -register index\n"));
+    return pcopnew;
+    break;
+    
+  case PO_GPR_POINTER:
+  case PO_GPR_REGISTER:
+  case PO_GPR_TEMP:
+  case PO_FSR:
+  case PO_INDF:
+    //DFPRINTF((stderr,"pCodeOpCopy GPR register\n"));
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpReg) );
+    PCOR(pcopnew)->r = PCOR(pcop)->r;
+    PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
+    PCOR(pcopnew)->instance = PCOR(pcop)->instance;
+    DFPRINTF((stderr," register index %d\n", PCOR(pcop)->r->rIdx));
+    break;
+    
+  case PO_DIR:
+    //fprintf(stderr,"pCodeOpCopy PO_DIR\n");
+    pcopnew = Safe_calloc(1,sizeof(pCodeOpReg) );
+    PCOR(pcopnew)->r = PCOR(pcop)->r;
+    PCOR(pcopnew)->rIdx = PCOR(pcop)->rIdx;
+    PCOR(pcopnew)->instance = PCOR(pcop)->instance;
+    break;
+  case PO_STATUS:
+    DFPRINTF((stderr,"pCodeOpCopy PO_STATUS\n"));
+  case PO_SFR_REGISTER:
+  case PO_STR:
+  case PO_NONE:
+  case PO_W:
+  case PO_INTCON:
+  case PO_PCL:
+  case PO_PCLATH:
+    
+    //DFPRINTF((stderr,"pCodeOpCopy register type %d\n", pcop->type));
+    pcopnew = Safe_calloc(1,sizeof(pCodeOp) );
+    
+  }
+  
+  pcopnew->type = pcop->type;
+  if(pcop->name)
+    pcopnew->name = Safe_strdup(pcop->name);
+  else
+    pcopnew->name = NULL;
+  
+  return pcopnew;
 }
 
 /*-----------------------------------------------------------------*/
@@ -2797,23 +2798,23 @@ pCodeOp *pCodeOpCopy(pCodeOp *pcop)
 /*-----------------------------------------------------------------*/
 pCodeOp *popCopyReg(pCodeOpReg *pc)
 {
-       pCodeOpReg *pcor;
-       
-       pcor = Safe_calloc(1,sizeof(pCodeOpReg) );
-       pcor->pcop.type = pc->pcop.type;
-       if(pc->pcop.name) {
-               if(!(pcor->pcop.name = Safe_strdup(pc->pcop.name)))
-                       fprintf(stderr,"oops %s %d",__FILE__,__LINE__);
-       } else
-               pcor->pcop.name = NULL;
-       
-       pcor->r = pc->r;
-       pcor->rIdx = pc->rIdx;
-       pcor->r->wasUsed=1;
-       
-       //DEBUGpic14_emitcode ("; ***","%s  , copying %s, rIdx=%d",__FUNCTION__,pc->pcop.name,pc->rIdx);
-       
-       return PCOP(pcor);
+  pCodeOpReg *pcor;
+  
+  pcor = Safe_calloc(1,sizeof(pCodeOpReg) );
+  pcor->pcop.type = pc->pcop.type;
+  if(pc->pcop.name) {
+    if(!(pcor->pcop.name = Safe_strdup(pc->pcop.name)))
+      fprintf(stderr,"oops %s %d",__FILE__,__LINE__);
+  } else
+    pcor->pcop.name = NULL;
+  
+  pcor->r = pc->r;
+  pcor->rIdx = pc->rIdx;
+  pcor->r->wasUsed=1;
+  
+  //DEBUGpic14_emitcode ("; ***","%s  , copying %s, rIdx=%d",__FUNCTION__,pc->pcop.name,pc->rIdx);
+  
+  return PCOP(pcor);
 }
 
 /*-----------------------------------------------------------------*/
@@ -2821,48 +2822,48 @@ pCodeOp *popCopyReg(pCodeOpReg *pc)
 /*-----------------------------------------------------------------*/
 pCode *pCodeInstructionCopy(pCodeInstruction *pci,int invert)
 {
-       pCodeInstruction *new_pci;
-       
-       if(invert)
-               new_pci = PCI(newpCode(pci->inverted_op,pci->pcop));
-       else
-               new_pci = PCI(newpCode(pci->op,pci->pcop));
-       
-       new_pci->pc.pb = pci->pc.pb;
-       new_pci->from = pci->from;
-       new_pci->to   = pci->to;
-       new_pci->label = pci->label;
-       new_pci->pcflow = pci->pcflow;
-       
-       return PCODE(new_pci);
+  pCodeInstruction *new_pci;
+  
+  if(invert)
+    new_pci = PCI(newpCode(pci->inverted_op,pci->pcop));
+  else
+    new_pci = PCI(newpCode(pci->op,pci->pcop));
+  
+  new_pci->pc.pb = pci->pc.pb;
+  new_pci->from = pci->from;
+  new_pci->to   = pci->to;
+  new_pci->label = pci->label;
+  new_pci->pcflow = pci->pcflow;
+  
+  return PCODE(new_pci);
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void pCodeDeleteChain(pCode *f,pCode *t)
 {
-       pCode *pc;
-       
-       while(f && f!=t) {
-               DFPRINTF((stderr,"delete pCode:\n"));
-               pc = f->next;
-               //f->print(stderr,f);
-               //f->delete(f);  this dumps core...
-               f = pc;
-       }
+  pCode *pc;
+  
+  while(f && f!=t) {
+    DFPRINTF((stderr,"delete pCode:\n"));
+    pc = f->next;
+    //f->print(stderr,f);
+    //f->delete(f);  this dumps core...
+    f = pc;
+  }
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void pBlockRegs(FILE *of, pBlock *pb)
 {
-       
-       regs  *r;
-       
-       r = setFirstItem(pb->tregisters);
-       while (r) {
-               r = setNextItem(pb->tregisters);
-       }
+  
+  regs  *r;
+  
+  r = setFirstItem(pb->tregisters);
+  while (r) {
+    r = setNextItem(pb->tregisters);
+  }
 }
 
 
@@ -2870,226 +2871,236 @@ void pBlockRegs(FILE *of, pBlock *pb)
 /*-----------------------------------------------------------------*/
 char *get_op(pCodeOp *pcop,char *buffer, size_t size)
 {
-       regs *r;
-       static char b[50];
-       char *s;
-       int use_buffer = 1;    // copy the string to the passed buffer pointer
-       
-       if(!buffer) {
-               buffer = b;
-               size = sizeof(b);
-               use_buffer = 0;     // Don't bother copying the string to the buffer.
-       } 
-       
-       if(pcop) {
-               switch(pcop->type) {
-               case PO_INDF:
-               case PO_FSR:
-                       if(use_buffer) {
-                               SAFE_snprintf(&buffer,&size,"%s",PCOR(pcop)->r->name);
-                               return buffer;
-                       }
-                       //return PCOR(pcop)->r->name;
-                       return pcop->name;
-                       break;
-               case PO_GPR_TEMP:
-                       if (PCOR(pcop)->r->type == REG_STK)
-                               r = typeRegWithIdx(PCOR(pcop)->r->rIdx,REG_STK,1);
-                       else
-                               r = pic14_regWithIdx(PCOR(pcop)->r->rIdx);
-                       
-                       if(use_buffer) {
-                               SAFE_snprintf(&buffer,&size,"%s",r->name);
-                               return buffer;
-                       }
-                       
-                       return r->name;
-                       
-                       
-               case PO_IMMEDIATE:
-                       s = buffer;
-                       
-                       if(PCOI(pcop)->_const) {
-                               
-                               if( PCOI(pcop)->offset && PCOI(pcop)->offset<4) {
-                                       switch(PCOI(pcop)->offset) {
-                                       case 0:
-                                               SAFE_snprintf(&s,&size,"low %s",pcop->name);
-                                               break;
-                                       case 1:
-                                               SAFE_snprintf(&s,&size,"high %s",pcop->name);
-                                               break;
-                                       default:
-                                               SAFE_snprintf(&s,&size,"(((%s+%d) >> %d)&0xff)",
-                                                       pcop->name,
-                                                       PCOI(pcop)->index,
-                                                       8 * PCOI(pcop)->offset );
-                                       }
-                               } else
-                                       SAFE_snprintf(&s,&size,"LOW(%s+%d)",pcop->name,PCOI(pcop)->index);
-                       } else {
-                               
-                               if( PCOI(pcop)->index) { // && PCOI(pcc->pcop)->offset<4) {
-                                       SAFE_snprintf(&s,&size,"(%s + %d)",
-                                               pcop->name,
-                                               PCOI(pcop)->index );
-                               } else {
-                                       switch(PCOI(pcop)->offset) {
-                                       case 0:
-                                               SAFE_snprintf(&s,&size,"%s",pcop->name);
-                                               break;
-                                       case 1:
-                                               SAFE_snprintf(&s,&size,"high %s",pcop->name);
-                                               break;
-                                       default:
-                                               SAFE_snprintf(&s,&size,"(%s >> %d)&0xff",pcop->name, 8*PCOI(pcop)->offset);
-                                       }
-                               }
-                       }
-                       
-                       return buffer;
-                       
-                                       case PO_DIR:
-                                               s = buffer;
-                                               //size = sizeof(buffer);
-                                               if( PCOR(pcop)->instance) {
-                                                       SAFE_snprintf(&s,&size,"(%s + %d)",
-                                                               pcop->name,
-                                                               PCOR(pcop)->instance );
-                                                       //fprintf(stderr,"PO_DIR %s\n",buffer);
-                                               } else
-                                                       SAFE_snprintf(&s,&size,"%s",pcop->name);
-                                               return buffer;
-                                               
-                                       case PO_LABEL:
-                                               s = buffer;
-                                               if  (pcop->name) {
-                                                       if(PCOLAB(pcop)->offset == 1)
-                                                               SAFE_snprintf(&s,&size,"HIGH(%s)",pcop->name);
-                                                       else
-                                                               SAFE_snprintf(&s,&size,"%s",pcop->name);
-                                               }
-                                               return buffer;
-                                               
-                                       default:
-                                               if  (pcop->name) {
-                                                       if(use_buffer) {
-                                                               SAFE_snprintf(&buffer,&size,"%s",pcop->name);
-                                                               return buffer;
-                                                       }
-                                                       return pcop->name;
-                                               }
-                                               
-               }
+  regs *r;
+  static char b[50];
+  char *s;
+  int use_buffer = 1;    // copy the string to the passed buffer pointer
+  
+  if(!buffer) {
+    buffer = b;
+    size = sizeof(b);
+    use_buffer = 0;     // Don't bother copying the string to the buffer.
+  } 
+  
+  if(pcop) {
+    switch(pcop->type) {
+    case PO_INDF:
+    case PO_FSR:
+      if(use_buffer) {
+       SAFE_snprintf(&buffer,&size,"%s",PCOR(pcop)->r->name);
+       return buffer;
+      }
+      //return PCOR(pcop)->r->name;
+      return pcop->name;
+      break;
+    case PO_GPR_TEMP:
+      if (PCOR(pcop)->r->type == REG_STK)
+       r = typeRegWithIdx(PCOR(pcop)->r->rIdx,REG_STK,1);
+      else
+       r = pic14_regWithIdx(PCOR(pcop)->r->rIdx);
+      
+      if(use_buffer) {
+       SAFE_snprintf(&buffer,&size,"%s",r->name);
+       return buffer;
+      }
+      
+      return r->name;
+      
+      
+    case PO_IMMEDIATE:
+      s = buffer;
+      
+      if(PCOI(pcop)->_const) {
+        
+       if( PCOI(pcop)->offset && PCOI(pcop)->offset<4) {
+         switch(PCOI(pcop)->offset) {
+         case 0:
+           SAFE_snprintf(&s,&size,"low %s",pcop->name);
+           break;
+         case 1:
+           SAFE_snprintf(&s,&size,"high %s",pcop->name);
+           break;
+         default:
+           SAFE_snprintf(&s,&size,"(((%s+%d) >> %d)&0xff)",
+                         pcop->name,
+                         PCOI(pcop)->index,
+                         8 * PCOI(pcop)->offset );
+         }
+       } else
+         SAFE_snprintf(&s,&size,"LOW(%s+%d)",pcop->name,PCOI(pcop)->index);
+      } else {
+        
+       if( PCOI(pcop)->index) { // && PCOI(pcc->pcop)->offset<4) {
+         SAFE_snprintf(&s,&size,"(%s + %d)",
+                       pcop->name,
+                       PCOI(pcop)->index );
+       } else {
+         switch(PCOI(pcop)->offset) {
+         case 0:
+           SAFE_snprintf(&s,&size,"%s",pcop->name);
+           break;
+         case 1:
+           SAFE_snprintf(&s,&size,"high %s",pcop->name);
+           break;
+         default:
+           SAFE_snprintf(&s,&size,"(%s >> %d)&0xff",pcop->name, 8*PCOI(pcop)->offset);
+         }
+       }
+      }
+      
+      return buffer;
+      
+    case PO_DIR:
+      s = buffer;
+      //size = sizeof(buffer);
+      if( PCOR(pcop)->instance) {
+       SAFE_snprintf(&s,&size,"(%s + %d)",
+                     pcop->name,
+                     PCOR(pcop)->instance );
+       //fprintf(stderr,"PO_DIR %s\n",buffer);
+      } else
+       SAFE_snprintf(&s,&size,"%s",pcop->name);
+      return buffer;
+            
+    case PO_LABEL:
+      s = buffer;
+      if  (pcop->name) {
+       if(PCOLAB(pcop)->offset == 1)
+         SAFE_snprintf(&s,&size,"HIGH(%s)",pcop->name);
+       else
+         SAFE_snprintf(&s,&size,"%s",pcop->name);
+      }
+      return buffer;
+
+    case PO_GPR_BIT:
+      if(PCOR(pcop)->r) {
+       if(use_buffer) {
+         SAFE_snprintf(&buffer,&size,"%s",PCOR(pcop)->r->name);
+         return buffer;
+       }
+       return PCOR(pcop)->r->name;
+      }
+
+      /* fall through to the default case */
+    default:
+      if(pcop->name) {
+       if(use_buffer) {
+         SAFE_snprintf(&buffer,&size,"%s",pcop->name);
+         return buffer;
        }
-       
-       return "NO operand";
-       
+       return pcop->name;
+      }
+    }
+  }
+
+  printf("PIC port internal warning: (%s:%d) %s not found\n",
+        __FUNCTION__,
+        __LINE__,
+        pCodeOpType(pcop));
+
+  return "NO operand";
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static char *get_op_from_instruction( pCodeInstruction *pcc)
 {
-       
-       if(pcc )
-               return get_op(pcc->pcop,NULL,0);
-       
-               /* gcc 3.2:  warning: concatenation of string literals with __FUNCTION__ is deprecated 
-               return ("ERROR Null: "__FUNCTION__);
-       */
-       return ("ERROR Null: get_op_from_instruction");
-       
+
+  if(pcc)
+    return get_op(pcc->pcop,NULL,0);
+
+  return ("ERROR Null: get_op_from_instruction");
+
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static void pCodeOpPrint(FILE *of, pCodeOp *pcop)
 {
-       
-       fprintf(of,"pcodeopprint- not implemented\n");
+  fprintf(of,"pcodeopprint- not implemented\n");
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 char *pCode2str(char *str, size_t size, pCode *pc)
 {
-       char *s = str;
-       
-       switch(pc->type) {
-               
-       case PC_OPCODE:
-               
-               SAFE_snprintf(&s,&size, "\t%s\t", PCI(pc)->mnemonic);
-               
-               if( (PCI(pc)->num_ops >= 1) && (PCI(pc)->pcop)) {
-                       
-                       if(PCI(pc)->isBitInst) {
-                               if(PCI(pc)->pcop->type == PO_GPR_BIT) {
-                                       char *name = PCI(pc)->pcop->name;
-                                       if (!name) 
-                                               name = PCOR(PCI(pc)->pcop)->r->name;
-                                       if( (((pCodeOpRegBit *)(PCI(pc)->pcop))->inBitSpace) )
-                                               SAFE_snprintf(&s,&size,"(%s >> 3), (%s & 7)", name, name);
-                                       else
-                                               SAFE_snprintf(&s,&size,"%s,%d", name, 
-                                               (((pCodeOpRegBit *)(PCI(pc)->pcop))->bit)&7);
-                               } else if(PCI(pc)->pcop->type == PO_GPR_BIT) {
-                                       SAFE_snprintf(&s,&size,"%s,%d", get_op_from_instruction(PCI(pc)),PCORB(PCI(pc)->pcop)->bit);
-                               }else
-                                       SAFE_snprintf(&s,&size,"%s,0 ; ?bug", get_op_from_instruction(PCI(pc)));
-                               //PCI(pc)->pcop->t.bit );
-                       } else {
-                               
-                               if(PCI(pc)->pcop->type == PO_GPR_BIT) {
-                                       if( PCI(pc)->num_ops == 2)
-                                               SAFE_snprintf(&s,&size,"(%s >> 3),%c",get_op_from_instruction(PCI(pc)),((PCI(pc)->isModReg) ? 'F':'W'));
-                                       else
-                                               SAFE_snprintf(&s,&size,"(1 << (%s & 7))",get_op_from_instruction(PCI(pc)));
-                                       
-                               }else {
-                                       SAFE_snprintf(&s,&size,"%s",get_op_from_instruction(PCI(pc)));
-                                       
-                                       if( PCI(pc)->num_ops == 2)
-                                               SAFE_snprintf(&s,&size,",%c", ( (PCI(pc)->isModReg) ? 'F':'W'));
-                               }
-                       }
-                       
-               }
-               break;
-               
-       case PC_COMMENT:
-               /* assuming that comment ends with a \n */
-               SAFE_snprintf(&s,&size,";%s", ((pCodeComment *)pc)->comment);
-               break;
-               
-       case PC_INLINE:
-               /* assuming that inline code ends with a \n */
-               SAFE_snprintf(&s,&size,"%s", ((pCodeComment *)pc)->comment);
-               break;
-               
-       case PC_LABEL:
-               SAFE_snprintf(&s,&size,";label=%s, key=%d\n",PCL(pc)->label,PCL(pc)->key);
-               break;
-       case PC_FUNCTION:
-               SAFE_snprintf(&s,&size,";modname=%s,function=%s: id=%d\n",PCF(pc)->modname,PCF(pc)->fname);
-               break;
-       case PC_WILD:
-               SAFE_snprintf(&s,&size,";\tWild opcode: id=%d\n",PCW(pc)->id);
-               break;
-       case PC_FLOW:
-               SAFE_snprintf(&s,&size,";\t--FLOW change\n");
-               break;
-       case PC_CSOURCE:
-               SAFE_snprintf(&s,&size,";#CSRC\t%s %d\n; %s\n", PCCS(pc)->file_name, PCCS(pc)->line_number, PCCS(pc)->line);
-               break;
-               
-       case PC_BAD:
-               SAFE_snprintf(&s,&size,";A bad pCode is being used\n");
-       }
-       
-       return str;
-       
+  char *s = str;
+  
+  switch(pc->type) {
+    
+  case PC_OPCODE:
+    
+    SAFE_snprintf(&s,&size, "\t%s\t", PCI(pc)->mnemonic);
+    
+    if( (PCI(pc)->num_ops >= 1) && (PCI(pc)->pcop)) {
+      
+      if(PCI(pc)->isBitInst) {
+  if(PCI(pc)->pcop->type == PO_GPR_BIT) {
+    char *name = PCI(pc)->pcop->name;
+    if (!name) 
+      name = PCOR(PCI(pc)->pcop)->r->name;
+    if( (((pCodeOpRegBit *)(PCI(pc)->pcop))->inBitSpace) )
+      SAFE_snprintf(&s,&size,"(%s >> 3), (%s & 7)", name, name);
+    else
+      SAFE_snprintf(&s,&size,"%s,%d", name, 
+        (((pCodeOpRegBit *)(PCI(pc)->pcop))->bit)&7);
+  } else if(PCI(pc)->pcop->type == PO_GPR_BIT) {
+    SAFE_snprintf(&s,&size,"%s,%d", get_op_from_instruction(PCI(pc)),PCORB(PCI(pc)->pcop)->bit);
+  }else
+    SAFE_snprintf(&s,&size,"%s,0 ; ?bug", get_op_from_instruction(PCI(pc)));
+  //PCI(pc)->pcop->t.bit );
+      } else {
+        
+  if(PCI(pc)->pcop->type == PO_GPR_BIT) {
+    if( PCI(pc)->num_ops == 2)
+      SAFE_snprintf(&s,&size,"(%s >> 3),%c",get_op_from_instruction(PCI(pc)),((PCI(pc)->isModReg) ? 'F':'W'));
+    else
+      SAFE_snprintf(&s,&size,"(1 << (%s & 7))",get_op_from_instruction(PCI(pc)));
+          
+  }else {
+    SAFE_snprintf(&s,&size,"%s",get_op_from_instruction(PCI(pc)));
+          
+    if( PCI(pc)->num_ops == 2)
+      SAFE_snprintf(&s,&size,",%c", ( (PCI(pc)->isModReg) ? 'F':'W'));
+  }
+      }
+      
+    }
+    break;
+    
+  case PC_COMMENT:
+    /* assuming that comment ends with a \n */
+    SAFE_snprintf(&s,&size,";%s", ((pCodeComment *)pc)->comment);
+    break;
+    
+  case PC_INLINE:
+    /* assuming that inline code ends with a \n */
+    SAFE_snprintf(&s,&size,"%s", ((pCodeComment *)pc)->comment);
+    break;
+    
+  case PC_LABEL:
+    SAFE_snprintf(&s,&size,";label=%s, key=%d\n",PCL(pc)->label,PCL(pc)->key);
+    break;
+  case PC_FUNCTION:
+    SAFE_snprintf(&s,&size,";modname=%s,function=%s: id=%d\n",PCF(pc)->modname,PCF(pc)->fname);
+    break;
+  case PC_WILD:
+    SAFE_snprintf(&s,&size,";\tWild opcode: id=%d\n",PCW(pc)->id);
+    break;
+  case PC_FLOW:
+    SAFE_snprintf(&s,&size,";\t--FLOW change\n");
+    break;
+  case PC_CSOURCE:
+    SAFE_snprintf(&s,&size,";#CSRC\t%s %d\n; %s\n", PCCS(pc)->file_name, PCCS(pc)->line_number, PCCS(pc)->line);
+    break;
+    
+  case PC_BAD:
+    SAFE_snprintf(&s,&size,";A bad pCode is being used\n");
+  }
+  
+  return str;
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3097,104 +3108,104 @@ char *pCode2str(char *str, size_t size, pCode *pc)
 /*-----------------------------------------------------------------*/
 static void genericPrint(FILE *of, pCode *pc)
 {
-       
-       if(!pc || !of)
-               return;
-       
-       switch(pc->type) {
-       case PC_COMMENT:
-               fprintf(of,";%s\n", ((pCodeComment *)pc)->comment);
-               break;
-               
-       case PC_INLINE:
-               fprintf(of,"%s\n", ((pCodeComment *)pc)->comment);
-               break;
-               
-       case PC_OPCODE:
-               // If the opcode has a label, print that first
-               {
-                       pBranch *pbl = PCI(pc)->label;
-                       while(pbl && pbl->pc) {
-                               if(pbl->pc->type == PC_LABEL)
-                                       pCodePrintLabel(of, pbl->pc);
-                               pbl = pbl->next;
-                       }
-               }
-               
-               if(PCI(pc)->cline) 
-                       genericPrint(of,PCODE(PCI(pc)->cline));
-               
-               {
-                       char str[256];
-                       
-                       pCode2str(str, 256, pc);
-                       
-                       fprintf(of,"%s",str);
-                       
-                       /* Debug */
-                       if(debug_verbose) {
-                               fprintf(of, "\t;id=%u,key=%03x",pc->id,pc->seq);
-                               if(PCI(pc)->pcflow)
-                                       fprintf(of,",flow seq=%03x",PCI(pc)->pcflow->pc.seq);
-                       }
-               }
+  
+  if(!pc || !of)
+    return;
+  
+  switch(pc->type) {
+  case PC_COMMENT:
+    fprintf(of,";%s\n", ((pCodeComment *)pc)->comment);
+    break;
+    
+  case PC_INLINE:
+    fprintf(of,"%s\n", ((pCodeComment *)pc)->comment);
+    break;
+    
+  case PC_OPCODE:
+    // If the opcode has a label, print that first
+    {
+      pBranch *pbl = PCI(pc)->label;
+      while(pbl && pbl->pc) {
+        if(pbl->pc->type == PC_LABEL)
+          pCodePrintLabel(of, pbl->pc);
+        pbl = pbl->next;
+      }
+    }
+    
+    if(PCI(pc)->cline) 
+      genericPrint(of,PCODE(PCI(pc)->cline));
+    
+    {
+      char str[256];
+      
+      pCode2str(str, 256, pc);
+      
+      fprintf(of,"%s",str);
+      
+      /* Debug */
+      if(debug_verbose) {
+        fprintf(of, "\t;id=%u,key=%03x",pc->id,pc->seq);
+        if(PCI(pc)->pcflow)
+          fprintf(of,",flow seq=%03x",PCI(pc)->pcflow->pc.seq);
+      }
+    }
 #if 0
-               {
-                       pBranch *dpb = pc->to;   // debug
-                       while(dpb) {
-                               switch ( dpb->pc->type) {
-                               case PC_OPCODE:
-                                       fprintf(of, "\t;%s", PCI(dpb->pc)->mnemonic);
-                                       break;
-                               case PC_LABEL:
-                                       fprintf(of, "\t;label %d", PCL(dpb->pc)->key);
-                                       break;
-                               case PC_FUNCTION:
-                                       fprintf(of, "\t;function %s", ( (PCF(dpb->pc)->fname) ? (PCF(dpb->pc)->fname) : "[END]"));
-                                       break;
-                               case PC_FLOW:
-                                       fprintf(of, "\t;flow");
-                                       break;
-                               case PC_COMMENT:
-                               case PC_WILD:
-                                       break;
-                               }
-                               dpb = dpb->next;
-                       }
-               }
+    {
+      pBranch *dpb = pc->to;   // debug
+      while(dpb) {
+        switch ( dpb->pc->type) {
+        case PC_OPCODE:
+          fprintf(of, "\t;%s", PCI(dpb->pc)->mnemonic);
+          break;
+        case PC_LABEL:
+          fprintf(of, "\t;label %d", PCL(dpb->pc)->key);
+          break;
+        case PC_FUNCTION:
+          fprintf(of, "\t;function %s", ( (PCF(dpb->pc)->fname) ? (PCF(dpb->pc)->fname) : "[END]"));
+          break;
+        case PC_FLOW:
+          fprintf(of, "\t;flow");
+          break;
+        case PC_COMMENT:
+        case PC_WILD:
+          break;
+        }
+        dpb = dpb->next;
+      }
+    }
 #endif
-               fprintf(of,"\n");
-               break;
-               
-       case PC_WILD:
-               fprintf(of,";\tWild opcode: id=%d\n",PCW(pc)->id);
-               if(PCW(pc)->pci.label)
-                       pCodePrintLabel(of, PCW(pc)->pci.label->pc);
-               
-               if(PCW(pc)->operand) {
-                       fprintf(of,";\toperand  ");
-                       pCodeOpPrint(of,PCW(pc)->operand );
-               }
-               break;
-               
-       case PC_FLOW:
-               if(debug_verbose) {
-                       fprintf(of,";<>Start of new flow, seq=0x%x",pc->seq);
-                       if(PCFL(pc)->ancestor)
-                               fprintf(of," ancestor = 0x%x", PCODE(PCFL(pc)->ancestor)->seq);
-                       fprintf(of,"\n");
-                       
-               }
-               break;
-               
-       case PC_CSOURCE:
-               fprintf(of,";#CSRC\t%s %d\n;  %s\n", PCCS(pc)->file_name, PCCS(pc)->line_number, PCCS(pc)->line);
-               break;
-       case PC_LABEL:
-       default:
-               fprintf(of,"unknown pCode type %d\n",pc->type);
-       }
-       
+    fprintf(of,"\n");
+    break;
+    
+  case PC_WILD:
+    fprintf(of,";\tWild opcode: id=%d\n",PCW(pc)->id);
+    if(PCW(pc)->pci.label)
+      pCodePrintLabel(of, PCW(pc)->pci.label->pc);
+    
+    if(PCW(pc)->operand) {
+      fprintf(of,";\toperand  ");
+      pCodeOpPrint(of,PCW(pc)->operand );
+    }
+    break;
+    
+  case PC_FLOW:
+    if(debug_verbose) {
+      fprintf(of,";<>Start of new flow, seq=0x%x",pc->seq);
+      if(PCFL(pc)->ancestor)
+        fprintf(of," ancestor = 0x%x", PCODE(PCFL(pc)->ancestor)->seq);
+      fprintf(of,"\n");
+      
+    }
+    break;
+    
+  case PC_CSOURCE:
+    fprintf(of,";#CSRC\t%s %d\n;  %s\n", PCCS(pc)->file_name, PCCS(pc)->line_number, PCCS(pc)->line);
+    break;
+  case PC_LABEL:
+  default:
+    fprintf(of,"unknown pCode type %d\n",pc->type);
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3203,32 +3214,32 @@ static void genericPrint(FILE *of, pCode *pc)
 
 static void pCodePrintFunction(FILE *of, pCode *pc)
 {
-       
-       if(!pc || !of)
-               return;
-       
-       if( ((pCodeFunction *)pc)->modname) 
-               fprintf(of,"F_%s",((pCodeFunction *)pc)->modname);
-       
-       if(PCF(pc)->fname) {
-               pBranch *exits = PCF(pc)->to;
-               int i=0;
-               fprintf(of,"%s\t;Function start\n",PCF(pc)->fname);
-               while(exits) {
-                       i++;
-                       exits = exits->next;
-               }
-               //if(i) i--;
-               fprintf(of,"; %d exit point%c\n",i, ((i==1) ? ' ':'s'));
-               
-       }else {
-               if((PCF(pc)->from && 
-                       PCF(pc)->from->pc->type == PC_FUNCTION &&
-                       PCF(PCF(pc)->from->pc)->fname) )
-                       fprintf(of,"; exit point of %s\n",PCF(PCF(pc)->from->pc)->fname);
-               else
-                       fprintf(of,"; exit point [can't find entry point]\n");
-       }
+  
+  if(!pc || !of)
+    return;
+  
+  if( ((pCodeFunction *)pc)->modname) 
+    fprintf(of,"F_%s",((pCodeFunction *)pc)->modname);
+  
+  if(PCF(pc)->fname) {
+    pBranch *exits = PCF(pc)->to;
+    int i=0;
+    fprintf(of,"%s\t;Function start\n",PCF(pc)->fname);
+    while(exits) {
+      i++;
+      exits = exits->next;
+    }
+    //if(i) i--;
+    fprintf(of,"; %d exit point%c\n",i, ((i==1) ? ' ':'s'));
+    
+  }else {
+    if((PCF(pc)->from && 
+      PCF(pc)->from->pc->type == PC_FUNCTION &&
+      PCF(PCF(pc)->from->pc)->fname) )
+      fprintf(of,"; exit point of %s\n",PCF(PCF(pc)->from->pc)->fname);
+    else
+      fprintf(of,"; exit point [can't find entry point]\n");
+  }
 }
 /*-----------------------------------------------------------------*/
 /* pCodePrintLabel - prints label                                  */
@@ -3236,17 +3247,17 @@ static void pCodePrintFunction(FILE *of, pCode *pc)
 
 static void pCodePrintLabel(FILE *of, pCode *pc)
 {
-       
-       if(!pc || !of)
-               return;
-       
-       if(PCL(pc)->label) 
-               fprintf(of,"%s\n",PCL(pc)->label);
-       else if (PCL(pc)->key >=0) 
-               fprintf(of,"_%05d_DS_:\n",PCL(pc)->key);
-       else
-               fprintf(of,";wild card label: id=%d\n",-PCL(pc)->key);
-       
+  
+  if(!pc || !of)
+    return;
+  
+  if(PCL(pc)->label) 
+    fprintf(of,"%s\n",PCL(pc)->label);
+  else if (PCL(pc)->key >=0) 
+    fprintf(of,"_%05d_DS_:\n",PCL(pc)->key);
+  else
+    fprintf(of,";wild card label: id=%d\n",-PCL(pc)->key);
+  
 }
 /*-----------------------------------------------------------------*/
 /* unlinkpCodeFromBranch - Search for a label in a pBranch and     */
@@ -3254,63 +3265,63 @@ static void pCodePrintLabel(FILE *of, pCode *pc)
 /*-----------------------------------------------------------------*/
 static void unlinkpCodeFromBranch(pCode *pcl , pCode *pc)
 {
-       pBranch *b, *bprev;
-       
-       
-       bprev = NULL;
-       
-       if(pcl->type == PC_OPCODE)
-               b = PCI(pcl)->label;
-       else {
-               fprintf(stderr, "LINE %d. can't unlink from non opcode\n",__LINE__);
-               exit(1);
-               
-       }
-       
-       //fprintf (stderr, "%s \n",__FUNCTION__);
-       //pcl->print(stderr,pcl);
-       //pc->print(stderr,pc);
-       while(b) {
-               if(b->pc == pc) {
-                       //fprintf (stderr, "found label\n");
-                       
-                       /* Found a label */
-                       if(bprev) {
-                               bprev->next = b->next;  /* Not first pCode in chain */
-                               free(b);
-                       } else {
-                               pc->destruct(pc);
-                               PCI(pcl)->label = b->next;   /* First pCode in chain */
-                               free(b);
-                       }
-                       return;  /* A label can't occur more than once */
-               }
-               bprev = b;
-               b = b->next;
-       }
-       
+  pBranch *b, *bprev;
+  
+  
+  bprev = NULL;
+  
+  if(pcl->type == PC_OPCODE)
+    b = PCI(pcl)->label;
+  else {
+    fprintf(stderr, "LINE %d. can't unlink from non opcode\n",__LINE__);
+    exit(1);
+    
+  }
+  
+  //fprintf (stderr, "%s \n",__FUNCTION__);
+  //pcl->print(stderr,pcl);
+  //pc->print(stderr,pc);
+  while(b) {
+    if(b->pc == pc) {
+      //fprintf (stderr, "found label\n");
+      
+      /* Found a label */
+      if(bprev) {
+        bprev->next = b->next;  /* Not first pCode in chain */
+        free(b);
+      } else {
+        pc->destruct(pc);
+        PCI(pcl)->label = b->next;   /* First pCode in chain */
+        free(b);
+      }
+      return;  /* A label can't occur more than once */
+    }
+    bprev = b;
+    b = b->next;
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 pBranch * pBranchAppend(pBranch *h, pBranch *n)
 {
-       pBranch *b;
-       
-       if(!h)
-               return n;
-       
-       if(h == n)
-               return n;
-       
-       b = h;
-       while(b->next)
-               b = b->next;
-       
-       b->next = n;
-       
-       return h;
-       
+  pBranch *b;
+  
+  if(!h)
+    return n;
+  
+  if(h == n)
+    return n;
+  
+  b = h;
+  while(b->next)
+    b = b->next;
+  
+  b->next = n;
+  
+  return h;
+  
 }  
 /*-----------------------------------------------------------------*/
 /* pBranchLink - given two pcodes, this function will link them    */
@@ -3318,26 +3329,26 @@ pBranch * pBranchAppend(pBranch *h, pBranch *n)
 /*-----------------------------------------------------------------*/
 static void pBranchLink(pCodeFunction *f, pCodeFunction *t)
 {
-       pBranch *b;
-       
-       // Declare a new branch object for the 'from' pCode.
-       
-       //_ALLOC(b,sizeof(pBranch));
-       b = Safe_calloc(1,sizeof(pBranch));
-       b->pc = PCODE(t);             // The link to the 'to' pCode.
-       b->next = NULL;
-       
-       f->to = pBranchAppend(f->to,b);
-       
-       // Now do the same for the 'to' pCode.
-       
-       //_ALLOC(b,sizeof(pBranch));
-       b = Safe_calloc(1,sizeof(pBranch));
-       b->pc = PCODE(f);
-       b->next = NULL;
-       
-       t->from = pBranchAppend(t->from,b);
-       
+  pBranch *b;
+  
+  // Declare a new branch object for the 'from' pCode.
+  
+  //_ALLOC(b,sizeof(pBranch));
+  b = Safe_calloc(1,sizeof(pBranch));
+  b->pc = PCODE(t);             // The link to the 'to' pCode.
+  b->next = NULL;
+  
+  f->to = pBranchAppend(f->to,b);
+  
+  // Now do the same for the 'to' pCode.
+  
+  //_ALLOC(b,sizeof(pBranch));
+  b = Safe_calloc(1,sizeof(pBranch));
+  b->pc = PCODE(f);
+  b->next = NULL;
+  
+  t->from = pBranchAppend(t->from,b);
+  
 }
 
 #if 0
@@ -3347,15 +3358,15 @@ static void pBranchLink(pCodeFunction *f, pCodeFunction *t)
 /*-----------------------------------------------------------------*/
 static pBranch *pBranchFind(pBranch *pb,pCode *pc)
 {
-       while(pb) {
-               
-               if(pb->pc == pc)
-                       return pb;
-               
-               pb = pb->next;
-       }
-       
-       return NULL;
+  while(pb) {
+    
+    if(pb->pc == pc)
+      return pb;
+    
+    pb = pb->next;
+  }
+  
+  return NULL;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3363,43 +3374,43 @@ static pBranch *pBranchFind(pBranch *pb,pCode *pc)
 /*-----------------------------------------------------------------*/
 static void pCodeUnlink(pCode *pc)
 {
-       pBranch *pb1,*pb2;
-       pCode *pc1;
-       
-       if(!pc->prev || !pc->next) {
-               fprintf(stderr,"unlinking bad pCode in %s:%d\n",__FILE__,__LINE__);
-               exit(1);
-       }
-       
-       /* first remove the pCode from the chain */
-       pc->prev->next = pc->next;
-       pc->next->prev = pc->prev;
-       
-       /* Now for the hard part... */
-       
-       /* Remove the branches */
-       
-       pb1 = pc->from;
-       while(pb1) {
-       pc1 = pb1->pc;    /* Get the pCode that branches to the
-       * one we're unlinking */
-       
-       /* search for the link back to this pCode (the one we're
-       * unlinking) */
-       if(pb2 = pBranchFind(pc1->to,pc)) {
-               pb2->pc = pc->to->pc;  // make the replacement
-               
-                                                          /* if the pCode we're unlinking contains multiple 'to'
-                                                          * branches (e.g. this a skip instruction) then we need
-               * to copy these extra branches to the chain. */
-               if(pc->to->next)
-                       pBranchAppend(pb2, pc->to->next);
-       }
-
-       pb1 = pb1->next;
-       }
-       
-       
+  pBranch *pb1,*pb2;
+  pCode *pc1;
+  
+  if(!pc->prev || !pc->next) {
+    fprintf(stderr,"unlinking bad pCode in %s:%d\n",__FILE__,__LINE__);
+    exit(1);
+  }
+  
+  /* first remove the pCode from the chain */
+  pc->prev->next = pc->next;
+  pc->next->prev = pc->prev;
+  
+  /* Now for the hard part... */
+  
+  /* Remove the branches */
+  
+  pb1 = pc->from;
+  while(pb1) {
+  pc1 = pb1->pc;    /* Get the pCode that branches to the
+  * one we're unlinking */
+  
+  /* search for the link back to this pCode (the one we're
+  * unlinking) */
+  if(pb2 = pBranchFind(pc1->to,pc)) {
+    pb2->pc = pc->to->pc;  // make the replacement
+    
+                 /* if the pCode we're unlinking contains multiple 'to'
+                 * branches (e.g. this a skip instruction) then we need
+    * to copy these extra branches to the chain. */
+    if(pc->to->next)
+      pBranchAppend(pb2, pc->to->next);
+  }
+
+  pb1 = pb1->next;
+  }
+  
+  
 }
 #endif
 /*-----------------------------------------------------------------*/
@@ -3407,40 +3418,40 @@ static void pCodeUnlink(pCode *pc)
 #if 0
 static void genericAnalyze(pCode *pc)
 {
-       switch(pc->type) {
-       case PC_WILD:
-       case PC_COMMENT:
-               return;
-       case PC_LABEL:
-       case PC_FUNCTION:
-       case PC_OPCODE:
-               {
-                       // Go through the pCodes that are in pCode chain and link
-                       // them together through the pBranches. Note, the pCodes
-                       // are linked together as a contiguous stream like the 
-                       // assembly source code lines. The linking here mimics this
-                       // except that comments are not linked in.
-                       // 
-                       pCode *npc = pc->next;
-                       while(npc) {
-                               if(npc->type == PC_OPCODE || npc->type == PC_LABEL) {
-                                       pBranchLink(pc,npc);
-                                       return;
-                               } else
-                                       npc = npc->next;
-                       }
-                       /* reached the end of the pcode chain without finding
-                       * an instruction we could link to. */
-               }
-               break;
-       case PC_FLOW:
-               fprintf(stderr,"analyze PC_FLOW\n");
-               
-               return;
-       case PC_BAD:
-               fprintf(stderr,";A bad pCode is being used\n");
-               
-       }
+  switch(pc->type) {
+  case PC_WILD:
+  case PC_COMMENT:
+    return;
+  case PC_LABEL:
+  case PC_FUNCTION:
+  case PC_OPCODE:
+    {
+      // Go through the pCodes that are in pCode chain and link
+      // them together through the pBranches. Note, the pCodes
+      // are linked together as a contiguous stream like the 
+      // assembly source code lines. The linking here mimics this
+      // except that comments are not linked in.
+      // 
+      pCode *npc = pc->next;
+      while(npc) {
+        if(npc->type == PC_OPCODE || npc->type == PC_LABEL) {
+          pBranchLink(pc,npc);
+          return;
+        } else
+          npc = npc->next;
+      }
+      /* reached the end of the pcode chain without finding
+      * an instruction we could link to. */
+    }
+    break;
+  case PC_FLOW:
+    fprintf(stderr,"analyze PC_FLOW\n");
+    
+    return;
+  case PC_BAD:
+    fprintf(stderr,";A bad pCode is being used\n");
+    
+  }
 }
 #endif
 
@@ -3448,43 +3459,43 @@ static void genericAnalyze(pCode *pc)
 /*-----------------------------------------------------------------*/
 int compareLabel(pCode *pc, pCodeOpLabel *pcop_label)
 {
-       pBranch *pbr;
-       
-       if(pc->type == PC_LABEL) {
-               if( ((pCodeLabel *)pc)->key ==  pcop_label->key)
-                       return TRUE;
-       }
-       if(pc->type == PC_OPCODE) {
-               pbr = PCI(pc)->label;
-               while(pbr) {
-                       if(pbr->pc->type == PC_LABEL) {
-                               if( ((pCodeLabel *)(pbr->pc))->key ==  pcop_label->key)
-                                       return TRUE;
-                       }
-                       pbr = pbr->next;
-               }
-       }
-       
-       return FALSE;
+  pBranch *pbr;
+  
+  if(pc->type == PC_LABEL) {
+    if( ((pCodeLabel *)pc)->key ==  pcop_label->key)
+      return TRUE;
+  }
+  if(pc->type == PC_OPCODE) {
+    pbr = PCI(pc)->label;
+    while(pbr) {
+      if(pbr->pc->type == PC_LABEL) {
+        if( ((pCodeLabel *)(pbr->pc))->key ==  pcop_label->key)
+          return TRUE;
+      }
+      pbr = pbr->next;
+    }
+  }
+  
+  return FALSE;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 int checkLabel(pCode *pc)
 {
-       pBranch *pbr;
-       
-       if(pc && isPCI(pc)) {
-               pbr = PCI(pc)->label;
-               while(pbr) {
-                       if(isPCL(pbr->pc) && (PCL(pbr->pc)->key >= 0))
-                               return TRUE;
-                       
-                       pbr = pbr->next;
-               }
-       }
-       
-       return FALSE;
+  pBranch *pbr;
+  
+  if(pc && isPCI(pc)) {
+    pbr = PCI(pc)->label;
+    while(pbr) {
+      if(isPCL(pbr->pc) && (PCL(pbr->pc)->key >= 0))
+        return TRUE;
+      
+      pbr = pbr->next;
+    }
+  }
+  
+  return FALSE;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3492,16 +3503,16 @@ int checkLabel(pCode *pc)
 /*-----------------------------------------------------------------*/
 pCode * findLabelinpBlock(pBlock *pb,pCodeOpLabel *pcop_label)
 {
-       pCode  *pc;
-       
-       if(!pb)
-               return NULL;
-       
-       for(pc = pb->pcHead; pc; pc = pc->next) 
-               if(compareLabel(pc,pcop_label))
-                       return pc;
-               
-               return NULL;
+  pCode  *pc;
+  
+  if(!pb)
+    return NULL;
+  
+  for(pc = pb->pcHead; pc; pc = pc->next) 
+    if(compareLabel(pc,pcop_label))
+      return pc;
+    
+    return NULL;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3509,19 +3520,19 @@ pCode * findLabelinpBlock(pBlock *pb,pCodeOpLabel *pcop_label)
 /*-----------------------------------------------------------------*/
 pCode * findLabel(pCodeOpLabel *pcop_label)
 {
-       pBlock *pb;
-       pCode  *pc;
-       
-       if(!the_pFile)
-               return NULL;
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               if( (pc = findLabelinpBlock(pb,pcop_label)) != NULL)
-                       return pc;
-       }
-       
-       fprintf(stderr,"Couldn't find label %s", pcop_label->pcop.name);
-       return NULL;
+  pBlock *pb;
+  pCode  *pc;
+  
+  if(!the_pFile)
+    return NULL;
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    if( (pc = findLabelinpBlock(pb,pcop_label)) != NULL)
+      return pc;
+  }
+  
+  fprintf(stderr,"Couldn't find label %s", pcop_label->pcop.name);
+  return NULL;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3530,15 +3541,15 @@ pCode * findLabel(pCodeOpLabel *pcop_label)
 /*-----------------------------------------------------------------*/
 pCode * findNextpCode(pCode *pc, PC_TYPE pct)
 {
-       
-       while(pc) {
-               if(pc->type == pct)
-                       return pc;
-               
-               pc = pc->next;
-       }
-       
-       return NULL;
+  
+  while(pc) {
+    if(pc->type == pct)
+      return pc;
+    
+    pc = pc->next;
+  }
+  
+  return NULL;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3547,15 +3558,15 @@ pCode * findNextpCode(pCode *pc, PC_TYPE pct)
 /*-----------------------------------------------------------------*/
 pCode * findPrevpCode(pCode *pc, PC_TYPE pct)
 {
-       
-       while(pc) {
-               if(pc->type == pct)
-                       return pc;
-               
-               pc = pc->prev;
-       }
-       
-       return NULL;
+  
+  while(pc) {
+    if(pc->type == pct)
+      return pc;
+    
+    pc = pc->prev;
+  }
+  
+  return NULL;
 }
 /*-----------------------------------------------------------------*/
 /* findNextInstruction - given a pCode, find the next instruction  */
@@ -3563,21 +3574,21 @@ pCode * findPrevpCode(pCode *pc, PC_TYPE pct)
 /*-----------------------------------------------------------------*/
 pCode * findNextInstruction(pCode *pci)
 {
-       pCode *pc = pci;
-       
-       while(pc) {
-               if((pc->type == PC_OPCODE) || (pc->type == PC_WILD))
-                       return pc;
-               
+  pCode *pc = pci;
+  
+  while(pc) {
+    if((pc->type == PC_OPCODE) || (pc->type == PC_WILD))
+      return pc;
+    
 #ifdef PCODE_DEBUG
-               fprintf(stderr,"findNextInstruction:  ");
-               printpCode(stderr, pc);
+    fprintf(stderr,"findNextInstruction:  ");
+    printpCode(stderr, pc);
 #endif
-               pc = pc->next;
-       }
-       
-       //fprintf(stderr,"Couldn't find instruction\n");
-       return NULL;
+    pc = pc->next;
+  }
+  
+  //fprintf(stderr,"Couldn't find instruction\n");
+  return NULL;
 }
 
 /*-----------------------------------------------------------------*/
@@ -3586,7 +3597,7 @@ pCode * findNextInstruction(pCode *pci)
 /*-----------------------------------------------------------------*/
 pCode * findPrevInstruction(pCode *pci)
 {
-       return findPrevpCode(pci, PC_OPCODE);
+  return findPrevpCode(pci, PC_OPCODE);
 }
 
 /*-----------------------------------------------------------------*/
@@ -3595,16 +3606,16 @@ pCode * findPrevInstruction(pCode *pci)
 /*-----------------------------------------------------------------*/
 pCode * findFunctionEnd(pCode *pc)
 {
-       
-       while(pc) {
-               if(pc->type == PC_FUNCTION &&  !(PCF(pc)->fname))
-                       return pc;
-               
-               pc = pc->next;
-       }
-       
-       fprintf(stderr,"Couldn't find function end\n");
-       return NULL;
+  
+  while(pc) {
+    if(pc->type == PC_FUNCTION &&  !(PCF(pc)->fname))
+      return pc;
+    
+    pc = pc->next;
+  }
+  
+  fprintf(stderr,"Couldn't find function end\n");
+  return NULL;
 }
 
 #if 0
@@ -3614,33 +3625,33 @@ pCode * findFunctionEnd(pCode *pc)
 /*-----------------------------------------------------------------*/
 static void AnalyzeLabel(pCode *pc)
 {
-       
-       pCodeUnlink(pc);
-       
+  
+  pCodeUnlink(pc);
+  
 }
 #endif
 
 #if 0
 static void AnalyzeGOTO(pCode *pc)
 {
-       
-       pBranchLink(pc,findLabel( (pCodeOpLabel *) (PCI(pc)->pcop) ));
-       
+  
+  pBranchLink(pc,findLabel( (pCodeOpLabel *) (PCI(pc)->pcop) ));
+  
 }
 
 static void AnalyzeSKIP(pCode *pc)
 {
-       
-       pBranchLink(pc,findNextInstruction(pc->next));
-       pBranchLink(pc,findNextInstruction(pc->next->next));
-       
+  
+  pBranchLink(pc,findNextInstruction(pc->next));
+  pBranchLink(pc,findNextInstruction(pc->next->next));
+  
 }
 
 static void AnalyzeRETURN(pCode *pc)
 {
-       
-       //  branch_link(pc,findFunctionEnd(pc->next));
-       
+  
+  //  branch_link(pc,findFunctionEnd(pc->next));
+  
 }
 
 #endif
@@ -3649,52 +3660,52 @@ static void AnalyzeRETURN(pCode *pc)
 /*-----------------------------------------------------------------*/
 regs * getRegFromInstruction(pCode *pc)
 {
-       
-       if(!pc                   || 
-               !isPCI(pc)            ||
-               !PCI(pc)->pcop        ||
-               PCI(pc)->num_ops == 0 )
-               return NULL;
-       
-       switch(PCI(pc)->pcop->type) {
-       case PO_INDF:
-       case PO_FSR:
-               return PCOR(PCI(pc)->pcop)->r;
-               
-               //    return typeRegWithIdx (PCOR(PCI(pc)->pcop)->rIdx, REG_SFR, 0);
-               
-       case PO_BIT:
-       case PO_GPR_TEMP:
-               //fprintf(stderr, "getRegFromInstruction - bit or temp\n");
-               return PCOR(PCI(pc)->pcop)->r;
-               
-       case PO_IMMEDIATE:
-               if(PCOI(PCI(pc)->pcop)->r)
-                       return (PCOI(PCI(pc)->pcop)->r);
-               
-               //fprintf(stderr, "getRegFromInstruction - immediate\n");
-               return dirregWithName(PCI(pc)->pcop->name);
-               //return NULL; // PCOR(PCI(pc)->pcop)->r;
-               
-       case PO_GPR_BIT:
-               return PCOR(PCI(pc)->pcop)->r;
-               
-       case PO_GPR_REGISTER:
-       case PO_DIR:
-               //fprintf(stderr, "getRegFromInstruction - dir\n");
-               return PCOR(PCI(pc)->pcop)->r;
-       case PO_LITERAL:
-               //fprintf(stderr, "getRegFromInstruction - literal\n");
-               break;
-               
-       default:
-               //fprintf(stderr, "getRegFromInstruction - unknown reg type %d\n",PCI(pc)->pcop->type);
-               //genericPrint(stderr, pc);
-               break;
-       }
-       
-       return NULL;
-       
+  
+  if(!pc                   || 
+    !isPCI(pc)            ||
+    !PCI(pc)->pcop        ||
+    PCI(pc)->num_ops == 0 )
+    return NULL;
+  
+  switch(PCI(pc)->pcop->type) {
+  case PO_INDF:
+  case PO_FSR:
+    return PCOR(PCI(pc)->pcop)->r;
+    
+    //    return typeRegWithIdx (PCOR(PCI(pc)->pcop)->rIdx, REG_SFR, 0);
+    
+  case PO_BIT:
+  case PO_GPR_TEMP:
+    //fprintf(stderr, "getRegFromInstruction - bit or temp\n");
+    return PCOR(PCI(pc)->pcop)->r;
+    
+  case PO_IMMEDIATE:
+    if(PCOI(PCI(pc)->pcop)->r)
+      return (PCOI(PCI(pc)->pcop)->r);
+    
+    //fprintf(stderr, "getRegFromInstruction - immediate\n");
+    return dirregWithName(PCI(pc)->pcop->name);
+    //return NULL; // PCOR(PCI(pc)->pcop)->r;
+    
+  case PO_GPR_BIT:
+    return PCOR(PCI(pc)->pcop)->r;
+    
+  case PO_GPR_REGISTER:
+  case PO_DIR:
+    //fprintf(stderr, "getRegFromInstruction - dir\n");
+    return PCOR(PCI(pc)->pcop)->r;
+  case PO_LITERAL:
+    //fprintf(stderr, "getRegFromInstruction - literal\n");
+    break;
+    
+  default:
+    //fprintf(stderr, "getRegFromInstruction - unknown reg type %d\n",PCI(pc)->pcop->type);
+    //genericPrint(stderr, pc);
+    break;
+  }
+  
+  return NULL;
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -3702,63 +3713,63 @@ regs * getRegFromInstruction(pCode *pc)
 
 void AnalyzepBlock(pBlock *pb)
 {
-       pCode *pc;
-       
-       if(!pb)
-               return;
-       
-               /* Find all of the registers used in this pBlock 
-               * by looking at each instruction and examining it's
-               * operands
-       */
-       for(pc = pb->pcHead; pc; pc = pc->next) {
-               
-               /* Is this an instruction with operands? */
-               if(pc->type == PC_OPCODE && PCI(pc)->pcop) {
-                       
-                       if((PCI(pc)->pcop->type == PO_GPR_TEMP) 
-                               || ((PCI(pc)->pcop->type == PO_GPR_BIT) && PCOR(PCI(pc)->pcop)->r && (PCOR(PCI(pc)->pcop)->r->pc_type == PO_GPR_TEMP))) {
-                               
-                               /* Loop through all of the registers declared so far in
-                               this block and see if we find this one there */
-                               
-                               regs *r = setFirstItem(pb->tregisters);
-                               
-                               while(r) {
-                                       if((r->rIdx == PCOR(PCI(pc)->pcop)->r->rIdx) && (r->type == PCOR(PCI(pc)->pcop)->r->type)) {
-                                               PCOR(PCI(pc)->pcop)->r = r;
-                                               break;
-                                       }
-                                       r = setNextItem(pb->tregisters);
-                               }
-                               
-                               if(!r) {
-                                       /* register wasn't found */
-                                       //r = Safe_calloc(1, sizeof(regs));
-                                       //memcpy(r,PCOR(PCI(pc)->pcop)->r, sizeof(regs));
-                                       //addSet(&pb->tregisters, r);
-                                       addSet(&pb->tregisters, PCOR(PCI(pc)->pcop)->r);
-                                       //PCOR(PCI(pc)->pcop)->r = r;
-                                       //fprintf(stderr,"added register to pblock: reg %d\n",r->rIdx);
-                                       }/* else 
-                                        fprintf(stderr,"found register in pblock: reg %d\n",r->rIdx);
-                               */
-                       }
-                       if(PCI(pc)->pcop->type == PO_GPR_REGISTER) {
-                               if(PCOR(PCI(pc)->pcop)->r) {
-                                       pic14_allocWithIdx (PCOR(PCI(pc)->pcop)->r->rIdx);
-                                       DFPRINTF((stderr,"found register in pblock: reg 0x%x\n",PCOR(PCI(pc)->pcop)->r->rIdx));
-                               } else {
-                                       if(PCI(pc)->pcop->name)
-                                               fprintf(stderr,"ERROR: %s is a NULL register\n",PCI(pc)->pcop->name );
-                                       else
-                                               fprintf(stderr,"ERROR: NULL register\n");
-                               }
-                       }
-               }
-               
-               
-       }
+  pCode *pc;
+  
+  if(!pb)
+    return;
+  
+    /* Find all of the registers used in this pBlock 
+    * by looking at each instruction and examining it's
+    * operands
+  */
+  for(pc = pb->pcHead; pc; pc = pc->next) {
+    
+    /* Is this an instruction with operands? */
+    if(pc->type == PC_OPCODE && PCI(pc)->pcop) {
+      
+      if((PCI(pc)->pcop->type == PO_GPR_TEMP) 
+        || ((PCI(pc)->pcop->type == PO_GPR_BIT) && PCOR(PCI(pc)->pcop)->r && (PCOR(PCI(pc)->pcop)->r->pc_type == PO_GPR_TEMP))) {
+        
+        /* Loop through all of the registers declared so far in
+        this block and see if we find this one there */
+        
+        regs *r = setFirstItem(pb->tregisters);
+        
+        while(r) {
+          if((r->rIdx == PCOR(PCI(pc)->pcop)->r->rIdx) && (r->type == PCOR(PCI(pc)->pcop)->r->type)) {
+            PCOR(PCI(pc)->pcop)->r = r;
+            break;
+          }
+          r = setNextItem(pb->tregisters);
+        }
+        
+        if(!r) {
+          /* register wasn't found */
+          //r = Safe_calloc(1, sizeof(regs));
+          //memcpy(r,PCOR(PCI(pc)->pcop)->r, sizeof(regs));
+          //addSet(&pb->tregisters, r);
+          addSet(&pb->tregisters, PCOR(PCI(pc)->pcop)->r);
+          //PCOR(PCI(pc)->pcop)->r = r;
+          //fprintf(stderr,"added register to pblock: reg %d\n",r->rIdx);
+          }/* else 
+           fprintf(stderr,"found register in pblock: reg %d\n",r->rIdx);
+        */
+      }
+      if(PCI(pc)->pcop->type == PO_GPR_REGISTER) {
+        if(PCOR(PCI(pc)->pcop)->r) {
+          pic14_allocWithIdx (PCOR(PCI(pc)->pcop)->r->rIdx);
+          DFPRINTF((stderr,"found register in pblock: reg 0x%x\n",PCOR(PCI(pc)->pcop)->r->rIdx));
+        } else {
+          if(PCI(pc)->pcop->name)
+            fprintf(stderr,"ERROR: %s is a NULL register\n",PCI(pc)->pcop->name );
+          else
+            fprintf(stderr,"ERROR: NULL register\n");
+        }
+      }
+    }
+    
+    
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -3766,14 +3777,14 @@ void AnalyzepBlock(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void InsertpFlow(pCode *pc, pCode **pflow)
 {
-       if(*pflow)
-               PCFL(*pflow)->end = pc;
-       
-       if(!pc || !pc->next)
-               return;
-       
-       *pflow = newpCodeFlow();
-       pCodeInsertAfter(pc, *pflow);
+  if(*pflow)
+    PCFL(*pflow)->end = pc;
+  
+  if(!pc || !pc->next)
+    return;
+  
+  *pflow = newpCodeFlow();
+  pCodeInsertAfter(pc, *pflow);
 }
 
 /*-----------------------------------------------------------------*/
@@ -3786,91 +3797,91 @@ void InsertpFlow(pCode *pc, pCode **pflow)
 /*-----------------------------------------------------------------*/
 void BuildFlow(pBlock *pb)
 {
-       pCode *pc;
-       pCode *last_pci=NULL;
-       pCode *pflow=NULL;
-       int seq = 0;
-       
-       if(!pb)
-               return;
-       
-       //fprintf (stderr,"build flow start seq %d  ",GpcFlowSeq);
-       /* Insert a pCodeFlow object at the beginning of a pBlock */
-       
-       InsertpFlow(pb->pcHead, &pflow);
-       
-       //pflow = newpCodeFlow();    /* Create a new Flow object */
-       //pflow->next = pb->pcHead;  /* Make the current head the next object */
-       //pb->pcHead->prev = pflow;  /* let the current head point back to the flow object */
-       //pb->pcHead = pflow;        /* Make the Flow object the head */
-       //pflow->pb = pb;
-       
-       for( pc = findNextInstruction(pb->pcHead);
-       pc != NULL;
-       pc=findNextInstruction(pc)) { 
-               
-               pc->seq = seq++;
-               PCI(pc)->pcflow = PCFL(pflow);
-               
-               //fprintf(stderr," build: ");
-               //pflow->print(stderr,pflow);
-               
-               if( PCI(pc)->isSkip) {
-                       
-               /* The two instructions immediately following this one 
-                       * mark the beginning of a new flow segment */
-                       
-                       while(pc && PCI(pc)->isSkip) {
-                               
-                               PCI(pc)->pcflow = PCFL(pflow);
-                               pc->seq = seq-1;
-                               seq = 1;
-                               
-                               InsertpFlow(pc, &pflow);
-                               pc=findNextInstruction(pc->next);
-                       }
-                       
-                       seq = 0;
-                       
-                       if(!pc)
-                               break;
-                       
-                       PCI(pc)->pcflow = PCFL(pflow);
-                       pc->seq = 0;
-                       InsertpFlow(pc, &pflow);
-                       
-               } else if ( PCI(pc)->isBranch && !checkLabel(findNextInstruction(pc->next)))  {
-                       
-                       InsertpFlow(pc, &pflow);
-                       seq = 0;
-                       
-               } else if (checkLabel(pc)) { 
-                       
-               /* This instruction marks the beginning of a
-                       * new flow segment */
-                       
-                       pc->seq = 0;
-                       seq = 1;
-                       
-                       /* If the previous pCode is not a flow object, then 
-                       * insert a new flow object. (This check prevents 
-                       * two consecutive flow objects from being insert in
-                       * the case where a skip instruction preceeds an
-                       * instruction containing a label.) */
-                       
-                       if(last_pci && (PCI(last_pci)->pcflow == PCFL(pflow)))
-                               InsertpFlow(findPrevInstruction(pc->prev), &pflow);
-                       
-                       PCI(pc)->pcflow = PCFL(pflow);
-                       
-               }
-               last_pci = pc;
-               pc = pc->next;
-       }
-       
-       //fprintf (stderr,",end seq %d",GpcFlowSeq);
-       if(pflow)
-               PCFL(pflow)->end = pb->pcTail;
+  pCode *pc;
+  pCode *last_pci=NULL;
+  pCode *pflow=NULL;
+  int seq = 0;
+  
+  if(!pb)
+    return;
+  
+  //fprintf (stderr,"build flow start seq %d  ",GpcFlowSeq);
+  /* Insert a pCodeFlow object at the beginning of a pBlock */
+  
+  InsertpFlow(pb->pcHead, &pflow);
+  
+  //pflow = newpCodeFlow();    /* Create a new Flow object */
+  //pflow->next = pb->pcHead;  /* Make the current head the next object */
+  //pb->pcHead->prev = pflow;  /* let the current head point back to the flow object */
+  //pb->pcHead = pflow;        /* Make the Flow object the head */
+  //pflow->pb = pb;
+  
+  for( pc = findNextInstruction(pb->pcHead);
+  pc != NULL;
+  pc=findNextInstruction(pc)) { 
+    
+    pc->seq = seq++;
+    PCI(pc)->pcflow = PCFL(pflow);
+    
+    //fprintf(stderr," build: ");
+    //pflow->print(stderr,pflow);
+    
+    if( PCI(pc)->isSkip) {
+      
+    /* The two instructions immediately following this one 
+      * mark the beginning of a new flow segment */
+      
+      while(pc && PCI(pc)->isSkip) {
+        
+        PCI(pc)->pcflow = PCFL(pflow);
+        pc->seq = seq-1;
+        seq = 1;
+        
+        InsertpFlow(pc, &pflow);
+        pc=findNextInstruction(pc->next);
+      }
+      
+      seq = 0;
+      
+      if(!pc)
+        break;
+      
+      PCI(pc)->pcflow = PCFL(pflow);
+      pc->seq = 0;
+      InsertpFlow(pc, &pflow);
+      
+    } else if ( PCI(pc)->isBranch && !checkLabel(findNextInstruction(pc->next)))  {
+      
+      InsertpFlow(pc, &pflow);
+      seq = 0;
+      
+    } else if (checkLabel(pc)) { 
+      
+    /* This instruction marks the beginning of a
+      * new flow segment */
+      
+      pc->seq = 0;
+      seq = 1;
+      
+      /* If the previous pCode is not a flow object, then 
+      * insert a new flow object. (This check prevents 
+      * two consecutive flow objects from being insert in
+      * the case where a skip instruction preceeds an
+      * instruction containing a label.) */
+      
+      if(last_pci && (PCI(last_pci)->pcflow == PCFL(pflow)))
+        InsertpFlow(findPrevInstruction(pc->prev), &pflow);
+      
+      PCI(pc)->pcflow = PCFL(pflow);
+      
+    }
+    last_pci = pc;
+    pc = pc->next;
+  }
+  
+  //fprintf (stderr,",end seq %d",GpcFlowSeq);
+  if(pflow)
+    PCFL(pflow)->end = pb->pcTail;
 }
 
 /*-------------------------------------------------------------------*/
@@ -3882,88 +3893,88 @@ void BuildFlow(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void unBuildFlow(pBlock *pb)
 {
-       pCode *pc,*pcnext;
-       
-       if(!pb)
-               return;
-       
-       pc = pb->pcHead;
-       
-       while(pc) {
-               pcnext = pc->next;
-               
-               if(isPCI(pc)) {
-                       
-                       pc->seq = 0;
-                       if(PCI(pc)->pcflow) {
-                               //free(PCI(pc)->pcflow);
-                               PCI(pc)->pcflow = NULL;
-                       }
-                       
-               } else if(isPCFL(pc) )
-                       pc->destruct(pc);
-               
-               pc = pcnext;
-       }
-       
-       
+  pCode *pc,*pcnext;
+  
+  if(!pb)
+    return;
+  
+  pc = pb->pcHead;
+  
+  while(pc) {
+    pcnext = pc->next;
+    
+    if(isPCI(pc)) {
+      
+      pc->seq = 0;
+      if(PCI(pc)->pcflow) {
+        //free(PCI(pc)->pcflow);
+        PCI(pc)->pcflow = NULL;
+      }
+      
+    } else if(isPCFL(pc) )
+      pc->destruct(pc);
+    
+    pc = pcnext;
+  }
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void dumpCond(int cond)
 {
-       
-       static char *pcc_str[] = {
-               //"PCC_NONE",
-               "PCC_REGISTER",
-                       "PCC_C",
-                       "PCC_Z",
-                       "PCC_DC",
-                       "PCC_W",
-                       "PCC_EXAMINE_PCOP",
-                       "PCC_REG_BANK0",
-                       "PCC_REG_BANK1",
-                       "PCC_REG_BANK2",
-                       "PCC_REG_BANK3"
-       };
-       
-       int ncond = sizeof(pcc_str) / sizeof(char *);
-       int i,j;
-       
-       fprintf(stderr, "0x%04X\n",cond);
-       
-       for(i=0,j=1; i<ncond; i++, j<<=1)
-               if(cond & j)
-                       fprintf(stderr, "  %s\n",pcc_str[i]);
-               
+  
+  static char *pcc_str[] = {
+    //"PCC_NONE",
+    "PCC_REGISTER",
+      "PCC_C",
+      "PCC_Z",
+      "PCC_DC",
+      "PCC_W",
+      "PCC_EXAMINE_PCOP",
+      "PCC_REG_BANK0",
+      "PCC_REG_BANK1",
+      "PCC_REG_BANK2",
+      "PCC_REG_BANK3"
+  };
+  
+  int ncond = sizeof(pcc_str) / sizeof(char *);
+  int i,j;
+  
+  fprintf(stderr, "0x%04X\n",cond);
+  
+  for(i=0,j=1; i<ncond; i++, j<<=1)
+    if(cond & j)
+      fprintf(stderr, "  %s\n",pcc_str[i]);
+    
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void FlowStats(pCodeFlow *pcflow)
 {
-       
-       pCode *pc;
-       
-       if(!isPCFL(pcflow))
-               return;
-       
-       fprintf(stderr, " FlowStats - flow block (seq=%d)\n", pcflow->pc.seq);
-       
-       pc = findNextpCode(PCODE(pcflow), PC_OPCODE); 
-       
-       if(!pc) {
-               fprintf(stderr, " FlowStats - empty flow (seq=%d)\n", pcflow->pc.seq);
-               return;
-       }
-       
-       
-       fprintf(stderr, "  FlowStats inCond: ");
-       dumpCond(pcflow->inCond);
-       fprintf(stderr, "  FlowStats outCond: ");
-       dumpCond(pcflow->outCond);
-       
+  
+  pCode *pc;
+  
+  if(!isPCFL(pcflow))
+    return;
+  
+  fprintf(stderr, " FlowStats - flow block (seq=%d)\n", pcflow->pc.seq);
+  
+  pc = findNextpCode(PCODE(pcflow), PC_OPCODE); 
+  
+  if(!pc) {
+    fprintf(stderr, " FlowStats - empty flow (seq=%d)\n", pcflow->pc.seq);
+    return;
+  }
+  
+  
+  fprintf(stderr, "  FlowStats inCond: ");
+  dumpCond(pcflow->inCond);
+  fprintf(stderr, "  FlowStats outCond: ");
+  dumpCond(pcflow->outCond);
+  
 }
 
 /*-----------------------------------------------------------------*
@@ -3986,52 +3997,52 @@ void FlowStats(pCodeFlow *pcflow)
 
 static int isBankInstruction(pCode *pc)
 {
-       regs *reg;
-       int bank = -1;
-       
-       if(!isPCI(pc))
-               return -1;
-       
-       if( ( (reg = getRegFromInstruction(pc)) != NULL) && isSTATUS_REG(reg)) {
-               
-               // Check to see if the register banks are changing
-               if(PCI(pc)->isModReg) {
-                       
-                       pCodeOp *pcop = PCI(pc)->pcop;
-                       switch(PCI(pc)->op) {
-                               
-                       case POC_BSF:
-                               if(PCORB(pcop)->bit == PIC_RP0_BIT) {
-                                       //fprintf(stderr, "  isBankInstruction - Set RP0\n");
-                                       return  SET_BANK_BIT | PIC_RP0_BIT;
-                               }
-                               
-                               if(PCORB(pcop)->bit == PIC_RP1_BIT) {
-                                       //fprintf(stderr, "  isBankInstruction - Set RP1\n");
-                                       return  CLR_BANK_BIT | PIC_RP0_BIT;
-                               }
-                               break;
-                               
-                       case POC_BCF:
-                               if(PCORB(pcop)->bit == PIC_RP0_BIT) {
-                                       //fprintf(stderr, "  isBankInstruction - Clr RP0\n");
-                                       return  CLR_BANK_BIT | PIC_RP1_BIT;
-                               }
-                               if(PCORB(pcop)->bit == PIC_RP1_BIT) {
-                                       //fprintf(stderr, "  isBankInstruction - Clr RP1\n");
-                                       return  CLR_BANK_BIT | PIC_RP1_BIT;
-                               }
-                               break;
-                       default:
-                               //fprintf(stderr, "  isBankInstruction - Status register is getting Modified by:\n");
-                               //genericPrint(stderr, pc);
-                               ;
-                       }
-               }
-               
-       }
-       
-       return bank;
+  regs *reg;
+  int bank = -1;
+  
+  if(!isPCI(pc))
+    return -1;
+  
+  if( ( (reg = getRegFromInstruction(pc)) != NULL) && isSTATUS_REG(reg)) {
+    
+    // Check to see if the register banks are changing
+    if(PCI(pc)->isModReg) {
+      
+      pCodeOp *pcop = PCI(pc)->pcop;
+      switch(PCI(pc)->op) {
+        
+      case POC_BSF:
+        if(PCORB(pcop)->bit == PIC_RP0_BIT) {
+          //fprintf(stderr, "  isBankInstruction - Set RP0\n");
+          return  SET_BANK_BIT | PIC_RP0_BIT;
+        }
+        
+        if(PCORB(pcop)->bit == PIC_RP1_BIT) {
+          //fprintf(stderr, "  isBankInstruction - Set RP1\n");
+          return  CLR_BANK_BIT | PIC_RP0_BIT;
+        }
+        break;
+        
+      case POC_BCF:
+        if(PCORB(pcop)->bit == PIC_RP0_BIT) {
+          //fprintf(stderr, "  isBankInstruction - Clr RP0\n");
+          return  CLR_BANK_BIT | PIC_RP1_BIT;
+        }
+        if(PCORB(pcop)->bit == PIC_RP1_BIT) {
+          //fprintf(stderr, "  isBankInstruction - Clr RP1\n");
+          return  CLR_BANK_BIT | PIC_RP1_BIT;
+        }
+        break;
+      default:
+        //fprintf(stderr, "  isBankInstruction - Status register is getting Modified by:\n");
+        //genericPrint(stderr, pc);
+        ;
+      }
+    }
+    
+  }
+  
+  return bank;
 }
 */
 
@@ -4040,40 +4051,40 @@ static int isBankInstruction(pCode *pc)
 /*
 static void FillFlow(pCodeFlow *pcflow)
 {
-       pCode *pc;
-       int cur_bank;
-       
-       if(!isPCFL(pcflow))
-               return;
-       
-       //  fprintf(stderr, " FillFlow - flow block (seq=%d)\n", pcflow->pc.seq);
-       
-       pc = findNextpCode(PCODE(pcflow), PC_OPCODE); 
-       
-       if(!pc) {
-               //fprintf(stderr, " FillFlow - empty flow (seq=%d)\n", pcflow->pc.seq);
-               return;
-       }
-       
-       cur_bank = -1;
-
-       do {
-               isBankInstruction(pc);
-               pc = pc->next;
-       } while (pc && (pc != pcflow->end) && !isPCFL(pc));
-       / *
-       if(!pc ) {
-               fprintf(stderr, "  FillFlow - Bad end of flow\n");
-       } else {
-               fprintf(stderr, "  FillFlow - Ending flow with\n  ");
-               pc->print(stderr,pc);
-       }
-
-       fprintf(stderr, "  FillFlow inCond: ");
-       dumpCond(pcflow->inCond);
-       fprintf(stderr, "  FillFlow outCond: ");
-       dumpCond(pcflow->outCond);
-       * /
+  pCode *pc;
+  int cur_bank;
+  
+  if(!isPCFL(pcflow))
+    return;
+  
+  //  fprintf(stderr, " FillFlow - flow block (seq=%d)\n", pcflow->pc.seq);
+  
+  pc = findNextpCode(PCODE(pcflow), PC_OPCODE); 
+  
+  if(!pc) {
+    //fprintf(stderr, " FillFlow - empty flow (seq=%d)\n", pcflow->pc.seq);
+    return;
+  }
+  
+  cur_bank = -1;
+
+  do {
+    isBankInstruction(pc);
+    pc = pc->next;
+  } while (pc && (pc != pcflow->end) && !isPCFL(pc));
+  / *
+  if(!pc ) {
+    fprintf(stderr, "  FillFlow - Bad end of flow\n");
+  } else {
+    fprintf(stderr, "  FillFlow - Ending flow with\n  ");
+    pc->print(stderr,pc);
+  }
+
+  fprintf(stderr, "  FillFlow inCond: ");
+  dumpCond(pcflow->inCond);
+  fprintf(stderr, "  FillFlow outCond: ");
+  dumpCond(pcflow->outCond);
+  * /
 }
 */
 
@@ -4081,17 +4092,17 @@ static void FillFlow(pCodeFlow *pcflow)
 /*-----------------------------------------------------------------*/
 void LinkFlow_pCode(pCodeInstruction *from, pCodeInstruction *to)
 {
-       pCodeFlowLink *fromLink, *toLink;
-       
-       if(!from || !to || !to->pcflow || !from->pcflow)
-               return;
-       
-       fromLink = newpCodeFlowLink(from->pcflow);
-       toLink   = newpCodeFlowLink(to->pcflow);
-       
-       addSetIfnotP(&(from->pcflow->to), toLink);   //to->pcflow);
-       addSetIfnotP(&(to->pcflow->from), fromLink); //from->pcflow);
-       
+  pCodeFlowLink *fromLink, *toLink;
+  
+  if(!from || !to || !to->pcflow || !from->pcflow)
+    return;
+  
+  fromLink = newpCodeFlowLink(from->pcflow);
+  toLink   = newpCodeFlowLink(to->pcflow);
+  
+  addSetIfnotP(&(from->pcflow->to), toLink);   //to->pcflow);
+  addSetIfnotP(&(to->pcflow->from), fromLink); //from->pcflow);
+  
 }
 
 /*-----------------------------------------------------------------*
@@ -4105,79 +4116,79 @@ void LinkFlow_pCode(pCodeInstruction *from, pCodeInstruction *to)
 *-----------------------------------------------------------------*/
 void LinkFlow(pBlock *pb)
 {
-       pCode *pc=NULL;
-       pCode *pcflow;
-       pCode *pct;
-       
-       //fprintf(stderr,"linkflow \n");
-       
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-       pcflow != NULL;
-       pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-               
-               if(!isPCFL(pcflow))
-                       fprintf(stderr, "LinkFlow - pcflow is not a flow object ");
-               
-               //fprintf(stderr," link: ");
-               //pcflow->print(stderr,pcflow);
-               
-               //FillFlow(PCFL(pcflow));
-               
-               pc = PCFL(pcflow)->end;
-               
-               //fprintf(stderr, "LinkFlow - flow block (seq=%d) ", pcflow->seq);
-               if(isPCI_SKIP(pc)) {
-                       //fprintf(stderr, "ends with skip\n");
-                       //pc->print(stderr,pc);
-                       pct=findNextInstruction(pc->next);
-                       LinkFlow_pCode(PCI(pc),PCI(pct));
-                       pct=findNextInstruction(pct->next);
-                       LinkFlow_pCode(PCI(pc),PCI(pct));
-                       continue;
-               }
-               
-               if(isPCI_BRANCH(pc)) {
-                       pCodeOpLabel *pcol = PCOLAB(PCI(pc)->pcop);
-                       
-                       //fprintf(stderr, "ends with branch\n  ");
-                       //pc->print(stderr,pc);
-                       
-                       if(!(pcol && isPCOLAB(pcol))) {
-                               if((PCI(pc)->op != POC_RETLW) && (PCI(pc)->op != POC_RETURN) && (PCI(pc)->op != POC_CALL) && (PCI(pc)->op != POC_RETFIE) ) {
-                                       pc->print(stderr,pc);
-                                       fprintf(stderr, "ERROR: %s, branch instruction doesn't have label\n",__FUNCTION__);
-                               }
-                               continue;
-                       }
-                       
-                       if( (pct = findLabelinpBlock(pb,pcol)) != NULL)
-                               LinkFlow_pCode(PCI(pc),PCI(pct));
-                       else
-                               fprintf(stderr, "ERROR: %s, couldn't find label. key=%d,lab=%s\n",
-                               __FUNCTION__,pcol->key,((PCOP(pcol)->name)?PCOP(pcol)->name:"-"));
-                       //fprintf(stderr,"newpCodeOpLabel: key=%d, name=%s\n",key,((s)?s:""));
-                       
-                       continue;
-               }
-               
-               if(isPCI(pc)) {
-                       //fprintf(stderr, "ends with non-branching instruction:\n");
-                       //pc->print(stderr,pc);
-                       
-                       LinkFlow_pCode(PCI(pc),PCI(findNextInstruction(pc->next)));
-                       
-                       continue;
-               }
-               
-               if(pc) {
-                       //fprintf(stderr, "ends with unknown\n");
-                       //pc->print(stderr,pc);
-                       continue;
-               }
-               
-               //fprintf(stderr, "ends with nothing: ERROR\n");
-               
-       }
+  pCode *pc=NULL;
+  pCode *pcflow;
+  pCode *pct;
+  
+  //fprintf(stderr,"linkflow \n");
+  
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+  pcflow != NULL;
+  pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+    
+    if(!isPCFL(pcflow))
+      fprintf(stderr, "LinkFlow - pcflow is not a flow object ");
+    
+    //fprintf(stderr," link: ");
+    //pcflow->print(stderr,pcflow);
+    
+    //FillFlow(PCFL(pcflow));
+    
+    pc = PCFL(pcflow)->end;
+    
+    //fprintf(stderr, "LinkFlow - flow block (seq=%d) ", pcflow->seq);
+    if(isPCI_SKIP(pc)) {
+      //fprintf(stderr, "ends with skip\n");
+      //pc->print(stderr,pc);
+      pct=findNextInstruction(pc->next);
+      LinkFlow_pCode(PCI(pc),PCI(pct));
+      pct=findNextInstruction(pct->next);
+      LinkFlow_pCode(PCI(pc),PCI(pct));
+      continue;
+    }
+    
+    if(isPCI_BRANCH(pc)) {
+      pCodeOpLabel *pcol = PCOLAB(PCI(pc)->pcop);
+      
+      //fprintf(stderr, "ends with branch\n  ");
+      //pc->print(stderr,pc);
+      
+      if(!(pcol && isPCOLAB(pcol))) {
+        if((PCI(pc)->op != POC_RETLW) && (PCI(pc)->op != POC_RETURN) && (PCI(pc)->op != POC_CALL) && (PCI(pc)->op != POC_RETFIE) ) {
+          pc->print(stderr,pc);
+          fprintf(stderr, "ERROR: %s, branch instruction doesn't have label\n",__FUNCTION__);
+        }
+        continue;
+      }
+      
+      if( (pct = findLabelinpBlock(pb,pcol)) != NULL)
+        LinkFlow_pCode(PCI(pc),PCI(pct));
+      else
+        fprintf(stderr, "ERROR: %s, couldn't find label. key=%d,lab=%s\n",
+        __FUNCTION__,pcol->key,((PCOP(pcol)->name)?PCOP(pcol)->name:"-"));
+      //fprintf(stderr,"newpCodeOpLabel: key=%d, name=%s\n",key,((s)?s:""));
+      
+      continue;
+    }
+    
+    if(isPCI(pc)) {
+      //fprintf(stderr, "ends with non-branching instruction:\n");
+      //pc->print(stderr,pc);
+      
+      LinkFlow_pCode(PCI(pc),PCI(findNextInstruction(pc->next)));
+      
+      continue;
+    }
+    
+    if(pc) {
+      //fprintf(stderr, "ends with unknown\n");
+      //pc->print(stderr,pc);
+      continue;
+    }
+    
+    //fprintf(stderr, "ends with nothing: ERROR\n");
+    
+  }
 }
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
@@ -4186,17 +4197,17 @@ void LinkFlow(pBlock *pb)
 /*-----------------------------------------------------------------*/
 int isPCinFlow(pCode *pc, pCode *pcflow)
 {
-       
-       if(!pc || !pcflow)
-               return 0;
-       
-       if(!isPCI(pc) || !PCI(pc)->pcflow || !isPCFL(pcflow) )
-               return 0;
-       
-       if( PCI(pc)->pcflow->pc.seq == pcflow->seq)
-               return 1;
-       
-       return 0;
+  
+  if(!pc || !pcflow)
+    return 0;
+  
+  if(!isPCI(pc) || !PCI(pc)->pcflow || !isPCFL(pcflow) )
+    return 0;
+  
+  if( PCI(pc)->pcflow->pc.seq == pcflow->seq)
+    return 1;
+  
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -4204,64 +4215,64 @@ int isPCinFlow(pCode *pc, pCode *pcflow)
 /*
 static void BanksUsedFlow2(pCode *pcflow)
 {
-       pCode *pc=NULL;
-       
-       int bank = -1;
-       bool RegUsed = 0;
-       
-       regs *reg;
-       
-       if(!isPCFL(pcflow)) {
-               fprintf(stderr, "BanksUsed - pcflow is not a flow object ");
-               return;
-       }
-       
-       pc = findNextInstruction(pcflow->next);
-       
-                 PCFL(pcflow)->lastBank = -1;
-                 
-                 while(isPCinFlow(pc,pcflow)) {
-                         
-                         int bank_selected = isBankInstruction(pc);
-                         
-                         //if(PCI(pc)->pcflow) 
-                         //fprintf(stderr,"BanksUsedFlow2, looking at seq %d\n",PCI(pc)->pcflow->pc.seq);
-                         
-                         if(bank_selected > 0) {
-                                 //fprintf(stderr,"BanksUsed - mucking with bank %d\n",bank_selected);
-                                 
-                                 // This instruction is modifying banking bits before accessing registers
-                                 if(!RegUsed)
-                                         PCFL(pcflow)->firstBank = -1;
-                                 
-                                 if(PCFL(pcflow)->lastBank == -1)
-                                         PCFL(pcflow)->lastBank = 0;
-                                 
-                                 bank = (1 << (bank_selected & (PIC_RP0_BIT | PIC_RP1_BIT)));
-                                 if(bank_selected & SET_BANK_BIT)
-                                         PCFL(pcflow)->lastBank |= bank;
-                                 
-                                 
-                         } else { 
-                                 reg = getRegFromInstruction(pc);
-                                 
-                                 if(reg && !isREGinBank(reg, bank)) {
-                                         int allbanks = REGallBanks(reg);
-                                         if(bank == -1)
-                                                 PCFL(pcflow)->firstBank = allbanks;
-                                         
-                                         PCFL(pcflow)->lastBank = allbanks;
-                                         
-                                         bank = allbanks;
-                                 }
-                                 RegUsed = 1;
-                         }
-                         
-                         pc = findNextInstruction(pc->next);
-                 }
-                 
-                 //  fprintf(stderr,"BanksUsedFlow2 flow seq=%3d, first bank = 0x%03x, Last bank 0x%03x\n",
-                 //      pcflow->seq,PCFL(pcflow)->firstBank,PCFL(pcflow)->lastBank);
+  pCode *pc=NULL;
+  
+  int bank = -1;
+  bool RegUsed = 0;
+  
+  regs *reg;
+  
+  if(!isPCFL(pcflow)) {
+    fprintf(stderr, "BanksUsed - pcflow is not a flow object ");
+    return;
+  }
+  
+  pc = findNextInstruction(pcflow->next);
+  
+      PCFL(pcflow)->lastBank = -1;
+      
+      while(isPCinFlow(pc,pcflow)) {
+        
+        int bank_selected = isBankInstruction(pc);
+        
+        //if(PCI(pc)->pcflow) 
+        //fprintf(stderr,"BanksUsedFlow2, looking at seq %d\n",PCI(pc)->pcflow->pc.seq);
+        
+        if(bank_selected > 0) {
+          //fprintf(stderr,"BanksUsed - mucking with bank %d\n",bank_selected);
+          
+          // This instruction is modifying banking bits before accessing registers
+          if(!RegUsed)
+            PCFL(pcflow)->firstBank = -1;
+          
+          if(PCFL(pcflow)->lastBank == -1)
+            PCFL(pcflow)->lastBank = 0;
+          
+          bank = (1 << (bank_selected & (PIC_RP0_BIT | PIC_RP1_BIT)));
+          if(bank_selected & SET_BANK_BIT)
+            PCFL(pcflow)->lastBank |= bank;
+          
+          
+        } else { 
+          reg = getRegFromInstruction(pc);
+          
+          if(reg && !isREGinBank(reg, bank)) {
+            int allbanks = REGallBanks(reg);
+            if(bank == -1)
+              PCFL(pcflow)->firstBank = allbanks;
+            
+            PCFL(pcflow)->lastBank = allbanks;
+            
+            bank = allbanks;
+          }
+          RegUsed = 1;
+        }
+        
+        pc = findNextInstruction(pc->next);
+      }
+      
+      //  fprintf(stderr,"BanksUsedFlow2 flow seq=%3d, first bank = 0x%03x, Last bank 0x%03x\n",
+      //    pcflow->seq,PCFL(pcflow)->firstBank,PCFL(pcflow)->lastBank);
 }
 */
 /*-----------------------------------------------------------------*/
@@ -4272,17 +4283,17 @@ static void BanksUsedFlow(pBlock *pb)
 pCode *pcflow;
 
 
-       //pb->pcHead->print(stderr, pb->pcHead);
-       
-       pcflow = findNextpCode(pb->pcHead, PC_FLOW);
-       //pcflow->print(stderr,pcflow);
+  //pb->pcHead->print(stderr, pb->pcHead);
+  
+  pcflow = findNextpCode(pb->pcHead, PC_FLOW);
+  //pcflow->print(stderr,pcflow);
 
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-               pcflow != NULL;
-               pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-               
-               BanksUsedFlow2(pcflow);
-       }
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+    pcflow != NULL;
+    pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+    
+    BanksUsedFlow2(pcflow);
+  }
 
 }
 */
@@ -4291,52 +4302,52 @@ pCode *pcflow;
 /*-----------------------------------------------------------------*/
 static void pCodeInstructionInsertAfter(pCodeInstruction *pci, pCodeInstruction *new_pci)
 {
-       
-       pCodeInsertAfter(pci->pc.prev, &new_pci->pc);
-       
-       /* Move the label, if there is one */
-       
-       if(pci->label) {
-               new_pci->label = pci->label;
-               pci->label = NULL;
-       }
-       
-       /* Move the C code comment, if there is one */
-       
-       if(pci->cline) {
-               new_pci->cline = pci->cline;
-               pci->cline = NULL;
-       }
-       
-       /* The new instruction has the same pcflow block */
-       new_pci->pcflow = pci->pcflow;
-       
+  
+  pCodeInsertAfter(pci->pc.prev, &new_pci->pc);
+  
+  /* Move the label, if there is one */
+  
+  if(pci->label) {
+    new_pci->label = pci->label;
+    pci->label = NULL;
+  }
+  
+  /* Move the C code comment, if there is one */
+  
+  if(pci->cline) {
+    new_pci->cline = pci->cline;
+    pci->cline = NULL;
+  }
+  
+  /* The new instruction has the same pcflow block */
+  new_pci->pcflow = pci->pcflow;
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static void insertBankSwitch(pCodeInstruction *pci, int Set_Clear, int RP_BankBit)
 {
-       pCode *new_pc;
-       
-       new_pc = newpCode((Set_Clear?POC_BSF:POC_BCF),popCopyGPR2Bit(PCOP(&pc_status),RP_BankBit));
-       
-       pCodeInstructionInsertAfter(pci, PCI(new_pc));
+  pCode *new_pc;
+  
+  new_pc = newpCode((Set_Clear?POC_BSF:POC_BCF),popCopyGPR2Bit(PCOP(&pc_status),RP_BankBit));
+  
+  pCodeInstructionInsertAfter(pci, PCI(new_pc));
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static void insertBankSel(pCodeInstruction  *pci, const char *name)
 {
-       pCode *new_pc;
-       
-       pCodeOp *pcop = popCopyReg(PCOR(pci->pcop));
-       pcop->type = PO_GPR_REGISTER; // Sometimes the type is set to legacy 8051 - so override it
-       if (pcop->name == 0)
-               pcop->name = strdup(name);
-       new_pc = newpCode(POC_BANKSEL, pcop);
-       
-       pCodeInstructionInsertAfter(pci, PCI(new_pc));
+  pCode *new_pc;
+  
+  pCodeOp *pcop = popCopyReg(PCOR(pci->pcop));
+  pcop->type = PO_GPR_REGISTER; // Sometimes the type is set to legacy 8051 - so override it
+  if (pcop->name == 0)
+    pcop->name = strdup(name);
+  new_pc = newpCode(POC_BANKSEL, pcop);
+  
+  pCodeInstructionInsertAfter(pci, PCI(new_pc));
 }
 
 /*-----------------------------------------------------------------*/
@@ -4352,62 +4363,62 @@ static void insertBankSel(pCodeInstruction  *pci, const char *name)
 static int LastRegIdx; /* If the previous register is the same one again then no need to change bank. */
 static int BankSelect(pCodeInstruction *pci, int cur_bank, regs *reg)
 {
-       int bank;
-       int a = reg->alias>>7;
-       if ((a&3) == 3) {
-               return cur_bank; // This register is available in all banks
-       } else if ((a&1)&&((cur_bank==0)||(cur_bank==1))) {
-               return cur_bank; // This register is available in banks 0 & 1
-       } else if (a&2) {
-               if (reg->address&0x80) {
-                       if ((cur_bank==1)||(cur_bank==3)) {
-                               return cur_bank; // This register is available in banks 1 & 3
-                       }
-               } else {
-                       if ((cur_bank==0)||(cur_bank==1)) {
-                               return cur_bank; // This register is available in banks 0 & 2
-                       }
-               }
-       }
-       
-       if (LastRegIdx == reg->rIdx) // If this is the same register as last time then it is in same bank
-               return cur_bank;
-       LastRegIdx = reg->rIdx;
-       
-       if (reg->isFixed) {
-               bank = REG_BANK(reg);
-       } else if (reg->isExtern) {
-               bank = 'E'; // Unfixed extern registers are allocated by the linker therefore its bank is unknown
-       } else {
-               bank = 'L'; // Unfixed local registers are allocated by the linker therefore its bank is unknown
-       }
-       if ((cur_bank == 'L')&&(bank == 'L')) { // If current bank and new bank are both allocated locally by the linker, then assume it is in same bank.
-               return 'L'; // Local registers are presumed to be in same linker assigned bank
-       } else if ((bank == 'L')&&(cur_bank != 'L')) { // Reg is now local and linker to assign bank
-               insertBankSel(pci, reg->name); // Let linker choose the bank selection
-       } else if (bank == 'E') { // Reg is now extern and linker to assign bank
-               insertBankSel(pci, reg->name); // Let linker choose the bank selection
-       } else if ((cur_bank == -1)||(cur_bank == 'L')||(cur_bank == 'E')) { // Current bank unknown and new register bank is known then can set bank bits
-               insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
-               insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
-       } else { // Current bank and new register banks known - can set bank bits
-               switch((cur_bank^bank) & 3) {
-               case 0:
-                       break;
-               case 1:
-                       insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
-                       break;
-               case 2:
-                       insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
-                       break;
-               case 3:
-                       insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
-                       insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
-                       break;
-               }
-       }
-       
-       return bank;
+  int bank;
+  int a = reg->alias>>7;
+  if ((a&3) == 3) {
+    return cur_bank; // This register is available in all banks
+  } else if ((a&1)&&((cur_bank==0)||(cur_bank==1))) {
+    return cur_bank; // This register is available in banks 0 & 1
+  } else if (a&2) {
+    if (reg->address&0x80) {
+      if ((cur_bank==1)||(cur_bank==3)) {
+        return cur_bank; // This register is available in banks 1 & 3
+      }
+    } else {
+      if ((cur_bank==0)||(cur_bank==1)) {
+        return cur_bank; // This register is available in banks 0 & 2
+      }
+    }
+  }
+  
+  if (LastRegIdx == reg->rIdx) // If this is the same register as last time then it is in same bank
+    return cur_bank;
+  LastRegIdx = reg->rIdx;
+  
+  if (reg->isFixed) {
+    bank = REG_BANK(reg);
+  } else if (reg->isExtern) {
+    bank = 'E'; // Unfixed extern registers are allocated by the linker therefore its bank is unknown
+  } else {
+    bank = 'L'; // Unfixed local registers are allocated by the linker therefore its bank is unknown
+  }
+  if ((cur_bank == 'L')&&(bank == 'L')) { // If current bank and new bank are both allocated locally by the linker, then assume it is in same bank.
+    return 'L'; // Local registers are presumed to be in same linker assigned bank
+  } else if ((bank == 'L')&&(cur_bank != 'L')) { // Reg is now local and linker to assign bank
+    insertBankSel(pci, reg->name); // Let linker choose the bank selection
+  } else if (bank == 'E') { // Reg is now extern and linker to assign bank
+    insertBankSel(pci, reg->name); // Let linker choose the bank selection
+  } else if ((cur_bank == -1)||(cur_bank == 'L')||(cur_bank == 'E')) { // Current bank unknown and new register bank is known then can set bank bits
+    insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
+    insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
+  } else { // Current bank and new register banks known - can set bank bits
+    switch((cur_bank^bank) & 3) {
+    case 0:
+      break;
+    case 1:
+      insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
+      break;
+    case 2:
+      insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
+      break;
+    case 3:
+      insertBankSwitch(pci, bank&1, PIC_RP0_BIT);
+      insertBankSwitch(pci, bank&2, PIC_RP1_BIT);
+      break;
+    }
+  }
+  
+  return bank;
 }
 
 /*-----------------------------------------------------------------*/
@@ -4415,124 +4426,124 @@ static int BankSelect(pCodeInstruction *pci, int cur_bank, regs *reg)
 /* cur_bank to match.                                              */
 /*-----------------------------------------------------------------*/
 static int IsBankChange(pCode *pc, regs *reg, int *cur_bank) {
-       
-       if (isSTATUS_REG(reg)) {
-               
-               if (PCI(pc)->op == POC_BCF) {
-                       int old_bank = *cur_bank;
-                       if (PCORB(PCI(pc)->pcop)->bit == PIC_RP0_BIT) {
-                               /* If current bank is unknown or linker assigned then set to 0 else just change the bit */
-                               if (*cur_bank & ~(0x3))
-                                       *cur_bank = 0;
-                               else
-                                       *cur_bank = *cur_bank&0x2;
-                               LastRegIdx = reg->rIdx;
-                       } else if (PCORB(PCI(pc)->pcop)->bit == PIC_RP1_BIT) {
-                               /* If current bank is unknown or linker assigned then set to 0 else just change the bit */
-                               if (*cur_bank & ~(0x3))
-                                       *cur_bank = 0;
-                               else
-                                       *cur_bank = *cur_bank&0x1;
-                               LastRegIdx = reg->rIdx;
-                       }
-                       return old_bank != *cur_bank;
-               }
-               
-               if (PCI(pc)->op == POC_BSF) {
-                       int old_bank = *cur_bank;
-                       if (PCORB(PCI(pc)->pcop)->bit == PIC_RP0_BIT) {
-                               /* If current bank is unknown or linker assigned then set to bit else just change the bit */
-                               if (*cur_bank & ~(0x3))
-                                       *cur_bank = 0x1;
-                               else
-                                       *cur_bank = (*cur_bank&0x2) | 0x1;
-                               LastRegIdx = reg->rIdx;
-                       } else if (PCORB(PCI(pc)->pcop)->bit == PIC_RP1_BIT) {
-                               /* If current bank is unknown or linker assigned then set to bit else just change the bit */
-                               if (*cur_bank & ~(0x3))
-                                       *cur_bank = 0x2;
-                               else
-                                       *cur_bank = (*cur_bank&0x1) | 0x2;
-                               LastRegIdx = reg->rIdx;
-                       }
-                       return old_bank != *cur_bank;
-               }
-               
-       } else if (PCI(pc)->op == POC_BANKSEL) {
-               int old_bank = *cur_bank;
-               *cur_bank = (PCOR(PCI(pc)->pcop)->r->isExtern) ? 'E' : 'L';
-               LastRegIdx = reg->rIdx;
-               return old_bank != *cur_bank;
-       }
-       
-       return 0;
+  
+  if (isSTATUS_REG(reg)) {
+    
+    if (PCI(pc)->op == POC_BCF) {
+      int old_bank = *cur_bank;
+      if (PCORB(PCI(pc)->pcop)->bit == PIC_RP0_BIT) {
+        /* If current bank is unknown or linker assigned then set to 0 else just change the bit */
+        if (*cur_bank & ~(0x3))
+          *cur_bank = 0;
+        else
+          *cur_bank = *cur_bank&0x2;
+        LastRegIdx = reg->rIdx;
+      } else if (PCORB(PCI(pc)->pcop)->bit == PIC_RP1_BIT) {
+        /* If current bank is unknown or linker assigned then set to 0 else just change the bit */
+        if (*cur_bank & ~(0x3))
+          *cur_bank = 0;
+        else
+          *cur_bank = *cur_bank&0x1;
+        LastRegIdx = reg->rIdx;
+      }
+      return old_bank != *cur_bank;
+    }
+    
+    if (PCI(pc)->op == POC_BSF) {
+      int old_bank = *cur_bank;
+      if (PCORB(PCI(pc)->pcop)->bit == PIC_RP0_BIT) {
+        /* If current bank is unknown or linker assigned then set to bit else just change the bit */
+        if (*cur_bank & ~(0x3))
+          *cur_bank = 0x1;
+        else
+          *cur_bank = (*cur_bank&0x2) | 0x1;
+        LastRegIdx = reg->rIdx;
+      } else if (PCORB(PCI(pc)->pcop)->bit == PIC_RP1_BIT) {
+        /* If current bank is unknown or linker assigned then set to bit else just change the bit */
+        if (*cur_bank & ~(0x3))
+          *cur_bank = 0x2;
+        else
+          *cur_bank = (*cur_bank&0x1) | 0x2;
+        LastRegIdx = reg->rIdx;
+      }
+      return old_bank != *cur_bank;
+    }
+    
+  } else if (PCI(pc)->op == POC_BANKSEL) {
+    int old_bank = *cur_bank;
+    *cur_bank = (PCOR(PCI(pc)->pcop)->r->isExtern) ? 'E' : 'L';
+    LastRegIdx = reg->rIdx;
+    return old_bank != *cur_bank;
+  }
+  
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
 /* Set bank selection if necessary                                 */
 /*-----------------------------------------------------------------*/
 static int DoBankSelect(pCode *pc, int cur_bank) {
-       pCode *pcprev;
-       regs *reg;
-       
-       if(!isPCI(pc))
-               return cur_bank;
-       
-       if (isCALL(pc)) {
-               pCode *pcf = findFunction(get_op_from_instruction(PCI(pc)));
-               if (pcf && isPCF(pcf)) {
-                       pCode *pcfr;
-                       int rbank = 'U'; // Undetermined
-                       FixRegisterBanking(pcf->pb,cur_bank); // Ensure this block has had its banks selection done
-                       // Check all the returns to work out what bank is selected
-                       for (pcfr=pcf->pb->pcHead; pcfr; pcfr=pcfr->next) {
-                               if (isPCI(pcfr)) {
-                                       if ((PCI(pcfr)->op==POC_RETURN) || (PCI(pcfr)->op==POC_RETLW)) {
-                                               if (rbank == 'U')
-                                                       rbank = PCFL(pcfr)->lastBank;
-                                               else
-                                                       if (rbank != PCFL(pcfr)->lastBank)
-                                                               return -1; // Unknown bank - multiple returns with different banks
-                                       }
-                               }
-                       }
-                       if (rbank == 'U')
-                               return -1; // Unknown bank
-                       return rbank;
-               } else if (isPCOS(PCI(pc)->pcop) && PCOS(PCI(pc)->pcop)->isPublic) {
-                       /* Extern functions may use registers in different bank - must call banksel */
-                       return -1; /* Unknown bank */
-               }
-       }
-       
-       if ((isPCI(pc)) && (PCI(pc)->op == POC_BANKSEL)) {
-               return -1; /* New bank unknown - linkers choice. */
-       }
-       
-       reg = getRegFromInstruction(pc);
-       if (reg) {
-               
-               if (IsBankChange(pc,reg,&cur_bank))
-                       return cur_bank;
-               
-               if (!isPCI_LIT(pc)) {
-                       
-               /* Examine the instruction before this one to make sure it is
-                       * not a skip type instruction */
-                       pcprev = findPrevpCode(pc->prev, PC_OPCODE);
-                       
-                       if(!pcprev || (pcprev && !isPCI_SKIP(pcprev))) {
-                               cur_bank = BankSelect(PCI(pc),cur_bank,reg);
-                       } else {
-                               cur_bank = BankSelect(PCI(pcprev),cur_bank,reg);
-                       }
-                       if (!PCI(pc)->pcflow)
-                               fprintf(stderr,"PCI ID=%d missing flow pointer ???\n",pc->id);
-                       else
-                               PCI(pc)->pcflow->lastBank = cur_bank; /* Maintain pCodeFlow lastBank state */
-               }
-       }
-       return cur_bank;
+  pCode *pcprev;
+  regs *reg;
+  
+  if(!isPCI(pc))
+    return cur_bank;
+  
+  if (isCALL(pc)) {
+    pCode *pcf = findFunction(get_op_from_instruction(PCI(pc)));
+    if (pcf && isPCF(pcf)) {
+      pCode *pcfr;
+      int rbank = 'U'; // Undetermined
+      FixRegisterBanking(pcf->pb,cur_bank); // Ensure this block has had its banks selection done
+      // Check all the returns to work out what bank is selected
+      for (pcfr=pcf->pb->pcHead; pcfr; pcfr=pcfr->next) {
+        if (isPCI(pcfr)) {
+          if ((PCI(pcfr)->op==POC_RETURN) || (PCI(pcfr)->op==POC_RETLW)) {
+            if (rbank == 'U')
+              rbank = PCFL(pcfr)->lastBank;
+            else
+              if (rbank != PCFL(pcfr)->lastBank)
+                return -1; // Unknown bank - multiple returns with different banks
+          }
+        }
+      }
+      if (rbank == 'U')
+        return -1; // Unknown bank
+      return rbank;
+    } else if (isPCOS(PCI(pc)->pcop) && PCOS(PCI(pc)->pcop)->isPublic) {
+      /* Extern functions may use registers in different bank - must call banksel */
+      return -1; /* Unknown bank */
+    }
+  }
+  
+  if ((isPCI(pc)) && (PCI(pc)->op == POC_BANKSEL)) {
+    return -1; /* New bank unknown - linkers choice. */
+  }
+  
+  reg = getRegFromInstruction(pc);
+  if (reg) {
+    
+    if (IsBankChange(pc,reg,&cur_bank))
+      return cur_bank;
+    
+    if (!isPCI_LIT(pc)) {
+      
+    /* Examine the instruction before this one to make sure it is
+      * not a skip type instruction */
+      pcprev = findPrevpCode(pc->prev, PC_OPCODE);
+      
+      if(!pcprev || (pcprev && !isPCI_SKIP(pcprev))) {
+        cur_bank = BankSelect(PCI(pc),cur_bank,reg);
+      } else {
+        cur_bank = BankSelect(PCI(pcprev),cur_bank,reg);
+      }
+      if (!PCI(pc)->pcflow)
+        fprintf(stderr,"PCI ID=%d missing flow pointer ???\n",pc->id);
+      else
+        PCI(pc)->pcflow->lastBank = cur_bank; /* Maintain pCodeFlow lastBank state */
+    }
+  }
+  return cur_bank;
 }
 
 /*-----------------------------------------------------------------*/
@@ -4540,26 +4551,26 @@ static int DoBankSelect(pCode *pc, int cur_bank) {
 /*
 static void FixRegisterBankingInFlow(pCodeFlow *pcfl, int cur_bank)
 {
-       pCode *pc=NULL;
-       pCode *pcprev=NULL;
+  pCode *pc=NULL;
+  pCode *pcprev=NULL;
 
-       if(!pcfl)
-       return;
+  if(!pcfl)
+  return;
 
-       pc = findNextInstruction(pcfl->pc.next);
-       
-       while(isPCinFlow(pc,PCODE(pcfl))) {
+  pc = findNextInstruction(pcfl->pc.next);
+  
+  while(isPCinFlow(pc,PCODE(pcfl))) {
 
-               cur_bank = DoBankSelect(pc,cur_bank);
-               pcprev = pc;
-               pc = findNextInstruction(pc->next);
-               
-       }
+    cur_bank = DoBankSelect(pc,cur_bank);
+    pcprev = pc;
+    pc = findNextInstruction(pc->next);
+    
+  }
 
-       if(pcprev && cur_bank) {
-               // Set bank state to unknown at the end of each flow block
-               cur_bank = -1;
-       }
+  if(pcprev && cur_bank) {
+    // Set bank state to unknown at the end of each flow block
+    cur_bank = -1;
+  }
 
 }
 */
@@ -4570,49 +4581,49 @@ static void FixRegisterBankingInFlow(pCodeFlow *pcfl, int cur_bank)
 /*
 int compareBankFlow(pCodeFlow *pcflow, pCodeFlowLink *pcflowLink, int toORfrom)
 {
-       
-       if(!pcflow || !pcflowLink || !pcflowLink->pcflow)
-               return 0;
-       
-       if(!isPCFL(pcflow) || !isPCFL(pcflowLink->pcflow))
-               return 0;
-       
-       if(pcflow->firstBank == -1)
-               return 0;
-       
-       
-                 if(pcflowLink->pcflow->firstBank == -1) {
-                         pCodeFlowLink *pctl = setFirstItem( toORfrom ? 
-                                 pcflowLink->pcflow->to : 
-                         pcflowLink->pcflow->from);
-                         return compareBankFlow(pcflow, pctl, toORfrom);
-                 }
-                 
-                 if(toORfrom) {
-                         if(pcflow->lastBank == pcflowLink->pcflow->firstBank)
-                                 return 0;
-                         
-                         pcflowLink->bank_conflict++;
-                         pcflowLink->pcflow->FromConflicts++;
-                         pcflow->ToConflicts++;
-                 } else {
-                         
-                         if(pcflow->firstBank == pcflowLink->pcflow->lastBank)
-                                 return 0;
-                         
-                         pcflowLink->bank_conflict++;
-                         pcflowLink->pcflow->ToConflicts++;
-                         pcflow->FromConflicts++;
-                         
-                 }
-                 / *
-                         fprintf(stderr,"compare flow found conflict: seq %d from conflicts %d, to conflicts %d\n",
-                         pcflowLink->pcflow->pc.seq,
-                         pcflowLink->pcflow->FromConflicts,
-                         pcflowLink->pcflow->ToConflicts);
-                 * /
-                         return 1;
-                 
+  
+  if(!pcflow || !pcflowLink || !pcflowLink->pcflow)
+    return 0;
+  
+  if(!isPCFL(pcflow) || !isPCFL(pcflowLink->pcflow))
+    return 0;
+  
+  if(pcflow->firstBank == -1)
+    return 0;
+  
+  
+      if(pcflowLink->pcflow->firstBank == -1) {
+        pCodeFlowLink *pctl = setFirstItem( toORfrom ? 
+          pcflowLink->pcflow->to : 
+        pcflowLink->pcflow->from);
+        return compareBankFlow(pcflow, pctl, toORfrom);
+      }
+      
+      if(toORfrom) {
+        if(pcflow->lastBank == pcflowLink->pcflow->firstBank)
+          return 0;
+        
+        pcflowLink->bank_conflict++;
+        pcflowLink->pcflow->FromConflicts++;
+        pcflow->ToConflicts++;
+      } else {
+        
+        if(pcflow->firstBank == pcflowLink->pcflow->lastBank)
+          return 0;
+        
+        pcflowLink->bank_conflict++;
+        pcflowLink->pcflow->ToConflicts++;
+        pcflow->FromConflicts++;
+        
+      }
+      / *
+        fprintf(stderr,"compare flow found conflict: seq %d from conflicts %d, to conflicts %d\n",
+        pcflowLink->pcflow->pc.seq,
+        pcflowLink->pcflow->FromConflicts,
+        pcflowLink->pcflow->ToConflicts);
+      * /
+        return 1;
+      
 }
 */
 /*-----------------------------------------------------------------*/
@@ -4620,148 +4631,148 @@ int compareBankFlow(pCodeFlow *pcflow, pCodeFlowLink *pcflowLink, int toORfrom)
 /*
 void FixBankFlow(pBlock *pb)
 {
-       pCode *pc=NULL;
-       pCode *pcflow;
-       pCodeFlowLink *pcfl;
-       
-       pCode *pcflow_max_To=NULL;
-       pCode *pcflow_max_From=NULL;
-       int max_ToConflicts=0;
-       int max_FromConflicts=0;
-       
-       //fprintf(stderr,"Fix Bank flow \n");
-       pcflow = findNextpCode(pb->pcHead, PC_FLOW);
-       
-       
-       / *
-       First loop through all of the flow objects in this pcode block
-       and fix the ones that have banking conflicts between the 
-       entry and exit.
-       * /
-
-       //fprintf(stderr, "FixBankFlow - Phase 1\n");
-       
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-               pcflow != NULL;
-               pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-
-               if(!isPCFL(pcflow)) {
-                       fprintf(stderr, "FixBankFlow - pcflow is not a flow object ");
-                       continue;
-               }
-               
-               if(PCFL(pcflow)->firstBank != PCFL(pcflow)->lastBank  &&
-                       PCFL(pcflow)->firstBank >= 0 &&
-                       PCFL(pcflow)->lastBank >= 0 ) {
-                       
-                       int cur_bank = (PCFL(pcflow)->firstBank < PCFL(pcflow)->lastBank) ?
-                               PCFL(pcflow)->firstBank : PCFL(pcflow)->lastBank;
-                       
-                       FixRegisterBankingInFlow(PCFL(pcflow),cur_bank);
-                       BanksUsedFlow2(pcflow);
-                       
-               }
-       }
-       
-       //fprintf(stderr, "FixBankFlow - Phase 2\n");
-       
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-               pcflow != NULL;
-               pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-
-                       int nFlows;
-                       int nConflicts;
-
-                       if(!isPCFL(pcflow)) {
-                               fprintf(stderr, "FixBankFlow - pcflow is not a flow object ");
-                               continue;
-                       }
-
-               PCFL(pcflow)->FromConflicts = 0;
-               PCFL(pcflow)->ToConflicts = 0;
-
-               nFlows = 0;
-               nConflicts = 0;
-
-               //fprintf(stderr, " FixBankFlow flow seq %d\n",pcflow->seq);
-               pcfl = setFirstItem(PCFL(pcflow)->from);
-               while (pcfl) {
+  pCode *pc=NULL;
+  pCode *pcflow;
+  pCodeFlowLink *pcfl;
+  
+  pCode *pcflow_max_To=NULL;
+  pCode *pcflow_max_From=NULL;
+  int max_ToConflicts=0;
+  int max_FromConflicts=0;
+  
+  //fprintf(stderr,"Fix Bank flow \n");
+  pcflow = findNextpCode(pb->pcHead, PC_FLOW);
+  
+  
+  / *
+  First loop through all of the flow objects in this pcode block
+  and fix the ones that have banking conflicts between the 
+  entry and exit.
+  * /
+
+  //fprintf(stderr, "FixBankFlow - Phase 1\n");
+  
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+    pcflow != NULL;
+    pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+
+    if(!isPCFL(pcflow)) {
+      fprintf(stderr, "FixBankFlow - pcflow is not a flow object ");
+      continue;
+    }
+    
+    if(PCFL(pcflow)->firstBank != PCFL(pcflow)->lastBank  &&
+      PCFL(pcflow)->firstBank >= 0 &&
+      PCFL(pcflow)->lastBank >= 0 ) {
+      
+      int cur_bank = (PCFL(pcflow)->firstBank < PCFL(pcflow)->lastBank) ?
+        PCFL(pcflow)->firstBank : PCFL(pcflow)->lastBank;
+      
+      FixRegisterBankingInFlow(PCFL(pcflow),cur_bank);
+      BanksUsedFlow2(pcflow);
+      
+    }
+  }
+  
+  //fprintf(stderr, "FixBankFlow - Phase 2\n");
+  
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+    pcflow != NULL;
+    pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+
+      int nFlows;
+      int nConflicts;
+
+      if(!isPCFL(pcflow)) {
+        fprintf(stderr, "FixBankFlow - pcflow is not a flow object ");
+        continue;
+      }
+
+    PCFL(pcflow)->FromConflicts = 0;
+    PCFL(pcflow)->ToConflicts = 0;
+
+    nFlows = 0;
+    nConflicts = 0;
+
+    //fprintf(stderr, " FixBankFlow flow seq %d\n",pcflow->seq);
+    pcfl = setFirstItem(PCFL(pcflow)->from);
+    while (pcfl) {
+
+      pc = PCODE(pcfl->pcflow);
+
+      if(!isPCFL(pc)) {
+        fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
+        pc->print(stderr,pc);
+      }
+
+      nConflicts += compareBankFlow(PCFL(pcflow), pcfl, 0);
+      nFlows++;
+
+      pcfl=setNextItem(PCFL(pcflow)->from);
+    }
+
+    if((nFlows >= 2) && nConflicts && (PCFL(pcflow)->firstBank>0)) {
+      //fprintf(stderr, " From conflicts flow seq %d, nflows %d ,nconflicts %d\n",pcflow->seq,nFlows, nConflicts);
+
+      FixRegisterBankingInFlow(PCFL(pcflow),-1);
+      BanksUsedFlow2(pcflow);
+
+      continue;  / * Don't need to check the flow from here - it's already been fixed * /
+
+    }
+
+    nFlows = 0;
+    nConflicts = 0;
+
+    pcfl = setFirstItem(PCFL(pcflow)->to);
+    while (pcfl) {
+
+      pc = PCODE(pcfl->pcflow);
+      if(!isPCFL(pc)) {
+        fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
+        pc->print(stderr,pc);
+      }
+
+      nConflicts += compareBankFlow(PCFL(pcflow), pcfl, 1);
+      nFlows++;
+
+      pcfl=setNextItem(PCFL(pcflow)->to);
+    }
+
+    if((nFlows >= 2) && nConflicts &&(nConflicts != nFlows) && (PCFL(pcflow)->lastBank>0)) {
+      //fprintf(stderr, " To conflicts flow seq %d, nflows %d ,nconflicts %d\n",pcflow->seq,nFlows, nConflicts);
+
+      FixRegisterBankingInFlow(PCFL(pcflow),-1);
+      BanksUsedFlow2(pcflow);
+    }
+  }
+
+  / *
+  Loop through the flow objects again and find the ones with the 
+  maximum conflicts
+  * /
+
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+  pcflow != NULL;
+  pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+
+    if(PCFL(pcflow)->ToConflicts > max_ToConflicts)
+      pcflow_max_To = pcflow;
+
+    if(PCFL(pcflow)->FromConflicts > max_FromConflicts)
+      pcflow_max_From = pcflow;
+  }
+  / *
+  if(pcflow_max_To)
+    fprintf(stderr,"compare flow Max To conflicts: seq %d conflicts %d\n",
+  PCFL(pcflow_max_To)->pc.seq,
+  PCFL(pcflow_max_To)->ToConflicts);
 
-                       pc = PCODE(pcfl->pcflow);
-
-                       if(!isPCFL(pc)) {
-                               fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
-                               pc->print(stderr,pc);
-                       }
-
-                       nConflicts += compareBankFlow(PCFL(pcflow), pcfl, 0);
-                       nFlows++;
-
-                       pcfl=setNextItem(PCFL(pcflow)->from);
-               }
-
-               if((nFlows >= 2) && nConflicts && (PCFL(pcflow)->firstBank>0)) {
-                       //fprintf(stderr, " From conflicts flow seq %d, nflows %d ,nconflicts %d\n",pcflow->seq,nFlows, nConflicts);
-
-                       FixRegisterBankingInFlow(PCFL(pcflow),-1);
-                       BanksUsedFlow2(pcflow);
-
-                       continue;  / * Don't need to check the flow from here - it's already been fixed * /
-
-               }
-
-               nFlows = 0;
-               nConflicts = 0;
-
-               pcfl = setFirstItem(PCFL(pcflow)->to);
-               while (pcfl) {
-
-                       pc = PCODE(pcfl->pcflow);
-                       if(!isPCFL(pc)) {
-                               fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
-                               pc->print(stderr,pc);
-                       }
-
-                       nConflicts += compareBankFlow(PCFL(pcflow), pcfl, 1);
-                       nFlows++;
-
-                       pcfl=setNextItem(PCFL(pcflow)->to);
-               }
-
-               if((nFlows >= 2) && nConflicts &&(nConflicts != nFlows) && (PCFL(pcflow)->lastBank>0)) {
-                       //fprintf(stderr, " To conflicts flow seq %d, nflows %d ,nconflicts %d\n",pcflow->seq,nFlows, nConflicts);
-
-                       FixRegisterBankingInFlow(PCFL(pcflow),-1);
-                       BanksUsedFlow2(pcflow);
-               }
-       }
-
-       / *
-       Loop through the flow objects again and find the ones with the 
-       maximum conflicts
-       * /
-
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-       pcflow != NULL;
-       pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-
-               if(PCFL(pcflow)->ToConflicts > max_ToConflicts)
-                       pcflow_max_To = pcflow;
-
-               if(PCFL(pcflow)->FromConflicts > max_FromConflicts)
-                       pcflow_max_From = pcflow;
-       }
-       / *
-       if(pcflow_max_To)
-               fprintf(stderr,"compare flow Max To conflicts: seq %d conflicts %d\n",
-       PCFL(pcflow_max_To)->pc.seq,
-       PCFL(pcflow_max_To)->ToConflicts);
-
-       if(pcflow_max_From)
-               fprintf(stderr,"compare flow Max From conflicts: seq %d conflicts %d\n",
-       PCFL(pcflow_max_From)->pc.seq,
-       PCFL(pcflow_max_From)->FromConflicts);
-       * /
+  if(pcflow_max_From)
+    fprintf(stderr,"compare flow Max From conflicts: seq %d conflicts %d\n",
+  PCFL(pcflow_max_From)->pc.seq,
+  PCFL(pcflow_max_From)->FromConflicts);
+  * /
 }
 */
 
@@ -4769,97 +4780,97 @@ void FixBankFlow(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void DumpFlow(pBlock *pb)
 {
-       pCode *pc=NULL;
-       pCode *pcflow;
-       pCodeFlowLink *pcfl;
-       
-       
-       fprintf(stderr,"Dump flow \n");
-       pb->pcHead->print(stderr, pb->pcHead);
-       
-       pcflow = findNextpCode(pb->pcHead, PC_FLOW);
-       pcflow->print(stderr,pcflow);
-       
-       for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-       pcflow != NULL;
-       pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
-               
-               if(!isPCFL(pcflow)) {
-                       fprintf(stderr, "DumpFlow - pcflow is not a flow object ");
-                       continue;
-               }
-               fprintf(stderr,"dumping: ");
-               pcflow->print(stderr,pcflow);
-               FlowStats(PCFL(pcflow));
-               
-               for(pcfl = setFirstItem(PCFL(pcflow)->to); pcfl; pcfl=setNextItem(PCFL(pcflow)->to)) {
-                       
-                       pc = PCODE(pcfl->pcflow);
-                       
-                       fprintf(stderr, "    from seq %d:\n",pc->seq);
-                       if(!isPCFL(pc)) {
-                               fprintf(stderr,"oops dumpflow - from is not a pcflow\n");
-                               pc->print(stderr,pc);
-                       }
-                       
-               }
-               
-               for(pcfl = setFirstItem(PCFL(pcflow)->to); pcfl; pcfl=setNextItem(PCFL(pcflow)->to)) {
-                       
-                       pc = PCODE(pcfl->pcflow);
-                       
-                       fprintf(stderr, "    to seq %d:\n",pc->seq);
-                       if(!isPCFL(pc)) {
-                               fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
-                               pc->print(stderr,pc);
-                       }
-                       
-               }
-               
-       }
-       
+  pCode *pc=NULL;
+  pCode *pcflow;
+  pCodeFlowLink *pcfl;
+  
+  
+  fprintf(stderr,"Dump flow \n");
+  pb->pcHead->print(stderr, pb->pcHead);
+  
+  pcflow = findNextpCode(pb->pcHead, PC_FLOW);
+  pcflow->print(stderr,pcflow);
+  
+  for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+  pcflow != NULL;
+  pcflow = findNextpCode(pcflow->next, PC_FLOW) ) {
+    
+    if(!isPCFL(pcflow)) {
+      fprintf(stderr, "DumpFlow - pcflow is not a flow object ");
+      continue;
+    }
+    fprintf(stderr,"dumping: ");
+    pcflow->print(stderr,pcflow);
+    FlowStats(PCFL(pcflow));
+    
+    for(pcfl = setFirstItem(PCFL(pcflow)->to); pcfl; pcfl=setNextItem(PCFL(pcflow)->to)) {
+      
+      pc = PCODE(pcfl->pcflow);
+      
+      fprintf(stderr, "    from seq %d:\n",pc->seq);
+      if(!isPCFL(pc)) {
+        fprintf(stderr,"oops dumpflow - from is not a pcflow\n");
+        pc->print(stderr,pc);
+      }
+      
+    }
+    
+    for(pcfl = setFirstItem(PCFL(pcflow)->to); pcfl; pcfl=setNextItem(PCFL(pcflow)->to)) {
+      
+      pc = PCODE(pcfl->pcflow);
+      
+      fprintf(stderr, "    to seq %d:\n",pc->seq);
+      if(!isPCFL(pc)) {
+        fprintf(stderr,"oops dumpflow - to is not a pcflow\n");
+        pc->print(stderr,pc);
+      }
+      
+    }
+    
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 int OptimizepBlock(pBlock *pb)
 {
-       pCode *pc, *pcprev;
-       int matches =0;
-       
-       if(!pb || !peepOptimizing)
-               return 0;
-       
-       DFPRINTF((stderr," Optimizing pBlock: %c\n",getpBlock_dbName(pb)));
-       /*
-       for(pc = pb->pcHead; pc; pc = pc->next)
-       matches += pCodePeepMatchRule(pc);
-       */
-       
-       pc = findNextInstruction(pb->pcHead);
-       if(!pc)
-               return 0;
-       
-       pcprev = pc->prev;
-       do {
-               
-               
-               if(pCodePeepMatchRule(pc)) {
-                       
-                       matches++;
-                       
-                       if(pcprev)
-                               pc = findNextInstruction(pcprev->next);
-                       else 
-                               pc = findNextInstruction(pb->pcHead);
-               } else
-                       pc = findNextInstruction(pc->next);
-       } while(pc);
-       
-       if(matches)
-               DFPRINTF((stderr," Optimizing pBlock: %c - matches=%d\n",getpBlock_dbName(pb),matches));
-       return matches;
-       
+  pCode *pc, *pcprev;
+  int matches =0;
+  
+  if(!pb || !peepOptimizing)
+    return 0;
+  
+  DFPRINTF((stderr," Optimizing pBlock: %c\n",getpBlock_dbName(pb)));
+  /*
+  for(pc = pb->pcHead; pc; pc = pc->next)
+  matches += pCodePeepMatchRule(pc);
+  */
+  
+  pc = findNextInstruction(pb->pcHead);
+  if(!pc)
+    return 0;
+  
+  pcprev = pc->prev;
+  do {
+    
+    
+    if(pCodePeepMatchRule(pc)) {
+      
+      matches++;
+      
+      if(pcprev)
+        pc = findNextInstruction(pcprev->next);
+      else 
+        pc = findNextInstruction(pb->pcHead);
+    } else
+      pc = findNextInstruction(pc->next);
+  } while(pc);
+  
+  if(matches)
+    DFPRINTF((stderr," Optimizing pBlock: %c - matches=%d\n",getpBlock_dbName(pb),matches));
+  return matches;
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -4867,57 +4878,57 @@ int OptimizepBlock(pBlock *pb)
 /*-----------------------------------------------------------------*/
 pCode * findInstructionUsingLabel(pCodeLabel *pcl, pCode *pcs)
 {
-       pCode *pc;
-       
-       for(pc = pcs; pc; pc = pc->next) {
-               
-               if((pc->type == PC_OPCODE) && 
-                       (PCI(pc)->pcop) && 
-                       (PCI(pc)->pcop->type == PO_LABEL) &&
-                       (PCOLAB(PCI(pc)->pcop)->key == pcl->key))
-                       return pc;
-       }
-       
-       
-       return NULL;
+  pCode *pc;
+  
+  for(pc = pcs; pc; pc = pc->next) {
+    
+    if((pc->type == PC_OPCODE) && 
+      (PCI(pc)->pcop) && 
+      (PCI(pc)->pcop->type == PO_LABEL) &&
+      (PCOLAB(PCI(pc)->pcop)->key == pcl->key))
+      return pc;
+  }
+  
+  
+  return NULL;
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 void exchangeLabels(pCodeLabel *pcl, pCode *pc)
 {
-       
-       char *s=NULL;
-       
-       if(isPCI(pc) && 
-               (PCI(pc)->pcop) && 
-               (PCI(pc)->pcop->type == PO_LABEL)) {
-               
-               pCodeOpLabel *pcol = PCOLAB(PCI(pc)->pcop);
-               
-               //fprintf(stderr,"changing label key from %d to %d\n",pcol->key, pcl->key);
-               if(pcol->pcop.name)
-                       free(pcol->pcop.name);
-               
-                       /* If the key is negative, then we (probably) have a label to
-               * a function and the name is already defined */
-               
-               if(pcl->key>0)
-                       sprintf(s=buffer,"_%05d_DS_",pcl->key);
-               else 
-                       s = pcl->label;
-               
-               //sprintf(buffer,"_%05d_DS_",pcl->key);
-               if(!s) {
-                       fprintf(stderr, "ERROR %s:%d function label is null\n",__FUNCTION__,__LINE__);
-               }
-               pcol->pcop.name = Safe_strdup(s);
-               pcol->key = pcl->key;
-               //pc->print(stderr,pc);
-               
-       }
-       
-       
+  
+  char *s=NULL;
+  
+  if(isPCI(pc) && 
+    (PCI(pc)->pcop) && 
+    (PCI(pc)->pcop->type == PO_LABEL)) {
+    
+    pCodeOpLabel *pcol = PCOLAB(PCI(pc)->pcop);
+    
+    //fprintf(stderr,"changing label key from %d to %d\n",pcol->key, pcl->key);
+    if(pcol->pcop.name)
+      free(pcol->pcop.name);
+    
+      /* If the key is negative, then we (probably) have a label to
+    * a function and the name is already defined */
+    
+    if(pcl->key>0)
+      sprintf(s=buffer,"_%05d_DS_",pcl->key);
+    else 
+      s = pcl->label;
+    
+    //sprintf(buffer,"_%05d_DS_",pcl->key);
+    if(!s) {
+      fprintf(stderr, "ERROR %s:%d function label is null\n",__FUNCTION__,__LINE__);
+    }
+    pcol->pcop.name = Safe_strdup(s);
+    pcol->key = pcl->key;
+    //pc->print(stderr,pc);
+    
+  }
+  
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -4926,70 +4937,70 @@ void exchangeLabels(pCodeLabel *pcl, pCode *pc)
 /*-----------------------------------------------------------------*/
 void pBlockRemoveUnusedLabels(pBlock *pb)
 {
-       pCode *pc; pCodeLabel *pcl;
-       
-       if(!pb)
-               return;
-       
-       for(pc = pb->pcHead; (pc=findNextInstruction(pc->next)) != NULL; ) {
-               
-               pBranch *pbr = PCI(pc)->label;
-               if(pbr && pbr->next) {
-                       pCode *pcd = pb->pcHead;
-                       
-                       //fprintf(stderr, "multiple labels\n");
-                       //pc->print(stderr,pc);
-                       
-                       pbr = pbr->next;
-                       while(pbr) {
-                               
-                               while ( (pcd = findInstructionUsingLabel(PCL(PCI(pc)->label->pc), pcd)) != NULL) {
-                                       //fprintf(stderr,"Used by:\n");
-                                       //pcd->print(stderr,pcd);
-                                       
-                                       exchangeLabels(PCL(pbr->pc),pcd);
-                                       
-                                       pcd = pcd->next;
-                               }
-                               pbr = pbr->next;
-                       }
-               }
-       }
-       
-       for(pc = pb->pcHead; pc; pc = pc->next) {
-               
-               if(isPCL(pc)) // Label pcode
-                       pcl = PCL(pc);
-               else if (isPCI(pc) && PCI(pc)->label) // pcode instruction with a label
-                       pcl = PCL(PCI(pc)->label->pc);
-               else continue;
-               
-               //fprintf(stderr," found  A LABEL !!! key = %d, %s\n", pcl->key,pcl->label);
-               
-               /* This pCode is a label, so search the pBlock to see if anyone
-               * refers to it */
-               
-               if( (pcl->key>0) && (!findInstructionUsingLabel(pcl, pb->pcHead))) {
-                       //if( !findInstructionUsingLabel(pcl, pb->pcHead)) {
-                       /* Couldn't find an instruction that refers to this label
-                       * So, unlink the pCode label from it's pCode chain
-                       * and destroy the label */
-                       //fprintf(stderr," removed  A LABEL !!! key = %d, %s\n", pcl->key,pcl->label);
-                       
-                       DFPRINTF((stderr," !!! REMOVED A LABEL !!! key = %d, %s\n", pcl->key,pcl->label));
-                       if(pc->type == PC_LABEL) {
-                               unlinkpCode(pc);
-                               pCodeLabelDestruct(pc);
-                       } else {
-                               unlinkpCodeFromBranch(pc, PCODE(pcl));
-                               /*if(pc->label->next == NULL && pc->label->pc == NULL) {
-                               free(pc->label);
-                       }*/
-                       }
-                       
-               }
-       }
-       
+  pCode *pc; pCodeLabel *pcl;
+  
+  if(!pb)
+    return;
+  
+  for(pc = pb->pcHead; (pc=findNextInstruction(pc->next)) != NULL; ) {
+    
+    pBranch *pbr = PCI(pc)->label;
+    if(pbr && pbr->next) {
+      pCode *pcd = pb->pcHead;
+      
+      //fprintf(stderr, "multiple labels\n");
+      //pc->print(stderr,pc);
+      
+      pbr = pbr->next;
+      while(pbr) {
+        
+        while ( (pcd = findInstructionUsingLabel(PCL(PCI(pc)->label->pc), pcd)) != NULL) {
+          //fprintf(stderr,"Used by:\n");
+          //pcd->print(stderr,pcd);
+          
+          exchangeLabels(PCL(pbr->pc),pcd);
+          
+          pcd = pcd->next;
+        }
+        pbr = pbr->next;
+      }
+    }
+  }
+  
+  for(pc = pb->pcHead; pc; pc = pc->next) {
+    
+    if(isPCL(pc)) // Label pcode
+      pcl = PCL(pc);
+    else if (isPCI(pc) && PCI(pc)->label) // pcode instruction with a label
+      pcl = PCL(PCI(pc)->label->pc);
+    else continue;
+    
+    //fprintf(stderr," found  A LABEL !!! key = %d, %s\n", pcl->key,pcl->label);
+    
+    /* This pCode is a label, so search the pBlock to see if anyone
+    * refers to it */
+    
+    if( (pcl->key>0) && (!findInstructionUsingLabel(pcl, pb->pcHead))) {
+      //if( !findInstructionUsingLabel(pcl, pb->pcHead)) {
+      /* Couldn't find an instruction that refers to this label
+      * So, unlink the pCode label from it's pCode chain
+      * and destroy the label */
+      //fprintf(stderr," removed  A LABEL !!! key = %d, %s\n", pcl->key,pcl->label);
+      
+      DFPRINTF((stderr," !!! REMOVED A LABEL !!! key = %d, %s\n", pcl->key,pcl->label));
+      if(pc->type == PC_LABEL) {
+        unlinkpCode(pc);
+        pCodeLabelDestruct(pc);
+      } else {
+        unlinkpCodeFromBranch(pc, PCODE(pcl));
+        /*if(pc->label->next == NULL && pc->label->pc == NULL) {
+        free(pc->label);
+      }*/
+      }
+      
+    }
+  }
+  
 }
 
 
@@ -5001,66 +5012,66 @@ void pBlockRemoveUnusedLabels(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void pBlockMergeLabels(pBlock *pb)
 {
-       pBranch *pbr;
-       pCode *pc, *pcnext=NULL;
-       
-       if(!pb)
-               return;
-       
-       /* First, Try to remove any unused labels */
-       //pBlockRemoveUnusedLabels(pb);
-       
-       /* Now loop through the pBlock and merge the labels with the opcodes */
-       
-       pc = pb->pcHead;
-       //  for(pc = pb->pcHead; pc; pc = pc->next) {
-       
-       while(pc) {
-               pCode *pcn = pc->next;
-               
-               if(pc->type == PC_LABEL) {
-                       
-                       //fprintf(stderr," checking merging label %s\n",PCL(pc)->label);
-                       //fprintf(stderr,"Checking label key = %d\n",PCL(pc)->key);
-                       if((pcnext = findNextInstruction(pc) )) {
-                               
-                               // Unlink the pCode label from it's pCode chain
-                               unlinkpCode(pc);
-                               
-                               //fprintf(stderr,"Merged label key = %d\n",PCL(pc)->key);
-                               // And link it into the instruction's pBranch labels. (Note, since
-                               // it's possible to have multiple labels associated with one instruction
-                               // we must provide a means to accomodate the additional labels. Thus
-                               // the labels are placed into the singly-linked list "label" as 
-                               // opposed to being a single member of the pCodeInstruction.)
-                               
-                               //_ALLOC(pbr,sizeof(pBranch));
-                               pbr = Safe_calloc(1,sizeof(pBranch));
-                               pbr->pc = pc;
-                               pbr->next = NULL;
-                               
-                               PCI(pcnext)->label = pBranchAppend(PCI(pcnext)->label,pbr);
-                               
-                       } else {
-                               fprintf(stderr, "WARNING: couldn't associate label %s with an instruction\n",PCL(pc)->label);
-                       }
-               } else if(pc->type == PC_CSOURCE) {
-                       
-                       /* merge the source line symbolic info into the next instruction */
-                       if((pcnext = findNextInstruction(pc) )) {
-                               
-                               // Unlink the pCode label from it's pCode chain
-                               unlinkpCode(pc);
-                               PCI(pcnext)->cline = PCCS(pc);
-                               //fprintf(stderr, "merging CSRC\n");
-                               //genericPrint(stderr,pcnext);
-                       }
-                       
-               }
-               pc = pcn;
-       }
-       pBlockRemoveUnusedLabels(pb);
-       
+  pBranch *pbr;
+  pCode *pc, *pcnext=NULL;
+  
+  if(!pb)
+    return;
+  
+  /* First, Try to remove any unused labels */
+  //pBlockRemoveUnusedLabels(pb);
+  
+  /* Now loop through the pBlock and merge the labels with the opcodes */
+  
+  pc = pb->pcHead;
+  //  for(pc = pb->pcHead; pc; pc = pc->next) {
+  
+  while(pc) {
+    pCode *pcn = pc->next;
+    
+    if(pc->type == PC_LABEL) {
+      
+      //fprintf(stderr," checking merging label %s\n",PCL(pc)->label);
+      //fprintf(stderr,"Checking label key = %d\n",PCL(pc)->key);
+      if((pcnext = findNextInstruction(pc) )) {
+        
+        // Unlink the pCode label from it's pCode chain
+        unlinkpCode(pc);
+        
+        //fprintf(stderr,"Merged label key = %d\n",PCL(pc)->key);
+        // And link it into the instruction's pBranch labels. (Note, since
+        // it's possible to have multiple labels associated with one instruction
+        // we must provide a means to accomodate the additional labels. Thus
+        // the labels are placed into the singly-linked list "label" as 
+        // opposed to being a single member of the pCodeInstruction.)
+        
+        //_ALLOC(pbr,sizeof(pBranch));
+        pbr = Safe_calloc(1,sizeof(pBranch));
+        pbr->pc = pc;
+        pbr->next = NULL;
+        
+        PCI(pcnext)->label = pBranchAppend(PCI(pcnext)->label,pbr);
+        
+      } else {
+        fprintf(stderr, "WARNING: couldn't associate label %s with an instruction\n",PCL(pc)->label);
+      }
+    } else if(pc->type == PC_CSOURCE) {
+      
+      /* merge the source line symbolic info into the next instruction */
+      if((pcnext = findNextInstruction(pc) )) {
+        
+        // Unlink the pCode label from it's pCode chain
+        unlinkpCode(pc);
+        PCI(pcnext)->cline = PCCS(pc);
+        //fprintf(stderr, "merging CSRC\n");
+        //genericPrint(stderr,pcnext);
+      }
+      
+    }
+    pc = pcn;
+  }
+  pBlockRemoveUnusedLabels(pb);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -5068,26 +5079,26 @@ void pBlockMergeLabels(pBlock *pb)
 int OptimizepCode(char dbName)
 {
 #define MAX_PASSES 4
-       
-       int matches = 0;
-       int passes = 0;
-       pBlock *pb;
-       
-       if(!the_pFile)
-               return 0;
-       
-       DFPRINTF((stderr," Optimizing pCode\n"));
-       
-       do {
-               matches = 0;
-               for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-                       if('*' == dbName || getpBlock_dbName(pb) == dbName)
-                               matches += OptimizepBlock(pb);
-               }
-       }
-       while(matches && ++passes < MAX_PASSES);
-       
-       return matches;
+  
+  int matches = 0;
+  int passes = 0;
+  pBlock *pb;
+  
+  if(!the_pFile)
+    return 0;
+  
+  DFPRINTF((stderr," Optimizing pCode\n"));
+  
+  do {
+    matches = 0;
+    for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+      if('*' == dbName || getpBlock_dbName(pb) == dbName)
+        matches += OptimizepBlock(pb);
+    }
+  }
+  while(matches && ++passes < MAX_PASSES);
+  
+  return matches;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5096,16 +5107,16 @@ int OptimizepCode(char dbName)
 
 pCodeOp *popCopyGPR2Bit(pCodeOp *pc, int bitval)
 {
-       pCodeOp *pcop;
-       
-       pcop = newpCodeOpBit(pc->name, bitval, 0);
-       
-       if( !( (pcop->type == PO_LABEL) ||
-               (pcop->type == PO_LITERAL) ||
-               (pcop->type == PO_STR) ))
-               PCOR(pcop)->r = PCOR(pc)->r;  /* This is dangerous... */
-       
-       return pcop;
+  pCodeOp *pcop;
+  
+  pcop = newpCodeOpBit(pc->name, bitval, 0);
+  
+  if( !( (pcop->type == PO_LABEL) ||
+    (pcop->type == PO_LITERAL) ||
+    (pcop->type == PO_STR) ))
+    PCOR(pcop)->r = PCOR(pc)->r;  /* This is dangerous... */
+  
+  return pcop;
 }
 
 
@@ -5113,84 +5124,84 @@ pCodeOp *popCopyGPR2Bit(pCodeOp *pc, int bitval)
 /*-----------------------------------------------------------------*/
 static void FixRegisterBanking(pBlock *pb,int cur_bank)
 {
-       pCode *pc;
-       int firstBank = 'U';
-       
-       if(!pb)
-               return;
-       
-       for (pc=pb->pcHead; pc; pc=pc->next) {
-               if (isPCFL(pc)) {
-                       firstBank = PCFL(pc)->firstBank;
-                       break;
-               }
-       }
-       if (firstBank != 'U') {
-               /* This block has already been done */
-               if (firstBank != cur_bank) {
-                       /* This block has started with a different bank - must adjust it */ 
-                       if ((firstBank != -1)&&(firstBank != 'E')) { /* The first bank start off unknown or extern then need not worry as banksel will be called */
-                               while (pc) {
-                                       if (isPCI(pc)) {
-                                               regs *reg = getRegFromInstruction(pc);
-                                               if (reg) {
-                                                       DoBankSelect(pc,cur_bank);
-                                               }
-                                       }
-                                       pc = pc->next;
-                               }
-                       }
-               }
-               return;
-       }
-       
-       /* loop through all of the pCodes within this pblock setting the bank selection, ignoring any branching */
-       LastRegIdx = -1;
-       cur_bank = -1;
-       for (pc=pb->pcHead; pc; pc=pc->next) {
-               if (isPCFL(pc)) {
-                       PCFL(pc)->firstBank = cur_bank;
-                       continue;
-               }
-               cur_bank = DoBankSelect(pc,cur_bank);
-       }
-       
-       /* Trace through branches and set the bank selection as required. */
-       LastRegIdx = -1;
-       cur_bank = -1;
-       for (pc=pb->pcHead; pc; pc=pc->next) {
-               if (isPCFL(pc)) {
-                       PCFL(pc)->firstBank = cur_bank;
-                       continue;
-               }
-               if (isPCI(pc)) {
-                       if (PCI(pc)->op == POC_GOTO) {
-                               int lastRegIdx = LastRegIdx;
-                               pCode *pcb = pc;
-                               /* Trace through branch */
-                               pCode *pcl = findLabel(PCOLAB(PCI(pcb)->pcop));
-                               while (pcl) {
-                                       if (isPCI(pcl)) {
-                                               regs *reg = getRegFromInstruction(pcl);
-                                               if (reg) {
-                                                       int bankUnknown = -1;
-                                                       if (IsBankChange(pcl,reg,&bankUnknown)) /* Look for any bank change */
-                                                               break;
-                                                       if (cur_bank != DoBankSelect(pcl,cur_bank)) /* Set bank selection if necessary */
-                                                               break;
-                                               }
-                                       }
-                                       pcl = pcl->next;
-                               }
-                               LastRegIdx = lastRegIdx;
-                       } else {
-                               /* Keep track out current bank */
-                               regs *reg = getRegFromInstruction(pc);
-                               if (reg)
-                                       IsBankChange(pc,reg,&cur_bank);
-                       }
-               }
-       }
+  pCode *pc;
+  int firstBank = 'U';
+  
+  if(!pb)
+    return;
+  
+  for (pc=pb->pcHead; pc; pc=pc->next) {
+    if (isPCFL(pc)) {
+      firstBank = PCFL(pc)->firstBank;
+      break;
+    }
+  }
+  if (firstBank != 'U') {
+    /* This block has already been done */
+    if (firstBank != cur_bank) {
+      /* This block has started with a different bank - must adjust it */ 
+      if ((firstBank != -1)&&(firstBank != 'E')) { /* The first bank start off unknown or extern then need not worry as banksel will be called */
+        while (pc) {
+          if (isPCI(pc)) {
+            regs *reg = getRegFromInstruction(pc);
+            if (reg) {
+              DoBankSelect(pc,cur_bank);
+            }
+          }
+          pc = pc->next;
+        }
+      }
+    }
+    return;
+  }
+  
+  /* loop through all of the pCodes within this pblock setting the bank selection, ignoring any branching */
+  LastRegIdx = -1;
+  cur_bank = -1;
+  for (pc=pb->pcHead; pc; pc=pc->next) {
+    if (isPCFL(pc)) {
+      PCFL(pc)->firstBank = cur_bank;
+      continue;
+    }
+    cur_bank = DoBankSelect(pc,cur_bank);
+  }
+  
+  /* Trace through branches and set the bank selection as required. */
+  LastRegIdx = -1;
+  cur_bank = -1;
+  for (pc=pb->pcHead; pc; pc=pc->next) {
+    if (isPCFL(pc)) {
+      PCFL(pc)->firstBank = cur_bank;
+      continue;
+    }
+    if (isPCI(pc)) {
+      if (PCI(pc)->op == POC_GOTO) {
+        int lastRegIdx = LastRegIdx;
+        pCode *pcb = pc;
+        /* Trace through branch */
+        pCode *pcl = findLabel(PCOLAB(PCI(pcb)->pcop));
+        while (pcl) {
+          if (isPCI(pcl)) {
+            regs *reg = getRegFromInstruction(pcl);
+            if (reg) {
+              int bankUnknown = -1;
+              if (IsBankChange(pcl,reg,&bankUnknown)) /* Look for any bank change */
+                break;
+              if (cur_bank != DoBankSelect(pcl,cur_bank)) /* Set bank selection if necessary */
+                break;
+            }
+          }
+          pcl = pcl->next;
+        }
+        LastRegIdx = lastRegIdx;
+      } else {
+        /* Keep track out current bank */
+        regs *reg = getRegFromInstruction(pc);
+        if (reg)
+          IsBankChange(pc,reg,&cur_bank);
+      }
+    }
+  }
 }
 
 
@@ -5198,13 +5209,13 @@ static void FixRegisterBanking(pBlock *pb,int cur_bank)
 /*-----------------------------------------------------------------*/
 void pBlockDestruct(pBlock *pb)
 {
-       
-       if(!pb)
-               return;
-       
-       
-       free(pb);
-       
+  
+  if(!pb)
+    return;
+  
+  
+  free(pb);
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -5214,39 +5225,39 @@ void pBlockDestruct(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void mergepBlocks(char dbName)
 {
-       
-       pBlock *pb, *pbmerged = NULL,*pbn;
-       
-       pb = the_pFile->pbHead;
-       
-       //fprintf(stderr," merging blocks named %c\n",dbName);
-       while(pb) {
-               
-               pbn = pb->next;
-               //fprintf(stderr,"looking at %c\n",getpBlock_dbName(pb));
-               if( getpBlock_dbName(pb) == dbName) {
-                       
-                       //fprintf(stderr," merged block %c\n",dbName);
-                       
-                       if(!pbmerged) {
-                               pbmerged = pb;
-                       } else {
-                               addpCode2pBlock(pbmerged, pb->pcHead);
-                               /* addpCode2pBlock doesn't handle the tail: */
-                               pbmerged->pcTail = pb->pcTail;
-                               
-                               pb->prev->next = pbn;
-                               if(pbn) 
-                                       pbn->prev = pb->prev;
-                               
-                               
-                               pBlockDestruct(pb);
-                       }
-                       //printpBlock(stderr, pbmerged);
-               
-               pb = pbn;
-       }
-       
+  
+  pBlock *pb, *pbmerged = NULL,*pbn;
+  
+  pb = the_pFile->pbHead;
+  
+  //fprintf(stderr," merging blocks named %c\n",dbName);
+  while(pb) {
+    
+    pbn = pb->next;
+    //fprintf(stderr,"looking at %c\n",getpBlock_dbName(pb));
+    if( getpBlock_dbName(pb) == dbName) {
+      
+      //fprintf(stderr," merged block %c\n",dbName);
+      
+      if(!pbmerged) {
+        pbmerged = pb;
+      } else {
+        addpCode2pBlock(pbmerged, pb->pcHead);
+        /* addpCode2pBlock doesn't handle the tail: */
+        pbmerged->pcTail = pb->pcTail;
+        
+        pb->prev->next = pbn;
+        if(pbn) 
+          pbn->prev = pb->prev;
+        
+        
+        pBlockDestruct(pb);
+      }
+      //printpBlock(stderr, pbmerged);
+    } 
+    pb = pbn;
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -5261,114 +5272,114 @@ void mergepBlocks(char dbName)
 
 void AnalyzeFlow(int level)
 {
-       static int times_called=0;
-       
-       pBlock *pb;
-       
-       if(!the_pFile)
-               return;
-       
-       
-       /* if this is not the first time this function has been called,
-       then clean up old flow information */
-       if(times_called++) {
-               for(pb = the_pFile->pbHead; pb; pb = pb->next)
-                       unBuildFlow(pb);
-               
-               RegsUnMapLiveRanges();
-               
-       }
-       
-       GpcFlowSeq = 1;
-       
-       /* Phase 2 - Flow Analysis - Register Banking
-       *
-       * In this phase, the individual flow blocks are examined
-       * and register banking is fixed.
-       */
-       
-       //for(pb = the_pFile->pbHead; pb; pb = pb->next)
-       //FixRegisterBanking(pb);
-       
-       /* Phase 2 - Flow Analysis
-       *
-       * In this phase, the pCode is partition into pCodeFlow 
-       * blocks. The flow blocks mark the points where a continuous
-       * stream of instructions changes flow (e.g. because of
-       * a call or goto or whatever).
-       */
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               BuildFlow(pb);
-       
-       
-       /* Phase 2 - Flow Analysis - linking flow blocks
-       *
-       * In this phase, the individual flow blocks are examined
-       * to determine their order of excution.
-       */
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               LinkFlow(pb);
-       
-       /* Phase 3 - Flow Analysis - Flow Tree
-       *
-       * In this phase, the individual flow blocks are examined
-       * to determine their order of excution.
-       */
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               BuildFlowTree(pb);
-       
-       
-       /* Phase x - Flow Analysis - Used Banks
-       *
-       * In this phase, the individual flow blocks are examined
-       * to determine the Register Banks they use
-       */
-       
-       //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
-       //    FixBankFlow(pb);
-       
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               pCodeRegMapLiveRanges(pb);
-       
-       RemoveUnusedRegisters();
-       
-       //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
-       pCodeRegOptimizeRegUsage(level);
-       
-       OptimizepCode('*');
-       
-       
-       /*
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-       DumpFlow(pb);
-       */
-       /* debug stuff */
-       /*
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               pCode *pcflow;
-               for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-               (pcflow = findNextpCode(pcflow, PC_FLOW)) != NULL;
-               pcflow = pcflow->next) {
-               
-               FillFlow(PCFL(pcflow));
-               }
-       }
-       */
-       /*
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               pCode *pcflow;
-               for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
-               (pcflow = findNextpCode(pcflow, PC_FLOW)) != NULL;
-               pcflow = pcflow->next) {
-       
-               FlowStats(PCFL(pcflow));
-               }
-       }
-       */
+  static int times_called=0;
+  
+  pBlock *pb;
+  
+  if(!the_pFile)
+    return;
+  
+  
+  /* if this is not the first time this function has been called,
+  then clean up old flow information */
+  if(times_called++) {
+    for(pb = the_pFile->pbHead; pb; pb = pb->next)
+      unBuildFlow(pb);
+    
+    RegsUnMapLiveRanges();
+    
+  }
+  
+  GpcFlowSeq = 1;
+  
+  /* Phase 2 - Flow Analysis - Register Banking
+  *
+  * In this phase, the individual flow blocks are examined
+  * and register banking is fixed.
+  */
+  
+  //for(pb = the_pFile->pbHead; pb; pb = pb->next)
+  //FixRegisterBanking(pb);
+  
+  /* Phase 2 - Flow Analysis
+  *
+  * In this phase, the pCode is partition into pCodeFlow 
+  * blocks. The flow blocks mark the points where a continuous
+  * stream of instructions changes flow (e.g. because of
+  * a call or goto or whatever).
+  */
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    BuildFlow(pb);
+  
+  
+  /* Phase 2 - Flow Analysis - linking flow blocks
+  *
+  * In this phase, the individual flow blocks are examined
+  * to determine their order of excution.
+  */
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    LinkFlow(pb);
+  
+  /* Phase 3 - Flow Analysis - Flow Tree
+  *
+  * In this phase, the individual flow blocks are examined
+  * to determine their order of excution.
+  */
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    BuildFlowTree(pb);
+  
+  
+  /* Phase x - Flow Analysis - Used Banks
+  *
+  * In this phase, the individual flow blocks are examined
+  * to determine the Register Banks they use
+  */
+  
+  //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+  //    FixBankFlow(pb);
+  
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    pCodeRegMapLiveRanges(pb);
+  
+  RemoveUnusedRegisters();
+  
+  //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+  pCodeRegOptimizeRegUsage(level);
+  
+  OptimizepCode('*');
+  
+  
+  /*
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+  DumpFlow(pb);
+  */
+  /* debug stuff */
+  /*
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    pCode *pcflow;
+    for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+    (pcflow = findNextpCode(pcflow, PC_FLOW)) != NULL;
+    pcflow = pcflow->next) {
+    
+    FillFlow(PCFL(pcflow));
+    }
+  }
+  */
+  /*
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    pCode *pcflow;
+    for( pcflow = findNextpCode(pb->pcHead, PC_FLOW); 
+    (pcflow = findNextpCode(pcflow, PC_FLOW)) != NULL;
+    pcflow = pcflow->next) {
+  
+    FlowStats(PCFL(pcflow));
+    }
+  }
+  */
 }
 
 /*-----------------------------------------------------------------*/
@@ -5379,41 +5390,41 @@ void AnalyzeFlow(int level)
 
 void AnalyzeBanking(void)
 {
-       pBlock  *pb;
-       
-       if(!picIsInitialized()) {
-               fprintf(stderr,"Temporary ERROR: at the moment you have to use\n");
-               fprintf(stderr,"an include file create by inc2h.pl. See SDCC source:\n");
-               fprintf(stderr,"support/scripts/inc2h.pl\n");
-               fprintf(stderr,"this is a nuisance bug that will be fixed shortly\n");
-               
-               exit(1);
-       }
-       
-       /* Phase x - Flow Analysis - Used Banks
-       *
-       * In this phase, the individual flow blocks are examined
-       * to determine the Register Banks they use
-       */
-       
-       AnalyzeFlow(0);
-       AnalyzeFlow(1);
-       
-       //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
-       //    BanksUsedFlow(pb);
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               FixRegisterBanking(pb,-1); // cur_bank is unknown
-       
+  pBlock  *pb;
+  
+  if(!picIsInitialized()) {
+    fprintf(stderr,"Temporary ERROR: at the moment you have to use\n");
+    fprintf(stderr,"an include file create by inc2h.pl. See SDCC source:\n");
+    fprintf(stderr,"support/scripts/inc2h.pl\n");
+    fprintf(stderr,"this is a nuisance bug that will be fixed shortly\n");
+    
+    exit(1);
+  }
+  
+  /* Phase x - Flow Analysis - Used Banks
+  *
+  * In this phase, the individual flow blocks are examined
+  * to determine the Register Banks they use
+  */
+  
+  AnalyzeFlow(0);
+  AnalyzeFlow(1);
+  
+  //  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+  //    BanksUsedFlow(pb);
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    FixRegisterBanking(pb,-1); // cur_bank is unknown
+  
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 DEFSETFUNC (resetrIdx)
 {
-       if (!((regs *)item)->isFixed)
-               ((regs *)item)->rIdx = 0;
-       
-       return 0;
+  if (!((regs *)item)->isFixed)
+    ((regs *)item)->rIdx = 0;
+  
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5422,97 +5433,97 @@ DEFSETFUNC (resetrIdx)
 
 void InitReuseReg(void)
 {
-       /* Find end of statically allocated variables for start idx */
-       unsigned maxIdx = 0x20; /* Start from begining of GPR. Note may not be 0x20 on some PICs */
-       regs *r;
-       for (r = setFirstItem(dynDirectRegs); r; r = setNextItem(dynDirectRegs)) {
-               if (r->type != REG_SFR) {
-                       maxIdx += r->size; /* Increment for all statically allocated variables */
-               }
-       }
-       peakIdx = maxIdx;
-       applyToSet(dynAllocRegs,resetrIdx); /* Reset all rIdx to zero. */
+  /* Find end of statically allocated variables for start idx */
+  unsigned maxIdx = 0x20; /* Start from begining of GPR. Note may not be 0x20 on some PICs */
+  regs *r;
+  for (r = setFirstItem(dynDirectRegs); r; r = setNextItem(dynDirectRegs)) {
+    if (r->type != REG_SFR) {
+      maxIdx += r->size; /* Increment for all statically allocated variables */
+    }
+  }
+  peakIdx = maxIdx;
+  applyToSet(dynAllocRegs,resetrIdx); /* Reset all rIdx to zero. */
 }
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 static unsigned register_reassign(pBlock *pb, unsigned idx)
 {
-       pCode *pc;
-       
-       /* check recursion */
-       pc = setFirstItem(pb->function_entries);
-       if(!pc)
-               return idx;
-       
-       pb->visited = 1;
-       
-       DFPRINTF((stderr," reassigning registers for function \"%s\"\n",PCF(pc)->fname));
-       
-       if (pb->tregisters) {
-               regs *r;
-               for (r = setFirstItem(pb->tregisters); r; r = setNextItem(pb->tregisters)) {
-                       if (r->type == REG_GPR) {
-                               if (!r->isFixed) {
-                                       if (r->rIdx < (int)idx) {
-                                               char s[20];
-                                               r->rIdx = idx++;
-                                               if (peakIdx < idx) peakIdx = idx;
-                                               sprintf(s,"r0x%02X", r->rIdx);
-                                               DFPRINTF((stderr," reassigning register \"%s\" to \"%s\"\n",r->name,s));
-                                               free(r->name);
-                                               r->name = Safe_strdup(s);
-                                       }
-                               }
-                       }
-               }
-       }
-       for(pc = setFirstItem(pb->function_calls); pc; pc = setNextItem(pb->function_calls)) {
-               
-               if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
-                       char *dest = get_op_from_instruction(PCI(pc));
-                       
-                       pCode *pcn = findFunction(dest);
-                       if(pcn) {
-                               register_reassign(pcn->pb,idx);
-                       }
-               }
-               
-       }
-       
-       return idx;
+  pCode *pc;
+  
+  /* check recursion */
+  pc = setFirstItem(pb->function_entries);
+  if(!pc)
+    return idx;
+  
+  pb->visited = 1;
+  
+  DFPRINTF((stderr," reassigning registers for function \"%s\"\n",PCF(pc)->fname));
+  
+  if (pb->tregisters) {
+    regs *r;
+    for (r = setFirstItem(pb->tregisters); r; r = setNextItem(pb->tregisters)) {
+      if (r->type == REG_GPR) {
+        if (!r->isFixed) {
+          if (r->rIdx < (int)idx) {
+            char s[20];
+            r->rIdx = idx++;
+            if (peakIdx < idx) peakIdx = idx;
+            sprintf(s,"r0x%02X", r->rIdx);
+            DFPRINTF((stderr," reassigning register \"%s\" to \"%s\"\n",r->name,s));
+            free(r->name);
+            r->name = Safe_strdup(s);
+          }
+        }
+      }
+    }
+  }
+  for(pc = setFirstItem(pb->function_calls); pc; pc = setNextItem(pb->function_calls)) {
+    
+    if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
+      char *dest = get_op_from_instruction(PCI(pc));
+      
+      pCode *pcn = findFunction(dest);
+      if(pcn) {
+        register_reassign(pcn->pb,idx);
+      }
+    }
+    
+  }
+  
+  return idx;
 }
 
 /*------------------------------------------------------------------*/
 /* ReuseReg were call tree permits                                  */
 /*                                                                  */
-/*     Re-allocate the GPR for optimum reuse for a given pblock        */ 
-/*     eg  if a function m() calls function f1() and f2(), where f1    */
-/*     allocates a local variable vf1 and f2 allocates a local         */
-/*     variable vf2. Then providing f1 and f2 do not call each other   */
-/*     they may share the same general purpose registers for vf1 and   */
-/*     vf2.                                                            */
-/*     This is done by first setting the the regs rIdx to start after  */
-/*     all the global variables, then walking through the call tree    */
-/*     renaming the registers to match their new idx and incrementng   */
-/*     it as it goes. If a function has already been called it will    */
-/*     only rename the registers if it has already used up those       */
-/*     registers ie rIdx of the function's registers is lower than the */
-/*     current rIdx. That way the register will not be reused while    */
-/*     still being used by an eariler function call.                   */
+/*  Re-allocate the GPR for optimum reuse for a given pblock        */ 
+/*  eg  if a function m() calls function f1() and f2(), where f1    */
+/*  allocates a local variable vf1 and f2 allocates a local         */
+/*  variable vf2. Then providing f1 and f2 do not call each other   */
+/*  they may share the same general purpose registers for vf1 and   */
+/*  vf2.                                                            */
+/*  This is done by first setting the the regs rIdx to start after  */
+/*  all the global variables, then walking through the call tree    */
+/*  renaming the registers to match their new idx and incrementng   */
+/*  it as it goes. If a function has already been called it will    */
+/*  only rename the registers if it has already used up those       */
+/*  registers ie rIdx of the function's registers is lower than the */
+/*  current rIdx. That way the register will not be reused while    */
+/*  still being used by an eariler function call.                   */
 /*                                                                  */
-/*     Note for this to work the fucntions need to be declared static. */
+/*  Note for this to work the fucntions need to be declared static. */
 /*                                                                  */
 /*------------------------------------------------------------------*/
 void ReuseReg(void)
 {
-       pBlock  *pb;
-       InitReuseReg();
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               /* Non static functions can be called from other modules so their registers must reassign */
-               if (pb->function_entries&&(PCF(setFirstItem(pb->function_entries))->isPublic||!pb->visited))
-                       register_reassign(pb,peakIdx);
-       }
+  pBlock  *pb;
+  InitReuseReg();
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    /* Non static functions can be called from other modules so their registers must reassign */
+    if (pb->function_entries&&(PCF(setFirstItem(pb->function_entries))->isPublic||!pb->visited))
+      register_reassign(pb,peakIdx);
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -5522,74 +5533,74 @@ void ReuseReg(void)
 
 void buildCallTree(void    )
 {
-       pBranch *pbr;
-       pBlock  *pb;
-       pCode   *pc;
-       
-       if(!the_pFile)
-               return;
-       
-       /* Now build the call tree.
-       First we examine all of the pCodes for functions.
-       Keep in mind that the function boundaries coincide
-       with pBlock boundaries. 
-       
-       The algorithm goes something like this:
-       We have two nested loops. The outer loop iterates
-       through all of the pBlocks/functions. The inner
-       loop iterates through all of the pCodes for
-       a given pBlock. When we begin iterating through
-       a pBlock, the variable pc_fstart, pCode of the start
-       of a function, is cleared. We then search for pCodes
-       of type PC_FUNCTION. When one is encountered, we
-       initialize pc_fstart to this and at the same time
-       associate a new pBranch object that signifies a 
-       branch entry. If a return is found, then this signifies
-       a function exit point. We'll link the pCodes of these
-       returns to the matching pc_fstart.
-
-       When we're done, a doubly linked list of pBranches
-       will exist. The head of this list is stored in
-       `the_pFile', which is the meta structure for all
-       of the pCode. Look at the printCallTree function
-       on how the pBranches are linked together.
-
-       */
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               pCode *pc_fstart=NULL;
-               for(pc = pb->pcHead; pc; pc = pc->next) {
-                       if(isPCF(pc)) {
-                               pCodeFunction *pcf = PCF(pc);
-                               if (pcf->fname) {
-                                       
-                                       if(STRCASECMP(pcf->fname, "_main") == 0) {
-                                               //fprintf(stderr," found main \n");
-                                               pb->cmemmap = NULL;  /* FIXME do we need to free ? */
-                                               pb->dbName = 'M';
-                                       }
-                                       
-                                       pbr = Safe_calloc(1,sizeof(pBranch));
-                                       pbr->pc = pc_fstart = pc;
-                                       pbr->next = NULL;
-                                       
-                                       the_pFile->functions = pBranchAppend(the_pFile->functions,pbr);
-                                       
-                                       // Here's a better way of doing the same:
-                                       addSet(&pb->function_entries, pc);
-                                       
-                               } else {
-                                       // Found an exit point in a function, e.g. return
-                                       // (Note, there may be more than one return per function)
-                                       if(pc_fstart)
-                                               pBranchLink(PCF(pc_fstart), pcf);
-                                       
-                                       addSet(&pb->function_exits, pc);
-                               }
-                       } else if(isCALL(pc)) {
-                               addSet(&pb->function_calls,pc);
-                       }
-               }
-       }
+  pBranch *pbr;
+  pBlock  *pb;
+  pCode   *pc;
+  
+  if(!the_pFile)
+    return;
+  
+  /* Now build the call tree.
+  First we examine all of the pCodes for functions.
+  Keep in mind that the function boundaries coincide
+  with pBlock boundaries. 
+  
+  The algorithm goes something like this:
+  We have two nested loops. The outer loop iterates
+  through all of the pBlocks/functions. The inner
+  loop iterates through all of the pCodes for
+  a given pBlock. When we begin iterating through
+  a pBlock, the variable pc_fstart, pCode of the start
+  of a function, is cleared. We then search for pCodes
+  of type PC_FUNCTION. When one is encountered, we
+  initialize pc_fstart to this and at the same time
+  associate a new pBranch object that signifies a 
+  branch entry. If a return is found, then this signifies
+  a function exit point. We'll link the pCodes of these
+  returns to the matching pc_fstart.
+
+  When we're done, a doubly linked list of pBranches
+  will exist. The head of this list is stored in
+  `the_pFile', which is the meta structure for all
+  of the pCode. Look at the printCallTree function
+  on how the pBranches are linked together.
+
+  */
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    pCode *pc_fstart=NULL;
+    for(pc = pb->pcHead; pc; pc = pc->next) {
+      if(isPCF(pc)) {
+        pCodeFunction *pcf = PCF(pc);
+        if (pcf->fname) {
+          
+          if(STRCASECMP(pcf->fname, "_main") == 0) {
+            //fprintf(stderr," found main \n");
+            pb->cmemmap = NULL;  /* FIXME do we need to free ? */
+            pb->dbName = 'M';
+          }
+          
+          pbr = Safe_calloc(1,sizeof(pBranch));
+          pbr->pc = pc_fstart = pc;
+          pbr->next = NULL;
+          
+          the_pFile->functions = pBranchAppend(the_pFile->functions,pbr);
+          
+          // Here's a better way of doing the same:
+          addSet(&pb->function_entries, pc);
+          
+        } else {
+          // Found an exit point in a function, e.g. return
+          // (Note, there may be more than one return per function)
+          if(pc_fstart)
+            pBranchLink(PCF(pc_fstart), pcf);
+          
+          addSet(&pb->function_exits, pc);
+        }
+      } else if(isCALL(pc)) {
+        addSet(&pb->function_calls,pc);
+      }
+    }
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -5602,48 +5613,48 @@ void buildCallTree(void    )
 
 void AnalyzepCode(char dbName)
 {
-       pBlock *pb;
-       int i,changes;
-       
-       if(!the_pFile)
-               return;
-       
-       mergepBlocks('D');
-       
-       
-       /* Phase 1 - Register allocation and peep hole optimization
-       *
-       * The first part of the analysis is to determine the registers
-       * that are used in the pCode. Once that is done, the peep rules
-       * are applied to the code. We continue to loop until no more
-       * peep rule optimizations are found (or until we exceed the
-       * MAX_PASSES threshold). 
-       *
-       * When done, the required registers will be determined.
-       *
-       */
-       i = 0;
-       do {
-               
-               DFPRINTF((stderr," Analyzing pCode: PASS #%d\n",i+1));
-               
-               /* First, merge the labels with the instructions */
-               for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-                       if('*' == dbName || getpBlock_dbName(pb) == dbName) {
-                               
-                               DFPRINTF((stderr," analyze and merging block %c\n",dbName));
-                               pBlockMergeLabels(pb);
-                               AnalyzepBlock(pb);
-                       } else {
-                               DFPRINTF((stderr," skipping block analysis dbName=%c blockname=%c\n",dbName,getpBlock_dbName));
-                       }
-               }
-               
-               changes = OptimizepCode(dbName);
-               
-       } while(changes && (i++ < MAX_PASSES));
-       
-       buildCallTree();
+  pBlock *pb;
+  int i,changes;
+  
+  if(!the_pFile)
+    return;
+  
+  mergepBlocks('D');
+  
+  
+  /* Phase 1 - Register allocation and peep hole optimization
+  *
+  * The first part of the analysis is to determine the registers
+  * that are used in the pCode. Once that is done, the peep rules
+  * are applied to the code. We continue to loop until no more
+  * peep rule optimizations are found (or until we exceed the
+  * MAX_PASSES threshold). 
+  *
+  * When done, the required registers will be determined.
+  *
+  */
+  i = 0;
+  do {
+    
+    DFPRINTF((stderr," Analyzing pCode: PASS #%d\n",i+1));
+    
+    /* First, merge the labels with the instructions */
+    for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+      if('*' == dbName || getpBlock_dbName(pb) == dbName) {
+        
+        DFPRINTF((stderr," analyze and merging block %c\n",dbName));
+        pBlockMergeLabels(pb);
+        AnalyzepBlock(pb);
+      } else {
+        DFPRINTF((stderr," skipping block analysis dbName=%c blockname=%c\n",dbName,getpBlock_dbName));
+      }
+    }
+    
+    changes = OptimizepCode(dbName);
+    
+  } while(changes && (i++ < MAX_PASSES));
+  
+  buildCallTree();
 }
 
 /*-----------------------------------------------------------------*/
@@ -5652,11 +5663,11 @@ void AnalyzepCode(char dbName)
 /*-----------------------------------------------------------------*/
 bool ispCodeFunction(pCode *pc)
 {
-       
-       if(pc && pc->type == PC_FUNCTION && PCF(pc)->fname)
-               return 1;
-       
-       return 0;
+  
+  if(pc && pc->type == PC_FUNCTION && PCF(pc)->fname)
+    return 1;
+  
+  return 0;
 }
 
 /*-----------------------------------------------------------------*/
@@ -5667,86 +5678,86 @@ bool ispCodeFunction(pCode *pc)
 /*-----------------------------------------------------------------*/
 pCode *findFunction(char *fname)
 {
-       pBlock *pb;
-       pCode *pc;
-       if(!fname)
-               return NULL;
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               
-               pc = setFirstItem(pb->function_entries);
-               while(pc) {
-                       
-                       if((pc->type == PC_FUNCTION) &&
-                               (PCF(pc)->fname) && 
-                               (strcmp(fname, PCF(pc)->fname)==0))
-                               return pc;
-                       
-                       pc = setNextItem(pb->function_entries);
-                       
-               }
-               
-       }
-       return NULL;
+  pBlock *pb;
+  pCode *pc;
+  if(!fname)
+    return NULL;
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    
+    pc = setFirstItem(pb->function_entries);
+    while(pc) {
+      
+      if((pc->type == PC_FUNCTION) &&
+        (PCF(pc)->fname) && 
+        (strcmp(fname, PCF(pc)->fname)==0))
+        return pc;
+      
+      pc = setNextItem(pb->function_entries);
+      
+    }
+    
+  }
+  return NULL;
 }
 
 void MarkUsedRegisters(set *regset)
 {
-       
-       regs *r1,*r2;
-       
-       for(r1=setFirstItem(regset); r1; r1=setNextItem(regset)) {
-               r2 = pic14_regWithIdx(r1->rIdx);
-               if (r2) {
-                       r2->isFree = 0;
-                       r2->wasUsed = 1;
-               }
-       }
+  
+  regs *r1,*r2;
+  
+  for(r1=setFirstItem(regset); r1; r1=setNextItem(regset)) {
+    r2 = pic14_regWithIdx(r1->rIdx);
+    if (r2) {
+      r2->isFree = 0;
+      r2->wasUsed = 1;
+    }
+  }
 }
 
 void pBlockStats(FILE *of, pBlock *pb)
 {
-       
-       pCode *pc;
-       regs  *r;
-       
-       fprintf(of,";***\n;  pBlock Stats: dbName = %c\n;***\n",getpBlock_dbName(pb));
-       
-       // for now just print the first element of each set
-       pc = setFirstItem(pb->function_entries);
-       if(pc) {
-               fprintf(of,";entry:  ");
-               pc->print(of,pc);
-       }
-       pc = setFirstItem(pb->function_exits);
-       if(pc) {
-               fprintf(of,";has an exit\n");
-               //pc->print(of,pc);
-       }
-       
-       pc = setFirstItem(pb->function_calls);
-       if(pc) {
-               fprintf(of,";functions called:\n");
-               
-               while(pc) {
-                       if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
-                               fprintf(of,";   %s\n",get_op_from_instruction(PCI(pc)));
-                       }
-                       pc = setNextItem(pb->function_calls);
-               }
-       }
-       
-       r = setFirstItem(pb->tregisters);
-       if(r) {
-               int n = elementsInSet(pb->tregisters);
-               
-               fprintf(of,";%d compiler assigned register%c:\n",n, ( (n!=1) ? 's' : ' '));
-               
-               while (r) {
-                       fprintf(of,";   %s\n",r->name);
-                       r = setNextItem(pb->tregisters);
-               }
-       }
+  
+  pCode *pc;
+  regs  *r;
+  
+  fprintf(of,";***\n;  pBlock Stats: dbName = %c\n;***\n",getpBlock_dbName(pb));
+  
+  // for now just print the first element of each set
+  pc = setFirstItem(pb->function_entries);
+  if(pc) {
+    fprintf(of,";entry:  ");
+    pc->print(of,pc);
+  }
+  pc = setFirstItem(pb->function_exits);
+  if(pc) {
+    fprintf(of,";has an exit\n");
+    //pc->print(of,pc);
+  }
+  
+  pc = setFirstItem(pb->function_calls);
+  if(pc) {
+    fprintf(of,";functions called:\n");
+    
+    while(pc) {
+      if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
+        fprintf(of,";   %s\n",get_op_from_instruction(PCI(pc)));
+      }
+      pc = setNextItem(pb->function_calls);
+    }
+  }
+  
+  r = setFirstItem(pb->tregisters);
+  if(r) {
+    int n = elementsInSet(pb->tregisters);
+    
+    fprintf(of,";%d compiler assigned register%c:\n",n, ( (n!=1) ? 's' : ' '));
+    
+    while (r) {
+      fprintf(of,";   %s\n",r->name);
+      r = setNextItem(pb->tregisters);
+    }
+  }
 }
 
 /*-----------------------------------------------------------------*/
@@ -5754,18 +5765,18 @@ void pBlockStats(FILE *of, pBlock *pb)
 #if 0
 static void sequencepCode(void)
 {
-       pBlock *pb;
-       pCode *pc;
-       
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               
-               pb->seq = GpCodeSequenceNumber+1;
-               
-               for( pc = pb->pcHead; pc; pc = pc->next)
-                       pc->seq = ++GpCodeSequenceNumber;
-       }
-       
+  pBlock *pb;
+  pCode *pc;
+  
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    
+    pb->seq = GpCodeSequenceNumber+1;
+    
+    for( pc = pb->pcHead; pc; pc = pc->next)
+      pc->seq = ++GpCodeSequenceNumber;
+  }
+  
 }
 #endif
 
@@ -5774,108 +5785,108 @@ static void sequencepCode(void)
 /*
 set *register_usage(pBlock *pb)
 {
-       pCode *pc,*pcn;
-       set *registers=NULL;
-       set *registersInCallPath = NULL;
-       
-       / * check recursion * /
-
-       pc = setFirstItem(pb->function_entries);
-       
-       if(!pc)
-               return registers;
-       
-       pb->visited = 1;
-       
-       if(pc->type != PC_FUNCTION)
-               fprintf(stderr,"%s, first pc is not a function???\n",__FUNCTION__);
-
-       pc = setFirstItem(pb->function_calls);
-       for( ; pc; pc = setNextItem(pb->function_calls)) {
-
-               if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
-                       char *dest = get_op_from_instruction(PCI(pc));
-
-                       pcn = findFunction(dest);
-                       if(pcn) 
-                               registersInCallPath = register_usage(pcn->pb);
-               } else
-                       fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
+  pCode *pc,*pcn;
+  set *registers=NULL;
+  set *registersInCallPath = NULL;
+  
+  / * check recursion * /
 
-       }
+  pc = setFirstItem(pb->function_entries);
+  
+  if(!pc)
+    return registers;
+  
+  pb->visited = 1;
+  
+  if(pc->type != PC_FUNCTION)
+    fprintf(stderr,"%s, first pc is not a function???\n",__FUNCTION__);
+
+  pc = setFirstItem(pb->function_calls);
+  for( ; pc; pc = setNextItem(pb->function_calls)) {
+
+    if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
+      char *dest = get_op_from_instruction(PCI(pc));
+
+      pcn = findFunction(dest);
+      if(pcn) 
+        registersInCallPath = register_usage(pcn->pb);
+    } else
+      fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
+
+  }
 
 #ifdef PCODE_DEBUG
-       pBlockStats(stderr,pb);  // debug
+  pBlockStats(stderr,pb);  // debug
 #endif
 
-       // Mark the registers in this block as used.
+  // Mark the registers in this block as used.
 
-       MarkUsedRegisters(pb->tregisters);
-       if(registersInCallPath) {
-               / * registers were used in the functions this pBlock has called * /
-               / * so now, we need to see if these collide with the ones we are * /
-               / * using here * /
+  MarkUsedRegisters(pb->tregisters);
+  if(registersInCallPath) {
+    / * registers were used in the functions this pBlock has called * /
+    / * so now, we need to see if these collide with the ones we are * /
+    / * using here * /
 
-               regs *r1,*r2, *newreg;
+    regs *r1,*r2, *newreg;
 
-               DFPRINTF((stderr,"comparing registers\n"));
+    DFPRINTF((stderr,"comparing registers\n"));
 
-               r1 = setFirstItem(registersInCallPath);
-               while(r1) {
-                       if (r1->type != REG_STK) {
-                               r2 = setFirstItem(pb->tregisters);
+    r1 = setFirstItem(registersInCallPath);
+    while(r1) {
+      if (r1->type != REG_STK) {
+        r2 = setFirstItem(pb->tregisters);
 
-                               while(r2 && (r2->type != REG_STK)) {
+        while(r2 && (r2->type != REG_STK)) {
 
-                                       if(r2->rIdx == r1->rIdx) {
-                                               newreg = pic14_findFreeReg(REG_GPR);
+          if(r2->rIdx == r1->rIdx) {
+            newreg = pic14_findFreeReg(REG_GPR);
 
 
-                                               if(!newreg) {
-                                                       DFPRINTF((stderr,"Bummer, no more registers.\n"));
-                                                       exit(1);
-                                               }
+            if(!newreg) {
+              DFPRINTF((stderr,"Bummer, no more registers.\n"));
+              exit(1);
+            }
 
-                                               DFPRINTF((stderr,"Cool found register collision nIdx=%d moving to %d\n",
-                                                       r1->rIdx, newreg->rIdx));
-                                               r2->rIdx = newreg->rIdx;
-                                               if(newreg->name)
-                                                       r2->name = Safe_strdup(newreg->name);
-                                               else
-                                                       r2->name = NULL;
-                                               newreg->isFree = 0;
-                                               newreg->wasUsed = 1;
-                                       }
-                                       r2 = setNextItem(pb->tregisters);
-                               }
-                       }
+            DFPRINTF((stderr,"Cool found register collision nIdx=%d moving to %d\n",
+              r1->rIdx, newreg->rIdx));
+            r2->rIdx = newreg->rIdx;
+            if(newreg->name)
+              r2->name = Safe_strdup(newreg->name);
+            else
+              r2->name = NULL;
+            newreg->isFree = 0;
+            newreg->wasUsed = 1;
+          }
+          r2 = setNextItem(pb->tregisters);
+        }
+      }
 
-                       r1 = setNextItem(registersInCallPath);
-               }
+      r1 = setNextItem(registersInCallPath);
+    }
 
-               / * Collisions have been resolved. Now free the registers in the call path * /
-               r1 = setFirstItem(registersInCallPath);
-               while(r1) {
-                       newreg = pic14_regWithIdx(r1->rIdx);
-                       if (newreg) newreg->isFree = 1;
-                               r1 = setNextItem(registersInCallPath);
-               }
+    / * Collisions have been resolved. Now free the registers in the call path * /
+    r1 = setFirstItem(registersInCallPath);
+    while(r1) {
+      newreg = pic14_regWithIdx(r1->rIdx);
+      if (newreg) newreg->isFree = 1;
+        r1 = setNextItem(registersInCallPath);
+    }
 
-       }// else
-       //    MarkUsedRegisters(pb->registers);
+  }// else
+  //    MarkUsedRegisters(pb->registers);
 
-       registers = unionSets(pb->tregisters, registersInCallPath, THROW_NONE);
+  registers = unionSets(pb->tregisters, registersInCallPath, THROW_NONE);
 #ifdef PCODE_DEBUG
-       if(registers) 
-               DFPRINTF((stderr,"returning regs\n"));
-       else
-               DFPRINTF((stderr,"not returning regs\n"));
+  if(registers) 
+    DFPRINTF((stderr,"returning regs\n"));
+  else
+    DFPRINTF((stderr,"not returning regs\n"));
 
-       DFPRINTF((stderr,"pBlock after register optim.\n"));
-       pBlockStats(stderr,pb);  // debug
+  DFPRINTF((stderr,"pBlock after register optim.\n"));
+  pBlockStats(stderr,pb);  // debug
 #endif
 
-       return registers;
+  return registers;
 }
 */
 
@@ -5885,47 +5896,47 @@ set *register_usage(pBlock *pb)
 /*-----------------------------------------------------------------*/
 void pct2(FILE *of,pBlock *pb,int indent)
 {
-       pCode *pc,*pcn;
-       int i;
-       //  set *registersInCallPath = NULL;
-       
-       if(!of)
-               return;
-       
-       if(indent > 10)
-               return; //recursion ?
-       
-       pc = setFirstItem(pb->function_entries);
-       
-       if(!pc)
-               return;
-       
-       pb->visited = 0;
-       
-       for(i=0;i<indent;i++)   // Indentation
-               fputc(' ',of);
-       
-       if(pc->type == PC_FUNCTION)
-               fprintf(of,"%s\n",PCF(pc)->fname);
-       else
-               return;  // ???
-       
-       
-       pc = setFirstItem(pb->function_calls);
-       for( ; pc; pc = setNextItem(pb->function_calls)) {
-               
-               if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
-                       char *dest = get_op_from_instruction(PCI(pc));
-                       
-                       pcn = findFunction(dest);
-                       if(pcn) 
-                               pct2(of,pcn->pb,indent+1);
-               } else
-                       fprintf(of,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
-               
-       }
-       
-       
+  pCode *pc,*pcn;
+  int i;
+  //  set *registersInCallPath = NULL;
+  
+  if(!of)
+    return;
+  
+  if(indent > 10)
+    return; //recursion ?
+  
+  pc = setFirstItem(pb->function_entries);
+  
+  if(!pc)
+    return;
+  
+  pb->visited = 0;
+  
+  for(i=0;i<indent;i++)   // Indentation
+    fputc(' ',of);
+  
+  if(pc->type == PC_FUNCTION)
+    fprintf(of,"%s\n",PCF(pc)->fname);
+  else
+    return;  // ???
+  
+  
+  pc = setFirstItem(pb->function_calls);
+  for( ; pc; pc = setNextItem(pb->function_calls)) {
+    
+    if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL) {
+      char *dest = get_op_from_instruction(PCI(pc));
+      
+      pcn = findFunction(dest);
+      if(pcn) 
+        pct2(of,pcn->pb,indent+1);
+    } else
+      fprintf(of,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
+    
+  }
+  
+  
 }
 
 
@@ -5936,53 +5947,53 @@ void pct2(FILE *of,pBlock *pb,int indent)
 
 void printCallTree(FILE *of)
 {
-       pBranch *pbr;
-       pBlock  *pb;
-       pCode   *pc;
-       
-       if(!the_pFile)
-               return;
-       
-       if(!of)
-               of = stderr;
-       
-       fprintf(of, "\npBlock statistics\n");
-       for(pb = the_pFile->pbHead; pb;  pb = pb->next )
-               pBlockStats(of,pb);
-       
-       
-       
-       fprintf(of,"Call Tree\n");
-       pbr = the_pFile->functions;
-       while(pbr) {
-               if(pbr->pc) {
-                       pc = pbr->pc;
-                       if(!ispCodeFunction(pc))
-                               fprintf(of,"bug in call tree");
-                       
-                       
-                       fprintf(of,"Function: %s\n", PCF(pc)->fname);
-                       
-                       while(pc->next && !ispCodeFunction(pc->next)) {
-                               pc = pc->next;
-                               if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL)
-                                       fprintf(of,"\t%s\n",get_op_from_instruction(PCI(pc)));
-                       }
-               }
-               
-               pbr = pbr->next;
-       }
-       
-       
-       fprintf(of,"\n**************\n\na better call tree\n");
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               if(pb->visited)
-                       pct2(of,pb,0);
-       }
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               fprintf(of,"block dbname: %c\n", getpBlock_dbName(pb));
-       }
+  pBranch *pbr;
+  pBlock  *pb;
+  pCode   *pc;
+  
+  if(!the_pFile)
+    return;
+  
+  if(!of)
+    of = stderr;
+  
+  fprintf(of, "\npBlock statistics\n");
+  for(pb = the_pFile->pbHead; pb;  pb = pb->next )
+    pBlockStats(of,pb);
+  
+  
+  
+  fprintf(of,"Call Tree\n");
+  pbr = the_pFile->functions;
+  while(pbr) {
+    if(pbr->pc) {
+      pc = pbr->pc;
+      if(!ispCodeFunction(pc))
+        fprintf(of,"bug in call tree");
+      
+      
+      fprintf(of,"Function: %s\n", PCF(pc)->fname);
+      
+      while(pc->next && !ispCodeFunction(pc->next)) {
+        pc = pc->next;
+        if(pc->type == PC_OPCODE && PCI(pc)->op == POC_CALL)
+          fprintf(of,"\t%s\n",get_op_from_instruction(PCI(pc)));
+      }
+    }
+    
+    pbr = pbr->next;
+  }
+  
+  
+  fprintf(of,"\n**************\n\na better call tree\n");
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    if(pb->visited)
+      pct2(of,pb,0);
+  }
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    fprintf(of,"block dbname: %c\n", getpBlock_dbName(pb));
+  }
 }
 
 
@@ -5993,108 +6004,108 @@ void printCallTree(FILE *of)
 
 void InlineFunction(pBlock *pb)
 {
-       pCode *pc;
-       pCode *pc_call;
-       
-       if(!pb)
-               return;
-       
-       pc = setFirstItem(pb->function_calls);
-       
-       for( ; pc; pc = setNextItem(pb->function_calls)) {
-               
-               if(isCALL(pc)) {
-                       pCode *pcn = findFunction(get_op_from_instruction(PCI(pc)));
-                       pCode *pcp = pc->prev;
-                       pCode *pct;
-                       pCode *pce;
-                       
-                       pBranch *pbr;
-                       
-                       if(pcn && isPCF(pcn) && (PCF(pcn)->ncalled == 1) && !PCF(pcn)->isPublic && (pcp && (isPCI_BITSKIP(pcp)||!isPCI_SKIP(pcp)))) { /* Bit skips can be inverted other skips can not */
-                               
-                               InlineFunction(pcn->pb);
-                               
-                               /*
-                               At this point, *pc points to a CALL mnemonic, and
-                               *pcn points to the function that is being called.
-                               
-                               To in-line this call, we need to remove the CALL
-                               and RETURN(s), and link the function pCode in with
-                               the CALLee pCode.
-
-                               */
-                               
-                               pc_call = pc;
-                               
-                               /* Check if previous instruction was a bit skip */
-                               if (isPCI_BITSKIP(pcp)) {
-                                       pCodeLabel *pcl;
-                                       /* Invert skip instruction and add a goto */
-                                       PCI(pcp)->op = (PCI(pcp)->op == POC_BTFSS) ? POC_BTFSC : POC_BTFSS;
-                                       
-                                       if(isPCL(pc_call->next)) { // Label pcode
-                                               pcl = PCL(pc_call->next);
-                                       } else if (isPCI(pc_call->next) && PCI(pc_call->next)->label) { // pcode instruction with a label
-                                               pcl = PCL(PCI(pc_call->next)->label->pc);
-                                       } else {
-                                               pcl = PCL(newpCodeLabel(NULL, newiTempLabel(NULL)->key+100));
-                                               PCI(pc_call->next)->label->pc = (struct pCode*)pcl;
-                                       }
-                                       pCodeInsertAfter(pcp, newpCode(POC_GOTO, newpCodeOp(pcl->label,PO_STR)));
-                               }
-                               
-                               /* remove callee pBlock from the pBlock linked list */
-                               removepBlock(pcn->pb);
-                               
-                               pce = pcn;
-                               while(pce) {
-                                       pce->pb = pb;
-                                       pce = pce->next;
-                               }
-                               
-                               /* Remove the Function pCode */
-                               pct = findNextInstruction(pcn->next);
-                               
-                               /* Link the function with the callee */
-                               if (pcp) pcp->next = pcn->next;
-                               pcn->next->prev = pcp;
-                               
-                               /* Convert the function name into a label */
-                               
-                               pbr = Safe_calloc(1,sizeof(pBranch));
-                               pbr->pc = newpCodeLabel(PCF(pcn)->fname, -1);
-                               pbr->next = NULL;
-                               PCI(pct)->label = pBranchAppend(PCI(pct)->label,pbr);
-                               PCI(pct)->label = pBranchAppend(PCI(pct)->label,PCI(pc_call)->label);
-                               
-                               /* turn all of the return's except the last into goto's */
-                               /* check case for 2 instruction pBlocks */
-                               pce = findNextInstruction(pcn->next);
-                               while(pce) {
-                                       pCode *pce_next = findNextInstruction(pce->next);
-                                       
-                                       if(pce_next == NULL) {
-                                               /* found the last return */
-                                               pCode *pc_call_next =  findNextInstruction(pc_call->next);
-                                               
-                                               //fprintf(stderr,"found last return\n");
-                                               //pce->print(stderr,pce);
-                                               pce->prev->next = pc_call->next;
-                                               pc_call->next->prev = pce->prev;
-                                               PCI(pc_call_next)->label = pBranchAppend(PCI(pc_call_next)->label,
-                                                       PCI(pce)->label);
-                                       }
-                                       
-                                       pce = pce_next;
-                               }
-                               
-                       }
-               } else
-                       fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
-               
-       }
-       
+  pCode *pc;
+  pCode *pc_call;
+  
+  if(!pb)
+    return;
+  
+  pc = setFirstItem(pb->function_calls);
+  
+  for( ; pc; pc = setNextItem(pb->function_calls)) {
+    
+    if(isCALL(pc)) {
+      pCode *pcn = findFunction(get_op_from_instruction(PCI(pc)));
+      pCode *pcp = pc->prev;
+      pCode *pct;
+      pCode *pce;
+      
+      pBranch *pbr;
+      
+      if(pcn && isPCF(pcn) && (PCF(pcn)->ncalled == 1) && !PCF(pcn)->isPublic && (pcp && (isPCI_BITSKIP(pcp)||!isPCI_SKIP(pcp)))) { /* Bit skips can be inverted other skips can not */
+        
+        InlineFunction(pcn->pb);
+        
+        /*
+        At this point, *pc points to a CALL mnemonic, and
+        *pcn points to the function that is being called.
+        
+        To in-line this call, we need to remove the CALL
+        and RETURN(s), and link the function pCode in with
+        the CALLee pCode.
+
+        */
+        
+        pc_call = pc;
+        
+        /* Check if previous instruction was a bit skip */
+        if (isPCI_BITSKIP(pcp)) {
+          pCodeLabel *pcl;
+          /* Invert skip instruction and add a goto */
+          PCI(pcp)->op = (PCI(pcp)->op == POC_BTFSS) ? POC_BTFSC : POC_BTFSS;
+          
+          if(isPCL(pc_call->next)) { // Label pcode
+            pcl = PCL(pc_call->next);
+          } else if (isPCI(pc_call->next) && PCI(pc_call->next)->label) { // pcode instruction with a label
+            pcl = PCL(PCI(pc_call->next)->label->pc);
+          } else {
+            pcl = PCL(newpCodeLabel(NULL, newiTempLabel(NULL)->key+100));
+            PCI(pc_call->next)->label->pc = (struct pCode*)pcl;
+          }
+          pCodeInsertAfter(pcp, newpCode(POC_GOTO, newpCodeOp(pcl->label,PO_STR)));
+        }
+        
+        /* remove callee pBlock from the pBlock linked list */
+        removepBlock(pcn->pb);
+        
+        pce = pcn;
+        while(pce) {
+          pce->pb = pb;
+          pce = pce->next;
+        }
+        
+        /* Remove the Function pCode */
+        pct = findNextInstruction(pcn->next);
+        
+        /* Link the function with the callee */
+        if (pcp) pcp->next = pcn->next;
+        pcn->next->prev = pcp;
+        
+        /* Convert the function name into a label */
+        
+        pbr = Safe_calloc(1,sizeof(pBranch));
+        pbr->pc = newpCodeLabel(PCF(pcn)->fname, -1);
+        pbr->next = NULL;
+        PCI(pct)->label = pBranchAppend(PCI(pct)->label,pbr);
+        PCI(pct)->label = pBranchAppend(PCI(pct)->label,PCI(pc_call)->label);
+        
+        /* turn all of the return's except the last into goto's */
+        /* check case for 2 instruction pBlocks */
+        pce = findNextInstruction(pcn->next);
+        while(pce) {
+          pCode *pce_next = findNextInstruction(pce->next);
+          
+          if(pce_next == NULL) {
+            /* found the last return */
+            pCode *pc_call_next =  findNextInstruction(pc_call->next);
+            
+            //fprintf(stderr,"found last return\n");
+            //pce->print(stderr,pce);
+            pce->prev->next = pc_call->next;
+            pc_call->next->prev = pce->prev;
+            PCI(pc_call_next)->label = pBranchAppend(PCI(pc_call_next)->label,
+              PCI(pce)->label);
+          }
+          
+          pce = pce_next;
+        }
+        
+      }
+    } else
+      fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
+    
+  }
+  
 }
 
 /*-----------------------------------------------------------------*/
@@ -6103,46 +6114,46 @@ void InlineFunction(pBlock *pb)
 
 void InlinepCode(void)
 {
-       
-       pBlock  *pb;
-       pCode   *pc;
-       
-       if(!the_pFile)
-               return;
-       
-       if(!functionInlining)
-               return;
-       
-               /* Loop through all of the function definitions and count the
-       * number of times each one is called */
-       //fprintf(stderr,"inlining %d\n",__LINE__);
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next) {
-               
-               pc = setFirstItem(pb->function_calls);
-               
-               for( ; pc; pc = setNextItem(pb->function_calls)) {
-                       
-                       if(isCALL(pc)) {
-                               pCode *pcn = findFunction(get_op_from_instruction(PCI(pc)));
-                               if(pcn && isPCF(pcn)) {
-                                       PCF(pcn)->ncalled++;
-                               }
-                       } else
-                               fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
-                       
-               }
-       }
-       
-       //fprintf(stderr,"inlining %d\n",__LINE__);
-       
-       /* Now, Loop through the function definitions again, but this
-       * time inline those functions that have only been called once. */
-       
-       InlineFunction(the_pFile->pbHead);
-       //fprintf(stderr,"inlining %d\n",__LINE__);
-       
-       for(pb = the_pFile->pbHead; pb; pb = pb->next)
-               unBuildFlow(pb);
-       
+  
+  pBlock  *pb;
+  pCode   *pc;
+  
+  if(!the_pFile)
+    return;
+  
+  if(!functionInlining)
+    return;
+  
+    /* Loop through all of the function definitions and count the
+  * number of times each one is called */
+  //fprintf(stderr,"inlining %d\n",__LINE__);
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next) {
+    
+    pc = setFirstItem(pb->function_calls);
+    
+    for( ; pc; pc = setNextItem(pb->function_calls)) {
+      
+      if(isCALL(pc)) {
+        pCode *pcn = findFunction(get_op_from_instruction(PCI(pc)));
+        if(pcn && isPCF(pcn)) {
+          PCF(pcn)->ncalled++;
+        }
+      } else
+        fprintf(stderr,"BUG? pCode isn't a POC_CALL %d\n",__LINE__);
+      
+    }
+  }
+  
+  //fprintf(stderr,"inlining %d\n",__LINE__);
+  
+  /* Now, Loop through the function definitions again, but this
+  * time inline those functions that have only been called once. */
+  
+  InlineFunction(the_pFile->pbHead);
+  //fprintf(stderr,"inlining %d\n",__LINE__);
+  
+  for(pb = the_pFile->pbHead; pb; pb = pb->next)
+    unBuildFlow(pb);
+  
 }
index 35c582043ec5dbacb29c31395b9eec85d1f81277..234d4f2a0b9bba4c1940b8b664e053556517271e 100644 (file)
@@ -3,7 +3,7 @@
   SDCCralloc.h - header file register allocation
 
                 Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1998)
-               PIC port   - T. Scott Dattalo scott@dattalo.com (2000)
+    PIC port   - T. Scott Dattalo scott@dattalo.com (2000)
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU General Public License as published by the
 
 enum
 {
-       R2_IDX = 0, R3_IDX, R4_IDX,
-       R5_IDX, R6_IDX, R7_IDX,
-       R0_IDX, R1_IDX, X8_IDX,
-       X9_IDX, X10_IDX, X11_IDX,
-       X12_IDX, CND_IDX
+  R2_IDX = 0, R3_IDX, R4_IDX,
+  R5_IDX, R6_IDX, R7_IDX,
+  R0_IDX, R1_IDX, X8_IDX,
+  X9_IDX, X10_IDX, X11_IDX,
+  X12_IDX, CND_IDX
 };
 
 enum {
-       REG_PTR=1,
-       REG_GPR,
-       REG_CND,
-       REG_SFR,
-       REG_STK,
-       REG_TMP
+  REG_PTR=1,
+  REG_GPR,
+  REG_CND,
+  REG_SFR,
+  REG_STK,
+  REG_TMP
 };
 //#define REG_PTR 0x01
 //#define REG_GPR 0x02
@@ -58,28 +58,28 @@ enum {
 /* definition for the registers */
 typedef struct regs
 {
-       short type;  /* can have value 
-                     * REG_GPR, REG_PTR or REG_CND 
-                     * This like the "meta-type" */
-       short pc_type;              /* pcode type */
-       short rIdx;  /* index into register table */
-       //      short otype;        
-       char *name;  /* name */
-
-       unsigned isFree:1;          /* is currently unassigned  */
-       unsigned wasUsed:1;         /* becomes true if register has been used */
-       unsigned isFixed:1;         /* True if address can't change */
-       unsigned isMapped:1;        /* The Register's address has been mapped to physical RAM */
-       unsigned isBitField:1;      /* True if reg is type bit OR is holder for several bits */
-       unsigned isEmitted:1;       /* True if the reg has been written to a .asm file */
-       unsigned isPublic:1;        /* True if the reg is not static and can be modified in another module (ie a another c or asm file) */
-       unsigned isExtern:1;        /* True if the reg is in another module */
-       unsigned address;           /* reg's address if isFixed | isMapped is true */
-       unsigned size;              /* 0 for byte, 1 for int, 4 for long */
-       unsigned alias;             /* Alias mask if register appears in multiple banks */
-       struct regs *reg_alias;     /* If more than one register share the same address 
-                                    * then they'll point to each other. (primarily for bits)*/
-       pCodeRegLives reglives;     /* live range mapping */
+  short type;  /* can have value 
+                * REG_GPR, REG_PTR or REG_CND 
+                * This like the "meta-type" */
+  short pc_type;              /* pcode type */
+  short rIdx;  /* index into register table */
+  //  short otype;        
+  char *name;  /* name */
+
+  unsigned isFree:1;          /* is currently unassigned  */
+  unsigned wasUsed:1;         /* becomes true if register has been used */
+  unsigned isFixed:1;         /* True if address can't change */
+  unsigned isMapped:1;        /* The Register's address has been mapped to physical RAM */
+  unsigned isBitField:1;      /* True if reg is type bit OR is holder for several bits */
+  unsigned isEmitted:1;       /* True if the reg has been written to a .asm file */
+  unsigned isPublic:1;        /* True if the reg is not static and can be modified in another module (ie a another c or asm file) */
+  unsigned isExtern:1;        /* True if the reg is in another module */
+  unsigned address;           /* reg's address if isFixed | isMapped is true */
+  unsigned size;              /* 0 for byte, 1 for int, 4 for long */
+  unsigned alias;             /* Alias mask if register appears in multiple banks */
+  struct regs *reg_alias;     /* If more than one register share the same address 
+                               * then they'll point to each other. (primarily for bits)*/
+  pCodeRegLives reglives;     /* live range mapping */
 }
 regs;
 extern regs regspic14[];