pushl %ebp prologue junk from PrimOps.cmm

Donald Bruce Stewart dons at cse.unsw.edu.au
Wed Sep 1 23:48:07 EDT 2004


Hey,

More on getting the head to build. PrimOps.cmm dies with:

        ../../ghc/compiler/ghc-inplace -H16m -O  -O2 -static -#include Prelude.h -#include Rts.h -#include RtsFlags.h -#include RtsUtils.h -#include StgRun.h -#include Schedule.h -#include Printer.h -#include Sanity.h -#include Storage.h -#include SchedAPI.h -#include Timer.h -#include Itimer.h -#include ProfHeap.h -#include LdvProfile.h -#include Profiling.h -#include Apply.h -fvia-C -dcmm-lint     -c PrimOps.cmm -o PrimOps.o
        Prologue junk?: .globl int64ToIntegerzh_fast
                .type   int64ToIntegerzh_fast , @function
        int64ToIntegerzh_fast:
                pushl %ebp


The prologue looks like:
        .globl int64ToIntegerzh_fast
                .type   int64ToIntegerzh_fast , @function
        int64ToIntegerzh_fast:
                subl $28,%esp
                pushl %ebp
                pushl %edi
                pushl %esi
                pushl %ebx
        #APP
                --- BEGIN ---
        #NO_APP

Normally, it seems, %ebp doesn't appear in the prologue on i386, with gcc
2.95.3. The following fix wipes the instruction, and I'd like to check that it
is ok.

------------------------------------------------------------------------
--- ghc-asm.lprl.orig	Thu Sep  2 13:42:07 2004
+++ ghc-asm.lprl	Thu Sep  2 13:42:13 2004
@@ -699,6 +699,7 @@
 		if ($TargetPlatform =~ /^i386-/) {
 		    $p =~ s/^\tpushl\s+\%edi\n//;
 		    $p =~ s/^\tpushl\s+\%esi\n//;
+		    $p =~ s/^\tpushl\s+\%ebp\n//;
 		    $p =~ s/^\tpushl\s+\%ebx\n//;
 		    $p =~ s/^\tmovl\s+\%esi,\s*\d*\(\%esp\)\n//;
 		    $p =~ s/^\tmovl\s+\%edi,\s*\d*\(\%esp\)\n//;



More information about the Cvs-ghc mailing list