/* SPDX-License-Identifier: BSD-2-Clause */ /* Copyright 1996-2025 The NASM Authors - All Rights Reserved */ /* * assemble.h - header file for stuff private to the assembler */ #ifndef NASM_ASSEMBLE_H #define NASM_ASSEMBLE_H #include "nasm.h" #include "iflag.h" #include "asmutil.h" extern iflag_t cpu, cmd_cpu; void set_cpu(const char *cpuspec); extern bool in_absolute; /* Are we in an absolute segment? */ extern struct location absolute; int64_t increment_offset(int64_t delta); void process_insn(insn *instruction); bool directive_valid(const char *); bool process_directives(char *); void process_pragma(char *); /* Is this a compile-time absolute constant? */ static inline bool op_compile_abs(const struct operand * const op) { if (op->opflags & OPFLAG_UNKNOWN) return true; /* Be optimistic in pass 1 */ if (op->opflags & OPFLAG_RELATIVE) return false; if (op->wrt != NO_SEG) return false; return op->segment == NO_SEG; } /* Is this a compile-time relative constant? */ static inline bool op_compile_rel(const insn * const ins, const struct operand * const op) { if (op->opflags & OPFLAG_UNKNOWN) return true; /* Be optimistic in pass 1 */ if (!(op->opflags & OPFLAG_RELATIVE)) return false; if (op->wrt != NO_SEG) /* Is this correct?! */ return false; return op->segment == ins->loc.segment; } #endif