* merge fixes by Torsten Grundke

git-svn-id: trunk@23030 -
This commit is contained in:
florian 2012-11-18 21:18:49 +00:00
parent 2aaa7514f4
commit d49a88c3c8
3 changed files with 23 additions and 16 deletions

View File

@ -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;

View File

@ -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}

View File

@ -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