IF_ARCH_alpha(SLIT("\t.data\n\t.align 3")
,IF_ARCH_sparc(SLIT(".data\n\t.align 8") {-<8 will break double constants -}
,IF_ARCH_i386(IF_OS_darwin(SLIT(".const_data\n.align 2"),
- SLIT(".section .rodata\n\t.align 4"))
+ SLIT(".section .data\n\t.align 4"))
,IF_ARCH_x86_64(IF_OS_darwin(SLIT(".const_data\n.align 3"),
- SLIT(".section .rodata\n\t.align 8"))
+ SLIT(".section .data\n\t.align 8"))
,IF_ARCH_powerpc(IF_OS_darwin(SLIT(".const_data\n.align 2"),
SLIT(".data\n\t.align 2"))
,)))))
SLIT(".globl ")) <>
pprCLabel_asm lbl
+pprTypeAndSizeDecl :: CLabel -> Doc
+pprTypeAndSizeDecl lbl
+ | not (externallyVisibleCLabel lbl) = empty
+ | otherwise = ptext SLIT(".type ") <>
+ pprCLabel_asm lbl <> ptext SLIT(", @object")
+
pprLabel :: CLabel -> Doc
-pprLabel lbl = pprGloblDecl lbl $$ (pprCLabel_asm lbl <> char ':')
+pprLabel lbl = pprGloblDecl lbl $$ pprTypeAndSizeDecl lbl $$ (pprCLabel_asm lbl <> char ':')
pprASCII str
-- Fortunately we're assuming the small memory model, in which
-- all such offsets will fit into 32 bits, so we have to stick
-- to 32-bit offset fields and modify the RTS appropriately
- -- (see InfoTables.h).
+ --
+ -- See Note [x86-64-relative] in includes/InfoTables.h
--
ppr_item I64 x
| isRelativeReloc x =
| otherwise =
[ptext SLIT("\t.quad\t") <> pprImm imm]
where
- isRelativeReloc (CmmLabelOff _ _) = True
isRelativeReloc (CmmLabelDiffOff _ _ _) = True
isRelativeReloc _ = False
#endif
pprInstr (FDIV size op1 op2) = pprSizeOpOp SLIT("div") size op1 op2
-pprInstr (CVTSS2SD from to) = pprRegReg SLIT("cvtss2sd") from to
-pprInstr (CVTSD2SS from to) = pprRegReg SLIT("cvtsd2ss") from to
-pprInstr (CVTSS2SI from to) = pprOpReg SLIT("cvtss2siq") from to
-pprInstr (CVTSD2SI from to) = pprOpReg SLIT("cvtsd2siq") from to
-pprInstr (CVTSI2SS from to) = pprOpReg SLIT("cvtsi2ssq") from to
-pprInstr (CVTSI2SD from to) = pprOpReg SLIT("cvtsi2sdq") from to
+pprInstr (CVTSS2SD from to) = pprRegReg SLIT("cvtss2sd") from to
+pprInstr (CVTSD2SS from to) = pprRegReg SLIT("cvtsd2ss") from to
+pprInstr (CVTTSS2SIQ from to) = pprOpReg SLIT("cvttss2siq") from to
+pprInstr (CVTTSD2SIQ from to) = pprOpReg SLIT("cvttsd2siq") from to
+pprInstr (CVTSI2SS from to) = pprOpReg SLIT("cvtsi2ssq") from to
+pprInstr (CVTSI2SD from to) = pprOpReg SLIT("cvtsi2sdq") from to
#endif
-- FETCHGOT for PIC on ELF platforms