doc/sdccman.lyx: minor changes, mentioned beta vendor support for ds80c400
[fw/sdcc] / src / pic16 / pcode.h
index ecb554f9583dcc8b8e081fb6eb5ecc803eda8557..3f8a1da3f910647a919d61eb3ac3ce70e1396306 100644 (file)
@@ -157,6 +157,9 @@ typedef enum
   PO_SFR_REGISTER,   // A special function register (e.g. PORTA)
   PO_PCL,            // Program counter Low register
   PO_PCLATH,         // Program counter Latch high register
+  PO_PCLATU,         // Program counter Latch upper register
+  PO_PRODL,          // Product Register Low
+  PO_PRODH,          // Product Register High
   PO_LITERAL,        // A constant
   PO_REL_ADDR,       // A relative address
   PO_IMMEDIATE,      //  (8051 legacy)
@@ -265,6 +268,14 @@ typedef enum
   POC_SWAPF,
   POC_SWAPFW,
 //  POC_TRIS , // To be removed
+  POC_TBLRD,           // patch 15
+  POC_TBLRD_POSTINC,   //
+  POC_TBLRD_POSTDEC,   //
+  POC_TBLRD_PREINC,    //
+  POC_TBLWT,           //
+  POC_TBLWT_POSTINC,   //
+  POC_TBLWT_POSTDEC,   //
+  POC_TBLWT_PREINC,    // patch 15
   POC_TSTFSZ,
   POC_XORLW,
   POC_XORWF,
@@ -371,7 +382,7 @@ typedef struct pCodeOpLit2
 typedef struct pCodeOpImmd
 {
   pCodeOp pcop;
-  int offset;           /* low,med, or high byte of immediat value */
+  int offset;           /* low,high or upper byte of immediate value */
   int index;            /* add this to the immediate value */
   unsigned _const:1;    /* is in code space    */
 
@@ -428,6 +439,9 @@ typedef struct pCodeOpWild
                           * card will be expanded */
   pCodeOp *matched;       /* When a wild matches, we'll store a pointer to the
                           * opcode we matched */
+  int id2;               /* same as id but for second wild operand */
+  pCodeOp *subtype2;     /* Poiter to the second Operand type */
+  pCodeOp *matched2;     /* same as matched but for second wil operand */
 
 } pCodeOpWild;
 
@@ -498,17 +512,6 @@ typedef struct pCodeCSource
     pCodeAsmDir
 **************************************************/
 
-typedef struct pCodeAsmDir
-{
-  pCode pc;
-  
-  char *directive;
-  char *arg;
-
-  pBranch *label;
-} pCodeAsmDir;
-
-
 /*************************************************
     pCodeFlow
 
@@ -620,6 +623,20 @@ typedef struct pCodeInstruction
 } pCodeInstruction;
 
 
+
+/*************************************************
+    pCodeAsmDir
+**************************************************/
+
+typedef struct pCodeAsmDir
+{
+  pCodeInstruction pci;
+  
+  char *directive;
+  char *arg;
+} pCodeAsmDir;
+
+
 /*************************************************
     pCodeLabel
 **************************************************/
@@ -655,6 +672,8 @@ typedef struct pCodeFunction
 
   int  ncalled;    /* Number of times function is called */
 
+  int absblock;    /* hack to emulate a block pCodes in absolute position
+                      but not inside a function */
 } pCodeFunction;
 
 
@@ -894,6 +913,10 @@ void pic16_printCallTree(FILE *of);
 void pCodePeepInit(void);
 void pic16_pBlockConvert2ISR(pBlock *pb);
 void pic16_pBlockConvert2Absolute(pBlock *pb);
+void pic16_emitDB(pBlock *pb, char c);           // Add DB directives to a pBlock
+void pic16_flushDB(pBlock *pb);                          // Add pending DB data to a pBlock
+
+pCode *pic16_newpCodeAsmDir(char *asdir, char *argfmt, ...); 
 
 pCodeOp *pic16_newpCodeOpLabel(char *name, int key);
 pCodeOp *pic16_newpCodeOpImmd(char *name, int offset, int index, int code_space);
@@ -912,6 +935,8 @@ struct regs * pic16_getRegFromInstruction2(pCode *pc);
 
 extern void pic16_pcode_test(void);
 extern int pic16_debug_verbose;
+extern int pic16_pcode_verbose;
+
 /*-----------------------------------------------------------------*
  * pCode objects.
  *-----------------------------------------------------------------*/
@@ -920,7 +945,16 @@ extern pCodeOpReg pic16_pc_status;
 extern pCodeOpReg pic16_pc_intcon;
 extern pCodeOpReg pic16_pc_pcl;
 extern pCodeOpReg pic16_pc_pclath;
+extern pCodeOpReg pic16_pc_pclatu; // patch 14
 extern pCodeOpReg pic16_pc_wreg;
+extern pCodeOpReg pic16_pc_tosl; // patch 14
+extern pCodeOpReg pic16_pc_tosh; // patch 14
+extern pCodeOpReg pic16_pc_tosu; // patch 14
+extern pCodeOpReg pic16_pc_tblptrl; // patch 15
+extern pCodeOpReg pic16_pc_tblptrh; //
+extern pCodeOpReg pic16_pc_tblptru; //
+extern pCodeOpReg pic16_pc_tablat;  // patch 15
+extern pCodeOpReg pic16_pc_bsr;
 extern pCodeOpReg pic16_pc_fsr0;
 extern pCodeOpReg pic16_pc_fsr0l;
 extern pCodeOpReg pic16_pc_fsr0h;
@@ -943,6 +977,8 @@ extern pCodeOpReg pic16_pc_postinc2;
 extern pCodeOpReg pic16_pc_postdec2;
 extern pCodeOpReg pic16_pc_preinc2;
 extern pCodeOpReg pic16_pc_plusw2;
+extern pCodeOpReg pic16_pc_prodl;
+extern pCodeOpReg pic16_pc_prodh;
 
 extern pCodeOpReg pic16_pc_kzero;
 extern pCodeOpReg pic16_pc_wsave;     /* wsave and ssave are used to save W and the Status */