Ocaml_simd_avx.Float64x4val box : t -> float64x4 @@ portableval unbox : float64x4 @ local -> t @@ portableval zero : unit -> t @@ portableEquivalent to const1 #0.0.
val one : unit -> t @@ portableEquivalent to const1 #1.0.
val set1 : float -> t @@ portable_mm256_set1_pd
val set : float -> float -> float -> float -> t @@ portable_mm256_set_pd
val set_lanes : float64x2 -> float64x2 -> t @@ portable_mm256_set_m128 Operates on two float64x2 lanes.
val const1 : float -> t @@ portableArgument must be a literal or an unboxing function applied to a literal. Compiles to a static vector literal. Exposed as an external so user code can compile without cross-library inlining.
val const : float -> float -> float -> float -> t @@ portableArguments must be literals or unboxing functions applied to literals. Compiles to a static vector literal. Exposed as an external so user code can compile without cross-library inlining.
module Raw : sig ... endmodule String : sig ... endmodule Bytes : sig ... endmodule Bigstring : sig ... endmodule Float_array : sig ... endmodule Float_iarray : sig ... endmodule Floatarray : sig ... endmodule Float_u_array : sig ... endval movemask : mask -> int64 @@ portable_mm256_movemask_pd
val bitmask : mask -> int64x4 @@ portableIdentity.
_mm256_blendv_pd Only reads the sign bit of each mask lane. Selects the element from pass if the sign bit is 1, otherwise fail.
val extract : idx:int64 -> t -> float @@ portableidx must be in 0,3.
val extract0 : t -> float @@ portableProjection. Has no runtime cost.
idx must be a literal in 0,1. Operates on two float64x2 lanes. Exposed as an external so user code can compile without cross-library inlining.
val extract_lane : idx:int64 -> t -> float64x2 @@ portableidx must be a literal in 0,1. Operates on two float64x2 lanes. Exposed as an external so user code can compile without cross-library inlining.
val extract_lane0 : t -> float64x2 @@ portableProjection. Has no runtime cost. Operates on two float64x2 lanes.
val splat : t -> #(float * float * float * float) @@ portableSlow, intended for debugging / printing / etc.
_mm256_unpackhi_pd Operates on two float64x2 lanes.
interleave_upper_lanes ~even ~odd = (even.(1), odd.(1), even.(3), odd.(3))_mm256_unpacklo_pd Operates on two float64x2 lanes.
interleave_lower_lanes ~even ~odd = (even.(0), odd.(0), even.(2), odd.(2))_mm256_movedup_pd
duplicate_even x = (x.(0), x.(0), x.(2), x.(2))val blend : Ocaml_simd.Blend4.t -> t -> t -> t @@ portable_mm256_blend_pd Specify blend with ppx_simd: %blend N, N, N, N, where each N is in 0,1. Exposed as an external so user code can compile without cross-library inlining.
blend [%blend 1, 0, 1, 0] x y = (y.(0), x.(1), y.(2), x.(3))val shuffle_lanes : Ocaml_simd.Shuffle2x2.t -> t -> t -> t @@ portable_mm256_shuffle_pd Specify shuffle with ppx_simd: %shuffle (N, N), (N, N), where each N is in 0,1. Operates on two float64x2 lanes. Exposed as an external so user code can compile without cross-library inlining.
shuffle_lanes [%shuffle (1, 0), (0, 1)] x y = (x.(1), y.(0), x.(2), y.(3))val permute : Ocaml_simd.Permute4.t -> t -> t @@ portable_mm256_permute4x64_pd Specify permute with ppx_simd: %permute N, N, N, N, where each N is in 0,3. Exposed as an external so user code can compile without cross-library inlining.
permute [%permute 3, 1, 0, 2] x = (x.(3), x.(1), x.(0), x.(2))val permute_lanes : Ocaml_simd.Permute2x2.t -> t -> t @@ portable_mm256_permute_pd Specify permute with ppx_simd: %permute (N, N), (N, N), where each N is in 0,1. Exposed as an external so user code can compile without cross-library inlining.
permute_lanes [%permute (1, 0), (0, 1)] x = (x.(1), x.(0), x.(2), x.(3))_mm256_permutevar_pd Operates on two float64x2 lanes. Each lane of idx is interpreted as an integer in 0,1 by taking its *second* lowest bit.
permute_lanes_by x ~idx:(2, 0, 0, 2) = (x.(1), x.(0), x.(2), x.(3))_mm256_min_pd Equivalent to pointwise (x < y ? x : y). If either lane is NaN, the second lane is returned.
_mm256_max_pd Equivalent to pointwise (x > y ? x : y). If either lane is NaN, the second lane is returned.
_mm256_addsub_pd
add_sub x y = (x.(0) - y.(0), x.(1) + y.(1), x.(2) - y.(2), x.(3) + y.(3))_mm256_hadd_pd Operates on two float64x2 lanes.
horizontal_add_lanes x y
= (x.(1) + x.(0), x.(3) + x.(2), y.(1) + y.(0), y.(3) + y.(2))_mm256_hsub_pd Operates on two float64x2 lanes.
horizontal_sub_lanes x y
= (x.(0) - x.(1), x.(2) - x.(3), y.(0) - y.(1), y.(2) - y.(3))_mm256_fmadd_pd. Computes x * y + z without intermediate rounding.
_mm256_fmsub_pd. Computes x * y - z without intermediate rounding.
_mm256_fnmadd_pd. Computes -(x * y) + z without intermediate rounding.
_mm256_fnmsub_pd. Computes -(x * y) - z without intermediate rounding.
_mm256_fmaddsub_ps. Computes the following expression without intermediate rounding.
mul_add_sub x y z
= ( (x.(0) * y.(0)) - z.(0)
, (x.(1) * y.(1)) + z.(1)
, (x.(2) * y.(2)) - z.(2)
, (x.(3) * y.(3)) + z.(3) )_mm256_fmsubadd_ps. Computes the following expression without intermediate rounding.
mul_add_sub x y z
= ( (x.(0) * y.(0)) + z.(0)
, (x.(1) * y.(1)) - z.(1)
, (x.(2) * y.(2)) + z.(2)
, (x.(3) * y.(3)) - z.(3) )val iround_current : t -> int32x4 @@ portable_mm256_cvtpd_epi32
val unsafe_of_float : float -> t @@ portableIdentity; leaves upper 192 bits unspecified.
val unsafe_of_float64x2 : float64x2 -> t @@ portableIdentity; leaves upper 128 bits unspecified.
val of_float16x16_bits : float16x16 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_float32x8_bits : float32x8 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_int8x32_bits : int8x32 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_int16x16_bits : int16x16 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_int32x8_bits : int32x8 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_int64x4_bits : int64x4 -> t @@ portableIdentity in the bit representation. Different numeric interpretation.
val of_float32x4 : float32x4 -> t @@ portable_mm256_cvtps_pd. Performs numeric conversion from float32# to float64#
val of_int32x4 : int32x4 -> t @@ portable_mm256_cvtepi32_pd. Performs numeric conversion from int32# to float64#
val to_string : t -> string @@ portableCompiles to splat, sprintf.
val of_string : string -> t @@ portableCompiles to sscanf, set. Expects a string in the output format of to_string.