/* Definition of agent opcode values.   -*- c -*-
   Copyright (C) 1998, 1999, 2000, 2007, 2008, 2009, 2010, 2011
   Free Software Foundation, Inc.

   This file is part of GDB.

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program 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 a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */

/* The actual values of the various bytecode operations.

   Other independent implementations of the agent bytecode engine will
   rely on the exact values of these enums, and may not be recompiled
   when we change this table.  The numeric values should remain fixed
   whenever possible.  Thus, we assign them values explicitly here (to
   allow gaps to form safely), and the disassembly table in
   agentexpr.h behaves like an opcode map.  If you want to see them
   grouped logically, see doc/agentexpr.texi.

   Each line is of the form:
   
   DEFOP (name, size, data_size, consumed, produced, opcode)
   
   NAME is the name of the operation.
   SIZE is the number of argument bytes that the operation takes from
   the bytecode stream.
   DATA_SIZE is the size of data operated on, in bits, for operations
   that care (ref and const).  It is zero otherwise.
   CONSUMED is the number of stack elements consumed.
   PRODUCED is the number of stack elements produced.
   OPCODE is the operation's encoding.  */

DEFOP (float, 0, 0, 0, 0, 0x01)
DEFOP (add, 0, 0, 2, 1, 0x02)
DEFOP (sub, 0, 0, 2, 1, 0x03)
DEFOP (mul, 0, 0, 2, 1, 0x04)
DEFOP (div_signed, 0, 0, 2, 1, 0x05)
DEFOP (div_unsigned, 0, 0, 2, 1, 0x06)
DEFOP (rem_signed, 0, 0, 2, 1, 0x07)
DEFOP (rem_unsigned, 0, 0, 2, 1, 0x08)
DEFOP (lsh, 0, 0, 2, 1, 0x09)
DEFOP (rsh_signed, 0, 0, 2, 1, 0x0a)
DEFOP (rsh_unsigned, 0, 0, 2, 1, 0x0b)
DEFOP (trace, 0, 0, 2, 0, 0x0c)
DEFOP (trace_quick, 1, 0, 1, 1, 0x0d)
DEFOP (log_not, 0, 0, 1, 1, 0x0e)
DEFOP (bit_and, 0, 0, 2, 1, 0x0f)
DEFOP (bit_or, 0, 0, 2, 1, 0x10)
DEFOP (bit_xor, 0, 0, 2, 1, 0x11)
DEFOP (bit_not, 0, 0, 1, 1, 0x12)
DEFOP (equal, 0, 0, 2, 1, 0x13)
DEFOP (less_signed, 0, 0, 2, 1, 0x14)
DEFOP (less_unsigned, 0, 0, 2, 1, 0x15)
DEFOP (ext, 1, 0, 1, 1, 0x16)
DEFOP (ref8, 0, 8, 1, 1, 0x17)
DEFOP (ref16, 0, 16, 1, 1, 0x18)
DEFOP (ref32, 0, 32, 1, 1, 0x19)
DEFOP (ref64, 0, 64, 1, 1, 0x1a)
DEFOP (ref_float, 0, 0, 1, 1, 0x1b)
DEFOP (ref_double, 0, 0, 1, 1, 0x1c)
DEFOP (ref_long_double, 0, 0, 1, 1, 0x1d)
DEFOP (l_to_d, 0, 0, 1, 1, 0x1e)
DEFOP (d_to_l, 0, 0, 1, 1, 0x1f)
DEFOP (if_goto, 2, 0, 1, 0, 0x20)
DEFOP (goto, 2, 0, 0, 0, 0x21)
DEFOP (const8, 1, 8, 0, 1, 0x22)
DEFOP (const16, 2, 16, 0, 1, 0x23)
DEFOP (const32, 4, 32, 0, 1, 0x24)
DEFOP (const64, 8, 64, 0, 1, 0x25)
DEFOP (reg, 2, 0, 0, 1, 0x26)
DEFOP (end, 0, 0, 0, 0, 0x27)
DEFOP (dup, 0, 0, 1, 2, 0x28)
DEFOP (pop, 0, 0, 1, 0, 0x29)
DEFOP (zero_ext, 1, 0, 1, 1, 0x2a)
DEFOP (swap, 0, 0, 2, 2, 0x2b)
DEFOP (getv, 2, 0, 0, 1, 0x2c)
DEFOP (setv, 2, 0, 0, 1, 0x2d)
DEFOP (tracev, 2, 0, 0, 1, 0x2e)
/* We need something here just to make the tables come out ok.  */
DEFOP (invalid, 0, 0, 0, 0, 0x2f)
DEFOP (trace16, 2, 0, 1, 1, 0x30)
/* We need something here just to make the tables come out ok.  */
DEFOP (invalid2, 0, 0, 0, 0, 0x2f)
/* The "consumed" number for pick is wrong, but there's no way to
   express the right thing.  */
DEFOP (pick, 1, 0, 0, 1, 0x32)
DEFOP (rot, 0, 0, 3, 3, 0x33)
