summaryrefslogtreecommitdiff
path: root/gas
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2011-03-29 12:40:51 +0000
committerH.J. Lu <hjl.tools@gmail.com>2011-03-29 12:40:51 +0000
commit75c1c785ac61f79188dde9923a90eb918ec11b33 (patch)
tree8001ccfba308b175206ee38b1bfba821aac9449d /gas
parentfc99ebdc2b470b31622d9efc28fca6f03945532c (diff)
downloadbinutils-75c1c785ac61f79188dde9923a90eb918ec11b33.tar.gz
binutils-75c1c785ac61f79188dde9923a90eb918ec11b33.tar.bz2
binutils-75c1c785ac61f79188dde9923a90eb918ec11b33.zip
Properly handle multiple operands for x32 quad.
gas/ 2011-03-29 H.J. Lu <hongjiu.lu@intel.com> * config/tc-i386.c (handle_quad): Properly handle multiple operands. gas/testsuite/ 2011-03-29 H.J. Lu <hongjiu.lu@intel.com> * gas/i386/ilp32/quad.d: Add tests for multiple operands. * gas/i386/ilp32/quad.s: Likewise.
Diffstat (limited to 'gas')
-rw-r--r--gas/ChangeLog5
-rw-r--r--gas/config/tc-i386.c16
-rw-r--r--gas/testsuite/ChangeLog5
-rw-r--r--gas/testsuite/gas/i386/ilp32/quad.d4
-rw-r--r--gas/testsuite/gas/i386/ilp32/quad.s1
5 files changed, 23 insertions, 8 deletions
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 <hongjiu.lu@intel.com>
+
+ * config/tc-i386.c (handle_quad): Properly handle multiple
+ operands.
+
2011-03-29 Mike Frysinger <vapier@gentoo.org>
* 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 <hongjiu.lu@intel.com>
+
+ * gas/i386/ilp32/quad.d: Add tests for multiple operands.
+ * gas/i386/ilp32/quad.s: Likewise.
+
2011-03-29 Mike Frysinger <vapier@gentoo.org>
* 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