]> Shamusworld >> Repos - rmac/blobdiff - sect.c
Added "-4" switch that enables C style operator precedence (original work by Bastian...
[rmac] / sect.c
diff --git a/sect.c b/sect.c
index a9239e6e638b1cb8c808d801432a7be9b91e93f7..b20542bbd172c554aa375c1bbb513724112ea3fe 100644 (file)
--- a/sect.c
+++ b/sect.c
@@ -18,7 +18,8 @@
 #include "riscasm.h"
 #include "symbol.h"
 #include "token.h"
-
+#define DEF_REGRISC
+#include "riscregs.h"
 
 // Function prototypes
 void MakeSection(int, uint16_t);
@@ -461,9 +462,9 @@ int ResolveFixups(int sno)
                        if (evexpr(fup->expr, &eval, &eattr, &esym) != OK)
                                continue;
 
-                       if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & REFERENCED) && (eattr & DEFINED) && (!(eattr & EQUATED)))
+                       if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & (DEFINED | REFERENCED | EQUATED)) == (DEFINED | REFERENCED))
                        {
-                               error("relocation not allowed");
+                               error("relocation not allowed when o30 is enabled");
                                continue;
                        }
                }
@@ -473,9 +474,9 @@ int ResolveFixups(int sno)
                        SYM * sy = fup->symbol;
                        eattr = sy->sattr;
 
-                       if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & REFERENCED) && (eattr & DEFINED) && (!(eattr & EQUATED)))
+                       if ((CHECK_OPTS(OPT_PC_RELATIVE)) && (eattr & (DEFINED | REFERENCED | EQUATED)) == (DEFINED | REFERENCED))
                        {
-                               error("relocation not allowed");
+                               error("relocation not allowed when o30 is enabled");
                                continue;
                        }
 
@@ -589,7 +590,7 @@ int ResolveFixups(int sno)
                                        *locp = 0x71;
 
                                        if (optim_warn_flag)
-                                               warn("bra.s with zero offset converted to NOP");
+                                               warn("o6: bra.s with zero offset converted to NOP");
 
                                        continue;
                                }
@@ -720,6 +721,7 @@ int ResolveFixups(int sno)
                        }
                        else if ((dw & FUMASKRISC) == FU_REGONE)
                        {
+                               eval -= REGRISC_R0;
                                if (eval > 31)
                                {
                                        error("register one value out of range");
@@ -733,6 +735,7 @@ int ResolveFixups(int sno)
                        }
                        else if ((dw & FUMASKRISC) == FU_REGTWO)
                        {
+                               eval -= REGRISC_R0;
                                if (eval > 31)
                                {
                                        error("register two value out of range");