diff options
author | Charles Crayne <chuck@thor.crayne.org> | 2007-11-06 18:27:23 -0800 |
---|---|---|
committer | Charles Crayne <chuck@thor.crayne.org> | 2007-11-06 18:27:23 -0800 |
commit | 1f8bc4c9a90ef5c28ba65627f4088920bfb61df4 (patch) | |
tree | 769a8a9984a564734ff3c5a87e691911e8b2d193 | |
parent | 1b851dcd0406de66c91f3d0bfa6cf687bbc11b4a (diff) | |
download | nasm-1f8bc4c9a90ef5c28ba65627f4088920bfb61df4.tar.gz nasm-1f8bc4c9a90ef5c28ba65627f4088920bfb61df4.tar.bz2 nasm-1f8bc4c9a90ef5c28ba65627f4088920bfb61df4.zip |
Prepare for 64-bit instruction lengths
-rw-r--r-- | assemble.c | 30 | ||||
-rw-r--r-- | assemble.h | 4 |
2 files changed, 17 insertions, 17 deletions
@@ -107,8 +107,8 @@ static efunc errfunc; static struct ofmt *outfmt; static ListGen *list; -static int32_t calcsize(int32_t, int32_t, int, insn *, const char *); -static void gencode(int32_t, int32_t, int, insn *, const char *, int32_t); +static int64_t calcsize(int32_t, int64_t, int, insn *, const char *); +static void gencode(int32_t, int64_t, int, insn *, const char *, int64_t); static int matches(const struct itemplate *, insn *, int bits); static int32_t regflag(const operand *); static int32_t regval(const operand *); @@ -163,7 +163,7 @@ static void warn_overflow(int size, int64_t data) * in order to pass a copy of the data off to the listing file * generator at the same time. */ -static void out(int32_t offset, int32_t segto, const void *data, +static void out(int64_t offset, int32_t segto, const void *data, uint32_t type, int32_t segment, int32_t wrt) { static int32_t lineno = 0; /* static!!! */ @@ -243,17 +243,17 @@ static int jmp_match(int32_t segment, int32_t offset, int bits, return 0; } -int32_t assemble(int32_t segment, int32_t offset, int bits, uint32_t cp, +int64_t assemble(int32_t segment, int64_t offset, int bits, uint32_t cp, insn * instruction, struct ofmt *output, efunc error, ListGen * listgen) { const struct itemplate *temp; int j; int size_prob; - int32_t insn_end; + int64_t insn_end; int32_t itimes; - int32_t start = offset; - int32_t wsize = 0; /* size for DB etc. */ + int64_t start = offset; + int64_t wsize = 0; /* size for DB etc. */ errfunc = error; /* to pass to other functions */ cpu = cp; @@ -450,7 +450,7 @@ int32_t assemble(int32_t segment, int32_t offset, int bits, uint32_t cp, if (m == 100) { /* matches! */ const char *codes = temp->code; - int32_t insn_size = calcsize(segment, offset, bits, + int64_t insn_size = calcsize(segment, offset, bits, instruction, codes); itimes = instruction->times; if (insn_size < 0) /* shouldn't be, on pass two */ @@ -603,7 +603,7 @@ int32_t assemble(int32_t segment, int32_t offset, int bits, uint32_t cp, return 0; } -int32_t insn_size(int32_t segment, int32_t offset, int bits, uint32_t cp, +int64_t insn_size(int32_t segment, int64_t offset, int bits, uint32_t cp, insn * instruction, efunc error) { const struct itemplate *temp; @@ -782,10 +782,10 @@ static int is_sbyte(insn * ins, int op, int size) return ret && v >= -128L && v <= 127L; } -static int32_t calcsize(int32_t segment, int32_t offset, int bits, +static int64_t calcsize(int32_t segment, int64_t offset, int bits, insn * ins, const char *codes) { - int32_t length = 0; + int64_t length = 0; uint8_t c; int rex_mask = ~0; struct operand *opx; @@ -1097,8 +1097,8 @@ static int32_t calcsize(int32_t segment, int32_t offset, int bits, offset += 1; \ } -static void gencode(int32_t segment, int32_t offset, int bits, - insn * ins, const char *codes, int32_t insn_end) +static void gencode(int32_t segment, int64_t offset, int bits, + insn * ins, const char *codes, int64_t insn_end) { static char condval[] = { /* conditional opcodes */ 0x7, 0x3, 0x2, 0x6, 0x2, 0x4, 0xF, 0xD, 0xC, 0xE, 0x6, 0x2, @@ -1107,7 +1107,7 @@ static void gencode(int32_t segment, int32_t offset, int bits, }; uint8_t c; uint8_t bytes[4]; - int32_t size; + int64_t size; int64_t data; struct operand *opx; @@ -1562,7 +1562,7 @@ static void gencode(int32_t segment, int32_t offset, int bits, if (ins->oprs[0].segment != NO_SEG) errfunc(ERR_PANIC, "non-constant BSS size in pass two"); else { - int32_t size = ins->oprs[0].offset << (c & 3); + int64_t size = ins->oprs[0].offset << (c & 3); if (size > 0) out(offset, segment, NULL, OUT_RESERVE + size, NO_SEG, NO_SEG); @@ -9,9 +9,9 @@ #ifndef NASM_ASSEMBLE_H #define NASM_ASSEMBLE_H -int32_t insn_size(int32_t segment, int32_t offset, int bits, uint32_t cp, +int64_t insn_size(int32_t segment, int64_t offset, int bits, uint32_t cp, insn * instruction, efunc error); -int32_t assemble(int32_t segment, int32_t offset, int bits, uint32_t cp, +int64_t assemble(int32_t segment, int64_t offset, int bits, uint32_t cp, insn * instruction, struct ofmt *output, efunc error, ListGen * listgen); |