123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263(* ARMv8A architecture full integration *)openArch_declmoduletypeArmv8a_input=sigvalcall_conv:(Armv8a_decl.register,Arch_utils.empty,Arch_utils.empty,Arm_common.rflag,Arm_common.condt)calling_conventionend(* Create arch_toIdent for ARMv8A *)letatoIarmv8a_decl=letopenProginletmk_varkts=V.mks(Reg(k,Direct))(Conv.ty_of_cty(Type.atype_of_ltypet))L._dummy[]inmatchArch_extra.MkAToIdent.mkarmv8a_declmk_varwith|Utils0.Errore->lete=Conv.error_of_cerror(Printer.pp_err~debug:true)einraise(Utils.HiErrore)|Utils0.OkatoI->atoImoduleArmv8a(Lowering_params:Armv8a_input)=structmoduleAD=Armv8a_decltypereg=AD.registertyperegx=Arch_utils.emptytypexreg=Arch_utils.emptytypenonrecrflag=Arm_common.rflagtypecond=Arm_common.condttypeasm_op=Armv8a_instr_decl.armv8a_asm_optypeextra_op=Armv8a_extra.armv8a_extra_opletatoI=atoIAD.armv8a_declletasm_e=Armv8a_extra.armv8a_extraatoIletaparams=Armv8a_params.armv8a_paramsatoIletknown_implicits=["NF","_nf_";"ZF","_zf_";"CF","_cf_";"VF","_vf_"]letalloc_stack_need_extra_=falseletis_ct_asm_op(o:asm_op)=matchowith|Armv8a_instr_decl.ARMv8A_op((Armv8a_instr_decl.SDIV|Armv8a_instr_decl.UDIV),_)->false|_->trueletis_ct_asm_extra(_o:extra_op)=trueletnot_saved_stack=[]letpp_asm=Pp_arm_v8a.print_progletcallstyle=Arch_full.ByReg{call=SomeArmv8a_decl.R30;return=true}(* SP must stay 16-byte aligned: SP alignment checking, Arm ARM
DDI0487M.a, D1.4.10.2 (see also the AAPCS64 stack constraints). *)letsp_min_align=Wsize.U128(* One X-register store; SIMD (NEON) stores would raise this to u128. *)letmax_store_size=Wsize.U64letinternal_call_conv=Armv8a_decl.armv8a_internal_call_convincludeLowering_paramsend