2005-08-26  Jan Beulich  <jbeulich@novell.com>

	* config/tc-i386.c (intel_e09): Set JumpAbsolute when seeing a PTR-
	qualified operand of a branch.
	(intel_bracket_expr): Set JumpAbsolute here...
	(intel_e11): ... rather than here.

gas/testsuite/
2005-08-26  Jan Beulich  <jbeulich@novell.com>

	* gas/i386/intel.s: Adjust.
	* gas/i386/intelok.s: Add two more insns.
	* gas/i386/intelok.d: Adjust.
This commit is contained in:
Jan Beulich
2005-08-26 15:51:15 +00:00
parent 3f31e633c2
commit 435acd52e0
6 changed files with 29 additions and 9 deletions

View File

@ -1,3 +1,10 @@
2005-08-26 Jan Beulich <jbeulich@novell.com>
* config/tc-i386.c (intel_e09): Set JumpAbsolute when seeing a PTR-
qualified operand of a branch.
(intel_bracket_expr): Set JumpAbsolute here...
(intel_e11): ... rather than here.
2005-08-26 Christian Groessler <chris@groessler.org> 2005-08-26 Christian Groessler <chris@groessler.org>
* configure.tgt: Set bfd_gas also for z8k cpu. * configure.tgt: Set bfd_gas also for z8k cpu.

View File

@ -6159,7 +6159,7 @@ intel_e09 ()
suffix = WORD_MNEM_SUFFIX; suffix = WORD_MNEM_SUFFIX;
else if (flag_code == CODE_16BIT else if (flag_code == CODE_16BIT
&& (current_templates->start->opcode_modifier && (current_templates->start->opcode_modifier
& (Jump|JumpDword|JumpInterSegment))) & (Jump | JumpDword)))
suffix = LONG_DOUBLE_MNEM_SUFFIX; suffix = LONG_DOUBLE_MNEM_SUFFIX;
else if (intel_parser.got_a_float == 1) /* "f..." */ else if (intel_parser.got_a_float == 1) /* "f..." */
suffix = SHORT_MNEM_SUFFIX; suffix = SHORT_MNEM_SUFFIX;
@ -6211,6 +6211,11 @@ intel_e09 ()
return 0; return 0;
} }
/* Operands for jump/call using 'ptr' notation denote absolute
addresses. */
if (current_templates->start->opcode_modifier & (Jump | JumpDword))
i.types[this_operand] |= JumpAbsolute;
if (current_templates->start->base_opcode == 0x8d /* lea */) if (current_templates->start->base_opcode == 0x8d /* lea */)
; ;
else if (!i.suffix) else if (!i.suffix)
@ -6295,6 +6300,11 @@ intel_bracket_expr ()
if (!intel_parser.in_offset) if (!intel_parser.in_offset)
{ {
++intel_parser.in_bracket; ++intel_parser.in_bracket;
/* Operands for jump/call inside brackets denote absolute addresses. */
if (current_templates->start->opcode_modifier & (Jump | JumpDword))
i.types[this_operand] |= JumpAbsolute;
/* Unfortunately gas always diverged from MASM in a respect that can't /* Unfortunately gas always diverged from MASM in a respect that can't
be easily fixed without risking to break code sequences likely to be be easily fixed without risking to break code sequences likely to be
encountered (the testsuite even check for this): MASM doesn't consider encountered (the testsuite even check for this): MASM doesn't consider
@ -6397,13 +6407,6 @@ intel_e11 ()
/* e11 [ expr ] */ /* e11 [ expr ] */
case '[': case '[':
/* Operands for jump/call inside brackets denote absolute addresses.
XXX This shouldn't be needed anymore (or if it should rather live
in intel_bracket_expr). */
if (current_templates->start->opcode_modifier
& (Jump|JumpDword|JumpByte|JumpInterSegment))
i.types[this_operand] |= JumpAbsolute;
return intel_bracket_expr (); return intel_bracket_expr ();
/* e11 $ /* e11 $

View File

@ -1,3 +1,9 @@
2005-08-26 Jan Beulich <jbeulich@novell.com>
* gas/i386/intel.s: Adjust.
* gas/i386/intelok.s: Add two more insns.
* gas/i386/intelok.d: Adjust.
2005-08-26 Jan Beulich <jbeulich@novell.com> 2005-08-26 Jan Beulich <jbeulich@novell.com>
* gas/i386/intelok.d: Adjust. * gas/i386/intelok.d: Adjust.

View File

@ -520,7 +520,7 @@ foo:
rcl word ptr 0x90909090[eax], cl rcl word ptr 0x90909090[eax], cl
in ax, 0x90 in ax, 0x90
out 0x90, ax out 0x90, ax
call word ptr .+3+0x9090 callw .+3+0x9090
jmpw 0x9090,0x9090 jmpw 0x9090,0x9090
in ax, dx in ax, dx
out dx, ax out dx, ax

View File

@ -171,4 +171,6 @@ Disassembly of section .text:
[ ]*[0-9a-f]+: a1 08 00 00 00[ ]+mov[ ]+eax,ds:0x8 [ ]*[0-9a-f]+: a1 08 00 00 00[ ]+mov[ ]+eax,ds:0x8
[ ]*[0-9a-f]+: 9a 05 00 00 00 03 00[ ]+l?call[ ]+0x3[,:]0x5 [ ]*[0-9a-f]+: 9a 05 00 00 00 03 00[ ]+l?call[ ]+0x3[,:]0x5
[ ]*[0-9a-f]+: ea 03 00 00 00 05 00[ ]+l?jmp[ ]+0x5[,:]0x3 [ ]*[0-9a-f]+: ea 03 00 00 00 05 00[ ]+l?jmp[ ]+0x5[,:]0x3
[ ]*[0-9a-f]+: ff 15 00 00 00 00[ ]+call[ ]+(DWORD PTR )?(ds:)?0x0
[ ]*[0-9a-f]+: 66 ff 25 00 00 00 00[ ]+jmp[ ]+(WORD PTR )?(ds:)?0x0
#pass #pass

View File

@ -187,6 +187,8 @@ start:
# other operands # other operands
call 3:5 call 3:5
jmp 5:3 jmp 5:3
call dword ptr xtrn
jmp word ptr xtrn
# Force a good alignment. # Force a good alignment.
.p2align 4,0 .p2align 4,0