]> Shamusworld >> Repos - rmac/blobdiff - amode.c
Roll back TOKENPTR changes and most of the .u32 changes weren't needed.
[rmac] / amode.c
diff --git a/amode.c b/amode.c
index 7b471dc14308304f0ec2f70a52ac4a5834976c11..7ba585349883a49b2fa1e897dd7060882f3a0e80 100644 (file)
--- a/amode.c
+++ b/amode.c
@@ -27,16 +27,16 @@ int nmodes;                                 // Number of addr'ing modes found
 int am0;                                       // Addressing mode
 int a0reg;                                     // Register
 TOKEN a0expr[EXPRSIZE];                // Expression
-VALUE a0exval;                         // Expression's value
+uint64_t a0exval;                      // Expression's value
 WORD a0exattr;                         // Expression's attribute
 int a0ixreg;                           // Index register
 int a0ixsiz;                           // Index register size (and scale)
 TOKEN a0oexpr[EXPRSIZE];       // Outer displacement expression
-VALUE a0oexval;                                // Outer displacement value
+uint64_t a0oexval;                     // Outer displacement value
 WORD a0oexattr;                                // Outer displacement attribute
 SYM * a0esym;                          // External symbol involved in expr
 TOKEN a0bexpr[EXPRSIZE];       // Base displacement expression
-VALUE a0bexval;                                // Base displacement value
+uint64_t a0bexval;                     // Base displacement value
 WORD a0bexattr;                                // Base displacement attribute
 WORD a0bsize;                          // Base displacement size
 WORD a0extension;                      // 020+ extension address word
@@ -45,16 +45,16 @@ WORD am0_030;                               // ea bits for 020+ addressing modes
 int am1;                                       // Addressing mode
 int a1reg;                                     // Register
 TOKEN a1expr[EXPRSIZE];                // Expression
-VALUE a1exval;                         // Expression's value
+uint64_t a1exval;                      // Expression's value
 WORD a1exattr;                         // Expression's attribute
 int a1ixreg;                           // Index register
 int a1ixsiz;                           // Index register size (and scale)
 TOKEN a1oexpr[EXPRSIZE];       // Outer displacement expression
-VALUE a1oexval;                                // Outer displacement value
+uint64_t a1oexval;                     // Outer displacement value
 WORD a1oexattr;                                // Outer displacement attribute
 SYM * a1esym;                          // External symbol involved in expr
 TOKEN a1bexpr[EXPRSIZE];       // Base displacement expression
-VALUE a1bexval;                                // Base displacement value
+uint64_t a1bexval;                     // Base displacement value
 WORD a1bexattr;                                // Base displacement attribute
 WORD a1bsize;                          // Base displacement size
 WORD a1extension;                      // 020+ extension address word
@@ -65,10 +65,10 @@ WORD mulmode;                               // to distinguish between 32 and 64 bit multiplications (68020+
 
 int bfparam1;                          // bfxxx / fmove instruction parameter 1
 int bfparam2;                          // bfxxx / fmove instruction parameter 2
-int bfval1;                                    //bfxxx / fmove value 1
-int bfval2;                                    //bfxxx / fmove value 2
+int bfval1;                                    // bfxxx / fmove value 1
+int bfval2;                                    // bfxxx / fmove value 2
 TOKEN bf0expr[EXPRSIZE];       // Expression
-VALUE bf0exval;                                // Expression's value
+uint64_t bf0exval;                     // Expression's value
 WORD bf0exattr;                                // Expression's attribute
 SYM * bf0esym;                         // External symbol involved in expr
 
@@ -88,7 +88,8 @@ int amode(int acount)
        a0exattr = a0oexattr = a1exattr = a1oexattr = 0;
        a0esym = a1esym = NULL;
        a0bexpr[0] = a1bexpr[0] = ENDEXPR;
-       a0bexval = a0bsize = a0extension = a1bexval = a1bsize = a1extension = 0;
+       a0bexval = a1bexval = 0;
+       a0bsize = a0extension = a1bsize = a1extension = 0;
        am0_030 = am1_030 = 0;
        bfparam1 = bfparam2 = 0;
        bf0expr[0] = ENDEXPR;
@@ -132,8 +133,8 @@ int amode(int acount)
        // it's a bitfield instruction--check the parameters inside the {} block
        // for validity
        if (*tok == '{')
-        if (check030bf() == ERROR)
-               return ERROR;
+               if (check030bf() == ERROR)
+                       return ERROR;
 
        if ((acount == 0) || (*tok != ','))
                return 1;
@@ -169,7 +170,7 @@ int amode(int acount)
 
        // It's a bitfield instruction--check the parameters inside the {} block
        // for validity
-       if (*tok == '{') 
+       if (*tok == '{')
         if (check030bf() == ERROR)
                return ERROR;
 
@@ -309,7 +310,8 @@ int fpu_reglist_left(WORD * a_rmask)
                else
                        cnt = 0;
 
-                r = 0;
+               r = 0;
+
                while (cnt-- >= 0)
                        rmask |= msktab_minus[r++];
 
@@ -382,18 +384,18 @@ int fpu_reglist_right(WORD * a_rmask)
 //
 int check030bf(void)
 {
+       PTR tp;
        CHECK00;
-
        tok++;
 
        if (*tok == CONST)
        {
-               tok++;
-               bfval1 = *(int *)tok;
+               tp.u32 = tok + 1;
+               bfval1 = (int)*tp.u64++;
+               tok = tp.u32;
 
                // Do=0, offset=immediate - shift it to place
                bfparam1 = (0 << 11);
-               tok++;
        }
        else if (*tok == SYMBOL)
        {
@@ -403,7 +405,7 @@ int check030bf(void)
                if (!(bf0exattr & DEFINED))
                        return error("bfxxx offset: immediate value must evaluate");
 
-               bfval1 = bf0exval;
+               bfval1 = (int)bf0exval;
 
                // Do=0, offset=immediate - shift it to place
                bfparam1 = (0 << 11);
@@ -418,8 +420,9 @@ int check030bf(void)
        else
                return ERROR;
 
-       if (*tok==':')
-               tok++;  //eat the ':'
+       // Eat the ':', if any
+       if (*tok == ':')
+               tok++;
 
        if (*tok == '}' && tok[1] == EOL)
        {
@@ -430,19 +433,19 @@ int check030bf(void)
 
        if (*tok == CONST)
        {
-               tok++;
-               bfval2 = *(int *)tok;
+               tp.u32 = tok + 1;
+               bfval2 = (int)*tp.u64++;
+               tok = tp.u32;
 
                // Do=0, offset=immediate - shift it to place
                bfparam2 = (0 << 5);
-               tok++;
        }
        else if (*tok == SYMBOL)
        {
                if (expr(bf0expr, &bf0exval, &bf0exattr, &bf0esym) != OK)
                        return ERROR;
 
-               bfval2 = bf0exval;
+               bfval2 = (int)bf0exval;
 
                if (!(bf0exattr & DEFINED))
                        return error("bfxxx width: immediate value must evaluate");
@@ -453,7 +456,7 @@ int check030bf(void)
        else if ((*tok >= KW_D0) && (*tok <= KW_D7))
        {
                // Do=1, offset=data register - shift it to place
-               bfval2 = ((*(int *)tok - 128));
+               bfval2 = (*(int *)tok - 128);
                bfparam2 = (1 << 5);
                tok++;
        }