Bläddra i källkod

* read more types of references properly

git-svn-id: trunk@43433 -
florian 5 år sedan
förälder
incheckning
88a8871c62
1 ändrade filer med 21 tillägg och 7 borttagningar
  1. 21 7
      compiler/mips/racpugas.pas

+ 21 - 7
compiler/mips/racpugas.pas

@@ -93,7 +93,7 @@ Interface
         len:=1;
         actasmpattern[len]:='%';
         c:=current_scanner.asmgetchar;
-        while c in ['a'..'z','A'..'Z','0'..'9'] do
+        while c in ['a'..'z','A'..'Z','0'..'9','_'] do
           Begin
             inc(len);
             actasmpattern[len]:=c;
@@ -102,12 +102,26 @@ Interface
          actasmpattern[0]:=chr(len);
          uppervar(actasmpattern);
          actrel:=addr_no;
-         if (actasmpattern='%HI') then
-           actrel:=addr_high
-         else if (actasmpattern='%LO')then
-           actrel:=addr_low
-         else
-           Message(asmr_e_invalid_reference_syntax);
+         case actasmpattern of
+           '%CALL_LO':
+             actrel:=addr_low_call;
+           '%CALL_HI':
+             actrel:=addr_high_call;
+           '%GOT':
+             actrel:=addr_pic;
+           '%HIGH':
+             actrel:=addr_high;
+           '%LO':
+             actrel:=addr_low;
+           '%CALL16':
+             actrel:=addr_pic_call16;
+           '%GOT_LO':
+             actrel:=addr_low_pic;
+           '%GOT_HI':
+             actrel:=addr_high_pic;
+           else
+             Message(asmr_e_invalid_reference_syntax);
+         end;
          if actrel<>addr_no then
            actasmtoken:=AS_RELTYPE;
       end;