From 75c1c785ac61f79188dde9923a90eb918ec11b33 Mon Sep 17 00:00:00 2001 From: "H.J. Lu" Date: Tue, 29 Mar 2011 12:40:51 +0000 Subject: [PATCH] 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. --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 16 ++++++++-------- gas/testsuite/ChangeLog | 5 +++++ gas/testsuite/gas/i386/ilp32/quad.d | 4 ++++ gas/testsuite/gas/i386/ilp32/quad.s | 1 + 5 files changed, 23 insertions(+), 8 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index 7c5b705..4275767 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 624c78a..aa345b5 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 2101e9f..51502ee 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 d3e6ff8..6f8a6c6 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 e96653a..a14304d 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 -- 2.7.4