Ticket #3557: partial-simd-patch-3557.patch

File partial-simd-patch-3557.patch, 166.0 KB (added by vivian, 4 years ago)

Partial patch against HEAD for SIMD instructions

Line 
1Fri Mar 25 11:58:53 NZDT 2011  Vivian McPhail <[email protected]>
2  * partial simd patch #3557
3
4New patches:
5
6[partial simd patch #3557
7Vivian McPhail <[email protected]>**20110324225853] {
8hunk ./compiler/cmm/CmmExpr.hs 3
9-    ( CmmExpr(..), cmmExprType, cmmExprWidth, maybeInvertCmmExpr
10+    ( CmmType  -- Abstract
11+    , b8, b16, b32, b64, b128, f32, f64, f128
12+    , b32p4, b64p2, f32p4, f64p2
13+    , bWord, bHalfWord, gcWord
14+    , cInt, cLong
15+    , cmmBits, cmmFloat
16+    , typeWidth, cmmEqType, cmmEqType_ignoring_ptrhood
17+    , isFloatType, isGcPtrType, isWord32, isWord64, isFloat64, isFloat32
18+    , isPacked128
19+
20+    , Width(..)
21+    , widthInBits, widthInBytes, widthInLog, widthFromBytes
22+    , wordWidth, halfWordWidth, cIntWidth, cLongWidth
23+    , narrowU, narrowS
24+
25+    , CmmExpr(..), cmmExprType, cmmExprWidth, maybeInvertCmmExpr
26hunk ./compiler/cmm/CmmExpr.hs 344
27+  | PackedReg           -- packed registers (128 bit)
28+        {-# UNPACK #-} !Int     -- its number
29+
30hunk ./compiler/cmm/CmmExpr.hs 381
31+   PackedReg i == PackedReg j = i==j
32hunk ./compiler/cmm/CmmExpr.hs 401
33+   compare (PackedReg i) (PackedReg j) = compare i j
34hunk ./compiler/cmm/CmmExpr.hs 422
35+   compare (PackedReg _) _    = LT
36+   compare _ (PackedReg _)    = GT
37hunk ./compiler/cmm/CmmExpr.hs 463
38+globalRegType (PackedReg _)     = cmmFloat W128
39hunk ./compiler/cmm/CmmExpr.hs 467
40+v v v v v v v
41+*************
42+
43+
44+-----------------------------------------------------------------------------
45+--             CmmType
46+-----------------------------------------------------------------------------
47+
48+  -- NOTE: CmmType is an abstract type, not exported from this
49+  --      module so you can easily change its representation
50+  --
51+  -- However Width is exported in a concrete way,
52+  -- and is used extensively in pattern-matching
53+
54+data CmmType   -- The important one!
55+  = CmmType CmmCat Width
56+
57+data CmmCat    -- "Category" (not exported)
58+   = GcPtrCat  -- GC pointer
59+   | BitsCat   -- Non-pointer
60+   | FloatCat  -- Float
61+   deriving( Eq )
62+       -- See Note [Signed vs unsigned] at the end
63+
64+instance Outputable CmmType where
65+  ppr (CmmType cat wid) = ppr cat <> ppr (widthInBits wid)
66+
67+instance Outputable CmmCat where
68+  ppr FloatCat = ptext $ sLit("F")
69+  ppr _        = ptext $ sLit("I")
70+-- Temp Jan 08
71+--  ppr FloatCat       = ptext $ sLit("float")
72+--  ppr BitsCat   = ptext $ sLit("bits")
73+--  ppr GcPtrCat  = ptext $ sLit("gcptr")
74+
75+-- Why is CmmType stratified?  For native code generation,
76+-- most of the time you just want to know what sort of register
77+-- to put the thing in, and for this you need to know how
78+-- many bits thing has and whether it goes in a floating-point
79+-- register.  By contrast, the distinction between GcPtr and
80+-- GcNonPtr is of interest to only a few parts of the code generator.
81+
82+-------- Equality on CmmType --------------
83+-- CmmType is *not* an instance of Eq; sometimes we care about the
84+-- Gc/NonGc distinction, and sometimes we don't
85+-- So we use an explicit function to force you to think about it
86+cmmEqType :: CmmType -> CmmType -> Bool        -- Exact equality
87+cmmEqType (CmmType c1 w1) (CmmType c2 w2) = c1==c2 && w1==w2
88+
89+cmmEqType_ignoring_ptrhood :: CmmType -> CmmType -> Bool
90+  -- This equality is temporary; used in CmmLint
91+  -- but the RTS files are not yet well-typed wrt pointers
92+cmmEqType_ignoring_ptrhood (CmmType c1 w1) (CmmType c2 w2)
93+   = c1 `weak_eq` c2 && w1==w2
94+   where
95+      FloatCat `weak_eq` FloatCat = True
96+      FloatCat `weak_eq` _other          = False
97+      _other   `weak_eq` FloatCat = False
98+      _word1   `weak_eq` _word2   = True       -- Ignores GcPtr
99+
100+--- Simple operations on CmmType -----
101+typeWidth :: CmmType -> Width
102+typeWidth (CmmType _ w) = w
103+                             
104+cmmBits, cmmFloat :: Width -> CmmType
105+cmmBits  = CmmType BitsCat
106+cmmFloat = CmmType FloatCat
107+
108+-------- Common CmmTypes ------------
109+-- Floats and words of specific widths
110+b8, b16, b32, b64, b128, f32, f64, f128 :: CmmType
111+b8     = cmmBits W8
112+b16    = cmmBits W16
113+b32    = cmmBits W32
114+b64    = cmmBits W64
115+b128   = cmmBits W128
116+f32    = cmmFloat W32
117+f64    = cmmFloat W64
118+f128   = cmmFloat W128
119+
120+-- Vector types
121+b32p4, b64p2, f32p4, f64p2 :: CmmType
122+b32p4  = cmmBits W32_4
123+b64p2  = cmmBits W64_2
124+f32p4  = cmmFloat W32_4
125+f64p2  = cmmFloat W64_2
126+
127+-- CmmTypes of native word widths
128+bWord, bHalfWord, gcWord :: CmmType
129+bWord     = cmmBits wordWidth
130+bHalfWord = cmmBits halfWordWidth
131+gcWord    = CmmType GcPtrCat wordWidth
132+
133+cInt, cLong :: CmmType
134+cInt  = cmmBits cIntWidth
135+cLong = cmmBits cLongWidth
136+
137+
138+------------ Predicates ----------------
139+isFloatType, isGcPtrType :: CmmType -> Bool
140+isFloatType (CmmType FloatCat    _) = True
141+isFloatType _other                 = False
142+
143+isGcPtrType (CmmType GcPtrCat _) = True
144+isGcPtrType _other              = False
145+
146+isWord32, isWord64, isFloat32, isFloat64, isPacked128 :: CmmType -> Bool
147+-- isWord64 is true of 64-bit non-floats (both gc-ptrs and otherwise)
148+-- isFloat32 and 64 are obvious
149+
150+isWord64 (CmmType BitsCat  W64) = True
151+isWord64 (CmmType GcPtrCat W64) = True
152+isWord64 _other                        = False
153+
154+isWord32 (CmmType BitsCat  W32) = True
155+isWord32 (CmmType GcPtrCat W32) = True
156+isWord32 _other                        = False
157+
158+isFloat32 (CmmType FloatCat W32) = True
159+isFloat32 _other                = False
160+
161+isFloat64 (CmmType FloatCat W64) = True
162+isFloat64 _other                = False
163+
164+isPacked128 (CmmType _ W8_16)    = True
165+isPacked128 (CmmType _ W16_8)    = True
166+isPacked128 (CmmType _ W32_4)    = True
167+isPacked128 (CmmType _ W64_2)    = True
168+isPacked128 _other               = False
169+
170+-----------------------------------------------------------------------------
171+--             Width
172+-----------------------------------------------------------------------------
173+
174+data Width   = W8 | W16 | W32 | W64
175+            | W80      -- Extended double-precision float,
176+                       -- used in x86 native codegen only.
177+                       -- (we use Ord, so it'd better be in this order)
178+             | W8_16 | W16_8 | W32_4 | W64_2
179+            | W128
180+            deriving (Eq, Ord, Show)
181+
182+instance Outputable Width where
183+   ppr rep = ptext (mrStr rep)
184+
185+mrStr :: Width -> LitString
186+mrStr W8   = sLit("W8")
187+mrStr W16  = sLit("W16")
188+mrStr W32  = sLit("W32")
189+mrStr W64  = sLit("W64")
190+mrStr W128 = sLit("W128")
191+mrStr W80  = sLit("W80")
192+mrStr W8_16 = sLit("W8_16")
193+mrStr W16_8 = sLit("W16_8")
194+mrStr W32_4 = sLit("W32_4")
195+mrStr W64_2 = sLit("W64_2")
196+
197+-------- Common Widths  ------------
198+wordWidth, halfWordWidth :: Width
199+wordWidth | wORD_SIZE == 4 = W32
200+         | wORD_SIZE == 8 = W64
201+         | otherwise      = panic "MachOp.wordRep: Unknown word size"
202+
203+halfWordWidth | wORD_SIZE == 4 = W16
204+             | wORD_SIZE == 8 = W32
205+             | otherwise      = panic "MachOp.halfWordRep: Unknown word size"
206+
207+-- cIntRep is the Width for a C-language 'int'
208+cIntWidth, cLongWidth :: Width
209+#if SIZEOF_INT == 4
210+cIntWidth = W32
211+#elif  SIZEOF_INT == 8
212+cIntWidth = W64
213+#endif
214+
215+#if SIZEOF_LONG == 4
216+cLongWidth = W32
217+#elif  SIZEOF_LONG == 8
218+cLongWidth = W64
219+#endif
220+
221+widthInBits :: Width -> Int
222+widthInBits W8   = 8
223+widthInBits W16  = 16
224+widthInBits W32  = 32
225+widthInBits W64  = 64
226+widthInBits W128 = 128
227+widthInBits W80  = 80
228+widthInBits W8_16 = 128
229+widthInBits W16_8 = 128
230+widthInBits W32_4 = 128
231+widthInBits W64_2 = 128
232+
233+widthInBytes :: Width -> Int
234+widthInBytes W8   = 1
235+widthInBytes W16  = 2
236+widthInBytes W32  = 4
237+widthInBytes W64  = 8
238+widthInBytes W128 = 16
239+widthInBytes W80  = 10
240+widthInBytes W8_16 = 16
241+widthInBytes W16_8 = 16
242+widthInBytes W32_4 = 16
243+widthInBytes W64_2 = 16
244+
245+widthFromBytes :: Int -> Width
246+widthFromBytes 1  = W8
247+widthFromBytes 2  = W16
248+widthFromBytes 4  = W32
249+widthFromBytes 8  = W64
250+widthFromBytes 16 = W128
251+widthFromBytes 10 = W80
252+widthFromBytes n  = pprPanic "no width for given number of bytes" (ppr n)
253+
254+-- log_2 of the width in bytes, useful for generating shifts.
255+widthInLog :: Width -> Int
256+widthInLog W8   = 0
257+widthInLog W16  = 1
258+widthInLog W32  = 2
259+widthInLog W64  = 3
260+widthInLog W128 = 4
261+widthInLog W80  = panic "widthInLog: F80"
262+widthInLog W8_16 = 4
263+widthInLog W16_8 = 4
264+widthInLog W32_4 = 4
265+widthInLog W64_2 = 4
266+
267+-- widening / narrowing
268+
269+narrowU :: Width -> Integer -> Integer
270+narrowU W8  x = fromIntegral (fromIntegral x :: Word8)
271+narrowU W16 x = fromIntegral (fromIntegral x :: Word16)
272+narrowU W32 x = fromIntegral (fromIntegral x :: Word32)
273+narrowU W64 x = fromIntegral (fromIntegral x :: Word64)
274+narrowU _ _ = panic "narrowTo"
275+
276+narrowS :: Width -> Integer -> Integer
277+narrowS W8  x = fromIntegral (fromIntegral x :: Int8)
278+narrowS W16 x = fromIntegral (fromIntegral x :: Int16)
279+narrowS W32 x = fromIntegral (fromIntegral x :: Int32)
280+narrowS W64 x = fromIntegral (fromIntegral x :: Int64)
281+narrowS _ _ = panic "narrowTo"
282+
283+-----------------------------------------------------------------------------
284+--             MachOp
285+-----------------------------------------------------------------------------
286+
287+{-
288+Implementation notes:
289+
290+It might suffice to keep just a width, without distinguishing between
291+floating and integer types.  However, keeping the distinction will
292+help the native code generator to assign registers more easily.
293+-}
294+
295+
296+{- |
297+Machine-level primops; ones which we can reasonably delegate to the
298+native code generators to handle.  Basically contains C's primops
299+and no others.
300+
301+Nomenclature: all ops indicate width and signedness, where
302+appropriate.  Widths: 8\/16\/32\/64 means the given size, obviously.
303+Nat means the operation works on STG word sized objects.
304+Signedness: S means signed, U means unsigned.  For operations where
305+signedness is irrelevant or makes no difference (for example
306+integer add), the signedness component is omitted.
307+
308+An exception: NatP is a ptr-typed native word.  From the point of
309+view of the native code generators this distinction is irrelevant,
310+but the C code generator sometimes needs this info to emit the
311+right casts. 
312+-}
313+
314+data MachOp
315+  -- Integer operations (insensitive to signed/unsigned)
316+  = MO_Add Width
317+  | MO_Sub Width
318+  | MO_Eq  Width
319+  | MO_Ne  Width
320+  | MO_Mul Width               -- low word of multiply
321+
322+  -- Signed multiply/divide
323+  | MO_S_MulMayOflo Width      -- nonzero if signed multiply overflows
324+  | MO_S_Quot Width            -- signed / (same semantics as IntQuotOp)
325+  | MO_S_Rem  Width            -- signed % (same semantics as IntRemOp)
326+  | MO_S_Neg  Width            -- unary -
327+
328+  -- Unsigned multiply/divide
329+  | MO_U_MulMayOflo Width      -- nonzero if unsigned multiply overflows
330+  | MO_U_Quot Width            -- unsigned / (same semantics as WordQuotOp)
331+  | MO_U_Rem  Width            -- unsigned % (same semantics as WordRemOp)
332+
333+  -- Signed comparisons
334+  | MO_S_Ge Width
335+  | MO_S_Le Width
336+  | MO_S_Gt Width
337+  | MO_S_Lt Width
338+
339+  -- Unsigned comparisons
340+  | MO_U_Ge Width
341+  | MO_U_Le Width
342+  | MO_U_Gt Width
343+  | MO_U_Lt Width
344+
345+  -- Floating point arithmetic
346+  | MO_F_Add  Width
347+  | MO_F_Sub  Width
348+  | MO_F_Neg  Width            -- unary -
349+  | MO_F_Mul  Width
350+  | MO_F_Quot Width
351+
352+  -- Floating point comparison
353+  | MO_F_Eq Width
354+  | MO_F_Ne Width
355+  | MO_F_Ge Width
356+  | MO_F_Le Width
357+  | MO_F_Gt Width
358+  | MO_F_Lt Width
359+
360+  -- Bitwise operations.  Not all of these may be supported
361+  -- at all sizes, and only integral Widths are valid.
362+  | MO_And   Width
363+  -- | MO_AndN  Width
364+  | MO_Or    Width
365+  | MO_Xor   Width
366+  | MO_Not   Width
367+  | MO_Shl   Width
368+  | MO_U_Shr Width     -- unsigned shift right
369+  | MO_S_Shr Width     -- signed shift right
370+
371+  -- Conversions.  Some of these will be NOPs.
372+  -- Floating-point conversions use the signed variant.
373+  | MO_SF_Conv Width Width     -- Signed int -> Float
374+  | MO_FS_Conv Width Width     -- Float -> Signed int
375+  | MO_SS_Conv Width Width     -- Signed int -> Signed int
376+  | MO_UU_Conv Width Width     -- unsigned int -> unsigned int
377+  | MO_FF_Conv Width Width     -- Float -> Float
378+
379+  -- pack/unpack
380+  | MO_Pack    Int   Width
381+  | MO_UnPack  Int   Width
382+  | MO_Shuffle Word8 Width
383+  deriving (Eq, Show)
384+
385+pprMachOp :: MachOp -> SDoc
386+pprMachOp mo = text (show mo)
387+
388+
389+
390+-- -----------------------------------------------------------------------------
391+-- Some common MachReps
392+
393+-- A 'wordRep' is a machine word on the target architecture
394+-- Specifically, it is the size of an Int#, Word#, Addr#
395+-- and the unit of allocation on the stack and the heap
396+-- Any pointer is also guaranteed to be a wordRep.
397+
398+mo_wordAdd, mo_wordSub, mo_wordEq, mo_wordNe,mo_wordMul, mo_wordSQuot
399+    , mo_wordSRem, mo_wordSNeg, mo_wordUQuot, mo_wordURem
400+    , mo_wordSGe, mo_wordSLe, mo_wordSGt, mo_wordSLt, mo_wordUGe
401+    , mo_wordULe, mo_wordUGt, mo_wordULt
402+    , mo_wordAnd, mo_wordOr, mo_wordXor, mo_wordNot, mo_wordShl, mo_wordSShr, mo_wordUShr
403+    , mo_u_8To32, mo_s_8To32, mo_u_16To32, mo_s_16To32
404+    , mo_u_8ToWord, mo_s_8ToWord, mo_u_16ToWord, mo_s_16ToWord, mo_u_32ToWord, mo_s_32ToWord
405+    , mo_32To8, mo_32To16, mo_WordTo8, mo_WordTo16, mo_WordTo32
406+    :: MachOp
407+
408+mo_wordAdd     = MO_Add wordWidth
409+mo_wordSub     = MO_Sub wordWidth
410+mo_wordEq      = MO_Eq  wordWidth
411+mo_wordNe      = MO_Ne  wordWidth
412+mo_wordMul     = MO_Mul wordWidth
413+mo_wordSQuot   = MO_S_Quot wordWidth
414+mo_wordSRem    = MO_S_Rem wordWidth
415+mo_wordSNeg    = MO_S_Neg wordWidth
416+mo_wordUQuot   = MO_U_Quot wordWidth
417+mo_wordURem    = MO_U_Rem wordWidth
418+
419+mo_wordSGe     = MO_S_Ge  wordWidth
420+mo_wordSLe     = MO_S_Le  wordWidth
421+mo_wordSGt     = MO_S_Gt  wordWidth
422+mo_wordSLt     = MO_S_Lt  wordWidth
423+
424+mo_wordUGe     = MO_U_Ge  wordWidth
425+mo_wordULe     = MO_U_Le  wordWidth
426+mo_wordUGt     = MO_U_Gt  wordWidth
427+mo_wordULt     = MO_U_Lt  wordWidth
428+
429+mo_wordAnd     = MO_And wordWidth
430+mo_wordOr      = MO_Or  wordWidth
431+mo_wordXor     = MO_Xor wordWidth
432+mo_wordNot     = MO_Not wordWidth
433+mo_wordShl     = MO_Shl wordWidth
434+mo_wordSShr    = MO_S_Shr wordWidth
435+mo_wordUShr    = MO_U_Shr wordWidth
436+
437+mo_u_8To32     = MO_UU_Conv W8 W32
438+mo_s_8To32     = MO_SS_Conv W8 W32
439+mo_u_16To32    = MO_UU_Conv W16 W32
440+mo_s_16To32    = MO_SS_Conv W16 W32
441+
442+mo_u_8ToWord   = MO_UU_Conv W8  wordWidth
443+mo_s_8ToWord   = MO_SS_Conv W8  wordWidth
444+mo_u_16ToWord  = MO_UU_Conv W16 wordWidth
445+mo_s_16ToWord  = MO_SS_Conv W16 wordWidth
446+mo_s_32ToWord  = MO_SS_Conv W32 wordWidth
447+mo_u_32ToWord  = MO_UU_Conv W32 wordWidth
448+
449+mo_WordTo8     = MO_UU_Conv wordWidth W8
450+mo_WordTo16    = MO_UU_Conv wordWidth W16
451+mo_WordTo32    = MO_UU_Conv wordWidth W32
452+
453+mo_32To8       = MO_UU_Conv W32 W8
454+mo_32To16      = MO_UU_Conv W32 W16
455+
456+
457+-- ----------------------------------------------------------------------------
458+-- isCommutableMachOp
459+
460+{- |
461+Returns 'True' if the MachOp has commutable arguments.  This is used
462+in the platform-independent Cmm optimisations.
463+
464+If in doubt, return 'False'.  This generates worse code on the
465+native routes, but is otherwise harmless.
466+-}
467+isCommutableMachOp :: MachOp -> Bool
468+isCommutableMachOp mop =
469+  case mop of
470+       MO_Add _                -> True
471+       MO_Eq _                 -> True
472+       MO_Ne _                 -> True
473+       MO_Mul _                -> True
474+       MO_S_MulMayOflo _       -> True
475+       MO_U_MulMayOflo _       -> True
476+       MO_And _                -> True
477+       MO_Or _                 -> True
478+       MO_Xor _                -> True
479+       _other                  -> False
480+
481+-- ----------------------------------------------------------------------------
482+-- isAssociativeMachOp
483+
484+{- |
485+Returns 'True' if the MachOp is associative (i.e. @(x+y)+z == x+(y+z)@)
486+This is used in the platform-independent Cmm optimisations.
487+
488+If in doubt, return 'False'.  This generates worse code on the
489+native routes, but is otherwise harmless.
490+-}
491+isAssociativeMachOp :: MachOp -> Bool
492+isAssociativeMachOp mop =
493+  case mop of
494+       MO_Add {} -> True       -- NB: does not include
495+       MO_Mul {} -> True --     floatint point!
496+       MO_And {} -> True
497+       MO_Or  {} -> True
498+       MO_Xor {} -> True
499+       _other    -> False
500+
501+-- ----------------------------------------------------------------------------
502+-- isComparisonMachOp
503+
504+{- |
505+Returns 'True' if the MachOp is a comparison.
506+
507+If in doubt, return False.  This generates worse code on the
508+native routes, but is otherwise harmless.
509+-}
510+isComparisonMachOp :: MachOp -> Bool
511+isComparisonMachOp mop =
512+  case mop of
513+    MO_Eq   _  -> True
514+    MO_Ne   _  -> True
515+    MO_S_Ge _  -> True
516+    MO_S_Le _  -> True
517+    MO_S_Gt _  -> True
518+    MO_S_Lt _  -> True
519+    MO_U_Ge _  -> True
520+    MO_U_Le _  -> True
521+    MO_U_Gt _  -> True
522+    MO_U_Lt _  -> True
523+    MO_F_Eq  {}        -> True
524+    MO_F_Ne  {}        -> True
525+    MO_F_Ge  {}        -> True
526+    MO_F_Le  {}        -> True
527+    MO_F_Gt  {}        -> True
528+    MO_F_Lt  {}        -> True
529+    _other     -> False
530+
531+-- -----------------------------------------------------------------------------
532+-- Inverting conditions
533+
534+-- Sometimes it's useful to be able to invert the sense of a
535+-- condition.  Not all conditional tests are invertible: in
536+-- particular, floating point conditionals cannot be inverted, because
537+-- there exist floating-point values which return False for both senses
538+-- of a condition (eg. !(NaN > NaN) && !(NaN /<= NaN)).
539+
540+maybeInvertComparison :: MachOp -> Maybe MachOp
541+maybeInvertComparison op
542+  = case op of -- None of these Just cases include floating point
543+       MO_Eq r   -> Just (MO_Ne r)
544+       MO_Ne r   -> Just (MO_Eq r)
545+       MO_U_Lt r -> Just (MO_U_Ge r)
546+       MO_U_Gt r -> Just (MO_U_Le r)
547+       MO_U_Le r -> Just (MO_U_Gt r)
548+       MO_U_Ge r -> Just (MO_U_Lt r)
549+       MO_S_Lt r -> Just (MO_S_Ge r)
550+       MO_S_Gt r -> Just (MO_S_Le r)
551+       MO_S_Le r -> Just (MO_S_Gt r)
552+       MO_S_Ge r -> Just (MO_S_Lt r)
553+       MO_F_Eq r -> Just (MO_F_Ne r)
554+       MO_F_Ne r -> Just (MO_F_Eq r)
555+       MO_F_Ge r -> Just (MO_F_Le r)
556+       MO_F_Le r -> Just (MO_F_Ge r)   
557+       MO_F_Gt r -> Just (MO_F_Lt r)   
558+       MO_F_Lt r -> Just (MO_F_Gt r)   
559+       _other    -> Nothing
560+
561+-- ----------------------------------------------------------------------------
562+-- machOpResultType
563+
564+{- |
565+Returns the MachRep of the result of a MachOp.
566+-}
567+machOpResultType :: MachOp -> [CmmType] -> CmmType
568+machOpResultType mop tys =
569+  case mop of
570+    MO_Add {}          -> ty1  -- Preserve GC-ptr-hood
571+    MO_Sub {}          -> ty1  -- of first arg
572+    MO_Mul    r                -> cmmBits r
573+    MO_S_MulMayOflo r  -> cmmBits r
574+    MO_S_Quot r                -> cmmBits r
575+    MO_S_Rem  r                -> cmmBits r
576+    MO_S_Neg  r                -> cmmBits r
577+    MO_U_MulMayOflo r  -> cmmBits r
578+    MO_U_Quot r                -> cmmBits r
579+    MO_U_Rem  r                -> cmmBits r
580+
581+    MO_Eq {}           -> comparisonResultRep
582+    MO_Ne {}           -> comparisonResultRep
583+    MO_S_Ge {}         -> comparisonResultRep
584+    MO_S_Le {}         -> comparisonResultRep
585+    MO_S_Gt {}         -> comparisonResultRep
586+    MO_S_Lt {}         -> comparisonResultRep
587+
588+    MO_U_Ge {}         -> comparisonResultRep
589+    MO_U_Le {}         -> comparisonResultRep
590+    MO_U_Gt {}         -> comparisonResultRep
591+    MO_U_Lt {}         -> comparisonResultRep
592+
593+    MO_F_Add r         -> cmmFloat r
594+    MO_F_Sub r         -> cmmFloat r
595+    MO_F_Mul r         -> cmmFloat r
596+    MO_F_Quot r                -> cmmFloat r
597+    MO_F_Neg r         -> cmmFloat r
598+    MO_F_Eq  {}                -> comparisonResultRep
599+    MO_F_Ne  {}                -> comparisonResultRep
600+    MO_F_Ge  {}                -> comparisonResultRep
601+    MO_F_Le  {}                -> comparisonResultRep
602+    MO_F_Gt  {}                -> comparisonResultRep
603+    MO_F_Lt  {}                -> comparisonResultRep
604+
605+    MO_And {}          -> ty1  -- Used for pointer masking
606+    MO_Or {}           -> ty1
607+    MO_Xor {}          -> ty1
608+    MO_Not   r         -> cmmBits r
609+    MO_Shl   r         -> cmmBits r
610+    MO_U_Shr r         -> cmmBits r
611+    MO_S_Shr r         -> cmmBits r
612+
613+    MO_SS_Conv _ to    -> cmmBits to
614+    MO_UU_Conv _ to    -> cmmBits to
615+    MO_FS_Conv _ to    -> cmmBits to
616+    MO_SF_Conv _ to    -> cmmFloat to
617+    MO_FF_Conv _ to    -> cmmFloat to
618+
619+    MO_Pack   _ _       -> ty1
620+    MO_UnPack _ _       -> ty1
621+  where
622+    (ty1:_) = tys
623+
624+comparisonResultRep :: CmmType
625+comparisonResultRep = bWord  -- is it?
626+
627+
628+-- -----------------------------------------------------------------------------
629+-- machOpArgReps
630+
631+-- | This function is used for debugging only: we can check whether an
632+-- application of a MachOp is "type-correct" by checking that the MachReps of
633+-- its arguments are the same as the MachOp expects.  This is used when
634+-- linting a CmmExpr.
635+
636+machOpArgReps :: MachOp -> [Width]
637+machOpArgReps op =
638+  case op of
639+    MO_Add    r                -> [r,r]
640+    MO_Sub    r                -> [r,r]
641+    MO_Eq     r                -> [r,r]
642+    MO_Ne     r                -> [r,r]
643+    MO_Mul    r                -> [r,r]
644+    MO_S_MulMayOflo r  -> [r,r]
645+    MO_S_Quot r                -> [r,r]
646+    MO_S_Rem  r                -> [r,r]
647+    MO_S_Neg  r                -> [r]
648+    MO_U_MulMayOflo r  -> [r,r]
649+    MO_U_Quot r                -> [r,r]
650+    MO_U_Rem  r                -> [r,r]
651+
652+    MO_S_Ge r          -> [r,r]
653+    MO_S_Le r          -> [r,r]
654+    MO_S_Gt r          -> [r,r]
655+    MO_S_Lt r          -> [r,r]
656+
657+    MO_U_Ge r          -> [r,r]
658+    MO_U_Le r          -> [r,r]
659+    MO_U_Gt r          -> [r,r]
660+    MO_U_Lt r          -> [r,r]
661+
662+    MO_F_Add r         -> [r,r]
663+    MO_F_Sub r         -> [r,r]
664+    MO_F_Mul r         -> [r,r]
665+    MO_F_Quot r                -> [r,r]
666+    MO_F_Neg r         -> [r]
667+    MO_F_Eq  r         -> [r,r]
668+    MO_F_Ne  r         -> [r,r]
669+    MO_F_Ge  r         -> [r,r]
670+    MO_F_Le  r         -> [r,r]
671+    MO_F_Gt  r         -> [r,r]
672+    MO_F_Lt  r         -> [r,r]
673+
674+    MO_And   r         -> [r,r]
675+    MO_Or    r         -> [r,r]
676+    MO_Xor   r         -> [r,r]
677+    MO_Not   r         -> [r]
678+    MO_Shl   r         -> [r,wordWidth]
679+    MO_U_Shr r         -> [r,wordWidth]
680+    MO_S_Shr r         -> [r,wordWidth]
681+
682+    MO_SS_Conv from _  -> [from]
683+    MO_UU_Conv from _   -> [from]
684+    MO_SF_Conv from _  -> [from]
685+    MO_FS_Conv from _  -> [from]
686+    MO_FF_Conv from _  -> [from]
687+
688+    MO_Pack    _  r     -> [r]
689+    MO_UnPack  _  r     -> [r]
690+    MO_Shuffle _  r     -> [r]
691+
692+-------------------------------------------------------------------------
693+{-     Note [Signed vs unsigned]
694+       ~~~~~~~~~~~~~~~~~~~~~~~~~
695+Should a CmmType include a signed vs. unsigned distinction?
696+
697+This is very much like a "hint" in C-- terminology: it isn't necessary
698+in order to generate correct code, but it might be useful in that the
699+compiler can generate better code if it has access to higher-level
700+hints about data.  This is important at call boundaries, because the
701+definition of a function is not visible at all of its call sites, so
702+the compiler cannot infer the hints.
703+
704+Here in Cmm, we're taking a slightly different approach.  We include
705+the int vs. float hint in the MachRep, because (a) the majority of
706+platforms have a strong distinction between float and int registers,
707+and (b) we don't want to do any heavyweight hint-inference in the
708+native code backend in order to get good code.  We're treating the
709+hint more like a type: our Cmm is always completely consistent with
710+respect to hints.  All coercions between float and int are explicit.
711+
712+What about the signed vs. unsigned hint?  This information might be
713+useful if we want to keep sub-word-sized values in word-size
714+registers, which we must do if we only have word-sized registers.
715+
716+On such a system, there are two straightforward conventions for
717+representing sub-word-sized values:
718+
719+(a) Leave the upper bits undefined.  Comparison operations must
720+    sign- or zero-extend both operands before comparing them,
721+    depending on whether the comparison is signed or unsigned.
722+
723+(b) Always keep the values sign- or zero-extended as appropriate.
724+    Arithmetic operations must narrow the result to the appropriate
725+    size.
726+
727+A clever compiler might not use either (a) or (b) exclusively, instead
728+it would attempt to minimize the coercions by analysis: the same kind
729+of analysis that propagates hints around.  In Cmm we don't want to
730+have to do this, so we plump for having richer types and keeping the
731+type information consistent.
732+
733+If signed/unsigned hints are missing from MachRep, then the only
734+choice we have is (a), because we don't know whether the result of an
735+operation should be sign- or zero-extended.
736+
737+Many architectures have extending load operations, which work well
738+with (b).  To make use of them with (a), you need to know whether the
739+value is going to be sign- or zero-extended by an enclosing comparison
740+(for example), which involves knowing above the context.  This is
741+doable but more complex.
742+
743+Further complicating the issue is foreign calls: a foreign calling
744+convention can specify that signed 8-bit quantities are passed as
745+sign-extended 32 bit quantities, for example (this is the case on the
746+PowerPC).  So we *do* need sign information on foreign call arguments.
747+
748+Pros for adding signed vs. unsigned to MachRep:
749+
750+  - It would let us use convention (b) above, and get easier
751+    code generation for extending loads.
752+
753+  - Less information required on foreign calls.
754
755+  - MachOp type would be simpler
756+
757+Cons:
758+
759+  - More complexity
760+
761+  - What is the MachRep for a VanillaReg?  Currently it is
762+    always wordRep, but now we have to decide whether it is
763+    signed or unsigned.  The same VanillaReg can thus have
764+    different MachReps in different parts of the program.
765+
766+  - Extra coercions cluttering up expressions.
767+
768+Currently for GHC, the foreign call point is moot, because we do our
769+own promotion of sub-word-sized values to word-sized values.  The Int8
770+type is represnted by an Int# which is kept sign-extended at all times
771+(this is slightly naughty, because we're making assumptions about the
772+C calling convention rather early on in the compiler).  However, given
773+this, the cons outweigh the pros.
774+
775+-}
776+
777+^ ^ ^ ^ ^ ^ ^
778hunk ./compiler/cmm/CmmType.hs 5
779+    , b32p4, b64p2, f32p4, f64p2
780hunk ./compiler/cmm/CmmUtils.hs 49
781+primRepCmmType Int32Packed4Rep  = b32p4
782+primRepCmmType Int64Packed2Rep  = b64p2
783+primRepCmmType FloatPacked4Rep  = f32p4
784+primRepCmmType DoublePacked2Rep = f64p2
785hunk ./compiler/cmm/CmmUtils.hs 67
786+primRepForeignHint Int32Packed4Rep  = NoHint
787+primRepForeignHint Int64Packed2Rep  = NoHint
788+primRepForeignHint FloatPacked4Rep  = NoHint
789+primRepForeignHint DoublePacked2Rep = NoHint
790hunk ./compiler/cmm/OldCmm.hs 272
791+v v v v v v v
792+*************
793+
794+
795+data ForeignHint
796+  = NoHint | AddrHint | SignedHint
797+  deriving( Eq )
798+       -- Used to give extra per-argument or per-result
799+       -- information needed by foreign calling conventions
800+
801+
802+-- CallishMachOps tend to be implemented by foreign calls in some backends,
803+-- so we separate them out.  In Cmm, these can only occur in a
804+-- statement position, in contrast to an ordinary MachOp which can occur
805+-- anywhere in an expression.
806+data CallishMachOp
807+  = MO_F64_Pwr
808+  | MO_F64_Sin
809+  | MO_F64_Cos
810+  | MO_F64_Tan
811+  | MO_F64_Sinh
812+  | MO_F64_Cosh
813+  | MO_F64_Tanh
814+  | MO_F64_Asin
815+  | MO_F64_Acos
816+  | MO_F64_Atan
817+  | MO_F64_Log
818+  | MO_F64_Exp
819+  | MO_F64_Sqrt
820+  | MO_F32_Pwr
821+  | MO_F32_Sin
822+  | MO_F32_Cos
823+  | MO_F32_Tan
824+  | MO_F32_Sinh
825+  | MO_F32_Cosh
826+  | MO_F32_Tanh
827+  | MO_F32_Asin
828+  | MO_F32_Acos
829+  | MO_F32_Atan
830+  | MO_F32_Log
831+  | MO_F32_Exp
832+  | MO_F32_Sqrt
833+  | MO_F64P2_Sqrt
834+  | MO_F64P2_Recip
835+  | MO_F64P2_Rsqrt
836+  | MO_F64P2_AddSub
837+  | MO_F64P2_HorAdd
838+  | MO_F64P2_HorSub
839+  | MO_F64P2_Min
840+  | MO_F64P2_Max
841+  | MO_F32P4_Sqrt
842+  | MO_F32P4_Recip
843+  | MO_F32P4_Rsqrt
844+  -- packed comparison
845+  | MO_F32P4_Min
846+  | MO_F32P4_Max
847+  -- packed add/sub
848+  | MO_F32P4_AddSub
849+  | MO_F32P4_HorAdd
850+  | MO_F32P4_HorSub
851+  -- MO_F32P4_Ord    --   'ordered' SSE comparision
852+  -- MO_F32P4_UnO    -- 'unordered' SSE comparision
853+  -- what about shuffle?
854+  | MO_WriteBarrier
855+  | MO_Touch         -- Keep variables live (when using interior pointers)
856+  deriving (Eq, Show)
857+
858+
859+pprCallishMachOp :: CallishMachOp -> SDoc
860+pprCallishMachOp mo = text (show mo)
861
862+-----------------------------------------------------------------------------
863+--             Static Data
864+-----------------------------------------------------------------------------
865+
866+data Section
867+  = Text
868+  | Data
869+  | ReadOnlyData
870+  | RelocatableReadOnlyData
871+  | UninitialisedData
872+  | ReadOnlyData16     -- .rodata.cst16 on x86_64, 16-byte aligned
873+  | OtherSection String
874+
875+data CmmStatic
876+  = CmmStaticLit CmmLit       
877+       -- a literal value, size given by cmmLitRep of the literal.
878+  | CmmUninitialised Int
879+       -- uninitialised data, N bytes long
880+  | CmmAlign Int
881+       -- align to next N-byte boundary (N must be a power of 2).
882+  | CmmDataLabel CLabel
883+       -- label the current position in this section.
884+  | CmmString [Word8]
885+       -- string of 8-bit values only, not zero terminated.
886+
887+^ ^ ^ ^ ^ ^ ^
888addfile ./compiler/cmm/StackColor.hs
889hunk ./compiler/cmm/StackColor.hs 1
890+
891+module StackColor where
892+
893+import BlockId
894+import StackPlacements
895+import qualified GraphColor as Color
896+import CmmExpr
897+import CmmSpillReload
898+import DFMonad
899+import qualified GraphOps
900+import ZipCfg
901+import ZipCfgCmmRep
902+import ZipDataflow
903+
904+import Maybes
905+import Panic
906+import UniqSet
907+
908+-- import Data.List
909+
910+fold_edge_facts_b ::
911+  LastNode l => (DualLive -> a -> a) -> BackwardTransfers m l DualLive -> LGraph m l
912+                                     -> (BlockId -> DualLive) -> a -> a
913+fold_edge_facts_b f comp graph env z =
914+    foldl fold_block_facts z (postorder_dfs graph)
915+  where
916+    fold_block_facts z b =             
917+      let (h, l) = goto_end (ZipCfg.unzip b)
918+          last_in _ LastExit = fact_bot dualLiveLattice
919+          last_in env (LastOther l) = bt_last_in comp l env
920+      in head_fold h (last_in env l) z
921+    head_fold (ZHead h m)   out z = head_fold h (bt_middle_in comp m out) (f out z)
922+    head_fold (ZFirst id) out z = f (bt_first_in comp id out) (f out z)
923+
924+foldConflicts :: (RegSet -> a -> a) -> a -> LGraph Middle Last -> FuelMonad a
925+foldConflicts f z g@(LGraph entry _) =
926+  do env <- dualLiveness emptyBlockSet g
927+     let lookup id = lookupBlockEnv env id `orElse` fact_bot dualLiveLattice
928+         f' dual z = f (on_stack dual) z
929+     return $ fold_edge_facts_b f' (dualLiveTransfers entry emptyBlockSet) g lookup z
930+  --let env = runDFA dualLiveLattice (run_b_anal dualLiveness g >> getAllFacts)
931+  --    lookup id = lookupBlockEnv env id `orElse` fact_bot dualLiveLattice
932+  --    f' dual z = f (on_stack dual) z
933+  --in  fold_edge_facts_b f' dualLiveness g lookup z
934+
935+
936+type IGraph = Color.Graph LocalReg SlotClass StackPlacement
937+type ClassCount = [(SlotClass, Int)]
938+
939+buildIGraphAndCounts :: LGraph Middle Last -> FuelMonad (IGraph, ClassCount)
940+buildIGraphAndCounts g = igraph_and_counts
941+    where igraph_and_counts = foldConflicts add (Color.initGraph, zero) g
942+          zero = map (\c -> (c, 0)) allSlotClasses
943+          add live (igraph, counts) = (graphAddConflictSet live igraph,
944+                                       addSimulCounts (classCounts live) counts)
945+          addSimulCounts =
946+            zipWith (\(c, n) (c', n') -> if c == c' then (c, max n n')
947+                                         else panic "slot classes out of order")
948+          classCounts regs = foldUniqSet addReg zero regs
949+          addReg reg counts =
950+              let cls = slotClass reg in
951+              map (\(c, n) -> (c, if c == cls then n + 1 else n)) counts
952+                           
953+
954+-- | Add some conflict edges to the graph.
955+--     Conflicts between virtual and real regs are recorded as exclusions.
956+--
957+
958+graphAddConflictSet :: RegSet -> IGraph -> IGraph
959+graphAddConflictSet set graph = GraphOps.addConflicts set slotClass graph
960+
961+slotClass :: LocalReg -> SlotClass
962+slotClass (LocalReg _ ty) =
963+    case typeWidth ty of -- the horror, the horror
964+      W8   -> SlotClass32
965+      W16  -> SlotClass32
966+      W32  -> SlotClass32
967+      W64  -> SlotClass64
968+      W128 -> SlotClass128
969+      W80  -> SlotClass64
970+      W8_16 -> SlotClass128
971+      W16_8 -> SlotClass128
972+      W32_4 -> SlotClass128
973+      W64_2 -> SlotClass128
974+
975+{-
976+colorMe :: (IGraph, ClassCount) -> (IGraph, UniqSet LocalReg)
977+colorMe (igraph, counts) = Color.colorGraph starter_colors triv spill_max_degree igraph
978+    where starter_colors = allocate [] counts allStackSlots
979+          allocate prev [] colors = insert prev colors
980+          allocate prev ((c, n) : counts) colors =
981+              let go prev 0 colors = allocate prev counts colors
982+                  go prev n colors = let (p, colors') = getStackSlot c colors in
983+                                     go (p:prev) (n-1) colors'
984+              in  go prev n colors
985+          insert :: [StackPlacement] -> SlotSet -> SlotSet
986+          insert [] colors = colors
987+          insert (p:ps) colors = insert ps (extendSlotSet colors p)
988+          triv :: Color.Triv LocalReg SlotClass StackPlacement
989+          triv = trivColorable (mkSizeOf counts)
990+
991+spill_max_degree :: IGraph -> LocalReg
992+spill_max_degree igraph = Color.nodeId node
993+    where node = maximumBy (\n1 n2 -> compare
994+                               (sizeUniqSet $ Color.nodeConflicts n1)
995+                               (sizeUniqSet $ Color.nodeConflicts n2)) $
996+                 eltsUFM $ Color.graphMap igraph
997+
998+
999+type Worst = SlotClass -> (Int, Int, Int) -> Int
1000+
1001+trivColorable :: (SlotClass -> Int) ->
1002+                 SlotClass -> UniqSet LocalReg -> UniqSet StackPlacement -> Bool
1003+trivColorable sizeOf classN conflicts exclusions = squeeze < sizeOf classN
1004+  where        squeeze = worst classN counts
1005+        counts   = if isEmptyUniqSet exclusions then foldUniqSet acc zero conflicts
1006+                   else panic "exclusions in stack slots?!"
1007+        zero = (0, 0, 0)
1008+       acc r (word, dbl, quad) =
1009+            case slotClass r of
1010+              SlotClass32  -> (word+1, dbl, quad)
1011+              SlotClass64  -> (word, dbl+1, quad)
1012+              SlotClass128 -> (word, dbl, quad+1)
1013+        worst SlotClass128 (_, _, q) = q
1014+        worst SlotClass64  (_, d, q) = d + 2 * q
1015+        worst SlotClass32  (w, d, q) = w + 2 * d + 4 * q
1016+-}
1017+
1018+-- | number of placements available is from class and all larger classes
1019+mkSizeOf :: ClassCount -> (SlotClass -> Int)
1020+mkSizeOf counts = sizeOf
1021+    where sizeOf SlotClass32  = n32
1022+          sizeOf SlotClass64  = n64
1023+          sizeOf SlotClass128 = n128
1024+          n128 = (lookup SlotClass128 counts `orElse` 0)
1025+          n64  = (lookup SlotClass64  counts `orElse` 0) + 2 * n128
1026+          n32  = (lookup SlotClass32  counts `orElse` 0) + 2 * n32
1027hunk ./compiler/codeGen/CgCallConv.hs 106
1028+
1029+stdPattern [Int32Packed4Arg]  = Just ARG_X
1030+stdPattern [Int64Packed2Arg]  = Just ARG_X
1031+stdPattern [FloatPacked4Arg]  = Just ARG_X
1032+stdPattern [DoublePacked2Arg] = Just ARG_X
1033hunk ./compiler/codeGen/CgCallConv.hs 257
1034+slowCallPattern (Int32Packed4Arg: _)                   = (fsLit "stg_ap_x", 1)
1035+slowCallPattern (Int64Packed2Arg: _)                   = (fsLit "stg_ap_x", 1)
1036+slowCallPattern (FloatPacked4Arg: _)                   = (fsLit "stg_ap_x", 1)
1037+slowCallPattern (DoublePacked2Arg: _)                  = (fsLit "stg_ap_x", 1)
1038hunk ./compiler/codeGen/CgCallConv.hs 275
1039+dataReturnConvPrim Int32Packed4Arg  = CmmGlobal (PackedReg 1)
1040+dataReturnConvPrim Int64Packed2Arg  = CmmGlobal (PackedReg 1)
1041+dataReturnConvPrim FloatPacked4Arg  = CmmGlobal (PackedReg 1)
1042+dataReturnConvPrim DoublePacked2Arg = CmmGlobal (PackedReg 1)
1043hunk ./compiler/codeGen/CgPrimOp.hs 237
1044+emitPrimOp res IndexOffAddrOp_Int32Packed4    args _ = doIndexOffAddrOp Nothing b32p4 res args
1045+emitPrimOp res IndexOffAddrOp_Int64Packed2    args _ = doIndexOffAddrOp Nothing b64p2 res args
1046+emitPrimOp res IndexOffAddrOp_FloatPacked4    args _ = doIndexOffAddrOp Nothing f32p4 res args
1047+emitPrimOp res IndexOffAddrOp_DoublePacked2   args _ = doIndexOffAddrOp Nothing f64p2 res args
1048hunk ./compiler/codeGen/CgPrimOp.hs 260
1049+emitPrimOp res ReadOffAddrOp_Int32Packed4    args _ = doIndexOffAddrOp Nothing b32p4 res args
1050+emitPrimOp res ReadOffAddrOp_Int64Packed2    args _ = doIndexOffAddrOp Nothing b64p2 res args
1051+emitPrimOp res ReadOffAddrOp_FloatPacked4    args _ = doIndexOffAddrOp Nothing f32p4 res args
1052+emitPrimOp res ReadOffAddrOp_DoublePacked2   args _ = doIndexOffAddrOp Nothing f64p2 res args
1053hunk ./compiler/codeGen/CgPrimOp.hs 283
1054+emitPrimOp res IndexByteArrayOp_Int32Packed4    args _ = doIndexByteArrayOp Nothing b32p4  res args
1055+emitPrimOp res IndexByteArrayOp_Int64Packed2    args _ = doIndexByteArrayOp Nothing b64p2  res args
1056+emitPrimOp res IndexByteArrayOp_FloatPacked4    args _ = doIndexByteArrayOp Nothing f32p4  res args
1057+emitPrimOp res IndexByteArrayOp_DoublePacked2   args _ = doIndexByteArrayOp Nothing f64p2  res args
1058hunk ./compiler/codeGen/CgPrimOp.hs 306
1059+emitPrimOp res ReadByteArrayOp_Int32Packed4     args _ = doIndexByteArrayOp Nothing b32p4  res args
1060+emitPrimOp res ReadByteArrayOp_Int64Packed2     args _ = doIndexByteArrayOp Nothing b64p2  res args
1061+emitPrimOp res ReadByteArrayOp_FloatPacked4     args _ = doIndexByteArrayOp Nothing f32p4  res args
1062+emitPrimOp res ReadByteArrayOp_DoublePacked2    args _ = doIndexByteArrayOp Nothing f64p2  res args
1063hunk ./compiler/codeGen/CgPrimOp.hs 329
1064+emitPrimOp res WriteOffAddrOp_Int32Packed4     args _ = doWriteOffAddrOp Nothing b32p4 res args
1065+emitPrimOp res WriteOffAddrOp_Int64Packed2     args _ = doWriteOffAddrOp Nothing b64p2 res args
1066+emitPrimOp res WriteOffAddrOp_FloatPacked4     args _ = doWriteOffAddrOp Nothing f32p4 res args
1067+emitPrimOp res WriteOffAddrOp_DoublePacked2    args _ = doWriteOffAddrOp Nothing f64p2 res args
1068hunk ./compiler/codeGen/CgPrimOp.hs 352
1069+emitPrimOp res WriteByteArrayOp_Int32Packed4    args _ = doWriteByteArrayOp Nothing b32p4  res args
1070+emitPrimOp res WriteByteArrayOp_Int64Packed2    args _ = doWriteByteArrayOp Nothing b64p2  res args
1071+emitPrimOp res WriteByteArrayOp_FloatPacked4    args _ = doWriteByteArrayOp Nothing f32p4  res args
1072+emitPrimOp res WriteByteArrayOp_DoublePacked2   args _ = doWriteByteArrayOp Nothing f64p2  res args
1073hunk ./compiler/codeGen/CgPrimOp.hs 357
1074-
1075+emitPrimOp [res] Pack4Int32Op                    [arg1,arg2,arg3,arg4] _
1076+   = cmmPack [res] b32p4 [arg1,arg2,arg3,arg4]
1077+emitPrimOp [res] Pack2Int64Op                    [arg1,arg2]           _
1078+   = cmmPack [res] b64p2 [arg1,arg2]
1079+emitPrimOp [res] Pack4FloatOp                    [arg1,arg2,arg3,arg4] _
1080+   = cmmPack [res] f32p4 [arg1,arg2,arg3,arg4]
1081+emitPrimOp [res] Pack2DoubleOp                   [arg1,arg2]           _
1082+   = cmmPack [res] f64p2 [arg1,arg2]
1083+
1084hunk ./compiler/codeGen/CgPrimOp.hs 535
1085+-- Packed data types
1086+
1087+-- Int32Packed4
1088+translateOp Int32Packed4AddOp        = Just (MO_Add W32_4)
1089+translateOp Int32Packed4SubOp        = Just (MO_Sub W32_4)
1090+
1091+translateOp Int32Packed4EqOp         = Just (MO_Eq  W32_4)
1092+translateOp Int32Packed4NeOp         = Just (MO_Ne  W32_4)
1093+
1094+translateOp Int32Packed4MulOp        = Just (MO_Mul W32_4)
1095+translateOp Int32Packed4MulMayOfloOp = Just (MO_S_MulMayOflo W32_4)
1096+translateOp Int32Packed4QuotOp       = Just (MO_S_Quot W32_4)
1097+translateOp Int32Packed4RemOp        = Just (MO_S_Rem  W32_4)
1098+translateOp Int32Packed4NegOp        = Just (MO_S_Neg  W32_4)
1099+
1100+translateOp Int32Packed4SllOp       = Just (MO_Shl   W32_4)
1101+translateOp Int32Packed4SrlOp        = Just (MO_S_Shr W32_4)
1102+
1103+translateOp Int32Packed4AndOp        = Just (MO_And   W32_4)
1104+translateOp Int32Packed4OrOp         = Just (MO_Or    W32_4)
1105+translateOp Int32Packed4XorOp        = Just (MO_Xor   W32_4)
1106+translateOp Int32Packed4NotOp        = Just (MO_Not   W32_4)
1107+
1108+translateOp Int32Packed4GeOp         = Just (MO_S_Ge  W32_4)
1109+translateOp Int32Packed4LeOp         = Just (MO_S_Le  W32_4)
1110+translateOp Int32Packed4GtOp         = Just (MO_S_Gt  W32_4)
1111+translateOp Int32Packed4LtOp         = Just (MO_S_Lt  W32_4)
1112+
1113+-- Int64Packed2
1114+translateOp Int64Packed2AddOp        = Just (MO_Add W64_2)
1115+translateOp Int64Packed2SubOp        = Just (MO_Sub W64_2)
1116+
1117+translateOp Int64Packed2EqOp         = Just (MO_Eq  W64_2)
1118+translateOp Int64Packed2NeOp         = Just (MO_Ne  W64_2)
1119+
1120+translateOp Int64Packed2MulOp        = Just (MO_Mul W64_2)
1121+translateOp Int64Packed2MulMayOfloOp = Just (MO_S_MulMayOflo W64_2)
1122+translateOp Int64Packed2QuotOp       = Just (MO_S_Quot W64_2)
1123+translateOp Int64Packed2RemOp        = Just (MO_S_Rem  W64_2)
1124+translateOp Int64Packed2NegOp        = Just (MO_S_Neg  W64_2)
1125+
1126+translateOp Int64Packed2SllOp       = Just (MO_Shl   W64_2)
1127+translateOp Int64Packed2SrlOp        = Just (MO_S_Shr W64_2)
1128+
1129+translateOp Int64Packed2AndOp        = Just (MO_And   W64_2)
1130+translateOp Int64Packed2OrOp         = Just (MO_Or    W64_2)
1131+translateOp Int64Packed2XorOp        = Just (MO_Xor   W64_2)
1132+translateOp Int64Packed2NotOp        = Just (MO_Not   W64_2)
1133+
1134+translateOp Int64Packed2GeOp         = Just (MO_S_Ge  W64_2)
1135+translateOp Int64Packed2LeOp         = Just (MO_S_Le  W64_2)
1136+translateOp Int64Packed2GtOp         = Just (MO_S_Gt  W64_2)
1137+translateOp Int64Packed2LtOp         = Just (MO_S_Lt  W64_2)
1138+
1139+-- FloatPacked4
1140+translateOp FloatPacked4EqOp         = Just (MO_F_Eq  W32_4)
1141+translateOp FloatPacked4NeOp         = Just (MO_F_Ne  W32_4)
1142+translateOp FloatPacked4GeOp         = Just (MO_F_Ge  W32_4)
1143+translateOp FloatPacked4LeOp         = Just (MO_F_Le  W32_4)
1144+translateOp FloatPacked4GtOp         = Just (MO_F_Gt  W32_4)
1145+translateOp FloatPacked4LtOp         = Just (MO_F_Lt  W32_4)
1146+
1147+translateOp FloatPacked4AddOp        = Just (MO_F_Add  W32_4)
1148+translateOp FloatPacked4SubOp        = Just (MO_F_Sub  W32_4)
1149+translateOp FloatPacked4MulOp        = Just (MO_F_Mul  W32_4)
1150+translateOp FloatPacked4DivOp        = Just (MO_F_Quot W32_4)
1151+translateOp FloatPacked4NegOp        = Just (MO_F_Neg  W32_4)
1152+
1153+-- DoublePacked2
1154+translateOp DoublePacked2EqOp         = Just (MO_F_Eq  W64_2)
1155+translateOp DoublePacked2NeOp         = Just (MO_F_Ne  W64_2)
1156+translateOp DoublePacked2GeOp         = Just (MO_F_Ge  W64_2)
1157+translateOp DoublePacked2LeOp         = Just (MO_F_Le  W64_2)
1158+translateOp DoublePacked2GtOp         = Just (MO_F_Gt  W64_2)
1159+translateOp DoublePacked2LtOp         = Just (MO_F_Lt  W64_2)
1160+
1161+translateOp DoublePacked2AddOp        = Just (MO_F_Add  W64_2)
1162+translateOp DoublePacked2SubOp        = Just (MO_F_Sub  W64_2)
1163+translateOp DoublePacked2MulOp        = Just (MO_F_Mul  W64_2)
1164+translateOp DoublePacked2DivOp        = Just (MO_F_Quot W64_2)
1165+translateOp DoublePacked2NegOp        = Just (MO_F_Neg  W64_2)
1166+
1167+-- packed conversions
1168+translateOp Int32Packed42FloatPacked4Op  = Just (MO_SF_Conv W32_4 W32_4)
1169+translateOp FloatPacked42Int32Packed4Op  = Just (MO_FS_Conv W32_4 W32_4)
1170+
1171+translateOp Int64Packed22DoublePacked2Op = Just (MO_SF_Conv W64_2 W64_2)
1172+translateOp DoublePacked22Int64Packed2Op = Just (MO_FS_Conv W64_2 W64_2)
1173+
1174+translateOp Int32Packed42Int64Packed2Op  = Just (MO_SS_Conv W32_4 W64_2)
1175+translateOp Int64Packed22Int32Packed4Op  = Just (MO_SS_Conv W64_2 W32_4)
1176+
1177+translateOp FloatPacked42DoublePacked2Op = Just (MO_FF_Conv W32_4 W64_2)
1178+translateOp DoublePacked22FloatPacked4Op = Just (MO_FF_Conv W64_2 W32_4)
1179+
1180+-- Packing/Unpacking vector types
1181+
1182+translateOp UnPack1of4Int32Op  = Just (MO_UnPack 1 W32_4)
1183+translateOp UnPack2of4Int32Op  = Just (MO_UnPack 2 W32_4)
1184+translateOp UnPack3of4Int32Op  = Just (MO_UnPack 3 W32_4)
1185+translateOp UnPack4of4Int32Op  = Just (MO_UnPack 4 W32_4)
1186+
1187+translateOp UnPack1of2Int64Op  = Just (MO_UnPack 1 W64_2)
1188+translateOp UnPack2of2Int64Op  = Just (MO_UnPack 2 W64_2)
1189+
1190+translateOp UnPack1of4FloatOp  = Just (MO_UnPack 1 W32_4)
1191+translateOp UnPack2of4FloatOp  = Just (MO_UnPack 2 W32_4)
1192+translateOp UnPack3of4FloatOp  = Just (MO_UnPack 3 W32_4)
1193+translateOp UnPack4of4FloatOp  = Just (MO_UnPack 4 W32_4)
1194+
1195+translateOp UnPack1of2DoubleOp = Just (MO_UnPack 1 W64_2)
1196+translateOp UnPack2of2DoubleOp = Just (MO_UnPack 2 W64_2)
1197+
1198hunk ./compiler/codeGen/CgPrimOp.hs 682
1199+callishOp DoublePacked2SqrtOp  = Just MO_F64P2_Sqrt
1200+callishOp FloatPacked4SqrtOp   = Just MO_F32P4_Sqrt
1201+
1202hunk ./compiler/codeGen/CgPrimOp.hs 755
1203+-- ----------------------------------------------------------------------------
1204+-- pack helper
1205+
1206+cmmPack :: CmmFormals  -- where to put the results
1207+       -> CmmType   -- packed type
1208+        -> [CmmExpr] -- arguments
1209+       -> Code
1210+cmmPack [res] typ [arg1,arg2]
1211+    | isPacked128 typ
1212+    = let wid = typeWidth typ
1213+      in stmtC (CmmAssign (CmmLocal res)
1214+                (CmmMachOp (MO_Pack 2 wid) [arg1,arg2]))
1215+cmmPack [res] typ [arg1,arg2,arg3,arg4]
1216+    | isPacked128 typ
1217+    = let wid = typeWidth typ
1218+      -- magic constants: bitvectors for shuffle sequence
1219+      in stmtsC [CmmAssign (CmmLocal res)
1220+                (CmmMachOp (MO_Shuffle 0 wid) [arg1,arg2])
1221+         ,CmmAssign (CmmLocal res)
1222+                (CmmMachOp (MO_Shuffle 8 wid) [CmmReg (CmmLocal res),res])
1223+         ,CmmAssign (CmmLocal res)
1224+                (CmmMachOp (MO_Shuffle 2 wid) [CmmReg (CmmLocal res),arg3])
1225+         ,CmmAssign (CmmLocal res)
1226+                (CmmMachOp (MO_Shuffle 16 wid) [CmmReg (CmmLocal res),arg3])
1227+         ,CmmAssign (CmmLocal res)
1228+                (CmmMachOp (MO_Shuffle 16 wid) [CmmReg (CmmLocal res),arg3])]
1229+
1230hunk ./compiler/codeGen/CgPrimOp.hs 796
1231+
1232hunk ./compiler/codeGen/CgUtils.hs 477
1233+#ifdef CALLER_SAVES_P1
1234+callerSaves (PackedReg 1)       = True
1235+#endif
1236+#ifdef CALLER_SAVES_P2
1237+callerSaves (PackedReg 2)       = True
1238+#endif
1239+#ifdef CALLER_SAVES_P3
1240+callerSaves (PackedReg 3)       = True
1241+#endif
1242+#ifdef CALLER_SAVES_P4
1243+callerSaves (PackedReg 4)       = True
1244+#endif
1245+#ifdef CALLER_SAVES_P5
1246+callerSaves (PackedReg 5)       = True
1247+#endif
1248+#ifdef CALLER_SAVES_P6
1249+callerSaves (PackedReg 6)       = True
1250+#endif
1251+#ifdef CALLER_SAVES_P7
1252+callerSaves (PackedReg 7)       = True
1253+#endif
1254+#ifdef CALLER_SAVES_P8
1255+callerSaves (PackedReg 8)       = True
1256+#endif
1257hunk ./compiler/codeGen/CgUtils.hs 546
1258+baseRegOffset (PackedReg 1)       = oFFSET_StgRegTable_rP1
1259+baseRegOffset (PackedReg 2)       = oFFSET_StgRegTable_rP2
1260+baseRegOffset (PackedReg 3)       = oFFSET_StgRegTable_rP3
1261+baseRegOffset (PackedReg 4)       = oFFSET_StgRegTable_rP4
1262+baseRegOffset (PackedReg 5)       = oFFSET_StgRegTable_rP5
1263+baseRegOffset (PackedReg 6)       = oFFSET_StgRegTable_rP6
1264+baseRegOffset (PackedReg 7)       = oFFSET_StgRegTable_rP7
1265+baseRegOffset (PackedReg 8)       = oFFSET_StgRegTable_rP8
1266hunk ./compiler/codeGen/SMRep.lhs 127
1267+  | Int32Packed4Arg  -- 128-bit 4 packed signed 32 bit integers
1268+  | Int64Packed2Arg  -- 128-bit 2 packed signed 64 bit integers
1269+  | FloatPacked4Arg  -- 128-bit 4 packed floats
1270+  | DoublePacked2Arg -- 128-bit 2 packed doubles
1271hunk ./compiler/codeGen/SMRep.lhs 140
1272+    ppr Int32Packed4Arg  = ptext (sLit "I32P4_")
1273+    ppr Int64Packed2Arg  = ptext (sLit "I32P2_")
1274+    ppr FloatPacked4Arg  = ptext (sLit "FP4_")
1275+    ppr DoublePacked2Arg = ptext (sLit "DP2_")
1276hunk ./compiler/codeGen/SMRep.lhs 151
1277+argMachRep Int32Packed4Arg  = b32p4
1278+argMachRep Int64Packed2Arg  = b64p2
1279+argMachRep FloatPacked4Arg  = f32p4
1280+argMachRep DoublePacked2Arg = f64p2
1281hunk ./compiler/codeGen/SMRep.lhs 167
1282+primRepToCgRep Int32Packed4Rep  = Int32Packed4Arg
1283+primRepToCgRep Int64Packed2Rep  = Int64Packed2Arg
1284+primRepToCgRep FloatPacked4Rep  = FloatPacked4Arg
1285+primRepToCgRep DoublePacked2Rep = DoublePacked2Arg
1286hunk ./compiler/codeGen/SMRep.lhs 210
1287+isFloatingArg FloatPacked4Arg = True
1288+isFloatingArg DoublePacked2Arg = True
1289hunk ./compiler/codeGen/SMRep.lhs 236
1290+cgRepSizeB Int32Packed4Arg  = 16
1291+cgRepSizeB Int64Packed2Arg  = 16
1292+cgRepSizeB FloatPacked4Arg  = 16
1293+cgRepSizeB DoublePacked2Arg = 16
1294hunk ./compiler/codeGen/SMRep.lhs 246
1295+cgRepSizeW Int32Packed4Arg  = 4
1296+cgRepSizeW Int64Packed2Arg  = 4
1297+cgRepSizeW FloatPacked4Arg  = 4
1298+cgRepSizeW DoublePacked2Arg = 4
1299hunk ./compiler/codeGen/StgCmmLayout.hs 215
1300+          | X   -- Packed
1301+
1302hunk ./compiler/codeGen/StgCmmLayout.hs 224
1303+  ppr X = text "X"
1304hunk ./compiler/codeGen/StgCmmLayout.hs 236
1305+toLRep Int32Packed4Rep  = X
1306+toLRep Int64Packed2Rep  = X
1307+toLRep FloatPacked4Rep  = X
1308+toLRep DoublePacked2Rep = X
1309hunk ./compiler/codeGen/StgCmmLayout.hs 255
1310+lRepSizeW X = 4
1311hunk ./compiler/codeGen/StgCmmLayout.hs 358
1312+        [X] -> Just ARG_X
1313hunk ./compiler/codeGen/StgCmmPrim.hs 313
1314+emitPrimOp res IndexOffAddrOp_Int32Packed4    args = doIndexOffAddrOp Nothing b32p4 res args
1315+emitPrimOp res IndexOffAddrOp_Int64Packed2    args = doIndexOffAddrOp Nothing b64p2 res args
1316+emitPrimOp res IndexOffAddrOp_FloatPacked4    args = doIndexOffAddrOp Nothing f32p4 res args
1317+emitPrimOp res IndexOffAddrOp_DoublePacked2   args = doIndexOffAddrOp Nothing f64p2 res args
1318hunk ./compiler/codeGen/StgCmmPrim.hs 336
1319+emitPrimOp res ReadOffAddrOp_Int32Packed4    args = doIndexOffAddrOp Nothing b32p4 res args
1320+emitPrimOp res ReadOffAddrOp_Int64Packed2    args = doIndexOffAddrOp Nothing b64p2 res args
1321+emitPrimOp res ReadOffAddrOp_FloatPacked4    args = doIndexOffAddrOp Nothing f32p4 res args
1322+emitPrimOp res ReadOffAddrOp_DoublePacked2   args = doIndexOffAddrOp Nothing f64p2 res args
1323hunk ./compiler/codeGen/StgCmmPrim.hs 359
1324+emitPrimOp res IndexByteArrayOp_Int32Packed4    args = doIndexByteArrayOp Nothing b32p4  res args
1325+emitPrimOp res IndexByteArrayOp_Int64Packed2    args = doIndexByteArrayOp Nothing b64p2  res args
1326+emitPrimOp res IndexByteArrayOp_FloatPacked4    args = doIndexByteArrayOp Nothing f32p4  res args
1327+emitPrimOp res IndexByteArrayOp_DoublePacked2   args = doIndexByteArrayOp Nothing f64p2  res args
1328hunk ./compiler/codeGen/StgCmmPrim.hs 382
1329+emitPrimOp res ReadByteArrayOp_Int32Packed4     args = doIndexByteArrayOp Nothing b32p4  res args
1330+emitPrimOp res ReadByteArrayOp_Int64Packed2     args = doIndexByteArrayOp Nothing b64p2  res args
1331+emitPrimOp res ReadByteArrayOp_FloatPacked4     args = doIndexByteArrayOp Nothing f32p4  res args
1332+emitPrimOp res ReadByteArrayOp_DoublePacked2    args = doIndexByteArrayOp Nothing f64p2  res args
1333hunk ./compiler/codeGen/StgCmmPrim.hs 405
1334+emitPrimOp res WriteOffAddrOp_Int32Packed4     args = doWriteOffAddrOp Nothing res args
1335+emitPrimOp res WriteOffAddrOp_Int64Packed2     args = doWriteOffAddrOp Nothing res args
1336+emitPrimOp res WriteOffAddrOp_FloatPacked4     args = doWriteOffAddrOp Nothing res args
1337+emitPrimOp res WriteOffAddrOp_DoublePacked2    args = doWriteOffAddrOp Nothing res args
1338hunk ./compiler/codeGen/StgCmmPrim.hs 428
1339+emitPrimOp res WriteByteArrayOp_Int32Packed4    args = doWriteByteArrayOp Nothing res args
1340+emitPrimOp res WriteByteArrayOp_Int64Packed2    args = doWriteByteArrayOp Nothing res args
1341+emitPrimOp res WriteByteArrayOp_FloatPacked4    args = doWriteByteArrayOp Nothing res args
1342+emitPrimOp res WriteByteArrayOp_DoublePacked2   args = doWriteByteArrayOp Nothing res args
1343hunk ./compiler/codeGen/StgCmmPrim.hs 433
1344+emitPrimOp [res] Pack4Int32Op                    [arg1,arg2,arg3,arg4] _
1345+   = cmmPack [res] b32p4 [arg1,arg2,arg3,arg4]
1346+emitPrimOp [res] Pack2Int64Op                    [arg1,arg2]           _
1347+   = cmmPack [res] b64p2 [arg1,arg2]
1348+emitPrimOp [res] Pack4FloatOp                    [arg1,arg2,arg3,arg4] _
1349+   = cmmPack [res] f32p4 [arg1,arg2,arg3,arg4]
1350+emitPrimOp [res] Pack2DoubleOp                   [arg1,arg2]           _
1351+   = cmmPack [res] f64p2 [arg1,arg2]
1352hunk ./compiler/codeGen/StgCmmPrim.hs 604
1353+-- Packed data types
1354+
1355+-- Int32Packed4
1356+translateOp Int32Packed4AddOp        = Just (MO_Add W32_4)
1357+translateOp Int32Packed4SubOp        = Just (MO_Sub W32_4)
1358+
1359+translateOp Int32Packed4EqOp         = Just (MO_Eq  W32_4)
1360+translateOp Int32Packed4NeOp         = Just (MO_Ne  W32_4)
1361+
1362+translateOp Int32Packed4MulOp        = Just (MO_Mul W32_4)
1363+translateOp Int32Packed4MulMayOfloOp = Just (MO_S_MulMayOflo W32_4)
1364+translateOp Int32Packed4QuotOp       = Just (MO_S_Quot W32_4)
1365+translateOp Int32Packed4RemOp        = Just (MO_S_Rem  W32_4)
1366+translateOp Int32Packed4NegOp        = Just (MO_S_Neg  W32_4)
1367+
1368+translateOp Int32Packed4SllOp       = Just (MO_Shl   W32_4)
1369+translateOp Int32Packed4SrlOp        = Just (MO_S_Shr W32_4)
1370+
1371+translateOp Int32Packed4AndOp        = Just (MO_And   W32_4)
1372+translateOp Int32Packed4OrOp         = Just (MO_Or    W32_4)
1373+translateOp Int32Packed4XorOp        = Just (MO_Xor   W32_4)
1374+translateOp Int32Packed4NotOp        = Just (MO_Not   W32_4)
1375+
1376+translateOp Int32Packed4GeOp         = Just (MO_S_Ge  W32_4)
1377+translateOp Int32Packed4LeOp         = Just (MO_S_Le  W32_4)
1378+translateOp Int32Packed4GtOp         = Just (MO_S_Gt  W32_4)
1379+translateOp Int32Packed4LtOp         = Just (MO_S_Lt  W32_4)
1380+
1381+-- Int64Packed2
1382+translateOp Int64Packed2AddOp        = Just (MO_Add W64_2)
1383+translateOp Int64Packed2SubOp        = Just (MO_Sub W64_2)
1384+
1385+translateOp Int64Packed2EqOp         = Just (MO_Eq  W64_2)
1386+translateOp Int64Packed2NeOp         = Just (MO_Ne  W64_2)
1387+
1388+translateOp Int64Packed2MulOp        = Just (MO_Mul W64_2)
1389+translateOp Int64Packed2MulMayOfloOp = Just (MO_S_MulMayOflo W64_2)
1390+translateOp Int64Packed2QuotOp       = Just (MO_S_Quot W64_2)
1391+translateOp Int64Packed2RemOp        = Just (MO_S_Rem  W64_2)
1392+translateOp Int64Packed2NegOp        = Just (MO_S_Neg  W64_2)
1393+
1394+translateOp Int64Packed2SllOp       = Just (MO_Shl   W64_2)
1395+translateOp Int64Packed2SrlOp        = Just (MO_S_Shr W64_2)
1396+
1397+translateOp Int64Packed2AndOp        = Just (MO_And   W64_2)
1398+translateOp Int64Packed2OrOp         = Just (MO_Or    W64_2)
1399+translateOp Int64Packed2XorOp        = Just (MO_Xor   W64_2)
1400+translateOp Int64Packed2NotOp        = Just (MO_Not   W64_2)
1401+
1402+translateOp Int64Packed2GeOp         = Just (MO_S_Ge  W64_2)
1403+translateOp Int64Packed2LeOp         = Just (MO_S_Le  W64_2)
1404+translateOp Int64Packed2GtOp         = Just (MO_S_Gt  W64_2)
1405+translateOp Int64Packed2LtOp         = Just (MO_S_Lt  W64_2)
1406+
1407+-- FloatPacked4
1408+translateOp FloatPacked4EqOp         = Just (MO_F_Eq  W32_4)
1409+translateOp FloatPacked4NeOp         = Just (MO_F_Ne  W32_4)
1410+translateOp FloatPacked4GeOp         = Just (MO_F_Ge  W32_4)
1411+translateOp FloatPacked4LeOp         = Just (MO_F_Le  W32_4)
1412+translateOp FloatPacked4GtOp         = Just (MO_F_Gt  W32_4)
1413+translateOp FloatPacked4LtOp         = Just (MO_F_Lt  W32_4)
1414+
1415+translateOp FloatPacked4AddOp        = Just (MO_F_Add  W32_4)
1416+translateOp FloatPacked4SubOp        = Just (MO_F_Sub  W32_4)
1417+translateOp FloatPacked4MulOp        = Just (MO_F_Mul  W32_4)
1418+translateOp FloatPacked4DivOp        = Just (MO_F_Quot W32_4)
1419+translateOp FloatPacked4NegOp        = Just (MO_F_Neg  W32_4)
1420+
1421+-- DoublePacked2
1422+translateOp DoublePacked2EqOp         = Just (MO_F_Eq  W64_2)
1423+translateOp DoublePacked2NeOp         = Just (MO_F_Ne  W64_2)
1424+translateOp DoublePacked2GeOp         = Just (MO_F_Ge  W64_2)
1425+translateOp DoublePacked2LeOp         = Just (MO_F_Le  W64_2)
1426+translateOp DoublePacked2GtOp         = Just (MO_F_Gt  W64_2)
1427+translateOp DoublePacked2LtOp         = Just (MO_F_Lt  W64_2)
1428+
1429+translateOp DoublePacked2AddOp        = Just (MO_F_Add  W64_2)
1430+translateOp DoublePacked2SubOp        = Just (MO_F_Sub  W64_2)
1431+translateOp DoublePacked2MulOp        = Just (MO_F_Mul  W64_2)
1432+translateOp DoublePacked2DivOp        = Just (MO_F_Quot W64_2)
1433+translateOp DoublePacked2NegOp        = Just (MO_F_Neg  W64_2)
1434+
1435+-- packed conversions
1436+translateOp Int32Packed42FloatPacked4Op  = Just (MO_SF_Conv W32_4 W32_4)
1437+translateOp FloatPacked42Int32Packed4Op  = Just (MO_FS_Conv W32_4 W32_4)
1438+
1439+translateOp Int64Packed22DoublePacked2Op = Just (MO_SF_Conv W64_2 W64_2)
1440+translateOp DoublePacked22Int64Packed2Op = Just (MO_FS_Conv W64_2 W64_2)
1441+
1442+translateOp Int32Packed42Int64Packed2Op  = Just (MO_SS_Conv W32_4 W64_2)
1443+translateOp Int64Packed22Int32Packed4Op  = Just (MO_SS_Conv W64_2 W32_4)
1444+
1445+translateOp FloatPacked42DoublePacked2Op = Just (MO_FF_Conv W32_4 W64_2)
1446+translateOp DoublePacked22FloatPacked4Op = Just (MO_FF_Conv W64_2 W32_4)
1447+
1448+-- Unpacking vector types
1449+
1450+translateOp UnPack1of4Int32Op  = Just (MO_UnPack W32_4 1)
1451+translateOp UnPack2of4Int32Op  = Just (MO_UnPack W32_4 2)
1452+translateOp UnPack3of4Int32Op  = Just (MO_UnPack W32_4 3)
1453+translateOp UnPack4of4Int32Op  = Just (MO_UnPack W32_4 4)
1454+
1455+translateOp UnPack1of2Int64Op  = Just (MO_UnPack W64_2 1)
1456+translateOp UnPack2of2Int64Op  = Just (MO_UnPack W64_2 2)
1457+
1458+translateOp UnPack1of4FloatOp  = Just (MO_UnPack W32_4 1)
1459+translateOp UnPack2of4FloatOp  = Just (MO_UnPack W32_4 2)
1460+translateOp UnPack3of4FloatOp  = Just (MO_UnPack W32_4 3)
1461+translateOp UnPack4of4FloatOp  = Just (MO_UnPack W32_4 4)
1462+
1463+translateOp UnPack1of2DoubleOp = Just (MO_UnPack W64_2 1)
1464+translateOp UnPack2of2DoubleOp = Just (MO_UnPack W64_2 2)
1465+
1466hunk ./compiler/codeGen/StgCmmPrim.hs 751
1467+callishOp DoublePacked2SqrtOp  = Just MO_F64P2_Sqrt
1468+callishOp FloatPacked4SqrtOp   = Just MO_F32P4_Sqrt
1469+
1470hunk ./compiler/codeGen/StgCmmPrim.hs 821
1471+-- ----------------------------------------------------------------------------
1472+-- pack helper
1473+
1474+cmmPack :: CmmFormals  -- where to put the results
1475+       -> CmmType   -- packed type
1476+        -> [CmmExpr] -- arguments
1477+       -> Code
1478+cmmPack [res] typ [arg1,arg2]
1479+    | isPacked128 typ
1480+    = let wid = typeWidth typ
1481+      in emit (mkAssign (CmmAssign (CmmLocal res)
1482+                (CmmMachOp (MO_Pack wid 2) [arg1,arg2])))
1483+cmmPack [res] typ [arg1,arg2,arg3,arg4]
1484+    | isPacked128 typ
1485+    = let wid = typeWidth typ
1486+      in emit catAGraphs [CmmAssign (CmmLocal res)
1487+                (CmmMachOp (MO_Pack wid 2) [arg1,arg2])
1488+         ,CmmAssign (CmmLocal res)
1489+                (CmmMachOp (MO_Pack wid 3) [(CmmReg res),arg3])
1490+         ,CmmAssign (CmmLocal res)
1491+                (CmmMachOp (MO_Pack wid 4) [(CmmReg res),arg4])]
1492+
1493hunk ./compiler/nativeGen/Size.hs 48
1494+        | II128
1495hunk ./compiler/nativeGen/Size.hs 52
1496+        | FF128
1497hunk ./compiler/nativeGen/Size.hs 64
1498+        W128    -> II128
1499+        W32_4   -> II128
1500+        W64_2   -> II128
1501hunk ./compiler/nativeGen/Size.hs 76
1502+        W128    -> FF128
1503+        W32_4   -> FF128
1504+        W64_2   -> FF128
1505hunk ./compiler/nativeGen/Size.hs 89
1506+        FF128   -> True
1507hunk ./compiler/nativeGen/Size.hs 108
1508+        II128           -> W128
1509hunk ./compiler/nativeGen/Size.hs 112
1510-       
1511+       FF128           -> W128
1512hunk ./compiler/nativeGen/X86/CodeGen.hs 1912
1513+
1514hunk ./compiler/nativeGen/X86/Ppr.hs 295
1515+v v v v v v v
1516+               II8   -> sLit "b"
1517+               II16  -> sLit "w"
1518+               II32  -> sLit "l"
1519+               II64  -> sLit "q"
1520+                II128 -> sLit "vw"
1521+               FF32  -> sLit "ss"      -- "scalar single-precision float" (SSE2)
1522+               FF64  -> sLit "sd"      -- "scalar double-precision float" (SSE2)
1523+               FF80  -> sLit "t"
1524+                FF128 -> sLit "vf"
1525+               )
1526+*************
1527hunk ./compiler/nativeGen/X86/Ppr.hs 315
1528+^ ^ ^ ^ ^ ^ ^
1529hunk ./compiler/prelude/PrelNames.lhs 941
1530+    int32Packed4PrimTyConKey, int64Packed2PrimTyConKey,
1531+    floatPacked4PrimTyConKey, doublePacked2PrimTyConKey,
1532hunk ./compiler/prelude/PrelNames.lhs 981
1533+int32Packed4PrimTyConKey                = mkPreludeTyConUnique 38
1534+int64Packed2PrimTyConKey                = mkPreludeTyConUnique 39
1535+floatPacked4PrimTyConKey                = mkPreludeTyConUnique 40
1536+doublePacked2PrimTyConKey               = mkPreludeTyConUnique 41
1537hunk ./compiler/prelude/TysPrim.lhs 26
1538+        int32Packed4PrimTyCon,    int32Packed4PrimTy,
1539+        int64Packed2PrimTyCon,    int64Packed2PrimTy,
1540+        floatPacked4PrimTyCon,    floatPacked4PrimTy,
1541+        doublePacked2PrimTyCon,   doublePacked2PrimTy,
1542+
1543hunk ./compiler/prelude/TysPrim.lhs 94
1544+    , int32Packed4PrimTyCon
1545+    , int64Packed2PrimTyCon
1546+    , floatPacked4PrimTyCon
1547+    , doublePacked2PrimTyCon
1548hunk ./compiler/prelude/TysPrim.lhs 123
1549-charPrimTyConName, intPrimTyConName, int32PrimTyConName, int64PrimTyConName, wordPrimTyConName, word32PrimTyConName, word64PrimTyConName, addrPrimTyConName, floatPrimTyConName, doublePrimTyConName, statePrimTyConName, realWorldTyConName, arrayPrimTyConName, byteArrayPrimTyConName, mutableArrayPrimTyConName, mutableByteArrayPrimTyConName, mutVarPrimTyConName, mVarPrimTyConName, tVarPrimTyConName, stablePtrPrimTyConName, stableNamePrimTyConName, bcoPrimTyConName, weakPrimTyConName, threadIdPrimTyConName :: Name
1550+charPrimTyConName, intPrimTyConName, int32PrimTyConName, int64PrimTyConName, wordPrimTyConName, word32PrimTyConName, word64PrimTyConName, addrPrimTyConName, floatPrimTyConName, doublePrimTyConName, int32Packed4PrimTyConName, int64Packed2PrimTyConName, floatPacked4PrimTyConName, doublePacked2PrimTyConName, statePrimTyConName, realWorldTyConName, arrayPrimTyConName, byteArrayPrimTyConName, mutableArrayPrimTyConName, mutableByteArrayPrimTyConName, mutVarPrimTyConName, mVarPrimTyConName, tVarPrimTyConName, stablePtrPrimTyConName, stableNamePrimTyConName, bcoPrimTyConName, weakPrimTyConName, threadIdPrimTyConName :: Name
1551hunk ./compiler/prelude/TysPrim.lhs 134
1552+int32Packed4PrimTyConName     = mkPrimTc (fsLit "Int32Packed4#") int32Packed4PrimTyConKey int32Packed4PrimTyCon
1553+int64Packed2PrimTyConName     = mkPrimTc (fsLit "Int64Packed2#") int64Packed2PrimTyConKey int64Packed2PrimTyCon
1554+floatPacked4PrimTyConName     = mkPrimTc (fsLit "FloatPacked4#") floatPacked4PrimTyConKey floatPacked4PrimTyCon
1555+doublePacked2PrimTyConName    = mkPrimTc (fsLit "DoublePacked2#") doublePacked2PrimTyConKey doublePacked2PrimTyCon
1556hunk ./compiler/prelude/TysPrim.lhs 383
1557+
1558+int32Packed4PrimTy :: Type
1559+int32Packed4PrimTy     = mkTyConTy int32Packed4PrimTyCon
1560+int32Packed4PrimTyCon  :: TyCon
1561+int32Packed4PrimTyCon  = pcPrimTyCon0 int32Packed4PrimTyConName Int32Packed4Rep
1562+
1563+int64Packed2PrimTy :: Type
1564+int64Packed2PrimTy     = mkTyConTy int64Packed2PrimTyCon
1565+int64Packed2PrimTyCon  :: TyCon
1566+int64Packed2PrimTyCon  = pcPrimTyCon0 int64Packed2PrimTyConName Int64Packed2Rep
1567+
1568+floatPacked4PrimTy :: Type
1569+floatPacked4PrimTy     = mkTyConTy floatPacked4PrimTyCon
1570+floatPacked4PrimTyCon  :: TyCon
1571+floatPacked4PrimTyCon  = pcPrimTyCon0 floatPacked4PrimTyConName FloatPacked4Rep
1572+
1573+doublePacked2PrimTy :: Type
1574+doublePacked2PrimTy    = mkTyConTy doublePacked2PrimTyCon
1575+doublePacked2PrimTyCon :: TyCon
1576+doublePacked2PrimTyCon = pcPrimTyCon0 doublePacked2PrimTyConName DoublePacked2Rep
1577hunk ./compiler/prelude/primops.txt.pp 570
1578+------------------------------------------------------------------------
1579+section "Int32Packed4#"
1580+       {Operations on packed 32 bit signed integers.}
1581+------------------------------------------------------------------------
1582+
1583+primtype Int32Packed4#
1584+
1585+primop   Int32Packed4AddOp    "plusInt32Packed4#"    Dyadic
1586+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1587+   with commutable = True
1588+
1589+primop   Int32Packed4SubOp    "minusInt32Packed4#"    Dyadic   
1590+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1591+
1592+primop   Int32Packed4MulOp    "timesInt32Packed4#"
1593+   Dyadic   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1594+   {Low word of signed integer multiply.}
1595+   with commutable = True
1596+
1597+primop   Int32Packed4MulMayOfloOp  "mulInt32Packed4MayOflo#"
1598+   Dyadic   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1599+   with commutable = True
1600+
1601+primop   Int32Packed4QuotOp    "quotInt32Packed4#"    Dyadic
1602+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1603+   {Rounds towards zero.}
1604+   with can_fail = True
1605+
1606+primop   Int32Packed4RemOp    "remInt32Packed4#"    Dyadic
1607+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1608+   {Satisfies \texttt{(quotInt32Packed4\# x y) *\# y +\# (remInt32Packed4\# x y) == x}.}
1609+   with can_fail = True
1610+
1611+primop   Int32Packed4NegOp    "negateInt32Packed4#"    Monadic   
1612+   Int32Packed4# -> Int32Packed4#
1613+
1614+primop   Int32Packed4AndOp   "andInt32Packed4#"   Dyadic   
1615+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1616+   with commutable = True
1617+
1618+primop   Int32Packed4OrOp   "orInt32Packed4#"   Dyadic   
1619+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1620+   with commutable = True
1621+
1622+primop   Int32Packed4XorOp   "xorInt32Packed4#"   Dyadic   
1623+   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1624+   with commutable = True
1625+
1626+primop   Int32Packed4NotOp   "notInt32Packed4#"   Monadic   
1627+   Int32Packed4# -> Int32Packed4#
1628+
1629+primop   Int32Packed4SllOp   "uncheckedInt32Packed4ShiftL#" GenPrimOp 
1630+   Int32Packed4# -> Int# -> Int32Packed4#
1631+        {Shift left.  Result undefined if shift amount is not
1632+          in the range 0 to word size - 1 inclusive.}
1633+primop   Int32Packed4SrlOp   "uncheckedInt32Packe4ShiftRL#" GenPrimOp
1634+  Int32Packed4# -> Int# -> Int32Packed4#
1635+        {Shift right logical.  Result undefined if shift amount is not
1636+          in the range 0 to word size - 1 inclusive.}
1637+
1638+primop   Int32Packed4GtOp  "gtInt32Packed4#"   Compare   
1639+   Int32Packed4# -> Int32Packed4# -> Bool
1640+primop   Int32Packed4GeOp  "geInt32Packed4#"   Compare   
1641+   Int32Packed4# -> Int32Packed4# -> Bool
1642+
1643+primop   Int32Packed4EqOp  "eqInt32Packed4#"   Compare
1644+   Int32Packed4# -> Int32Packed4# -> Bool
1645+   with commutable = True
1646+
1647+primop   Int32Packed4NeOp  "neqInt32Packed4#"   Compare
1648+   Int32Packed4# -> Int32Packed4# -> Bool
1649+   with commutable = True
1650+
1651+primop   Int32Packed4LtOp  "ltInt32Packed4#"   Compare   
1652+  Int32Packed4# -> Int32Packed4# -> Bool
1653+primop   Int32Packed4LeOp  "leInt32Packed4#"   Compare   
1654+  Int32Packed4# -> Int32Packed4# -> Bool
1655+
1656+primop   Int32Packed42FloatPacked4Op   "int32Packed42FloatPacked4#"  GenPrimOp 
1657+  Int32Packed4# -> FloatPacked4#
1658+
1659+primop   Int32Packed42Int64Packed2Op   "int632Packed42Int64Packed2#"   GenPrimOp
1660+  Int32Packed4# -> Int64Packed2#
1661+
1662+primop   Pack4Int32Op "pack4Int32Op#"  GenPrimOp
1663+  INT32-> INT32 -> INT32 -> INT32 -> Int32Packed4#
1664+
1665+primop   UnPack1of4Int32Op "unPack1of4Int32Op#"  GenPrimOp
1666+  Int32Packed4# -> INT32
1667+primop   UnPack2of4Int32Op "unPack2of4Int32Op#"  GenPrimOp
1668+  Int32Packed4# -> INT32
1669+primop   UnPack3of4Int32Op "unPack3of4Int32Op#"  GenPrimOp
1670+  Int32Packed4# -> INT32
1671+primop   UnPack4of4Int32Op "unPack4of4Int32Op#"  GenPrimOp
1672+  Int32Packed4# -> INT32
1673+
1674+------------------------------------------------------------------------
1675+section "Int64Packed2#"
1676+       {Operations on packed 64 bit signed integers.}
1677+------------------------------------------------------------------------
1678+
1679+primtype Int64Packed2#
1680+
1681+primop   Int64Packed2AddOp    "plusInt64Packed2#"    Dyadic
1682+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1683+   with commutable = True
1684+
1685+primop   Int64Packed2SubOp    "minusInt64Packed2#"    Dyadic   
1686+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1687+
1688+primop   Int64Packed2MulOp    "timesInt64Packed2#"
1689+   Dyadic   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1690+   {Low word of signed integer multiply.}
1691+   with commutable = True
1692+
1693+primop   Int64Packed2MulMayOfloOp  "mulInt64Packed2MayOflo#"
1694+   Dyadic   Int32Packed4# -> Int32Packed4# -> Int32Packed4#
1695+   with commutable = True
1696+
1697+primop   Int64Packed2QuotOp    "quotInt64Packed2#"    Dyadic
1698+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1699+   {Rounds towards zero.}
1700+   with can_fail = True
1701+
1702+primop   Int64Packed2RemOp    "remInt64Packed2#"    Dyadic
1703+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1704+   {Satisfies \texttt{(quotInt64Packed2\# x y) *\# y +\# (remInt64Packed2\# x y) == x}.}
1705+   with can_fail = True
1706+
1707+primop   Int64Packed2NegOp    "negateInt64Packed2#"    Monadic   
1708+   Int64Packed2# -> Int64Packed2#
1709+
1710+primop   Int64Packed2AndOp   "andInt64Packed2#"   Dyadic   
1711+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1712+   with commutable = True
1713+
1714+primop   Int64Packed2OrOp   "orInt64Packed2#"   Dyadic   
1715+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1716+   with commutable = True
1717+
1718+primop   Int64Packed2XorOp   "xorInt64Packed2#"   Dyadic   
1719+   Int64Packed2# -> Int64Packed2# -> Int64Packed2#
1720+   with commutable = True
1721+
1722+primop   Int64Packed2NotOp   "notInt64Packed2#"   Monadic   
1723+   Int64Packed2# -> Int64Packed2#
1724+
1725+primop   Int64Packed2SllOp   "uncheckedInt64Packed2ShiftL#" GenPrimOp 
1726+   Int64Packed2# -> Int# -> Int64Packed2#
1727+        {Shift left.  Result undefined if shift amount is not
1728+          in the range 0 to word size - 1 inclusive.}
1729+primop   Int64Packed2SrlOp   "uncheckedInt64Packe2ShiftRL#" GenPrimOp
1730+  Int64Packed2# -> Int# -> Int64Packed2#
1731+        {Shift right logical.  Result undefined if shift amount is not
1732+          in the range 0 to word size - 1 inclusive.}
1733+
1734+primop   Int64Packed2GtOp  "gtInt64Packed2#"   Compare   
1735+   Int64Packed2# -> Int64Packed2# -> Bool
1736+primop   Int64Packed2GeOp  "geInt64Packed2#"   Compare   
1737+   Int64Packed2# -> Int64Packed2# -> Bool
1738+
1739+primop   Int64Packed2EqOp  "eqInt64Packed2#"   Compare
1740+   Int64Packed2# -> Int64Packed2# -> Bool
1741+   with commutable = True
1742+
1743+primop   Int64Packed2NeOp  "neqInt64Packed2#"   Compare
1744+   Int64Packed2# -> Int64Packed2# -> Bool
1745+   with commutable = True
1746+
1747+primop   Int64Packed2LtOp  "ltInt64Packed2#"   Compare   
1748+  Int64Packed2# -> Int64Packed2# -> Bool
1749+primop   Int64Packed2LeOp  "leInt64Packed2#"   Compare   
1750+  Int64Packed2# -> Int64Packed2# -> Bool
1751+
1752+primop   Int64Packed22DoublePacked2Op   "int64Packed22DoublePacked2#"  GenPrimOp 
1753+  Int64Packed2# -> DoublePacked2#
1754+
1755+primop   Int64Packed22Int32Packed4Op   "int64Packed22Int32Packed4#"   GenPrimOp
1756+  Int64Packed2# -> Int32Packed4#
1757+
1758+primop   Pack2Int64Op "pack2Int64Op#"  GenPrimOp
1759+  INT64 -> INT64 -> Int64Packed2#
1760+
1761+primop   UnPack1of2Int64Op "unPack1of2Int64Op#"  GenPrimOp
1762+  Int64Packed2# -> INT64
1763+primop   UnPack2of2Int64Op "unPack2of2Int64Op#"  GenPrimOp
1764+  Int64Packed2# -> INT64
1765+
1766+------------------------------------------------------------------------
1767+section "DoublePacked2#"
1768+       {Operations on 4 packed double-precision (64-bit)
1769+         floating-point numbers.}
1770+------------------------------------------------------------------------
1771+
1772+primtype DoublePacked2#
1773+
1774+primop   DoublePacked2GtOp  "gtDoublePacked2#"   Compare   
1775+  DoublePacked2# -> DoublePacked2# -> Bool
1776+primop   DoublePacked2GeOp  "geDoublePacked2#"   Compare   
1777+  DoublePacked2# -> DoublePacked2# -> Bool
1778+
1779+primop   DoublePacked2EqOp  "eqDoublePacked2#"   Compare
1780+   DoublePacked2# -> DoublePacked2# -> Bool
1781+   with commutable = True
1782+
1783+primop   DoublePacked2NeOp  "neDoublePacked2#"   Compare
1784+   DoublePacked2# -> DoublePacked2# -> Bool
1785+   with commutable = True
1786+
1787+primop   DoublePacked2LtOp  "ltDoublePacked2#"   Compare   
1788+  DoublePacked2# -> DoublePacked2# -> Bool
1789+primop   DoublePacked2LeOp  "leDoublePacked2#"   Compare   
1790+  DoublePacked2# -> DoublePacked2# -> Bool
1791+
1792+primop   DoublePacked2AddOp   "plusDoublePacked2#"      Dyadic           
1793+   DoublePacked2# -> DoublePacked2# -> DoublePacked2#
1794+   with commutable = True
1795+
1796+primop   DoublePacked2SubOp   "minusDoublePacked2#"      Dyadic     
1797+  DoublePacked2# -> DoublePacked2# -> DoublePacked2#
1798+
1799+primop   DoublePacked2MulOp   "timesDoublePacked2#"      Dyadic   
1800+   DoublePacked2# -> DoublePacked2# -> DoublePacked2#
1801+   with commutable = True
1802+
1803+primop   DoublePacked2DivOp   "divideDoublePacked2#"      Dyadic 
1804+   DoublePacked2# -> DoublePacked2# -> DoublePacked2#
1805+   with can_fail = True
1806+
1807+primop   DoublePacked2NegOp   "negateDoublePacked2#"      Monadic   
1808+  DoublePacked2# -> DoublePacked2#
1809+
1810+primop   DoublePacked22Int64Packed2Op   "doublePacked22Int64Packed2#"  GenPrimOp 
1811+  DoublePacked2# -> Int64Packed2#
1812+
1813+primop   DoublePacked22FloatPacked4Op   "doublePacked22FloatPacked4#"   GenPrimOp
1814+  DoublePacked2# -> FloatPacked4#
1815+
1816+primop   DoublePacked2SqrtOp   "sqrtDoublePacked2#"      Monadic         
1817+   DoublePacked2# -> DoublePacked2#
1818+   with needs_wrapper = True
1819+
1820+primop   Pack2DoubleOp "pack2DoubleOp#"  GenPrimOp
1821+  Double# -> Double# -> DoublePacked2#
1822+
1823+primop   UnPack1of2DoubleOp "unPack1of2DoubleOp#"  GenPrimOp
1824+  DoublePacked2# -> Double#
1825+primop   UnPack2of2DoubleOp "unPack2of2DoubleOp#"  GenPrimOp
1826+  DoublePacked2# -> Double#
1827+
1828+------------------------------------------------------------------------
1829+section "FloatPacked4#"
1830+       {Operations on 4 single-precision (32-bit) floating-point numbers.}
1831+------------------------------------------------------------------------
1832+
1833+primtype FloatPacked4#
1834+
1835+primop   FloatPacked4GtOp  "gtFloatPacked4#"   Compare   
1836+  FloatPacked4# -> FloatPacked4# -> Bool
1837+primop   FloatPacked4GeOp  "geFloatPacked4#"   Compare   
1838+  FloatPacked4# -> FloatPacked4# -> Bool
1839+
1840+primop   FloatPacked4EqOp  "eqFloatPacked4#"   Compare
1841+   FloatPacked4# -> FloatPacked4# -> Bool
1842+   with commutable = True
1843+
1844+primop   FloatPacked4NeOp  "neFloatPacked4#"   Compare
1845+   FloatPacked4# -> FloatPacked4# -> Bool
1846+   with commutable = True
1847+
1848+primop   FloatPacked4LtOp  "ltFloatPacked4#"   Compare   
1849+  FloatPacked4# -> FloatPacked4# -> Bool
1850+primop   FloatPacked4LeOp  "leFloatPacked4#"   Compare   
1851+  FloatPacked4# -> FloatPacked4# -> Bool
1852+
1853+primop   FloatPacked4AddOp   "plusFloatPacked4#"      Dyadic           
1854+   FloatPacked4# -> FloatPacked4# -> FloatPacked4#
1855+   with commutable = True
1856+
1857+primop   FloatPacked4SubOp   "minusFloatPacked4#"      Dyadic     
1858+  FloatPacked4# -> FloatPacked4# -> FloatPacked4#
1859+
1860+primop   FloatPacked4MulOp   "timesFloatPacked4#"      Dyadic   
1861+   FloatPacked4# -> FloatPacked4# -> FloatPacked4#
1862+   with commutable = True
1863+
1864+primop   FloatPacked4DivOp   "divideFloatPacked4#"      Dyadic 
1865+   FloatPacked4# -> FloatPacked4# -> FloatPacked4#
1866+   with can_fail = True
1867+
1868+primop   FloatPacked4NegOp   "negateFloatPacked4#"      Monadic   
1869+  FloatPacked4# -> FloatPacked4#
1870+
1871+primop   FloatPacked42Int32Packed4Op   "floatPacked42Int32Packed4#"   GenPrimOp 
1872+  FloatPacked4# -> Int32Packed4#
1873+
1874+primop   FloatPacked42DoublePacked2Op   "floatPacked42DoublePacked2#"   GenPrimOp
1875+  FloatPacked4# -> DoublePacked2#
1876+
1877+primop   FloatPacked4SqrtOp   "sqrtFloatPacked4#"      Monadic         
1878+   FloatPacked4# -> FloatPacked4#
1879+   with needs_wrapper = True
1880+
1881+primop   Pack4FloatOp "pack4FloatOp#"  GenPrimOp
1882+  Float# -> Float# -> Float# -> Float# -> FloatPacked4#
1883+
1884+primop   UnPack1of4FloatOp "unPack1of4FloatOp#"  GenPrimOp
1885+  FloatPacked4# -> Float#
1886+primop   UnPack2of4FloatOp "unPack2of4FloatOp#"  GenPrimOp
1887+  FloatPacked4# -> Float#
1888+primop   UnPack3of4FloatOp "unPack3of4FloatOp#"  GenPrimOp
1889+  FloatPacked4# -> Float#
1890+primop   UnPack4of4FloatOp "unPack4of4FloatOp#"  GenPrimOp
1891+  FloatPacked4# -> Float#
1892+
1893hunk ./compiler/prelude/primops.txt.pp 1053
1894+primop IndexByteArrayOp_Int32Packed4 "indexInt32Packed4Array#" GenPrimOp
1895+   ByteArray# -> Int# -> Int32Packed4#
1896+
1897+primop IndexByteArrayOp_Int64Packed2 "indexInt64Packed2Array#" GenPrimOp
1898+   ByteArray# -> Int# -> Int64Packed2#
1899+
1900+primop IndexByteArrayOp_FloatPacked4 "indexFloatPacked4Array#" GenPrimOp
1901+   ByteArray# -> Int# -> FloatPacked4#
1902+
1903+primop IndexByteArrayOp_DoublePacked2 "indexDoublePacked2Array#" GenPrimOp
1904+   ByteArray# -> Int# -> DoublePacked2#
1905+
1906hunk ./compiler/prelude/primops.txt.pp 1131
1907+primop  ReadByteArrayOp_Int32Packed4 "readInt32Packed4Array#" GenPrimOp
1908+   MutableByteArray# s -> Int# -> State# s -> (# State# s, Int32Packed4# #)
1909+   with has_side_effects = True
1910+
1911+primop  ReadByteArrayOp_Int64Packed2 "readInt64Packed2Array#" GenPrimOp
1912+   MutableByteArray# s -> Int# -> State# s -> (# State# s, Int64Packed2# #)
1913+   with has_side_effects = True
1914+
1915+primop  ReadByteArrayOp_FloatPacked4 "readFloatPacked4Array#" GenPrimOp
1916+   MutableByteArray# s -> Int# -> State# s -> (# State# s, FloatPacked4# #)
1917+   with has_side_effects = True
1918+
1919+primop  ReadByteArrayOp_DoublePacked2 "readDoublePacked2Array#" GenPrimOp
1920+   MutableByteArray# s -> Int# -> State# s -> (# State# s, DoublePacked2# #)
1921+   with has_side_effects = True
1922+
1923hunk ./compiler/prelude/primops.txt.pp 1213
1924+primop  WriteByteArrayOp_Int32Packed4 "writeInt32Packed4Array#" GenPrimOp
1925+   MutableByteArray# s -> Int# -> Int32Packed4# -> State# s -> State# s
1926+   with has_side_effects = True
1927+
1928+primop  WriteByteArrayOp_Int64Packed2 "writeInt64Packed2Array#" GenPrimOp
1929+   MutableByteArray# s -> Int# -> Int64Packed2# -> State# s -> State# s
1930+   with has_side_effects = True
1931+
1932+primop  WriteByteArrayOp_FloatPacked4 "writeFloatPacked4Array#" GenPrimOp
1933+   MutableByteArray# s -> Int# -> FloatPacked4# -> State# s -> State# s
1934+   with has_side_effects = True
1935+
1936+primop  WriteByteArrayOp_DoublePacked2 "writeDoublePacked2Array#" GenPrimOp
1937+   MutableByteArray# s -> Int# -> DoublePacked2# -> State# s -> State# s
1938+   with has_side_effects = True
1939+
1940hunk ./compiler/prelude/primops.txt.pp 1311
1941+primop IndexOffAddrOp_Int32Packed4 "indexInt32Packed4OffAddr#" GenPrimOp
1942+   Addr# -> Int# -> Int32Packed4#
1943+
1944+primop IndexOffAddrOp_Int64Packed2 "indexInt64Packed2OffAddr#" GenPrimOp
1945+   Addr# -> Int# -> Int64Packed2#
1946+
1947+primop IndexOffAddrOp_FloatPacked4 "indexFloatPacked4OffAddr#" GenPrimOp
1948+   Addr# -> Int# -> FloatPacked4#
1949+
1950+primop IndexOffAddrOp_DoublePacked2 "indexDoublePacked2OffAddr#" GenPrimOp
1951+   Addr# -> Int# -> DoublePacked2#
1952+
1953hunk ./compiler/prelude/primops.txt.pp 1389
1954+primop ReadOffAddrOp_Int32Packed4 "readInt32Packed4OffAddr#" GenPrimOp
1955+   Addr# -> Int# -> State# s -> (# State# s, Int32Packed4# #)
1956+   with has_side_effects = True
1957+
1958+primop ReadOffAddrOp_Int64Packed2 "readInt64Packed2OffAddr#" GenPrimOp
1959+   Addr# -> Int# -> State# s -> (# State# s, Int64Packed2# #)
1960+   with has_side_effects = True
1961+
1962+primop ReadOffAddrOp_FloatPacked4 "readFloatPacked4OffAddr#" GenPrimOp
1963+   Addr# -> Int# -> State# s -> (# State# s, FloatPacked4# #)
1964+   with has_side_effects = True
1965+
1966+primop ReadOffAddrOp_DoublePacked2 "readDoublePacked2OffAddr#" GenPrimOp
1967+   Addr# -> Int# -> State# s -> (# State# s, DoublePacked2# #)
1968+   with has_side_effects = True
1969+
1970hunk ./compiler/prelude/primops.txt.pp 1470
1971+primop  WriteOffAddrOp_Int32Packed4 "writeInt32Packed4OffAddr#" GenPrimOp
1972+   Addr# -> Int# -> Int32Packed4# -> State# s -> State# s
1973+   with has_side_effects = True
1974+
1975+primop  WriteOffAddrOp_Int64Packed2 "writeInt64Packed2OffAddr#" GenPrimOp
1976+   Addr# -> Int# -> Int64Packed2# -> State# s -> State# s
1977+   with has_side_effects = True
1978+
1979+primop  WriteOffAddrOp_FloatPacked4 "writeFloatPacked4OffAddr#" GenPrimOp
1980+   Addr# -> Int# -> FloatPacked4# -> State# s -> State# s
1981+   with has_side_effects = True
1982+
1983+primop  WriteOffAddrOp_DoublePacked2 "writeDoublePacked2OffAddr#" GenPrimOp
1984+   Addr# -> Int# -> DoublePacked2# -> State# s -> State# s
1985+   with has_side_effects = True
1986+
1987hunk ./compiler/types/TyCon.lhs 708
1988+  | Int32Packed4Rep     -- ^ 4 signed, packed 32 bit values
1989+  | Int64Packed2Rep     -- ^ 2 signed, packed 64 bit values
1990hunk ./compiler/types/TyCon.lhs 713
1991+  | FloatPacked4Rep     -- ^ 4 single-precision floating values
1992+  | DoublePacked2Rep    -- ^ 2 double-precision floating values
1993hunk ./compiler/types/TyCon.lhs 731
1994+primRepSizeW Int32Packed4Rep  = 4
1995+primRepSizeW Int64Packed2Rep  = 4
1996+primRepSizeW FloatPacked4Rep  = 4
1997+primRepSizeW DoublePacked2Rep = 4
1998+
1999hunk ./includes/HaskellConstants.hs 98
2000+mAX_Real_Packed_REG :: Int
2001+mAX_Real_Packed_REG = MAX_REAL_PACKED_REG
2002+
2003hunk ./includes/mkDerivedConstants.c 221
2004+    field_offset(StgRegTable, rP1);
2005+    field_offset(StgRegTable, rP2);
2006+    field_offset(StgRegTable, rP3);
2007+    field_offset(StgRegTable, rP4);
2008+    field_offset(StgRegTable, rP5);
2009+    field_offset(StgRegTable, rP6);
2010+    field_offset(StgRegTable, rP7);
2011+    field_offset(StgRegTable, rP8);
2012hunk ./includes/rts/storage/FunTypes.h 53
2013+#define ARG_X        26
2014hunk ./includes/stg/MachRegs.h 304
2015+#define REG_P1    xmm8
2016+#define REG_P2    xmm9
2017+#define REG_P3    xmm10
2018+#define REG_P4    xmm11
2019+#define REG_P5    xmm12
2020+#define REG_P6    xmm13
2021+#define REG_P7    xmm14
2022+#define REG_P8    xmm15
2023+
2024hunk ./includes/stg/MachRegs.h 326
2025+#define CALLER_SAVES_P1
2026+#define CALLER_SAVES_P2
2027+#define CALLER_SAVES_P3
2028+#define CALLER_SAVES_P4
2029+#define CALLER_SAVES_P5
2030+#define CALLER_SAVES_P6
2031+#define CALLER_SAVES_P7
2032+#define CALLER_SAVES_P8
2033+
2034hunk ./includes/stg/MachRegs.h 339
2035-
2036+#define MAX_REAL_PACKED_REG  8
2037+
2038hunk ./includes/stg/Regs.h 79
2039+  StgPacked128    rP1;
2040+  StgPacked128    rP2;
2041+  StgPacked128    rP3;
2042+  StgPacked128    rP4;
2043+  StgPacked128    rP5;
2044+  StgPacked128    rP6;
2045+  StgPacked128    rP7;
2046+  StgPacked128    rP8;
2047hunk ./includes/stg/Regs.h 163
2048+#define SAVE_P1             (BaseReg->rP1)
2049+#define SAVE_P2             (BaseReg->rP2)
2050+#define SAVE_P3             (BaseReg->rP3)
2051+#define SAVE_P4             (BaseReg->rP4)
2052+#define SAVE_P5             (BaseReg->rP5)
2053+#define SAVE_P6             (BaseReg->rP6)
2054+#define SAVE_P7             (BaseReg->rP7)
2055+#define SAVE_P8             (BaseReg->rP8)
2056+
2057hunk ./includes/stg/Regs.h 295
2058+#if defined(REG_P1) && !defined(NO_GLOBAL_REG_DECLS)
2059+GLOBAL_REG_DECL(StgPacked128,P1,REG_P1)
2060+#else
2061+#define P1 (BaseReg->rP1)
2062+#endif
2063+
2064+#if defined(REG_P2) && !defined(NO_GLOBAL_REG_DECLS)
2065+GLOBAL_REG_DECL(StgPacked128,P2,REG_P2)
2066+#else
2067+#define P2 (BaseReg->rP2)
2068+#endif
2069+
2070+#if defined(REG_P3) && !defined(NO_GLOBAL_REG_DECLS)
2071+GLOBAL_REG_DECL(StgPacked128,P3,REG_P3)
2072+#else
2073+#define P3 (BaseReg->rP3)
2074+#endif
2075+
2076+#if defined(REG_P4) && !defined(NO_GLOBAL_REG_DECLS)
2077+GLOBAL_REG_DECL(StgPacked128,P4,REG_P4)
2078+#else
2079+#define P4 (BaseReg->rP4)
2080+#endif
2081+
2082+#if defined(REG_P5) && !defined(NO_GLOBAL_REG_DECLS)
2083+GLOBAL_REG_DECL(StgPacked128,P5,REG_P5)
2084+#else
2085+#define P5 (BaseReg->rP5)
2086+#endif
2087+
2088+#if defined(REG_P6) && !defined(NO_GLOBAL_REG_DECLS)
2089+GLOBAL_REG_DECL(StgPacked128,P6,REG_P6)
2090+#else
2091+#define P6 (BaseReg->rP6)
2092+#endif
2093+
2094+#if defined(REG_P7) && !defined(NO_GLOBAL_REG_DECLS)
2095+GLOBAL_REG_DECL(StgPacked128,P7,REG_P7)
2096+#else
2097+#define P7 (BaseReg->rP7)
2098+#endif
2099+
2100+#if defined(REG_P8) && !defined(NO_GLOBAL_REG_DECLS)
2101+GLOBAL_REG_DECL(StgPacked128,P8,REG_P8)
2102+#else
2103+#define P8 (BaseReg->rP8)
2104+#endif
2105+
2106hunk ./includes/stg/Regs.h 603
2107+#ifdef CALLER_SAVES_P1
2108+#define CALLER_SAVE_P1         SAVE_P1 = P1;
2109+#define CALLER_RESTORE_P1      P1 = SAVE_P1;
2110+#else
2111+#define CALLER_SAVE_P1         /* nothing */
2112+#define CALLER_RESTORE_P1      /* nothing */
2113+#endif
2114+
2115+#ifdef CALLER_SAVES_P2
2116+#define CALLER_SAVE_P2         SAVE_P2 = P2;
2117+#define CALLER_RESTORE_P2      P2 = SAVE_P2;
2118+#else
2119+#define CALLER_SAVE_P2         /* nothing */
2120+#define CALLER_RESTORE_P2      /* nothing */
2121+#endif
2122+
2123+#ifdef CALLER_SAVES_P3
2124+#define CALLER_SAVE_P3         SAVE_P3 = P3;
2125+#define CALLER_RESTORE_P3      P3 = SAVE_P3;
2126+#else
2127+#define CALLER_SAVE_P3         /* nothing */
2128+#define CALLER_RESTORE_P3      /* nothing */
2129+#endif
2130+
2131+#ifdef CALLER_SAVES_P4
2132+#define CALLER_SAVE_P4         SAVE_P4 = P4;
2133+#define CALLER_RESTORE_P4      P4 = SAVE_P4;
2134+#else
2135+#define CALLER_SAVE_P4         /* nothing */
2136+#define CALLER_RESTORE_P4      /* nothing */
2137+#endif
2138+
2139+#ifdef CALLER_SAVES_P5
2140+#define CALLER_SAVE_P5         SAVE_P5 = P5;
2141+#define CALLER_RESTORE_P5      P5 = SAVE_P5;
2142+#else
2143+#define CALLER_SAVE_P5         /* nothing */
2144+#define CALLER_RESTORE_P5      /* nothing */
2145+#endif
2146+
2147+#ifdef CALLER_SAVES_P6
2148+#define CALLER_SAVE_P6         SAVE_P6 = P6;
2149+#define CALLER_RESTORE_P6      P6 = SAVE_P6;
2150+#else
2151+#define CALLER_SAVE_P6         /* nothing */
2152+#define CALLER_RESTORE_P6      /* nothing */
2153+#endif
2154+
2155+#ifdef CALLER_SAVES_P7
2156+#define CALLER_SAVE_P7         SAVE_P7 = P7;
2157+#define CALLER_RESTORE_P7      P7 = SAVE_P7;
2158+#else
2159+#define CALLER_SAVE_P7         /* nothing */
2160+#define CALLER_RESTORE_P7      /* nothing */
2161+#endif
2162+
2163+#ifdef CALLER_SAVES_P8
2164+#define CALLER_SAVE_P8         SAVE_P8 = P8;
2165+#define CALLER_RESTORE_P8      P8 = SAVE_P8;
2166+#else
2167+#define CALLER_SAVE_P8         /* nothing */
2168+#define CALLER_RESTORE_P8      /* nothing */
2169+#endif
2170+
2171hunk ./includes/stg/Regs.h 749
2172-  CALLER_SAVE_L1
2173+  CALLER_SAVE_L1                                \
2174+  CALLER_SAVE_P1                                \
2175+  CALLER_SAVE_P2                                \
2176+  CALLER_SAVE_P3                                \
2177+  CALLER_SAVE_P4                                \
2178+  CALLER_SAVE_P5                                \
2179+  CALLER_SAVE_P6                                \
2180+  CALLER_SAVE_P7                                \
2181+  CALLER_SAVE_P8
2182hunk ./includes/stg/Regs.h 784
2183-  CALLER_RESTORE_L1
2184+  CALLER_RESTORE_L1                             \
2185+  CALLER_RESTORE_P1                             \
2186+  CALLER_RESTORE_P2                             \
2187+  CALLER_RESTORE_P3                             \
2188+  CALLER_RESTORE_P4                             \
2189+  CALLER_RESTORE_P5                             \
2190+  CALLER_RESTORE_P6                             \
2191+  CALLER_RESTORE_P7                             \
2192+  CALLER_RESTORE_P8
2193hunk ./includes/stg/Types.h 109
2194+#if SIZEOF_LONG == 4
2195+typedef signed long      v4si __attribute__ ((vector_size(16)));
2196+#elif SIZEOF_INT == 4
2197+typedef signed  int      v4si __attribute__ ((vector_size(16)));
2198+#else
2199+#error GHC untested on this architecture: sizeof(int) != 4
2200+#endif
2201+
2202+typedef v4si               StgPacked128;
2203+
2204hunk ./utils/genapply/GenApply.hs 35
2205+  | X           -- packed
2206hunk ./utils/genapply/GenApply.hs 45
2207+argSize X = 4
2208hunk ./utils/genapply/GenApply.hs 54
2209+showArg X = 'x'
2210hunk ./utils/genapply/GenApply.hs 68
2211-availableRegs :: RegStatus -> ([Reg],[Reg],[Reg],[Reg])
2212-availableRegs Unregisterised = ([],[],[],[])
2213+availableRegs :: RegStatus -> ([Reg],[Reg],[Reg],[Reg],[Reg])
2214+availableRegs Unregisterised = ([],[],[],[],[])
2215hunk ./utils/genapply/GenApply.hs 74
2216-    longRegs    MAX_REAL_LONG_REG
2217+    longRegs    MAX_REAL_LONG_REG,
2218+    packRegs    MAX_REAL_PACKED_REG
2219hunk ./utils/genapply/GenApply.hs 83
2220+packRegs    n = [ "P" ++ show m | m <- [1..n] ]
2221hunk ./utils/genapply/GenApply.hs 117
2222-findAvailableReg N (vreg:vregs, fregs, dregs, lregs) =
2223-  Just (vreg, (vregs,fregs,dregs,lregs))
2224-findAvailableReg P (vreg:vregs, fregs, dregs, lregs) =
2225-  Just (vreg, (vregs,fregs,dregs,lregs))
2226-findAvailableReg F (vregs, freg:fregs, dregs, lregs) =
2227-  Just (freg, (vregs,fregs,dregs,lregs))
2228-findAvailableReg D (vregs, fregs, dreg:dregs, lregs) =
2229-  Just (dreg, (vregs,fregs,dregs,lregs))
2230-findAvailableReg L (vregs, fregs, dregs, lreg:lregs) =
2231-  Just (lreg, (vregs,fregs,dregs,lregs))
2232+findAvailableReg N (vreg:vregs, fregs, dregs, lregs, pregs) =
2233+  Just (vreg, (vregs,fregs,dregs,lregs,pregs))
2234+findAvailableReg P (vreg:vregs, fregs, dregs, lregs, pregs) =
2235+  Just (vreg, (vregs,fregs,dregs,lregs,pregs))
2236+findAvailableReg F (vregs, freg:fregs, dregs, lregs, pregs) =
2237+  Just (freg, (vregs,fregs,dregs,lregs,pregs))
2238+findAvailableReg D (vregs, fregs, dreg:dregs, lregs, pregs) =
2239+  Just (dreg, (vregs,fregs,dregs,lregs,pregs))
2240+findAvailableReg L (vregs, fregs, dregs, lreg:lregs, pregs) =
2241+  Just (lreg, (vregs,fregs,dregs,lregs,pregs))
2242+findAvailableReg X (vregs, fregs, dregs, lregs, preg:pregs) =
2243+  Just (preg, (vregs,fregs,dregs,lregs,pregs))
2244hunk ./utils/genapply/GenApply.hs 140
2245+regRep ('P':_) = "P_"
2246hunk ./utils/genapply/GenApply.hs 791
2247+        [X],
2248hunk ./utils/genapply/GenApply.hs 814
2249+        [X],
2250hunk ./utils/genprimopcode/Main.hs 633
2251+ppType (TyApp "Int32Packed4#"    []) = "int32Packed4PrimTy"
2252+ppType (TyApp "Int64Packed2#"    []) = "int64Packed2PrimTy"
2253+ppType (TyApp "FloatPacked4#"    []) = "floatPacked4PrimTy"
2254+ppType (TyApp "DoublePacked2#"   []) = "doublePacked2PrimTy"
2255}
2256
2257Context:
2258
2259[LLVM: Huge improvement to mangler speed.
2260David Terei <[email protected]>**20110213014406
2261 Ignore-this: 4eeaa572dfe956c990895154bd942bb2
2262 
2263 The old llvm mangler was horrible! Very slow
2264 due to bad design and code. New version is
2265 linear complexity as it should be and far
2266 lower coefficients. This fixes trac 4838.
2267]
2268[Fix platform detection in bindists
2269Ian Lynagh <[email protected]>**20110211184244
2270 In a bindist, we generate files like the hsc2hs wrapper.
2271 This means we need to have the right values for the variables like
2272 CONF_GCC_LINKER_OPTS_STAGE1 which in turn means we need to know what
2273 platform we're on.
2274]
2275[New plan: push unsolved wanteds inwards
2276[email protected]**20110211174058
2277 Ignore-this: ed40762e260dab75b5e51c696f9965fa
2278 
2279 This fixes Trac #4935.  See Note [Preparing inert set for implications].
2280 Lots of comments, but not a lot of code is changed!
2281]
2282[Remove unnecessary import, plus white space
2283[email protected]**20110211173925
2284 Ignore-this: 963f455c3c8aee49009b5d5a02f835ac
2285]
2286[Fix small but egregious error: using un-zonked constraints in simplifyRule
2287[email protected]**20110211173835
2288 Ignore-this: 238586e420dbbb1be7f6368117cf6280
2289 
2290 This resulted in double unifications.  Fix is trivial.
2291]
2292[makeSolvedByInst is only called on wanteds
2293[email protected]**20110211173415
2294 Ignore-this: 36e6201ab59a082e6dc38e56bea99e29
2295 
2296 This patch just adds an assert error.
2297]
2298[Enable DTrace on Solaris; based on a patch from Karel Gardas
2299Ian Lynagh <[email protected]>**20110210155217
2300 Ignore-this: 93eaf0e06c721c80c175aaee9a113e6
2301]
2302[Use DTrace whenever it's available
2303Ian Lynagh <[email protected]>**20110210153300
2304 Ignore-this: 111c72bf20d6eaafd3e488196a89b2c
2305 Now that we've stopped trying to support 64bit OS X 10.5, the DTrace
2306 problems there don't matter.
2307]
2308[replace C++ comments with C comments (Solaris' DTrace fails on C++ comments)
2309Karel Gardas <[email protected]>**20110112051829
2310 Ignore-this: c229292227c7e2b512daf9129cb66aeb
2311]
2312[Fix #4867, ghci displays negative floats incorrectly
2313[email protected]**20110209222423
2314 Ignore-this: 1b3279fa5f6c4849ed6311275b1a466a
2315 
2316 This patch fixes the erroneous relocations that caused
2317 the bug in ticket #4867.  External addresses and global
2318 offset table entries were relocated correctly, but all other
2319 relocations were incorrectly calculated.  This caused, for
2320 example, bad references to constants stored in the __const
2321 section of the __TEXT segment.
2322 
2323 This bug only affected OS X on 64-bit platforms.
2324 
2325]
2326[Fix Array sizeof primops to use the correct offset (which happens to be 0, so it worked before anyway). Makes us more future-proof, at least
2327Daniel Peebles <[email protected]>**20110201063017
2328 Ignore-this: 8e79c3f6f80c81b4160a31e80e4ed29d
2329]
2330[Add sizeof(Mutable)Array# primitives
2331Daniel Peebles <[email protected]>**20110126051554
2332 Ignore-this: ae17d94dbb86d6e1ffa0a489da842f78
2333]
2334[fix TRY_ACQUIRE_LOCK on Windows.
2335Simon Marlow <[email protected]>**20110210150035
2336 Ignore-this: b48713585b6d65020bb42f952c2c54ac
2337]
2338[constant fold  (a + N) - M  and  (a - N) + M
2339Simon Marlow <[email protected]>**20110210115608
2340 Ignore-this: 312c33d5ff7d4288be8ab0a5c6939c0c
2341]
2342[Recursively call cmmMachOpFold on divides that we turned into shifts
2343Simon Marlow <[email protected]>**20110208104345
2344 Ignore-this: bca0db454127c5f2b64b81d6200fc000
2345 There might be more simplification to do.
2346]
2347[Add unboxed tuple support to Template Haskell
2348Ian Lynagh <[email protected]>**20110210134528
2349 Ignore-this: cf946570a9d16016debf8bccd21b2c79
2350]
2351[Allow TH brackets to contain things of any kind
2352Ian Lynagh <[email protected]>**20110209184459
2353 Ignore-this: b23f53d201abc874cf1f15a4eddb3abb
2354 You can now quasi-quote things with unboxed types, and unboxed tuples.
2355]
2356[Simpify constraints from a TH bracket eagerly
2357[email protected]**20110209175003
2358 Ignore-this: b341ea3d235af1b2e617107f238ae1d6
2359 
2360 See Trac #4949, where having a TH bracket implication
2361 was messing things up.  Better to get rid of it right away.
2362]
2363[Typo in comment
2364[email protected]**20110209174914
2365 Ignore-this: 3590bf097a566c6f590a37cda2be9b4e
2366]
2367[Call the final build system phase "final" rather than ""
2368Ian Lynagh <[email protected]>**20110207142046
2369 Ignore-this: cc87cf202cff1f1d8b105268dacdd63f
2370]
2371[Fix bug introduced in "Implement fuzzy matching for the Finder"
2372Simon Marlow <[email protected]>**20110208090121
2373 Ignore-this: 53e61080e7d7fb28f9187629fa20746a
2374 The finder was reporting a hidden package when it meant a hidden
2375 module, and vice versa (looks like a typo).
2376]
2377[Fix Trac #4945: another SpecConstr infelicity
2378[email protected]**20110207102537
2379 Ignore-this: c3ffbb640cdbbab32758e6130ae803bc
2380 
2381 Well, more a plain bug really, which led to SpecConstr
2382 missing some obvious opportunities for specialisation.
2383 
2384 Thanks to Max Bolingbroke for spotting this.
2385]
2386[add missing initialisation of ws->todo_large_objects
2387Simon Marlow <[email protected]>**20110204093148
2388 Ignore-this: dc9a28f85aff97e0896d212d7b21ae30
2389 Found-by: Valgrind.  Thanks Julian!
2390]
2391[Add -XNondecreasingIndentation to -XHaskell98 for backwards compatibility.
2392Simon Marlow <[email protected]>**20110204084226
2393 Ignore-this: 42f7ef8bfbfb8d58f61afa217af3ffea
2394 The final straw was when I learned today that Happy broke.
2395]
2396[only the GHC repo is in git for now; add hoopl
2397Simon Marlow <[email protected]>**20110203205705
2398 Ignore-this: 1cf90e7e5b83aabef74ec5e24496464c
2399]
2400[Fix typo in SpecConstr that made it not work at all
2401[email protected]**20110203172756
2402 Ignore-this: b550d5c5b73ed13709ee2938c80a750f
2403 
2404 There was a terrible typo in this patch; I wrote "env"
2405 instead of "env1".
2406 
2407    Mon Jan 31 11:35:29 GMT 2011  [email protected]
2408      * Improve Simplifier and SpecConstr behaviour
2409 
2410 Anyway, this fix is essential to make it work properly.
2411 Thanks to Max for spotting the problem (again).
2412]
2413[fix compacting GC
2414Simon Marlow <[email protected]>**20110202170036
2415 Ignore-this: e78c99b318586a7fccc2a8e36d9fbf88
2416]
2417[fix warning
2418Simon Marlow <[email protected]>**20110202160415
2419 Ignore-this: 99f65d20b38cce971b0eda6c53eab8d3
2420]
2421[GC refactoring and cleanup
2422Simon Marlow <[email protected]>**20110202154955
2423 Ignore-this: 96b5b5ec97d49e69617d0007ee7fe804
2424 Now we keep any partially-full blocks in the gc_thread[] structs after
2425 each GC, rather than moving them to the generation.  This should give
2426 us slightly better locality (though I wasn't able to measure any
2427 difference).
2428 
2429 Also in this patch: better sanity checking with THREADED.
2430]
2431[avoid adding HPC ticks to arrow constructs (fixes #1333)
2432Ross Paterson <[email protected]>**20110202211425
2433 Ignore-this: 2938850ebbb53d1bc6bf0399f68dd8e5
2434]
2435[Fix the profiling build
2436Simon Marlow <[email protected]>**20110202132257
2437 Ignore-this: cdf6de609c7eee47bd6c9e957276f12b
2438]
2439[A small GC optimisation
2440Simon Marlow <[email protected]>**20110202123049
2441 Ignore-this: 4119e33b0f40787fd9339ad1104b3b9e
2442 Store the *number* of the destination generation in the Bdescr struct,
2443 so that in evacuate() we don't have to deref gen to get it.
2444 This is another improvement ported over from my GC branch.
2445]
2446[scheduleProcessInbox: use non-blocking acquire, and take the whole queue
2447Simon Marlow <[email protected]>**20110202114907
2448 Ignore-this: 12020d2751d355d1c006697351223d99
2449 This is an improvement from my GC branch, that helps performance for
2450 intensive message-passing communication between Capabilities.
2451]
2452[do a bit of by-hand CSE
2453Simon Marlow <[email protected]>**20110202114417
2454 Ignore-this: c0c90cd767c74f3eee8b7f8cbc08dfa0
2455]
2456[add a const
2457Simon Marlow <[email protected]>**20110202114345
2458 Ignore-this: d12300d69c91d7187aa1dd83a4a13ff9
2459]
2460[add TRY_ACQUIRE_LOCK()
2461Simon Marlow <[email protected]>**20110202113242
2462 Ignore-this: face9da80ce407b9013d5f73bb65c34d
2463]
2464[Remove the per-generation mutable lists
2465Simon Marlow <[email protected]>**20110202112646
2466 Ignore-this: 3e0cacbc8c8b6ddf7005d25b593d3357
2467 Now that we use the per-capability mutable lists exclusively.
2468]
2469[+RTS -qw hasn't done anything since 7.0.1; remove the implementation & docs
2470Simon Marlow <[email protected]>**20110201163727
2471 Ignore-this: e6c6ba6b8a119d87efcd79310b4fb5d2
2472 It is still (silently) accepted for backwards compatibility.
2473]
2474[comments
2475Simon Marlow <[email protected]>**20110201085830
2476 Ignore-this: 5a70e58a48aa60e5ed7afc6e908d150a
2477]
2478[Annotate thread stop events with the owner of the black hole
2479Simon Marlow <[email protected]>**20110127164226
2480 Ignore-this: a60cbe5cc50da911d58020775c513ed0
2481 
2482 So we can now get these in ThreadScope:
2483 
2484   19487000: cap 1: stopping thread 6 (blocked on black hole owned by thread 4)
2485 
2486 Note: needs an update to ghc-events.  Older ThreadScopes will just
2487 ignore the new information.
2488]
2489[update debugging code for fragmentation
2490Simon Marlow <[email protected]>**20110125111011
2491 Ignore-this: a98cd31d2e48ae9bdc52f9d96424ce39
2492]
2493[Fix type checker error message
2494[email protected]**20110201122920
2495 Ignore-this: 7369cc5f8dae3d81621f580a8ddaf41e
2496 
2497 See Trac #4940. We had a message
2498      The lambda expression `\ x -> x' has one argument one argument,
2499 repeating the "one argument" part.  Easy fix.
2500]
2501[Some refactoring of SpecConstr
2502[email protected]**20110201122841
2503 Ignore-this: c2966091564a9ca4ceb27a9596d36b7d
2504 
2505 This was originally to improve the case when SpecConstr generated a
2506 function with an unused argument (see Trac #4941), but I ended up
2507 giving up on that.  But the refactoring is still an improvement.
2508 
2509 In particular I got rid of BothOcc, which was unused.
2510]
2511[Don't make join points when the case has only one non-bottom alternative
2512[email protected]**20110201122637
2513 Ignore-this: 333b9b62debbfc1338530ef4e710ccbb
2514 
2515 This fixes Trac #4930.  See Note [Bottom alternatives] in Simplify.lhs
2516]
2517[Improve Simplifier and SpecConstr behaviour
2518[email protected]**20110131113529
2519 Ignore-this: e5b96c97cee0950e558ddf15178bb6c9
2520 
2521 Trac #4908 identified a case where SpecConstr wasn't "seeing" a
2522 specialisation it should easily get.  The solution was simple: see
2523 Note [Add scrutinee to ValueEnv too] in SpecConstr.
2524 
2525 Then it turned out that there was an exactly analogous infelicity in
2526 the mighty Simplifer too; see Note [Add unfolding for scrutinee] in
2527 Simplify. This fix is good for Simplify even in the absence of the
2528 SpecConstr change.  (It arose when I moved the binder- swap stuff to
2529 OccAnall, not realising that it *remains* valuable to record info
2530 about the scrutinee of a case expression.  The Note says why.
2531 
2532 Together these two changes are unconditionally good.  Better
2533 simplification, better specialisation. Thank you Max.
2534]
2535[fix warning
2536Simon Marlow <[email protected]>**20110131135951
2537 Ignore-this: e893d9bfbabf1601133a1e09c50b908
2538]
2539[32-bit fix
2540Simon Marlow <[email protected]>**20101013154200
2541 Ignore-this: 7508977c263ed2cec321b40a8b5772a
2542]
2543[update to mingw gcc 4.5.2
2544Simon Marlow <[email protected]>**20110119135053
2545 Ignore-this: b9d5cb736a48a0adc5e35eb8a0c191cd
2546]
2547[count fizzled and GC'd sparks separately
2548Simon Marlow <[email protected]>**20101111132727
2549 Ignore-this: 4cb4b759aed06659b46cdf76e791e5c9
2550]
2551[count "dud" sparks (expressions that were already evaluated when sparked)
2552Simon Marlow <[email protected]>**20101101124143
2553 Ignore-this: ca94824c0e75da0b3688300e7285c7e6
2554]
2555[fix some shutdown memory leaks
2556Simon Marlow <[email protected]>**20100820093133
2557 Ignore-this: 3e7b80b5f4846d6c56319c150895953d
2558]
2559[fix DEBUG build
2560Simon Marlow <[email protected]>**20110131123433
2561 Ignore-this: f2e009eaa66a14a7c8ec6acc7a4bbdb1
2562]
2563[Fix formatting glitch in documentation
2564[email protected]**20110128115400
2565 Ignore-this: 6c410ed19956feac7e0cf68bb40b40b1
2566]
2567[Fix warnings
2568Simon Marlow <[email protected]>**20110128103639
2569 Ignore-this: aa7f2c9f9b91f9dabc7b5d5ea26121fd
2570]
2571[Merge in new code generator branch.
2572Simon Marlow <[email protected]>**20110124121650
2573 Ignore-this: 7762f21082cb84ec94daaeefd70f5ef2
2574 This changes the new code generator to make use of the Hoopl package
2575 for dataflow analysis.  Hoopl is a new boot package, and is maintained
2576 in a separate upstream git repository (as usual, GHC has its own
2577 lagging darcs mirror in http://darcs.haskell.org/packages/hoopl).
2578 
2579 During this merge I squashed recent history into one patch.  I tried
2580 to rebase, but the history had some internal conflicts of its own
2581 which made rebase extremely confusing, so I gave up. The history I
2582 squashed was:
2583 
2584   - Update new codegen to work with latest Hoopl
2585   - Add some notes on new code gen to cmm-notes
2586   - Enable Hoopl lag package.
2587   - Add SPJ note to cmm-notes
2588   - Improve GC calls on new code generator.
2589 
2590 Work in this branch was done by:
2591    - Milan Straka <[email protected]>
2592    - John Dias <[email protected]>
2593    - David Terei <[email protected]>
2594 
2595 Edward Z. Yang <[email protected]> merged in further changes from GHC HEAD
2596 and fixed a few bugs.
2597]
2598[Fix an egregious strictness analyser bug (Trac #4924)
2599[email protected]**20110128080748
2600 Ignore-this: 3bf533c3d30b45a8e78b1fec3d9634f
2601 
2602 The "virgin" flag was being threaded rather than treated
2603 like an environment.  As a result, the second and subsequent
2604 recursive definitions in a module were not getting a
2605 correctly-initialised fixpoint loop, causing much worse
2606 strictness analysis results.  Indeed the symptoms in
2607 Trac #4924 were quite bizarre.
2608 
2609 Anyway, it's easily fixed.  Merge to stable branch.
2610]
2611[Refine incomplete-pattern checks (Trac #4905)
2612[email protected]**20110127131304
2613 Ignore-this: cf2e0852f20d1cadc6a2cba4272838f6
2614 
2615 The changes are:
2616 
2617 * New flag -fwarn-incomplete-uni-patterns, which checks for
2618   incomplete patterns in (a) lambdas, (b) pattern bindings
2619 
2620 * New flag is not implied by -W or -Wall (too noisy; and many
2621   libraries use incomplete pattern bindings)
2622 
2623 * Actually do the incomplete-pattern check for pattern bindings
2624   (previously simply omitted)
2625 
2626 * Documentation for new flag
2627]
2628[Fix "make 1" etc following the build system changes
2629Ian Lynagh <[email protected]>**20110127001739
2630 Ignore-this: 7ae0a41f2753d7740569f362a97ea5fb
2631 The logic is now in mk/compiler-ghc.mk rather than being duplicated in
2632 ghc/Makefile and compiler/Makefile.
2633]
2634[Fix vectorisation of recursive types
2635Roman Leshchinskiy <[email protected]>**20110126231843
2636 Ignore-this: 983fc42a659be2e085da9b16f994aa2e
2637]
2638[Fix dependencies among specialisations for imported Ids
2639[email protected]**20110126172112
2640 Ignore-this: 364e09c11affe7bfe8f1b934ea28bbb6
2641 
2642 This was a subtle one (Trac #4903).  See
2643   Note [Glom the bindings if imported functions are specialised]
2644 in Speclialise.
2645 
2646 Fundamentally, a specialised binding for an imported Id was being
2647 declared non-recursive, whereas in fact it can become recursive
2648 via a RULE.  Once it's specified non-recurive the OccAnal pass
2649 treats that as gospel -- and that in turn led to infinite inlining.
2650 
2651 Easily fixed by glomming all the specialised bindings in a Rec;
2652 now the OccAnal will sort them out correctly.
2653]
2654[Fix bug in roughTopNames
2655[email protected]**20110126171803
2656 Ignore-this: eca8b144162f1bd94e2ccb433bca1e02
2657 
2658 roughTopNames was returning a name that in fact might be
2659 "looked though" by the rule matcher. Result: a rule
2660 that should match was being pre-emptively discarded.
2661 
2662 See Note [Care with roughTopName].
2663 
2664 Fixes a bug noticed by Pedro (Trac #4918).
2665]
2666[Comments only, plus a tiny bit of debug printing
2667[email protected]**20110126171255
2668 Ignore-this: f84364b2b90fc860e9289dd40d0395ac
2669]
2670[Comments only
2671[email protected]**20110126171235
2672 Ignore-this: 79059977f82aaac7f9714ad09e820ea9
2673]
2674[Look through type synonyms when computing orphans
2675[email protected]**20110126171229
2676 Ignore-this: 6dfc45dae3a94cdb0022b2d21d6e09f6
2677 
2678 I renamed functions tyClsNamesOfTypes to oprhNamesOfType,
2679 because it's only used in that capacity, and we therefore
2680 want to look through type synonyms.  Similarly exprOrphNames.
2681 
2682 This fixes Trac #4912.
2683]
2684[Bleat a bit more informatively in unionLists
2685[email protected]**20110126171030
2686 Ignore-this: 80b276aa3d7971c6d7802b5f6b522d2e
2687]
2688[Keep separate linker flags, for when we want to link with gcc or ld
2689Ian Lynagh <[email protected]>**20110124233121]
2690[Fix validate on OS X 64
2691Ian Lynagh <[email protected]>**20110124183618]
2692[Split main/GHC into GHC and GhcMake
2693[email protected]**20110125161632
2694 Ignore-this: 502ea034de77ecd81173161836d78287
2695 
2696 There are two things going on in main/GHC.hs.
2697   * It's the root module of the GHC package
2698   * It contains lots of stuff for --make
2699 It is also gigantic (2.7k lines)
2700 
2701 This patch splits it into two
2702   * GHC.hs is the root module for the GHC package
2703       (1.3k lines)
2704   * GhcMake.hs contains the stuff for --make
2705       (1.4k lines)
2706 
2707 Happily the functional split divided it almost
2708 exactly in half.
2709 
2710 This is a pure refactoring.  There should be no
2711 behavioural change.
2712]
2713[Comments only
2714[email protected]**20110125131115
2715 Ignore-this: 7ec4e97a481d06894de940aba59c575d
2716]
2717[Fix Trac #3717 by making exprOkForSpeculation a bit cleverer
2718[email protected]**20110125110525
2719 Ignore-this: 13b606b05da69c29bf53aaf408fd602
2720 
2721 The main change here is to do with dropping redundant seqs.
2722 See Note [exprOkForSpeculation: case expressions] in CoreUtils.
2723]
2724[Improve dataToTag# magic
2725[email protected]**20110125110418
2726 Ignore-this: 11fdb265e030dec4d5b13ed6b16c9761
2727 
2728 dataToTag# is a bit unsatisfactory because it requires
2729 its argument to be evaluated, and we don't have a good
2730 way to enforce that. This patch adds some comments, and
2731 makes exprOkForSpeculation a bit less picky in the case
2732 of dataToTag# (since the argument may, in fact, not be
2733 eval'd).
2734]
2735[Fix Trac #4917: try a bit harder to unify on-the-fly
2736[email protected]**20110125110112
2737 Ignore-this: e96e0a19ab8517d4ba648efe91f6b379
2738 
2739 This is generally a modest improvement but, more important,
2740 it fixes a "unify-under-forall" problem.  See Note [Avoid deferring].
2741 
2742 There's still a lurking unsatisfactory-ness in that we can't
2743 defer arbitrary constraints that are trapped under a forall.
2744]
2745[DPH options updated
2746Manuel M T Chakravarty <[email protected]>**20110124043617
2747 Ignore-this: 6b7d2949b75f9c923f279c1178d2d042
2748 - '-Odph' is now '-O2 -fsimplifier-phases=3 -fsimplifier-iterations=20'
2749 - The new option '-fdph-none' is the default; it indicates that no DPH
2750   backend is selected and is the only valid option if the DPH libraries
2751   are not installed.  If vectorisation is attempted with -fdph-none a
2752   suitable error message is generated.
2753 - Hence, '-fdph-par' (or '-fdph-seq') needs to be explicitly selected
2754   when using vectorisation and when linking vectorised code.  (There
2755   seems to be no elegant way to avoid that.)
2756]
2757[Add build system profiling to build system
2758Ian Lynagh <[email protected]>**20110123151408
2759 Ignore-this: 75717810be32d60323980f9fd1baa853
2760]
2761[Fix ghci in stage3
2762Ian Lynagh <[email protected]>**20110123120232]
2763[Remove use of non-existent $$(dir) variable in the rts ghc.mk
2764Ian Lynagh <[email protected]>**20110123021815]
2765[Add some missing dependencies
2766Ian Lynagh <[email protected]>**20110123004208]
2767[Tweak some deps to avoid multiple $(wildcard ...)s
2768Ian Lynagh <[email protected]>**20110123001045
2769 Ignore-this: 38e53cb6f6b4f27c771ae0ed341f8958
2770 Note that some things depending on the rts/includes header files now
2771 depend on more files: They used to include depend on includes/*.h, but
2772 now they also depend on header files in subdirectories. As far as I can
2773 see this was a bug.
2774]
2775[Use := when assigning the result of $(wildcard ...)
2776Ian Lynagh <[email protected]>**20110122224532
2777 Ignore-this: 67e2ca2ffbcffb5b7f55bd60c17fc6cf
2778 Avoids repeated evaluations of things that need system calls etc
2779]
2780[Simplify the build system, and remove 2 phases
2781Ian Lynagh <[email protected]>**20110122190928
2782 Ignore-this: 7b6184088befcbc44ea47b2f4abf85a9
2783 From
2784     http://hackage.haskell.org/trac/ghc/wiki/Building/Architecture/Idiom/PhaseOrdering
2785 
2786 Phase 0:
2787     Includes: package-data.mk files for things built by the
2788               bootstrapping compiler.
2789     Builds:   the dependency files for hsc2hs and genprimopcode. We need
2790               to do this now, as hsc2hs needs to be buildable in phase 1's
2791               includes (so that we can make the hpc library's .hs source
2792               files, which in turn is necessary for making its dependency
2793               files), and genprimopcode needs to be buildable in phase 1's
2794               includes (so that we can make the primop-*.hs-incl files,
2795               which are sources for the stage1 compiler library, and thus
2796               necessary for making its dependency files).
2797 Phase 1:
2798     Includes: dependency files for things built by the bootstrapping
2799               compiler.
2800     Builds:   package-data.mk files for everything else. Note that this
2801               requires configuring the packages, which means telling cabal
2802               which ghc to use, and thus the stage1 compiler gets built
2803               during this phase.
2804 Phase "":
2805     Includes: dependency files for everything else.
2806     Builds:   Everything else.
2807]
2808[Manually control more of the Cabal flags for the compiler and ghc packages
2809Ian Lynagh <[email protected]>**20110121230552
2810 Ignore-this: 652b5f6327d246d7e2e47acbca614df2
2811 For some reason the Windows HEAD builder has started thinking the ghci
2812 flag should be on in stage 1. This should fix it, and generally make
2813 things a little more resilient.
2814]
2815[Remove some hardcoded makefile settings
2816Ian Lynagh <[email protected]>**20110121230245
2817 Ignore-this: 6b1b68aebdfbe02c15518985d2ea7559
2818 Now that we used cabal to configure the ghc-bin package they are no
2819 longer needed.
2820]
2821[tweak newArray# documentation again
2822Simon Marlow <[email protected]>**20110119140633
2823 Ignore-this: ceee33428dbad7e0f5eabfa0a2590466
2824]
2825[Fix OSTYPE test
2826Ian Lynagh <[email protected]>**20110120000308
2827 Ignore-this: 8fa5d5c03297cb507a166bd85675145c
2828]
2829[Comments only
2830[email protected]**20110119222247
2831 Ignore-this: ea531428e9093ecedb895735ed537791
2832]
2833[Add OSTYPE build-system variable, and use it
2834[email protected]**20110113155023
2835 Ignore-this: c4a75f0bb27a680924e57ca7075ec116
2836 
2837 The use is in install.mk.in, where we need to know when
2838 we're on Cygwin.
2839 
2840 This fixes the build on my Windows box, where I have
2841 both Msys and Cygwin.
2842]
2843[Remove an extraneous comma that stopped ghc-cabal from building
2844Ian Lynagh <[email protected]>**20110119222359]
2845[Move some make variables around
2846Ian Lynagh <[email protected]>**20110119221545
2847 Ignore-this: c57c93f39d72c3baef7c5f466861dd5b
2848]
2849[Remove a debugging 'info'
2850Ian Lynagh <[email protected]>**20110119203305
2851 Ignore-this: ea912ba205eaae1d2bcf0cce7c13628d
2852]
2853[Move the PACKAGE_MAGIC evaluation inside package-data.mk
2854Ian Lynagh <[email protected]>**20110119203229
2855 Ignore-this: 497c4e83ae75089c24d6c794c4e2891f
2856]
2857[Fix libraries/index.html's haddock dependency on Windows
2858Ian Lynagh <[email protected]>**20110119172310]
2859[Add configure phases for the stage 3 compiler
2860Ian Lynagh <[email protected]>**20110119130629]
2861[Include kfreebsdgnu in the list of Target Platforms.
2862Marco Silva <[email protected]>**20110118222352
2863 Ignore-this: 759482baf33903b98cd837636a3f5328
2864]
2865[Fix documentation bug: newArray# accepts word count, not byte count.
2866Edward Z. Yang <ezyang@mit.edu>**20110118221834
2867 Ignore-this: 8daab134bf72a740b89d273fb4e983d5
2868]
2869[Update the location of libffi.dll.a
2870Ian Lynagh <igloo@earth.li>**20110118164225
2871 As far as I can see this has been wrong for some time, but only bit
2872 recently.
2873]
2874[Update the generics docs; pointed out by Christian Maeder
2875Ian Lynagh <igloo@earth.li>**20110117214632]
2876[ghc-cabal now adds the language flag being used
2877Ian Lynagh <igloo@earth.li>**20110117184833
2878 Ignore-this: 8198892ef7f8009561d3181425cde942
2879 This means we get -XHaskell98 added to the list of flags, just like we
2880 would if we were building with Cabal.
2881]
2882[Reinstate the OS X flags in the LDFLAGS etc variables
2883Ian Lynagh <igloo@earth.li>**20110117200540
2884 Ignore-this: 9261baa1843100f65b02fb91c1a0d225
2885 I expect this will fix:
2886 http://www.haskell.org/pipermail/cvs-ghc/2011-January/059098.html
2887]
2888[Add NondecreasingIndentation extension to ghc-bin
2889Ian Lynagh <igloo@earth.li>**20110117200427
2890 Ignore-this: b6b029ee6dfbda482c91d17e835f9000
2891]
2892[Change an "if ... else return ()" into a "when"
2893Ian Lynagh <igloo@earth.li>**20110117191714
2894 Ignore-this: 7de58b728e4fce7f86d7d24a3089e6c7
2895]
2896[Add NondecreasingIndentation to the list of extensions in ghc-pkg
2897Ian Lynagh <igloo@earth.li>**20110117190610
2898 Ignore-this: 20ce8144b7b64d1f67de2f6983717da3
2899]
2900[Add NondecreasingIndentation to the list of extensions in the ghc package
2901Ian Lynagh <igloo@earth.li>**20110117190404
2902 Ignore-this: 516b45e93c1b3bbb66da5414d9aabef1
2903]
2904[Fix deps on the ghc package
2905Ian Lynagh <igloo@earth.li>**20110117173010
2906 The standard libraries/$depname scheme doesn't apply, so we need to
2907 handle it specially.
2908]
2909[Tidy up gmp cleaning
2910Ian Lynagh <igloo@earth.li>**20110117121155
2911 Ignore-this: 61d9a57d14b70732f62d6b2c8d6d197a
2912]
2913[Remove redundant libraries/cabal-bin.hs
2914Ian Lynagh <igloo@earth.li>**20110116194919
2915 Ignore-this: 13b4a8d26fa06ec952351603c3bb40ee
2916]
2917[Turn off dtrace unless you override USE_DTRACE
2918Ian Lynagh <igloo@earth.li>**20110116180306
2919 Ignore-this: beafc2002091fa7f0e66666004c870a5
2920 There are problems with dtrace on 64bit 10.5. For now at least, we
2921 just turn dtrace off unless you override USE_DTRACE
2922]
2923[Simplify a bit of makefile
2924Ian Lynagh <igloo@earth.li>**20110116175218
2925 Ignore-this: 18f02e40e36eca2e2cab79c152c72541
2926]
2927[Tweak Windows phase ordering
2928Ian Lynagh <igloo@earth.li>**20110116173459
2929 Ignore-this: bb8a70741be4574edc149349acd0f4be
2930]
2931[Handle dependencies of programs on libraries correctly
2932Ian Lynagh <igloo@earth.li>**20110116155627]
2933[It's not clear if LDFLAGS flags will be given to gcc or ld,
2934Ian Lynagh <igloo@earth.li>**20110116151230
2935 Ignore-this: a6a2d0b1f550c922c32f6f252e4e3285
2936 and they accept different flags, so for now do nothing
2937]
2938[Fix cross-package dependency generation on Windows
2939Ian Lynagh <igloo@earth.li>**20110116150901
2940 Ignore-this: f78baaa7074ca36a6a4ff8a7e6f2e35
2941]
2942[Add some Windows-only CONFIGURE_PHASEs
2943Ian Lynagh <igloo@earth.li>**20110116150826
2944 Ignore-this: abf1bf498609107eb206b22d483613de
2945]
2946[Simplify, and future-proof, a dependency in the build system
2947Ian Lynagh <igloo@earth.li>**20110116020035
2948 Ignore-this: d089133430828d041b3601b1e9c8b22a
2949]
2950[Remove an unnecessary phase, and some unnecessary deps
2951Ian Lynagh <igloo@earth.li>**20110116015943
2952 Ignore-this: e649b072d006db5db97aee26d3753f65
2953 now that cross-package deps are tracked correctly.
2954]
2955[We can now pass -include-pkg-deps to the bootstrapping compiler
2956Ian Lynagh <igloo@earth.li>**20110116015714
2957 Ignore-this: bdfed941124bb93111f117800be5f2d8
2958]
2959[Remove some flags that are redundant now GHC gets configured by Cabal
2960Ian Lynagh <igloo@earth.li>**20110116003154
2961 Ignore-this: 43a023c5103b72c91d53cf3bed7a4c50
2962]
2963[Change some HC_OPTS var handling
2964Ian Lynagh <igloo@earth.li>**20110116003104
2965 Ignore-this: 629f4a3d37028f71a477c22ed4e8591e
2966 In particular, this means ghc gets built with -rtsopt, -threaded, etc again.
2967]
2968[Remove some unnecessary workarounds
2969Ian Lynagh <igloo@earth.li>**20110116002803
2970 Ignore-this: 5ecc62f765522c08c44aa0814c5b840e
2971 We can now rely on cross-package deps working properly, as we require
2972 GHC 6.12.
2973]
2974[Tidy up a bit
2975Ian Lynagh <igloo@earth.li>**20110116001121
2976 Ignore-this: a2baabc6da0cf2877507b7833d5b0fc7
2977]
2978[Build system improvements
2979Ian Lynagh <igloo@earth.li>**20110115231927
2980 Ignore-this: 92ea6514addc8aa8734d7e0eb61b50cb
2981 We no longer use dummy-ghc; instead we don't configure most packages
2982 until the stage1 compiler is available.
2983   
2984 We also now use Cabal for building the ghc-bin package.
2985 
2986 There are a couple more sanity checks too.
2987]
2988[Whitespace tweak
2989Ian Lynagh <igloo@earth.li>**20110115214149
2990 Ignore-this: 3e564566f311be473e94f6af609bdeaa
2991]
2992[Fix libffi build rules
2993Ian Lynagh <igloo@earth.li>**20110115202104
2994 Ignore-this: 57e1763d2079301b0165be7deba29c85
2995 Fixes a rare race when both libHSffi.a and libHSffi_p.a were being built
2996 at the same time:
2997 
2998 "cp" libffi/dist-install/build/libffi.a libffi/dist-install/build/libHSffi.a
2999 "cp" libffi/dist-install/build/libffi.a libffi/dist-install/build/libHSffi.a
3000 "cp" libffi/dist-install/build/libffi.so libffi/dist-install/build/libHSffi-ghc7.1.20110115.so
3001 cp: cannot create regular file `libffi/dist-install/build/libHSffi.a': File exists
3002]
3003[Fix Trac #4874: specialisation of INLINABLE things
3004simonpj@microsoft.com**20110114163227
3005 Ignore-this: b90543117ebddaf3bbeeaf0af0c18699
3006 
3007 Johan discovered that when INLINABLE things are specialised
3008 bad things can happen. This patch implements a hack -- but
3009 it's a simple hack and it solves the problem.
3010 
3011 See Note [Inline specialisations].
3012 
3013 The hack part is that really INLINABLE should not cause *any* loss
3014 optimisation, and it does; see Note [Don't w/w INLINABLE things] in
3015 WorkWrap.
3016]
3017[Comments only
3018simonpj@microsoft.com**20110114162959
3019 Ignore-this: f76d4d8f527c3fcd2598ec8cc5fd3049
3020]
3021[Fix a buglet in postInlineUnconditionally
3022simonpj@microsoft.com**20110114162927
3023 Ignore-this: 7a7b8610ef863907843d4ae36a8a1a3c
3024 
3025 Under obscure circumstances (actually only shown up when fixing something
3026 else) it was possible for a variable binding to be discarded although
3027 it was still used.  See Note [Top level and postInlineUnconditionally]
3028]
3029[cope with empty libraries/stamp directory (in git repo)
3030Simon Marlow <marlowsd@gmail.com>**20110114142406
3031 Ignore-this: 6e95c44368d784f86a0c1c1d1e24d810
3032]
3033[add .gitignore
3034Simon Marlow <marlowsd@gmail.com>**20110114142353
3035 Ignore-this: 23d7cabd2b04eedfe4c33ad94a120474
3036]
3037[Fix longstanding bug in C-- inlining for functions calls.
3038Edward Z. Yang <ezyang@mit.edu>**20110113130654
3039 Ignore-this: 79001003b1f3cc5005207ccfed980c21
3040]
3041[fix for remote repos without -r
3042Simon Marlow <marlowsd@gmail.com>**20110113131147
3043 Ignore-this: 3ddd8a4c616cad01a2dbdb500fb54279
3044]
3045[add a version of packages that stores all the repos in git
3046Simon Marlow <marlowsd@gmail.com>**20110113111733
3047 Ignore-this: fcca2eb2e753ee20bb5abce7f30f5205
3048]
3049[add the -r flag from darcs-all
3050Simon Marlow <marlowsd@gmail.com>**20110113111654
3051 Ignore-this: ada88377bd95ebb9c668dd48954f321e
3052]
3053[Make Template Haskell classInstances function return [ClassInstance]
3054simonpj@microsoft.com**20110113111421
3055 Ignore-this: d14381f0a94170965414dd8724188356
3056 
3057 This is a recently-introduce function, which was returning
3058 a [Name], being the names of the dfuns.  But what you really
3059 want (obviously!) is the ClassInstances, and we have a TH type
3060 for that.
3061 
3062 This is an API change, so don't merge into GHC 7.0.  But it's
3063 a new part of TH which is still settling down.
3064 
3065 Fixes Trac #4863.
3066]
3067[Improve the finder's error messages
3068simonpj@microsoft.com**20110113111233
3069 Ignore-this: ec4819b0a44af9fd03dc0a8b8e13699d
3070 
3071 I'd done all the work to add fuzzy-match suggestions, but they
3072 weren't really being used!  Here's what you get now
3073 
3074    module Foo where
3075     import Data.Lst
3076 
3077 Foo.hs:3:1:
3078     Failed to load interface for `Data.Lst'
3079     Perhaps you meant
3080       Data.List (from base)
3081       Data.List (needs flag -package haskell2010-1.0.0.0)
3082       Data.Int (needs flag -package haskell2010-1.0.0.0)
3083     Use -v to see a list of the files searched for.
3084]
3085[White space only
3086simonpj@microsoft.com**20110113093931
3087 Ignore-this: 4e46acca5241615a3283996052a634a
3088]
3089[Produce an error message, not a crash, for HsOpApp with non-var operator
3090simonpj@microsoft.com**20110112170719
3091 Ignore-this: df0f6f2e3318f9c33a714609019b0262
3092 
3093 Fixes Trac #4877.
3094]
3095[update to work with current packages file format
3096Simon Marlow <marlowsd@gmail.com>**20110112160224
3097 Ignore-this: da73498734aadbfbf0a31389a9dc44d
3098]
3099[In configure, test that GHC generates code for the correct platform (#4819)
3100Simon Marlow <marlowsd@gmail.com>**20110107163541
3101 Ignore-this: 29541d3896f9c9bcf791510edae70254
3102 Patch supplied by the bug reporter, tidied up by me.
3103 
3104 $ ./configure --with-ghc=$HOME/fp/bin/i386-unknown-linux/ghc --build=x86_64-unknown-linux
3105 checking for gfind... no
3106 checking for find... /usr/bin/find
3107 checking for sort... /usr/bin/sort
3108 checking for GHC version date... inferred 7.1.20110107
3109 checking version of ghc... 7.0.1
3110 checking build system type... x86_64-unknown-linux-gnu
3111 checking host system type... x86_64-unknown-linux-gnu
3112 checking target system type... x86_64-unknown-linux-gnu
3113 Host platform inferred as: i386-unknown-linux
3114 Target platform inferred as: i386-unknown-linux
3115 This GHC (/home/simonmar/fp/bin/i386-unknown-linux/ghc) does not generate code for the build platform
3116    GHC target platform    : i386-unknown-linux
3117    Desired build platform : x86_64-unknown-linux
3118]
3119[Major refactoring of the type inference engine
3120simonpj@microsoft.com**20110112145604
3121 Ignore-this: 6a7fc90c9b798e89505606726cc8090e
3122 
3123 This patch embodies many, many changes to the contraint solver, which
3124 make it simpler, more robust, and more beautiful.  But it has taken
3125 me ages to get right. The forcing issue was some obscure programs
3126 involving recursive dictionaries, but these eventually led to a
3127 massive refactoring sweep.
3128 
3129 Main changes are:
3130  * No more "frozen errors" in the monad.  Instead "insoluble
3131    constraints" are now part of the WantedConstraints type.
3132 
3133  * The WantedConstraint type is a product of bags, instead of (as
3134    before) a bag of sums.  This eliminates a good deal of tagging and
3135    untagging.
3136 
3137  * This same WantedConstraints data type is used
3138      - As the way that constraints are gathered
3139      - As a field of an implication constraint
3140      - As both argument and result of solveWanted
3141      - As the argument to reportUnsolved
3142 
3143  * We do not generate any evidence for Derived constraints. They are
3144    purely there to allow "impovement" by unifying unification
3145    variables.
3146 
3147  * In consequence, nothing is ever *rewritten* by a Derived
3148    constraint.  This removes, by construction, all the horrible
3149    potential recursive-dictionary loops that were making us tear our
3150    hair out.  No more isGoodRecEv search either. Hurrah!
3151 
3152  * We add the superclass Derived constraints during canonicalisation,
3153    after checking for duplicates.  So fewer superclass constraints
3154    are generated than before.
3155 
3156  * Skolem tc-tyvars no longer carry SkolemInfo.  Instead, the
3157    SkolemInfo lives in the GivenLoc of the Implication, where it
3158    can be tidied, zonked, and substituted nicely.  This alone is
3159    a major improvement.
3160 
3161  * Tidying is improved, so that we tend to get t1, t2, t3, rather
3162    than t1, t11, t111, etc
3163 
3164    Moreover, unification variables are always printed with a digit
3165    (thus a0, a1, etc), so that plain 'a' is available for a skolem
3166    arising from a type signature etc. In this way,
3167      (a) We quietly say which variables are unification variables,
3168          for those who know and care
3169      (b) Types tend to get printed as the user expects.  If he writes
3170              f :: a -> a
3171              f = ...blah...
3172          then types involving 'a' get printed with 'a', rather than
3173          some tidied variant.
3174 
3175  * There are significant improvements in error messages, notably
3176    in the "Cannot deduce X from Y" messages.
3177]
3178[Fix installation on cygwin
3179Ian Lynagh <igloo@earth.li>**20110111194838
3180 Ignore-this: fe923d0619da3bd3a34968106c92fdab
3181]
3182[Do dependency analysis when kind-checking type declarations
3183simonpj@microsoft.com**20110110110351
3184 Ignore-this: 17a8dee32694d3e1835cf7bb02d3abb5
3185 
3186 This patch fixes Trac #4875.  The main point is to do dependency
3187 analysis on type and class declarations, and kind-check them in
3188 dependency order, so as to improve error messages.
3189 
3190 This patch means that a few programs that would typecheck before won't
3191 typecheck any more; but before we were (naughtily) going beyond
3192 Haskell 98 without any language-extension flags, and Trac #4875
3193 convinces me that doing so is a Bad Idea.
3194 
3195 Here's an example that won't typecheck any more
3196        data T a b = MkT (a b)
3197        type F k = T k Maybe
3198 
3199 If you look at T on its own you'd default 'a' to kind *->*;
3200 and then kind-checking would fail on F.
3201 
3202 But GHC currently accepts this program beause it looks at
3203 the *occurrences* of T.
3204]
3205[Move imports around (no change in behaviour)
3206simonpj@microsoft.com**20110110105647
3207 Ignore-this: d618cabbc52be7d7968de1e0bdd44082
3208]
3209[Make fuzzy matching a little less eager for short identifiers
3210simonpj@microsoft.com**20110107102855
3211 Ignore-this: a753643e88433d74b44a480cc0f4170c
3212 
3213 For single-character identifiers we now don't make any suggestions
3214 See comments in Util.fuzzyLookup
3215]
3216[Fix Trac #4870: get the inlining for an imported INLINABLE Id
3217simonpj@microsoft.com**20110105002712
3218 Ignore-this: 60c0192eb48590c2e6868d15ba8f84ce
3219 
3220 We need the unfolding even for a *recursive* function (indeed
3221 that's the point) and I was using the wrong function to get it
3222 (idUnfolding rather than realIdUnfolding).
3223]
3224[Rejig the includes/ installation rules
3225Ian Lynagh <igloo@earth.li>**20110109181158
3226 They're a little nicer now, and a regression in the cygwin build is
3227 fixed (the $i in the destination wasn't surviving being passed through
3228 cygpath).
3229]
3230[Make DESTDIR an absolute path when installing; fixes #4883
3231Ian Lynagh <igloo@earth.li>**20110108171635]
3232[Add utils/ghc-cabal/Makefile
3233Ian Lynagh <igloo@earth.li>**20110108144049]
3234[Remove redundant import
3235Ian Lynagh <igloo@earth.li>**20110108130047
3236 Ignore-this: 1c7fdec77b48319c845c9593b5fb94af
3237]
3238[Improve error message of :set in ghci (ticket #4190).
3239Michal Terepeta <michal.terepeta@gmail.com>**20101130211505
3240 Ignore-this: ccc8a0816a900ba8c4a966285a465b23
3241]
3242[Improve error message when importing data constructors (ticket #4058).
3243Michal Terepeta <michal.terepeta@gmail.com>**20101127211338
3244 Ignore-this: 3289a08f0391dd90dfef2e0403a04ccd
3245]
3246[catch SIGTSTP and save/restore terminal settings (#4460)
3247Simon Marlow <marlowsd@gmail.com>**20110107124042
3248 Ignore-this: 38f7f27bf75178899f466404c048241d
3249 As far as I can tell, it is the responsibility of the program to save
3250 and restore its own terminal settings across a suspend/foreground, the
3251 shell doesn't do it (which seems odd).  So I've added a signal handler
3252 for SIGTSTP to the RTS which will save and restore the terminal
3253 settings iff we modified them with hSetBuffering or hSetEcho (we
3254 already restore them at exit time in these cases).
3255]
3256[comment updates
3257Simon Marlow <marlowsd@gmail.com>**20110107094236
3258 Ignore-this: c2b30b0c98645e2847a2749c7fdc167f
3259]
3260[On Cygwin, use a Cygwin-style path for /bin/install's destination
3261Ian Lynagh <igloo@earth.li>**20110106223030
3262 
3263 cygwin's /bin/install doesn't set file modes correctly if the
3264 destination path is a C: style path:
3265 
3266 $ /bin/install -c -m 644 foo /cygdrive/c/cygwin/home/ian/foo2
3267 $ /bin/install -c -m 644 foo c:/cygwin/home/ian/foo3
3268 $ ls -l foo*
3269 -rw-r--r-- 1 ian None 0 2011-01-06 18:28 foo
3270 -rw-r--r-- 1 ian None 0 2011-01-06 18:29 foo2
3271 -rwxrwxrwx 1 ian None 0 2011-01-06 18:29 foo3
3272 
3273 This causes problems for bindisttest/checkBinaries.sh which then
3274 thinks that e.g. the userguide HTML files are binaries.
3275 
3276 We therefore use a /cygdrive path if we are on cygwin
3277]
3278[Fix mkUserGuidePart program name on Windows
3279Ian Lynagh <igloo@earth.li>**20110106143707]
3280[add comment to remind people to update driver/gcc/gcc.c
3281Simon Marlow <marlowsd@gmail.com>**20110106152402
3282 Ignore-this: c07d7ac11eb9221ef821f78aab1807cb
3283]
3284[use Win32 CreateProcess() rather than mingw spawnv() (#4531)
3285Simon Marlow <marlowsd@gmail.com>**20110106133834
3286 Ignore-this: 4c0947853549dad034622c044391af6c
3287]
3288[update paths now that we upgraded gcc to 4.5.0
3289Simon Marlow <marlowsd@gmail.com>**20110106133729
3290 Ignore-this: f8f9bcad984fdd472e0ae958b66bea9d
3291]
3292[fix markup
3293Simon Marlow <marlowsd@gmail.com>**20110106093152
3294 Ignore-this: 555b6e39ae6b5a177b03c5edffc169ab
3295]
3296[fix up multi-line GHCi patch (#4316)
3297Simon Marlow <marlowsd@gmail.com>**20110105154548
3298 Ignore-this: 53d5d489bd2a792c01f2cc56a11f3ce6
3299]
3300[multiline commands in GHCi #4316
3301Vivian McPhail <haskell.vivian.mcphail@gmail.com>**20101105051308
3302 This patch adds support for multiline commands in GHCi.
3303 
3304 The first line of input is lexed.  If there is an active
3305 layout context once the lexer reaches the end of file, the
3306 user is prompted for more input.
3307 
3308 Multiline input is exited by an empty line and can be escaped
3309 with a user interrupt.
3310 
3311 Multiline mode is toggled with `:set +m`
3312]
3313[Replace a #if with a Haskell conditional
3314Ian Lynagh <igloo@earth.li>**20110105183011
3315 Ignore-this: f08f3a4356586efab2725ad8704b2eba
3316]
3317[Whitespace only in X86.Ppr
3318Ian Lynagh <igloo@earth.li>**20110105171124]
3319[Fix error compiling AsmCodeGen.lhs for PPC Mac (unused makeFar addr)
3320naur@post11.tele.dk**20101219213555
3321 Ignore-this: ab25d5f2e2ebe163547d5babaf4b1dbf
3322]
3323[Define cTargetArch and start to use it rather than ifdefs
3324Ian Lynagh <igloo@earth.li>**20110104220013
3325 Using Haskell conditionals means the compiler sees all the code, so
3326 there should be less rot of code specific to uncommon arches. Code
3327 for other platforms should still be optimised away, although if we want
3328 to support targetting other arches then we'll need to compile it
3329 for-real anyway.
3330]
3331[Fix error compiling AsmCodeGen.lhs for PPC Mac (rtsPackageId)
3332naur@post11.tele.dk**20101219212530
3333 Ignore-this: 946f6d3e0d3c3ddf2dc07b85e1f82d85
3334]
3335[Rename the c*Platform variables to c*PlatformString
3336Ian Lynagh <igloo@earth.li>**20110104210250]
3337[Fix #4829 (build does not respect --with-gcc option)
3338gwright@antiope.com**20101221133233
3339 Ignore-this: 37918feb82f911c2beb75915b6e8b97b
3340 
3341 This patch fixes what seems to be the last problem with the --with-gcc
3342 option.  On OS X, we need to pass the path to gcc to dtrace as the
3343 preprocessor.  (Internally, dtrace on OS X sets the default preprocessor
3344 to /usr/bin/gcc.)  ATM, dtrace is only supported on OS X, so we don't
3345 need any conditionalization.  If dtrace is ported to other platforms,
3346 we might need to change this. However, usage on other platforms will
3347 probably be similar to OS X, since many of Apple's changes are to
3348 use the gnu toolchain instead of the Sun toolchain.
3349   
3350]
3351[Drop a seven years old workaround for happy
3352Matthias Kilian <kili@outback.escape.de>**20101231192343
3353 Ignore-this: a9348c91292c113bd967464fbe859f1f
3354]
3355[Add gcc and ld flags to --info output
3356Ian Lynagh <igloo@earth.li>**20101220173520]
3357[Fix Trac #4525: report type errors in terms of the immediate type synonym
3358simonpj@microsoft.com**20101224082520
3359 Ignore-this: a3bd076bfe0e1c6f575b106f77f326c6
3360 
3361 This small change means that if you have
3362      type Age = Int
3363 and you try to unify Age and Bool, you'll get a complaint about
3364 not matching Age and Bool, rather than Int and Bool.  See the notes
3365 with Trac #4525
3366]
3367[Comments only
3368simonpj@microsoft.com**20101224082310
3369 Ignore-this: 1f69fa3244663b653607093efcdf7b0
3370]
3371[Implement fuzzy matching for the Finder
3372simonpj@microsoft.com**20101222175400
3373 Ignore-this: 4dfbbc07bcb59c5f4cee9a902c89d63e
3374 
3375 ..so that you get a more helpful message when
3376 you mis-spell a module name in an 'import'.
3377 
3378 Validates, but not fully tested.
3379 
3380 Based on Max's patch in Trac #2442, but heavily refactored.
3381]
3382[Implement fuzzy matching for the renamer
3383simonpj@microsoft.com**20101222175306
3384 Ignore-this: 66478736249de793a61612f184d484b0
3385 
3386 ...so that you get helpful suggestions when you mis-spell a name
3387 Based on Max's patch in Trac #2442, but heavily refactored.
3388]
3389[Add fuzzyLookup, a variant of fuzzyMatch
3390simonpj@microsoft.com**20101222175124
3391 Ignore-this: f0eafaf275b9edffee176f2fb4effe2f
3392 
3393 Plus, I changed quite a bit of layout to make the lines shorter.
3394]
3395[White space only
3396simonpj@microsoft.com**20101222175001
3397 Ignore-this: ddabada2042f4529e83d1c1ecb052306
3398]
3399[Layout and white space only
3400simonpj@microsoft.com**20101222174950
3401 Ignore-this: bf4e4fd9d39714d0461ab799d6b8ed91
3402]
3403[Tidy up rebindable syntax for MDo
3404simonpj@microsoft.com**20101222132210
3405 Ignore-this: b40ae8709e5a39d75f2b2813169af215
3406 
3407 For a long time an 'mdo' expression has had a SyntaxTable
3408 attached to it.  However, we're busy deprecating SyntaxTables
3409 in favour of rebindable syntax attached to individual Stmts,
3410 and MDoExpr was totally inconsistent with DoExpr in this
3411 regard.
3412 
3413 This patch tidies it all up.  Now there's no SyntaxTable on
3414 MDoExpr, and 'modo' is generally handled much more like 'do'.
3415 
3416 There is resulting small change in behaviour: now MonadFix is
3417 required only if you actually *use* recursion in mdo. This
3418 seems consistent with the implicit dependency analysis that
3419 is done for mdo.
3420 
3421 Still to do:
3422   * Deal with #4148 (this patch is on the way)
3423   * Get rid of the last remaining SyntaxTable on HsCmdTop
3424]
3425[Make the occurrence analyser track preInlineUnconditionally
3426simonpj@microsoft.com**20101222131156
3427 Ignore-this: 82edb06bcca6106327c2cce9d78c4e61
3428 
3429 This fixes a somewhat obscure situation in which an
3430 over-optimistic use of "occurs once" led to an infinite
3431 sequence of simplifier iterations.  Se Note [Cascading inlines]
3432 for the details.
3433 
3434 This showed up when compiling rather large DPH programs, which
3435 run lots of iterations of the simplifier, which in turn made
3436 compilation take much longer than necessary.
3437]
3438[Make mkDFunUnfolding more robust
3439simonpj@microsoft.com**20101222130854
3440 Ignore-this: 10bb4168a7080c843f6613043354151b
3441 
3442 It now uses tcSplitDFunTy, which is designed for the purpose and
3443 allows arbitrary argument types to the dfun, rather than
3444 tcSplitSigmaTy.  This generality is used in DPH, which has
3445 internally-generated dfuns with impliciation-typed arguments.
3446 
3447 To do this I had to make tcSplitDFunTy return the number of
3448 arguments, so there are some minor knock-on effects in other
3449 modules.
3450]
3451[Count allocations more accurately
3452Simon Marlow <marlowsd@gmail.com>**20101221152956
3453 Ignore-this: 33a4ed3a77bf35f232aa5c9078e8e380
3454 The allocation stats (+RTS -s etc.) used to count the slop at the end
3455 of each nursery block (except the last) as allocated space, now we
3456 count the allocated words accurately.  This should make allocation
3457 figures more predictable, too.
3458 
3459 This has the side effect of reducing the apparent allocations by a
3460 small amount (~1%), so remember to take this into account when looking
3461 at nofib results.
3462]
3463[Add a simple arity analyser
3464simonpj@microsoft.com**20101221165800
3465 Ignore-this: d5f3a9f56404d61bb7f374c875b42c49
3466 
3467 I've wanted to do this for ages, but never gotten around to
3468 it.  The main notes are in Note [Arity analysis] in SimplUtils.
3469 
3470 The motivating example for arity analysis is this:
3471 
3472   f = \x. let g = f (x+1)
3473           in \y. ...g...
3474 
3475 What arity does f have?  Really it should have arity 2, but a naive
3476 look at the RHS won't see that.  You need a fixpoint analysis which
3477 says it has arity "infinity" the first time round.
3478 
3479 This makes things more robust to the way in which you write code.  For
3480 example, see Trac #4474 which is fixed by this change.
3481 
3482 Not a huge difference, but worth while:
3483 
3484         Program           Size    Allocs   Runtime   Elapsed
3485 --------------------------------------------------------------------------------
3486             Min          -0.4%     -2.2%    -10.0%    -10.0%
3487             Max          +2.7%     +0.3%     +7.1%     +6.9%
3488  Geometric Mean          -0.3%     -0.2%     -2.1%     -2.2%
3489 
3490 I don't really believe the runtime numbers, because the machine was
3491 busy, but the bottom line is that not much changes, and what does
3492 change reliably (allocation and size) is in the right direction.
3493]
3494[Miscellaneous tidying up and refactoring
3495simonpj@microsoft.com**20101221161931
3496 Ignore-this: 7706d3065e6fc1defafe1cb8975b9969
3497]
3498[Comments only
3499simonpj@microsoft.com**20101221161918
3500 Ignore-this: 3e269a62da5cbec72d3e4b8328689628
3501]
3502[Single-method classes are implemented with a newtype
3503simonpj@microsoft.com**20101221161911
3504 Ignore-this: 4ca00f0b367fbeb8146146bc53116eb7
3505 
3506 This patch changes things so that such classes rely on the coercion
3507 mechanism for inlining (since the constructor is really just a cast)
3508 rather than on the dfun mechanism, therby removing some needless
3509 runtime indirections.
3510]
3511[For single-method classes use newtypes
3512simonpj@microsoft.com**20101101080736
3513 Ignore-this: d3851f92eb2385501411da57066b775e
3514 
3515 This clears up an awkward hack for exprIsConApp_maybe, and
3516 works better too.  See Note [Single-method classes] in
3517 TcInstDcls.
3518]
3519[boundTaskExiting: don't set task->stopped unless this is the last call (#4850)
3520Simon Marlow <marlowsd@gmail.com>**20101221115807
3521 Ignore-this: 7e1b990aa08b3ea9cdaa9385d8e41e48
3522 The bug in this case was that we had a worker thread making a foreign
3523 call which invoked a callback (in this case it was performGC, I
3524 think).  When the callback ended, boundTaskExiting() was setting
3525 task->stopped, but the Task is now per-OS-thread, so it is shared by
3526 the worker that made the original foreign call.  When the foreign call
3527 returned, because task->stopped was set, the worker was not placed on
3528 the queue of spare workers.  Somehow the worker woke up again, and
3529 found the spare_workers queue empty, which lead to a crash.
3530 
3531 Two bugs here: task->stopped should not have been set by
3532 boundTaskExiting (this broke when I split the Task and InCall structs,
3533 in 6.12.2), and releaseCapabilityAndQueueWorker() should not be
3534 testing task->stopped anyway, because it should only ever be called
3535 when task->stopped is false (this is now an assertion).
3536]
3537[releaseCapabilityAndQueueWorker: task->stopped should be false (#4850)
3538Simon Marlow <marlowsd@gmail.com>**20101221114911
3539 Ignore-this: b9c430a4bc9d2e0c7f4140d6d6971eae
3540]
3541[Fix Windows build
3542Simon Marlow <marlowsd@gmail.com>**20101221102101
3543 Ignore-this: f4773e06d030a335c9ac721af193b8d2
3544]
3545[raiseExceptionHelper: update tso->stackobj->sp before calling threadStackOverflow (#4845)
3546Simon Marlow <marlowsd@gmail.com>**20101221101411
3547 Ignore-this: 48495131fcc8c548882a470c2509f9f5
3548]
3549[add 'make re2' for rebuilding stage2 (similarly re1 and re3)
3550Simon Marlow <marlowsd@gmail.com>**20101221100254
3551 Ignore-this: 5c0afe3810b66a5b6e53a3a0fe933945
3552]
3553[fix warning
3554Simon Marlow <marlowsd@gmail.com>**20101216160415
3555 Ignore-this: 54a0eedfa5b7fc15c31dffffb1b10aad
3556]
3557[Small improvement to CorePrep
3558simonpj@microsoft.com**20101220123715
3559 Ignore-this: d0490225ed1895a1a5b97d786ed44260
3560 
3561 This change avoids unnecessary bindings. Example
3562 
3563      foo (let fn = \x.blah in
3564           in fn)
3565 
3566 We were generating something stupid like
3567 
3568     let fn = \x.blah in
3569     let fn' = \eta. fn eta
3570     in foo fn
3571 
3572 Now we don't.  The change is quite small.
3573 
3574 Thanks to Ben for showing me an example of this happening.
3575]
3576[Fix warnings
3577Ian Lynagh <igloo@earth.li>**20101219202711
3578 Ignore-this: 898015b086f684de5371bf97a23b9e2e
3579]
3580[Small refactoring
3581Ian Lynagh <igloo@earth.li>**20101219194032]
3582[Drop GhcWithLlvmCodeGen configuration bits
3583Matthias Kilian <kili@outback.escape.de>**20101219180239
3584 Ignore-this: 815ed46be7650792f85807c232edfcc
3585 The LLVM code generator is always built unconditionally, so both the
3586 configuration variable in mk/config.mk.in as well as the string in
3587 compilerInfo can be removed.
3588]
3589[Pass --hoogle to haddock; fixes trac #4521
3590Ian Lynagh <igloo@earth.li>**20101219125243]
3591[vectoriser: don't always pass superclass dictionaries to PA dfuns
3592Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218234838
3593 Ignore-this: 77c71976db8fc63aeb83f4abdba994d8
3594 
3595 This is just a guess at how this should work.
3596]
3597[vectoriser: delete dead code
3598Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218125350
3599 Ignore-this: 437eea71ad15ad5dc7902e596597c577
3600]
3601[vectoriser: adapt to new superclass story part I (dictionary construction)
3602Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101218114953
3603 Ignore-this: 29c9aa46a1622beaae1dcefc4c482a30
3604]
3605[Replace uses of the old try function with the new one
3606Ian Lynagh <igloo@earth.li>**20101218230827
3607 Ignore-this: 5dd6c1a4142405aa1aab3fc4ec07eea6
3608]
3609[Replace uses of the old catch function with the new one
3610Ian Lynagh <igloo@earth.li>**20101218213350]
3611[Create ~/.ghc/ if it doesn't already exist; fixes trac #4522
3612Ian Lynagh <igloo@earth.li>**20101218184925]
3613[Document GADTSyntax extension
3614Ian Lynagh <igloo@earth.li>**20101218150121]
3615[Implement GADTSyntax extension
3616Ian Lynagh <igloo@earth.li>**20101218144550]
3617[Whitespace-only in rts/Linker.c
3618Ian Lynagh <igloo@earth.li>**20101217234124]
3619[Add some casts to fix warnings; patch from Greg Wright
3620Ian Lynagh <igloo@earth.li>**20101217223811]
3621[Put an up-to-date Makefile in docs/Makefile
3622Ian Lynagh <igloo@earth.li>**20101217223707
3623 It doesn't do anything useful yet, but it works with the new build system
3624]
3625[do not compile part of shared lib RTS with -fno-PIC on Solaris
3626Karel Gardas <karel.gardas@centrum.cz>**20101217085133
3627 Ignore-this: 8c8dbb45cac0578a58a3557f1e03c66
3628]
3629[provide shared libraries support on i386-unknown-solaris2 platform
3630Karel Gardas <karel.gardas@centrum.cz>**20101217084617
3631 Ignore-this: b6079c6a39a71200a1ee863573e40828
3632]
3633[fix CPP detection of Solaris in NCG
3634Karel Gardas <karel.gardas@centrum.cz>**20101217084510
3635 Ignore-this: 9d1ce59d469294eab1f0cbc697e48d69
3636]
3637[Fix checkBinaries on OS X
3638Ian Lynagh <igloo@earth.li>**20101216201121]
3639[Remove redundant HpcMap and HpcSet wrappers around Data.{Map,Set}
3640Ian Lynagh <igloo@earth.li>**20101216190605]
3641[Use "-perm -u+x" rather than "-executable" to find executables
3642Ian Lynagh <igloo@earth.li>**20101216145235
3643 On Windows, -executable is matching the html docs.
3644]
3645[Remove a debugging print
3646Ian Lynagh <igloo@earth.li>**20101216011459]
3647[__GLASGOW_HASKELL__ >= 604 is now always true
3648Ian Lynagh <igloo@earth.li>**20101215214656]
3649[Remove more dead code now we require GHC >= 6.12
3650Ian Lynagh <igloo@earth.li>**20101215213715]
3651[refactor and tidy up the section on RTS options
3652Simon Marlow <marlowsd@gmail.com>**20101216123151
3653 Ignore-this: 9cdafd687351d8a3ff879b64347f85d3
3654]
3655[Related to #4826: Some minor tweaks to the wording of the User Guide, section 4.16
3656Orphi <MathematicalOrchid@hotmail.com>**20101209170440
3657 Ignore-this: c3d942d58594be7d4c2eb4dc3a22f19
3658]
3659[FIX #4826 partial: Add -rtsopts and -with-rtsopts to User Guide section 4.11.6
3660Orphi <MathematicalOrchid@hotmail.com>**20101209165152
3661 Ignore-this: 2fc1c0abbb783695773ab0f9c013bbaa
3662]
3663[FIX #4826 partially: Change -f to -? in User Guide section F4.16
3664Orphi <MathematicalOrchid@hotmail.com>**20101209144148
3665 Ignore-this: 73410b350e80c8943ae722dec8dea44b
3666]
3667[fix #3910
3668Simon Marlow <marlowsd@gmail.com>**20101216114452
3669 Ignore-this: 410e95e188344a523520e192a3fb58ea
3670]
3671[remove an optimisation that wasn't
3672Simon Marlow <marlowsd@gmail.com>**20101215152656
3673 Ignore-this: e8413f58e8292c6e7463087d885b3a7d
3674]
3675[fix a warning
3676Simon Marlow <marlowsd@gmail.com>**20101216105723
3677 Ignore-this: ed6024378021a698ce638267ed3e21ab
3678]
3679[use EXTERN_INLINE instead of STATIC_INLINE to avoid some gcc warnings
3680Simon Marlow <marlowsd@gmail.com>**20101216105709
3681 Ignore-this: d4e1586cf318883a8e611b55df7fbf10
3682]
3683[remove dead code
3684Simon Marlow <marlowsd@gmail.com>**20101216104944
3685 Ignore-this: 97a04a3e37c1b28abc222a28bab3d17d
3686]
3687[fix retainer profiling: add missing case for TSO
3688Simon Marlow <marlowsd@gmail.com>**20101216103900
3689 Ignore-this: 11bda81ac159f638d719c1f6177702fb
3690]
3691[add a missing STACK case
3692Simon Marlow <marlowsd@gmail.com>**20101216102100
3693 Ignore-this: ac1c036b5cbf4209b1d10b6ab1c83f27
3694]
3695[Remove code that is dead now that we need >= 6.12 to build
3696Ian Lynagh <igloo@earth.li>**20101215201006]
3697[fix for large stack allocations
3698Simon Marlow <marlowsd@gmail.com>**20101215152419
3699 Ignore-this: d9aca17d68bd99214c126989a2318e79
3700]
3701[Implement stack chunks and separate TSO/STACK objects
3702Simon Marlow <marlowsd@gmail.com>**20101215120843
3703 Ignore-this: 73fa9460314d4a4e54456af12bef7960
3704 
3705 This patch makes two changes to the way stacks are managed:
3706 
3707 1. The stack is now stored in a separate object from the TSO.
3708 
3709 This means that it is easier to replace the stack object for a thread
3710 when the stack overflows or underflows; we don't have to leave behind
3711 the old TSO as an indirection any more.  Consequently, we can remove
3712 ThreadRelocated and deRefTSO(), which were a pain.
3713 
3714 This is obviously the right thing, but the last time I tried to do it
3715 it made performance worse.  This time I seem to have cracked it.
3716 
3717 2. Stacks are now represented as a chain of chunks, rather than
3718    a single monolithic object.
3719 
3720 The big advantage here is that individual chunks are marked clean or
3721 dirty according to whether they contain pointers to the young
3722 generation, and the GC can avoid traversing clean stack chunks during
3723 a young-generation collection.  This means that programs with deep
3724 stacks will see a big saving in GC overhead when using the default GC
3725 settings.
3726 
3727 A secondary advantage is that there is much less copying involved as
3728 the stack grows.  Programs that quickly grow a deep stack will see big
3729 improvements.
3730 
3731 In some ways the implementation is simpler, as nothing special needs
3732 to be done to reclaim stack as the stack shrinks (the GC just recovers
3733 the dead stack chunks).  On the other hand, we have to manage stack
3734 underflow between chunks, so there's a new stack frame
3735 (UNDERFLOW_FRAME), and we now have separate TSO and STACK objects.
3736 The total amount of code is probably about the same as before.
3737 
3738 There are new RTS flags:
3739 
3740    -ki<size> Sets the initial thread stack size (default 1k)  Egs: -ki4k -ki2m
3741    -kc<size> Sets the stack chunk size (default 32k)
3742    -kb<size> Sets the stack chunk buffer size (default 1k)
3743 
3744 -ki was previously called just -k, and the old name is still accepted
3745 for backwards compatibility.  These new options are documented.
3746]
3747[comments on SRC_HC_OPTS (#4829)
3748Simon Marlow <marlowsd@gmail.com>**20101214101340
3749 Ignore-this: e2bdec00f07b68e82837e77a4faf6514
3750]
3751[fix another sanity error, and refactor/tidy up
3752Simon Marlow <marlowsd@gmail.com>**20101209163919
3753 Ignore-this: d5ce953ac78e90fc0e22cd9848d26e2e
3754]
3755[Fix a bug in functorLikeTraverse, which was giving wrong answer for tuples
3756simonpj@microsoft.com**20101215123725
3757 Ignore-this: 560220e92429b5b1a6197a62f94a4ff2
3758 
3759 This bug led to Trac #4816, which is hereby fixed
3760]
3761[Improve printing for -ddump-deriv
3762simonpj@microsoft.com**20101215121955
3763 Ignore-this: 3181c948c4c2471bd99b32c5ee487a1e
3764]
3765[Tighten up what it means to be an "enumeration data constructor"
3766simonpj@microsoft.com**20101215121927
3767 Ignore-this: 459b3f9f7994a13094ed87b0768b33a8
3768 
3769 See Note [Enumeration types] in TyCon, and comments in Trac #4528
3770]
3771[Allow enumerations to have phantom arguments.
3772simonpj@microsoft.com**20101215121817
3773 Ignore-this: 32ef8cb869e6e38c2e43b3ae87b1b9a8
3774 
3775 The bytecode generator was being too eager.
3776 Fixes Trac #4528, or rather, a near variant.
3777]
3778[Instance declaration overlap allowed if *either* has -XOverlappingInstances
3779simonpj@microsoft.com**20101214180500
3780 Ignore-this: f1b1492541a7e0464ebc6adb45510a2e
3781 
3782 This satisfies Trac #3877.  Documentation is changed too.
3783 I'm not sure if this should go in 7.0.2.
3784]
3785[Fix Trac #4841: behave right with TypeSynonymInstances and NoFlexibleInstances
3786simonpj@microsoft.com**20101214174755
3787 Ignore-this: dccd707fdca84904b7885170a296ecb6
3788 
3789 When we have TypeSynonymInstances without FlexibleInstances we should still
3790 insist on a H98-style instance head, after looking through the synonym.
3791 
3792 This patch also make FlexibleInstances imply TypeSynonymInstances.  Anything
3793 else is a bit awkward, and not very useful.
3794 
3795]
3796[Fix Trac #3731: more superclass subtlety (sigh)
3797simonpj@microsoft.com**20101214180344
3798 Ignore-this: f4168e59f3164303ba7be022ba19c37b
3799 
3800 I will add more comments, but I want to commit this tonight,
3801 so the overnight builds get it.
3802]
3803[Less verbose debug print
3804simonpj@microsoft.com**20101214180248
3805 Ignore-this: e405e8545763e913155abe43daf7e36c
3806]
3807[Wibble to InstEnv.instanceHead
3808simonpj@microsoft.com**20101214082939
3809 Ignore-this: 851db517f8638a0aeb7ad461298f7e9f
3810 
3811 Fixes an accidental glitch in T1835
3812]
3813[Remove dead code now that we require the bootstrapping compiler be >= 6.12
3814Ian Lynagh <igloo@earth.li>**20101214011011]
3815[GHC 6.12 is now needed to build the HEAD
3816Ian Lynagh <igloo@earth.li>**20101214010923]
3817[Add libstdc++-4.5.0-1-mingw32-dll-6.tar.lzma to mingw tarballs
3818Ian Lynagh <igloo@earth.li>**20101213223153]
3819[Fix recursive superclasses (again).  Fixes Trac #4809.
3820simonpj@microsoft.com**20101213171511
3821 Ignore-this: b91651397918fd8f0183812f9a070073
3822 
3823 This patch finally deals with the super-delicate question of
3824 superclases in possibly-recursive dictionaries.  The key idea
3825 is the DFun Superclass Invariant (see TcInstDcls):
3826 
3827      In the body of a DFun, every superclass argument to the
3828      returned dictionary is
3829        either   * one of the arguments of the DFun,
3830        or       * constant, bound at top level
3831 
3832 To establish the invariant, we add new "silent" superclass
3833 argument(s) to each dfun, so that the dfun does not do superclass
3834 selection internally.  There's a bit of hoo-ha to make sure that
3835 we don't print those silent arguments in error messages; a knock
3836 on effect was a change in interface-file format.
3837 
3838 A second change is that instead of the complex and fragile
3839 "self dictionary binding" in TcInstDcls and TcClassDcl,
3840 using the same mechanism for existential pattern bindings.
3841 See Note [Subtle interaction of recursion and overlap] in TcInstDcls
3842 and Note [Binding when looking up instances] in InstEnv.
3843 
3844 Main notes are here:
3845 
3846   * Note [Silent Superclass Arguments] in TcInstDcls,
3847     including the DFun Superclass Invariant
3848 
3849 Main code changes are:
3850 
3851   * The code for MkId.mkDictFunId and mkDictFunTy
3852 
3853   * DFunUnfoldings get a little more complicated;
3854     their arguments are a new type DFunArg (in CoreSyn)
3855 
3856   * No "self" argument in tcInstanceMethod
3857   * No special tcSimplifySuperClasss
3858   * No "dependents" argument to EvDFunApp
3859 
3860 IMPORTANT
3861    It turns out that it's quite tricky to generate the right
3862    DFunUnfolding for a specialised dfun, when you use SPECIALISE
3863    INSTANCE.  For now I've just commented it out (in DsBinds) but
3864    that'll lose some optimisation, and I need to get back to
3865    this.
3866]
3867[Doing the smart canonicalization only if we are not simplifying a Rule LHS.
3868dimitris@microsoft.com**20101210132221
3869 Also, same thing now applies for adding superclasses.
3870 
3871]
3872[Moved canonicalisation inside solveInteract
3873dimitris@microsoft.com**20101209141215
3874 
3875 Moreover canonicalisation now is "clever", i.e. it never canonicalizes a class
3876 constraint if it can already discharge it from some other inert or previously
3877 encountered constraints. See Note [Avoiding the superclass explosion]
3878 
3879]
3880[GHCi linker: Assume non-Haskell libraries are dynamic libs
3881Ian Lynagh <igloo@earth.li>**20101213124930
3882 Ignore-this: aa153a8f6e309c7b3dae7e46bb7a9583
3883 This works around a segfault we get when trying to load libiconv.a on
3884 some platforms.
3885]
3886[Add --version support to ghc-cabal
3887Ian Lynagh <igloo@earth.li>**20101212213600
3888 Ignore-this: ef696dcb1b96a23765f9f18e75a56f5
3889]
3890[Don't link the GHC RTS into our C-only programs
3891Ian Lynagh <igloo@earth.li>**20101210185402
3892 Ignore-this: 56f620f7eb16a03e7497a161bc48458e
3893]
3894[Build a copy of ghc-cabal with the in-tree compiler, for the bindist
3895Ian Lynagh <igloo@earth.li>**20101210181123]
3896[Add a test that all programs in the bindist were built with the right GHC
3897Ian Lynagh <igloo@earth.li>**20101210161218
3898 They should use the GHC from the build tree, not the bootstrapping compiler.
3899]
3900[Fix Trac #4534: renamer bug
3901simonpj@microsoft.com**20101210084530
3902 Ignore-this: 8163bfa3a56344cfe89ad17c62e9655d
3903   
3904 The renamer wasn't attaching the right used-variables to a
3905 TransformStmt constructor.
3906 
3907 The real modification is in RnExpr; the rest is just
3908 pretty-printing and white space.
3909]
3910[White space only
3911simonpj@microsoft.com**20101210084255
3912 Ignore-this: 3fcf8a4fc8c15052c379a135951d53ea
3913]
3914[Comments only
3915simonpj@microsoft.com**20101210084116
3916 Ignore-this: 55bb1de129b1c9513751885eaa84b884
3917]
3918[Make the case-to-let transformation a little less eager
3919simonpj@microsoft.com**20101208172251
3920 Ignore-this: 55eaa1b5753af31aeb32ec792cb6b662
3921 
3922 See Note [Case elimination: lifted case].
3923 Thanks to Roman for identifying this case.
3924]
3925[warning fix: don't redefine BLOCKS_PER_MBLOCK
3926Simon Marlow <marlowsd@gmail.com>**20101210094002
3927 Ignore-this: cadba57f1c38f5e2af1de37d0a79c7ee
3928]
3929[Only reset the event log if logging is turned on (addendum to #4512)
3930Simon Marlow <marlowsd@gmail.com>**20101210093951
3931 Ignore-this: c9f85f0de2b11a37337672fba59aecc6
3932]
3933[allocate enough room for the longer filename (addendum to #4512)
3934Simon Marlow <marlowsd@gmail.com>**20101210093906
3935 Ignore-this: 270dc0219d98f1e0f9e006102ade7087
3936]
3937[Fix Windows build: move rtsTimerSignal to the POSIX-only section
3938Simon Marlow <marlowsd@gmail.com>**20101210090045
3939 Ignore-this: aa1844b70b9f1a44447787c4bbe10d44
3940]
3941[Default the value of -dppr-cols when the static flags aren't initialised yet
3942Ben Lippmeier <benl@ouroborus.net>**20101210060154
3943 Ignore-this: 4cea29085ef904f379a8829714c9e180
3944 If GHC's command line options are bad then the options parser uses the
3945 pretty printer before the -dppr-cols flag has been read.
3946]
3947[Defensify naked read in LLVM mangler
3948Ben Lippmeier <benl@ouroborus.net>**20101210045922
3949 Ignore-this: 1373f597863851bd03e7a7254558ed04
3950]
3951[Formatting only
3952Ben Lippmeier <benl@ouroborus.net>**20101210042600
3953 Ignore-this: 20bbcd95c70b59094d0bb8a63e459103
3954]
3955[Always ppr case alts on separate lines
3956Ben Lippmeier <benl@ouroborus.net>**20101208070508
3957 Ignore-this: 7e2edd57a61427621aeb254aef84f0f7
3958]
3959[Add -dppr-colsN to set width of dumps
3960Ben Lippmeier <benl@ouroborus.net>**20101208070245
3961 Ignore-this: edc64fee6c373b895bb80b83b549ce1a
3962]
3963[Add -dppr-case-as-let to print "strict lets" as actual lets
3964Ben Lippmeier <benl@ouroborus.net>**20101208065548
3965 Ignore-this: eb1d122dbd73b5263cae3a9f8259a838
3966]
3967[Suppress more info with -dsuppress-idinfo
3968Ben Lippmeier <benl@ouroborus.net>**20101208063037
3969 Ignore-this: 5e8213d7b8d2905e245917aa3e83efc5
3970]
3971[Implement -dsuppress-type-signatures
3972Ben Lippmeier <benl@ouroborus.net>**20101208062814
3973 Ignore-this: 34dbefe5f8d7fe58ecb26d6a748d1c71
3974]
3975[Add more suppression flags
3976Ben Lippmeier <benl@ouroborus.net>**20101208020723
3977 Ignore-this: b010ba9789a2fde6b815f33494fcc23c
3978  -dsuppress-all
3979  -dsuppress-type-applications
3980  -dsuppress-idinfo
3981]
3982[fix ticket number (#4505)
3983Simon Marlow <marlowsd@gmail.com>**20101209120404
3984 Ignore-this: 5769c5ce2a8d69d62d977a9ae138ec23
3985]
3986[fix warnings
3987Simon Marlow <marlowsd@gmail.com>**20101209115844
3988 Ignore-this: ffff37feb2abbfc5bd12940c7007c208
3989]
3990[Catch too-large allocations and emit an error message (#4505)
3991Simon Marlow <marlowsd@gmail.com>**20101209114005
3992 Ignore-this: c9013ab63dd0bd62ea045060528550c6
3993 
3994 This is a temporary measure until we fix the bug properly (which is
3995 somewhat tricky, and we think might be easier in the new code
3996 generator).
3997 
3998 For now we get:
3999 
4000 ghc-stage2: sorry! (unimplemented feature or known bug)
4001   (GHC version 7.1 for i386-unknown-linux):
4002         Trying to allocate more than 1040384 bytes.
4003 
4004 See: http://hackage.haskell.org/trac/ghc/ticket/4550
4005 Suggestion: read data from a file instead of having large static data
4006 structures in the code.
4007]
4008[Export the value of the signal used by scheduler (#4504)
4009Dmitry Astapov <dastapov@gmail.com>**20101208183755
4010 Ignore-this: 427bf8c2469283fc7a6f759440d07d87
4011]
4012[Tweak the "sorry" message a bit
4013Simon Marlow <marlowsd@gmail.com>**20101208163212
4014 Ignore-this: aa1ce5bc3c27111548204b740572efbe
4015 
4016 -              "sorry! (this is work in progress)\n"
4017 +              "sorry! (unimplemented feature or known bug)\n"
4018]
4019[:unset settings support
4020Boris Lykah <lykahb@gmail.com>**20101123190132
4021 Ignore-this: 5e97c99238f5d2394592858c34c004d
4022 Added support for settings [args, prog, prompt, editor and stop].
4023 Now :unset supports the same set of options as :set.
4024]
4025[Fix Windows memory freeing: add a check for fb == NULL; fixes trac #4506
4026Ian Lynagh <igloo@earth.li>**20101208152349
4027 Also added a few comments, and a load of code got indented 1 level deeper.
4028]
4029[Fixes for #4512: EventLog.c - provides ability to terminate event logging, Schedule.c - uses them in forkProcess.
4030Dmitry Astapov <dastapov@gmail.com>**20101203133950
4031 Ignore-this: 2da7f215d6c22708a18291a416ba8881
4032]
4033[Make CPPFLAGS variables, as well as CFLAGS and LDFLAGS
4034Ian Lynagh <igloo@earth.li>**20101207010033
4035 Ignore-this: 2fc1ca1422aae1988d0fe1d29a8485d9
4036 This fixes the "does unsetenv return void" test in the unix package on
4037 OS X, if I tell it to make 10.4-compatible binaries. The test uses
4038 CPPFLAGS but not CFLAGS, so it thought it returned int (as it was
4039 in 10.5-mode), but the C compiler (using CFLAGS, so in 10.4 mode)
4040 thought it returned void.
4041 
4042 I also added CONF_LD_OPTS_STAGE$3 to the list of things in LDFLAGS,
4043 which looks like an accidental ommission.
4044]
4045[Add a configure message
4046Ian Lynagh <igloo@earth.li>**20101206215201]
4047[Link even programs containing no Haskell modules with GHC
4048Ian Lynagh <igloo@earth.li>**20101206203329
4049 I don't remember why we made it use gcc instead, but going back to
4050 using ghc doesn't seem to break anything, and should fix the build
4051 on OS X 10.6.
4052]
4053[Correct the stage that the includes/ tools are built in
4054Ian Lynagh <igloo@earth.li>**20101206203125]
4055[Tweak the cleaning of inplace/; fixes trac #4320
4056Ian Lynagh <igloo@earth.li>**20101205212048]
4057[Close .ghci files after reading them; fixes trac #4487
4058Ian Lynagh <igloo@earth.li>**20101205205301]
4059[Fix the behaviour of :history for ticks surrounding top level functions
4060pepeiborra@gmail.com**20101203202346
4061 Ignore-this: 8059d4859c52c0c9a235b937cb8cde1d
4062]
4063[Don't warn of duplicate exports in case of module exports.
4064Michal Terepeta <michal.terepeta@gmail.com>**20101127212116
4065 Ignore-this: ea225d517826f971c400bbb68d1405b8
4066 
4067 But only when the module exports refer to different modules.
4068 See ticket #4478.
4069]
4070[Fix whitespace/layout in RnNames.
4071Michal Terepeta <michal.terepeta@gmail.com>**20101030171303
4072 Ignore-this: 707a7955fc4fc51683cc5a1dfe57f93
4073]
4074[Tell gcc to support back to OS X 10.5
4075Ian Lynagh <igloo@earth.li>**20101203201558
4076 Ignore-this: f02d70e5b9cce50137981c6cb2b62a18
4077]
4078[Make RelaxedLayout off by default
4079Ian Lynagh <igloo@earth.li>**20101202140808
4080 I suspect this is a vary rarely used extension to the official layout
4081 rule.
4082]
4083[Fix up TcInstDcls
4084simonpj@microsoft.com**20101203180758
4085 Ignore-this: 9311aeb4ee67c799704afec90b5982d0
4086 
4087 I really don't know how this module got left out of my last
4088 patch, namely
4089   Thu Dec  2 12:35:47 GMT 2010  simonpj@microsoft.com
4090   * Re-jig simplifySuperClass (again)
4091 
4092 I suggest you don't pull either the patch above, or this
4093 one, unless you really have to.  I'm not fully confident
4094 that it works properly yet.  Ran out of time. Sigh.
4095]
4096[throwTo: report the why_blocked value in the barf()
4097Simon Marlow <marlowsd@gmail.com>**20101203094840
4098 Ignore-this: 3b167c581be1c51dfe3586cc6359e1d0
4099]
4100[handle ThreadMigrating in throwTo() (#4811)
4101Simon Marlow <marlowsd@gmail.com>**20101203094818
4102 Ignore-this: 8ef8cb7fd3b50a27f83c29968131d461
4103 If a throwTo targets a thread that has just been created with
4104 forkOnIO, then it is possible the exception strikes while the thread
4105 is still in the process of migrating.  throwTo() didn't handle this
4106 case, but it's fairly straightforward.
4107]
4108[removeThreadFromQueue: stub out the link field before returning (#4813)
4109Simon Marlow <marlowsd@gmail.com>**20101202160838
4110 Ignore-this: 653ae17bc1120d7f4130da94665002a1
4111]
4112[small tidyup
4113Simon Marlow <marlowsd@gmail.com>**20101126140620
4114 Ignore-this: 70b1d5ed4c81a7b29dd5980a2d84aae1
4115]
4116[Fix a recomp bug: make classes/datatypes depend directly on DFuns (#4469)
4117Simon Marlow <marlowsd@gmail.com>**20101202122349
4118 Ignore-this: 61c765583bb1d97caa88cf9b4f45b87c
4119 And remove the old mechanism of recording dfun uses separately,
4120 because it didn't work.
4121 
4122 This wiki page describes recompilation avoidance and fingerprinting.
4123 I'll update it to describe the new method and what went wrong with the
4124 old method:
4125 
4126 http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidance
4127]
4128[make a panic message more informative and suggest -dcore-lint (see #4534)
4129Simon Marlow <marlowsd@gmail.com>**20101201151706
4130 Ignore-this: 2a10761925d6f9f52675948baa30f7a
4131]
4132[Re-jig simplifySuperClass (again)
4133simonpj@microsoft.com**20101202123547
4134 Ignore-this: fe4062b8988258f6748ebd8fbd6515b5
4135 
4136 This fixes the current loop in T3731, and will fix other
4137 reported loops.  The loops show up when we are generating
4138 evidence for superclasses in an instance declaration.
4139 
4140 The trick is to make the "self" dictionary simplifySuperClass
4141 depend *explicitly* on the superclass we are currently trying
4142 to build.  See Note [Dependencies in self dictionaries] in TcSimplify.
4143 
4144 That in turn means that EvDFunApp needs a dependency-list, used
4145 when chasing dependencies in isGoodRecEv.
4146]
4147[A little refactoring (remove redundant argument passed to isGoodRecEv)
4148simonpj@microsoft.com**20101202123110
4149 Ignore-this: e517c5c12109a230f08dafb4d1e386df
4150]
4151[Make rebindable if-then-else a little more permissive
4152simonpj@microsoft.com**20101202122540
4153 Ignore-this: ddb552cfe307607b42d1e4baf4e3bf21
4154 
4155 See Note [Rebindable syntax for if].  Fixes Trac #4798.
4156 Thanks to Nils Schweinsberg <mail@n-sch.de>
4157]
4158[Improve error message (Trac #4799)
4159simonpj@microsoft.com**20101202102706
4160 Ignore-this: d9896e4d182936de1f256c820b96a8cf
4161]
4162[Fix a nasty bug in RULE matching: Trac #4814
4163simonpj@microsoft.com**20101202102618
4164 Ignore-this: ba058ad46a02bd2faf3a14de93fd19c6
4165 
4166 See Note [Matching lets], which explains it all in detail.
4167 It took me a day to think of a nice way to fix the bug,
4168 but I think the result is quite respectable. Subtle, though.
4169]
4170[Rename -XPArr to -XParallelArrays
4171Ben Lippmeier <benl@ouroborus.net>**20101130075415
4172 Ignore-this: 21b37680a7f25800d1200b59ad0b6b39
4173]
4174[FIX #1845 (unconditional relative branch out of range)
4175pho@cielonegro.org**20101130143014
4176 Ignore-this: df234bd8ad937104c455656fe3c33732
4177 
4178 Don't use mmap on powerpc-apple-darwin as mmap doesn't support
4179 reallocating but we need to allocate jump islands just after each
4180 object images. Otherwise relative branches to jump islands can fail
4181 due to 24-bits displacement overflow.
4182]
4183[rts/Linker.c (loadArchive):
4184pho@cielonegro.org**20101130142700
4185 Ignore-this: bc84f9369ce5c2d289440701b7a3a2ab
4186 
4187 This routine should be aware of Mach-O misalignment of malloc'ed memory regions.
4188]
4189[rts/Linker.c (machoGetMisalignment):
4190pho@cielonegro.org**20101130123355
4191 Ignore-this: 75425600049efd587e9873578e26392f
4192 
4193 Use fseek(3) instead of rewind(3) to move the file position indicator back to the initial position. Otherwise we can't use this function in loadArchive().
4194]
4195[rts/Linker.c (ocFlushInstructionCache):
4196pho@cielonegro.org**20101130121425
4197 Ignore-this: 1e2c207e4b1d17387617ec5d645204b7
4198 
4199 I found this function causes a segfault when ocAllocateSymbolExtras() has allocated a separate memory region for jump islands.
4200]
4201[Remove NewQualifiedOperators
4202Ian Lynagh <igloo@earth.li>**20101201181117
4203 The extension was rejected by Haskell', and deprecated in 7.0.
4204]
4205[fix ref to utils/ext-core, which moved to Hackage (extcore package)
4206Simon Marlow <marlowsd@gmail.com>**20101201092147
4207 Ignore-this: 272a7daaa335ef60bcc645db70b4d68b
4208]
4209[fix floating-point/FFI section: fenv is C99, not POSIX
4210Simon Marlow <marlowsd@gmail.com>**20101201092119
4211 Ignore-this: ce8b3edd428e4f77691dd739b5b4ae73
4212]
4213[Fixed some 'unused vars' warnings
4214keller@cse.unsw.edu.au**20101130013425
4215 Ignore-this: 35790d443faa23b87e4ba442e62376a3
4216]
4217[vectScalarLam handles int, float, and double now
4218keller@cse.unsw.edu.au**20101129231043
4219 Ignore-this: 6d67bdc8dd8577184040e791e6f3d0
4220]
4221[Handling of lets, letrec and case when checking if a lambda expr needs to be vectorised
4222keller@cse.unsw.edu.au**20101115051225
4223 Ignore-this: 1db6ed63d7b3f6d093e019322b407ff7
4224]
4225[Document the behaviour of fenv.h functions with GHC (#4391)
4226Simon Marlow <marlowsd@gmail.com>**20101126125336
4227 Ignore-this: bc4eab49428d567505a28add6fed90f1
4228]
4229[Remove the no-ghci-lib warning in ghc-pkg
4230Ian Lynagh <igloo@earth.li>**20101127235805
4231 GHCi libs are no longer necessary, as we can use the .a or .so versions
4232 instead.
4233]
4234[Add GNU-variant support to the .a parser, and other improvements/tidyups
4235Ian Lynagh <igloo@earth.li>**20101127223945]
4236[Re-indent only
4237Ian Lynagh <igloo@earth.li>**20101127191646]
4238[Improve linker debugging for archive files
4239Ian Lynagh <igloo@earth.li>**20101127190907]
4240[Always enable the archive-loading code
4241Ian Lynagh <igloo@earth.li>**20101127173000
4242 If the GHCi .o lib doesn't exist, load the .a instead
4243]
4244[Inherit the ForceSpecConstr flag in non-recursive nested bindings
4245Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127125025
4246 Ignore-this: 401391eae25cefcb4afaba2e357decc1
4247 
4248 This makes sure that join points are fully specialised in loops which are
4249 marked as ForceSpecConstr.
4250]
4251[Document -ddump-rule-firings and -ddump-rule-rewrites
4252Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127123528
4253 Ignore-this: beade2efe0cd767c0ce9d4f45a3380ba
4254]
4255[New flag -dddump-rule-rewrites
4256Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101127122022
4257 Ignore-this: c0ef5b8a199fbd1ef020258d2cde85a3
4258 
4259 Now, -ddump-rule-firings only shows the names of the rules that fired (it would
4260 show "before" and "after" with -dverbose-core2core previously) and
4261 -ddump-rule-rewrites always shows the "before" and "after" bits, even without
4262 -dverbose-core2core.
4263]
4264[Acutally, wild-card variables *can* have occurrences
4265simonpj@microsoft.com**20101126162409
4266 Ignore-this: 544bffed75eeccef03a1097f98524eea
4267 
4268 This patch removes the Lint test, and comments why
4269]
4270[Tidy up the handling of wild-card binders, and make Lint check it
4271simonpj@microsoft.com**20101126133210
4272 Ignore-this: 9e0be9f7867d53046ee5b0e478a0f433
4273 
4274 See Note [WildCard binders] in SimplEnv.  Spotted by Roman.
4275]
4276[Substitution should just substitute, not optimise
4277simonpj@microsoft.com**20101125172356
4278 Ignore-this: 657628d9b6796ceb5f915c43d56e4a06
4279 
4280 This was causing Trac #4524, by optimising
4281      (e |> co)  to   e
4282 on the LHS of a rule.  Result, the template variable
4283 'co' wasn't bound any more.
4284 
4285 Now that substition doesn't optimise, it seems sensible to call
4286 simpleOptExpr rather than substExpr when substituting in the
4287 RHS of rules.  Not a big deal either way.
4288]
4289[Make SpecConstr "look through" identity coercions
4290simonpj@microsoft.com**20101125172138
4291 Ignore-this: c1cc585ed890a7702c33987e971e0af6
4292]
4293[Comment only
4294simonpj@microsoft.com**20101125172011
4295 Ignore-this: 3c7be8791badd00dcca9610ebb8981d1
4296]
4297[White space only
4298simonpj@microsoft.com**20101101080748
4299 Ignore-this: f7133fc6b22ae263c6672543a8534a6f
4300]
4301[Keep a maximum of 6 spare worker threads per Capability (#4262)
4302Simon Marlow <marlowsd@gmail.com>**20101125135729
4303 Ignore-this: a020786569656bf2f3a1717b65d463bd
4304]
4305[Unicide OtherNumber category should be allowed in identifiers (#4373)
4306Simon Marlow <marlowsd@gmail.com>**20101115095444
4307 Ignore-this: e331b6ddb17550163ee91bd283348800
4308]
4309[vectoriser: fix warning
4310Ben Lippmeier <benl@ouroborus.net>**20101126044036
4311 Ignore-this: e1a66bb405bf2f3f56b42c3b13fd4bf3
4312]
4313[vectoriser: fix warning
4314Ben Lippmeier <benl@ouroborus.net>**20101126042950
4315 Ignore-this: df8dd25bcfb3946c2974b13953a2f2c7
4316]
4317[vectoriser: take class directly from the instance tycon
4318Ben Lippmeier <benl@ouroborus.net>**20101126042900
4319 Ignore-this: 626a416717a5a059f39e53f4ec95fc66
4320]
4321[vectoriser: comments only
4322Ben Lippmeier <benl@ouroborus.net>**20101125073201
4323 Ignore-this: 8846ea8895307083bd1ebbc5d7fb1c5
4324]
4325[vectoriser: follow changes in mkClass
4326Ben Lippmeier <benl@ouroborus.net>**20101125062349
4327 Ignore-this: d5018cc022686d4272e126ca9a12283a
4328]
4329[vectoriser: tracing wibbles
4330Ben Lippmeier <benl@ouroborus.net>**20101125062332
4331 Ignore-this: c2024d8f03bc03bee2851f4f1c139fd5
4332]
4333[mkDFunUnfolding wants the type of the dfun to be a PredTy
4334benl@ouroborus.net**20100914062939
4335 Ignore-this: 7aa6e6b140746184cf00355b50c83b66
4336]
4337[vectoriser: fix conflicts
4338Ben Lippmeier <benl@ouroborus.net>**20101125060904
4339 Ignore-this: cc3decab1affada8629ca3818b76b3bf
4340]
4341[Comments and formatting only
4342benl@ouroborus.net**20100914062903
4343 Ignore-this: b0fc25f0952cafd56cc25353936327d4
4344]
4345[Comments and formatting to type environment vectoriser
4346benl@ouroborus.net**20100909080405
4347 Ignore-this: ab8549d53f845c9d82ed9a525fda3906
4348]
4349[Don't mix implicit and explicit layout
4350Ian Lynagh <igloo@earth.li>**20101124231514]
4351[Whitespace only
4352Ian Lynagh <igloo@earth.li>**20101124230655]
4353[Separate NondecreasingIndentation out into its own extension
4354Ian Lynagh <igloo@earth.li>**20101124220507]
4355[Add another GHC layout rule relaxation to RelaxedLayout
4356Ian Lynagh <igloo@earth.li>**20101124205957]
4357[Remove an unused build system variable: GhcDir
4358Ian Lynagh <igloo@earth.li>**20101124140455]
4359[Remove unused build system variable: GhcHasEditline
4360Ian Lynagh <igloo@earth.li>**20101124140415]
4361[Remove unused variables from the build system: HBC, NHC, MKDEPENDHS
4362Ian Lynagh <igloo@earth.li>**20101124140052]
4363[Remove references to Haskell 98
4364Ian Lynagh <igloo@earth.li>**20101123233536
4365 They are no longer right, as we have Haskell' generating new Haskell
4366 standards.
4367]
4368[Tweak a configure test
4369Ian Lynagh <igloo@earth.li>**20101123170621]
4370[Add a configure test for the visibility hidden attribute
4371Ian Lynagh <igloo@earth.li>**20101123170541]
4372[sanity: fix places where we weren't filling fresh memory with 0xaa
4373Simon Marlow <marlowsd@gmail.com>**20101029092843
4374 Ignore-this: 2cb18f7f5afcaf33371aeffce67e218f
4375]
4376[Just some alpha renaming
4377Ian Lynagh <igloo@earth.li>**20101121144455
4378 Ignore-this: d5e807c5470840efc199e29f7d50804c
4379]
4380[Fix bug #3165 (:history throws irrefutable pattern failed)
4381pepeiborra@gmail.com**20101115223623
4382 Ignore-this: 73edf56e502b4d0385bc044133b27946
4383 
4384 I ran across this bug and took the time to fix it, closing
4385 a long time due TODO in InteractiveEval.hs
4386 
4387 Instead of looking around to find the enclosing declaration
4388 of a tick, this patch makes use of the information already collected during the
4389 coverage desugaring phase
4390]
4391[For bindists, build ghc-pwd with stage 1
4392Ian Lynagh <igloo@earth.li>**20101121183520
4393 Ignore-this: a3b5c8b78c81ec1b6d5fbf23da346ff5
4394 rather then the bootstrapping compiler. This fixes problems where the
4395 bootstrapping compiler dynamically links against libraries not on the
4396 target machine.
4397]
4398[Makefile tweak
4399Ian Lynagh <igloo@earth.li>**20101121183342
4400 Ignore-this: cd55a2819c1a5fd36da1bc7a75d2ded1
4401]
4402[Fix a makefile include ordering sanity check
4403Ian Lynagh <igloo@earth.li>**20101121174916
4404 Ignore-this: d0bdd41c4b618944d04ecb4f54fdd0f1
4405]
4406[Add an extension for GHC's layout-rule relaxations
4407Ian Lynagh <igloo@earth.li>**20101120215340
4408 Still TODO: Add the other relaxation (#1060) and update the alternative
4409 layout rule to use the extension.
4410]
4411[Tweak the bindist configure.ac.in
4412Ian Lynagh <igloo@earth.li>**20101120173735]
4413[configure.ac tweaks
4414Ian Lynagh <igloo@earth.li>**20101120170245]
4415[When testing the bindist, tell it where gcc is
4416Ian Lynagh <igloo@earth.li>**20101120155920
4417 The location isn't baked into the bindist, as it may differ from
4418 machine to machine.
4419]
4420[Comments only
4421simonpj@microsoft.com**20101119100153
4422 Ignore-this: 7abd5d965ea805770449d6f8dadbb921
4423]
4424[ForceSpecConstr now forces specialisation even for arguments which aren't scrutinised
4425Roman Leshchinskiy <rl@cse.unsw.edu.au>**20101118212839
4426 Ignore-this: db45721d29a694e53746f8b76513efa4
4427]
4428[Move the superclass generation to the canonicaliser
4429simonpj@microsoft.com**20101118120533
4430 Ignore-this: 5e0e525402a240b709f2b8104c1682b2
4431 
4432 Doing superclass generation in the canonicaliser (rather than
4433 TcInteract) uses less code, and is generally more efficient.
4434 
4435 See Note [Adding superclasses] in TcCanonical.
4436 
4437 Fixes Trac #4497.
4438]
4439[Fix the generation of in-scope variables for IfaceLint check
4440simonpj@microsoft.com**20101118090057
4441 Ignore-this: bbcdba61ddf89d07fe69ca99c2017e3f
4442]
4443[Comments only
4444simonpj@microsoft.com**20101118090034
4445 Ignore-this: fa2936d35a0f7be4e4535ea9e2b7bf7b
4446]
4447[Omit bogus test for -XDeriveFunctor
4448simonpj@microsoft.com**20101118090028
4449 Ignore-this: a534243011809ebbb788b910961601c5
4450 
4451 It was duplicated in the case of 'deriving( Functor )'
4452 and wrong for 'deriving( Foldable )'
4453]
4454[Improve error message on advice from a user
4455simonpj@microsoft.com**20101118085306
4456 Ignore-this: bd4f3858ff24e602e985288f27d536f3
4457 
4458 See Trac #4499
4459]
4460[TAG 2010-11-18
4461Ian Lynagh <igloo@earth.li>**20101118011554
4462 Ignore-this: ccadbe7fadd1148d2ee3caa8c8821ec5
4463]
4464Patch bundle hash:
446529c6b68df47f0b1a2f48fdcfe48733cf4e284fbe