mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-14 10:29:24 +02:00
+ support ugly constructs like 'DD BYTE PTR 5' in the x86 intel syntax inline
assembler; these are TP7 and Delphi compatible git-svn-id: trunk@39143 -
This commit is contained in:
parent
54a8d8de58
commit
49b414ffee
@ -1064,6 +1064,13 @@ Unit Rax86int;
|
|||||||
{ Support ugly delphi constructs like: [ECX].1+2[EDX] }
|
{ Support ugly delphi constructs like: [ECX].1+2[EDX] }
|
||||||
if (cseif_isref in in_flags) and (actasmtoken=AS_LBRACKET) then
|
if (cseif_isref in in_flags) and (actasmtoken=AS_LBRACKET) then
|
||||||
break;
|
break;
|
||||||
|
if (cseif_referencelike in in_flags) and
|
||||||
|
(actasmtoken in [AS_BYTE,AS_WORD,AS_DWORD,AS_QWORD,AS_TBYTE,AS_DQWORD,AS_OWORD,AS_XMMWORD,AS_YWORD,AS_YMMWORD]) then
|
||||||
|
begin
|
||||||
|
{ Support ugly tp7 and delphi constructs like 'DD DWORD PTR 5' }
|
||||||
|
Consume(actasmtoken);
|
||||||
|
Consume(AS_PTR);
|
||||||
|
end;
|
||||||
if (cseif_referencelike in in_flags) and
|
if (cseif_referencelike in in_flags) and
|
||||||
(actasmtoken in [AS_LBRACKET,AS_RBRACKET]) then
|
(actasmtoken in [AS_LBRACKET,AS_RBRACKET]) then
|
||||||
case actasmtoken of
|
case actasmtoken of
|
||||||
@ -2767,6 +2774,16 @@ Unit Rax86int;
|
|||||||
end;
|
end;
|
||||||
ConcatString(curlist,expr);
|
ConcatString(curlist,expr);
|
||||||
end;
|
end;
|
||||||
|
AS_BYTE,
|
||||||
|
AS_WORD,
|
||||||
|
AS_DWORD,
|
||||||
|
AS_TBYTE,
|
||||||
|
AS_DQWORD,
|
||||||
|
AS_QWORD,
|
||||||
|
AS_OWORD,
|
||||||
|
AS_XMMWORD,
|
||||||
|
AS_YWORD,
|
||||||
|
AS_YMMWORD,
|
||||||
AS_PLUS,
|
AS_PLUS,
|
||||||
AS_MINUS,
|
AS_MINUS,
|
||||||
AS_LPAREN,
|
AS_LPAREN,
|
||||||
|
@ -24,6 +24,24 @@ asm
|
|||||||
dd 5+[7] { dd 12 }
|
dd 5+[7] { dd 12 }
|
||||||
dd 5-[7] { dd -2 }
|
dd 5-[7] { dd -2 }
|
||||||
dd [5] { dd 5 }
|
dd [5] { dd 5 }
|
||||||
|
|
||||||
|
dd byte ptr Rec.Str { dd Rec.Str }
|
||||||
|
dd byte ptr Rec.Str[0] { dd Rec.Str }
|
||||||
|
dd byte ptr Rec.Arr { dd Rec.Arr }
|
||||||
|
dd byte ptr Rec.Arr[2] { dd Rec.Arr+2 }
|
||||||
|
dd byte ptr 5[7] { dd 12 }
|
||||||
|
dd byte ptr 5+[7] { dd 12 }
|
||||||
|
dd byte ptr 5-[7] { dd -2 }
|
||||||
|
dd byte ptr [5] { dd 5 }
|
||||||
|
|
||||||
|
dd word ptr Rec.Str { dd Rec.Str }
|
||||||
|
dd word ptr Rec.Str[0] { dd Rec.Str }
|
||||||
|
dd word ptr Rec.Arr { dd Rec.Arr }
|
||||||
|
dd word ptr Rec.Arr[2] { dd Rec.Arr+2 }
|
||||||
|
dd word ptr 5[7] { dd 12 }
|
||||||
|
dd word ptr 5+[7] { dd 12 }
|
||||||
|
dd word ptr 5-[7] { dd -2 }
|
||||||
|
dd word ptr [5] { dd 5 }
|
||||||
end;
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
|
@ -23,7 +23,7 @@ var
|
|||||||
Rec: TRec;
|
Rec: TRec;
|
||||||
|
|
||||||
const
|
const
|
||||||
x_size = 8*4+1;
|
x_size = 4*8*4+1;
|
||||||
procedure x; assembler;
|
procedure x; assembler;
|
||||||
asm
|
asm
|
||||||
dd Rec.Str { dd Rec.Str }
|
dd Rec.Str { dd Rec.Str }
|
||||||
@ -34,6 +34,33 @@ asm
|
|||||||
dd 5+[7] { dd 12 }
|
dd 5+[7] { dd 12 }
|
||||||
dd 5-[7] { dd -2 }
|
dd 5-[7] { dd -2 }
|
||||||
dd [5] { dd 5 }
|
dd [5] { dd 5 }
|
||||||
|
|
||||||
|
dd byte ptr Rec.Str { dd Rec.Str }
|
||||||
|
dd byte ptr Rec.Str[0] { dd Rec.Str }
|
||||||
|
dd byte ptr Rec.Arr { dd Rec.Arr }
|
||||||
|
dd byte ptr Rec.Arr[2] { dd Rec.Arr+2 }
|
||||||
|
dd byte ptr 5[7] { dd 12 }
|
||||||
|
dd byte ptr 5+[7] { dd 12 }
|
||||||
|
dd byte ptr 5-[7] { dd -2 }
|
||||||
|
dd byte ptr [5] { dd 5 }
|
||||||
|
|
||||||
|
dd word ptr Rec.Str { dd Rec.Str }
|
||||||
|
dd word ptr Rec.Str[0] { dd Rec.Str }
|
||||||
|
dd word ptr Rec.Arr { dd Rec.Arr }
|
||||||
|
dd word ptr Rec.Arr[2] { dd Rec.Arr+2 }
|
||||||
|
dd word ptr 5[7] { dd 12 }
|
||||||
|
dd word ptr 5+[7] { dd 12 }
|
||||||
|
dd word ptr 5-[7] { dd -2 }
|
||||||
|
dd word ptr [5] { dd 5 }
|
||||||
|
|
||||||
|
dd dword ptr Rec.Str { dd Rec.Str }
|
||||||
|
dd dword ptr Rec.Str[0] { dd Rec.Str }
|
||||||
|
dd dword ptr Rec.Arr { dd Rec.Arr }
|
||||||
|
dd dword ptr Rec.Arr[2] { dd Rec.Arr+2 }
|
||||||
|
dd dword ptr 5[7] { dd 12 }
|
||||||
|
dd dword ptr 5+[7] { dd 12 }
|
||||||
|
dd dword ptr 5-[7] { dd -2 }
|
||||||
|
dd dword ptr [5] { dd 5 }
|
||||||
end;
|
end;
|
||||||
procedure x_verify; assembler;
|
procedure x_verify; assembler;
|
||||||
asm
|
asm
|
||||||
@ -45,6 +72,33 @@ asm
|
|||||||
dd 12 { dd 5+[7] }
|
dd 12 { dd 5+[7] }
|
||||||
dd -2 { dd 5-[7] }
|
dd -2 { dd 5-[7] }
|
||||||
dd 5 { dd [5] }
|
dd 5 { dd [5] }
|
||||||
|
|
||||||
|
dd Rec.Str { dd byte ptr Rec.Str }
|
||||||
|
dd Rec.Str { dd byte ptr Rec.Str[0] }
|
||||||
|
dd Rec.Arr { dd byte ptr Rec.Arr }
|
||||||
|
dd Rec.Arr+2 { dd byte ptr Rec.Arr[2] }
|
||||||
|
dd 12 { dd byte ptr 5[7] }
|
||||||
|
dd 12 { dd byte ptr 5+[7] }
|
||||||
|
dd -2 { dd byte ptr 5-[7] }
|
||||||
|
dd 5 { dd byte ptr [5] }
|
||||||
|
|
||||||
|
dd Rec.Str { dd word ptr Rec.Str }
|
||||||
|
dd Rec.Str { dd word ptr Rec.Str[0] }
|
||||||
|
dd Rec.Arr { dd word ptr Rec.Arr }
|
||||||
|
dd Rec.Arr+2 { dd word ptr Rec.Arr[2] }
|
||||||
|
dd 12 { dd word ptr 5[7] }
|
||||||
|
dd 12 { dd word ptr 5+[7] }
|
||||||
|
dd -2 { dd word ptr 5-[7] }
|
||||||
|
dd 5 { dd word ptr [5] }
|
||||||
|
|
||||||
|
dd Rec.Str { dd dword ptr Rec.Str }
|
||||||
|
dd Rec.Str { dd dword ptr Rec.Str[0] }
|
||||||
|
dd Rec.Arr { dd dword ptr Rec.Arr }
|
||||||
|
dd Rec.Arr+2 { dd dword ptr Rec.Arr[2] }
|
||||||
|
dd 12 { dd dword ptr 5[7] }
|
||||||
|
dd 12 { dd dword ptr 5+[7] }
|
||||||
|
dd -2 { dd dword ptr 5-[7] }
|
||||||
|
dd 5 { dd dword ptr [5] }
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function CompareCode(cp, cp2: CodePointer; sz: Integer): Boolean;
|
function CompareCode(cp, cp2: CodePointer; sz: Integer): Boolean;
|
||||||
|
Loading…
Reference in New Issue
Block a user