Explorar o código

* x86 assembler: write REX prefix before the first literal byte of instruction (this becomes possible once the instruction table has all $66,$F2,$F3 prefixes changed to non-literal control codes). This way it is no longer necessary to manually specify position of REX in every instruction entry (code \323 becomes obsolete), and the situation when REX is not written (IE 200603191) is hopefully gone forever.

git-svn-id: trunk@17456 -
sergei %!s(int64=14) %!d(string=hai) anos
pai
achega
86d0c7f4c5
Modificáronse 1 ficheiros con 10 adicións e 26 borrados
  1. 10 26
      compiler/x86/aasmcpu.pas

+ 10 - 26
compiler/x86/aasmcpu.pas

@@ -2080,6 +2080,9 @@ implementation
               break;
             1,2,3 :
               begin
+{$ifdef x86_64}
+                maybewriterex;
+{$endif x86_64}
                 objdata.writebytes(codes^,c);
                 inc(codes,c);
               end;
@@ -2118,6 +2121,9 @@ implementation
               end;
             8,9,10 :
               begin
+{$ifdef x86_64}
+                maybewriterex;
+{$endif x86_64}
                 bytes[0]:=ord(codes^)+regval(oper[c-8]^.reg);
                 inc(codes);
                 objdata.writebytes(bytes,1);
@@ -2259,30 +2265,18 @@ implementation
                       Message(asmw_e_64bit_not_supported);
 {$endif x86_64}
                 end;
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
               end;
             211,
-            213 :
-              begin
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
-              end;
+            213 : {no action needed};
+
             212, 241 :
               begin
                 bytes[0]:=$66;
                 objdata.writebytes(bytes,1);
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
               end;
             214 :
               begin
-{$ifdef x86_64}
-                maybewriterex;
-{$else x86_64}
+{$ifndef x86_64}
                 Message(asmw_e_64bit_not_supported);
 {$endif x86_64}
               end;
@@ -2290,17 +2284,11 @@ implementation
               begin
                 bytes[0]:=$f3;
                 objdata.writebytes(bytes,1);
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
               end;
             220 :
               begin
                 bytes[0]:=$f2;
                 objdata.writebytes(bytes,1);
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
               end;
             221:
               ;
@@ -2309,11 +2297,7 @@ implementation
             217,218 :
               begin
                 { these are dissambler hints or 32 bit prefixes which
-                  are not needed
-                  It's useful to write rex :) (FK) }
-{$ifdef x86_64}
-                maybewriterex;
-{$endif x86_64}
+                  are not needed }
               end;
             31,
             48,49,50 :