]> Shamusworld >> Repos - rmac/blobdiff - sect.c
Add support for 64-bit evaluations.
[rmac] / sect.c
diff --git a/sect.c b/sect.c
index b5bd6ecfb04673eccb44fa7cb768da51735f90eb..3e127656916367fa1f7573336582f7a951f9501e 100644 (file)
--- a/sect.c
+++ b/sect.c
@@ -308,9 +308,11 @@ int AddFixup(uint16_t attr, uint32_t loc, TOKEN * fexpr)
                // Count the # of tokens in the expression
                for(len=0; fexpr[len]!=ENDEXPR; len++)
                {
-                       // Add one to len for 2X tokens
-                       if (fexpr[len] == CONST || fexpr[len] == SYMBOL)
+                       // Add one to len for 2X tokens, two for 3X tokens
+                       if (fexpr[len] == SYMBOL)
                                len++;
+                       else if (fexpr[len] == CONST)
+                               len += 2;
                }
 
                // Add 1 for ENDEXPR
@@ -388,7 +390,7 @@ int AddFixup(uint16_t attr, uint32_t loc, TOKEN * fexpr)
 int ResolveFixups(int sno)
 {
        PTR fup;                                // Current fixup
-       VALUE eval;                             // Expression value
+       uint64_t eval;                  // Expression value
        SYM * sy;                               // (Temp) pointer to a symbol
        uint16_t i;                             // (Temp) word
        int reg2;
@@ -514,7 +516,7 @@ int ResolveFixups(int sno)
                                if (eattr & DEFINED)
                                {
                                        if (tdb == sno)
-                                               eval -= (VALUE)loc;
+                                               eval -= (uint32_t)loc;
                                        else if (tdb)
                                        {
                                                error("PC-relative expr across sections");
@@ -525,7 +527,7 @@ int ResolveFixups(int sno)
                                                warn("unoptimized short branch");
                                }
                                else if (obj_format == MWC)
-                                       eval -= (VALUE)loc;
+                                       eval -= (uint32_t)loc;
 
                                tdb = 0;
                                eattr &= ~TDB;