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