/* Definition of agent opcode values.   -*- c -*-
   Copyright (C) 1998-2021 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, 1, 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)
