File: assemble.h

package info (click to toggle)
nasm 3.01-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 23,660 kB
  • sloc: ansic: 129,101; asm: 40,471; perl: 8,238; sh: 4,146; makefile: 1,281; xml: 726; python: 582; lisp: 578; sed: 11
file content (55 lines) | stat: -rw-r--r-- 1,473 bytes parent folder | download
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