opcodes.h 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. /*
  2. * opcodes.h -- part of ZilUtils/ZilAsm
  3. *
  4. * Copyright (C) 2016 Jason Self <j@jxself.org>
  5. *
  6. * Based on ZILF (c) 2010, 2015 Jesse McGrew
  7. *
  8. * This program is free software: you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as
  10. * published by the Free Software Foundation, either version 3 of the
  11. * License, or (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program. If not, see <http://www.gnu.org/licenses/>
  20. *
  21. * SPDX-License-Identifier: GPL-3.0-or-later
  22. */
  23. #ifndef ZILASM_OPCODES
  24. #define ZILASM_OPCODES 1
  25. #include "symtable.h"
  26. typedef enum {
  27. Zop_none = 0,
  28. Zop_store = 1, // ..stores a result
  29. Zop_branch = 2, // ..branches to a label
  30. Zop_extra = 4, // ..takes an extra operand type byte, for a total of 8 possible operands
  31. Zop_varargs = 8, // ..is nominally 2OP but can take up to 4 operands
  32. Zop_string = 16, // ..has a string literal operand
  33. Zop_label = 32, // ..can take a local label operand
  34. Zop_indvar = 64, // ..first operand is an indirect variable number
  35. Zop_call = 128, // ..first operand is a packed routine address
  36. Zop_term = 256 // ..control flow does not pass to the following instruction
  37. } ZOpcode_flags;
  38. typedef struct {
  39. unsigned opcode;
  40. ZOpcode_flags flags;
  41. } ZOpcode;
  42. extern Symtable *Opcodes;
  43. void init_opcodes(int version, int inform_syntax);
  44. #endif /* ifndef ZILASM_OPCODES */