mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 09:30:21 +02:00
* Extention -> extension (By Reinier, bug ID #25979)
git-svn-id: trunk@27750 -
This commit is contained in:
parent
8d4e81702e
commit
36c662f69f
@ -1949,7 +1949,7 @@ implementation
|
|||||||
len : shortint;
|
len : shortint;
|
||||||
ea_data : ea;
|
ea_data : ea;
|
||||||
exists_vex: boolean;
|
exists_vex: boolean;
|
||||||
exists_vex_extention: boolean;
|
exists_vex_extension: boolean;
|
||||||
exists_prefix_66: boolean;
|
exists_prefix_66: boolean;
|
||||||
exists_prefix_F2: boolean;
|
exists_prefix_F2: boolean;
|
||||||
exists_prefix_F3: boolean;
|
exists_prefix_F3: boolean;
|
||||||
@ -1960,7 +1960,7 @@ implementation
|
|||||||
len:=0;
|
len:=0;
|
||||||
codes:=@p^.code[0];
|
codes:=@p^.code[0];
|
||||||
exists_vex := false;
|
exists_vex := false;
|
||||||
exists_vex_extention := false;
|
exists_vex_extension := false;
|
||||||
exists_prefix_66 := false;
|
exists_prefix_66 := false;
|
||||||
exists_prefix_F2 := false;
|
exists_prefix_F2 := false;
|
||||||
exists_prefix_F3 := false;
|
exists_prefix_F3 := false;
|
||||||
@ -2116,25 +2116,25 @@ implementation
|
|||||||
243: // REX.W = 1
|
243: // REX.W = 1
|
||||||
// =>> VEX prefix length = 3
|
// =>> VEX prefix length = 3
|
||||||
begin
|
begin
|
||||||
if not(exists_vex_extention) then
|
if not(exists_vex_extension) then
|
||||||
begin
|
begin
|
||||||
inc(len);
|
inc(len);
|
||||||
exists_vex_extention := true;
|
exists_vex_extension := true;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
244: ; // VEX length bit
|
244: ; // VEX length bit
|
||||||
246, // operand 2 (ymmreg) encoded immediate byte (bit 4-7)
|
246, // operand 2 (ymmreg) encoded immediate byte (bit 4-7)
|
||||||
247: inc(len); // operand 3 (ymmreg) encoded immediate byte (bit 4-7)
|
247: inc(len); // operand 3 (ymmreg) encoded immediate byte (bit 4-7)
|
||||||
248: // VEX-Extention prefix $0F
|
248: // VEX-Extension prefix $0F
|
||||||
// ignore for calculating length
|
// ignore for calculating length
|
||||||
;
|
;
|
||||||
249, // VEX-Extention prefix $0F38
|
249, // VEX-Extension prefix $0F38
|
||||||
250: // VEX-Extention prefix $0F3A
|
250: // VEX-Extension prefix $0F3A
|
||||||
begin
|
begin
|
||||||
if not(exists_vex_extention) then
|
if not(exists_vex_extension) then
|
||||||
begin
|
begin
|
||||||
inc(len);
|
inc(len);
|
||||||
exists_vex_extention := true;
|
exists_vex_extension := true;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
192,193,194:
|
192,193,194:
|
||||||
@ -2172,8 +2172,8 @@ implementation
|
|||||||
if exists_prefix_F3 then dec(len);
|
if exists_prefix_F3 then dec(len);
|
||||||
|
|
||||||
{$ifdef x86_64}
|
{$ifdef x86_64}
|
||||||
if not(exists_vex_extention) then
|
if not(exists_vex_extension) then
|
||||||
if rex and $0B <> 0 then inc(len); // REX.WXB <> 0 =>> needed VEX-Extention
|
if rex and $0B <> 0 then inc(len); // REX.WXB <> 0 =>> needed VEX-Extension
|
||||||
{$endif x86_64}
|
{$endif x86_64}
|
||||||
|
|
||||||
end;
|
end;
|
||||||
@ -2357,7 +2357,7 @@ implementation
|
|||||||
data,s,opidx : longint;
|
data,s,opidx : longint;
|
||||||
ea_data : ea;
|
ea_data : ea;
|
||||||
relsym : TObjSymbol;
|
relsym : TObjSymbol;
|
||||||
needed_VEX_Extention: boolean;
|
needed_VEX_Extension: boolean;
|
||||||
needed_VEX: boolean;
|
needed_VEX: boolean;
|
||||||
opmode: integer;
|
opmode: integer;
|
||||||
VEXvvvv: byte;
|
VEXvvvv: byte;
|
||||||
@ -2390,7 +2390,7 @@ implementation
|
|||||||
// needed VEX Prefix (for AVX etc.)
|
// needed VEX Prefix (for AVX etc.)
|
||||||
|
|
||||||
needed_VEX := false;
|
needed_VEX := false;
|
||||||
needed_VEX_Extention := false;
|
needed_VEX_Extension := false;
|
||||||
opmode := -1;
|
opmode := -1;
|
||||||
VEXvvvv := 0;
|
VEXvvvv := 0;
|
||||||
VEXmmmmm := 0;
|
VEXmmmmm := 0;
|
||||||
@ -2411,17 +2411,17 @@ implementation
|
|||||||
241: VEXvvvv := VEXvvvv OR $01; // set SIMD-prefix $66
|
241: VEXvvvv := VEXvvvv OR $01; // set SIMD-prefix $66
|
||||||
242: needed_VEX := true;
|
242: needed_VEX := true;
|
||||||
243: begin
|
243: begin
|
||||||
needed_VEX_Extention := true;
|
needed_VEX_Extension := true;
|
||||||
VEXvvvv := VEXvvvv OR (1 shl 7); // set REX.W
|
VEXvvvv := VEXvvvv OR (1 shl 7); // set REX.W
|
||||||
end;
|
end;
|
||||||
244: VEXvvvv := VEXvvvv OR $04; // vectorlength = 256 bits AND no scalar
|
244: VEXvvvv := VEXvvvv OR $04; // vectorlength = 256 bits AND no scalar
|
||||||
248: VEXmmmmm := VEXmmmmm OR $01; // set leading opcode byte $0F
|
248: VEXmmmmm := VEXmmmmm OR $01; // set leading opcode byte $0F
|
||||||
249: begin
|
249: begin
|
||||||
needed_VEX_Extention := true;
|
needed_VEX_Extension := true;
|
||||||
VEXmmmmm := VEXmmmmm OR $02; // set leading opcode byte $0F38
|
VEXmmmmm := VEXmmmmm OR $02; // set leading opcode byte $0F38
|
||||||
end;
|
end;
|
||||||
250: begin
|
250: begin
|
||||||
needed_VEX_Extention := true;
|
needed_VEX_Extension := true;
|
||||||
VEXmmmmm := VEXmmmmm OR $03; // set leading opcode byte $0F3A
|
VEXmmmmm := VEXmmmmm OR $03; // set leading opcode byte $0F3A
|
||||||
end;
|
end;
|
||||||
|
|
||||||
@ -2451,14 +2451,14 @@ implementation
|
|||||||
end
|
end
|
||||||
else Internalerror(777101);
|
else Internalerror(777101);
|
||||||
|
|
||||||
if not(needed_VEX_Extention) then
|
if not(needed_VEX_Extension) then
|
||||||
begin
|
begin
|
||||||
{$ifdef x86_64}
|
{$ifdef x86_64}
|
||||||
if rex and $0B <> 0 then needed_VEX_Extention := true;
|
if rex and $0B <> 0 then needed_VEX_Extension := true;
|
||||||
{$endif x86_64}
|
{$endif x86_64}
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if needed_VEX_Extention then
|
if needed_VEX_Extension then
|
||||||
begin
|
begin
|
||||||
// VEX-Prefix-Length = 3 Bytes
|
// VEX-Prefix-Length = 3 Bytes
|
||||||
bytes[0]:=$C4;
|
bytes[0]:=$C4;
|
||||||
@ -2498,7 +2498,7 @@ implementation
|
|||||||
end
|
end
|
||||||
else
|
else
|
||||||
begin
|
begin
|
||||||
needed_VEX_Extention := false;
|
needed_VEX_Extension := false;
|
||||||
opmode := -1;
|
opmode := -1;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user