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