]> git.sur5r.net Git - cc65/commitdiff
Working on the backend
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 1 May 2001 16:57:43 +0000 (16:57 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 1 May 2001 16:57:43 +0000 (16:57 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@702 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/cc65/asmcode.c
src/cc65/codegen.c
src/cc65/codegen.h
src/cc65/codeseg.c
src/cc65/expr.c
src/cc65/litpool.h

index cf197945733945702a1a010cc6d73abf61f845f0..227adbe2be07315232089cd44f9c5674d62066a1 100644 (file)
@@ -64,12 +64,7 @@ void AddCodeHint (const char* Hint)
 CodeMark GetCodePos (void)
 /* Get a marker pointing to the current output position */
 {
-    unsigned EntryCount = GetCodeSegEntries (CS);
-
-    /* This function should never be called without any code output */
-    CHECK (EntryCount > 0);
-
-    return EntryCount;
+    return GetCodeSegEntries (CS);
 }
 
 
index 8c1bd89f5bbffb0704876b2047bbd81cdc092547..4573471d0da7848758fec7658e38555ba4dbb0f3 100644 (file)
@@ -49,8 +49,6 @@
 #include "cpu.h"
 #include "error.h"
 #include "global.h"
-#include "litpool.h"
-/* ### #include "optimize.h" */
 #include "segname.h"
 #include "util.h"
 #include "codegen.h"
@@ -191,18 +189,6 @@ void g_preamble (void)
 
     /* Define long branch macros */
     AddCodeLine (".macpack\tlongbranch");
-
-    /* Tell the optimizer that this is the end of the preamble */
-    AddCodeHint ("end_of_preamble");
-}
-
-
-
-void g_postamble (void)
-/* Generate assembler code postamble */
-{
-    /* Tell the optimizer that this is the start of the postamble */
-    AddCodeHint ("start_of_postamble");
 }
 
 
@@ -3938,6 +3924,26 @@ 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.
+ */
+{
+    if (Len >= 0) {
+       AddCodeSegLine (CS, "%.*s", Len, Line);
+    } else {
+       AddCodeSegLine (CS, "%s", Line);
+    }
+}
+
+
+
 /*****************************************************************************/
 /*                         Inlined known functions                          */
 /*****************************************************************************/
index 9eaf1b429f1ceb233be03aff191ef01177ff73ac..2b0274fe0a80c119861237741cbe906f0323b12b 100644 (file)
@@ -37,7 +37,7 @@
 #define CODEGEN_H
 
 
-                   
+
 /* ##### */
 #include "dataseg.h"
 #include "codeseg.h"
@@ -101,9 +101,6 @@ extern CodeSeg* CS;
 void g_preamble (void);
 /* Generate the assembler code preamble */
 
-void g_postamble (void);
-/* Generate assembler code postamble */
-
 
 
 /*****************************************************************************/
@@ -450,6 +447,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                          */
 /*****************************************************************************/
index c3993237c22b77cebefca8a2a63de63d13f7155a..959efbfe47bd234f8960f11a7626468d337c152d 100644 (file)
@@ -486,9 +486,6 @@ void DelCodeSegAfter (CodeSeg* S, unsigned Last)
     /* Get the number of entries in this segment */
     unsigned Count = CollCount (&S->Entries);
 
-    /* Must not be called with count zero */
-    CHECK (Count > 0 && Count >= Last);
-
     /* Remove all entries after the given one */
     while (Last < Count) {
 
index 321e5d2436e63d088c21747516d62e3f6e96b6ac..f909fcbe9a87a0b1f095bf5a7b0024f1f20b0841 100644 (file)
@@ -744,11 +744,7 @@ void doasm (void)
  * looks like the one defined for C++ (C has no ASM directive), that is,
  * a string literal in parenthesis.
  */
-{                                  
-    /* ########## */
-    Error ("Currently unavailable");
-                   
-#if 0
+{
     /* Skip the ASM */
     NextToken ();
 
@@ -759,8 +755,25 @@ void doasm (void)
     if (curtok != TOK_SCONST) {
        Error ("String literal expected");
     } else {
-       /* Write the string directly into the output, followed by a newline */
-               AddCodeLine (GetLiteral (curval));
+
+       /* The string literal may consist of more than one line of assembler
+        * code. Separate the single lines and output the code.
+        */
+       const char* S = GetLiteral (curval);
+       while (*S) {
+
+           /* Allow lines up to 256 bytes */
+           const char* E = strchr (S, '\n');
+           if (E) {
+               /* Found a newline */
+               g_asmcode (S, E-S);
+               S = E+1;
+           } else {
+               int Len = strlen (S);
+               g_asmcode (S, Len);
+               S += Len;
+           }
+       }
 
        /* Reset the string pointer, effectivly clearing the string from the
         * string table. Since we're working with one token lookahead, this
@@ -775,7 +788,6 @@ void doasm (void)
 
     /* Closing paren needed */
     ConsumeRParen ();
-#endif
 }
 
 
index cd5cf903178c32c5139d38792acfc9709e2b95b8..e9ad3c5cb1f3cc24238630e7984dae2391dee286 100644 (file)
@@ -6,10 +6,10 @@
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
-/* (C) 1998     Ullrich von Bassewitz                                        */
-/*              Wacholderweg 14                                              */
-/*              D-70597 Stuttgart                                            */
-/* EMail:       uz@musoftware.de                                             */
+/* (C) 1998-2001 Ullrich von Bassewitz                                       */
+/*               Wacholderweg 14                                             */
+/*               D-70597 Stuttgart                                           */
+/* EMail:        uz@cc65.org                                                */
 /*                                                                           */
 /*                                                                           */
 /* This software is provided 'as-is', without any expressed or implied       */