]> git.sur5r.net Git - cc65/blobdiff - src/cc65/codegen.h
Fixed more E_MCONST issues
[cc65] / src / cc65 / codegen.h
index 94b19c1c921635f5ffef1e2c3f526b6641d6b5c6..6bd016a232184247df307f46d5c9b8f66f20811c 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
+/* (C) 1998-2001 llrich von Bassewitz                                        */
+/*               Wacholderweg 14                                             */
+/*               D-70597 Stuttgart                                           */
+/* EMail:        uz@cc65.org                                                 */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */
 
 
 
+/* cc65 */
+#include "segments.h"
+
+
+
 /*****************************************************************************/
-/*                                  data                                    */
+/*                                  Data                                    */
 /*****************************************************************************/
 
 
  */
 #define CF_NONE                0x0000  /* No special flags */
 
-#define CF_TYPE                0x000F  /* Mask for operand type */
+#define CF_TYPE                0x0007  /* Mask for operand type */
 #define CF_CHAR                0x0003  /* Operation on characters */
 #define CF_INT         0x0001  /* Operation on ints */
 #define CF_PTR         CF_INT  /* Alias for readability */
 #define CF_LONG                0x0000  /* Operation on longs */
 
+#define CF_NOKEEP      0x0008  /* Value may get destroyed when storing */
+
 #define CF_UNSIGNED            0x0010  /* Value is unsigned */
 #define CF_CONST       0x0020  /* Constant value available */
 #define CF_CONSTADDR   0x0040  /* Constant address value available */
 #define CF_TEST                0x0080  /* Test value */
 #define CF_FIXARGC             0x0100  /* Function has fixed arg count */
 #define CF_FORCECHAR   0x0200  /* Handle chars as chars, not ints */
-#define CF_SHORT       0x0400  /* Use short addressing */
 #define CF_REG         0x0800  /* Value is in primary register */
 
 /* Type of static address */
@@ -81,7 +87,7 @@ extern int oursp;
 
 
 /*****************************************************************************/
-/*                           Pre- and postamble                             */
+/*                        Files, pre- and postamble                         */
 /*****************************************************************************/
 
 
@@ -89,8 +95,8 @@ extern int oursp;
 void g_preamble (void);
 /* Generate the assembler code preamble */
 
-void g_postamble (void);
-/* Generate assembler code postamble */
+void g_fileinfo (const char* Name, unsigned long Size, unsigned long MTime);
+/* If debug info is enabled, place a file info into the source */
 
 
 
@@ -100,9 +106,6 @@ void g_postamble (void);
 
 
 
-void g_usecode (void);
-/* Switch to the code segment */
-
 void g_userodata (void);
 /* Switch to the read only data segment */
 
@@ -112,28 +115,22 @@ void g_usedata (void);
 void g_usebss (void);
 /* Switch to the bss segment */
 
-void g_codename (const char* Name);
-/* Set the name of the CODE segment */
-
-void g_rodataname (const char* Name);
-/* Set the name of the RODATA segment */
-
-void g_dataname (const char* Name);
-/* Set the name of the DATA segment */
-
-void g_bssname (const char* Name);
-/* Set the name of the BSS segment */
+void g_segname (segment_t Seg, const char* Name);
+/* Set the name of a segment */
 
 
 
 /*****************************************************************************/
-/*                     Functions handling local labels                      */
+/*                     Functions handling local labels                      */
 /*****************************************************************************/
 
 
 
-void g_defloclabel (unsigned label);
-/* Define a local label */
+void g_defcodelabel (unsigned label);
+/* Define a local code label */
+
+void g_defdatalabel (unsigned label);
+/* Define a local data label */
 
 
 
@@ -215,7 +212,7 @@ void g_scale (unsigned flags, long val);
 void g_enter (unsigned flags, unsigned argsize);
 /* Function prologue */
 
-void g_leave (int flags, int val);
+void g_leave (void);
 /* Function epilogue */
 
 
@@ -273,7 +270,7 @@ void g_leavariadic (int Offs);
 void g_putstatic (unsigned flags, unsigned long label, unsigned offs);
 /* Store the primary register into the specified static memory cell */
 
-void g_putlocal (unsigned flags, int offs);
+void g_putlocal (unsigned Flags, int Offs, long Val);
 /* Put data into local object. */
 
 void g_putind (unsigned flags, unsigned offs);
@@ -360,7 +357,10 @@ void g_addaddr_static (unsigned flags, unsigned long label, unsigned offs);
 
 
 void g_save (unsigned flags);
+/* Copy primary register to hold register. */
+
 void g_restore (unsigned flags);
+/* Copy hold register to primary. */
 
 void g_cmp (unsigned flags, unsigned long val);
 /* Immidiate compare. The primary register will not be changed, Z flag
@@ -368,12 +368,27 @@ void g_cmp (unsigned flags, unsigned long val);
  */
 
 void g_test (unsigned flags);
+/* Test the value in the primary and set the condition codes */
+
 void g_push (unsigned flags, unsigned long val);
+/* Push the primary register or a constant value onto the stack */
+
 void g_swap (unsigned flags);
-void g_call (unsigned flags, char *lbl, unsigned argsize);
-void g_callind (unsigned flags, unsigned argsize);
-void g_jump (unsigned label);
-void g_switch (unsigned flags);
+/* Swap the primary register and the top of the stack. flags give the type
+ * of *both* values (must have same size).
+ */
+
+void g_call (unsigned Flags, const char* Label, unsigned ArgSize);
+/* Call the specified subroutine name */
+
+void g_callind (unsigned Flags, unsigned ArgSize);
+/* Call subroutine with address in AX */
+
+void g_jump (unsigned Label);
+/* Jump to specified internal label number */
+
+void g_switch (unsigned Flags);
+/* Output switch statement preamble */
 
 void g_case (unsigned flags, unsigned label, unsigned long val);
 /* Create table code for one case selector */
@@ -430,6 +445,19 @@ void g_zerobytes (unsigned n);
 
 
 
+/*****************************************************************************/
+/*                      User supplied assembler code                        */
+/*****************************************************************************/
+
+
+
+void g_asmcode (const char* Line, int Len);
+/* Output one line of assembler code. If Len is greater than zero, it is used
+ * as the maximum number of characters to use from Line.
+ */
+
+
+
 /*****************************************************************************/
 /*                         Inlined known functions                          */
 /*****************************************************************************/