Преглед на файлове

* merge fixes by Torsten Grundke

git-svn-id: trunk@23030 -
florian преди 12 години
родител
ревизия
d49a88c3c8
променени са 3 файла, в които са добавени 23 реда и са изтрити 16 реда
  1. 4 0
      compiler/x86/agx86att.pas
  2. 16 16
      compiler/x86/itcpugas.pas
  3. 3 0
      compiler/x86/rax86att.pas

+ 4 - 0
compiler/x86/agx86att.pas

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

+ 16 - 16
compiler/x86/itcpugas.pas

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

+ 3 - 0
compiler/x86/rax86att.pas

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