mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-06-26 17:23:29 +02:00
bugfix external gnu-assembler - special handling suffix vcvtpd.. destination operand = xmm =>> suffix x, destination ymm or zmm =>> no suffix
git-svn-id: branches/tg74/avx512-0037785@47145 -
This commit is contained in:
parent
4a6d21b1c9
commit
d8fa3dd4ed
@ -320,6 +320,11 @@ begin
|
|||||||
dec(attopcode[0]);
|
dec(attopcode[0]);
|
||||||
attsuffix:='attsufMM';
|
attsuffix:='attsufMM';
|
||||||
end;
|
end;
|
||||||
|
'N' :
|
||||||
|
begin
|
||||||
|
dec(attopcode[0]);
|
||||||
|
attsuffix:='attsufMMX';
|
||||||
|
end;
|
||||||
'X' :
|
'X' :
|
||||||
begin
|
begin
|
||||||
dec(attopcode[0]);
|
dec(attopcode[0]);
|
||||||
|
@ -29,7 +29,7 @@ interface
|
|||||||
cgbase,cpubase;
|
cgbase,cpubase;
|
||||||
|
|
||||||
type
|
type
|
||||||
TAttSuffix = (AttSufNONE,AttSufINT,AttSufFPU,AttSufFPUint,AttSufINTdual,AttSufMM);
|
TAttSuffix = (AttSufNONE,AttSufINT,AttSufFPU,AttSufFPUint,AttSufINTdual,AttSufMM,AttSufMMX);
|
||||||
|
|
||||||
const
|
const
|
||||||
{ include mnemonic strings }
|
{ include mnemonic strings }
|
||||||
@ -75,6 +75,10 @@ interface
|
|||||||
att_sizemmsuffix : array[0..14] of topsize = (
|
att_sizemmsuffix : array[0..14] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
|
||||||
);
|
);
|
||||||
|
att_sizemmxsuffix : array[0..14] of topsize = (
|
||||||
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_NO,S_NO
|
||||||
|
);
|
||||||
|
|
||||||
{$else x86_64}
|
{$else x86_64}
|
||||||
gas_opsize2str : array[topsize] of string[2] = ('',
|
gas_opsize2str : array[topsize] of string[2] = ('',
|
||||||
'b','w','l','q','bw','bl','wl',
|
'b','w','l','q','bw','bl','wl',
|
||||||
@ -103,6 +107,10 @@ interface
|
|||||||
att_sizemmsuffix : array[0..12] of topsize = (
|
att_sizemmsuffix : array[0..12] of topsize = (
|
||||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_YMM,S_ZMM
|
||||||
);
|
);
|
||||||
|
att_sizemmxsuffix : array[0..12] of topsize = (
|
||||||
|
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_XMM,S_NO,S_NO
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
{$endif x86_64}
|
{$endif x86_64}
|
||||||
|
|
||||||
|
@ -239,7 +239,7 @@ begin
|
|||||||
;
|
;
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
else if gas_needsuffix[opcode]=AttSufMM then
|
else if gas_needsuffix[opcode] in [AttSufMM, AttSufMMX] then
|
||||||
begin
|
begin
|
||||||
if (opr.typ=OPR_Reference) then
|
if (opr.typ=OPR_Reference) then
|
||||||
begin
|
begin
|
||||||
|
@ -1041,6 +1041,8 @@ Implementation
|
|||||||
actopsize:=att_sizefpuintsuffix[sufidx]
|
actopsize:=att_sizefpuintsuffix[sufidx]
|
||||||
else if gas_needsuffix[actopcode]=attsufMM then
|
else if gas_needsuffix[actopcode]=attsufMM then
|
||||||
actopsize:=att_sizemmsuffix[sufidx]
|
actopsize:=att_sizemmsuffix[sufidx]
|
||||||
|
else if gas_needsuffix[actopcode]=attsufMMX then
|
||||||
|
actopsize:=att_sizemmXsuffix[sufidx]
|
||||||
else
|
else
|
||||||
actopsize:=att_sizesuffix[sufidx];
|
actopsize:=att_sizesuffix[sufidx];
|
||||||
{ only accept suffix from the same category that the opcode belongs to }
|
{ only accept suffix from the same category that the opcode belongs to }
|
||||||
|
Loading…
Reference in New Issue
Block a user