From: H.J. Lu Date: Tue, 29 Mar 2011 12:40:51 +0000 (+0000) Subject: Properly handle multiple operands for x32 quad. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=75c1c785ac61f79188dde9923a90eb918ec11b33;p=binutils-gdb.git Properly handle multiple operands for x32 quad. gas/ 2011-03-29 H.J. Lu * config/tc-i386.c (handle_quad): Properly handle multiple operands. gas/testsuite/ 2011-03-29 H.J. Lu * gas/i386/ilp32/quad.d: Add tests for multiple operands. * gas/i386/ilp32/quad.s: Likewise. --- diff --git a/gas/ChangeLog b/gas/ChangeLog index 7c5b7054bf8..42757677587 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2011-03-29 H.J. Lu + + * config/tc-i386.c (handle_quad): Properly handle multiple + operands. + 2011-03-29 Mike Frysinger * config/bfin-parse.y (BYTEUNPACK): Return yyerror when dest diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 624c78a886a..aa345b53b8e 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -9182,19 +9182,19 @@ handle_quad (int nbytes) if (exp.X_op != O_constant) nbytes = 4; emit_expr (&exp, (unsigned int) nbytes); + /* Zero-extends to 8 bytes if not constant. */ + if (nbytes == 4) + { + memset (&exp, '\0', sizeof (exp)); + exp.X_op = O_constant; + emit_expr (&exp, nbytes); + } + nbytes = 8; } while (*input_line_pointer++ == ','); input_line_pointer--; /* Put terminator back into stream. */ demand_empty_rest_of_line (); - - /* Zero-extends to 8 bytes if not constant. */ - if (nbytes == 4) - { - memset (&exp, '\0', sizeof (exp)); - exp.X_op = O_constant; - emit_expr (&exp, nbytes); - } } #endif /* OBJ_ELF || OBJ_MAYBE_ELF */ diff --git a/gas/testsuite/ChangeLog b/gas/testsuite/ChangeLog index 2101e9fc3da..51502ee9042 100644 --- a/gas/testsuite/ChangeLog +++ b/gas/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-03-29 H.J. Lu + + * gas/i386/ilp32/quad.d: Add tests for multiple operands. + * gas/i386/ilp32/quad.s: Likewise. + 2011-03-29 Mike Frysinger * gas/bfin/expected_errors.s: Add invalid BYTEUNPACK insn tests. diff --git a/gas/testsuite/gas/i386/ilp32/quad.d b/gas/testsuite/gas/i386/ilp32/quad.d index d3e6ff88d29..6f8a6c6f57a 100644 --- a/gas/testsuite/gas/i386/ilp32/quad.d +++ b/gas/testsuite/gas/i386/ilp32/quad.d @@ -7,8 +7,12 @@ RELOCATION RECORDS FOR \[.data\]: OFFSET +TYPE +VALUE 0+ R_X86_64_32 +foo 0+10 R_X86_64_32 +bar +0+20 R_X86_64_32 +foo +0+30 R_X86_64_32 +bar Contents of section .data: 0000 00000000 00000000 efcdab90 78674512 ............xgE. 0010 00000000 00000000 ffffffff ffffffff ................ + 0020 00000000 00000000 efcdab90 78674512 ............xgE. + 0030 00000000 00000000 ffffffff ffffffff ................ diff --git a/gas/testsuite/gas/i386/ilp32/quad.s b/gas/testsuite/gas/i386/ilp32/quad.s index e96653a8458..a14304d045c 100644 --- a/gas/testsuite/gas/i386/ilp32/quad.s +++ b/gas/testsuite/gas/i386/ilp32/quad.s @@ -3,3 +3,4 @@ .quad 0x1245677890abcdef .quad bar .quad -1 + .quad foo, 0x1245677890abcdef, bar, -1