mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-08 20:46:00 +02:00
+ support the xlat x86 instruction syntax with a memory operand. This allows
specifying the address size (e.g. xlat byte ptr [bx] or xlat byte ptr [ebx]) git-svn-id: trunk@37478 -
This commit is contained in:
parent
2ffad85470
commit
e8bbc4eef9
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
1976;
|
1977;
|
||||||
|
@ -5810,6 +5810,13 @@
|
|||||||
code : #1#215;
|
code : #1#215;
|
||||||
flags : [if_8086]
|
flags : [if_8086]
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
opcode : A_XLAT;
|
||||||
|
ops : 1;
|
||||||
|
optypes : (ot_memory or ot_bits8,ot_none,ot_none,ot_none);
|
||||||
|
code : #1#215;
|
||||||
|
flags : [if_8086]
|
||||||
|
),
|
||||||
(
|
(
|
||||||
opcode : A_XLATB;
|
opcode : A_XLATB;
|
||||||
ops : 0;
|
ops : 0;
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
2008;
|
2009;
|
||||||
|
@ -5824,6 +5824,13 @@
|
|||||||
code : #1#215;
|
code : #1#215;
|
||||||
flags : [if_8086]
|
flags : [if_8086]
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
opcode : A_XLAT;
|
||||||
|
ops : 1;
|
||||||
|
optypes : (ot_memory or ot_bits8,ot_none,ot_none,ot_none);
|
||||||
|
code : #1#215;
|
||||||
|
flags : [if_8086]
|
||||||
|
),
|
||||||
(
|
(
|
||||||
opcode : A_XLATB;
|
opcode : A_XLATB;
|
||||||
ops : 0;
|
ops : 0;
|
||||||
|
@ -985,6 +985,23 @@ interface
|
|||||||
end;
|
end;
|
||||||
if fixed_opcode=A_FWAIT then
|
if fixed_opcode=A_FWAIT then
|
||||||
writer.AsmWriteln(#9#9'DB'#9'09bh')
|
writer.AsmWriteln(#9#9'DB'#9'09bh')
|
||||||
|
else if (fixed_opcode=A_XLAT) and (taicpu(hp).ops=1) and
|
||||||
|
(taicpu(hp).oper[0]^.typ=top_ref) then
|
||||||
|
begin
|
||||||
|
writer.AsmWrite(#9#9);
|
||||||
|
if (taicpu(hp).oper[0]^.ref^.segment<>NR_NO) and
|
||||||
|
(taicpu(hp).oper[0]^.ref^.segment<>NR_DS) then
|
||||||
|
writer.AsmWrite(std_regname(taicpu(hp).oper[0]^.ref^.segment)+' ');
|
||||||
|
case get_ref_address_size(taicpu(hp).oper[0]^.ref^) of
|
||||||
|
16:
|
||||||
|
writer.AsmWrite('a16 ');
|
||||||
|
32:
|
||||||
|
writer.AsmWrite('a32 ');
|
||||||
|
64:
|
||||||
|
writer.AsmWrite('a64 ');
|
||||||
|
end;
|
||||||
|
writer.AsmWriteLn('xlatb');
|
||||||
|
end
|
||||||
else if is_x86_parameterized_string_op(fixed_opcode) then
|
else if is_x86_parameterized_string_op(fixed_opcode) then
|
||||||
begin
|
begin
|
||||||
writer.AsmWrite(#9#9);
|
writer.AsmWrite(#9#9);
|
||||||
|
@ -2074,6 +2074,7 @@ mem8,reg8 \1\x86\101 8086
|
|||||||
[XLAT]
|
[XLAT]
|
||||||
(Ch_WEAX, Ch_REBX)
|
(Ch_WEAX, Ch_REBX)
|
||||||
void \1\xD7 8086
|
void \1\xD7 8086
|
||||||
|
mem8 \1\xD7 8086
|
||||||
|
|
||||||
[XLATB]
|
[XLATB]
|
||||||
(Ch_WEAX, Ch_REBX)
|
(Ch_WEAX, Ch_REBX)
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
{ don't edit, this file is generated from x86ins.dat }
|
{ don't edit, this file is generated from x86ins.dat }
|
||||||
2027;
|
2028;
|
||||||
|
@ -5866,6 +5866,13 @@
|
|||||||
code : #1#215;
|
code : #1#215;
|
||||||
flags : [if_8086]
|
flags : [if_8086]
|
||||||
),
|
),
|
||||||
|
(
|
||||||
|
opcode : A_XLAT;
|
||||||
|
ops : 1;
|
||||||
|
optypes : (ot_memory or ot_bits8,ot_none,ot_none,ot_none);
|
||||||
|
code : #1#215;
|
||||||
|
flags : [if_8086]
|
||||||
|
),
|
||||||
(
|
(
|
||||||
opcode : A_XLATB;
|
opcode : A_XLATB;
|
||||||
ops : 0;
|
ops : 0;
|
||||||
|
@ -39,7 +39,13 @@ begin
|
|||||||
outsw
|
outsw
|
||||||
outsd
|
outsd
|
||||||
|
|
||||||
|
xlat
|
||||||
|
xlatb
|
||||||
|
|
||||||
{ no segment overrides }
|
{ no segment overrides }
|
||||||
|
xlat byte ptr [rbx]
|
||||||
|
xlat byte ptr [ebx]
|
||||||
|
|
||||||
movs byte ptr [rdi], byte ptr [rsi]
|
movs byte ptr [rdi], byte ptr [rsi]
|
||||||
movs byte ptr [edi], byte ptr [esi]
|
movs byte ptr [edi], byte ptr [esi]
|
||||||
movs word ptr [rdi], word ptr [rsi]
|
movs word ptr [rdi], word ptr [rsi]
|
||||||
@ -100,6 +106,9 @@ begin
|
|||||||
outs dx, dword ptr [esi]
|
outs dx, dword ptr [esi]
|
||||||
|
|
||||||
{ es:di }
|
{ es:di }
|
||||||
|
xlat byte ptr ds:[rbx]
|
||||||
|
xlat byte ptr ds:[ebx]
|
||||||
|
|
||||||
movs byte ptr es:[rdi], byte ptr [rsi]
|
movs byte ptr es:[rdi], byte ptr [rsi]
|
||||||
movs byte ptr es:[edi], byte ptr [esi]
|
movs byte ptr es:[edi], byte ptr [esi]
|
||||||
movs word ptr es:[rdi], word ptr [rsi]
|
movs word ptr es:[rdi], word ptr [rsi]
|
||||||
@ -160,6 +169,9 @@ begin
|
|||||||
outs dx, dword ptr [esi]
|
outs dx, dword ptr [esi]
|
||||||
|
|
||||||
{ es:di, fs:si }
|
{ es:di, fs:si }
|
||||||
|
xlat byte ptr fs:[rbx]
|
||||||
|
xlat byte ptr fs:[ebx]
|
||||||
|
|
||||||
movs byte ptr es:[rdi], byte ptr fs:[rsi]
|
movs byte ptr es:[rdi], byte ptr fs:[rsi]
|
||||||
movs byte ptr es:[edi], byte ptr fs:[esi]
|
movs byte ptr es:[edi], byte ptr fs:[esi]
|
||||||
movs word ptr es:[rdi], word ptr fs:[rsi]
|
movs word ptr es:[rdi], word ptr fs:[rsi]
|
||||||
|
@ -34,7 +34,13 @@ begin
|
|||||||
outsw
|
outsw
|
||||||
outsd
|
outsd
|
||||||
|
|
||||||
|
xlat
|
||||||
|
xlatb
|
||||||
|
|
||||||
{ no segment overrides }
|
{ no segment overrides }
|
||||||
|
xlat byte ptr [ebx]
|
||||||
|
xlat byte ptr [bx]
|
||||||
|
|
||||||
movs byte ptr [edi], byte ptr [esi]
|
movs byte ptr [edi], byte ptr [esi]
|
||||||
movs byte ptr [di], byte ptr [si]
|
movs byte ptr [di], byte ptr [si]
|
||||||
movs word ptr [edi], word ptr [esi]
|
movs word ptr [edi], word ptr [esi]
|
||||||
@ -85,6 +91,9 @@ begin
|
|||||||
outs dx, dword ptr [si]
|
outs dx, dword ptr [si]
|
||||||
|
|
||||||
{ es:di }
|
{ es:di }
|
||||||
|
xlat byte ptr ds:[ebx]
|
||||||
|
xlat byte ptr ds:[bx]
|
||||||
|
|
||||||
movs byte ptr es:[edi], byte ptr [esi]
|
movs byte ptr es:[edi], byte ptr [esi]
|
||||||
movs byte ptr es:[di], byte ptr [si]
|
movs byte ptr es:[di], byte ptr [si]
|
||||||
movs word ptr es:[edi], word ptr [esi]
|
movs word ptr es:[edi], word ptr [esi]
|
||||||
@ -135,6 +144,9 @@ begin
|
|||||||
outs dx, dword ptr [si]
|
outs dx, dword ptr [si]
|
||||||
|
|
||||||
{ es:di, fs:si }
|
{ es:di, fs:si }
|
||||||
|
xlat byte ptr fs:[ebx]
|
||||||
|
xlat byte ptr fs:[bx]
|
||||||
|
|
||||||
movs byte ptr es:[edi], byte ptr fs:[esi]
|
movs byte ptr es:[edi], byte ptr fs:[esi]
|
||||||
movs byte ptr es:[di], byte ptr fs:[si]
|
movs byte ptr es:[di], byte ptr fs:[si]
|
||||||
movs word ptr es:[edi], word ptr fs:[esi]
|
movs word ptr es:[edi], word ptr fs:[esi]
|
||||||
|
@ -35,7 +35,13 @@ begin
|
|||||||
outsw
|
outsw
|
||||||
outsd
|
outsd
|
||||||
|
|
||||||
|
xlat
|
||||||
|
xlatb
|
||||||
|
|
||||||
{ no segment overrides }
|
{ no segment overrides }
|
||||||
|
xlat byte ptr [ebx]
|
||||||
|
xlat byte ptr [bx]
|
||||||
|
|
||||||
movs byte ptr [edi], byte ptr [esi]
|
movs byte ptr [edi], byte ptr [esi]
|
||||||
movs byte ptr [di], byte ptr [si]
|
movs byte ptr [di], byte ptr [si]
|
||||||
movs word ptr [edi], word ptr [esi]
|
movs word ptr [edi], word ptr [esi]
|
||||||
@ -86,6 +92,9 @@ begin
|
|||||||
outs dx, dword ptr [si]
|
outs dx, dword ptr [si]
|
||||||
|
|
||||||
{ es:di }
|
{ es:di }
|
||||||
|
xlat byte ptr ds:[ebx]
|
||||||
|
xlat byte ptr ds:[bx]
|
||||||
|
|
||||||
movs byte ptr es:[edi], byte ptr [esi]
|
movs byte ptr es:[edi], byte ptr [esi]
|
||||||
movs byte ptr es:[di], byte ptr [si]
|
movs byte ptr es:[di], byte ptr [si]
|
||||||
movs word ptr es:[edi], word ptr [esi]
|
movs word ptr es:[edi], word ptr [esi]
|
||||||
@ -136,6 +145,9 @@ begin
|
|||||||
outs dx, dword ptr [si]
|
outs dx, dword ptr [si]
|
||||||
|
|
||||||
{ es:di, fs:si }
|
{ es:di, fs:si }
|
||||||
|
xlat byte ptr fs:[ebx]
|
||||||
|
xlat byte ptr fs:[bx]
|
||||||
|
|
||||||
movs byte ptr es:[edi], byte ptr fs:[esi]
|
movs byte ptr es:[edi], byte ptr fs:[esi]
|
||||||
movs byte ptr es:[di], byte ptr fs:[si]
|
movs byte ptr es:[di], byte ptr fs:[si]
|
||||||
movs word ptr es:[edi], word ptr fs:[esi]
|
movs word ptr es:[edi], word ptr fs:[esi]
|
||||||
|
Loading…
Reference in New Issue
Block a user