* src/z80/gen.c (_vemit2): suppress compiler warning
[fw/sdcc] / src / pic / pcodepeep.c
index 902178d0fb05a9e609b51a307b4cc743faae8f6d..d80d8f3f4cb13838d8445fdb85e3821ca02b9791 100644 (file)
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 -------------------------------------------------------------------------*/
 
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "common.h"   // Include everything in the SDCC src directory
-#include "newalloc.h"
-//#define PCODE_DEBUG
 #include "pcode.h"
 #include "pcodeflow.h"
 #include "ralloc.h"
 
-#if defined(__BORLANDC__) || defined(_MSC_VER)
-#define STRCASECMP stricmp
-#else
-#define STRCASECMP strcasecmp
-#endif
-
-pCodeOp *popCopyGPR2Bit(pCodeOpReg *pc, int bitval);
-pCodeOp *popRegFromString(char *str, int size, int offset);
-
-pCodeOp *newpCodeOpWild(int id, pCodeWildBlock *pcwb, pCodeOp *subtype);
-pCode *newpCodeWild(int pCodeID, pCodeOp *optional_operand, pCodeOp *optional_label);
-pCode * findNextInstruction(pCode *pc);
-int getpCode(char *mnem,int dest);
-int getpCodePeepCommand(char *cmd);
-void pBlockMergeLabels(pBlock *pb);
-char *pCode2str(char *str, int size, pCode *pc);
-char *get_op( pCodeOp *pcop,char *buf,int buf_size);
-
-extern pCodeInstruction *pic14Mnemonics[];
-extern pCode * findPrevInstruction(pCode *pci);
-
+//#define PCODE_DEBUG
 
 #define IS_PCCOMMENT(x) ( x && (x->type==PC_COMMENT))
 
@@ -126,8 +100,8 @@ typedef struct pCodeToken
        
 } pCodeToken;
 
-pCodeToken tokArr[50];
-unsigned   tokIdx=0;
+static pCodeToken tokArr[50];
+static unsigned   tokIdx=0;
 
 
 typedef enum  {
@@ -151,9 +125,10 @@ typedef struct parsedPattern {
 } parsedPattern;
 
 #define MAX_PARSEDPATARR 50
-parsedPattern parsedPatArr[MAX_PARSEDPATARR];
-unsigned int parsedPatIdx=0;
-
+static parsedPattern parsedPatArr[MAX_PARSEDPATARR];
+#if 0
+static unsigned int parsedPatIdx=0;
+#endif
 
 typedef enum {
        PCP_LABEL=1,
@@ -180,7 +155,7 @@ typedef struct pcPattern {
        void * (*f) (void *,pCodeWildBlock *);
 } pcPattern;
 
-pcPattern pcpArr[] = {
+static pcPattern pcpArr[] = {
        {PCP_LABEL,     pcpat_label,      NULL},
        {PCP_WILDSTR,   pcpat_wildString, NULL},
        {PCP_STR,       pcpat_string,     NULL},
@@ -228,7 +203,7 @@ static void * cvt_altpat_mnem2(void *pp,pCodeWildBlock *pcwb);
 static void * cvt_altpat_mnem2a(void *pp,pCodeWildBlock *pcwb);
 static void * cvt_altpat_mnem3(void *pp,pCodeWildBlock *pcwb);
 
-pcPattern altArr[] = {
+static pcPattern altArr[] = {
        {ALT_LABEL,        alt_label,  cvt_altpat_label},
        {ALT_COMMENT,      alt_comment,cvt_altpat_comment},
        {ALT_MNEM3,        alt_mnem3,  cvt_altpat_mnem3},
@@ -259,7 +234,7 @@ static int cvt_extract_destination(parsedPattern *pp)
                
                // just check first letter for now
                
-               if(toupper(*pp->pct[0].tok.s) == 'F')
+               if(toupper((unsigned char)*pp->pct[0].tok.s) == 'F')
                        return 1;
                
        } else if (pp->pct[0].tt == PCT_NUMBER) {
@@ -290,15 +265,15 @@ static pCodeOp *cvt_extract_status(char *reg, char *bit)
        
        if(len == 1) {
                // check C,Z
-               if(toupper(*bit) == 'C')
-                       return PCOP(popCopyGPR2Bit(&pc_status,PIC_C_BIT));
-               if(toupper(*bit) == 'Z')
-                       return PCOP(popCopyGPR2Bit(&pc_status,PIC_Z_BIT));
+               if(toupper((unsigned char)*bit) == 'C')
+                       return PCOP(popCopyGPR2Bit(PCOP(&pc_status),PIC_C_BIT));
+               if(toupper((unsigned char)*bit) == 'Z')
+                       return PCOP(popCopyGPR2Bit(PCOP(&pc_status),PIC_Z_BIT));
        }
        
        // Check DC
-       if(len ==2 && toupper(bit[0]) == 'D' && toupper(bit[1]) == 'C')
-               return PCOP(popCopyGPR2Bit(&pc_status,PIC_DC_BIT));
+       if(len ==2 && toupper((unsigned char)bit[0]) == 'D' && toupper((unsigned char)bit[1]) == 'C')
+               return PCOP(popCopyGPR2Bit(PCOP(&pc_status),PIC_DC_BIT));
        
        return NULL;
        
@@ -745,15 +720,15 @@ static void tokenizeLineNode(char *ln)
        
        while(*ln) {
                
-               if(isspace(*ln)) {
+               if(isspace((unsigned char)*ln)) {
                        // add a SPACE token and eat the extra spaces.
                        tokArr[tokIdx++].tt = PCT_SPACE;
-                       while (isspace (*ln))
+                       while (isspace ((unsigned char)*ln))
                                ln++;
                        continue;
                }
                
-               if(isdigit(*ln)) {
+               if(isdigit((unsigned char)*ln)) {
                        
                        tokArr[tokIdx].tt = PCT_NUMBER;
                        tokArr[tokIdx++].tok.n = strtol(ln, &ln, 0);
@@ -786,11 +761,11 @@ static void tokenizeLineNode(char *ln)
                        
                        
                default:
-                       if(isalpha(*ln) || (*ln == '_') ) {
+                       if(isalpha((unsigned char)*ln) || (*ln == '_') ) {
                                char buffer[50];
                                int i=0;
                                
-                               while( (isalpha(*ln)  ||  isdigit(*ln) || (*ln == '_')) && i<49)
+                               while( (isalpha((unsigned char)*ln) || isdigit((unsigned char)*ln) || (*ln == '_')) && i<49)
                                        buffer[i++] = *ln++;
                                
                                ln--;
@@ -826,7 +801,7 @@ static void tokenizeLineNode(char *ln)
 
 
 
-void dump1Token(pCodeTokens tt)
+static void dump1Token(pCodeTokens tt)
 {
        
        switch(tt) {
@@ -871,7 +846,7 @@ void dump1Token(pCodeTokens tt)
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 
-int pcComparePattern(pCodeToken *pct, char *pat, int max_tokens)
+static int pcComparePattern(pCodeToken *pct, char *pat, int max_tokens)
 {
        int i=0;
        
@@ -904,7 +879,7 @@ int pcComparePattern(pCodeToken *pct, char *pat, int max_tokens)
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 
-int altComparePattern( char *pct, parsedPattern *pat, int max_tokens)
+static int altComparePattern(char *pct, parsedPattern *pat, int max_tokens)
 {
        int i=0;
        
@@ -939,7 +914,7 @@ int altComparePattern( char *pct, parsedPattern *pat, int max_tokens)
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
 
-int advTokIdx(int *v, int amt)
+static int advTokIdx(int *v, int amt)
 {
        
        if((unsigned) (*v + amt) > tokIdx)
@@ -968,7 +943,7 @@ int advTokIdx(int *v, int amt)
 /* pcode.                                                          */
 /*-----------------------------------------------------------------*/
 
-int parseTokens(pCodeWildBlock *pcwb, pCode **pcret)
+static int parseTokens(pCodeWildBlock *pcwb, pCode **pcret)
 {
        pCode *pc;
        int error = 0;
@@ -1190,7 +1165,7 @@ int parseTokens(pCodeWildBlock *pcwb, pCode **pcret)
 /*-----------------------------------------------------------------*/
 /*                                                                 */
 /*-----------------------------------------------------------------*/
-void  peepRuleBlock2pCodeBlock(  lineNode *ln, pCodeWildBlock *pcwb)
+static void peepRuleBlock2pCodeBlock(lineNode *ln, pCodeWildBlock *pcwb)
 {
        
        if(!ln)
@@ -1214,10 +1189,11 @@ void  peepRuleBlock2pCodeBlock(  lineNode *ln, pCodeWildBlock *pcwb)
        }
 }
 
+#if 0
 /*-----------------------------------------------------------------*/
 /*                                                                 */
 /*-----------------------------------------------------------------*/
-pCode *AssembleLine(char *line)
+static pCode *AssembleLine(char *line)
 {
        pCode *pc=NULL;
        
@@ -1234,6 +1210,7 @@ pCode *AssembleLine(char *line)
        return pc;
        
 }
+#endif
 
 /*-----------------------------------------------------------------*/
 /* peepRuleCondition                                               */
@@ -1254,8 +1231,7 @@ static void   peepRuleCondition(char *cond, pCodePeep *pcp)
        
 }
 
-
-void initpCodeWildBlock(pCodeWildBlock *pcwb)
+static void initpCodeWildBlock(pCodeWildBlock *pcwb)
 {
        
        //  pcwb = Safe_calloc(1,sizeof(pCodeWildBlock));
@@ -1273,7 +1249,7 @@ void initpCodeWildBlock(pCodeWildBlock *pcwb)
        
 }
 
-void postinit_pCodeWildBlock(pCodeWildBlock *pcwb)
+static void postinit_pCodeWildBlock(pCodeWildBlock *pcwb)
 {
        
        if(!pcwb)
@@ -1290,7 +1266,7 @@ void postinit_pCodeWildBlock(pCodeWildBlock *pcwb)
        
 }
 
-void initpCodePeep(pCodePeep *pcp)
+static void initpCodePeep(pCodePeep *pcp)
 {
        
        //  pcwb = Safe_calloc(1,sizeof(pCodeWildBlock));
@@ -1317,9 +1293,7 @@ void initpCodePeep(pCodePeep *pcp)
 /* taking raw text to produce machine code, it produces pCode.     */
 /*                                                                 */
 /*-----------------------------------------------------------------*/
-extern void pic14initpCodePeepCommands(void);
-
-void  peepRules2pCode(peepRule *rules)
+void peepRules2pCode(peepRule *rules)
 {
        peepRule *pr;
        
@@ -1402,7 +1376,8 @@ void  peepRules2pCode(peepRule *rules)
        
 }
 
-void printpCodeString(FILE *of, pCode *pc, int max)
+#if 0
+static void printpCodeString(FILE *of, pCode *pc, int max)
 {
        int i=0;
        
@@ -1411,6 +1386,7 @@ void printpCodeString(FILE *of, pCode *pc, int max)
                pc = pc->next;
        }
 }
+#endif
 
 /*-----------------------------------------------------------------*/
 /* _DLL * DLL_append                                               */
@@ -1491,7 +1467,7 @@ int pCodeSearchCondition(pCode *pc, unsigned int cond, int contIfSkip)
                        if(PCI(pc)->inCond & cond) {
                                if (contIfSkip) {
                                        /* If previous instruction is a skip then continue search as condiction is not certain */
-                                       pCode *pcp = findPrevInstruction(pc);
+                                       pCode *pcp = findPrevInstruction(pc->prev);
                                        if (pcp && !isPCI_SKIP(pcp)) {
                                                return 1;
                                        }
@@ -1502,7 +1478,7 @@ int pCodeSearchCondition(pCode *pc, unsigned int cond, int contIfSkip)
                        if(PCI(pc)->outCond & cond) {
                                if (contIfSkip) {
                                        /* If previous instruction is a skip then continue search as condiction is not certain */
-                                       pCode *pcp = findPrevInstruction(pc);
+                                       pCode *pcp = findPrevInstruction(pc->prev);
                                        if (pcp && !isPCI_SKIP(pcp)) {
                                                return -1;
                                        }
@@ -1523,7 +1499,7 @@ int pCodeSearchCondition(pCode *pc, unsigned int cond, int contIfSkip)
 *
 * Compare two pCodeOp's and return 1 if they're the same
 *-----------------------------------------------------------------*/
-int pCodeOpCompare(pCodeOp *pcops, pCodeOp *pcopd)
+static int pCodeOpCompare(pCodeOp *pcops, pCodeOp *pcopd)
 {
        char b[50], *n2;
        
@@ -1576,7 +1552,7 @@ int pCodeOpCompare(pCodeOp *pcops, pCodeOp *pcopd)
        return 1;
 }
 
-int pCodePeepMatchLabels(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
+static int pCodePeepMatchLabels(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
 {
        int labindex;
        
@@ -1659,7 +1635,7 @@ int pCodePeepMatchLabels(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
 /*                                                                 */
 /*-----------------------------------------------------------------*/
 
-int pCodePeepMatchLine(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
+static int pCodePeepMatchLine(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
 {
        int index;   // index into wild card arrays
        
@@ -1882,7 +1858,7 @@ int pCodePeepMatchLine(pCodePeep *peepBlock, pCode *pcs, pCode *pcd)
 
 /*-----------------------------------------------------------------*/
 /*-----------------------------------------------------------------*/
-void pCodePeepClrVars(pCodePeep *pcp)
+static void pCodePeepClrVars(pCodePeep *pcp)
 {
        
        int i;
@@ -2100,9 +2076,10 @@ int pCodePeepMatchRule(pCode *pc)
                        /* We have just replaced the inefficient code with the rule.
                        * Now, we need to re-add the C-source symbols if there are any */
                        pc = pcprev;
-                       while(pc_cline ) {
+                       while(pc && pc_cline ) {
                                
                                pc =  findNextInstruction(pc->next);
+                               if (!pc) break;
                                PCI(pc)->cline = pc_cline;
                                pc_cline = PCCS(pc_cline->pc.next);
                                
@@ -2111,13 +2088,14 @@ int pCodePeepMatchRule(pCode *pc)
                        /* Copy C code comments to new code. */
                        pc = pcprev->next;
                        if (pc) {
-                               for (; pcout!=pcin; pcout=pcout->next) {
+                               for (; pc && pcout!=pcin; pcout=pcout->next) {
                                        if (pcout->type==PC_OPCODE && PCI(pcout)->cline) {
                                                while (pc->type!=PC_OPCODE || PCI(pc)->cline) {
                                                        pc = pc->next;
                                                        if (!pc)
                                                                break;
                                                }
+                                               if (!pc) break;
                                                PCI(pc)->cline = PCI(pcout)->cline;
                                        }
                                }