1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
/* 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
|