Browse Source

changes to fix #32043
* changed most of the variables in the assembler readers used to store constants from aint to tcgint
as aint has only the size of the accumular while some CPUs (AVR) allow larger constants in instructions
+ allow access to absolute symbols with address type in inline assembler
* allow absolute addresses in avr inline assembler
+ tests

git-svn-id: trunk@37411 -

florian 7 years ago
parent
commit
4cf2a2672a

+ 3 - 0
.gitattributes

@@ -14199,6 +14199,8 @@ tests/webtbf/tw31465.pp svneol=native#text/pascal
 tests/webtbf/tw3183.pp svneol=native#text/plain
 tests/webtbf/tw3186.pp svneol=native#text/plain
 tests/webtbf/tw31973.pp svneol=native#text/pascal
+tests/webtbf/tw32043b.pp svneol=native#text/pascal
+tests/webtbf/tw32043c.pp svneol=native#text/pascal
 tests/webtbf/tw3218.pp svneol=native#text/plain
 tests/webtbf/tw3241.pp svneol=native#text/plain
 tests/webtbf/tw32412a.pp svneol=native#text/pascal
@@ -15784,6 +15786,7 @@ tests/webtbs/tw3185.pp svneol=native#text/plain
 tests/webtbs/tw3190.pp svneol=native#text/plain
 tests/webtbs/tw31945.pp svneol=native#text/pascal
 tests/webtbs/tw3197.pp svneol=native#text/plain
+tests/webtbs/tw32043.pp svneol=native#text/pascal
 tests/webtbs/tw3207.pp svneol=native#text/plain
 tests/webtbs/tw3210.pp svneol=native#text/plain
 tests/webtbs/tw32108.pp svneol=native#text/pascal

+ 2 - 2
compiler/aasmtai.pas

@@ -795,7 +795,7 @@ interface
            procedure derefimpl;override;
            procedure SetCondition(const c:TAsmCond);
            procedure allocate_oper(opers:longint);
-           procedure loadconst(opidx:longint;l:aint);
+           procedure loadconst(opidx:longint;l:tcgint);
            procedure loadsymbol(opidx:longint;s:tasmsymbol;sofs:longint);
            procedure loadlocal(opidx:longint;s:pointer;sofs:longint;indexreg:tregister;scale:byte;getoffset,forceref:boolean);
            procedure loadref(opidx:longint;const r:treference);
@@ -2553,7 +2553,7 @@ implementation
       end;
 
 
-    procedure tai_cpu_abstract.loadconst(opidx:longint;l:aint);
+    procedure tai_cpu_abstract.loadconst(opidx:longint;l:tcgint);
       begin
         allocate_oper(opidx+1);
         with oper[opidx]^ do

+ 6 - 6
compiler/arm/raarmgas.pas

@@ -163,7 +163,7 @@ Unit raarmgas;
     procedure tarmattreader.ReadSym(oper : tarmoperand);
       var
          tempstr, mangledname : string;
-         typesize,l,k : longint;
+         typesize,l,k : tcgint;
       begin
         tempstr:=actasmpattern;
         Consume(AS_ID);
@@ -310,7 +310,7 @@ Unit raarmgas;
       procedure read_index(require_rbracket : boolean);
         var
           recname : string;
-          o_int,s_int : aint;
+          o_int,s_int : tcgint;
         begin
           case actasmtoken of
             AS_REGISTER :
@@ -576,7 +576,7 @@ Unit raarmgas;
     Procedure tarmattreader.BuildOperand(oper : tarmoperand);
       var
         expr : string;
-        typesize,l : longint;
+        typesize,l : tcgint;
 
 
         procedure AddLabelOperand(hl:tasmlabel);
@@ -607,7 +607,7 @@ Unit raarmgas;
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : longint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;
@@ -806,7 +806,7 @@ Unit raarmgas;
           var
             symtype: TAsmsymtype;
             sym: string;
-            val: aint;
+            val: tcgint;
           begin
             case actasmtoken of
               AS_INTNUM,
@@ -1437,7 +1437,7 @@ Unit raarmgas;
       var
         symname,
         symval  : String;
-        val     : aint;
+        val     : tcgint;
         symtyp  : TAsmsymtype;
       begin
         case actasmpattern of

+ 1 - 1
compiler/avr/raavr.pas

@@ -31,7 +31,7 @@ unit raavr;
       rautils;
 
     type
-      TAVROperand=class(TOperand)
+       TAVROperand=class(TOperand)
       end;
 
       TAVRInstruction=class(TInstruction)

+ 17 - 9
compiler/avr/raavrgas.pas

@@ -107,7 +107,8 @@ Unit raavrgas;
     procedure tavrattreader.ReadSym(oper : tavroperand);
       var
         tempstr, mangledname : string;
-        typesize,l,k : aint;
+        typesize : tcgint;
+        l,k : tcgint;
       begin
         tempstr:=actasmpattern;
         Consume(AS_ID);
@@ -203,7 +204,7 @@ Unit raavrgas;
     Procedure tavrattreader.BuildOperand(oper : tavroperand);
       var
         expr : string;
-        typesize,l : aint;
+        typesize,l : tcgint;
 
 
         procedure AddLabelOperand(hl:tasmlabel);
@@ -228,7 +229,7 @@ Unit raavrgas;
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : aint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;
@@ -295,10 +296,14 @@ Unit raavrgas;
               AS_PLUS:
                 Begin
                   oper.opr.ref.offset:=BuildConstExpression(True,False);
-                  if actasmtoken<>AS_LPAREN then
-                    Message(asmr_e_invalid_reference_syntax)
-                  else
-                    BuildReference(oper);
+                  case actasmtoken of
+                    AS_LPAREN:
+                      BuildReference(oper);
+                    AS_COMMA:
+                      exit;
+                    else
+                      Message(asmr_e_invalid_reference_syntax)
+                  end;
                 end;
               AS_LPAREN:
                 BuildReference(oper);
@@ -373,8 +378,11 @@ Unit raavrgas;
                   oper.opr.ref.offset:=BuildConstExpression(True,False);
 
                   { absolute memory addresss? }
-                  if actopcode in [A_LDS,A_STS] then
-                    BuildReference(oper)
+                  if (actopcode in [A_LDS,A_STS]) and (actasmtoken<>AS_COMMA) then
+                    begin
+                      if not(MaybeBuildReference) then
+                        Message(asmr_e_invalid_reference_syntax);
+                    end
                   else
                     begin
                       ofs:=oper.opr.ref.offset;

+ 3 - 3
compiler/m68k/ra68kmot.pas

@@ -636,7 +636,7 @@ const
       sym : tsym;
       srsymtable : TSymtable;
       hl : tasmlabel;
-      l : longint;
+      l : tcgint;
       errorflag: boolean;
   begin
     BuildExpression:=0;
@@ -1072,7 +1072,7 @@ const
   var
     tempstr: string;
     expr: string;
-    l : longint;
+    l : tcgint;
     errorflag : boolean;
   begin
     BuildRefExpression := 0;
@@ -1401,7 +1401,7 @@ const
     expr: string;
     tempstr: string;
     lab: tasmlabel;
-    l : longint;
+    l : tcgint;
     hl: tasmlabel;
     p: pointer;
   begin

+ 2 - 2
compiler/mips/racpugas.pas

@@ -116,7 +116,7 @@ Interface
     Procedure TMipsReader.BuildOperand(oper : TOperand);
       var
         expr : string;
-        typesize,l : aint;
+        typesize,l : tcgint;
 
         procedure AddLabelOperand(hl:tasmlabel);
           begin
@@ -140,7 +140,7 @@ Interface
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : aint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;

+ 5 - 5
compiler/powerpc/rappcgas.pas

@@ -62,7 +62,7 @@ Unit rappcgas;
     procedure tppcattreader.ReadSym(oper : tppcoperand);
       var
          tempstr, mangledname : string;
-         typesize,l,k : aint;
+         typesize,l,k : tcgint;
       begin
         tempstr:=actasmpattern;
         Consume(AS_ID);
@@ -139,7 +139,7 @@ Unit rappcgas;
         end;
 
       var
-        l : aint;
+        l : tcgint;
         relsym: string;
         asmsymtyp: tasmsymtype;
         isflags: tindsymflags;
@@ -287,7 +287,7 @@ Unit rappcgas;
     Procedure tppcattreader.BuildOperand(oper : tppcoperand);
       var
         expr : string;
-        typesize,l : aint;
+        typesize,l : tcgint;
 
 
         procedure AddLabelOperand(hl:tasmlabel);
@@ -312,7 +312,7 @@ Unit rappcgas;
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : aint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;
@@ -411,7 +411,7 @@ Unit rappcgas;
       var
         tempreg : tregister;
         hl : tasmlabel;
-        ofs : aint;
+        ofs : tcgint;
       Begin
         expr:='';
         case actasmtoken of

+ 12 - 12
compiler/raatt.pas

@@ -95,9 +95,9 @@ unit raatt;
          procedure BuildRealConstant(typ : tfloattype);
          procedure BuildStringConstant(asciiz: boolean);
          procedure BuildRva;
-         procedure BuildRecordOffsetSize(const expr: string;var offset:aint;var size:aint; var mangledname: string; needvmtofs: boolean);
-         procedure BuildConstSymbolExpression(allowref,betweenbracket,needofs:boolean;var value:aint;var asmsym:string;var asmsymtyp:TAsmsymtype);
-         function BuildConstExpression(allowref,betweenbracket:boolean): aint;
+         procedure BuildRecordOffsetSize(const expr: string;var offset:tcgint;var size:tcgint; var mangledname: string; needvmtofs: boolean);
+         procedure BuildConstSymbolExpression(allowref,betweenbracket,needofs:boolean;var value:tcgint;var asmsym:string;var asmsymtyp:TAsmsymtype);
+         function BuildConstExpression(allowref,betweenbracket:boolean): tcgint;
          function Assemble: tlinkedlist;override;
          procedure handleopcode;virtual;abstract;
          function is_asmopcode(const s: string) : boolean;virtual;abstract;
@@ -862,7 +862,7 @@ unit raatt;
        asmsymtyp : TAsmSymType;
        asmsym,
        expr: string;
-       value : aint;
+       value : tcgint;
       Begin
         Repeat
           Case actasmtoken of
@@ -1037,7 +1037,7 @@ unit raatt;
        lasTSec    : TAsmSectiontype;
        l1,
        l2,
-       symofs     : aint;
+       symofs     : tcgint;
        symtyp     : TAsmsymtype;
      Begin
        Message1(asmr_d_start_reading,'GNU AS');
@@ -1325,7 +1325,7 @@ unit raatt;
                                Parsing Helpers
 *****************************************************************************}
 
-    Procedure tattreader.BuildRecordOffsetSize(const expr: string;var offset:aint;var size:aint; var mangledname: string; needvmtofs: boolean);
+    Procedure tattreader.BuildRecordOffsetSize(const expr: string;var offset:tcgint;var size:tcgint; var mangledname: string; needvmtofs: boolean);
       { Description: This routine builds up a record offset after a AS_DOT }
       { token is encountered.                                              }
       { On entry actasmtoken should be equal to AS_DOT                     }
@@ -1358,12 +1358,12 @@ unit raatt;
       end;
 
 
-    procedure tattreader.BuildConstSymbolExpression(allowref,betweenbracket,needofs:boolean;var value:aint;var asmsym:string;var asmsymtyp:TAsmsymtype);
+    procedure tattreader.BuildConstSymbolExpression(allowref,betweenbracket,needofs:boolean;var value:tcgint;var asmsym:string;var asmsymtyp:TAsmsymtype);
       var
         hssymtyp : TAsmSymType;
         hs,tempstr,expr,mangledname : string;
         parenlevel : longint;
-        l,k : aint;
+        l,k : tcgint;
         errorflag : boolean;
         prevtok : tasmtoken;
         sym : tsym;
@@ -1685,9 +1685,9 @@ unit raatt;
       end;
 
 
-    function tattreader.BuildConstExpression(allowref,betweenbracket:boolean): aint;
+    function tattreader.BuildConstExpression(allowref,betweenbracket:boolean): tcgint;
       var
-        l : aint;
+        l : tcgint;
         hs : string;
         hssymtyp : TAsmSymType;
       begin
@@ -1700,7 +1700,7 @@ unit raatt;
 
     Procedure tattreader.BuildConstantOperand(oper : toperand);
       var
-        l : aint;
+        l : tcgint;
         tempstr : string;
         tempsymtyp : TAsmSymType;
       begin
@@ -1722,7 +1722,7 @@ unit raatt;
       var
        asmsymtyp : TAsmSymType;
        asmsym: string;
-       value : aint;
+       value : tcgint;
        ai:tai_const;
       begin
         repeat

+ 62 - 49
compiler/rautils.pas

@@ -50,7 +50,11 @@ type
   TOprRec = record
     case typ:TOprType of
       OPR_NONE      : ();
+{$ifdef AVR}
+      OPR_CONSTANT  : (val:word);
+{$else AVR}
       OPR_CONSTANT  : (val:aint);
+{$endif AVR}
       OPR_SYMBOL    : (symbol:tasmsymbol;symofs:aint;symseg:boolean;sym_farproc_entry:boolean);
       OPR_REFERENCE : (varsize:asizeint; constoffset: asizeint;ref_farproc_entry:boolean;ref:treference);
       OPR_LOCAL     : (localvarsize, localconstoffset: asizeint;localsym:tabstractnormalvarsym;localsymofs:aint;localindexreg:tregister;localscale:byte;localgetoffset,localforceref:boolean);
@@ -145,29 +149,29 @@ type
     public
      Constructor create;
      Destructor Destroy;override;
-     Function Evaluate(Expr:  String): aint;
+     Function Evaluate(Expr:  String): tcgint;
      Function Priority(_Operator: Char): aint;
     private
-     RPNStack   : Array[1..RPNMax] of aint;        { Stack For RPN calculator }
-     RPNTop     : aint;
+     RPNStack   : Array[1..RPNMax] of tcgint;        { Stack For RPN calculator }
+     RPNTop     : tcgint;
      OpStack    : Array[1..OpMax] of TExprOperator;    { Operator stack For conversion }
-     OpTop      : aint;
-     Procedure RPNPush(Num: aint);
-     Function RPNPop: aint;
+     OpTop      : tcgint;
+     Procedure RPNPush(Num: tcgint);
+     Function RPNPop: tcgint;
      Procedure RPNCalc(const token: String; prefix: boolean);
      Procedure OpPush(_Operator: char; prefix: boolean);
      { In reality returns TExprOperaotr }
      Procedure OpPop(var _Operator:TExprOperator);
   end;
 
-  { Evaluate an expression string to a aint }
-  Function CalculateExpression(const expression: string): aint;
+  { Evaluate an expression string to a tcgint }
+  Function CalculateExpression(const expression: string): tcgint;
 
   {---------------------------------------------------------------------}
   {                     String routines                                 }
   {---------------------------------------------------------------------}
 
-Function ParseVal(const S:String;base:byte):aint;
+Function ParseVal(const S:String;base:byte):tcgint;
 Function PadZero(Var s: String; n: byte): Boolean;
 Function EscapeToPascal(const s:string): string;
 
@@ -176,10 +180,10 @@ Function EscapeToPascal(const s:string): string;
 ---------------------------------------------------------------------}
 
 procedure AsmSearchSym(const s:string;var srsym:tsym;var srsymtable:TSymtable);
-Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean):boolean;
-Function SearchType(const hs:string;var size:aint): Boolean;
+Function GetRecordOffsetSize(s:string;Var Offset: tcgint;var Size:tcgint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean):boolean;
+Function SearchType(const hs:string;var size:tcgint): Boolean;
 Function SearchRecordType(const s:string): boolean;
-Function SearchIConstant(const s:string; var l:aint): boolean;
+Function SearchIConstant(const s:string; var l:tcgint): boolean;
 Function AsmRegisterPara(sym: tabstractnormalvarsym): boolean;
 
 {---------------------------------------------------------------------
@@ -187,11 +191,11 @@ Function AsmRegisterPara(sym: tabstractnormalvarsym): boolean;
 ---------------------------------------------------------------------}
 
   Procedure ConcatLabel(p: TAsmList;var l : tasmlabel);
-  Procedure ConcatConstant(p : TAsmList;value: aint; constsize:byte);
-  Procedure ConcatConstSymbol(p : TAsmList;const sym:string;symtyp:tasmsymtype;l:aint);
+  Procedure ConcatConstant(p : TAsmList;value: tcgint; constsize:byte);
+  Procedure ConcatConstSymbol(p : TAsmList;const sym:string;symtyp:tasmsymtype;l:tcgint);
   Procedure ConcatRealConstant(p : TAsmList;value: bestreal; real_typ : tfloattype);
   Procedure ConcatString(p : TAsmList;s:string);
-  procedure ConcatAlign(p:TAsmList;l:aint);
+  procedure ConcatAlign(p:TAsmList;l:tcgint);
   Procedure ConcatPublic(p:TAsmList;const s : string);
   Procedure ConcatLocal(p:TAsmList;const s : string);
 
@@ -214,7 +218,7 @@ Begin
 end;
 
 
-Procedure TExprParse.RPNPush(Num : aint);
+Procedure TExprParse.RPNPush(Num : tcgint);
 { Add an operand to the top of the RPN stack }
 begin
   if RPNTop < RPNMax then
@@ -227,7 +231,7 @@ begin
 end;
 
 
-Function TExprParse.RPNPop : aint;
+Function TExprParse.RPNPop : tcgint;
 { Get the operand at the top of the RPN stack }
 begin
   RPNPop:=0;
@@ -243,8 +247,8 @@ end;
 
 Procedure TExprParse.RPNCalc(const Token : String; prefix:boolean);                       { RPN Calculator }
 Var
-  Temp  : aint;
-  n1,n2 : aint;
+  Temp  : tcgint;
+  n1,n2 : tcgint;
   LocalError : Integer;
 begin
   { Handle operators }
@@ -383,7 +387,7 @@ begin
 end;
 
 
-Function TExprParse.Evaluate(Expr : String):aint;
+Function TExprParse.Evaluate(Expr : String):tcgint;
 Var
   I     : longint;
   Token : String;
@@ -479,7 +483,7 @@ Begin
 end;
 
 
-Function CalculateExpression(const expression: string): aint;
+Function CalculateExpression(const expression: string): tcgint;
 var
   expr: TExprParse;
 Begin
@@ -558,8 +562,8 @@ Begin
 end;
 
 
-Function ParseVal(const S:String;base:byte):aint;
-{ Converts a decimal string to aint }
+Function ParseVal(const S:String;base:byte):tcgint;
+{ Converts a decimal string to tcgint }
 var
   code : integer;
   errmsg : word;
@@ -592,7 +596,7 @@ Begin
   val(prefix+s,result,code);
   if code<>0 then
     begin
-      val(prefix+s,aword(result),code);
+      val(prefix+s,result,code);
       if code<>0 then
         begin
           Message1(errmsg,s);
@@ -807,24 +811,33 @@ Begin
    exit;
   if sym.typ=absolutevarsym then
     begin
-      if (tabsolutevarsym(sym).abstyp=tovar) then
-        begin
-          { Only support simple loads }
-          plist:=tabsolutevarsym(sym).ref.firstsym;
-          if assigned(plist) and
-             (plist^.sltype=sl_load) then
-            sym:=plist^.sym
-          else
-            begin
-              Message(asmr_e_unsupported_symbol_type);
-              exit;
-            end;
-        end
-      else
-        begin
-          Message(asmr_e_unsupported_symbol_type);
-          exit;
-        end;
+      case tabsolutevarsym(sym).abstyp of
+        tovar:
+          begin
+            { Only support simple loads }
+            plist:=tabsolutevarsym(sym).ref.firstsym;
+            if assigned(plist) and
+               (plist^.sltype=sl_load) then
+              sym:=plist^.sym
+            else
+              begin
+                Message(asmr_e_unsupported_symbol_type);
+                exit;
+              end;
+          end;
+        toaddr:
+          begin
+            initref;
+            opr.ref.offset:=tabsolutevarsym(sym).addroffset;
+            Result:=true;
+            exit;
+          end;
+        else
+          begin
+            Message(asmr_e_unsupported_symbol_type);
+            exit;
+          end;
+      end;
     end;
   case sym.typ of
     fieldvarsym :
@@ -1219,7 +1232,7 @@ begin
 end;
 
 
-Function SearchType(const hs:string;var size:aint): Boolean;
+Function SearchType(const hs:string;var size:tcgint): Boolean;
 var
   srsym : tsym;
   srsymtable : TSymtable;
@@ -1269,7 +1282,7 @@ Begin
 end;
 
 
-Function SearchIConstant(const s:string; var l:aint): boolean;
+Function SearchIConstant(const s:string; var l:tcgint): boolean;
 {**********************************************************************}
 {  Description: Searches for a CONSTANT of name s in either the local  }
 {  symbol list, then in the global symbol list, and returns the value  }
@@ -1305,7 +1318,7 @@ Begin
          begin
            if tconstsym(srsym).consttyp=constord then
             Begin
-              l:=aint(tconstsym(srsym).value.valueord.svalue);
+              l:=tconstsym(srsym).value.valueord.svalue;
               SearchIConstant:=TRUE;
               exit;
             end;
@@ -1330,7 +1343,7 @@ begin
 end;
 
 
-Function GetRecordOffsetSize(s:string;Var Offset: aint;var Size:aint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean):boolean;
+Function GetRecordOffsetSize(s:string;Var Offset: tcgint;var Size:tcgint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean):boolean;
 { search and returns the offset and size of records/objects of the base }
 { with field name setup in field.                              }
 { returns FALSE if not found.                                  }
@@ -1526,7 +1539,7 @@ end;
   end;
 
 
-Procedure ConcatConstant(p: TAsmList; value: aint; constsize:byte);
+Procedure ConcatConstant(p: TAsmList; value: tcgint; constsize:byte);
 {*********************************************************************}
 { PROCEDURE ConcatConstant(value: aint; maxvalue: aint);        }
 {  Description: This routine adds the value constant to the current   }
@@ -1574,7 +1587,7 @@ Begin
 end;
 
 
-  Procedure ConcatConstSymbol(p : TAsmList;const sym:string;symtyp:tasmsymtype;l:aint);
+  Procedure ConcatConstSymbol(p : TAsmList;const sym:string;symtyp:tasmsymtype;l:tcgint);
   begin
     p.concat(Tai_const.Createname(sym,l));
   end;
@@ -1620,7 +1633,7 @@ end;
      p.concat(Tai_label.Create(l));
    end;
 
-   procedure ConcatAlign(p:TAsmList;l:aint);
+   procedure ConcatAlign(p:TAsmList;l:tcgint);
   {*********************************************************************}
   { PROCEDURE ConcatPublic                                              }
   {  Description: This routine emits an global   definition to the      }

+ 2 - 2
compiler/sparcgen/racpugas.pas

@@ -175,7 +175,7 @@ Interface
     Procedure TSparcReader.BuildOperand(oper : tSparcoperand);
       var
         expr : string;
-        typesize,l : aint;
+        typesize,l : tcgint;
 
         procedure AddLabelOperand(hl:tasmlabel);
           begin
@@ -199,7 +199,7 @@ Interface
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : aint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;

+ 3 - 3
compiler/x86/rax86att.pas

@@ -330,7 +330,7 @@ Implementation
       var
         relsym: string;
         asmsymtyp: tasmsymtype;
-        l: aint;
+        l: tcgint;
         sym: tasmsymbol;
       begin
         case actasmtoken of
@@ -401,7 +401,7 @@ Implementation
       var
         tempstr,
         expr : string;
-        typesize,l,k : aint;
+        typesize,l,k : tcgint;
 
 
         procedure AddLabelOperand(hl:tasmlabel);
@@ -426,7 +426,7 @@ Implementation
             hasdot  : boolean;
             l,
             toffset,
-            tsize   : aint;
+            tsize   : tcgint;
           begin
             if not(actasmtoken in [AS_DOT,AS_PLUS,AS_MINUS]) then
              exit;

+ 12 - 12
compiler/x86/rax86int.pas

@@ -62,8 +62,8 @@ Unit Rax86int;
          procedure GetToken;
          function consume(t : tasmtoken):boolean;
          procedure RecoverConsume(allowcomma:boolean);
-         procedure BuildRecordOffsetSize(const expr: string;var offset:aint;var size:aint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean);
-         procedure BuildConstSymbolExpression(needofs,isref,startingminus:boolean;var value:aint;var asmsym:string;var asmsymtyp:TAsmsymtype;out isseg,is_farproc_entry:boolean);
+         procedure BuildRecordOffsetSize(const expr: string;var offset:tcgint;var size:tcgint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean);
+         procedure BuildConstSymbolExpression(needofs,isref,startingminus:boolean;var value:tcgint;var asmsym:string;var asmsymtyp:TAsmsymtype;out isseg,is_farproc_entry:boolean);
          function BuildConstExpression:aint;
          function BuildRefConstExpression(startingminus:boolean=false):aint;
          procedure BuildReference(oper : tx86operand);
@@ -756,7 +756,7 @@ Unit Rax86int;
     { This routine builds up a record offset after a AS_DOT
       token is encountered.
       On entry actasmtoken should be equal to AS_DOT                     }
-    Procedure tx86intreader.BuildRecordOffsetSize(const expr: string;var offset:aint;var size:aint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean);
+    Procedure tx86intreader.BuildRecordOffsetSize(const expr: string;var offset:tcgint;var size:tcgint; var mangledname: string; needvmtofs: boolean; out hastypecast: boolean);
       var
         s: string;
       Begin
@@ -784,11 +784,11 @@ Unit Rax86int;
       end;
 
 
-    Procedure tx86intreader.BuildConstSymbolExpression(needofs,isref,startingminus:boolean;var value:aint;var asmsym:string;var asmsymtyp:TAsmsymtype;out isseg,is_farproc_entry:boolean);
+    Procedure tx86intreader.BuildConstSymbolExpression(needofs,isref,startingminus:boolean;var value:tcgint;var asmsym:string;var asmsymtyp:TAsmsymtype;out isseg,is_farproc_entry:boolean);
       var
         tempstr,expr,hs,mangledname : string;
         parenlevel : longint;
-        l,k : aint;
+        l,k : tcgint;
         hasparen,
         errorflag,
         needvmtofs : boolean;
@@ -1181,7 +1181,7 @@ Unit Rax86int;
 
     Function tx86intreader.BuildConstExpression:aint;
       var
-        l : aint;
+        l : tcgint;
         hs : string;
         hssymtyp : TAsmsymtype;
         isseg : boolean;
@@ -1196,7 +1196,7 @@ Unit Rax86int;
 
     Function tx86intreader.BuildRefConstExpression(startingminus:boolean):aint;
       var
-        l : aint;
+        l : tcgint;
         hs : string;
         hssymtyp : TAsmsymtype;
         isseg : boolean;
@@ -1212,7 +1212,7 @@ Unit Rax86int;
     procedure tx86intreader.BuildReference(oper : tx86operand);
       var
         scale : byte;
-        k,l : aint;
+        k,l : tcgint;
         tempstr,hs : string;
         tempsymtyp : tasmsymtype;
         code : integer;
@@ -1630,7 +1630,7 @@ Unit Rax86int;
 
     Procedure tx86intreader.BuildConstantOperand(oper: tx86operand);
       var
-        l : aint;
+        l : tcgint;
         tempstr : string;
         tempsymtyp : tasmsymtype;
         isseg: boolean;
@@ -1698,10 +1698,10 @@ Unit Rax86int;
         expr,
         hs      : string;
         tempreg : tregister;
-        l       : aint;
+        l       : tcgint;
         hl      : tasmlabel;
         toffset,
-        tsize   : aint;
+        tsize   : tcgint;
         hastypecast: boolean;
       begin
         expr:='';
@@ -2359,7 +2359,7 @@ Unit Rax86int;
         asmsymtyp : tasmsymtype;
         asmsym,
         expr: string;
-        value : aint;
+        value : tcgint;
         isseg: boolean;
         is_farproc_entry : boolean;
       Begin

+ 21 - 0
tests/webtbf/tw32043b.pp

@@ -0,0 +1,21 @@
+{ %cpu=avr }
+{ %fail }
+const
+  cFE = $FE;
+  c102 = $102;
+  c1000 = $1000;
+  c3070 = $3070;
+
+procedure p;assembler;
+var
+  var1: byte;
+  varabs: byte absolute $100;
+
+asm
+          adiw 0x1225 //(7)
+          sts varabs, r22
+          sts 0x1223, r22
+end;
+
+begin
+end.

+ 19 - 0
tests/webtbf/tw32043c.pp

@@ -0,0 +1,19 @@
+{ %cpu=avr }
+{ %fail }
+const
+  cFE = $FE;
+  c102 = $102;
+  c1000 = $1000;
+  c3070 = $3070;
+
+procedure p;assembler;
+var
+  var1: byte;
+  varabs: byte absolute $100;
+
+asm
+          adiw r28, c3070 //(6)
+end;
+
+begin
+end.

+ 24 - 0
tests/webtbs/tw32043.pp

@@ -0,0 +1,24 @@
+{ %cpu=avr }
+const
+  cFE = $FE;
+  c102 = $102;
+  c1000 = $1000;
+  c3070 = $3070;
+
+procedure p;assembler;
+var
+  var1: byte;
+  varabs: byte absolute $100;
+
+asm
+          sts cFE, r22 //(1)
+          sts c102, r22 //(2)
+          sts c1000, r22 //(3)
+          sts c3070, r22 //(4)
+          sts var1, r22 //(5)
+          sts 0x1223, r22
+          sts varabs, r22
+end;
+
+begin
+end.