summaryrefslogtreecommitdiff
path: root/ghc/compiler
diff options
context:
space:
mode:
authorsewardj <unknown>2000-01-24 18:33:34 +0000
committersewardj <unknown>2000-01-24 18:33:34 +0000
commit3ba6150e62080bbd0d93375f6ac182dfbc177fcb (patch)
tree244ae0b69f49af7a0dbc53d2b38a9c645bf9f620 /ghc/compiler
parent243924b8603bc368ce2f7aa66baab74da734e4e7 (diff)
downloadhaskell-3ba6150e62080bbd0d93375f6ac182dfbc177fcb.tar.gz
[project @ 2000-01-24 18:33:34 by sewardj]
Start a NOTES file, recording known but un-fixed nativeGen bugs.
Diffstat (limited to 'ghc/compiler')
-rw-r--r--ghc/compiler/nativeGen/NOTES22
1 files changed, 22 insertions, 0 deletions
diff --git a/ghc/compiler/nativeGen/NOTES b/ghc/compiler/nativeGen/NOTES
new file mode 100644
index 0000000000..f19375b153
--- /dev/null
+++ b/ghc/compiler/nativeGen/NOTES
@@ -0,0 +1,22 @@
+
+Known bugs in nativeGen, 000124 (JRS)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+All these bugs are for x86; I don't know about sparc/alpha.
+
+-- argument marshalling for ccall is fundamentally flawed, since
+ it moves the C stack pointer %esp as it pushes each argument.
+ Alas, the register allocator spills relative to %esp and
+ assumes that it doesn't move. Result: if the marshalling code
+ for a ccall involves any spills, the resulting code will
+ probably be wrong.
+
+ The Right Way to fix this is to copy stuff onto the stack
+ without moving %esp, then adjust it immediately prior to the
+ call insn and un-adjust it immediately following it.
+
+-- nofib/spectral/cvh_unboxing exposes some kind of spilling bug
+ (I think), since there are many references to registers %M229
+ etc, which I believe are dynamic registers which didn't get assigned
+ to real ones.
+