mirror of
https://github.com/netwide-assembler/nasm.git
synced 2024-11-21 03:14:19 +08:00
Permit short intersegment jumps
Allow an intersegment jump to be short (OUT_REL1ADR) if explicitly specified so by the user. Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
This commit is contained in:
parent
55ae12052c
commit
fea84d7fec
22
assemble.c
22
assemble.c
@ -1,6 +1,6 @@
|
|||||||
/* ----------------------------------------------------------------------- *
|
/* ----------------------------------------------------------------------- *
|
||||||
*
|
*
|
||||||
* Copyright 1996-2009 The NASM Authors - All Rights Reserved
|
* Copyright 1996-2010 The NASM Authors - All Rights Reserved
|
||||||
* See the file AUTHORS included with the NASM distribution for
|
* See the file AUTHORS included with the NASM distribution for
|
||||||
* the specific copyright holders.
|
* the specific copyright holders.
|
||||||
*
|
*
|
||||||
@ -1336,14 +1336,18 @@ static void gencode(int32_t segment, int64_t offset, int bits,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case4(050):
|
case4(050):
|
||||||
if (opx->segment != segment)
|
if (opx->segment != segment) {
|
||||||
errfunc(ERR_NONFATAL,
|
data = opx->offset;
|
||||||
"short relative jump outside segment");
|
out(offset, segment, &data,
|
||||||
data = opx->offset - insn_end;
|
OUT_REL1ADR, insn_end - offset,
|
||||||
if (data > 127 || data < -128)
|
opx->segment, opx->wrt);
|
||||||
errfunc(ERR_NONFATAL, "short jump is out of range");
|
} else {
|
||||||
bytes[0] = data;
|
data = opx->offset - insn_end;
|
||||||
out(offset, segment, bytes, OUT_RAWDATA, 1, NO_SEG, NO_SEG);
|
if (data > 127 || data < -128)
|
||||||
|
errfunc(ERR_NONFATAL, "short jump is out of range");
|
||||||
|
out(offset, segment, &data,
|
||||||
|
OUT_ADDRESS, 1, NO_SEG, NO_SEG);
|
||||||
|
}
|
||||||
offset += 1;
|
offset += 1;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user