瀏覽代碼

bugfix avx512 OS32bit EVEX-coding

git-svn-id: branches/tg74/avx512@39661 -
tg74 7 年之前
父節點
當前提交
6f64177c6a
共有 1 個文件被更改,包括 12 次插入1 次删除
  1. 12 1
      compiler/x86/aasmcpu.pas

+ 12 - 1
compiler/x86/aasmcpu.pas

@@ -3622,6 +3622,12 @@ implementation
           end;
         until false;
 
+        {$ifndef x86_64}
+          EVEXv := 1;
+          EVEXx := 1;
+          EVEXr := 1;
+        {$endif}
+
         if needed_VEX or needed_EVEX then
         begin
           if (opmode > ops) or
@@ -3633,7 +3639,9 @@ implementation
           begin
             VEXvvvv  := VEXvvvv or ($0F shl 3); // set VEXvvvv bits (bits 6-3) to 1
             EVEXvvvv := $0F;
-            if not(needed_vsib) then EVEXv    := 1;
+            {$ifdef x86_64}
+              if not(needed_vsib) then EVEXv    := 1;
+            {$endif x86_64}
           end
           else if oper[opmode]^.typ = top_reg then
           begin
@@ -3647,6 +3655,7 @@ implementation
               if getsupreg(oper[opmode]^.reg) and $10 = 0 then EVEXv := 1;  //TG TODO check
             {$else}
               VEXvvvv := VEXvvvv or (1 shl 6);
+              EVEXvvvv := EVEXvvvv or (1 shl 3);
             {$endif x86_64}
           end
           else Internalerror(777101);
@@ -3722,6 +3731,8 @@ implementation
             bytes[1] := ((EVEXmm   and $03) shl 0)  or
                       {$ifdef x86_64}
                         ((not(rex) and $05) shl 5)  or
+                      {$else}
+                        (($05) shl 5)               or
                       {$endif x86_64}
                         ((EVEXr    and $01) shl 4)  or
                         ((EVEXx    and $01) shl 6);