Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Source file x86_arch_full.ml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242openArch_declopenX86_declopenWsizemoduletypeX86_input=sigvalcall_conv:(register,register_ext,xmm_register,rflag,condt)calling_conventionvallowering_opt:X86_lowering.lowering_optionsendletatoIdecl=letopenProginletmk_varkts=V.mks(Reg(k,Direct))(Conv.ty_of_ctyt)L._dummy[]inmatchArch_extra.MkAToIdent.mkdeclmk_varwith|Utils0.Errore->lete=Conv.error_of_cerror(Printer.pp_err~debug:true)einraise(Utils.HiErrore)|Utils0.OkatoI->atoImoduleX86_core=structtypereg=registertyperegx=register_exttypexreg=xmm_registertypenonrecrflag=rflagtypecond=condttypeasm_op=X86_instr_decl.x86_optypeextra_op=X86_extra.x86_extra_optypelowering_options=X86_lowering.lowering_optionsletatoI=atoIx86_declletasm_e=X86_extra.x86_extraatoIletaparams=X86_params.x86_paramsatoIletnot_saved_stack=(X86_params.x86_liparamsatoI).lip_not_saved_stackletpp_asm=Pp_x86.print_progletcallstyle=Arch_full.StackDirectletknown_implicits=["OF","_of_";"CF","_cf_";"SF","_sf_";"ZF","_zf_"]letalloc_stack_need_extra_=falseletis_ct_asm_op(o:asm_op)=matchowith|DIV_|IDIV_->false|_->trueletis_doit_asm_op(o:asm_op)=matchowith|ADC_->true|ADCX_->true|ADD_->true|ADOX_->true|AESDEC->true|AESDECLAST->true|AESENC->true|AESENCLAST->true|AESIMC->true|AESKEYGENASSIST->true|AND_->true|ANDN_->true|BLENDV(VE8,_)->true|BLENDV_->false(* Not DOIT *)|BSR_->false(* Not DOIT *)|BSWAP_->false(* Not DOIT *)|BT_->true|BTR_->true|BTS_->true|CLC->false(* Not DOIT *)|CLFLUSH->false(* Not DOIT *)|CMOVcc_->true|CMP_->true|CQO_->false(* Not DOIT *)|DEC_->true|DIV_->false(* Not DOIT *)|IDIV_->false(* Not DOIT *)|IMUL_->true|IMULr_->true|IMULri_->true|INC_->true|LEA_->true|LFENCE->false(* Not DOIT *)|LZCNT_->false(* Not DOIT *)|MFENCE->false(* Not DOIT *)|MOV_->true|MOVD_->true|MOVEMASK(VE8,_)->true|MOVEMASK_->false(* Not DOIT *)|MOVSX_->true|MOVV_->true|MOVX_->true|PADD_->true|POR->true|MOVZX_->true|MUL_->true|MULX_lo_hi_->true|NEG_->true|NOT_->true|OR_->true|PCLMULQDQ->true|PDEP_->false(* Not DOIT *)|PEXT_->false(* Not DOIT *)|POPCNT_->false(* Not DOIT *)|PREFETCHT0->false(* Not DOIT *)|PREFETCHT1->false(* Not DOIT *)|PREFETCHT2->false(* Not DOIT *)|PREFETCHNTA->false(* Not DOIT *)|RCL_->false(* Not DOIT *)|RCR_->false(* Not DOIT *)|RDTSC_->false(* Not DOIT *)|RDTSCP_->false(* Not DOIT *)|ROL_->false(* Not DOIT *)|RORX_->false(* Not DOIT *)|ROR_->false(* Not DOIT *)|SAL_->false(* Not DOIT *)|SAR_->true|SARX_->false(* Not DOIT *)|SBB_->true|SETcc->true|SFENCE->false(* Not DOIT *)|SHA256MSG1->true|SHA256MSG2->true|SHA256RNDS2->true|SHL_->true|SHLD_->false(* Not DOIT *)|SHLX_->true|SHR_->true|SHRD_->false(* Not DOIT *)|SHRX_->true|STC->false(* Not DOIT *)|SUB_->true|TEST_->true|TZCNT_->false(* Not DOIT *)|VAESDEC_->true|VAESDECLAST_->true|VAESENC_->true|VAESENCLAST_->true|VAESIMC->true|VAESKEYGENASSIST->true|VBROADCASTI128->true|VEXTRACTI128->true|VINSERTI128->true|VMOV_->true|VMOVDQA_->true|VMOVDQU_->true|VMOVHPD->false(* Not DOIT *)|VMOVLPD->false(* Not DOIT *)|VMOVSHDUP_->true|VMOVSLDUP_->true|VPABS_->true|VPACKSS_->true|VPACKUS_->true|VPADD_->true|VPALIGNR_->true|VPAND_->true|VPANDN_->true|VPAVG_->true|VPBLEND_->true|VPBROADCAST_->true|VPCLMULQDQ_->true|VPCMPEQ_->true|VPCMPGT_->true|VPERM2I128->true|VPERMD->true|VPERMQ->true|VPEXTR_->true|VPINSR_->true|VPMADDUBSW_->true|VPMADDWD_->true|VPMAXS(ve,_)->ve=VE8||ve=VE16|VPMAXU_->true|VPMINS(ve,_)->ve=VE8||ve=VE16|VPMINU_->true|VPMOVMSKB_->true|VPMOVSX_->true|VPMOVZX_->true|VPMUL_->true|VPMULH_->true|VPMULHRS_->true|VPMULHU_->true|VPMULL_->true|VPMULU_->true|VPOR_->true|VPSHUFB_->true|VPSHUFD_->true|VPSHUFHW_->true|VPSHUFLW_->true|VPSIGN_->true|VPSLL_->true|VPSLLDQ_->true|VPSLLV_->true|VPSRA_->true|VPSRL_->true|VPSRLDQ_->true|VPSRLV_->true|VPSUB_->true|VPTEST_->true|VPUNPCKH_->true|VPUNPCKL_->true|VPXOR_->true|VSHUFPS_->false(* Not DOIT *)|XCHG_->false(* Not DOIT *)|XOR_->true(* All of the extra ops compile into CT instructions (no DIV). *)letis_ct_asm_extra(_o:extra_op)=true(* All of the extra ops compile into DOIT instructions only, but this needs to be checked manually. *)letis_doit_asm_extra(o:extra_op)=matchowith|Oset0_->true|Oconcat128->true|Ox86MOVZX32->true|Ox86MULX_ws->true|Ox86MULX_hi_->true|Ox86SLHinit->true|Ox86SLHupdate->true|Ox86SLHmove->true|Ox86SLHprotect_->trueendmoduleX86(Lowering_params:X86_input):Arch_full.Core_archwithtypereg=registerandtyperegx=register_extandtypexreg=xmm_registerandtyperflag=rflagandtypecond=condtandtypeasm_op=X86_instr_decl.x86_opandtypeextra_op=X86_extra.x86_extra_op=structincludeX86_coreincludeLowering_paramsend