/* dwarf-opcodes
   Copyright (C) 2009-2011 Red Hat, Inc.
   This file is part of elfutils.

   This file is free software; you can redistribute it and/or modify
   it under the terms of either

     * the GNU Lesser General Public License as published by the Free
       Software Foundation; either version 3 of the License, or (at
       your option) any later version

   or

     * the GNU General Public License as published by the Free
       Software Foundation; either version 2 of the License, or (at
       your option) any later version

   or both in parallel, as here.

   elfutils is distributed in the hope that it will be useful, but
   WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   General Public License for more details.

   You should have received copies of the GNU General Public License and
   the GNU Lesser General Public License along with this program.  If
   not, see <http://www.gnu.org/licenses/>.  */

#define DW_OP_OPERANDS						\
  DW_OP_1 (DW_OP_addr, DW_FORM_addr)				\
  DW_OP_0 (DW_OP_deref)						\
  DW_OP_0 (DW_OP_xderef)					\
  DW_OP_1 (DW_OP_deref_size, DW_FORM_data1)			\
  DW_OP_1 (DW_OP_xderef_size, DW_FORM_data1)			\
  DW_OP_1 (DW_OP_const1u, DW_FORM_data1)			\
  DW_OP_1 (DW_OP_const1s, DW_FORM_data1)			\
  DW_OP_1 (DW_OP_const2u, DW_FORM_data2)			\
  DW_OP_1 (DW_OP_const2s, DW_FORM_data2)			\
  DW_OP_1 (DW_OP_const4u, DW_FORM_data4)			\
  DW_OP_1 (DW_OP_const4s, DW_FORM_data4)			\
  DW_OP_1 (DW_OP_const8u, DW_FORM_data8)			\
  DW_OP_1 (DW_OP_const8s, DW_FORM_data8)			\
  DW_OP_1 (DW_OP_constu, DW_FORM_udata)				\
  DW_OP_1 (DW_OP_consts, DW_FORM_sdata)				\
  DW_OP_0 (DW_OP_dup)						\
  DW_OP_0 (DW_OP_drop)						\
  DW_OP_0 (DW_OP_over)						\
  DW_OP_1 (DW_OP_pick, DW_FORM_data1)				\
  DW_OP_0 (DW_OP_swap)						\
  DW_OP_0 (DW_OP_rot)						\
  DW_OP_0 (DW_OP_abs)						\
  DW_OP_0 (DW_OP_and)						\
  DW_OP_0 (DW_OP_div)						\
  DW_OP_0 (DW_OP_minus)						\
  DW_OP_0 (DW_OP_mod)						\
  DW_OP_0 (DW_OP_mul)						\
  DW_OP_0 (DW_OP_neg)						\
  DW_OP_0 (DW_OP_not)						\
  DW_OP_0 (DW_OP_or)						\
  DW_OP_0 (DW_OP_plus)						\
  DW_OP_1 (DW_OP_plus_uconst, DW_FORM_udata)			\
  DW_OP_0 (DW_OP_shl)						\
  DW_OP_0 (DW_OP_shr)						\
  DW_OP_0 (DW_OP_shra)						\
  DW_OP_0 (DW_OP_xor)						\
  DW_OP_1 (DW_OP_bra, DW_FORM_data2)				\
  DW_OP_0 (DW_OP_eq)						\
  DW_OP_0 (DW_OP_ge)						\
  DW_OP_0 (DW_OP_gt)						\
  DW_OP_0 (DW_OP_le)						\
  DW_OP_0 (DW_OP_lt)						\
  DW_OP_0 (DW_OP_ne)						\
  DW_OP_1 (DW_OP_skip, DW_FORM_data2)				\
  DW_OP_0 (DW_OP_lit0)						\
  DW_OP_0 (DW_OP_lit1)						\
  DW_OP_0 (DW_OP_lit2)						\
  DW_OP_0 (DW_OP_lit3)						\
  DW_OP_0 (DW_OP_lit4)						\
  DW_OP_0 (DW_OP_lit5)						\
  DW_OP_0 (DW_OP_lit6)						\
  DW_OP_0 (DW_OP_lit7)						\
  DW_OP_0 (DW_OP_lit8)						\
  DW_OP_0 (DW_OP_lit9)						\
  DW_OP_0 (DW_OP_lit10)						\
  DW_OP_0 (DW_OP_lit11)						\
  DW_OP_0 (DW_OP_lit12)						\
  DW_OP_0 (DW_OP_lit13)						\
  DW_OP_0 (DW_OP_lit14)						\
  DW_OP_0 (DW_OP_lit15)						\
  DW_OP_0 (DW_OP_lit16)						\
  DW_OP_0 (DW_OP_lit17)						\
  DW_OP_0 (DW_OP_lit18)						\
  DW_OP_0 (DW_OP_lit19)						\
  DW_OP_0 (DW_OP_lit20)						\
  DW_OP_0 (DW_OP_lit21)						\
  DW_OP_0 (DW_OP_lit22)						\
  DW_OP_0 (DW_OP_lit23)						\
  DW_OP_0 (DW_OP_lit24)						\
  DW_OP_0 (DW_OP_lit25)						\
  DW_OP_0 (DW_OP_lit26)						\
  DW_OP_0 (DW_OP_lit27)						\
  DW_OP_0 (DW_OP_lit28)						\
  DW_OP_0 (DW_OP_lit29)						\
  DW_OP_0 (DW_OP_lit30)						\
  DW_OP_0 (DW_OP_lit31)						\
  DW_OP_0 (DW_OP_reg0)						\
  DW_OP_0 (DW_OP_reg1)						\
  DW_OP_0 (DW_OP_reg2)						\
  DW_OP_0 (DW_OP_reg3)						\
  DW_OP_0 (DW_OP_reg4)						\
  DW_OP_0 (DW_OP_reg5)						\
  DW_OP_0 (DW_OP_reg6)						\
  DW_OP_0 (DW_OP_reg7)						\
  DW_OP_0 (DW_OP_reg8)						\
  DW_OP_0 (DW_OP_reg9)						\
  DW_OP_0 (DW_OP_reg10)						\
  DW_OP_0 (DW_OP_reg11)						\
  DW_OP_0 (DW_OP_reg12)						\
  DW_OP_0 (DW_OP_reg13)						\
  DW_OP_0 (DW_OP_reg14)						\
  DW_OP_0 (DW_OP_reg15)						\
  DW_OP_0 (DW_OP_reg16)						\
  DW_OP_0 (DW_OP_reg17)						\
  DW_OP_0 (DW_OP_reg18)						\
  DW_OP_0 (DW_OP_reg19)						\
  DW_OP_0 (DW_OP_reg20)						\
  DW_OP_0 (DW_OP_reg21)						\
  DW_OP_0 (DW_OP_reg22)						\
  DW_OP_0 (DW_OP_reg23)						\
  DW_OP_0 (DW_OP_reg24)						\
  DW_OP_0 (DW_OP_reg25)						\
  DW_OP_0 (DW_OP_reg26)						\
  DW_OP_0 (DW_OP_reg27)						\
  DW_OP_0 (DW_OP_reg28)						\
  DW_OP_0 (DW_OP_reg29)						\
  DW_OP_0 (DW_OP_reg30)						\
  DW_OP_0 (DW_OP_reg31)						\
  DW_OP_1 (DW_OP_breg0, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg1, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg2, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg3, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg4, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg5, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg6, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg7, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg8, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg9, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg10, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg11, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg12, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg13, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg14, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg15, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg16, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg17, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg18, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg19, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg20, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg21, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg22, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg23, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg24, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg25, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg26, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg27, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg28, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg29, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg30, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_breg31, DW_FORM_sdata)				\
  DW_OP_1 (DW_OP_regx, DW_FORM_udata)				\
  DW_OP_1 (DW_OP_fbreg, DW_FORM_sdata)				\
  DW_OP_2 (DW_OP_bregx, DW_FORM_udata, DW_FORM_sdata)		\
  DW_OP_1 (DW_OP_piece, DW_FORM_udata)				\
  DW_OP_0 (DW_OP_nop)						\
  DW_OP_0 (DW_OP_push_object_address)				\
  DW_OP_1 (DW_OP_call2, DW_FORM_data2)				\
  DW_OP_1 (DW_OP_call4, DW_FORM_data4)				\
  DW_OP_1 (DW_OP_call_ref, DW_FORM_ref_addr)			\
  DW_OP_0 (DW_OP_form_tls_address)				\
  DW_OP_0 (DW_OP_GNU_push_tls_address)				\
  DW_OP_0 (DW_OP_call_frame_cfa)				\
  DW_OP_2 (DW_OP_bit_piece, DW_FORM_udata, DW_FORM_udata)	\
  DW_OP_0 (DW_OP_GNU_uninit)					\
  /* DWARF 4 */							\
  DW_OP_0 (DW_OP_stack_value)					\
  DW_OP_1 (DW_OP_implicit_value, DW_FORM_block)			\
  /* GNU extensions */						\
  DW_OP_2 (DW_OP_GNU_implicit_pointer, DW_FORM_ref_addr, DW_FORM_sdata) \
  /* GNU variant for tracking of values passed as arguments to functions.  */ \
  /* http://www.dwarfstd.org/ShowIssue.php?issue=100909.1 */	\
  DW_OP_1 (DW_OP_GNU_entry_value, DW_FORM_block)		\
  /* The GNU typed stack extension.  */				\
  /* See http://www.dwarfstd.org/doc/040408.1.html */		\
  DW_OP_2 (DW_OP_GNU_const_type, DW_FORM_udata, DW_FORM_block1)	\
  DW_OP_2 (DW_OP_GNU_regval_type, DW_FORM_udata, DW_FORM_udata)	\
  DW_OP_2 (DW_OP_GNU_deref_type, DW_FORM_data1, DW_FORM_udata)	\
  DW_OP_1 (DW_OP_GNU_convert, DW_FORM_udata)			\
  DW_OP_1 (DW_OP_GNU_reinterpret, DW_FORM_udata)
