mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-10-03 01:49:41 +02:00
+ support aitconst_uleb128bit and aitconst_sleb128bit
git-svn-id: branches/z80@44450 -
This commit is contained in:
parent
faa7429a7f
commit
416511e245
@ -42,6 +42,8 @@ unit agsdasz80;
|
|||||||
TSdccSdasZ80Assembler=class(TExternalAssembler)
|
TSdccSdasZ80Assembler=class(TExternalAssembler)
|
||||||
private
|
private
|
||||||
function EscapeLabel(s: ansistring): ansistring;
|
function EscapeLabel(s: ansistring): ansistring;
|
||||||
|
procedure WriteDecodedSleb128(a: int64);
|
||||||
|
procedure WriteDecodedUleb128(a: qword);
|
||||||
public
|
public
|
||||||
procedure WriteTree(p : TAsmList); override;
|
procedure WriteTree(p : TAsmList); override;
|
||||||
procedure WriteAsmList;override;
|
procedure WriteAsmList;override;
|
||||||
@ -84,6 +86,38 @@ unit agsdasz80;
|
|||||||
result:=result+('_'+HexStr(Ord(s[i]),2));
|
result:=result+('_'+HexStr(Ord(s[i]),2));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TSdccSdasZ80Assembler.WriteDecodedSleb128(a: int64);
|
||||||
|
var
|
||||||
|
i,len : longint;
|
||||||
|
buf : array[0..255] of byte;
|
||||||
|
begin
|
||||||
|
writer.AsmWrite(#9'.db'#9);
|
||||||
|
len:=EncodeSleb128(a,buf,0);
|
||||||
|
for i:=0 to len-1 do
|
||||||
|
begin
|
||||||
|
if (i > 0) then
|
||||||
|
writer.AsmWrite(',');
|
||||||
|
writer.AsmWrite(tostr(buf[i]));
|
||||||
|
end;
|
||||||
|
writer.AsmWriteLn(#9'; sleb '+tostr(a));
|
||||||
|
end;
|
||||||
|
|
||||||
|
procedure TSdccSdasZ80Assembler.WriteDecodedUleb128(a: qword);
|
||||||
|
var
|
||||||
|
i,len : longint;
|
||||||
|
buf : array[0..63] of byte;
|
||||||
|
begin
|
||||||
|
writer.AsmWrite(#9'.db'#9);
|
||||||
|
len:=EncodeUleb128(a,buf,0);
|
||||||
|
for i:=0 to len-1 do
|
||||||
|
begin
|
||||||
|
if (i > 0) then
|
||||||
|
writer.AsmWrite(',');
|
||||||
|
writer.AsmWrite(tostr(buf[i]));
|
||||||
|
end;
|
||||||
|
writer.AsmWriteLn(#9'; uleb '+tostr(a));
|
||||||
|
end;
|
||||||
|
|
||||||
procedure TSdccSdasZ80Assembler.WriteTree(p: TAsmList);
|
procedure TSdccSdasZ80Assembler.WriteTree(p: TAsmList);
|
||||||
|
|
||||||
function getreferencestring(var ref : treference) : string;
|
function getreferencestring(var ref : treference) : string;
|
||||||
@ -251,6 +285,10 @@ unit agsdasz80;
|
|||||||
begin
|
begin
|
||||||
consttype:=tai_const(hp).consttype;
|
consttype:=tai_const(hp).consttype;
|
||||||
case consttype of
|
case consttype of
|
||||||
|
aitconst_uleb128bit:
|
||||||
|
WriteDecodedUleb128(qword(tai_const(hp).value));
|
||||||
|
aitconst_sleb128bit:
|
||||||
|
WriteDecodedSleb128(int64(tai_const(hp).value));
|
||||||
aitconst_64bit,
|
aitconst_64bit,
|
||||||
aitconst_64bit_unaligned,
|
aitconst_64bit_unaligned,
|
||||||
aitconst_32bit,
|
aitconst_32bit,
|
||||||
@ -296,9 +334,7 @@ unit agsdasz80;
|
|||||||
writer.AsmWrite(' - $$');}
|
writer.AsmWrite(' - $$');}
|
||||||
writer.AsmLn;
|
writer.AsmLn;
|
||||||
end;
|
end;
|
||||||
{aitconst_uleb128bit,
|
{aitconst_128bit,}
|
||||||
aitconst_sleb128bit,
|
|
||||||
aitconst_128bit,}
|
|
||||||
aitconst_16bit,
|
aitconst_16bit,
|
||||||
aitconst_8bit,
|
aitconst_8bit,
|
||||||
aitconst_16bit_unaligned{,
|
aitconst_16bit_unaligned{,
|
||||||
|
Loading…
Reference in New Issue
Block a user