mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-31 19:10:26 +02:00
+ support the OFFSET directive in the Z80 inline assembler reader
git-svn-id: trunk@45618 -
This commit is contained in:
parent
c90f78488c
commit
09bd361b48
@ -42,7 +42,7 @@ Unit raz80asm;
|
||||
{------------------ Assembler directives --------------------}
|
||||
AS_DEFB,AS_DEFW,AS_AREA,AS_END,
|
||||
{------------------ Assembler Operators --------------------}
|
||||
AS_TYPE,AS_SIZEOF,AS_VMTOFFSET,AS_MOD,AS_SHL,AS_SHR,AS_NOT,AS_AND,AS_OR,AS_XOR,AS_NOR,AS_AT,
|
||||
AS_TYPE,AS_OFFSET,AS_SIZEOF,AS_VMTOFFSET,AS_MOD,AS_SHL,AS_SHR,AS_NOT,AS_AND,AS_OR,AS_XOR,AS_NOR,AS_AT,
|
||||
AS_RELTYPE, // common token for relocation types
|
||||
{------------------ Target-specific directive ---------------}
|
||||
AS_TARGET_DIRECTIVE
|
||||
@ -62,7 +62,7 @@ Unit raz80asm;
|
||||
'#','{','}','[',']',
|
||||
'=',
|
||||
'defb','defw','area','END',
|
||||
'TYPE','SIZEOF','VMTOFFSET','%','<<','>>','!','&','|','^','~','@','reltype',
|
||||
'TYPE','OFFSET','SIZEOF','VMTOFFSET','%','<<','>>','!','&','|','^','~','@','reltype',
|
||||
'directive');
|
||||
|
||||
type
|
||||
@ -303,6 +303,11 @@ Unit raz80asm;
|
||||
actasmtoken:=AS_TYPE;
|
||||
exit;
|
||||
end;
|
||||
if actasmpattern = 'OFFSET' then
|
||||
begin
|
||||
actasmtoken:=AS_OFFSET;
|
||||
exit;
|
||||
end;
|
||||
if actasmpattern = 'SIZEOF' then
|
||||
begin
|
||||
actasmtoken:=AS_SIZEOF;
|
||||
@ -1153,15 +1158,15 @@ Unit raz80asm;
|
||||
Message(asmr_e_seg_without_identifier);
|
||||
end;
|
||||
{$endif i8086}
|
||||
AS_VMTOFFSET{,
|
||||
AS_OFFSET}:
|
||||
AS_VMTOFFSET,
|
||||
AS_OFFSET:
|
||||
begin
|
||||
{if (actasmtoken = AS_OFFSET) then
|
||||
if (actasmtoken = AS_OFFSET) then
|
||||
begin
|
||||
include(in_flags,cseif_needofs);
|
||||
include(out_flags,cseof_hasofs);
|
||||
end
|
||||
else}
|
||||
else
|
||||
needvmtofs:=true;
|
||||
Consume(actasmtoken);
|
||||
if actasmtoken<>AS_ID then
|
||||
@ -1349,14 +1354,13 @@ Unit raz80asm;
|
||||
if actasmtoken<>AS_DOT then
|
||||
delete(expr,length(expr),1);
|
||||
end
|
||||
else if (cseif_needofs in in_flags) then
|
||||
begin
|
||||
if (prevtok<>AS_OFFSET) then
|
||||
Message(asmr_e_need_offset);
|
||||
end
|
||||
else
|
||||
//if (cseif_needofs in in_flags) then
|
||||
// begin
|
||||
// if (prevtok<>AS_OFFSET) then
|
||||
// Message(asmr_e_need_offset);
|
||||
// end
|
||||
//else
|
||||
Message(asmr_e_only_add_relocatable_symbol);
|
||||
Message(asmr_e_only_add_relocatable_symbol);
|
||||
end;
|
||||
if (actasmtoken=AS_DOT) or
|
||||
(assigned(sym) and
|
||||
@ -1836,11 +1840,11 @@ Unit raz80asm;
|
||||
GotStar:=false;
|
||||
end;
|
||||
|
||||
//AS_OFFSET :
|
||||
// begin
|
||||
// Consume(AS_OFFSET);
|
||||
// GotOffset:=true;
|
||||
// end;
|
||||
AS_OFFSET :
|
||||
begin
|
||||
Consume(AS_OFFSET);
|
||||
GotOffset:=true;
|
||||
end;
|
||||
|
||||
AS_TYPE,
|
||||
AS_NOT,
|
||||
@ -2001,7 +2005,7 @@ Unit raz80asm;
|
||||
begin
|
||||
repeat
|
||||
case actasmtoken of
|
||||
//AS_OFFSET,
|
||||
AS_OFFSET,
|
||||
AS_SIZEOF,
|
||||
AS_VMTOFFSET,
|
||||
AS_TYPE,
|
||||
|
Loading…
Reference in New Issue
Block a user