jon.recoil.org

Module Simd_selection

type error =
  1. | Bad_immediate of string
exception Error of Simd_selection.error
module Seq = Simd.Seq
val cfg_operation : Simd.operation -> 'a -> (Operation.t * 'a) option
val instr : Simd.Amd64_simd_instrs.instr -> ?i:int -> 'a -> (Operation.t * 'a) option
val seq : Simd.Seq.t -> ?i:int -> 'a -> (Operation.t * 'a) option
val sse_or_avx : Simd.Amd64_simd_instrs.instr -> Simd.Amd64_simd_instrs.instr -> ?i:int -> 'a -> (Operation.t * 'a) option
val seq_or_avx : Simd.Seq.t -> Simd.Seq.t -> ?i:int -> 'a -> (Operation.t * 'a) option
val seq_or_avx_zeroed : dbg:Debuginfo.t -> Simd.Seq.t -> Simd.Amd64_simd_instrs.instr -> ?i:int -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val simd_load : mode:Arch.addressing_mode -> Simd.Amd64_simd_instrs.instr -> 'a -> (Operation.t * 'a) option
val simd_store : mode:Arch.addressing_mode -> Simd.Amd64_simd_instrs.instr -> 'a -> (Operation.t * 'a) option
val simd_load_sse_or_avx : mode:Arch.addressing_mode -> Simd.Amd64_simd_instrs.instr -> Simd.Amd64_simd_instrs.instr -> 'a -> (Operation.t * 'a) option
val simd_store_sse_or_avx : mode:Arch.addressing_mode -> Simd.Amd64_simd_instrs.instr -> Simd.Amd64_simd_instrs.instr -> 'a -> (Operation.t * 'a) option
val bad_immediate : ('a, Stdlib.Format.formatter, unit, 'b) Stdlib.format4 -> 'a
val extract_constant : Cmm.expression list -> string -> max:int -> int * Cmm.expression list
val extract_scale : Cmm.expression list -> string -> int * Cmm.expression list
val int_of_float_rounding : X86_ast.rounding -> int
val check_float_rounding : int -> unit
val select_operation_clmul : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_popcnt : dbg:'a -> string -> 'b -> (Operation.t * 'b) option
val select_operation_lzcnt : dbg:'a -> string -> 'b -> (Operation.t * 'b) option
val select_operation_bmi : dbg:'a -> string -> 'b -> (Operation.t * 'b) option
val select_operation_bmi2 : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_sse : dbg:Debuginfo.t -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_sse2 : dbg:Debuginfo.t -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_sse3 : dbg:'a -> string -> 'b -> (Operation.t * 'b) option
val select_operation_ssse3 : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_sse41 : dbg:Debuginfo.t -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_sse42 : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_avx : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_avx2 : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_f16c : dbg:'a -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val select_operation_fma : dbg:'a -> string -> 'b -> (Operation.t * 'b) option
val select_operation_cfg : dbg:Debuginfo.t -> string -> Cmm.expression list -> (Operation.t * Cmm.expression list) option
val rax : Reg.t
val rdi : Reg.t
val rcx : Reg.t
val rdx : Reg.t
val xmm0v : Reg.t
val to_phys_reg : Simd.reg -> Reg.t
val maybe_pin : Reg.t array -> int -> Simd.loc -> unit
val pseudoregs_for_instr : Simd.instr -> Reg.t array -> Reg.t array -> Reg.t array * Reg.t array
val pseudoregs_for_operation : Simd.operation -> Reg.t array -> Reg.t array -> Reg.t array * Reg.t array
val pseudoregs_for_mem_operation : Simd.Mem.operation -> Reg.t array -> Reg.t array -> Reg.t array * Reg.t array
val report_error : Stdlib.Format.formatter -> Simd_selection.error -> unit
val vector_width_in_bits : int
val vectorize_operation : Vectorize_utils.Width_in_bits.t -> arg_count:int -> res_count:int -> alignment_in_bytes:int option -> Operation.t list -> Vectorize_utils.Vectorized_instruction.t list option