# specification of operators for MidIL version of the IR. Each line (other than comments) # specifies an operator using four fields, which are separated by ":". The fields are # name # argument type (optional) # arity # comment (optional) # # type-indexed arithmetic operations Add : ty : 2 : Sub : ty : 2 : Mul : ty : 2 : Div : ty : 2 : Neg : ty : 1 : LT : ty : 2 : LTE : ty : 2 : EQ : ty : 2 : NEQ : ty : 2 : GT : ty : 2 : GTE : ty : 2 : Dot : ty : 2 : Cross : : 2 : # # vector operations Select : int : 1 : Norm : ty : 1 : Scale : ty : 2 : scalar*tensor multiplication InvScale : ty : 2 : tensor/scalar division CL : : 1 : linear anisotropy measures PrincipleEvec : ty : 2 : principle eigenvector; ty is result vector type Subscript : ty : 2 : Max : : 2 : Min : : 2 : Sin : : 1 : Cos : : 1 : Pow : : 2 : Not : : 1 : boolean negation # # conversions IntToReal : : 1 : TruncToInt : : 1 : RoundToInt : : 1 : CeilToInt : : 1 : FloorToInt : : 1 : # # image/kernel operations VoxelAddress : ImageInfo.info : * : compute the address of a voxel LoadVoxels : RawTypes.ty * int : 1 : load a vector of voxel values from an address Transform : ImageInfo.info : 1 : transform to image-space Kernel : Kernel.kernel : 0 : DiffKernel : int : 1 : derivative of kernel EvalKernel : : 2 : apply a kernel function to a scalar LoadImage : ImageInfo.info : 0 : image-file loading Inside : : 2 : # # inputs Input : string : 0 : InputWithDefault : string : 1 :