mirror of https://github.com/red-prig/fpPS4.git
1336 lines
45 KiB
Plaintext
1336 lines
45 KiB
Plaintext
unit kern_jit_test;
|
|
|
|
{$mode ObjFPC}{$H+}
|
|
{$CALLING SysV_ABI_CDecl}
|
|
|
|
interface
|
|
|
|
uses
|
|
x86_fpdbgdisas;
|
|
|
|
procedure print_test_jit_cbs(print_ops,print_status:Boolean);
|
|
|
|
procedure apply_din_stat(din:TInstruction;code_size:Byte);
|
|
procedure apply_jit_stat(code_size:Word);
|
|
|
|
procedure print_din_stats;
|
|
|
|
function is_sse (x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
function is_float(x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
function is_avx (x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
function is_bmi (x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
|
|
implementation
|
|
|
|
uses
|
|
kern_jit_ops;
|
|
|
|
var
|
|
instr_sizes:array[0..16] of QWORD;
|
|
jit_sizes :array[0..511] of QWORD;
|
|
|
|
rip_stat:QWORD;
|
|
one_stat:QWORD;
|
|
gen_stat:array[0..15] of QWORD;
|
|
|
|
const
|
|
gen_str:array[0..15] of PChar=(
|
|
'rax',
|
|
'rcx',
|
|
'rdx',
|
|
'rbx',
|
|
'rsp',
|
|
'rbp',
|
|
'rsi',
|
|
'rdi',
|
|
'r8 ',
|
|
'r9 ',
|
|
'r10',
|
|
'r11',
|
|
'r12',
|
|
'r13',
|
|
'r14',
|
|
'r15'
|
|
);
|
|
|
|
procedure print_din_stats;
|
|
var
|
|
i,s:Integer;
|
|
begin
|
|
Writeln('[Instruction sizes]');
|
|
For i:=1 to 16 do
|
|
begin
|
|
Writeln(' [',i,']:',instr_sizes[i]);
|
|
end;
|
|
//
|
|
Writeln('[Instruction usage]');
|
|
Writeln(' [rip]:',rip_stat);
|
|
Writeln(' [one]:',one_stat);
|
|
|
|
For i:=0 to 15 do
|
|
begin
|
|
Writeln(' [',gen_str[i],']:',gen_stat[i]);
|
|
end;
|
|
|
|
s:=0;
|
|
For i:=511 downto 0 do
|
|
begin
|
|
if (jit_sizes[i]<>0) then
|
|
begin
|
|
s:=i;
|
|
Break;
|
|
end;
|
|
end;
|
|
|
|
Writeln('[JIT sizes]');
|
|
For i:=0 to s do
|
|
begin
|
|
Writeln(' [',i,']:',jit_sizes[i]);
|
|
end;
|
|
|
|
end;
|
|
|
|
procedure apply_reg_stat(r:TRegValue);
|
|
begin
|
|
case r.AType of
|
|
regRip :Inc(rip_stat);
|
|
regOne :Inc(one_stat);
|
|
regGeneral :
|
|
if (r.AIndex<=15) then
|
|
begin
|
|
Inc(gen_stat[r.AIndex]);
|
|
end;
|
|
regGeneralH:
|
|
if (r.AIndex<=3) then
|
|
begin
|
|
Inc(gen_stat[r.AIndex]);
|
|
end;
|
|
else;
|
|
end;
|
|
end;
|
|
|
|
procedure apply_din_stat(din:TInstruction;code_size:Byte);
|
|
var
|
|
i:Integer;
|
|
begin
|
|
if (code_size<>0) and (code_size<=16) then
|
|
begin
|
|
Inc(instr_sizes[code_size]);
|
|
end;
|
|
//
|
|
if (din.OperCnt<>0) then
|
|
For i:=1 to din.OperCnt do
|
|
begin
|
|
apply_reg_stat(din.Operand[i].RegValue[0]);
|
|
apply_reg_stat(din.Operand[i].RegValue[1]);
|
|
end;
|
|
end;
|
|
|
|
procedure apply_jit_stat(code_size:Word);
|
|
begin
|
|
if (code_size<=511) then
|
|
begin
|
|
Inc(jit_sizes[code_size]);
|
|
end;
|
|
end;
|
|
|
|
type
|
|
t_used_op=array[TOpcodePrefix,TOpCode,TOpCodeSuffix] of Boolean;
|
|
|
|
var
|
|
used_op:t_used_op;
|
|
|
|
procedure load_used;
|
|
begin
|
|
used_op[OPPnone,OPadc,OPSnone]:=True;
|
|
used_op[OPPnone,OPadcx,OPSnone]:=True;
|
|
used_op[OPPnone,OPadd,OPSnone]:=True;
|
|
used_op[OPPnone,OPadd,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPadd,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPadd,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPadd,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPaddsub,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPaddsub,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPadox,OPSnone]:=True;
|
|
used_op[OPPnone,OPaesdec,OPSnone]:=True;
|
|
used_op[OPPnone,OPaesdeclast,OPSnone]:=True;
|
|
used_op[OPPnone,OPaesenc,OPSnone]:=True;
|
|
used_op[OPPnone,OPaesenclast,OPSnone]:=True;
|
|
used_op[OPPnone,OPaesimc,OPSnone]:=True;
|
|
used_op[OPPnone,OPaeskeygenassist,OPSnone]:=True;
|
|
used_op[OPPnone,OPand,OPSnone]:=True;
|
|
used_op[OPPnone,OPand,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPand,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPand,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPand,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPandn,OPSnone]:=True;
|
|
used_op[OPPnone,OPandn,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPandn,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPandn,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPandn,OPSx_ss]:=True;
|
|
used_op[OPPnone,OParpl,OPSnone]:=True;
|
|
used_op[OPPnone,OPbextr,OPSnone]:=True;
|
|
used_op[OPPnone,OPblend,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPblend,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPblendv,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPblendv,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPblsi,OPSnone]:=True;
|
|
used_op[OPPnone,OPblsmsk,OPSnone]:=True;
|
|
used_op[OPPnone,OPblsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPbsf,OPSnone]:=True;
|
|
used_op[OPPnone,OPbsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPbswap,OPSnone]:=True;
|
|
used_op[OPPnone,OPbt,OPSnone]:=True;
|
|
used_op[OPPnone,OPbtc,OPSnone]:=True;
|
|
used_op[OPPnone,OPbtr,OPSnone]:=True;
|
|
used_op[OPPnone,OPbts,OPSnone]:=True;
|
|
used_op[OPPnone,OPbzhi,OPSnone]:=True;
|
|
used_op[OPPnone,OPcall,OPSnone]:=True;
|
|
used_op[OPPnone,OPcbw,OPSnone]:=True;
|
|
used_op[OPPnone,OPcdq,OPSnone]:=True;
|
|
used_op[OPPnone,OPcdqe,OPSnone]:=True;
|
|
used_op[OPPnone,OPclac,OPSnone]:=True;
|
|
used_op[OPPnone,OPclc,OPSnone]:=True;
|
|
used_op[OPPnone,OPcld,OPSnone]:=True;
|
|
used_op[OPPnone,OPclflush,OPSnone]:=True;
|
|
used_op[OPPnone,OPclgi,OPSnone]:=True;
|
|
used_op[OPPnone,OPcli,OPSnone]:=True;
|
|
used_op[OPPnone,OPclts,OPSnone]:=True;
|
|
used_op[OPPnone,OPcmc,OPSnone]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_o]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_no]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_b]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_nb]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_z]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_nz]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_be]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_nbe]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_s]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_ns]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_p]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_np]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_l]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_nl]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_le]:=True;
|
|
used_op[OPPnone,OPcmov__,OPSc_nle]:=True;
|
|
used_op[OPPnone,OPcmp,OPSnone]:=True;
|
|
used_op[OPPnone,OPcmp,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPcmp,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPcmp,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPcmp,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPcmps,OPSx_b]:=True;
|
|
used_op[OPPnone,OPcmps,OPSx_d]:=True;
|
|
used_op[OPPnone,OPcmps,OPSx_q]:=True;
|
|
used_op[OPPnone,OPcmps,OPSx_w]:=True;
|
|
used_op[OPPnone,OPcmpxchg,OPSnone]:=True;
|
|
used_op[OPPnone,OPcmpxchg,OPSx_8b]:=True;
|
|
used_op[OPPnone,OPcmpxchg,OPSx_16b]:=True;
|
|
used_op[OPPnone,OPcomi,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPcomi,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPcpuid,OPSnone]:=True;
|
|
used_op[OPPnone,OPcqo,OPSnone]:=True;
|
|
used_op[OPPnone,OPcrc32,OPSnone]:=True;
|
|
used_op[OPPnone,OPcvtdq2,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPcvtdq2,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPcvtpd2,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPcvtpd2,OPSx_pi]:=True;
|
|
used_op[OPPnone,OPcvtpd2,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPcvtpi2,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPcvtpi2,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPcvtps2,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPcvtps2,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPcvtps2,OPSx_ph]:=True;
|
|
used_op[OPPnone,OPcvtps2,OPSx_pi]:=True;
|
|
used_op[OPPnone,OPcvtsd2,OPSx_si]:=True;
|
|
used_op[OPPnone,OPcvtsd2,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPcvtsi2,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPcvtsi2,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPcvtss2,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPcvtss2,OPSx_si]:=True;
|
|
used_op[OPPnone,OPcvttpd2,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPcvttpd2,OPSx_pi]:=True;
|
|
used_op[OPPnone,OPcvttps2,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPcvttps2,OPSx_pi]:=True;
|
|
used_op[OPPnone,OPcvttsd2,OPSx_si]:=True;
|
|
used_op[OPPnone,OPcvttss2,OPSx_si]:=True;
|
|
used_op[OPPnone,OPcwd,OPSnone]:=True;
|
|
used_op[OPPnone,OPcwde,OPSnone]:=True;
|
|
used_op[OPPnone,OPdaa,OPSnone]:=True;
|
|
used_op[OPPnone,OPdas,OPSnone]:=True;
|
|
used_op[OPPnone,OPdec,OPSnone]:=True;
|
|
used_op[OPPnone,OPdiv,OPSnone]:=True;
|
|
used_op[OPPnone,OPdiv,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPdiv,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPdiv,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPdiv,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPdp,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPdp,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPemms,OPSnone]:=True;
|
|
used_op[OPPnone,OPenter,OPSnone]:=True;
|
|
used_op[OPPnone,OPextract,OPSx_f128]:=True;
|
|
used_op[OPPnone,OPextract,OPSx_i128]:=True;
|
|
used_op[OPPnone,OPextract,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPf2xm1,OPSnone]:=True;
|
|
used_op[OPPnone,OPfabs,OPSnone]:=True;
|
|
used_op[OPPnone,OPfadd,OPSnone]:=True;
|
|
used_op[OPPnone,OPfadd,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfbld,OPSnone]:=True;
|
|
used_op[OPPnone,OPfbstp,OPSnone]:=True;
|
|
used_op[OPPnone,OPfchs,OPSnone]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_b]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_nb]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_be]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_nbe]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_e]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_ne]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_u]:=True;
|
|
used_op[OPPnone,OPfcmov__,OPSc_nu]:=True;
|
|
used_op[OPPnone,OPfcom,OPSnone]:=True;
|
|
used_op[OPPnone,OPfcom,OPSx_i]:=True;
|
|
used_op[OPPnone,OPfcom,OPSx_ip]:=True;
|
|
used_op[OPPnone,OPfcom,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfcom,OPSx_pp]:=True;
|
|
used_op[OPPnone,OPfcos,OPSnone]:=True;
|
|
used_op[OPPnone,OPfdecstp,OPSnone]:=True;
|
|
used_op[OPPnone,OPfdiv,OPSnone]:=True;
|
|
used_op[OPPnone,OPfdiv,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfdivr,OPSnone]:=True;
|
|
used_op[OPPnone,OPfdivr,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfemms,OPSnone]:=True;
|
|
used_op[OPPnone,OPffree,OPSnone]:=True;
|
|
used_op[OPPnone,OPfiadd,OPSnone]:=True;
|
|
used_op[OPPnone,OPficom,OPSnone]:=True;
|
|
used_op[OPPnone,OPficom,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfidiv,OPSnone]:=True;
|
|
used_op[OPPnone,OPfidivr,OPSnone]:=True;
|
|
used_op[OPPnone,OPfild,OPSnone]:=True;
|
|
used_op[OPPnone,OPfimul,OPSnone]:=True;
|
|
used_op[OPPnone,OPfincstp,OPSnone]:=True;
|
|
used_op[OPPnone,OPfist,OPSnone]:=True;
|
|
used_op[OPPnone,OPfist,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfisttp,OPSnone]:=True;
|
|
used_op[OPPnone,OPfisub,OPSnone]:=True;
|
|
used_op[OPPnone,OPfisubr,OPSnone]:=True;
|
|
used_op[OPPnone,OPfld,OPSnone]:=True;
|
|
used_op[OPPnone,OPfld1,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldcw,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldenv,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldl2e,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldl2t,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldlg2,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldln2,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldpi,OPSnone]:=True;
|
|
used_op[OPPnone,OPfldz,OPSnone]:=True;
|
|
used_op[OPPnone,OPfmul,OPSnone]:=True;
|
|
used_op[OPPnone,OPfmul,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfnclex,OPSnone]:=True;
|
|
used_op[OPPnone,OPfninit,OPSnone]:=True;
|
|
used_op[OPPnone,OPfnsave,OPSnone]:=True;
|
|
used_op[OPPnone,OPfnstcw,OPSnone]:=True;
|
|
used_op[OPPnone,OPfnstenv,OPSnone]:=True;
|
|
used_op[OPPnone,OPfnstsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPfpatan,OPSnone]:=True;
|
|
used_op[OPPnone,OPfprem,OPSnone]:=True;
|
|
used_op[OPPnone,OPfprem1,OPSnone]:=True;
|
|
used_op[OPPnone,OPfptan,OPSnone]:=True;
|
|
used_op[OPPnone,OPfrndint,OPSnone]:=True;
|
|
used_op[OPPnone,OPfrstor,OPSnone]:=True;
|
|
used_op[OPPnone,OPfscale,OPSnone]:=True;
|
|
used_op[OPPnone,OPfsin,OPSnone]:=True;
|
|
used_op[OPPnone,OPfsincos,OPSnone]:=True;
|
|
used_op[OPPnone,OPfsqrt,OPSnone]:=True;
|
|
used_op[OPPnone,OPfst,OPSnone]:=True;
|
|
used_op[OPPnone,OPfst,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfsub,OPSnone]:=True;
|
|
used_op[OPPnone,OPfsub,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfsubr,OPSnone]:=True;
|
|
used_op[OPPnone,OPfsubr,OPSx_p]:=True;
|
|
used_op[OPPnone,OPftst,OPSnone]:=True;
|
|
used_op[OPPnone,OPfucom,OPSx_i]:=True;
|
|
used_op[OPPnone,OPfucom,OPSx_ip]:=True;
|
|
used_op[OPPnone,OPfucom,OPSx_p]:=True;
|
|
used_op[OPPnone,OPfwait,OPSnone]:=True;
|
|
used_op[OPPnone,OPfxam,OPSnone]:=True;
|
|
used_op[OPPnone,OPfxch,OPSnone]:=True;
|
|
used_op[OPPnone,OPfxrstor,OPSnone]:=True;
|
|
used_op[OPPnone,OPfxsave,OPSnone]:=True;
|
|
used_op[OPPnone,OPfxtract,OPSnone]:=True;
|
|
used_op[OPPnone,OPfyl2x,OPSnone]:=True;
|
|
used_op[OPPnone,OPfyl2xp1,OPSnone]:=True;
|
|
used_op[OPPnone,OPgetbv,OPSnone]:=True;
|
|
used_op[OPPnone,OPhadd,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPhadd,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPhlt,OPSnone]:=True;
|
|
used_op[OPPnone,OPidiv,OPSnone]:=True;
|
|
used_op[OPPnone,OPimul,OPSnone]:=True;
|
|
used_op[OPPnone,OPin,OPSnone]:=True;
|
|
used_op[OPPnone,OPinc,OPSnone]:=True;
|
|
used_op[OPPnone,OPins,OPSx_b]:=True;
|
|
used_op[OPPnone,OPins,OPSx_d]:=True;
|
|
used_op[OPPnone,OPins,OPSx_w]:=True;
|
|
used_op[OPPnone,OPinsert,OPSx_f128]:=True;
|
|
used_op[OPPnone,OPinsert,OPSx_i128]:=True;
|
|
used_op[OPPnone,OPinsert,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPinsert,OPSx_q]:=True;
|
|
used_op[OPPnone,OPint,OPSnone]:=True;
|
|
used_op[OPPnone,OPint1,OPSnone]:=True;
|
|
used_op[OPPnone,OPint3,OPSnone]:=True;
|
|
used_op[OPPnone,OPinto,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvd,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvept,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvlpg,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvlpga,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvpcid,OPSnone]:=True;
|
|
used_op[OPPnone,OPinvvpid,OPSnone]:=True;
|
|
used_op[OPPnone,OPiret,OPSnone]:=True;
|
|
used_op[OPPnone,OPiret,OPSx_d]:=True;
|
|
used_op[OPPnone,OPiret,OPSx_q]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_o]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_no]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_b]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_nb]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_z]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_nz]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_be]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_nbe]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_s]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_ns]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_p]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_np]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_l]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_nl]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_le]:=True;
|
|
used_op[OPPnone,OPj__,OPSc_nle]:=True;
|
|
used_op[OPPnone,OPjcxz,OPSnone]:=True;
|
|
used_op[OPPnone,OPjecxz,OPSnone]:=True;
|
|
used_op[OPPnone,OPjmp,OPSnone]:=True;
|
|
used_op[OPPnone,OPjrcxz,OPSnone]:=True;
|
|
used_op[OPPnone,OPlahf,OPSnone]:=True;
|
|
used_op[OPPnone,OPlar,OPSnone]:=True;
|
|
used_op[OPPnone,OPlddqu,OPSnone]:=True;
|
|
used_op[OPPnone,OPldmxcsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPlds,OPSnone]:=True;
|
|
used_op[OPPnone,OPlea,OPSnone]:=True;
|
|
used_op[OPPnone,OPleave,OPSnone]:=True;
|
|
used_op[OPPnone,OPles,OPSnone]:=True;
|
|
used_op[OPPnone,OPlfence,OPSnone]:=True;
|
|
used_op[OPPnone,OPlfs,OPSnone]:=True;
|
|
used_op[OPPnone,OPlgdt,OPSnone]:=True;
|
|
used_op[OPPnone,OPlgs,OPSnone]:=True;
|
|
used_op[OPPnone,OPlidt,OPSnone]:=True;
|
|
used_op[OPPnone,OPlldt,OPSnone]:=True;
|
|
used_op[OPPnone,OPlmsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPlods,OPSx_b]:=True;
|
|
used_op[OPPnone,OPlods,OPSx_d]:=True;
|
|
used_op[OPPnone,OPlods,OPSx_q]:=True;
|
|
used_op[OPPnone,OPlods,OPSx_w]:=True;
|
|
used_op[OPPnone,OPloop,OPSnone]:=True;
|
|
used_op[OPPnone,OPloop,OPSc_e]:=True;
|
|
used_op[OPPnone,OPloop,OPSc_ne]:=True;
|
|
used_op[OPPnone,OPlsl,OPSnone]:=True;
|
|
used_op[OPPnone,OPlss,OPSnone]:=True;
|
|
used_op[OPPnone,OPltr,OPSnone]:=True;
|
|
used_op[OPPnone,OPlzcnt,OPSnone]:=True;
|
|
used_op[OPPnone,OPmaskmov,OPSx_dqu]:=True;
|
|
used_op[OPPnone,OPmaskmov,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmaskmov,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmaskmov,OPSx_q]:=True;
|
|
used_op[OPPnone,OPmax,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmax,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmax,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPmax,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPmcommit,OPSnone]:=True;
|
|
used_op[OPPnone,OPmfence,OPSnone]:=True;
|
|
used_op[OPPnone,OPmin,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmin,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmin,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPmin,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPmonitor,OPSnone]:=True;
|
|
used_op[OPPnone,OPmonitor,OPSx_x]:=True;
|
|
used_op[OPPnone,OPmov,OPSnone]:=True;
|
|
used_op[OPPnone,OPmov,OPSc_be]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_d]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqa]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqa32]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqa64]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqu]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqu8]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqu16]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqu32]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_dqu64]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_q]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPmov,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPmova,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmova,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovddup,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovdq2q,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovh,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmovh,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovhlps,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovl,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmovl,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovlh,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovmsk,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmovmsk,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_dqa]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_i]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_q]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPmovnt,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPmovq2dq,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovs,OPSx_b]:=True;
|
|
used_op[OPPnone,OPmovs,OPSx_d]:=True;
|
|
used_op[OPPnone,OPmovs,OPSx_q]:=True;
|
|
used_op[OPPnone,OPmovs,OPSx_w]:=True;
|
|
used_op[OPPnone,OPmovshdup,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovsldup,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovsx,OPSnone]:=True;
|
|
used_op[OPPnone,OPmovsx,OPSx_d]:=True;
|
|
used_op[OPPnone,OPmovu,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmovu,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmovzx,OPSnone]:=True;
|
|
used_op[OPPnone,OPmpsadbw,OPSnone]:=True;
|
|
used_op[OPPnone,OPmul,OPSnone]:=True;
|
|
used_op[OPPnone,OPmul,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPmul,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPmul,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPmul,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPmul,OPSx_x]:=True;
|
|
used_op[OPPnone,OPmwait,OPSnone]:=True;
|
|
used_op[OPPnone,OPmwait,OPSx_x]:=True;
|
|
used_op[OPPnone,OPneg,OPSnone]:=True;
|
|
used_op[OPPnone,OPnop,OPSnone]:=True;
|
|
used_op[OPPnone,OPnot,OPSnone]:=True;
|
|
used_op[OPPnone,OPor,OPSnone]:=True;
|
|
used_op[OPPnone,OPor,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPor,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPor,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPor,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPout,OPSnone]:=True;
|
|
used_op[OPPnone,OPouts,OPSx_b]:=True;
|
|
used_op[OPPnone,OPouts,OPSx_d]:=True;
|
|
used_op[OPPnone,OPouts,OPSx_w]:=True;
|
|
used_op[OPPnone,OPextrq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpabs,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpabs,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpabs,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpackssdw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpacksswb,OPSnone]:=True;
|
|
used_op[OPPnone,OPpackusdw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpackuswb,OPSnone]:=True;
|
|
used_op[OPPnone,OPpadd,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpadd,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpadd,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpadd,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpadds,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpadds,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpaddus,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpaddus,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpalignr,OPSnone]:=True;
|
|
used_op[OPPnone,OPpand,OPSnone]:=True;
|
|
used_op[OPPnone,OPpandn,OPSnone]:=True;
|
|
used_op[OPPnone,OPpause,OPSnone]:=True;
|
|
used_op[OPPnone,OPpavg,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpavg,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpavgusb,OPSnone]:=True;
|
|
used_op[OPPnone,OPpblendvb,OPSnone]:=True;
|
|
used_op[OPPnone,OPpblend,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpblend,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpclmulqdq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpcmpeq,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpcmpeq,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpcmpeq,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpcmpeq,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpcmpestri,OPSnone]:=True;
|
|
used_op[OPPnone,OPpcmpestrm,OPSnone]:=True;
|
|
used_op[OPPnone,OPpcmpgt,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpcmpgt,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpcmpgt,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpcmpgt,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpcmpistri,OPSnone]:=True;
|
|
used_op[OPPnone,OPpcmpistrm,OPSnone]:=True;
|
|
used_op[OPPnone,OPpdep,OPSnone]:=True;
|
|
used_op[OPPnone,OPpext,OPSnone]:=True;
|
|
used_op[OPPnone,OPpextr,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpextr,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpextr,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpextr,OPSx_w]:=True;
|
|
used_op[OPPnone,OPphadd,OPSx_d]:=True;
|
|
used_op[OPPnone,OPphadd,OPSx_w]:=True;
|
|
used_op[OPPnone,OPphaddsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPphminposuw,OPSnone]:=True;
|
|
used_op[OPPnone,OPphsub,OPSx_d]:=True;
|
|
used_op[OPPnone,OPphsub,OPSx_w]:=True;
|
|
used_op[OPPnone,OPphsubsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpinsr,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpinsr,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpinsr,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpinsr,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpmaddubsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmaddwd,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmaxs,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpmaxs,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpmaxs,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpmaxu,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpmaxu,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpmaxu,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpmins,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpmins,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpmins,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpminu,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpminu,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpminu,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpmovmskb,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_bw]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_bd]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_bq]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_wd]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_wq]:=True;
|
|
used_op[OPPnone,OPpmovsx,OPSv_dq]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_bw]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_bd]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_bq]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_wd]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_wq]:=True;
|
|
used_op[OPPnone,OPpmovzx,OPSv_dq]:=True;
|
|
used_op[OPPnone,OPpmuldq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmulhrsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmulhuw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmulhw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpmull,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpmull,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpmuludq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpop,OPSnone]:=True;
|
|
used_op[OPPnone,OPpopcnt,OPSnone]:=True;
|
|
used_op[OPPnone,OPpopf,OPSnone]:=True;
|
|
used_op[OPPnone,OPpopf,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpor,OPSnone]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSnone]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSp_t0]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSp_t1]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSp_t2]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSp_nta]:=True;
|
|
used_op[OPPnone,OPprefetch,OPSp_w]:=True;
|
|
used_op[OPPnone,OPpsadbw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpshuf,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpshuf,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpshuf,OPSx_hw]:=True;
|
|
used_op[OPPnone,OPpshuf,OPSx_lw]:=True;
|
|
used_op[OPPnone,OPpshuf,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsign,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpsign,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpsign,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsll,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpsll,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPpsll,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpsll,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsmash,OPSnone]:=True;
|
|
used_op[OPPnone,OPpsra,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpsra,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsrl,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpsrl,OPSx_dq]:=True;
|
|
used_op[OPPnone,OPpsrl,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpsrl,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsub,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpsub,OPSx_d]:=True;
|
|
used_op[OPPnone,OPpsub,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpsub,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsubs,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpsubs,OPSx_w]:=True;
|
|
used_op[OPPnone,OPpsubus,OPSx_b]:=True;
|
|
used_op[OPPnone,OPpsubus,OPSx_w]:=True;
|
|
used_op[OPPnone,OPptest,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpckhbw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpckhdq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpckhqdq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpckhwd,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpcklbw,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpckldq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpcklqdq,OPSnone]:=True;
|
|
used_op[OPPnone,OPpunpcklwd,OPSnone]:=True;
|
|
used_op[OPPnone,OPpush,OPSnone]:=True;
|
|
used_op[OPPnone,OPpushf,OPSnone]:=True;
|
|
used_op[OPPnone,OPpushf,OPSx_q]:=True;
|
|
used_op[OPPnone,OPpvalidate,OPSnone]:=True;
|
|
used_op[OPPnone,OPpxor,OPSnone]:=True;
|
|
used_op[OPPnone,OPrcl,OPSnone]:=True;
|
|
used_op[OPPnone,OPrcp,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPrcp,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPrcp,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPrcp,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPrcr,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdfsbase,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdgsbase,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdmsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdpid,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdpkru,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdpmc,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdpru,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdrand,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdseed,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdss,OPSx_p]:=True;
|
|
used_op[OPPnone,OPrdtsc,OPSnone]:=True;
|
|
used_op[OPPnone,OPrdtsc,OPSx_p]:=True;
|
|
used_op[OPPnone,OPret,OPSnone]:=True;
|
|
used_op[OPPnone,OPretf,OPSnone]:=True;
|
|
used_op[OPPnone,OPrmpadjust,OPSnone]:=True;
|
|
used_op[OPPnone,OPrmpupdate,OPSnone]:=True;
|
|
used_op[OPPnone,OProl,OPSnone]:=True;
|
|
used_op[OPPnone,OPror,OPSnone]:=True;
|
|
used_op[OPPnone,OProrx,OPSnone]:=True;
|
|
used_op[OPPnone,OPround,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPround,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPround,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPround,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPrsm,OPSnone]:=True;
|
|
used_op[OPPnone,OPrsqrt,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPrsqrt,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPrsqrt,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPrsqrt,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPsahf,OPSnone]:=True;
|
|
used_op[OPPnone,OPsal,OPSnone]:=True;
|
|
used_op[OPPnone,OPsalc,OPSnone]:=True;
|
|
used_op[OPPnone,OPsar,OPSnone]:=True;
|
|
used_op[OPPnone,OPsar,OPSx_x]:=True;
|
|
used_op[OPPnone,OPsaveprevssp,OPSnone]:=True;
|
|
used_op[OPPnone,OPsbb,OPSnone]:=True;
|
|
used_op[OPPnone,OPscas,OPSx_b]:=True;
|
|
used_op[OPPnone,OPscas,OPSx_d]:=True;
|
|
used_op[OPPnone,OPscas,OPSx_q]:=True;
|
|
used_op[OPPnone,OPscas,OPSx_w]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_o]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_no]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_b]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_nb]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_z]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_nz]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_be]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_nbe]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_s]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_ns]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_p]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_np]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_l]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_nl]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_le]:=True;
|
|
used_op[OPPnone,OPset__,OPSc_nle]:=True;
|
|
used_op[OPPnone,OPsetbv,OPSnone]:=True;
|
|
used_op[OPPnone,OPsetssbsy,OPSnone]:=True;
|
|
used_op[OPPnone,OPsfence,OPSnone]:=True;
|
|
used_op[OPPnone,OPsgdt,OPSnone]:=True;
|
|
used_op[OPPnone,OPsha1rnds4,OPSnone]:=True;
|
|
used_op[OPPnone,OPshl,OPSnone]:=True;
|
|
used_op[OPPnone,OPshl,OPSx_d]:=True;
|
|
used_op[OPPnone,OPshl,OPSx_x]:=True;
|
|
used_op[OPPnone,OPshr,OPSnone]:=True;
|
|
used_op[OPPnone,OPshr,OPSx_d]:=True;
|
|
used_op[OPPnone,OPshr,OPSx_x]:=True;
|
|
used_op[OPPnone,OPshuf,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPshuf,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPsidt,OPSnone]:=True;
|
|
used_op[OPPnone,OPskinit,OPSnone]:=True;
|
|
used_op[OPPnone,OPsldt,OPSnone]:=True;
|
|
used_op[OPPnone,OPsmsw,OPSnone]:=True;
|
|
used_op[OPPnone,OPsqrt,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPsqrt,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPsqrt,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPsqrt,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPstac,OPSnone]:=True;
|
|
used_op[OPPnone,OPstc,OPSnone]:=True;
|
|
used_op[OPPnone,OPstd,OPSnone]:=True;
|
|
used_op[OPPnone,OPstgi,OPSnone]:=True;
|
|
used_op[OPPnone,OPsti,OPSnone]:=True;
|
|
used_op[OPPnone,OPstmxcsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPstos,OPSx_b]:=True;
|
|
used_op[OPPnone,OPstos,OPSx_d]:=True;
|
|
used_op[OPPnone,OPstos,OPSx_q]:=True;
|
|
used_op[OPPnone,OPstos,OPSx_w]:=True;
|
|
used_op[OPPnone,OPstr,OPSnone]:=True;
|
|
used_op[OPPnone,OPsub,OPSnone]:=True;
|
|
used_op[OPPnone,OPsub,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPsub,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPsub,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPsub,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPswapgs,OPSnone]:=True;
|
|
used_op[OPPnone,OPsyscall,OPSnone]:=True;
|
|
used_op[OPPnone,OPsysenter,OPSnone]:=True;
|
|
used_op[OPPnone,OPsysexit,OPSnone]:=True;
|
|
used_op[OPPnone,OPsysret,OPSnone]:=True;
|
|
used_op[OPPnone,OPtest,OPSnone]:=True;
|
|
used_op[OPPnone,OPtzcnt,OPSnone]:=True;
|
|
used_op[OPPnone,OPucomi,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPucomi,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPud1,OPSnone]:=True;
|
|
used_op[OPPnone,OPud2,OPSnone]:=True;
|
|
used_op[OPPnone,OPunpckh,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPunpckh,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPunpckl,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPunpckl,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvalign,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvalign,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvbroadcast,OPSx_f128]:=True;
|
|
used_op[OPPnone,OPvbroadcast,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPvbroadcast,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvcvtph2ps,OPSnone]:=True;
|
|
used_op[OPPnone,OPverr,OPSnone]:=True;
|
|
used_op[OPPnone,OPverw,OPSnone]:=True;
|
|
used_op[OPPnone,OPvfmadd132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmadd132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmadd132,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmadd213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmadd213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmadd213,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmadd231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmadd231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmadd231,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmaddsub132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmaddsub132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmaddsub213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmaddsub213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmaddsub231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmaddsub231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsub132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsub132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsub132,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmsub213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsub213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsub213,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmsub231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsub231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsub231,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfmsubadd132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsubadd132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsubadd213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsubadd213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfmsubadd231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfmsubadd231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmadd132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmadd132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmadd132,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfnmadd213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmadd213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmadd213,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfnmadd231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmadd231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmadd231,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfnmsub132,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmsub132,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmsub132,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfnmsub213,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmsub213,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmsub213,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvfnmsub231,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvfnmsub231,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvfnmsub231,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPvgatherd,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvgatherd,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvgatherd,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvgatherq,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvgatherq,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvgatherq,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvpbroadcast,OPSx_b]:=True;
|
|
used_op[OPPnone,OPvpbroadcast,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvpbroadcast,OPSx_i128]:=True;
|
|
used_op[OPPnone,OPvpbroadcast,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvpbroadcast,OPSx_w]:=True;
|
|
used_op[OPPnone,OPvperm,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvperm,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPvperm,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvperm,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvperm2,OPSx_f128]:=True;
|
|
used_op[OPPnone,OPvperm2,OPSx_i128]:=True;
|
|
used_op[OPPnone,OPvpermil,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPvpermil,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvpmaskmov,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvpmaskmov,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvpsllv,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvpsllv,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvpsrav,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvpsrlv,OPSx_d]:=True;
|
|
used_op[OPPnone,OPvpsrlv,OPSx_q]:=True;
|
|
used_op[OPPnone,OPvtest,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPvtest,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPvzeroall,OPSnone]:=True;
|
|
used_op[OPPnone,OPvzeroupper,OPSnone]:=True;
|
|
used_op[OPPnone,OPwbinvd,OPSnone]:=True;
|
|
used_op[OPPnone,OPwrfsbase,OPSnone]:=True;
|
|
used_op[OPPnone,OPwrgsbase,OPSnone]:=True;
|
|
used_op[OPPnone,OPwrmsr,OPSnone]:=True;
|
|
used_op[OPPnone,OPwrpkru,OPSnone]:=True;
|
|
used_op[OPPnone,OPxabort,OPSnone]:=True;
|
|
used_op[OPPnone,OPxadd,OPSnone]:=True;
|
|
used_op[OPPnone,OPxbegin,OPSnone]:=True;
|
|
used_op[OPPnone,OPxchg,OPSnone]:=True;
|
|
used_op[OPPnone,OPxend,OPSnone]:=True;
|
|
used_op[OPPnone,OPxlat,OPSnone]:=True;
|
|
used_op[OPPnone,OPxor,OPSnone]:=True;
|
|
used_op[OPPnone,OPxor,OPSx_pd]:=True;
|
|
used_op[OPPnone,OPxor,OPSx_ps]:=True;
|
|
used_op[OPPnone,OPxor,OPSx_sd]:=True;
|
|
used_op[OPPnone,OPxor,OPSx_ss]:=True;
|
|
used_op[OPPnone,OPxrstor,OPSnone]:=True;
|
|
used_op[OPPnone,OPxsave,OPSnone]:=True;
|
|
used_op[OPPnone,OPxsaveopt,OPSnone]:=True;
|
|
used_op[OPPnone,OPxtest,OPSnone]:=True;
|
|
used_op[OPPv,OPadd,OPSx_pd]:=True;
|
|
used_op[OPPv,OPadd,OPSx_ps]:=True;
|
|
used_op[OPPv,OPadd,OPSx_sd]:=True;
|
|
used_op[OPPv,OPadd,OPSx_ss]:=True;
|
|
used_op[OPPv,OPaddsub,OPSx_pd]:=True;
|
|
used_op[OPPv,OPaddsub,OPSx_ps]:=True;
|
|
used_op[OPPv,OPaesdec,OPSnone]:=True;
|
|
used_op[OPPv,OPaesdeclast,OPSnone]:=True;
|
|
used_op[OPPv,OPaesenc,OPSnone]:=True;
|
|
used_op[OPPv,OPaesenclast,OPSnone]:=True;
|
|
used_op[OPPv,OPaesimc,OPSnone]:=True;
|
|
used_op[OPPv,OPaeskeygenassist,OPSnone]:=True;
|
|
used_op[OPPv,OPand,OPSx_pd]:=True;
|
|
used_op[OPPv,OPand,OPSx_ps]:=True;
|
|
used_op[OPPv,OPand,OPSx_sd]:=True;
|
|
used_op[OPPv,OPand,OPSx_ss]:=True;
|
|
used_op[OPPv,OPandn,OPSx_pd]:=True;
|
|
used_op[OPPv,OPandn,OPSx_ps]:=True;
|
|
used_op[OPPv,OPandn,OPSx_sd]:=True;
|
|
used_op[OPPv,OPandn,OPSx_ss]:=True;
|
|
used_op[OPPv,OPblend,OPSx_pd]:=True;
|
|
used_op[OPPv,OPblend,OPSx_ps]:=True;
|
|
used_op[OPPv,OPblendv,OPSx_pd]:=True;
|
|
used_op[OPPv,OPblendv,OPSx_ps]:=True;
|
|
used_op[OPPv,OPcmp,OPSx_pd]:=True;
|
|
used_op[OPPv,OPcmp,OPSx_ps]:=True;
|
|
used_op[OPPv,OPcmp,OPSx_sd]:=True;
|
|
used_op[OPPv,OPcmp,OPSx_ss]:=True;
|
|
used_op[OPPv,OPcomi,OPSx_sd]:=True;
|
|
used_op[OPPv,OPcomi,OPSx_ss]:=True;
|
|
used_op[OPPv,OPcvtdq2,OPSx_pd]:=True;
|
|
used_op[OPPv,OPcvtdq2,OPSx_ps]:=True;
|
|
used_op[OPPv,OPcvtpd2,OPSx_dq]:=True;
|
|
used_op[OPPv,OPcvtpd2,OPSx_ps]:=True;
|
|
used_op[OPPv,OPcvtps2,OPSx_dq]:=True;
|
|
used_op[OPPv,OPcvtps2,OPSx_pd]:=True;
|
|
used_op[OPPv,OPcvtps2,OPSx_ph]:=True;
|
|
used_op[OPPv,OPcvtsd2,OPSx_si]:=True;
|
|
used_op[OPPv,OPcvtsd2,OPSx_ss]:=True;
|
|
used_op[OPPv,OPcvtsi2,OPSx_sd]:=True;
|
|
used_op[OPPv,OPcvtsi2,OPSx_ss]:=True;
|
|
used_op[OPPv,OPcvtss2,OPSx_sd]:=True;
|
|
used_op[OPPv,OPcvtss2,OPSx_si]:=True;
|
|
used_op[OPPv,OPcvttpd2,OPSx_dq]:=True;
|
|
used_op[OPPv,OPcvttps2,OPSx_dq]:=True;
|
|
used_op[OPPv,OPcvttsd2,OPSx_si]:=True;
|
|
used_op[OPPv,OPcvttss2,OPSx_si]:=True;
|
|
used_op[OPPv,OPdiv,OPSx_pd]:=True;
|
|
used_op[OPPv,OPdiv,OPSx_ps]:=True;
|
|
used_op[OPPv,OPdiv,OPSx_sd]:=True;
|
|
used_op[OPPv,OPdiv,OPSx_ss]:=True;
|
|
used_op[OPPv,OPdp,OPSx_pd]:=True;
|
|
used_op[OPPv,OPdp,OPSx_ps]:=True;
|
|
used_op[OPPv,OPextract,OPSx_f128]:=True;
|
|
used_op[OPPv,OPextract,OPSx_i128]:=True;
|
|
used_op[OPPv,OPextract,OPSx_ps]:=True;
|
|
used_op[OPPv,OPhadd,OPSx_pd]:=True;
|
|
used_op[OPPv,OPhadd,OPSx_ps]:=True;
|
|
used_op[OPPv,OPinsert,OPSx_f128]:=True;
|
|
used_op[OPPv,OPinsert,OPSx_i128]:=True;
|
|
used_op[OPPv,OPinsert,OPSx_ps]:=True;
|
|
used_op[OPPv,OPlddqu,OPSnone]:=True;
|
|
used_op[OPPv,OPldmxcsr,OPSnone]:=True;
|
|
used_op[OPPv,OPmaskmov,OPSx_dqu]:=True;
|
|
used_op[OPPv,OPmaskmov,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmaskmov,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmax,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmax,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmax,OPSx_sd]:=True;
|
|
used_op[OPPv,OPmax,OPSx_ss]:=True;
|
|
used_op[OPPv,OPmin,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmin,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmin,OPSx_sd]:=True;
|
|
used_op[OPPv,OPmin,OPSx_ss]:=True;
|
|
used_op[OPPv,OPmov,OPSx_d]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqa]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqa32]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqa64]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqu]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqu8]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqu16]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqu32]:=True;
|
|
used_op[OPPv,OPmov,OPSx_dqu64]:=True;
|
|
used_op[OPPv,OPmov,OPSx_q]:=True;
|
|
used_op[OPPv,OPmov,OPSx_sd]:=True;
|
|
used_op[OPPv,OPmov,OPSx_ss]:=True;
|
|
used_op[OPPv,OPmova,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmova,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovddup,OPSnone]:=True;
|
|
used_op[OPPv,OPmovh,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmovh,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovhlps,OPSnone]:=True;
|
|
used_op[OPPv,OPmovl,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmovl,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovlh,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovmsk,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmovmsk,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovnt,OPSx_dq]:=True;
|
|
used_op[OPPv,OPmovnt,OPSx_dqa]:=True;
|
|
used_op[OPPv,OPmovnt,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmovnt,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmovshdup,OPSnone]:=True;
|
|
used_op[OPPv,OPmovsldup,OPSnone]:=True;
|
|
used_op[OPPv,OPmovu,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmovu,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmpsadbw,OPSnone]:=True;
|
|
used_op[OPPv,OPmul,OPSx_pd]:=True;
|
|
used_op[OPPv,OPmul,OPSx_ps]:=True;
|
|
used_op[OPPv,OPmul,OPSx_sd]:=True;
|
|
used_op[OPPv,OPmul,OPSx_ss]:=True;
|
|
used_op[OPPv,OPor,OPSx_pd]:=True;
|
|
used_op[OPPv,OPor,OPSx_ps]:=True;
|
|
used_op[OPPv,OPor,OPSx_sd]:=True;
|
|
used_op[OPPv,OPor,OPSx_ss]:=True;
|
|
used_op[OPPv,OPpabs,OPSx_b]:=True;
|
|
used_op[OPPv,OPpabs,OPSx_d]:=True;
|
|
used_op[OPPv,OPpabs,OPSx_w]:=True;
|
|
used_op[OPPv,OPpackssdw,OPSnone]:=True;
|
|
used_op[OPPv,OPpacksswb,OPSnone]:=True;
|
|
used_op[OPPv,OPpackusdw,OPSnone]:=True;
|
|
used_op[OPPv,OPpackuswb,OPSnone]:=True;
|
|
used_op[OPPv,OPpadd,OPSx_b]:=True;
|
|
used_op[OPPv,OPpadd,OPSx_d]:=True;
|
|
used_op[OPPv,OPpadd,OPSx_q]:=True;
|
|
used_op[OPPv,OPpadd,OPSx_w]:=True;
|
|
used_op[OPPv,OPpadds,OPSx_b]:=True;
|
|
used_op[OPPv,OPpadds,OPSx_w]:=True;
|
|
used_op[OPPv,OPpaddus,OPSx_b]:=True;
|
|
used_op[OPPv,OPpaddus,OPSx_w]:=True;
|
|
used_op[OPPv,OPpalignr,OPSnone]:=True;
|
|
used_op[OPPv,OPpand,OPSnone]:=True;
|
|
used_op[OPPv,OPpandn,OPSnone]:=True;
|
|
used_op[OPPv,OPpavg,OPSx_b]:=True;
|
|
used_op[OPPv,OPpavg,OPSx_w]:=True;
|
|
used_op[OPPv,OPpblendvb,OPSnone]:=True;
|
|
used_op[OPPv,OPpblend,OPSx_d]:=True;
|
|
used_op[OPPv,OPpblend,OPSx_w]:=True;
|
|
used_op[OPPv,OPpclmulqdq,OPSnone]:=True;
|
|
used_op[OPPv,OPpcmpeq,OPSx_b]:=True;
|
|
used_op[OPPv,OPpcmpeq,OPSx_d]:=True;
|
|
used_op[OPPv,OPpcmpeq,OPSx_q]:=True;
|
|
used_op[OPPv,OPpcmpeq,OPSx_w]:=True;
|
|
used_op[OPPv,OPpcmpestri,OPSnone]:=True;
|
|
used_op[OPPv,OPpcmpestrm,OPSnone]:=True;
|
|
used_op[OPPv,OPpcmpgt,OPSx_b]:=True;
|
|
used_op[OPPv,OPpcmpgt,OPSx_d]:=True;
|
|
used_op[OPPv,OPpcmpgt,OPSx_q]:=True;
|
|
used_op[OPPv,OPpcmpgt,OPSx_w]:=True;
|
|
used_op[OPPv,OPpcmpistri,OPSnone]:=True;
|
|
used_op[OPPv,OPpcmpistrm,OPSnone]:=True;
|
|
used_op[OPPv,OPpextr,OPSx_b]:=True;
|
|
used_op[OPPv,OPpextr,OPSx_d]:=True;
|
|
used_op[OPPv,OPpextr,OPSx_q]:=True;
|
|
used_op[OPPv,OPpextr,OPSx_w]:=True;
|
|
used_op[OPPv,OPphadd,OPSx_d]:=True;
|
|
used_op[OPPv,OPphadd,OPSx_w]:=True;
|
|
used_op[OPPv,OPphaddsw,OPSnone]:=True;
|
|
used_op[OPPv,OPphminposuw,OPSnone]:=True;
|
|
used_op[OPPv,OPphsub,OPSx_d]:=True;
|
|
used_op[OPPv,OPphsub,OPSx_w]:=True;
|
|
used_op[OPPv,OPphsubsw,OPSnone]:=True;
|
|
used_op[OPPv,OPpinsr,OPSx_b]:=True;
|
|
used_op[OPPv,OPpinsr,OPSx_d]:=True;
|
|
used_op[OPPv,OPpinsr,OPSx_q]:=True;
|
|
used_op[OPPv,OPpinsr,OPSx_w]:=True;
|
|
used_op[OPPv,OPpmaddubsw,OPSnone]:=True;
|
|
used_op[OPPv,OPpmaddwd,OPSnone]:=True;
|
|
used_op[OPPv,OPpmaxs,OPSx_b]:=True;
|
|
used_op[OPPv,OPpmaxs,OPSx_d]:=True;
|
|
used_op[OPPv,OPpmaxs,OPSx_w]:=True;
|
|
used_op[OPPv,OPpmaxu,OPSx_b]:=True;
|
|
used_op[OPPv,OPpmaxu,OPSx_d]:=True;
|
|
used_op[OPPv,OPpmaxu,OPSx_w]:=True;
|
|
used_op[OPPv,OPpmins,OPSx_b]:=True;
|
|
used_op[OPPv,OPpmins,OPSx_d]:=True;
|
|
used_op[OPPv,OPpmins,OPSx_w]:=True;
|
|
used_op[OPPv,OPpminu,OPSx_b]:=True;
|
|
used_op[OPPv,OPpminu,OPSx_d]:=True;
|
|
used_op[OPPv,OPpminu,OPSx_w]:=True;
|
|
used_op[OPPv,OPpmovmskb,OPSnone]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_bw]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_bd]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_bq]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_wd]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_wq]:=True;
|
|
used_op[OPPv,OPpmovsx,OPSv_dq]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_bw]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_bd]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_bq]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_wd]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_wq]:=True;
|
|
used_op[OPPv,OPpmovzx,OPSv_dq]:=True;
|
|
used_op[OPPv,OPpmuldq,OPSnone]:=True;
|
|
used_op[OPPv,OPpmulhrsw,OPSnone]:=True;
|
|
used_op[OPPv,OPpmulhuw,OPSnone]:=True;
|
|
used_op[OPPv,OPpmulhw,OPSnone]:=True;
|
|
used_op[OPPv,OPpmull,OPSx_d]:=True;
|
|
used_op[OPPv,OPpmull,OPSx_w]:=True;
|
|
used_op[OPPv,OPpmuludq,OPSnone]:=True;
|
|
used_op[OPPv,OPpor,OPSnone]:=True;
|
|
used_op[OPPv,OPpsadbw,OPSnone]:=True;
|
|
used_op[OPPv,OPpshuf,OPSx_b]:=True;
|
|
used_op[OPPv,OPpshuf,OPSx_d]:=True;
|
|
used_op[OPPv,OPpshuf,OPSx_hw]:=True;
|
|
used_op[OPPv,OPpshuf,OPSx_lw]:=True;
|
|
used_op[OPPv,OPpsign,OPSx_b]:=True;
|
|
used_op[OPPv,OPpsign,OPSx_d]:=True;
|
|
used_op[OPPv,OPpsign,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsll,OPSx_d]:=True;
|
|
used_op[OPPv,OPpsll,OPSx_dq]:=True;
|
|
used_op[OPPv,OPpsll,OPSx_q]:=True;
|
|
used_op[OPPv,OPpsll,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsra,OPSx_d]:=True;
|
|
used_op[OPPv,OPpsra,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsrl,OPSx_d]:=True;
|
|
used_op[OPPv,OPpsrl,OPSx_dq]:=True;
|
|
used_op[OPPv,OPpsrl,OPSx_q]:=True;
|
|
used_op[OPPv,OPpsrl,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsub,OPSx_b]:=True;
|
|
used_op[OPPv,OPpsub,OPSx_d]:=True;
|
|
used_op[OPPv,OPpsub,OPSx_q]:=True;
|
|
used_op[OPPv,OPpsub,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsubs,OPSx_b]:=True;
|
|
used_op[OPPv,OPpsubs,OPSx_w]:=True;
|
|
used_op[OPPv,OPpsubus,OPSx_b]:=True;
|
|
used_op[OPPv,OPpsubus,OPSx_w]:=True;
|
|
used_op[OPPv,OPptest,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpckhbw,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpckhdq,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpckhqdq,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpckhwd,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpcklbw,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpckldq,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpcklqdq,OPSnone]:=True;
|
|
used_op[OPPv,OPpunpcklwd,OPSnone]:=True;
|
|
used_op[OPPv,OPpxor,OPSnone]:=True;
|
|
used_op[OPPv,OPrcp,OPSx_pd]:=True;
|
|
used_op[OPPv,OPrcp,OPSx_ps]:=True;
|
|
used_op[OPPv,OPrcp,OPSx_sd]:=True;
|
|
used_op[OPPv,OPrcp,OPSx_ss]:=True;
|
|
used_op[OPPv,OPround,OPSx_pd]:=True;
|
|
used_op[OPPv,OPround,OPSx_ps]:=True;
|
|
used_op[OPPv,OPround,OPSx_sd]:=True;
|
|
used_op[OPPv,OPround,OPSx_ss]:=True;
|
|
used_op[OPPv,OPrsqrt,OPSx_pd]:=True;
|
|
used_op[OPPv,OPrsqrt,OPSx_ps]:=True;
|
|
used_op[OPPv,OPrsqrt,OPSx_sd]:=True;
|
|
used_op[OPPv,OPrsqrt,OPSx_ss]:=True;
|
|
used_op[OPPv,OPshuf,OPSx_pd]:=True;
|
|
used_op[OPPv,OPshuf,OPSx_ps]:=True;
|
|
used_op[OPPv,OPsqrt,OPSx_pd]:=True;
|
|
used_op[OPPv,OPsqrt,OPSx_ps]:=True;
|
|
used_op[OPPv,OPsqrt,OPSx_sd]:=True;
|
|
used_op[OPPv,OPsqrt,OPSx_ss]:=True;
|
|
used_op[OPPv,OPstmxcsr,OPSnone]:=True;
|
|
used_op[OPPv,OPsub,OPSx_pd]:=True;
|
|
used_op[OPPv,OPsub,OPSx_ps]:=True;
|
|
used_op[OPPv,OPsub,OPSx_sd]:=True;
|
|
used_op[OPPv,OPsub,OPSx_ss]:=True;
|
|
used_op[OPPv,OPucomi,OPSx_sd]:=True;
|
|
used_op[OPPv,OPucomi,OPSx_ss]:=True;
|
|
used_op[OPPv,OPunpckh,OPSx_pd]:=True;
|
|
used_op[OPPv,OPunpckh,OPSx_ps]:=True;
|
|
used_op[OPPv,OPunpckl,OPSx_pd]:=True;
|
|
used_op[OPPv,OPunpckl,OPSx_ps]:=True;
|
|
used_op[OPPv,OPxor,OPSx_pd]:=True;
|
|
used_op[OPPv,OPxor,OPSx_ps]:=True;
|
|
used_op[OPPv,OPxor,OPSx_sd]:=True;
|
|
used_op[OPPv,OPxor,OPSx_ss]:=True;
|
|
end;
|
|
|
|
function is_sse(x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
begin
|
|
Result:=False;
|
|
if (x=OPPnone) then
|
|
begin
|
|
case y of
|
|
OPaddsub,
|
|
OPcomi,
|
|
OPmaskmov..OPmonitor,
|
|
OPmova,
|
|
OPmovddup..OPmovsldup,
|
|
OPmovu,
|
|
OPmpsadbw,
|
|
OPcvtdq2..OPcvttss2,
|
|
OPextrq,
|
|
OPpabs..OPpandn,
|
|
OPpavg..OPpmuludq,
|
|
OPpor,
|
|
OPpsadbw..OPpunpcklwd,
|
|
OPpxor ,
|
|
OPdp ,
|
|
OPblend ,
|
|
OPblendv ,
|
|
OPround ,
|
|
OPinsert ,
|
|
OPextract,
|
|
OPlddqu ,
|
|
|
|
OPaesimc,
|
|
OPaesenc,
|
|
OPaesenclast,
|
|
OPaesdec,
|
|
OPaesdeclast,
|
|
OPaeskeygenassist,
|
|
|
|
OPxabort..OPxbegin,
|
|
OPxend..OPxgetbv,
|
|
OPxrelease..OPxtest:
|
|
|
|
Result:=True;
|
|
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function is_float(x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
begin
|
|
Result:=(y in [OPf2xm1..OPgf2p8mulb]);
|
|
end;
|
|
|
|
function is_avx(x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
begin
|
|
case y of
|
|
OPvalign..OPvzeroupper:Result:=True;
|
|
else
|
|
case x of
|
|
OPPnone:Result:=False;
|
|
OPPv :Result:=True;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
function is_bmi(x:TOpcodePrefix;y:TOpCode;z:TOpCodeSuffix):Boolean;
|
|
begin
|
|
Result:=False;
|
|
if (x=OPPnone) and (z=OPSnone) then
|
|
begin
|
|
case y of
|
|
OPandn,
|
|
OPbextr,
|
|
OPblsi,
|
|
OPblsmsk,
|
|
OPblsr,
|
|
OPtzcnt:Result:=True;
|
|
else;
|
|
end;
|
|
end;
|
|
end;
|
|
|
|
type
|
|
t_status=record
|
|
g,s,f,v,b:DWORD;
|
|
end;
|
|
|
|
function percent(a,b:DWORD):Single; inline;
|
|
begin
|
|
if (b=0) then
|
|
begin
|
|
Result:=0;
|
|
end else
|
|
begin
|
|
Result:=Single(a*100)/b;
|
|
end;
|
|
end;
|
|
|
|
procedure print_test_jit_cbs(print_ops,print_status:Boolean);
|
|
var
|
|
x:TOpcodePrefix;
|
|
y:TOpCode;
|
|
z:TOpCodeSuffix;
|
|
|
|
use_status:t_status;
|
|
cbs_status:t_status;
|
|
|
|
procedure inc_status(var status:t_status);
|
|
begin
|
|
if is_float(x,y,z) then
|
|
begin
|
|
Inc(status.f);
|
|
end else
|
|
if is_bmi(x,y,z) then
|
|
begin
|
|
Inc(status.b);
|
|
end else
|
|
if is_avx(x,y,z) then
|
|
begin
|
|
Inc(status.v);
|
|
end else
|
|
if is_sse(x,y,z) then
|
|
begin
|
|
Inc(status.s)
|
|
end else
|
|
begin
|
|
Inc(status.g)
|
|
end;
|
|
end;
|
|
|
|
begin
|
|
use_status:=Default(t_status);
|
|
cbs_status:=Default(t_status);
|
|
|
|
if print_status then
|
|
For x:=low(x) to high(x) do
|
|
For y:=low(y) to high(y) do
|
|
For z:=low(z) to high(z) do
|
|
if used_op[x,y,z] then
|
|
begin
|
|
inc_status(use_status);
|
|
end;
|
|
|
|
For x:=low(x) to high(x) do
|
|
For y:=low(y) to high(y) do
|
|
For z:=low(z) to high(z) do
|
|
begin
|
|
if used_op[x,y,z] then
|
|
begin
|
|
if (jit_cbs[x,y,z]=nil) then
|
|
begin
|
|
if print_ops then
|
|
begin
|
|
Writeln('Unhandled jit:',x,',',y,',',z);
|
|
end;
|
|
end else
|
|
if print_status then
|
|
begin
|
|
inc_status(cbs_status);
|
|
end;
|
|
end else
|
|
if print_ops then
|
|
if (jit_cbs[x,y,z]<>nil) then
|
|
begin
|
|
Writeln(' handled jit:',x,',',y,',',z);
|
|
end;
|
|
end;
|
|
|
|
if print_status then
|
|
begin
|
|
Writeln('[jit status]');
|
|
Writeln(' general:',percent(cbs_status.g,use_status.g):5:2,'%');
|
|
Writeln(' float:',percent(cbs_status.f,use_status.f):5:2,'%');
|
|
Writeln(' sse:',percent(cbs_status.s,use_status.s):5:2,'%');
|
|
Writeln(' avx:',percent(cbs_status.v,use_status.v):5:2,'%');
|
|
Writeln(' bmi:',percent(cbs_status.b,use_status.b):5:2,'%');
|
|
Writeln(' total:',percent(cbs_status.g+cbs_status.s+cbs_status.f+cbs_status.v+use_status.b,
|
|
use_status.g+use_status.s+use_status.f+use_status.v+use_status.b
|
|
):0:2,'%');
|
|
end;
|
|
|
|
end;
|
|
|
|
initialization
|
|
load_used;
|
|
|
|
|
|
end.
|
|
|