]> Shamusworld >> Repos - rmac/blobdiff - amode.c
Add support for 64-bit evaluations.
[rmac] / amode.c
diff --git a/amode.c b/amode.c
index 3d789af93cb3f258a12d4370e18f3a22d0678cf8..70b30e1311c6c58035efde25c6916517779e07dc 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
 int am0;                                       // Addressing mode
 int a0reg;                                     // Register
 TOKEN a0expr[EXPRSIZE];                // Expression
-uint32_t 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
 WORD a0exattr;                         // Expression's attribute
 int a0ixreg;                           // Index register
 int a0ixsiz;                           // Index register size (and scale)
 TOKEN a0oexpr[EXPRSIZE];       // Outer displacement expression
-uint32_t a0oexval;                             // Outer displacement value
+uint32_t a0oexval;                     // Outer displacement value
 WORD a0oexattr;                                // Outer displacement attribute
 SYM * a0esym;                          // External symbol involved in expr
 TOKEN a0bexpr[EXPRSIZE];       // Base displacement expression
 WORD a0oexattr;                                // Outer displacement attribute
 SYM * a0esym;                          // External symbol involved in expr
 TOKEN a0bexpr[EXPRSIZE];       // Base displacement expression
-uint32_t 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
 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
 int am1;                                       // Addressing mode
 int a1reg;                                     // Register
 TOKEN a1expr[EXPRSIZE];                // Expression
-uint32_t 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
 WORD a1exattr;                         // Expression's attribute
 int a1ixreg;                           // Index register
 int a1ixsiz;                           // Index register size (and scale)
 TOKEN a1oexpr[EXPRSIZE];       // Outer displacement expression
-uint32_t a1oexval;                             // Outer displacement value
+uint32_t a1oexval;                     // Outer displacement value
 WORD a1oexattr;                                // Outer displacement attribute
 SYM * a1esym;                          // External symbol involved in expr
 TOKEN a1bexpr[EXPRSIZE];       // Base displacement expression
 WORD a1oexattr;                                // Outer displacement attribute
 SYM * a1esym;                          // External symbol involved in expr
 TOKEN a1bexpr[EXPRSIZE];       // Base displacement expression
-uint32_t 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
 WORD a1bexattr;                                // Base displacement attribute
 WORD a1bsize;                          // Base displacement size
 WORD a1extension;                      // 020+ extension address word
@@ -68,7 +68,7 @@ int bfparam2;                         // bfxxx / fmove instruction parameter 2
 int bfval1;                                    //bfxxx / fmove value 1
 int bfval2;                                    //bfxxx / fmove value 2
 TOKEN bf0expr[EXPRSIZE];       // Expression
 int bfval1;                                    //bfxxx / fmove value 1
 int bfval2;                                    //bfxxx / fmove value 2
 TOKEN bf0expr[EXPRSIZE];       // Expression
-uint32_t bf0exval;                             // Expression's value
+uint64_t bf0exval;                     // Expression's value
 WORD bf0exattr;                                // Expression's attribute
 SYM * bf0esym;                         // External symbol involved in expr
 
 WORD bf0exattr;                                // Expression's attribute
 SYM * bf0esym;                         // External symbol involved in expr
 
@@ -388,6 +388,7 @@ int check030bf(void)
 
        if (*tok == CONST)
        {
 
        if (*tok == CONST)
        {
+               tok++;  // Skip the HI LONG
                tok++;
                bfval1 = *(int *)tok;
 
                tok++;
                bfval1 = *(int *)tok;
 
@@ -430,6 +431,7 @@ int check030bf(void)
 
        if (*tok == CONST)
        {
 
        if (*tok == CONST)
        {
+               tok++;  // Skip the HI LONG
                tok++;
                bfval2 = *(int *)tok;
 
                tok++;
                bfval2 = *(int *)tok;