2011-02-18 21:12:07 +00:00
|
|
|
/* 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)
|
2011-02-24 07:39:48 +00:00
|
|
|
/* We need something here just to make the tables come out ok. */
|
2011-02-18 21:12:07 +00:00
|
|
|
DEFOP (invalid, 0, 0, 0, 0, 0x2f)
|
|
|
|
DEFOP (trace16, 2, 0, 1, 1, 0x30)
|
2011-02-24 07:39:48 +00:00
|
|
|
/* We need something here just to make the tables come out ok. */
|
2011-02-25 14:21:05 +00:00
|
|
|
DEFOP (invalid2, 0, 0, 0, 0, 0x31)
|
2011-02-24 07:39:48 +00:00
|
|
|
/* The "consumed" number for pick is wrong, but there's no way to
|
|
|
|
express the right thing. */
|
2011-02-18 21:12:07 +00:00
|
|
|
DEFOP (pick, 1, 0, 0, 1, 0x32)
|
|
|
|
DEFOP (rot, 0, 0, 3, 3, 0x33)
|