Erm, someone was faster than me making GHC/ARM registerised…

Erm, someone was faster than me making GHC/ARM port registerised! Nice GHC fellow Stephen Blackheath sent an email asking for review of his patches into LLVM-dev mailing list and it looks like he really got GHC/ARM registerised port up and running. You can see his conversation with David Terei starting here.
I’ve been contacted by Stephen, he was so nice to provide me with all his patches and guidance what to do with them. I’ve fixed few issues in them which were needed for more modern GHC HEAD and also for ARMv7 hardware and I got his work up and running here too! Congratulations to you Stephen and thanks a lot for your nice work!
If you are curious, I’ve used following mk/

SRC_HC_OPTS = -H64m -optc=-marm -opta=-march=armv7a -opta=-mfpu=vfpv3
GhcLibWays = v

GhcStage2HcOpts    = -opta=-march=armv7a -opta=-mfpu=vfpv3
GhcLibHcOpts       = -opta=-march=armv7a -opta=-mfpu=vfpv3


SplitObjs          = NO

and I was able to compile GHC registerised then. I've also run testsuite to see what's the port quality and the results are here:

OVERALL SUMMARY for test run started at Sun Jul  3 09:43:57 CEST 2011
    2828 total tests, which gave rise to
    7775 test cases, of which
       3 caused framework failures
    5212 were skipped

    2377 expected passes
      55 expected failures
       0 unexpected passes
     129 unexpected failures

Unexpected failures:
   ../../../libraries/hpc/tests/ghc_ghci  hpc_ghc_ghci [bad exit code] (normal)
   annotations/should_compile             ann01 [exit code non-0] (normal)
   annotations/should_fail                annfail12 [stderr mismatch] (normal)
   annotations/should_run                 annrun01 [exit code non-0] (normal)
   cabal                                  ghcpkg05 [bad stderr] (normal)
   cabal/cabal04                          cabal04 [bad exit code] (normal)
   codeGen/should_compile                 jmp_tbl [exit code non-0] (normal)
   codeGen/should_compile                 massive_array [exit code non-0] (normal)
   codeGen/should_run                     cgrun044 [exit code non-0] (normal)
   dph/diophantine                        dph-diophantine-opt [exit code non-0] (normal)
   dph/dotp                               dph-dotp-fast [exit code non-0] (normal)
   dph/dotp                               dph-dotp-opt [exit code non-0] (normal)
   dph/primespj                           dph-primespj-fast [exit code non-0] (normal)
   dph/primespj                           dph-primespj-opt [exit code non-0] (normal)
   dph/quickhull                          dph-quickhull-fast [exit code non-0] (normal)
   dph/quickhull                          dph-quickhull-opt [exit code non-0] (normal)
   dph/sumnats                            dph-sumnats [exit code non-0] (normal)
   dph/words                              dph-words-fast [exit code non-0] (normal)
   dph/words                              dph-words-opt [exit code non-0] (normal)
   driver                                 T706 [bad exit code] (normal)
   dynlibs                                T3807 [bad exit code] (normal)
   ghc-api/T4891                          T4891 [bad exit code] (normal)
   ghc-api/apirecomp001                   apirecomp001 [bad exit code] (normal)
   ghc-e/should_run                       2228 [bad exit code] (normal)
   ghc-e/should_run                       2636 [bad stderr] (normal)
   ghc-e/should_run                       3890 [bad stderr] (normal)
   ghc-e/should_run                       ghc-e001 [bad exit code] (normal)
   ghc-e/should_run                       ghc-e002 [bad exit code] (normal)
   ghc-e/should_run                       ghc-e003 [bad exit code] (normal)
   ghc-e/should_run                       ghc-e004 [bad stderr] (normal)
   ghc-e/should_run                       ghc-e005 [bad stderr] (normal)
   ghci/prog004                           ghciprog004 [bad exit code] (normal)
   ghci/scripts                           ghci024 [bad exit code] (normal)
   ghci/scripts                           ghci037 [bad exit code] (normal)
   ghci/should_run                        3171 [bad stderr] (normal)
   layout                                 layout007 [bad stdout] (normal)
   numeric/should_run                     arith005 [bad stdout] (normal)
   perf/compiler                          T1969 [stat not good enough] (normal)
   perf/compiler                          T3064 [stat not good enough] (normal)
   perf/compiler                          T4007 [bad stderr] (normal)
   perf/compiler                          T5030 [stat not good enough] (normal)
   perf/should_run                        3586 [stat not good enough] (normal)
   perf/should_run                        MethSharing [stat not good enough] (normal)
   perf/should_run                        T3738 [stat not good enough] (normal)
   perf/should_run                        T4321 [bad exit code] (normal)
   perf/should_run                        T4830 [stat not good enough] (normal)
   perf/should_run                        T4978 [stat not good enough] (normal)
   perf/should_run                        T5113 [stat not good enough] (normal)
   perf/should_run                        T5205 [stat not good enough] (normal)
   perf/should_run                        lazy-bs-alloc [stat not good enough] (normal)
   perf/space_leaks                       space_leak_001 [stat not good enough] (normal)
   plugins                                plugins01 [bad exit code] (normal)
   plugins                                plugins05 [exit code non-0] (normal)
   quasiquotation/qq007                   qq007 [exit code non-0] (normal)
   quasiquotation/qq008                   qq008 [exit code non-0] (normal)
   rename/should_fail                     rnfail043 [stderr mismatch] (normal)
   rts                                    3424 [exit code non-0] (normal)
   rts                                    atomicinc [exit code non-0] (normal)
   simplCore/should_compile               EvalTest [bad stdout] (normal)
   simplCore/should_compile               T3016 [exit code non-0] (normal)
   simplCore/should_compile               T3055 [bad stdout] (normal)
   simplCore/should_compile               T3772 [bad stdout] (normal)
   simplCore/should_compile               T4306 [bad stdout] (normal)
   simplCore/should_compile               T4945 [bad stdout] (normal)
   th                                     T1835 [exit code non-0] (normal)
   th                                     T2386 [bad exit code] (normal)
   th                                     T2597a [exit code non-0] (normal)
   th                                     T2597b [stderr mismatch] (normal)
   th                                     T2674 [stderr mismatch] (normal)
   th                                     T2685 [exit code non-0] (normal)
   th                                     T2700 [exit code non-0] (normal)
   th                                     T2713 [stderr mismatch] (normal)
   th                                     T2817 [exit code non-0] (normal)
   th                                     T3100 [exit code non-0] (normal)
   th                                     T3177 [exit code non-0] (normal)
   th                                     T3319 [exit code non-0] (normal)
   th                                     T3395 [stderr mismatch] (normal)
   th                                     T3600 [exit code non-0] (normal)
   th                                     T3899 [exit code non-0] (normal)
   th                                     T3920 [exit code non-0] (normal)
   th                                     T4188 [exit code non-0] (normal)
   th                                     T4436 [exit code non-0] (normal)
   th                                     T5037 [exit code non-0] (normal)
   th                                     T5217 [exit code non-0] (normal)
   th                                     TH_1tuple [stderr mismatch] (normal)
   th                                     TH_NestedSplices [exit code non-0] (normal)
   th                                     TH_class1 [exit code non-0] (normal)
   th                                     TH_dupdecl [stderr mismatch] (normal)
   th                                     TH_emptycase [stderr mismatch] (normal)
   th                                     TH_exn1 [stderr mismatch] (normal)
   th                                     TH_exn2 [stderr mismatch] (normal)
   th                                     TH_fail [stderr mismatch] (normal)
   th                                     TH_foreignInterruptible [exit code non-0] (normal)
   th                                     TH_genEx [exit code non-0] (normal)
   th                                     TH_mkName [exit code non-0] (normal)
   th                                     TH_pragma [exit code non-0] (normal)
   th                                     TH_recover [exit code non-0] (normal)
   th                                     TH_reifyDecl1 [exit code non-0] (normal)
   th                                     TH_reifyDecl2 [exit code non-0] (normal)
   th                                     TH_reifyMkName [exit code non-0] (normal)
   th                                     TH_repE2 [exit code non-0] (normal)
   th                                     TH_repGuard [exit code non-0] (normal)
   th                                     TH_repGuardOutput [exit code non-0] (normal)
   th                                     TH_repPrim [exit code non-0] (normal)
   th                                     TH_repPrim2 [exit code non-0] (normal)
   th                                     TH_repPrimOutput [exit code non-0] (normal)
   th                                     TH_repPrimOutput2 [exit code non-0] (normal)
   th                                     TH_repUnboxedTuples [exit code non-0] (normal)
   th                                     TH_runIO [stderr mismatch] (normal)
   th                                     TH_sections [exit code non-0] (normal)
   th                                     TH_spliceD1 [stderr mismatch] (normal)
   th                                     TH_spliceD2 [exit code non-0] (normal)
   th                                     TH_spliceDecl1 [exit code non-0] (normal)
   th                                     TH_spliceDecl2 [exit code non-0] (normal)
   th                                     TH_spliceDecl3 [exit code non-0] (normal)
   th                                     TH_spliceDecl4 [exit code non-0] (normal)
   th                                     TH_spliceE1 [exit code non-0] (normal)
   th                                     TH_spliceE3 [exit code non-0] (normal)
   th                                     TH_spliceE4 [exit code non-0] (normal)
   th                                     TH_spliceE5 [exit code non-0] (normal)
   th                                     TH_spliceE6 [exit code non-0] (normal)
   th                                     TH_spliceExpr1 [exit code non-0] (normal)
   th                                     TH_spliceGuard [exit code non-0] (normal)
   th                                     TH_spliceInst [exit code non-0] (normal)
   th                                     TH_tf1 [exit code non-0] (normal)
   th                                     TH_tf3 [exit code non-0] (normal)
   th                                     TH_tuple1 [exit code non-0] (normal)
   th/2014                                2014 [bad exit code] (normal)
   th/TH_spliceViewPat                    TH_spliceViewPat [exit code non-0] (normal)

2 thoughts on “Erm, someone was faster than me making GHC/ARM registerised…

  1. Just found your blog – nice work!

    It looks like most of your test failures come from the dynamic linking features of GHC. Have you investigated what is causing the failure there? If you could fix it then you could potentially eliminate > 90% of your test failures…

    • Yes, I know most of this comes from the fact that GHCi is not working yet and it is not working yet since rts/Linker.c does not support ARM yet. I plan to work on this myself as it should not be that hard at the end but will require some more work to do. I.e. something like is already done for PowerPC…
      I’m also motivated since I’d like to see GHCi working on Android in the future. 🙂

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s