package jasmin
Source file x86_arch_full.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76open Arch_decl open X86_decl open Wsize module type X86_input = sig val call_conv : (register, register_ext, xmm_register, rflag, condt) calling_convention end let atoI decl = let open Prog in let mk_var k t s = V.mk s (Reg(k,Direct)) (Conv.ty_of_cty (Type.atype_of_ltype t)) L._dummy [] in match Arch_extra.MkAToIdent.mk decl mk_var with | Utils0.Error e -> let e = Conv.error_of_cerror (Printer.pp_err ~debug:true) e in raise (Utils.HiError e) | Utils0.Ok atoI -> atoI module X86_core = struct type reg = register type regx = register_ext type xreg = xmm_register type nonrec rflag = rflag type cond = condt type asm_op = X86_instr_decl.x86_op type extra_op = X86_extra.x86_extra_op let atoI = atoI x86_decl let asm_e = X86_extra.x86_extra atoI let aparams = X86_params.x86_params atoI let not_saved_stack = (X86_params.x86_liparams atoI).lip_not_saved_stack let pp_asm = Pp_x86.print_prog let callstyle = Arch_full.StackDirect let sp_min_align = Wsize.U8 (* One YMM store. *) let max_store_size = U256 let known_implicits = ["OF","_of_"; "CF", "_cf_"; "SF", "_sf_"; "ZF", "_zf_"] let alloc_stack_need_extra _ = false let is_ct_asm_op (o : asm_op) = match o with | DIV _ | IDIV _ -> false | _ -> true (* All of the extra ops compile into CT instructions (no DIV). *) let is_ct_asm_extra (_o : extra_op) = true end module X86 (Lowering_params : X86_input) : Arch_full.Core_arch with type reg = register and type regx = register_ext and type xreg = xmm_register and type rflag = rflag and type cond = condt and type asm_op = X86_instr_decl.x86_op and type extra_op = X86_extra.x86_extra_op = struct include X86_core include Lowering_params let internal_call_conv = X86_decl.x86_internal_call_conv end