ghc-hetmet.git
24 years ago[project @ 2000-02-28 12:02:31 by sewardj]
sewardj [Mon, 28 Feb 2000 12:02:32 +0000 (12:02 +0000)]
[project @ 2000-02-28 12:02:31 by sewardj]
Many changes to improve the quality and correctness of generated code,
both for x86 and all-platforms.  The intent is that the x86 NCG will
now be good enough for general use.

-- Add an almost-trivial Stix (generic) peephole optimiser, whose sole
   purpose is elide assignments to temporaries used only once, in the
   very next tree.  This generates substantially better code for
   conditionals on all platforms.  Enhance Stix constant folding to
   take advantage of the inlining.

   The inlining presents subsequent insn selection phases with more
   complex trees than would have previously been used to.  This has
   shown up several bugs in the x86 insn selectors, now fixed.
   (assumptions that data size is Word, when could be Byte,
    assumptions that an operand will always be in a temp reg, etc)

-- x86: Use the FLDZ and FLD1 insns.

-- x86: spill FP registers with 80-bit loads/stores so that
   Intel's extra 16 bits of accuracy are not lost.  If this isn't
   done, FP spills are not suitably transparent.  Increase the
   number of spill words available to 2048.

-- x86: give the register allocator more flexibility in choosing
   spill temporaries.

-- x86, RegAllocInfo.regUsage: fix error for GST, and rewrite to
   make it clearer.

-- Correctly track movements in the C stack pointer, and generate
   correct spill code for archs which spill against the stack pointer
   even when the stack pointer moves.  Redo the x86 ccall mechanism
   to push args on the C stack in the normal way.  Rather than have
   the spiller have to analyse code sequences to determine the current
   stack offset, the insn selectors communicate the current offset
   whenever it changes by inserting a DELTA pseudo-insn.  Then the
   spiller only has to spot DELTAs.

   This means having a new native-code-generator monad (Stix.NatM)
   which carries both a UniqSupply and the current stack offset.

-- Remove the asmPar/asmSeq ways of grouping insns together.
   In the presence of fixed registers, it is hard to demonstrate
   that insn selectors using asmPar always give correct code, and
   the extra complication doesn't help any.

   Also, directly construct code sequences using tree-based ordered
   lists (utils/OrdList.lhs) for linear-time appends, rather than
   the bizarrely complex method using fns and fn composition.

-- Inline some hcats in printing of x86 address modes.

-- Document more of the hidden assumptions which insn selection relies
   on, particular wrt addressing modes.

24 years ago[project @ 2000-02-28 11:53:44 by simonmar]
simonmar [Mon, 28 Feb 2000 11:53:44 +0000 (11:53 +0000)]
[project @ 2000-02-28 11:53:44 by simonmar]
oops, back out local patch that accidentally got committed with rev. 1.139.

24 years ago[project @ 2000-02-28 10:57:44 by simonmar]
simonmar [Mon, 28 Feb 2000 10:57:44 +0000 (10:57 +0000)]
[project @ 2000-02-28 10:57:44 by simonmar]
fix = vs. == in conditional

24 years ago[project @ 2000-02-28 10:14:27 by simonmar]
simonmar [Mon, 28 Feb 2000 10:14:27 +0000 (10:14 +0000)]
[project @ 2000-02-28 10:14:27 by simonmar]
document the -recomp option explicitly.

24 years ago[project @ 2000-02-28 09:17:54 by simonmar]
simonmar [Mon, 28 Feb 2000 09:17:54 +0000 (09:17 +0000)]
[project @ 2000-02-28 09:17:54 by simonmar]
'IPVARID :: type' moved from btype to type, to reduce conflicts.

24 years ago[project @ 2000-02-25 22:41:41 by andy]
andy [Fri, 25 Feb 2000 22:41:41 +0000 (22:41 +0000)]
[project @ 2000-02-25 22:41:41 by andy]
Wibble.

(#ifdef incorrectly nested inside begin-end code)

24 years ago[project @ 2000-02-25 17:35:11 by sewardj]
sewardj [Fri, 25 Feb 2000 17:35:11 +0000 (17:35 +0000)]
[project @ 2000-02-25 17:35:11 by sewardj]
Use createIOThread and not createGenThread, even for the interpreter.

24 years ago[project @ 2000-02-25 15:20:33 by simonmar]
simonmar [Fri, 25 Feb 2000 15:20:33 +0000 (15:20 +0000)]
[project @ 2000-02-25 15:20:33 by simonmar]
Add simple mkWeakPtr/addFinalizer test.

24 years ago[project @ 2000-02-25 15:07:09 by simonmar]
simonmar [Fri, 25 Feb 2000 15:07:09 +0000 (15:07 +0000)]
[project @ 2000-02-25 15:07:09 by simonmar]
The finalizer passed to mkWeak# might be NULL, so we'd better not
claim it's always pointer if we need to GC.  Another bug squashed...

24 years ago[project @ 2000-02-25 15:06:30 by panne]
panne [Fri, 25 Feb 2000 15:06:30 +0000 (15:06 +0000)]
[project @ 2000-02-25 15:06:30 by panne]
*ahem*  Re-enable -fwarn-unused-binds and -fwarn-unused-imports...  :-}

24 years ago[project @ 2000-02-25 14:55:31 by panne]
panne [Fri, 25 Feb 2000 14:55:54 +0000 (14:55 +0000)]
[project @ 2000-02-25 14:55:31 by panne]
Deprecations of variables now works, although the source location is
not yet reported correctly and the code needs some cleanup. Added a
new flag -fwarn-deprecations to the set of standard warnings. The
syntax of deprecations has been extended to deprecate types, classes,
or even constructors, although this does not work yet.

24 years ago[project @ 2000-02-25 14:00:32 by simonmar]
simonmar [Fri, 25 Feb 2000 14:00:32 +0000 (14:00 +0000)]
[project @ 2000-02-25 14:00:32 by simonmar]
add -ltermcap when looking for -lreadline.

From: Michael Weber.

24 years ago[project @ 2000-02-25 10:53:53 by sewardj]
sewardj [Fri, 25 Feb 2000 10:53:54 +0000 (10:53 +0000)]
[project @ 2000-02-25 10:53:53 by sewardj]
Nuke PTR_ON_HEAP and all associated ifdeffery; we always need it.

24 years ago[project @ 2000-02-25 10:49:30 by simonmar]
simonmar [Fri, 25 Feb 2000 10:49:30 +0000 (10:49 +0000)]
[project @ 2000-02-25 10:49:30 by simonmar]
Make the desugarer a little more liberal about the class of case
expressions which get the special unboxed tuple treatment.

24 years ago[project @ 2000-02-25 10:26:44 by simonmar]
simonmar [Fri, 25 Feb 2000 10:26:44 +0000 (10:26 +0000)]
[project @ 2000-02-25 10:26:44 by simonmar]
silence linker warnings on HP/UX.

From: Eric Schweitz <schweitz@nortelnetworks.com>

24 years ago[project @ 2000-02-24 17:45:53 by simonmar]
simonmar [Thu, 24 Feb 2000 17:45:53 +0000 (17:45 +0000)]
[project @ 2000-02-24 17:45:53 by simonmar]
update for format changes in cacheprof.out.summary.

24 years ago[project @ 2000-02-24 17:26:12 by sewardj]
sewardj [Thu, 24 Feb 2000 17:26:12 +0000 (17:26 +0000)]
[project @ 2000-02-24 17:26:12 by sewardj]
primUnpackString --> hugsprimUnpackString

24 years ago[project @ 2000-02-24 17:20:46 by simonmar]
simonmar [Thu, 24 Feb 2000 17:20:46 +0000 (17:20 +0000)]
[project @ 2000-02-24 17:20:46 by simonmar]
Correct [un]blockAsyncExceptionszh_ret in the #ifndef REG_R1 case.

24 years ago[project @ 2000-02-24 14:40:38 by sewardj]
sewardj [Thu, 24 Feb 2000 14:40:38 +0000 (14:40 +0000)]
[project @ 2000-02-24 14:40:38 by sewardj]
Don't always use GMP from ghc/rts; instead consult HaveLibGmp first.

24 years ago[project @ 2000-02-24 14:09:14 by sewardj]
sewardj [Thu, 24 Feb 2000 14:09:14 +0000 (14:09 +0000)]
[project @ 2000-02-24 14:09:14 by sewardj]
Remove debugging junk accidentally left in :-(

24 years ago[project @ 2000-02-24 14:05:55 by sewardj]
sewardj [Thu, 24 Feb 2000 14:05:55 +0000 (14:05 +0000)]
[project @ 2000-02-24 14:05:55 by sewardj]
Wibbles for Win32 standalone compilation of Hugs:
-- Turn off debugging miniinterpreter
-- Change SIZEOF_INTP (which no longer exists) into SIZEOF_VOID_P

24 years ago[project @ 2000-02-24 13:58:56 by sewardj]
sewardj [Thu, 24 Feb 2000 13:58:56 +0000 (13:58 +0000)]
[project @ 2000-02-24 13:58:56 by sewardj]
Use the GMP library built in ghc/rts, not the system-supplied one,
since that doesn't exist on Cygwin.

24 years ago[project @ 2000-02-24 12:34:18 by sewardj]
sewardj [Thu, 24 Feb 2000 12:34:19 +0000 (12:34 +0000)]
[project @ 2000-02-24 12:34:18 by sewardj]
#ifdef wurbles to aid Win32 compilation.

24 years ago[project @ 2000-02-23 19:41:50 by lewie]
lewie [Wed, 23 Feb 2000 19:41:51 +0000 (19:41 +0000)]
[project @ 2000-02-23 19:41:50 by lewie]
Handle `with' more cleverly.  I was generating partially applied methods
for the case where the `with' expression was also overloaded, but this
was buggy, and completely unnecessary.  Instead, simply force the method
binding at the point of the `with' expression (we reap no benefits from
pushing the sharing further out anyway), and release the remainder of
the method's context into the LIE.

24 years ago[project @ 2000-02-22 15:47:56 by panne]
panne [Tue, 22 Feb 2000 15:48:03 +0000 (15:48 +0000)]
[project @ 2000-02-22 15:47:56 by panne]
Load deprecations from interface files into a deprecation environment
which maps Names to RenamedDeprecations. This map is not used yet, but
very soon it will...

This commit fixes a bug related to implicit parameters, too:
Previously, an interface file containing the name "with" could not be
read by the interface parser. This broke Malcolm's HaXml 0.9 (released
today). Remember Sven's glaexts-commandment (Jeffrey? :-) : Always
keep Lex.lhs's ghcExtensionKeywordsFM and ParseIface.y's var_fs
production in synch!

24 years ago[project @ 2000-02-22 12:45:30 by panne]
panne [Tue, 22 Feb 2000 12:45:30 +0000 (12:45 +0000)]
[project @ 2000-02-22 12:45:30 by panne]
Space leak paranoia: Don't keep whole InterfaceDetails alive
throughout the middle part of the compiler

24 years ago[project @ 2000-02-22 12:09:23 by simonmar]
simonmar [Tue, 22 Feb 2000 12:09:24 +0000 (12:09 +0000)]
[project @ 2000-02-22 12:09:23 by simonmar]
Ignore SIGPIPE, since our I/O library handles EPIPE properly and
SIGPIPE tends to cause the Haskell program to exit silently and
mysteriously.

Found-by: furiously pressing the refresh button in a browser connected
to my Haskell web server :-)

24 years ago[project @ 2000-02-21 19:06:11 by panne]
panne [Mon, 21 Feb 2000 19:06:11 +0000 (19:06 +0000)]
[project @ 2000-02-21 19:06:11 by panne]
Extended interface mangler with deprecations handling.

NOTE: Whoever wrote this part of the driver without adding a HUGE
warning in MkIface.lhs to keep both files in synch deserves the most
severe punishment imaginable (huge stick, etc.)!  >:-(  The seemingly
magical random rearrangement of the interface file outside Haskell's
realm can drive you mad if you forget this...

24 years ago[project @ 2000-02-21 18:56:02 by panne]
panne [Mon, 21 Feb 2000 18:56:02 +0000 (18:56 +0000)]
[project @ 2000-02-21 18:56:02 by panne]
Fixed typo in deprecations parsing

24 years ago[project @ 2000-02-21 18:55:19 by panne]
panne [Mon, 21 Feb 2000 18:55:19 +0000 (18:55 +0000)]
[project @ 2000-02-21 18:55:19 by panne]
Write deprecations into interface files.

24 years ago[project @ 2000-02-20 17:51:30 by panne]
panne [Sun, 20 Feb 2000 17:51:58 +0000 (17:51 +0000)]
[project @ 2000-02-20 17:51:30 by panne]
Get deprecation info out of the renamer again

24 years ago[project @ 2000-02-18 15:36:48 by panne]
panne [Fri, 18 Feb 2000 15:36:48 +0000 (15:36 +0000)]
[project @ 2000-02-18 15:36:48 by panne]
Now deprecations can be read from interface files. To avoid a
lookahead of 2, the syntax for interface files has been liberated
slightly: They can end in as many freely mixed rule pragmas or
deprecation pragmas as you like.

Note: Parsing the deprecation pragma uses the same Lazy Technology (tm)
as the one for rules. Don't know if this makes sense, but it is
convenient here.

24 years ago[project @ 2000-02-18 10:46:27 by simonmar]
simonmar [Fri, 18 Feb 2000 10:46:27 +0000 (10:46 +0000)]
[project @ 2000-02-18 10:46:27 by simonmar]
put SRTs in the text section.

24 years ago[project @ 2000-02-18 10:26:19 by simonmar]
simonmar [Fri, 18 Feb 2000 10:26:19 +0000 (10:26 +0000)]
[project @ 2000-02-18 10:26:19 by simonmar]
Add copyright & Id

24 years ago[project @ 2000-02-18 10:25:53 by simonmar]
simonmar [Fri, 18 Feb 2000 10:25:53 +0000 (10:25 +0000)]
[project @ 2000-02-18 10:25:53 by simonmar]
Module size wasn't taking into account the data section.

24 years ago[project @ 2000-02-17 17:19:42 by simonmar]
simonmar [Thu, 17 Feb 2000 17:19:42 +0000 (17:19 +0000)]
[project @ 2000-02-17 17:19:42 by simonmar]
Fitst cut at XML-style profiling logs.  Time/allocation profiling only
for now, and the new flag '+RTS -px' enables the new log file format.

24 years ago[project @ 2000-02-17 14:47:21 by panne]
panne [Thu, 17 Feb 2000 14:47:32 +0000 (14:47 +0000)]
[project @ 2000-02-17 14:47:21 by panne]
Result of my daily DEPRECATED-hour: Now it's possible to use the
pragma without harm, but nothing spectacular happens yet, only the
usual renamer checks (duplication, var in scope).

24 years ago[project @ 2000-02-17 14:15:10 by simonmar]
simonmar [Thu, 17 Feb 2000 14:15:10 +0000 (14:15 +0000)]
[project @ 2000-02-17 14:15:10 by simonmar]
clean up: some parallel stuff had escaped from #ifdef PAR (Hans???)

24 years ago[project @ 2000-02-17 12:20:04 by simonmar]
simonmar [Thu, 17 Feb 2000 12:20:04 +0000 (12:20 +0000)]
[project @ 2000-02-17 12:20:04 by simonmar]
sync with reality slightly.

24 years ago[project @ 2000-02-16 12:57:39 by panne]
panne [Wed, 16 Feb 2000 12:57:39 +0000 (12:57 +0000)]
[project @ 2000-02-16 12:57:39 by panne]
Fixed pretty printing of DEPRECATED

24 years ago[project @ 2000-02-16 12:56:22 by panne]
panne [Wed, 16 Feb 2000 12:56:22 +0000 (12:56 +0000)]
[project @ 2000-02-16 12:56:22 by panne]
Fixed pretty printing of RULES

24 years ago[project @ 2000-02-15 22:18:16 by panne]
panne [Tue, 15 Feb 2000 22:18:54 +0000 (22:18 +0000)]
[project @ 2000-02-15 22:18:16 by panne]
First steps towards DEPRECATED before Rosebank (12yrs) takes its toll.
Nothing very functional yet, but at least hsc can be compiled and it
still compiles the Prelude.

Parsing the pragma turned out to be a little bit more complicated than
expected, here the comment from Parser.y:

   The place for module deprecation is really too restrictive, but if it
   was allowed at its natural place just before 'module', we get an ugly
   s/r conflict with the second alternative. Another solution would be the
   introduction of a new pragma DEPRECATED_MODULE, but this is not very nice,
   either, and DEPRECATED is only expected to be used by people who really
   know what they are doing. :-)

Net result: Module deprecation is allowed exactly behind the module's
name and nowhere else. I probably have to think a little bit more
about this some day...

24 years ago[project @ 2000-02-15 15:14:09 by sewardj]
sewardj [Tue, 15 Feb 2000 15:14:09 +0000 (15:14 +0000)]
[project @ 2000-02-15 15:14:09 by sewardj]
Implement CONST_INT_big and CONST_ADDR_big.

24 years ago[project @ 2000-02-15 13:16:19 by sewardj]
sewardj [Tue, 15 Feb 2000 13:16:20 +0000 (13:16 +0000)]
[project @ 2000-02-15 13:16:19 by sewardj]
Backend interop fixes:
-- Make Hugs use the same constructor tag numbering as GHC, viz, starting
   at zero.
-- Evaluator.c: when unwinding the stack on entering a constructor,
   return to the scheduler if a RET_{VEC_}{SMALL|BIG} is found on the
   stack.

24 years ago[project @ 2000-02-15 11:24:20 by sewardj]
sewardj [Tue, 15 Feb 2000 11:24:20 +0000 (11:24 +0000)]
[project @ 2000-02-15 11:24:20 by sewardj]
In hugsprimRunIO_toplevel, use catchException instead of catch.
At least exceptions can then be caught, although Hugs then goes on
to die with an assertion failure in unblockAsyncExceptionszh_ret_entry,
probably caused by wrongly entering it twice in immediate succession.

24 years ago[project @ 2000-02-14 11:59:27 by sewardj]
sewardj [Mon, 14 Feb 2000 11:59:27 +0000 (11:59 +0000)]
[project @ 2000-02-14 11:59:27 by sewardj]
Build parser/ctypes.o with $(HC), not $(CC).

24 years ago[project @ 2000-02-14 11:15:09 by sewardj]
sewardj [Mon, 14 Feb 2000 11:15:09 +0000 (11:15 +0000)]
[project @ 2000-02-14 11:15:09 by sewardj]
wibble

24 years ago[project @ 2000-02-14 11:13:11 by sewardj]
sewardj [Mon, 14 Feb 2000 11:13:11 +0000 (11:13 +0000)]
[project @ 2000-02-14 11:13:11 by sewardj]
cosmetic wibbles

24 years ago[project @ 2000-02-14 11:12:29 by sewardj]
sewardj [Mon, 14 Feb 2000 11:12:29 +0000 (11:12 +0000)]
[project @ 2000-02-14 11:12:29 by sewardj]
Remove fromDouble from class Fractional, and make it standalone.
This matches GHC.  I don't think this is strictly necessary, but
Hugs refers to fromDouble during desugaring and I prefer to avoid
possible mishaps.

24 years ago[project @ 2000-02-14 11:04:58 by sewardj]
sewardj [Mon, 14 Feb 2000 11:04:58 +0000 (11:04 +0000)]
[project @ 2000-02-14 11:04:58 by sewardj]
Paranoia: barf if enterBCO_primop1 or enterBCO_primop2 are called
in combined mode (since GHC should handle all primops in that case).

24 years ago[project @ 2000-02-14 11:01:27 by sewardj]
sewardj [Mon, 14 Feb 2000 11:01:27 +0000 (11:01 +0000)]
[project @ 2000-02-14 11:01:27 by sewardj]
Add a debugging version of the mini-interpreter for Hugs.

24 years ago[project @ 2000-02-14 10:59:30 by sewardj]
sewardj [Mon, 14 Feb 2000 10:59:30 +0000 (10:59 +0000)]
[project @ 2000-02-14 10:59:30 by sewardj]
Tart up printStackChunk a bit./

24 years ago[project @ 2000-02-14 10:58:05 by sewardj]
sewardj [Mon, 14 Feb 2000 10:58:05 +0000 (10:58 +0000)]
[project @ 2000-02-14 10:58:05 by sewardj]
initStorage: remove #ifdef COMPILER around call to mp_set_memory_functions.

24 years ago[project @ 2000-02-14 10:56:47 by sewardj]
sewardj [Mon, 14 Feb 2000 10:56:47 +0000 (10:56 +0000)]
[project @ 2000-02-14 10:56:47 by sewardj]
PUSH_N for 0 regs available: also push stack tag to aid debugging

24 years ago[project @ 2000-02-11 13:07:25 by simonpj]
simonpj [Fri, 11 Feb 2000 13:07:25 +0000 (13:07 +0000)]
[project @ 2000-02-11 13:07:25 by simonpj]
Add pprFSInCStyle

24 years ago[project @ 2000-02-11 13:06:39 by simonpj]
simonpj [Fri, 11 Feb 2000 13:06:39 +0000 (13:06 +0000)]
[project @ 2000-02-11 13:06:39 by simonpj]
Add a few functions to Outputable

24 years ago[project @ 2000-02-10 18:39:51 by lewie]
lewie [Thu, 10 Feb 2000 18:39:51 +0000 (18:39 +0000)]
[project @ 2000-02-10 18:39:51 by lewie]
Fix a couple of Implicit Param wibbles.

24 years ago[project @ 2000-02-10 15:39:39 by simonpj]
simonpj [Thu, 10 Feb 2000 15:39:39 +0000 (15:39 +0000)]
[project @ 2000-02-10 15:39:39 by simonpj]
A few comments about RnIfaces.lookupFixity

24 years ago[project @ 2000-02-09 18:32:09 by lewie]
lewie [Wed, 9 Feb 2000 18:32:10 +0000 (18:32 +0000)]
[project @ 2000-02-09 18:32:09 by lewie]
Misc. fixes to implicit parameters support.

24 years ago[project @ 2000-02-09 14:50:19 by sewardj]
sewardj [Wed, 9 Feb 2000 14:50:21 +0000 (14:50 +0000)]
[project @ 2000-02-09 14:50:19 by sewardj]
More bug fixes resulting from trying to load small programs into Hugs
using the GHC Prelude:

-- Better handling of kinds on class method types.  It's still a kludge
   (I reckon) but works well enough to correctly handle methods in
   Monad and Functor.  See comment in startGHCClass() in interface.c.

-- Add hugsprimReadField and hugsprimShowField.

-- Make error be exported from the Prelude.  For some reason, PrelErr.hi
   doesn't give a signature for error, so we have to fake it by copying
   that of hugsprimError.

-- Handle fixity declarations read from interfaces.

-- Set nameListMonad so that list comprehensions can be translated.

24 years ago[project @ 2000-02-08 17:50:46 by sewardj]
sewardj [Tue, 8 Feb 2000 17:50:46 +0000 (17:50 +0000)]
[project @ 2000-02-08 17:50:46 by sewardj]
-- finishGHCClass(): fill in the .number fields for members in the
   correct order.
-- Let nullary constructors be called via their _closure labels so they
   don't get heap-allocated.

24 years ago[project @ 2000-02-08 15:34:36 by sewardj]
sewardj [Tue, 8 Feb 2000 15:34:36 +0000 (15:34 +0000)]
[project @ 2000-02-08 15:34:36 by sewardj]
Add hugsprimError, hugsprimCompAux.

24 years ago[project @ 2000-02-08 15:32:29 by sewardj]
sewardj [Tue, 8 Feb 2000 15:32:31 +0000 (15:32 +0000)]
[project @ 2000-02-08 15:32:29 by sewardj]
Many bug fixes for object loading:
-- create class symbol table entries more correctly
-- find GHC-created info tables for names which are constructors
-- add debugging machinery:   :d <entity>  and symbol-table printers

24 years ago[project @ 2000-02-07 20:57:58 by simonmar]
simonmar [Mon, 7 Feb 2000 20:57:58 +0000 (20:57 +0000)]
[project @ 2000-02-07 20:57:58 by simonmar]
I'm utterly bemused, but it seems that someone called simonpj disabled
the virtual timer in rev 1.25:

+ #if 0 /* tmp--SDM */
       initialize_virtual_timer(TICK_MILLISECS);
+ #endif

and tried to blame it on me by putting my name in the comment :-)

(Simon - perhaps you copied this file out of my working tree and
committed it by mistake or something?)

24 years ago[project @ 2000-02-04 17:29:24 by sewardj]
sewardj [Fri, 4 Feb 2000 17:29:24 +0000 (17:29 +0000)]
[project @ 2000-02-04 17:29:24 by sewardj]
Remove various -fvia-Cs, leaving the minimal required set (4 of them).

24 years ago[project @ 2000-02-04 17:26:58 by sewardj]
sewardj [Fri, 4 Feb 2000 17:26:58 +0000 (17:26 +0000)]
[project @ 2000-02-04 17:26:58 by sewardj]
GSQRT, GSIN, GCOS, GTAN: if result size is float (as opposed to double),
truncate the result to that length by writing it into memory and
getting it back again (duh!), since that's what gcc does.

24 years ago[project @ 2000-02-04 17:02:11 by lewie]
lewie [Fri, 4 Feb 2000 17:02:12 +0000 (17:02 +0000)]
[project @ 2000-02-04 17:02:11 by lewie]
Fix a subtle bug in overlapping instances where a generic instance is sometimes
chosen rather than a more specific one.  See discussion at top of InstEnv
for details.

24 years ago[project @ 2000-02-04 13:41:00 by sewardj]
sewardj [Fri, 4 Feb 2000 13:41:00 +0000 (13:41 +0000)]
[project @ 2000-02-04 13:41:00 by sewardj]
startGHCClass(): set the .dsels (superclass dsels) field.

24 years ago[project @ 2000-02-04 11:18:05 by simonmar]
simonmar [Fri, 4 Feb 2000 11:18:05 +0000 (11:18 +0000)]
[project @ 2000-02-04 11:18:05 by simonmar]
Fix bug #2 in unregisterised RTS:

forceIO had the same problem as catch#.  This bug has been here for a
long time, not sure why we haven't noticed it before.

Jules: that should get you back on the road.

24 years ago[project @ 2000-02-04 11:15:04 by simonmar]
simonmar [Fri, 4 Feb 2000 11:15:04 +0000 (11:15 +0000)]
[project @ 2000-02-04 11:15:04 by simonmar]
Fix bug #1 in the unregisterised RTS:

Now that catch# is a fully-fledged IO operation, it has to respect the
return convention for IO, in particular if we don't have an R1
(eg. when unregisterised) then the return value goes on the stack.

The return convention could be better, after all we use R1 when
returning normal values, but I'll just fix it for now.

24 years ago[project @ 2000-02-03 18:01:03 by sewardj]
sewardj [Thu, 3 Feb 2000 18:01:03 +0000 (18:01 +0000)]
[project @ 2000-02-03 18:01:03 by sewardj]
Fix x86 NCG so the compiler can compile itself `-O':

-- Implement fake x86 insn GITOD/GITOF.
-- Implement primops ReadMutVarOp and WriteMutVarOp.
-- Pro tem, disable use of %eax as a spill temp.
-- Clarify wording of Rules of the Game comment in MachCode.

24 years ago[project @ 2000-02-03 15:56:13 by sewardj]
sewardj [Thu, 3 Feb 2000 15:56:13 +0000 (15:56 +0000)]
[project @ 2000-02-03 15:56:13 by sewardj]
Remember all the classes loaded from an object file group, and
call visitClass on them at the end of processInterfaces(), so that
the .level numbers on the class get calculated.

24 years ago[project @ 2000-02-03 14:01:07 by sewardj]
sewardj [Thu, 3 Feb 2000 14:01:07 +0000 (14:01 +0000)]
[project @ 2000-02-03 14:01:07 by sewardj]
Add hugsprimPmFail.

24 years ago[project @ 2000-02-03 13:55:21 by sewardj]
sewardj [Thu, 3 Feb 2000 13:55:22 +0000 (13:55 +0000)]
[project @ 2000-02-03 13:55:21 by sewardj]
-- Make default defaults work in combined mode
-- rename some fns in lib/Prelude.hs to match names in HugsPrel.lhs

24 years ago[project @ 2000-02-02 11:40:33 by sewardj]
sewardj [Wed, 2 Feb 2000 11:40:33 +0000 (11:40 +0000)]
[project @ 2000-02-02 11:40:33 by sewardj]
trivialCode on x86 is the heart of instruction selection for
expressions.  It is definitely a non-trivial in complexity.
To generate correct code it needs to observe preserve several
delicate invariants, but didn't.

-- Recorded in MachCode.lhs the "Rules of the Game"; ie what I think
   the required invariants are.

-- Completely rewrote trivialCode (also shift_code).  I think it should
   handle all cases correctly, and has special treatment for literal
   operands.

-- Updated NOTES file to record issues which need to be resolved
   before x86 nativeGen can be considered ready for public use.

24 years ago[project @ 2000-02-01 16:08:17 by sewardj]
sewardj [Tue, 1 Feb 2000 16:08:17 +0000 (16:08 +0000)]
[project @ 2000-02-01 16:08:17 by sewardj]
Export findReservedRegs for all architectures.

24 years ago[project @ 2000-02-01 16:02:12 by sewardj]
sewardj [Tue, 1 Feb 2000 16:02:12 +0000 (16:02 +0000)]
[project @ 2000-02-01 16:02:12 by sewardj]
primOpStrictness(CatchOp): catch# isn't strict in its first arg.

24 years ago[project @ 2000-02-01 14:08:22 by sewardj]
sewardj [Tue, 1 Feb 2000 14:08:22 +0000 (14:08 +0000)]
[project @ 2000-02-01 14:08:22 by sewardj]
Double the number of RESERVED_C_STACK_BYTES so as to give the
native code generator up to 508 spill slots.

24 years ago[project @ 2000-02-01 14:02:02 by sewardj]
sewardj [Tue, 1 Feb 2000 14:02:02 +0000 (14:02 +0000)]
[project @ 2000-02-01 14:02:02 by sewardj]
-- Cosmetic changes in register allocator.

-- Implement macro HP_GEN_SEQ_NP.

-- MachCode(trivialCode, x86): because one of the operands is also
   the destination (on this 2-address arch), it's invalid to sequence
   the code to compute the operands using asmParThen [code1, code2].
   since the order of assignments matters.  Fixed.

24 years ago[project @ 2000-01-31 18:11:50 by sewardj]
sewardj [Mon, 31 Jan 2000 18:11:50 +0000 (18:11 +0000)]
[project @ 2000-01-31 18:11:50 by sewardj]
Spilling and x86 shift-code cleanups.

24 years ago[project @ 2000-01-31 15:35:05 by simonmar]
simonmar [Mon, 31 Jan 2000 15:35:05 +0000 (15:35 +0000)]
[project @ 2000-01-31 15:35:05 by simonmar]
Add configure target to detect when autoconf needs to be run.

24 years ago[project @ 2000-01-31 15:12:07 by simonmar]
simonmar [Mon, 31 Jan 2000 15:12:07 +0000 (15:12 +0000)]
[project @ 2000-01-31 15:12:07 by simonmar]
Include the configure script in a src dist.

24 years ago[project @ 2000-01-31 14:25:34 by sewardj]
sewardj [Mon, 31 Jan 2000 14:25:34 +0000 (14:25 +0000)]
[project @ 2000-01-31 14:25:34 by sewardj]
Change primOpUsg(CatchOp) to reflect changed arity of catch#.  Also
update primOpStrictness(CatchOp).

24 years ago[project @ 2000-01-31 13:17:18 by simonmar]
simonmar [Mon, 31 Jan 2000 13:17:18 +0000 (13:17 +0000)]
[project @ 2000-01-31 13:17:18 by simonmar]
We don't want -keep-{hc,s}-files-too on by default, and why do we need
-H32M -K32M for PrelBase.lhs?  Hans: I want a word with you :)

24 years ago[project @ 2000-01-30 10:25:27 by simonmar]
simonmar [Sun, 30 Jan 2000 10:25:29 +0000 (10:25 +0000)]
[project @ 2000-01-30 10:25:27 by simonmar]
Change the type of catch# to

catch# :: (W# -> (# W#, a #))
       -> (b -> W# -> (# W#, a #))
       -> W# -> (# W# , a #)

where W# == State# RealWorld.  In other words, make it explicit that
catch# is an IO operation and takes IO operations as arguments.  The
previous type was too general, and resulted in catch# having the wrong
arity which could cause mis-optimisations.

The down side is that we now have to pass the state token around
inside the primop instead of doing it in the Haskell wrapper, and
raiseAsync() also has to build a PAP(handler,exception,realworld)
instead of just a PAP(handler,exception) when it invokes a handler as
a result of an async exception.

I also added some optimisations to (un)?blockAsyncException to not
grow the stack if it can be avoided, such as when we're about to block
async exceptions and there's a blockAsyncExceptions_ret stack frame on
the top of the stack.

24 years ago[project @ 2000-01-30 10:17:44 by simonmar]
simonmar [Sun, 30 Jan 2000 10:17:44 +0000 (10:17 +0000)]
[project @ 2000-01-30 10:17:44 by simonmar]
The bd->free field of a block descriptor is supposed to be set to -1
for free blocks, if we're #ifdef DEBUGging.  It wasn't sometimes.

24 years ago[project @ 2000-01-30 10:16:09 by simonmar]
simonmar [Sun, 30 Jan 2000 10:16:09 +0000 (10:16 +0000)]
[project @ 2000-01-30 10:16:09 by simonmar]
Deal with ThreadRelocated in checkTSO().

24 years ago[project @ 2000-01-30 10:11:32 by simonmar]
simonmar [Sun, 30 Jan 2000 10:11:32 +0000 (10:11 +0000)]
[project @ 2000-01-30 10:11:32 by simonmar]
Add notes about where the IO representation is wired in to various
parts of the source tree, since I'm about to add some more.

24 years ago[project @ 2000-01-30 10:08:27 by simonmar]
simonmar [Sun, 30 Jan 2000 10:08:27 +0000 (10:08 +0000)]
[project @ 2000-01-30 10:08:27 by simonmar]
comment fixup

24 years ago[project @ 2000-01-28 20:52:37 by lewie]
lewie [Fri, 28 Jan 2000 20:52:46 +0000 (20:52 +0000)]
[project @ 2000-01-28 20:52:37 by lewie]
First pass at implicit parameters.  Honest, I didn't really go in *intending*
to modify every file in the typechecker... ;-)  The breadth of the change
is partly due to generalizing contexts so that they are not hardwired to
be (Class, [Type]) pairs.  See types/Type.lhs for details (look for PredType).

24 years ago[project @ 2000-01-28 18:07:55 by sewardj]
sewardj [Fri, 28 Jan 2000 18:07:56 +0000 (18:07 +0000)]
[project @ 2000-01-28 18:07:55 by sewardj]
Modifications to make x86 register spilling to work reasonably.  It
should work ok most of the time, although there is still a remote
possibility that the allocator simply will be unable to complete
spilling, and will just give up.

-- Incrementally try with 0, 1, 2 and 3 spill regs, so as not to
   unduly restrict the supply of regs in code which doesn't need spilling.

-- Remove the use of %ecx for shift values, so it is always available
   as the first-choice spill temporary.  For code which doesn't do
   int division, make %edx and %eax available for spilling too.
   Shifts by a non-constant amount (very rare) are now done by
   a short test-and-jump sequence, so that %ecx is not tied up.

-- x86 FP: do sin, cos, tan in-line so we get the same answers as gcc.

-- Moved a little code around to remove recursive dependencies.

-- Fix a subtle bug in x86 regUsage, which could cause underestimation
   of live ranges.

24 years ago[project @ 2000-01-28 16:36:03 by simonmar]
simonmar [Fri, 28 Jan 2000 16:36:03 +0000 (16:36 +0000)]
[project @ 2000-01-28 16:36:03 by simonmar]
bump version to 4.07 on the main trunk.

24 years ago[project @ 2000-01-28 14:14:01 by simonmar]
simonmar [Fri, 28 Jan 2000 14:14:01 +0000 (14:14 +0000)]
[project @ 2000-01-28 14:14:01 by simonmar]
don't use ^ in patterns, Solaris sh barfs on it.

24 years ago[project @ 2000-01-28 09:40:05 by sewardj]
sewardj [Fri, 28 Jan 2000 09:40:06 +0000 (09:40 +0000)]
[project @ 2000-01-28 09:40:05 by sewardj]
Commit all changes prior to addressing the x86 spilling situation in
the register allocator.

-- Fix nonsensical x86 addressing mode hacks in mangleIndexTree
   and getAmode.

-- Make char-sized loads work properly, using MOVZBL.

-- In assignIntCode, use primRep on the assign node to determine
   the size of data transfer, not the size of the source.

-- Redo Integer primitives to be in line with current representation
   of Integers.

24 years ago[project @ 2000-01-27 10:23:09 by rrt]
rrt [Thu, 27 Jan 2000 10:23:09 +0000 (10:23 +0000)]
[project @ 2000-01-27 10:23:09 by rrt]
Added note about the necessity of using the Cygnus DocBook tools (rather
than, e.g., SuSE).

24 years ago[project @ 2000-01-26 17:02:32 by rrt]
rrt [Wed, 26 Jan 2000 17:02:32 +0000 (17:02 +0000)]
[project @ 2000-01-26 17:02:32 by rrt]
Removed redundant rules (%.dvi : %.tex &c.) that were breaking DocBook
(re)building.

24 years ago[project @ 2000-01-26 16:08:25 by rrt]
rrt [Wed, 26 Jan 2000 16:08:25 +0000 (16:08 +0000)]
[project @ 2000-01-26 16:08:25 by rrt]
Corrected release notes URLs

24 years ago[project @ 2000-01-26 13:40:54 by sewardj]
sewardj [Wed, 26 Jan 2000 13:40:54 +0000 (13:40 +0000)]
[project @ 2000-01-26 13:40:54 by sewardj]
Observe the C conventions for use of the FP register stack.  In particular,
free up any live fp registers prior to non-local control transfers.  Sigh.

This is not good.  The FP situation needs to be reviewed once the rest
of x86 nativeGen is stable.

24 years ago[project @ 2000-01-26 13:38:36 by sewardj]
sewardj [Wed, 26 Jan 2000 13:38:36 +0000 (13:38 +0000)]
[project @ 2000-01-26 13:38:36 by sewardj]
genCCall (x86): pass float args in double format.

24 years ago[project @ 2000-01-26 13:38:02 by sewardj]
sewardj [Wed, 26 Jan 2000 13:38:02 +0000 (13:38 +0000)]
[project @ 2000-01-26 13:38:02 by sewardj]
spillReg, loadReg (x86): always spill fp registers using double-sized
loads/stores, even if they nominally contain only a float value --
otherwise the spill loses the extra guard bits.