mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-13 13:09:16 +02:00
+ partial support for BP7 reference-like inline asm constants
git-svn-id: trunk@38850 -
This commit is contained in:
parent
d1fc31de94
commit
16e0172021
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -12578,6 +12578,7 @@ tests/test/tasm25ss1.pp svneol=native#text/plain
|
||||
tests/test/tasm25ss2.pp svneol=native#text/plain
|
||||
tests/test/tasm25ss3.pp svneol=native#text/plain
|
||||
tests/test/tasm26.pp svneol=native#text/plain
|
||||
tests/test/tasm27.pp svneol=native#text/plain
|
||||
tests/test/tasm2a.pp svneol=native#text/plain
|
||||
tests/test/tasm3.pp svneol=native#text/plain
|
||||
tests/test/tasm4.pp svneol=native#text/plain
|
||||
|
@ -52,7 +52,11 @@ Unit Rax86int;
|
||||
tconstsymbolexpressioninputflag = (
|
||||
cseif_needofs,
|
||||
cseif_isref,
|
||||
cseif_startingminus
|
||||
cseif_startingminus,
|
||||
{ allows using full reference-like syntax for constsymbol expressions,
|
||||
for example:
|
||||
Rec.Str[5] -> Rec.Str+5 }
|
||||
cseif_referencelike
|
||||
);
|
||||
tconstsymbolexpressioninputflags = set of tconstsymbolexpressioninputflag;
|
||||
{ output flags for BuildConstSymbolExpression }
|
||||
@ -1063,6 +1067,23 @@ Unit Rax86int;
|
||||
{ Support ugly delphi constructs like: [ECX].1+2[EDX] }
|
||||
if (cseif_isref in in_flags) and (actasmtoken=AS_LBRACKET) then
|
||||
break;
|
||||
if (cseif_referencelike in in_flags) and
|
||||
(actasmtoken in [AS_LBRACKET,AS_RBRACKET]) then
|
||||
case actasmtoken of
|
||||
AS_LBRACKET:
|
||||
begin
|
||||
Consume(AS_LBRACKET);
|
||||
if (length(expr)>0) and
|
||||
not (expr[length(expr)] in ['+','-']) then
|
||||
expr:=expr+'+';
|
||||
expr:=expr+'[';
|
||||
end;
|
||||
AS_RBRACKET:
|
||||
begin
|
||||
Consume(AS_RBRACKET);
|
||||
expr:=expr+']';
|
||||
end;
|
||||
end;
|
||||
Case actasmtoken of
|
||||
AS_LPAREN:
|
||||
Begin
|
||||
@ -2760,7 +2781,7 @@ Unit Rax86int;
|
||||
{$endif i8086}
|
||||
AS_ID :
|
||||
Begin
|
||||
BuildConstSymbolExpression([],value,asmsym,asmsymtyp,size,cse_out_flags);
|
||||
BuildConstSymbolExpression([cseif_referencelike],value,asmsym,asmsymtyp,size,cse_out_flags);
|
||||
if asmsym<>'' then
|
||||
begin
|
||||
if not (cseof_isseg in cse_out_flags) and
|
||||
|
29
tests/test/tasm27.pp
Normal file
29
tests/test/tasm27.pp
Normal file
@ -0,0 +1,29 @@
|
||||
{ %CPU=i8086 }
|
||||
|
||||
{$IFDEF FPC}
|
||||
{$MODE TP}
|
||||
{$ENDIF}
|
||||
program tasm27;
|
||||
|
||||
type
|
||||
TRec = record
|
||||
Str: String[8];
|
||||
Arr: array [-5..10] of Integer;
|
||||
end;
|
||||
|
||||
var
|
||||
Rec: TRec;
|
||||
|
||||
procedure x; assembler;
|
||||
asm
|
||||
dd Rec.Str { dd Rec.Str }
|
||||
dd Rec.Str[0] { dd Rec.Str }
|
||||
dd Rec.Arr { dd Rec.Arr }
|
||||
dd Rec.Arr[2] { dd Rec.Arr+2 }
|
||||
dd 5[7] { dd 12 }
|
||||
dd 5+[7] { dd 12 }
|
||||
dd 5-[7] { dd -2 }
|
||||
end;
|
||||
|
||||
begin
|
||||
end.
|
Loading…
Reference in New Issue
Block a user