From d6d2011ff7d178a1a2777fe2fa109052294dd6be Mon Sep 17 00:00:00 2001 From: sewardj <unknown> Date: Wed, 26 Jan 2000 11:40:26 +0000 Subject: [PATCH] [project @ 2000-01-26 11:40:26 by sewardj] 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. --- ghc/compiler/nativeGen/RegAllocInfo.lhs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ghc/compiler/nativeGen/RegAllocInfo.lhs b/ghc/compiler/nativeGen/RegAllocInfo.lhs index e3965e8af366..66f2ae062624 100644 --- a/ghc/compiler/nativeGen/RegAllocInfo.lhs +++ b/ghc/compiler/nativeGen/RegAllocInfo.lhs @@ -777,10 +777,10 @@ spillReg dyn (MemoryReg i pk) {-Alpha: spill below the stack pointer (?)-} IF_ARCH_alpha( ST sz dyn (spRel i) - {-I386: spill below stack pointer leaving 2 words/spill-} + {-I386: spill above stack pointer leaving 2 words/spill-} ,IF_ARCH_i386 ( if pk == FloatRep || pk == DoubleRep - then GST sz dyn (spRel (-16 + (-2 * i))) - else MOV sz (OpReg dyn) (OpAddr (spRel (-16 + (-2 * i)))) + then GST sz dyn (spRel (16 + 2 * i)) + else MOV sz (OpReg dyn) (OpAddr (spRel (16 + 2 * i))) {-SPARC: spill below frame pointer leaving 2 words/spill-} ,IF_ARCH_sparc( ST sz dyn (fpRel (-2 * i)) @@ -796,8 +796,8 @@ loadReg (MemoryReg i pk) dyn mkUnitList ( IF_ARCH_alpha( LD sz dyn (spRel i) ,IF_ARCH_i386 ( if pk == FloatRep || pk == DoubleRep - then GLD sz (spRel (-16 + (-2 * i))) dyn - else MOV sz (OpAddr (spRel (-16 + (-2 * i)))) (OpReg dyn) + then GLD sz (spRel (16 + 2 * i)) dyn + else MOV sz (OpAddr (spRel (16 + 2 * i))) (OpReg dyn) ,IF_ARCH_sparc( LD sz (fpRel (-2 * i)) dyn ,))) ) -- GitLab