mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-20 15:49:27 +02:00
* merge fixes by Torsten Grundke
git-svn-id: trunk@23030 -
This commit is contained in:
parent
2aaa7514f4
commit
d49a88c3c8
@ -346,6 +346,10 @@ interface
|
||||
owner.AsmWrite(gas_opsize2str[S_YMM]);
|
||||
break;
|
||||
end;
|
||||
0: begin
|
||||
owner.AsmWrite(gas_opsize2str[taicpu(hp).opsize]);
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -57,17 +57,17 @@ interface
|
||||
{ !! S_LQ excluded: movzlq does not exist, movslq is processed
|
||||
as a separate instruction w/o suffix (aka movsxd), and there are
|
||||
no more instructions needing it. }
|
||||
att_sizesuffixstr : array[0..11] of string[2] = (
|
||||
'','BW','BL','WL','BQ','WQ',{'LQ',}'B','W','L','S','Q','T'
|
||||
att_sizesuffixstr : array[0..13] of string[2] = (
|
||||
'','BW','BL','WL','BQ','WQ',{'LQ',}'B','W','L','S','Q','T','X','Y'
|
||||
);
|
||||
att_sizesuffix : array[0..11] of topsize = (
|
||||
S_NO,S_BW,S_BL,S_WL,S_BQ,S_WQ,{S_LQ,}S_B,S_W,S_L,S_NO,S_Q,S_NO
|
||||
att_sizesuffix : array[0..13] of topsize = (
|
||||
S_NO,S_BW,S_BL,S_WL,S_BQ,S_WQ,{S_LQ,}S_B,S_W,S_L,S_NO,S_Q,S_NO,S_XMM,S_YMM
|
||||
);
|
||||
att_sizefpusuffix : array[0..11] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_FL,S_FS,S_NO,S_FX
|
||||
att_sizefpusuffix : array[0..13] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
||||
);
|
||||
att_sizefpuintsuffix : array[0..11] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO
|
||||
att_sizefpuintsuffix : array[0..13] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,{S_NO,}S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
||||
);
|
||||
{$else x86_64}
|
||||
gas_opsize2str : array[topsize] of string[2] = ('',
|
||||
@ -81,17 +81,17 @@ interface
|
||||
'y'
|
||||
);
|
||||
{ suffix-to-opsize conversion tables, used in asmreadrer }
|
||||
att_sizesuffixstr : array[0..9] of string[2] = (
|
||||
'','BW','BL','WL','B','W','L','S','Q','T'
|
||||
att_sizesuffixstr : array[0..11] of string[2] = (
|
||||
'','BW','BL','WL','B','W','L','S','Q','T','X','Y'
|
||||
);
|
||||
att_sizesuffix : array[0..9] of topsize = (
|
||||
S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_NO,S_NO,S_NO
|
||||
att_sizesuffix : array[0..11] of topsize = (
|
||||
S_NO,S_BW,S_BL,S_WL,S_B,S_W,S_L,S_NO,S_NO,S_NO,S_XMM,S_YMM
|
||||
);
|
||||
att_sizefpusuffix : array[0..9] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_FL,S_FS,S_NO,S_FX
|
||||
att_sizefpusuffix : array[0..11] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_FL,S_FS,S_NO,S_FX,S_NO,S_NO
|
||||
);
|
||||
att_sizefpuintsuffix : array[0..9] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO
|
||||
att_sizefpuintsuffix : array[0..11] of topsize = (
|
||||
S_NO,S_NO,S_NO,S_NO,S_NO,S_NO,S_IL,S_IS,S_IQ,S_NO,S_NO,S_NO
|
||||
);
|
||||
{$endif x86_64}
|
||||
|
||||
|
@ -882,6 +882,9 @@ Implementation
|
||||
begin
|
||||
actopcode:=tasmop(PtrUInt(iasmops.Find(copy(s,1,len))));
|
||||
|
||||
if (actopcode = A_NONE) and
|
||||
(upper(s) = 'MOVSD') then actopcode := A_MOVSD;
|
||||
|
||||
{ two-letter suffix is allowed by just a few instructions (movsx,movzx),
|
||||
and it is always required whenever allowed }
|
||||
if (gas_needsuffix[actopcode]=attsufINTdual) xor (suflen=2) then
|
||||
|
Loading…
Reference in New Issue
Block a user