| (* Types *) |
| |
| type t |
| type bits = string |
| |
| type ('i8x16, 'i16x8, 'i32x4, 'i64x2, 'f32x4, 'f64x2) laneop = |
| | I8x16 of 'i8x16 | I16x8 of 'i16x8 | I32x4 of 'i32x4 | I64x2 of 'i64x2 |
| | F32x4 of 'f32x4 | F64x2 of 'f64x2 |
| |
| type shape = (unit, unit, unit, unit, unit, unit) laneop |
| |
| |
| (* Basics *) |
| |
| val bitwidth : int |
| |
| val num_lanes : ('a, 'b, 'c, 'd, 'e, 'f) laneop -> int |
| val type_of_lane : ('a, 'b, 'c, 'd, 'e, 'f) laneop -> Types.numtype |
| val string_of_shape : ('a, 'b, 'c, 'd, 'e, 'f) laneop -> string |
| |
| val zero : t |
| val of_bits : bits -> t |
| val to_bits : t -> bits |
| |
| |
| (* String conversion *) |
| |
| val to_string : t -> string |
| val to_hex_string : t -> string |
| val of_strings : shape -> string list -> t |
| |
| |
| (* Shape-based operations *) |
| |
| module type IntShape = |
| sig |
| type lane |
| |
| val num_lanes : int |
| val to_lanes : t -> lane list |
| val of_lanes : lane list -> t |
| |
| val splat : lane -> t |
| val extract_lane : int -> t -> lane |
| val replace_lane : int -> t -> lane -> t |
| |
| val eq : t -> t -> t |
| val ne : t -> t -> t |
| val lt_s : t -> t -> t |
| val lt_u : t -> t -> t |
| val le_s : t -> t -> t |
| val le_u : t -> t -> t |
| val gt_s : t -> t -> t |
| val gt_u : t -> t -> t |
| val ge_s : t -> t -> t |
| val ge_u : t -> t -> t |
| val abs : t -> t |
| val neg : t -> t |
| val popcnt : t -> t |
| val add : t -> t -> t |
| val sub : t -> t -> t |
| val min_s : t -> t -> t |
| val min_u : t -> t -> t |
| val max_s : t -> t -> t |
| val max_u : t -> t -> t |
| val mul : t -> t -> t |
| val avgr_u : t -> t -> t |
| val any_true : t -> bool |
| val all_true : t -> bool |
| val bitmask : t -> Int32.t |
| val shl : t -> I32.t -> t |
| val shr_s : t -> I32.t -> t |
| val shr_u : t -> I32.t -> t |
| val add_sat_s : t -> t -> t |
| val add_sat_u : t -> t -> t |
| val sub_sat_s : t -> t -> t |
| val sub_sat_u : t -> t -> t |
| val q15mulr_sat_s : t -> t -> t |
| end |
| |
| module type FloatShape = |
| sig |
| type lane |
| |
| val num_lanes : int |
| val to_lanes : t -> lane list |
| val of_lanes : lane list -> t |
| |
| val splat : lane -> t |
| val extract_lane : int -> t -> lane |
| val replace_lane : int -> t -> lane -> t |
| |
| val eq : t -> t -> t |
| val ne : t -> t -> t |
| val lt : t -> t -> t |
| val le : t -> t -> t |
| val gt : t -> t -> t |
| val ge : t -> t -> t |
| val abs : t -> t |
| val neg : t -> t |
| val sqrt : t -> t |
| val ceil : t -> t |
| val floor : t -> t |
| val trunc : t -> t |
| val nearest : t -> t |
| val add : t -> t -> t |
| val sub : t -> t -> t |
| val mul : t -> t -> t |
| val div : t -> t -> t |
| val fma : t -> t -> t -> t |
| val fnma : t -> t -> t -> t |
| val min : t -> t -> t |
| val max : t -> t -> t |
| val pmin : t -> t -> t |
| val pmax : t -> t -> t |
| end |
| |
| module I8x16 : IntShape with type lane = I8.t |
| module I16x8 : IntShape with type lane = I16.t |
| module I32x4 : IntShape with type lane = I32.t |
| module I64x2 : IntShape with type lane = I64.t |
| module F32x4 : FloatShape with type lane = F32.t |
| module F64x2 : FloatShape with type lane = F64.t |
| |
| |
| (* Special shapes *) |
| |
| module V1x128 : |
| sig |
| val not_ : t -> t |
| val and_ : t -> t -> t |
| val or_ : t -> t -> t |
| val xor : t -> t -> t |
| val andnot : t -> t -> t |
| val bitselect : t -> t -> t -> t |
| end |
| |
| module V8x16 : |
| sig |
| val swizzle : t -> t -> t |
| val shuffle : int list -> t -> t -> t |
| end |
| |
| |
| (* Conversions *) |
| |
| module I8x16_convert : |
| sig |
| val narrow_s : t -> t -> t |
| val narrow_u : t -> t -> t |
| end |
| |
| module I16x8_convert : |
| sig |
| val narrow_s : t -> t -> t |
| val narrow_u : t -> t -> t |
| val extend_low_s : t -> t |
| val extend_high_s : t -> t |
| val extend_low_u : t -> t |
| val extend_high_u : t -> t |
| val extmul_low_s : t -> t -> t |
| val extmul_high_s : t -> t -> t |
| val extmul_low_u : t -> t -> t |
| val extmul_high_u : t -> t -> t |
| val extadd_pairwise_s : t -> t |
| val extadd_pairwise_u : t -> t |
| val dot_s : t -> t -> t |
| end |
| |
| module I32x4_convert : |
| sig |
| val trunc_sat_f32x4_s : t -> t |
| val trunc_sat_f32x4_u : t -> t |
| val trunc_sat_f64x2_s_zero : t -> t |
| val trunc_sat_f64x2_u_zero : t -> t |
| val extend_low_s : t -> t |
| val extend_high_s : t -> t |
| val extend_low_u : t -> t |
| val extend_high_u : t -> t |
| val dot_s : t -> t -> t |
| val dot_add_s : t -> t -> t -> t |
| val extmul_low_s : t -> t -> t |
| val extmul_high_s : t -> t -> t |
| val extmul_low_u : t -> t -> t |
| val extmul_high_u : t -> t -> t |
| val extadd_pairwise_s : t -> t |
| val extadd_pairwise_u : t -> t |
| end |
| |
| module I64x2_convert : |
| sig |
| val extend_low_s : t -> t |
| val extend_high_s : t -> t |
| val extend_low_u : t -> t |
| val extend_high_u : t -> t |
| val extmul_low_s : t -> t -> t |
| val extmul_high_s : t -> t -> t |
| val extmul_low_u : t -> t -> t |
| val extmul_high_u : t -> t -> t |
| end |
| |
| module F32x4_convert : |
| sig |
| val convert_i32x4_s : t -> t |
| val convert_i32x4_u : t -> t |
| val demote_f64x2_zero : t -> t |
| end |
| |
| module F64x2_convert : |
| sig |
| val promote_low_f32x4 : t -> t |
| val convert_i32x4_s : t -> t |
| val convert_i32x4_u : t -> t |
| end |