#endif
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
static void handle_large_common (int small ATTRIBUTE_UNUSED);
+static void handle_quad (int);
#endif
static const char *default_arch = DEFAULT_ARCH;
{"sse_check", set_sse_check, 0},
#if defined (OBJ_ELF) || defined (OBJ_MAYBE_ELF)
{"largecomm", handle_large_common, 0},
+ {"quad", handle_quad, 8},
#else
{"file", (void (*) (int)) dwarf2_directive_file, 0},
{"loc", dwarf2_directive_loc, 0},
bss_section = saved_bss_section;
}
}
+
+static void
+handle_quad (int nbytes)
+{
+ expressionS exp;
+
+ if (x86_elf_abi != X86_64_X32_ABI)
+ {
+ cons (nbytes);
+ return;
+ }
+
+ if (is_it_end_of_statement ())
+ {
+ demand_empty_rest_of_line ();
+ return;
+ }
+
+ do
+ {
+ if (*input_line_pointer == '"')
+ {
+ as_bad (_("unexpected `\"' in expression"));
+ ignore_rest_of_line ();
+ return;
+ }
+ x86_cons (&exp, nbytes);
+ /* Output 4 bytes if not constant. */
+ if (exp.X_op != O_constant)
+ nbytes = 4;
+ emit_expr (&exp, (unsigned int) nbytes);
+ }
+ 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 */
+2011-03-28 H.J. Lu <hongjiu.lu@intel.com>
+
+ * gas/i386/ilp32/inval.s: Remove .quad.
+ * gas/i386/ilp32/inval.l: Updated.
+
+ * gas/i386/ilp32/quad.d: New.
+ * gas/i386/ilp32/quad.s: Likewise.
+
2011-03-24 Mike Frysinger <vapier@gentoo.org>
* gas/bfin/expected_errors.s: Add invalid vector add/sub insn tests.