X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=src%2Fcc65%2Fcodegen.h;h=6bd016a232184247df307f46d5c9b8f66f20811c;hb=84f85293f1662f30b44f5caf1fae2b5d5b8be0f7;hp=94b19c1c921635f5ffef1e2c3f526b6641d6b5c6;hpb=544705e6f456abaef98462d78325b4d1907bc6b0;p=cc65 diff --git a/src/cc65/codegen.h b/src/cc65/codegen.h index 94b19c1c9..6bd016a23 100644 --- a/src/cc65/codegen.h +++ b/src/cc65/codegen.h @@ -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 */ @@ -38,8 +38,13 @@ +/* cc65 */ +#include "segments.h" + + + /*****************************************************************************/ -/* data */ +/* Data */ /*****************************************************************************/ @@ -50,19 +55,20 @@ */ #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 */ /*****************************************************************************/