]> Shamusworld >> Repos - rmac/blobdiff - procln.c
Code cleanup from last patch, also, version bump for same. :-)
[rmac] / procln.c
index c4612cbce65cb438c1351a7f40a2f7b6399c5ff6..c7d47134e0a08f7b558b6b6d85259529a417ee09 100644 (file)
--- a/procln.c
+++ b/procln.c
@@ -49,7 +49,7 @@ const char locgl_error[] = "cannot GLOBL local symbol";
 const char lab_ignored[] = "label ignored";
 
 // Table to convert an addressing-mode number to a bitmask.
-LONG amsktab[0112] = {
+LONG amsktab[0124] = {
        M_DREG, M_DREG, M_DREG, M_DREG,
        M_DREG, M_DREG, M_DREG, M_DREG,
 
@@ -71,25 +71,35 @@ LONG amsktab[0112] = {
        M_AINDEXED, M_AINDEXED, M_AINDEXED, M_AINDEXED,
        M_AINDEXED, M_AINDEXED, M_AINDEXED, M_AINDEXED,
 
-       M_ABSW,                                                                                 // 070
-       M_ABSL,                                                                                 // 071
-       M_PCDISP,                                                                               // 072
-       M_PCINDEXED,                                                                    // 073
-       M_IMMED,                                                                                // 074
-       0L,                                                                                             // 075
-       0L,                                                                                             // 076
-       0L,                                                                                             // 077
-       M_ABASE,                                                                                // 0100
-       M_MEMPOST,                                                                              // 0101
-       M_MEMPRE,                                                                               // 0102
-       M_PCBASE,                                                                               // 0103
-       M_PCMPOST,                                                                              // 0104
-       M_PCMPRE,                                                                               // 0105
-       M_AM_USP,                                                                               // 0106
-       M_AM_SR,                                                                                // 0107
-       M_AM_CCR,                                                                               // 0110
-       M_AM_NONE                                                                               // 0111
-};                                                                                                     // 0112 length
+       M_ABSW,                 // 070
+       M_ABSL,                 // 071
+       M_PCDISP,               // 072
+       M_PCINDEXED,    // 073
+       M_IMMED,                // 074
+       0L,                             // 075
+       0L,                             // 076
+       0L,                             // 077
+       M_ABASE,                // 0100
+       M_MEMPOST,              // 0101
+       M_MEMPRE,               // 0102
+       M_PCBASE,               // 0103
+       M_PCMPOST,              // 0104
+       M_PCMPRE,               // 0105
+       M_AM_USP,               // 0106
+       M_AM_SR,                // 0107
+       M_AM_CCR,               // 0110
+       M_AM_NONE,              // 0111
+       0x30,                   // 0112
+       0x30,                   // 0113
+       0L,                             // 0114
+       0L,                             // 0115
+       0L,                             // 0116
+       0L,                             // 0117
+       M_CREG,                 // 0120 (caches - TODO: is this correct or does it need its own bitfield?)
+       M_CREG,                 // 0121
+       M_FREG,                 // 0122
+       M_FPSCR                 // 0123
+};                                     // 0123 length
 
 
 // Function prototypes
@@ -177,6 +187,9 @@ loop1:                                                                              // Internal line processing loop
        // First token MUST be a symbol (Shamus: not sure why :-/)
        if (*tok != SYMBOL)
        {
+        if (*tok>=KW_D0 && *tok<=KW_R31)
+            error("cannot use reserved keyword as label name or .equ");
+        else
                error("syntax error; expected symbol");
                goto loop;
        }
@@ -261,6 +274,17 @@ as68label:
                siz = SIZL, tok++;
        else if (*tok == DOTB)
                siz = SIZB, tok++;
+       else if(*tok == DOTD)
+               siz = SIZD, tok++;
+       else if(*tok == DOTP)
+               siz = SIZP, tok++;
+       else if(*tok == DOTQ)
+               siz = SIZQ, tok++;
+       else if(*tok == DOTS)
+               siz = SIZS, tok++;
+       else if(*tok == DOTX)
+               siz = SIZX, tok++;
+
 
        // Do special directives (500..999) (These must be handled in "real time")
        if (state >= 500 && state < 1000)