| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
| |
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.
|
|
|
|
| |
Add hugsprimPmFail.
|
|
|
|
|
| |
-- Make default defaults work in combined mode
-- rename some fns in lib/Prelude.hs to match names in HugsPrel.lhs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Export findReservedRegs for all architectures.
|
|
|
|
| |
primOpStrictness(CatchOp): catch# isn't strict in its first arg.
|
|
|
|
|
| |
Double the number of RESERVED_C_STACK_BYTES so as to give the
native code generator up to 508 spill slots.
|
|
|
|
|
|
|
|
|
|
|
| |
-- 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.
|
|
|
|
| |
Spilling and x86 shift-code cleanups.
|
|
|
|
| |
Add configure target to detect when autoconf needs to be run.
|
|
|
|
| |
Include the configure script in a src dist.
|
|
|
|
|
| |
Change primOpUsg(CatchOp) to reflect changed arity of catch#. Also
update primOpStrictness(CatchOp).
|
|
|
|
|
| |
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 :)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
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.
|
|
|
|
| |
Deal with ThreadRelocated in checkTSO().
|
|
|
|
|
| |
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.
|
|
|
|
| |
comment fixup
|
|
|
|
|
|
|
| |
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).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
bump version to 4.07 on the main trunk.
|
|
|
|
| |
don't use ^ in patterns, Solaris sh barfs on it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
|
| |
Added note about the necessity of using the Cygnus DocBook tools (rather
than, e.g., SuSE).
|
|
|
|
|
| |
Removed redundant rules (%.dvi : %.tex &c.) that were breaking DocBook
(re)building.
|
|
|
|
| |
Corrected release notes URLs
|
|
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
genCCall (x86): pass float args in double format.
|
|
|
|
|
|
| |
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.
|
|
|
|
| |
Finish pass 1 over the build system docs.
|
|
|
|
| |
Fix some of the gross inaccuracies in this documentation.
|
|
|
|
| |
Removed version number and reelucidated some text swallowed by index entries.
|
|
|
|
| |
Changed default text size to "normal".
|
|
|
|
|
|
| |
spillReg, loadReg (x86): spill above %esp, not below it. Duh. If you
spill below %esp, ccalls, which use stack below %esp, can trash the
spill area.
|
|
|
|
| |
Updated version to 4.06
|
|
|
|
|
| |
Sven's first autoheader commandment: Don't change config.h.in manually...!
(Why is mk/config.h.in in the repository? configure is not, either.)
|
|
|
|
| |
Teach magicIdRegMaybe about R9 and R10.
|
|
|
|
| |
Print a useful panic msg if getRegister(x86) can't reduce a tree.
|
|
|
|
| |
pprInstr: implement GABS, GNEG, GSQRT.
|
|
|
|
| |
Handle float args correctly for x86 ccalls.
|
|
|
|
|
| |
Disable a dubious looking clause for trivialCode (x86), which was
generating bad code for some subtracts.
|
|
|
|
|
| |
Implement the HP_CHK_GEN macro. As a result, teach mkNativeHdr et al
about R9 and R10.
|
|
|
|
| |
wibble
|
|
|
|
|
|
| |
amodeToStix, GET_TAG: implement correctly for little-endian-32 and
supply implementation for big-endian-32. Definitely won't work on
64-bit platforms.
|
|
|
|
| |
genCodeInfoTable: put tag value into srt_len field for constr info tables.
|
|
|
|
| |
"installing" is now called "building"
|
|
|
|
|
| |
x86: free up all FP regs before doing a ccall. This appears to be a
part of the x86 calling convention(s).
|
|
|
|
|
| |
Added a bunch of #defines for {SIZEOF,ALIGNMENT}_{INT,WORD}{8,16,32,64}.
All this is a real hack: The include files need a more thorough restructuring.
|
|
|
|
| |
Added note about necessary synching with MachDeps.h and fixed a small typo
|
|
|
|
| |
Added more SIZEOF/ALIGNMENT tests
|