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