@@ -14300,6 +14300,25 @@ i386_asm_output_addr_const_extra (FILE *file, rtx x)
return true;
}
+
+/* Implementation of TARGET_ASM_INTEGER. */
+
+static bool
+ix86_asm_integer (rtx x, unsigned int size, int aligned_p)
+{
+ if (TARGET_X32
+ && size == 8
+ && GET_CODE (x) == SYMBOL_REF)
+ {
+ /* Zero-extend symbol address to 64bit. */
+ fputs (ASM_LONG, asm_out_file);
+ output_addr_const (asm_out_file, x);
+ fputc ('\n', asm_out_file);
+ fprintf (asm_out_file, ASM_LONG "0\n");
+ return true;
+ }
+ return default_assemble_integer (x, size, aligned_p);
+}
/* Split one or more double-mode RTL references into pairs of half-mode
references. The RTL can be REG, offsettable MEM, integer constant, or
@@ -34903,6 +34922,8 @@ ix86_autovectorize_vector_sizes (void)
#define TARGET_ASM_UNALIGNED_SI_OP TARGET_ASM_ALIGNED_SI_OP
#undef TARGET_ASM_UNALIGNED_DI_OP
#define TARGET_ASM_UNALIGNED_DI_OP TARGET_ASM_ALIGNED_DI_OP
+#undef TARGET_ASM_INTEGER
+#define TARGET_ASM_INTEGER ix86_asm_integer
#undef TARGET_PRINT_OPERAND
#define TARGET_PRINT_OPERAND ix86_print_operand