* fixed GCC 4.4.0 mingw compilation:
[fw/sdcc] / src / ds390 / gen.h
index d641b5746de5652c42eeeff82c8b4e77d62fce16..22b4f227968e96748a77892d2c66c7df0858598f 100644 (file)
@@ -1,5 +1,5 @@
 /*-------------------------------------------------------------------------
-  SDCCgen51.h - header file for code generation for 8051
+  gen.h - header file for code generation for DS80C390
 
              Written By -  Sandeep Dutta . sandeep.dutta@usa.net (1998)
 
@@ -7,68 +7,80 @@
    under the terms of the GNU General Public License as published by the
    Free Software Foundation; either version 2, or (at your option) any
    later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
-   
+
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-   
+
    In other words, you are welcome to use, share and improve this program.
    You are forbidden to forbid anyone else to use, share and improve
-   what you give them.   Help stamp out software-hoarding!  
+   what you give them.   Help stamp out software-hoarding!
 -------------------------------------------------------------------------*/
 
-#ifndef SDCCGEN51_H
-#define SDCCGEN51_H
+#ifndef SDCCGEN390_H
+#define SDCCGEN390_H
 
-enum {
+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_REG, AOP_DIR,
+    AOP_DPTR, AOP_DPTR2, AOP_R0, AOP_R1,
+    AOP_STK, AOP_IMMD, AOP_STR,
+    AOP_CRY, AOP_ACC, AOP_DPTRn, AOP_DUMMY
+  };
 
-/* type asmop : a homogenised type for 
+/* type asmop : a homogenised type for
    all the different spaces an operand can be
    in */
-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 */
-    } aopu;
-} asmop;
+typedef struct asmop
+  {
 
-void gen390Code (iCode *);
+    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
+                                   AOP_DPTRn  -  is in dptr(n)
+                                   AOP_DUMMY  -  read as 0, discard writes
+                                 */
+    short coff;                 /* current offset */
+    short size;                 /* total size */
+    unsigned code:1;            /* is in Code space */
+    unsigned paged:1;           /* in paged memory  */
+    unsigned short allocated;  /* number of times allocated */
+    union
+      {
+        short dptr;             /* if AOP_DPTRn */
+        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 */
+        struct {
+                int  from_cast_remat;   /* cast remat created this : immd2 field used for highest order*/
+                char *aop_immd1;        /* if immediate others are implied */
+                char *aop_immd2;        /* cast remat will generate this   */
+        } aop_immd;
+        int aop_stk;            /* stack offset when AOP_STK */
+        char *aop_str[5];       /* just a string array containing the location */
+      }
+    aopu;
+  }
+asmop;
 
-extern unsigned fReturnSize_390;
+void gen390Code (iCode *);
+void ds390_emitDebuggerSymbol (char *);
 
 #endif