diff --git a/compiler/x86/aasmcpu.pas b/compiler/x86/aasmcpu.pas index f073db24d1..8f2688323b 100644 --- a/compiler/x86/aasmcpu.pas +++ b/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);