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