/* Definition of agent opcode values.   -*- c -*-
   Copyright (C) 1998-2000, 2007-2012 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)
DEFOP (tracenz, 0, 0, 2, 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, 0x31)
/* 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)
/* Both the argument and consumed numbers are dynamic for this one.  */
DEFOP (printf, 0, 0, 0, 0, 0x34)
