/*
 * Copyright (C) 2010 Intel Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 */

enum ir_expression_operation {
   ir_unop_bit_not,
   ir_unop_logic_not,
   ir_unop_neg,
   ir_unop_abs,
   ir_unop_sign,
   ir_unop_rcp,
   ir_unop_rsq,
   ir_unop_sqrt,
   ir_unop_exp,
   ir_unop_log,
   ir_unop_exp2,
   ir_unop_log2,
   ir_unop_f2i,
   ir_unop_f2u,
   ir_unop_i2f,
   ir_unop_f2b,
   ir_unop_b2f,
   ir_unop_b2f16,
   ir_unop_i2b,
   ir_unop_b2i,
   ir_unop_u2f,
   ir_unop_i2u,
   ir_unop_u2i,
   ir_unop_d2f,
   ir_unop_f2d,
   ir_unop_f2f16,
   ir_unop_f2fmp,
   ir_unop_f162f,
   ir_unop_i2i,
   ir_unop_i2imp,
   ir_unop_u2u,
   ir_unop_u2ump,
   ir_unop_d2i,
   ir_unop_i2d,
   ir_unop_d2u,
   ir_unop_u2d,
   ir_unop_d2b,
   ir_unop_f162b,
   ir_unop_bitcast_i2f,
   ir_unop_bitcast_f2i,
   ir_unop_bitcast_u2f,
   ir_unop_bitcast_f2u,
   ir_unop_bitcast_u642d,
   ir_unop_bitcast_i642d,
   ir_unop_bitcast_d2u64,
   ir_unop_bitcast_d2i64,
   ir_unop_i642i,
   ir_unop_u642i,
   ir_unop_i642u,
   ir_unop_u642u,
   ir_unop_i642b,
   ir_unop_i642f,
   ir_unop_u642f,
   ir_unop_i642d,
   ir_unop_u642d,
   ir_unop_i2i64,
   ir_unop_u2i64,
   ir_unop_b2i64,
   ir_unop_f2i64,
   ir_unop_d2i64,
   ir_unop_i2u64,
   ir_unop_u2u64,
   ir_unop_f2u64,
   ir_unop_d2u64,
   ir_unop_u642i64,
   ir_unop_i642u64,
   ir_unop_trunc,
   ir_unop_ceil,
   ir_unop_floor,
   ir_unop_fract,
   ir_unop_round_even,
   ir_unop_sin,
   ir_unop_cos,
   ir_unop_atan,
   ir_unop_dFdx,
   ir_unop_dFdx_coarse,
   ir_unop_dFdx_fine,
   ir_unop_dFdy,
   ir_unop_dFdy_coarse,
   ir_unop_dFdy_fine,
   ir_unop_pack_snorm_2x16,
   ir_unop_pack_snorm_4x8,
   ir_unop_pack_unorm_2x16,
   ir_unop_pack_unorm_4x8,
   ir_unop_pack_half_2x16,
   ir_unop_unpack_snorm_2x16,
   ir_unop_unpack_snorm_4x8,
   ir_unop_unpack_unorm_2x16,
   ir_unop_unpack_unorm_4x8,
   ir_unop_unpack_half_2x16,
   ir_unop_bitfield_reverse,
   ir_unop_bit_count,
   ir_unop_find_msb,
   ir_unop_find_lsb,
   ir_unop_clz,
   ir_unop_saturate,
   ir_unop_pack_double_2x32,
   ir_unop_unpack_double_2x32,
   ir_unop_pack_sampler_2x32,
   ir_unop_pack_image_2x32,
   ir_unop_unpack_sampler_2x32,
   ir_unop_unpack_image_2x32,
   ir_unop_frexp_sig,
   ir_unop_frexp_exp,
   ir_unop_subroutine_to_int,
   ir_unop_interpolate_at_centroid,
   ir_unop_get_buffer_size,
   ir_unop_ssbo_unsized_array_length,
   ir_unop_pack_int_2x32,
   ir_unop_pack_uint_2x32,
   ir_unop_unpack_int_2x32,
   ir_unop_unpack_uint_2x32,
   ir_binop_add,
   ir_binop_sub,
   ir_binop_add_sat,
   ir_binop_sub_sat,
   ir_binop_abs_sub,
   ir_binop_avg,
   ir_binop_avg_round,
   ir_binop_mul,
   ir_binop_mul_32x16,
   ir_binop_imul_high,
   ir_binop_div,
   ir_binop_carry,
   ir_binop_borrow,
   ir_binop_mod,
   ir_binop_less,
   ir_binop_gequal,
   ir_binop_equal,
   ir_binop_nequal,
   ir_binop_all_equal,
   ir_binop_any_nequal,
   ir_binop_lshift,
   ir_binop_rshift,
   ir_binop_bit_and,
   ir_binop_bit_xor,
   ir_binop_bit_or,
   ir_binop_logic_and,
   ir_binop_logic_xor,
   ir_binop_logic_or,
   ir_binop_dot,
   ir_binop_min,
   ir_binop_max,
   ir_binop_pow,
   ir_binop_ubo_load,
   ir_binop_ldexp,
   ir_binop_vector_extract,
   ir_binop_interpolate_at_offset,
   ir_binop_interpolate_at_sample,
   ir_binop_atan2,
   ir_triop_fma,
   ir_triop_lrp,
   ir_triop_csel,
   ir_triop_bitfield_extract,
   ir_triop_vector_insert,
   ir_quadop_bitfield_insert,
   ir_quadop_vector,

   /* Sentinels marking the last of each kind of operation. */
   ir_last_unop = ir_unop_unpack_uint_2x32,
   ir_last_binop = ir_binop_atan2,
   ir_last_triop = ir_triop_vector_insert,
   ir_last_quadop = ir_quadop_vector,
   ir_last_opcode = ir_quadop_vector
};
