UltraSPARC II, Solaris 2.10, gcc 4.0.4 (gccfss),
Haskell GHC 6.6.1 binary release.

Trying to compile a simple file gives me oodles of errors because
ghc is generating something that makes gcc generate lots of these:

        sethi %hi(<<some register>>),<<another register>>

For people unfamiliar with SPARC assembly code, the %hi(...) operation
returns the top bits of a *literal* address, it makes absolutely no
sense to give it a register.

I have tried this version of gccfss with lots of C code and have been
unable to make it generate this construction; it's only ghc's .hc files
that do it.

Running gcc by hand on the .hc file produces 8 warnings
...lib/ghc-6.6.1/include/Regs.h: ###: warning:
  call-clobbered register used for global register variable
-DNO_GLOBAL_REG_DECLS eliminated that.

Comparing the .s file produced using 'ghc -S' with the .s file
produced by gcc'ing the .hc produced some illumination:

        .section        ".text",#slloc,#execinstr,#progbits
        .align  4
#if GHC
.text
        .align 4
#endif
s4AK_ret:
        save    %sp,-96,%sp
#if GHC
        sethi   %hi(%l1),%i2
        add     %i2,%lo(%l1),%i5
        ld      [%i2+%lo(%l1)],%i2
        ld      [%i2],%l7
        lduh    [%l7-2],%l6
        ...
#else
        sethi   %hi(MainCapability),%i5
        add     %i5,%lo(MainCapability),%i2
        ld      [%i2+8],%i5
        ld      [%i5],%i4
        lduh    [%i4-2],%i3
        ...
#endif

What with one thing and another, I'm not really sure that it's
gcc's fault.

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to