Module Ast.Operand
module Bitmask : sig ... endmodule Shift : sig ... endmodule Lsl_by_multiple_of_16_bits : sig ... endLSL shift positions for MOVK/MOVN/MOVZ instructions. These position a 16-bit immediate within the register. Architecturally constrained to {0,16,32,48} for X-form and {0,16} for W-form. The GADT encodes this: S32 and S48 are only valid for X.
module Shift_by_element_width : sig ... endShift amount for vector shift instructions (SHL, SSHR, USHR). The valid range depends on element width:
type _ t = private | Imm : 'w Immediate.t -> [ `Imm of 'w ] t| Reg : 'a Reg.t -> [ `Reg of 'a ] t| Lsl_by_twelve : [ `Fixed_shift of [ `Lsl_by_twelve ] ] t| Shift : ('op, 'amount) Shift.t -> [ `Shift of 'op * 'amount ] t| Lsl_by_multiple_of_16_bits : 'w Lsl_by_multiple_of_16_bits.t -> [ `Lsl_by_multiple_of_16_bits of 'w ] t| Shift_by_element_width : 'w Shift_by_element_width.t -> [ `Shift_by_element_width of 'w ] t| Cond : Cond.t -> [ `Cond ] t| Float_cond : Float_cond.t -> [ `Float_cond ] t| Mem : 'm Addressing_mode.t -> [ `Mem of 'm ] t| Bitmask : Bitmask.t -> [ `Bitmask ] t| Optional : 'a t option -> [ `Optional of 'a option ] t| Unit : unit t
Convenience type aliases for common operand patterns
type 'w gp = [ `Reg of [ `GP of 'w ] ] tGP register operand
type 's neon_scalar = [ `Reg of [ `Neon of [ `Scalar of 's ] ] ] tNeon scalar register operand
type ('arr, 'w) neon_vector =
[ `Reg of [ `Neon of [ `Vector of 'arr * 'w ] ] ] tNeon vector register operand with arrangement and element width