1 /* insns.h header file for insns.c
3 * The Netwide Assembler is copyright (C) 1996 Simon Tatham and
4 * Julian Hall. All rights reserved. The software is
5 * redistributable under the license given in the file "LICENSE"
6 * distributed in the NASM archive.
16 /* if changed, ITEMPLATE_END should be also changed accordingly */
18 enum opcode opcode
; /* the token, passed from "parser.c" */
19 int operands
; /* number of operands */
20 opflags_t opd
[MAX_OPERANDS
]; /* bit flags for operand types */
21 decoflags_t deco
[MAX_OPERANDS
]; /* bit flags for operand decorators */
22 const uint8_t *code
; /* the code it assembles to */
23 uint32_t iflag_idx
; /* some flags referenced by index */
26 /* Use this helper to test instruction template flags */
27 static inline bool itemp_has(const struct itemplate
*itemp
, unsigned int bit
)
29 return iflag_test(&insns_flags
[itemp
->iflag_idx
], bit
);
32 /* Disassembler table structure */
35 * If n == -1, then p points to another table of 256
36 * struct disasm_index, otherwise p points to a list of n
37 * struct itemplates to consider.
44 /* Tables for the assembler and disassembler, respectively */
45 extern const struct itemplate
* const nasm_instructions
[];
46 extern const struct disasm_index itable
[256];
47 extern const struct disasm_index
* const itable_vex
[NASM_VEX_CLASSES
][32][4];
49 /* Common table for the byte codes */
50 extern const uint8_t nasm_bytecodes
[];
53 * this define is used to signify the end of an itemplate
55 #define ITEMPLATE_END {I_none,0,{0,},{0,},NULL,0}
60 /* DB-type instruction (DB, DW, ...) */
61 static inline bool const_func
opcode_is_db(enum opcode opcode
)
63 return opcode
>= I_DB
&& opcode
< I_RESB
;
66 /* RESB-type instruction (RESB, RESW, ...) */
67 static inline bool const_func
opcode_is_resb(enum opcode opcode
)
69 return opcode
>= I_RESB
&& opcode
< I_INCBIN
;
72 /* Width of Dx and RESx instructions */
75 * initialized data bytes length from opcode
77 static inline int const_func
db_bytes(enum opcode opcode
)
104 * Uninitialized data bytes length from opcode
106 static inline int const_func
resb_bytes(enum opcode opcode
)
132 #endif /* NASM_INSNS_H */