]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Added optimization flags to makefile (how long was THAT missing?)
[rmac] / procln.c
index edd21730331b07981cbda13a7270e204a049c8c1..ab9d53a0eefc98397348f71a3a55cfd7f7565608 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -29,6 +29,7 @@
 #define DECL_MR
 #include "risckw.h"
 
+
 IFENT * ifent;                                 // Current ifent
 static IFENT ifent0;                   // Root ifent
 static IFENT * f_ifent;                        // Freelist of ifents
@@ -103,7 +104,7 @@ void init_procln(void)
 //
 // Line Processor
 //
-void assemble(void)
+void Assemble(void)
 {
        int state;                                      // Keyword machine state (output)
        int j;                                          // Random int, must be fast
@@ -134,6 +135,7 @@ loop:                                                       // Line processing loop label
        // Get another line of tokens
        if (tokln() == TKEOF)
        {
+if (verb_flag) printf("Assemble: Found TKEOF flag...\n");
                if (list_flag && listflag)                      // Flush last line of source
                        listeol();
 
@@ -178,7 +180,8 @@ loop1:                                                                              // Internal line processing loop
 
        if (j == '=' || j == DEQUALS || j == SET || j == REG || j == EQUREG || j == CCDEF)
        {
-               equate = (char *)tok[1];
+//             equate = (char *)tok[1];
+               equate = string[tok[1]];
                equtyp = j;
                tok += 3;
                goto normal;
@@ -188,7 +191,8 @@ loop1:                                                                              // Internal line processing loop
        if (j == ':' || j == DCOLON)
        {
 as68label:
-               label = (char *)tok[1];                         // Get label name
+//             label = (char *)tok[1];                         // Get label name
+               label = string[tok[1]];                         // Get label name
                labtyp = tok[2];                                        // Get label type
                tok += 3;                                                       // Go to next line token
 
@@ -218,8 +222,12 @@ as68label:
 
 // This is the problem here: On 64-bit platforms, this cuts the native pointer
 // in half. We need to figure out how to fix this.
-#warning "!!! Bad pointer !!!"
+//#warning "!!! Bad pointer !!!"
+#if 0
        opname = p = (char *)*tok++;                    // Store opcode name here
+#else
+       opname = p = string[*tok++];
+#endif
 
        // Check to see if the SYMBOL is a keyword (a mnemonic or directive).
        // On output, `state' will have one of the values:
@@ -299,7 +307,7 @@ as68label:
                                if (label != NULL)
                                        warn(lab_ignored);
 
-                               defmac();
+                               DefineMacro();
                        }
 
                        goto loop;
@@ -310,7 +318,7 @@ as68label:
                                if (label != NULL)
                                        warn(lab_ignored);
 
-                               exitmac();
+                               ExitMacro();
                        }
 
                        goto loop;
@@ -348,7 +356,7 @@ normal:
 
                if (sy == NULL)
                {
-                       sy = newsym(equate, LABEL, j);
+                       sy = NewSymbol(equate, LABEL, j);
                        sy->sattr = 0;
 
                        if (equtyp == DEQUALS)
@@ -430,7 +438,8 @@ normal:
                        // Checking for a register symbol
                        else if (tok[0] == SYMBOL)
                        {
-                               sy2 = lookup((char *)tok[1], LABEL, j);
+//                             sy2 = lookup((char *)tok[1], LABEL, j);
+                               sy2 = lookup(string[tok[1]], LABEL, j);
 
                                // Make sure symbol is a valid equreg
                                if (!sy2 || !(sy2->sattre & EQUATEDREG))
@@ -467,7 +476,8 @@ normal:
 
                        if (tok[0] == SYMBOL)
                        {
-                               sy2 = lookup((char *)tok[1], LABEL, j);
+//                             sy2 = lookup((char *)tok[1], LABEL, j);
+                               sy2 = lookup(string[tok[1]], LABEL, j);
 
                                if (!sy2 || !(sy2->sattre & EQUATEDCC))
                                {
@@ -488,7 +498,8 @@ normal:
                //equ a equr
                else if (*tok == SYMBOL)
                {
-                       sy2 = lookup((char *)tok[1], LABEL, j);
+//                     sy2 = lookup((char *)tok[1], LABEL, j);
+                       sy2 = lookup(string[tok[1]], LABEL, j);
 
                        if (sy2 && (sy2->sattre & EQUATEDREG))
                        {
@@ -524,16 +535,21 @@ normal:
        if (label != NULL)
        {
 do_label:
+               // Check for dot in front of label; means this is a local label if present
+#if 0
                j = 0;
 
                if (*label == '.')
                        j = curenv;
+#else
+               j = (*label == '.' ? curenv : 0);
+#endif
 
                sy = lookup(label, LABEL, j);
 
                if (sy == NULL)
                {
-                       sy = newsym(label, LABEL, j);
+                       sy = NewSymbol(label, LABEL, j);
                        sy->sattr = 0;
                        sy->sattre = RISCSYM;
                }
@@ -561,7 +577,7 @@ do_label:
                lab_sym = sy;
 
                if (!j)
-                       ++curenv;
+                       curenv++;
 
                // Make label global
                if (labtyp == DCOLON)
@@ -612,7 +628,7 @@ do_label:
                // Call RISC code generator if we found a mnemonic
                if (state >= 3000)
                {
-                       risccg(state);
+                       GenerateRISCCode(state);
                        goto loop;
                }
        }
@@ -621,7 +637,7 @@ do_label:
        if (state < 0)
        {
                if ((sy = lookup(opname, MACRO, 0)) != NULL) 
-                       invokemac(sy, siz);
+                       InvokeMacro(sy, siz);
                else
                        errors("unknown op '%s'", opname);
 
@@ -703,7 +719,6 @@ int d_if(void)
 
        // Alloc an IFENTRY
        if ((rif = f_ifent) == NULL)
-//             rif = (IFENT *)amem((LONG)sizeof(IFENT));
                rif = (IFENT *)malloc(sizeof(IFENT));
        else
                f_ifent = rif->if_prev;
@@ -713,7 +728,8 @@ int d_if(void)
 
        if (!disabled)
        {
-               if (expr(exprbuf, &eval, &eattr, &esym) != OK) return 0;
+               if (expr(exprbuf, &eval, &eattr, &esym) != OK)
+                       return 0;
 
                if ((eattr & DEFINED) == 0)
                        return error(undef_error);