d69bc0f
From 83195ff5ba73779514e3d06b1457d45f849c7fc2 Mon Sep 17 00:00:00 2001
d69bc0f
From: Karel Gardas <karel.gardas@centrum.cz>
d69bc0f
Date: Wed, 25 Apr 2012 09:04:50 +0200
d69bc0f
Subject: [PATCH] add support for ARM hard-float ABI (fixes #5914)
d69bc0f
d69bc0f
This patch enhances Platform's ArchARM to include ARM ABI value. It also
d69bc0f
tweaks configure machinery to detect hard-float ABI and to set it wherever
d69bc0f
needed. Finally when hard-float ABI is in use, pass appropriate compiler
d69bc0f
option to the LLVM's llc. Fixes #5914.
d69bc0f
---
d69bc0f
 aclocal.m4                                         |    2 +-
d69bc0f
 compiler/main/DriverPipeline.hs                    |   16 +-
d69bc0f
 compiler/nativeGen/AsmCodeGen.lhs                  |    2 +-
d69bc0f
 compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs |   56 ++--
d69bc0f
 compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs     |   14 +-
d69bc0f
 compiler/nativeGen/RegAlloc/Linear/Main.hs         |   14 +-
d69bc0f
 compiler/nativeGen/TargetReg.hs                    |   70 ++--
d69bc0f
 compiler/utils/Platform.hs                         |   12 +-
d69bc0f
 config.guess                                       |  482 ++++++++++----------
d69bc0f
 configure.ac                                       |   14 +
d69bc0f
 10 files changed, 345 insertions(+), 337 deletions(-)
d69bc0f
d69bc0f
diff --git a/aclocal.m4 b/aclocal.m4
d69bc0f
index 5652185..c196bdf 100644
d69bc0f
--- a/aclocal.m4
d69bc0f
+++ b/aclocal.m4
d69bc0f
@@ -171,7 +171,7 @@ AC_DEFUN([FPTOOLS_SET_HASKELL_PLATFORM_VARS],
d69bc0f
             ;;
d69bc0f
         arm)
d69bc0f
             GET_ARM_ISA()
d69bc0f
-            test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT}\""
d69bc0f
+            test -z "[$]2" || eval "[$]2=\"ArchARM {armISA = \$ARM_ISA, armISAExt = \$ARM_ISA_EXT, armABI = \$ARM_ABI}\""
d69bc0f
             ;;
d69bc0f
         alpha|mips|mipseb|mipsel|hppa|hppa1_1|ia64|m68k|rs6000|s390|s390x|sparc64|vax)
d69bc0f
             test -z "[$]2" || eval "[$]2=ArchUnknown"
d69bc0f
diff -u ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs.arm ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs
d69bc0f
--- ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs.arm	2012-05-15 02:10:41.000000000 +0900
d69bc0f
+++ ghc-7.4.1.20120508/compiler/main/DriverPipeline.hs	2012-05-18 12:19:22.779955285 +0900
d69bc0f
@@ -1366,7 +1366,8 @@
d69bc0f
                     SysTools.FileOption "" input_fn,
d69bc0f
                     SysTools.Option "-o", SysTools.FileOption "" output_fn]
d69bc0f
                 ++ map SysTools.Option lc_opts
d69bc0f
-                ++ map SysTools.Option fpOpts)
d69bc0f
+                ++ map SysTools.Option fpOpts
d69bc0f
+                ++ map SysTools.Option abiOpts)
d69bc0f
 
d69bc0f
     return (next_phase, output_fn)
d69bc0f
   where
d69bc0f
@@ -1378,12 +1379,19 @@
d69bc0f
         -- while compiling GHC source code. It's probably due to fact that it
d69bc0f
         -- does not enable VFP by default. Let's do this manually here
d69bc0f
         fpOpts = case platformArch (targetPlatform dflags) of 
d69bc0f
-                   ArchARM ARMv7 ext -> if (elem VFPv3 ext)
d69bc0f
+                   ArchARM ARMv7 ext _ -> if (elem VFPv3 ext)
d69bc0f
                                       then ["-mattr=+v7,+vfp3"]
d69bc0f
                                       else if (elem VFPv3D16 ext)
d69bc0f
                                            then ["-mattr=+v7,+vfp3,+d16"]
d69bc0f
                                            else []
d69bc0f
                    _               -> []
d69bc0f
+        -- On Ubuntu/Debian with ARM hard float ABI, LLVM's llc still
d69bc0f
+        -- compiles into soft-float ABI. We need to explicitly set abi
d69bc0f
+        -- to hard
d69bc0f
+        abiOpts = case platformArch (targetPlatform dflags) of
d69bc0f
+                    ArchARM ARMv7 _ HARD -> ["-float-abi=hard"]
d69bc0f
+                    ArchARM ARMv7 _ _    -> []
d69bc0f
+                    _                    -> []
d69bc0f
 
d69bc0f
 -----------------------------------------------------------------------------
d69bc0f
 -- LlvmMangle phase
d69bc0f
@@ -1532,8 +1540,8 @@
d69bc0f
 
d69bc0f
             elfSectionNote :: String
d69bc0f
             elfSectionNote = case platformArch (targetPlatform dflags) of
d69bc0f
-                               ArchARM _ _ -> "%note"
d69bc0f
-                               _           -> "@note"
d69bc0f
+                               ArchARM _ _ _ -> "%note"
d69bc0f
+                               _             -> "@note"
d69bc0f
 
d69bc0f
 -- The "link info" is a string representing the parameters of the
d69bc0f
 -- link.  We save this information in the binary, and the next time we
d69bc0f
diff --git a/compiler/nativeGen/AsmCodeGen.lhs b/compiler/nativeGen/AsmCodeGen.lhs
d69bc0f
index 1ad1242..e976e58 100644
d69bc0f
--- a/compiler/nativeGen/AsmCodeGen.lhs
d69bc0f
+++ b/compiler/nativeGen/AsmCodeGen.lhs
d69bc0f
@@ -200,7 +200,7 @@ nativeCodeGen dflags h us cmms
d69bc0f
                          ,ncgExpandTop              = map SPARC.CodeGen.Expand.expandTop
d69bc0f
                          ,ncgMakeFarBranches        = id
d69bc0f
                      }
d69bc0f
-                 ArchARM _ _ ->
d69bc0f
+                 ArchARM _ _ _ ->
d69bc0f
                      panic "nativeCodeGen: No NCG for ARM"
d69bc0f
                  ArchPPC_64 ->
d69bc0f
                      panic "nativeCodeGen: No NCG for PPC 64"
d69bc0f
diff --git a/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs b/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
d69bc0f
index 6067f23..6cd3f00 100644
d69bc0f
--- a/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
d69bc0f
+++ b/compiler/nativeGen/RegAlloc/Graph/TrivColorable.hs
d69bc0f
@@ -107,13 +107,13 @@ trivColorable
d69bc0f
 trivColorable platform virtualRegSqueeze realRegSqueeze RcInteger conflicts exclusions
d69bc0f
         | let !cALLOCATABLE_REGS_INTEGER
d69bc0f
                   = iUnbox (case platformArch platform of
d69bc0f
-                            ArchX86     -> 3
d69bc0f
-                            ArchX86_64  -> 5
d69bc0f
-                            ArchPPC     -> 16
d69bc0f
-                            ArchSPARC   -> 14
d69bc0f
-                            ArchPPC_64  -> panic "trivColorable ArchPPC_64"
d69bc0f
-                            ArchARM _ _ -> panic "trivColorable ArchARM"
d69bc0f
-                            ArchUnknown -> panic "trivColorable ArchUnknown")
d69bc0f
+                            ArchX86       -> 3
d69bc0f
+                            ArchX86_64    -> 5
d69bc0f
+                            ArchPPC       -> 16
d69bc0f
+                            ArchSPARC     -> 14
d69bc0f
+                            ArchPPC_64    -> panic "trivColorable ArchPPC_64"
d69bc0f
+                            ArchARM _ _ _ -> panic "trivColorable ArchARM"
d69bc0f
+                            ArchUnknown   -> panic "trivColorable ArchUnknown")
d69bc0f
         , count2        <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_INTEGER
d69bc0f
                                 (virtualRegSqueeze RcInteger)
d69bc0f
                                 conflicts
d69bc0f
@@ -127,13 +127,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcInteger conflicts excl
d69bc0f
 trivColorable platform virtualRegSqueeze realRegSqueeze RcFloat conflicts exclusions
d69bc0f
         | let !cALLOCATABLE_REGS_FLOAT
d69bc0f
                   = iUnbox (case platformArch platform of
d69bc0f
-                            ArchX86     -> 0
d69bc0f
-                            ArchX86_64  -> 0
d69bc0f
-                            ArchPPC     -> 0
d69bc0f
-                            ArchSPARC   -> 22
d69bc0f
-                            ArchPPC_64  -> panic "trivColorable ArchPPC_64"
d69bc0f
-                            ArchARM _ _ -> panic "trivColorable ArchARM"
d69bc0f
-                            ArchUnknown -> panic "trivColorable ArchUnknown")
d69bc0f
+                            ArchX86       -> 0
d69bc0f
+                            ArchX86_64    -> 0
d69bc0f
+                            ArchPPC       -> 0
d69bc0f
+                            ArchSPARC     -> 22
d69bc0f
+                            ArchPPC_64    -> panic "trivColorable ArchPPC_64"
d69bc0f
+                            ArchARM _ _ _ -> panic "trivColorable ArchARM"
d69bc0f
+                            ArchUnknown   -> panic "trivColorable ArchUnknown")
d69bc0f
         , count2        <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_FLOAT
d69bc0f
                                 (virtualRegSqueeze RcFloat)
d69bc0f
                                 conflicts
d69bc0f
@@ -147,13 +147,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcFloat conflicts exclus
d69bc0f
 trivColorable platform virtualRegSqueeze realRegSqueeze RcDouble conflicts exclusions
d69bc0f
         | let !cALLOCATABLE_REGS_DOUBLE
d69bc0f
                   = iUnbox (case platformArch platform of
d69bc0f
-                            ArchX86     -> 6
d69bc0f
-                            ArchX86_64  -> 0
d69bc0f
-                            ArchPPC     -> 26
d69bc0f
-                            ArchSPARC   -> 11
d69bc0f
-                            ArchPPC_64  -> panic "trivColorable ArchPPC_64"
d69bc0f
-                            ArchARM _ _ -> panic "trivColorable ArchARM"
d69bc0f
-                            ArchUnknown -> panic "trivColorable ArchUnknown")
d69bc0f
+                            ArchX86       -> 6
d69bc0f
+                            ArchX86_64    -> 0
d69bc0f
+                            ArchPPC       -> 26
d69bc0f
+                            ArchSPARC     -> 11
d69bc0f
+                            ArchPPC_64    -> panic "trivColorable ArchPPC_64"
d69bc0f
+                            ArchARM _ _ _ -> panic "trivColorable ArchARM"
d69bc0f
+                            ArchUnknown   -> panic "trivColorable ArchUnknown")
d69bc0f
         , count2        <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_DOUBLE
d69bc0f
                                 (virtualRegSqueeze RcDouble)
d69bc0f
                                 conflicts
d69bc0f
@@ -167,13 +167,13 @@ trivColorable platform virtualRegSqueeze realRegSqueeze RcDouble conflicts exclu
d69bc0f
 trivColorable platform virtualRegSqueeze realRegSqueeze RcDoubleSSE conflicts exclusions
d69bc0f
         | let !cALLOCATABLE_REGS_SSE
d69bc0f
                   = iUnbox (case platformArch platform of
d69bc0f
-                            ArchX86     -> 8
d69bc0f
-                            ArchX86_64  -> 10
d69bc0f
-                            ArchPPC     -> 0
d69bc0f
-                            ArchSPARC   -> 0
d69bc0f
-                            ArchPPC_64  -> panic "trivColorable ArchPPC_64"
d69bc0f
-                            ArchARM _ _ -> panic "trivColorable ArchARM"
d69bc0f
-                            ArchUnknown -> panic "trivColorable ArchUnknown")
d69bc0f
+                            ArchX86       -> 8
d69bc0f
+                            ArchX86_64    -> 10
d69bc0f
+                            ArchPPC       -> 0
d69bc0f
+                            ArchSPARC     -> 0
d69bc0f
+                            ArchPPC_64    -> panic "trivColorable ArchPPC_64"
d69bc0f
+                            ArchARM _ _ _ -> panic "trivColorable ArchARM"
d69bc0f
+                            ArchUnknown   -> panic "trivColorable ArchUnknown")
d69bc0f
         , count2        <- accSqueeze (_ILIT(0)) cALLOCATABLE_REGS_SSE
d69bc0f
                                 (virtualRegSqueeze RcDoubleSSE)
d69bc0f
                                 conflicts
d69bc0f
diff --git a/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs b/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
d69bc0f
index 6fbbd04..fd1fd27 100644
d69bc0f
--- a/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
d69bc0f
+++ b/compiler/nativeGen/RegAlloc/Linear/FreeRegs.hs
d69bc0f
@@ -68,11 +68,11 @@ instance FR SPARC.FreeRegs where
d69bc0f
 maxSpillSlots :: Platform -> Int
d69bc0f
 maxSpillSlots platform
d69bc0f
               = case platformArch platform of
d69bc0f
-                ArchX86     -> X86.Instr.maxSpillSlots True  -- 32bit
d69bc0f
-                ArchX86_64  -> X86.Instr.maxSpillSlots False -- not 32bit
d69bc0f
-                ArchPPC     -> PPC.Instr.maxSpillSlots
d69bc0f
-                ArchSPARC   -> SPARC.Instr.maxSpillSlots
d69bc0f
-                ArchARM _ _ -> panic "maxSpillSlots ArchARM"
d69bc0f
-                ArchPPC_64  -> panic "maxSpillSlots ArchPPC_64"
d69bc0f
-                ArchUnknown -> panic "maxSpillSlots ArchUnknown"
d69bc0f
+                ArchX86       -> X86.Instr.maxSpillSlots True  -- 32bit
d69bc0f
+                ArchX86_64    -> X86.Instr.maxSpillSlots False -- not 32bit
d69bc0f
+                ArchPPC       -> PPC.Instr.maxSpillSlots
d69bc0f
+                ArchSPARC     -> SPARC.Instr.maxSpillSlots
d69bc0f
+                ArchARM _ _ _ -> panic "maxSpillSlots ArchARM"
d69bc0f
+                ArchPPC_64    -> panic "maxSpillSlots ArchPPC_64"
d69bc0f
+                ArchUnknown   -> panic "maxSpillSlots ArchUnknown"
d69bc0f
 
d69bc0f
diff --git a/compiler/nativeGen/RegAlloc/Linear/Main.hs b/compiler/nativeGen/RegAlloc/Linear/Main.hs
d69bc0f
index fc0bde4..64b0f68 100644
d69bc0f
--- a/compiler/nativeGen/RegAlloc/Linear/Main.hs
d69bc0f
+++ b/compiler/nativeGen/RegAlloc/Linear/Main.hs
d69bc0f
@@ -180,13 +180,13 @@ linearRegAlloc
d69bc0f
 linearRegAlloc dflags first_id block_live sccs
d69bc0f
  = let platform = targetPlatform dflags
d69bc0f
    in case platformArch platform of
d69bc0f
-      ArchX86     -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs)   first_id block_live sccs
d69bc0f
-      ArchX86_64  -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs)   first_id block_live sccs
d69bc0f
-      ArchSPARC   -> linearRegAlloc' platform (frInitFreeRegs :: SPARC.FreeRegs) first_id block_live sccs
d69bc0f
-      ArchPPC     -> linearRegAlloc' platform (frInitFreeRegs :: PPC.FreeRegs)   first_id block_live sccs
d69bc0f
-      ArchARM _ _ -> panic "linearRegAlloc ArchARM"
d69bc0f
-      ArchPPC_64  -> panic "linearRegAlloc ArchPPC_64"
d69bc0f
-      ArchUnknown -> panic "linearRegAlloc ArchUnknown"
d69bc0f
+      ArchX86       -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs)   first_id block_live sccs
d69bc0f
+      ArchX86_64    -> linearRegAlloc' platform (frInitFreeRegs :: X86.FreeRegs)   first_id block_live sccs
d69bc0f
+      ArchSPARC     -> linearRegAlloc' platform (frInitFreeRegs :: SPARC.FreeRegs) first_id block_live sccs
d69bc0f
+      ArchPPC       -> linearRegAlloc' platform (frInitFreeRegs :: PPC.FreeRegs)   first_id block_live sccs
d69bc0f
+      ArchARM _ _ _ -> panic "linearRegAlloc ArchARM"
d69bc0f
+      ArchPPC_64    -> panic "linearRegAlloc ArchPPC_64"
d69bc0f
+      ArchUnknown   -> panic "linearRegAlloc ArchUnknown"
d69bc0f
 
d69bc0f
 linearRegAlloc'
d69bc0f
         :: (FR freeRegs, PlatformOutputable instr, Instruction instr)
d69bc0f
diff --git a/compiler/nativeGen/TargetReg.hs b/compiler/nativeGen/TargetReg.hs
d69bc0f
index cbc4c17..13293de 100644
d69bc0f
--- a/compiler/nativeGen/TargetReg.hs
d69bc0f
+++ b/compiler/nativeGen/TargetReg.hs
d69bc0f
@@ -50,35 +50,35 @@ import qualified SPARC.Regs     as SPARC
d69bc0f
 targetVirtualRegSqueeze :: Platform -> RegClass -> VirtualReg -> FastInt
d69bc0f
 targetVirtualRegSqueeze platform
d69bc0f
     = case platformArch platform of
d69bc0f
-      ArchX86     -> X86.virtualRegSqueeze
d69bc0f
-      ArchX86_64  -> X86.virtualRegSqueeze
d69bc0f
-      ArchPPC     -> PPC.virtualRegSqueeze
d69bc0f
-      ArchSPARC   -> SPARC.virtualRegSqueeze
d69bc0f
-      ArchPPC_64  -> panic "targetVirtualRegSqueeze ArchPPC_64"
d69bc0f
-      ArchARM _ _ -> panic "targetVirtualRegSqueeze ArchARM"
d69bc0f
-      ArchUnknown -> panic "targetVirtualRegSqueeze ArchUnknown"
d69bc0f
+      ArchX86       -> X86.virtualRegSqueeze
d69bc0f
+      ArchX86_64    -> X86.virtualRegSqueeze
d69bc0f
+      ArchPPC       -> PPC.virtualRegSqueeze
d69bc0f
+      ArchSPARC     -> SPARC.virtualRegSqueeze
d69bc0f
+      ArchPPC_64    -> panic "targetVirtualRegSqueeze ArchPPC_64"
d69bc0f
+      ArchARM _ _ _ -> panic "targetVirtualRegSqueeze ArchARM"
d69bc0f
+      ArchUnknown   -> panic "targetVirtualRegSqueeze ArchUnknown"
d69bc0f
 
d69bc0f
 targetRealRegSqueeze :: Platform -> RegClass -> RealReg -> FastInt
d69bc0f
 targetRealRegSqueeze platform
d69bc0f
     = case platformArch platform of
d69bc0f
-      ArchX86     -> X86.realRegSqueeze
d69bc0f
-      ArchX86_64  -> X86.realRegSqueeze
d69bc0f
-      ArchPPC     -> PPC.realRegSqueeze
d69bc0f
-      ArchSPARC   -> SPARC.realRegSqueeze
d69bc0f
-      ArchPPC_64  -> panic "targetRealRegSqueeze ArchPPC_64"
d69bc0f
-      ArchARM _ _ -> panic "targetRealRegSqueeze ArchARM"
d69bc0f
-      ArchUnknown -> panic "targetRealRegSqueeze ArchUnknown"
d69bc0f
+      ArchX86       -> X86.realRegSqueeze
d69bc0f
+      ArchX86_64    -> X86.realRegSqueeze
d69bc0f
+      ArchPPC       -> PPC.realRegSqueeze
d69bc0f
+      ArchSPARC     -> SPARC.realRegSqueeze
d69bc0f
+      ArchPPC_64    -> panic "targetRealRegSqueeze ArchPPC_64"
d69bc0f
+      ArchARM _ _ _ -> panic "targetRealRegSqueeze ArchARM"
d69bc0f
+      ArchUnknown   -> panic "targetRealRegSqueeze ArchUnknown"
d69bc0f
 
d69bc0f
 targetClassOfRealReg :: Platform -> RealReg -> RegClass
d69bc0f
 targetClassOfRealReg platform
d69bc0f
     = case platformArch platform of
d69bc0f
-      ArchX86     -> X86.classOfRealReg
d69bc0f
-      ArchX86_64  -> X86.classOfRealReg
d69bc0f
-      ArchPPC     -> PPC.classOfRealReg
d69bc0f
-      ArchSPARC   -> SPARC.classOfRealReg
d69bc0f
-      ArchPPC_64  -> panic "targetClassOfRealReg ArchPPC_64"
d69bc0f
-      ArchARM _ _ -> panic "targetClassOfRealReg ArchARM"
d69bc0f
-      ArchUnknown -> panic "targetClassOfRealReg ArchUnknown"
d69bc0f
+      ArchX86       -> X86.classOfRealReg
d69bc0f
+      ArchX86_64    -> X86.classOfRealReg
d69bc0f
+      ArchPPC       -> PPC.classOfRealReg
d69bc0f
+      ArchSPARC     -> SPARC.classOfRealReg
d69bc0f
+      ArchPPC_64    -> panic "targetClassOfRealReg ArchPPC_64"
d69bc0f
+      ArchARM _ _ _ -> panic "targetClassOfRealReg ArchARM"
d69bc0f
+      ArchUnknown   -> panic "targetClassOfRealReg ArchUnknown"
d69bc0f
 
d69bc0f
 -- TODO: This should look at targetPlatform too
d69bc0f
 targetWordSize :: Size
d69bc0f
@@ -87,24 +87,24 @@ targetWordSize = intSize wordWidth
d69bc0f
 targetMkVirtualReg :: Platform -> Unique -> Size -> VirtualReg
d69bc0f
 targetMkVirtualReg platform
d69bc0f
     = case platformArch platform of
d69bc0f
-      ArchX86     -> X86.mkVirtualReg
d69bc0f
-      ArchX86_64  -> X86.mkVirtualReg
d69bc0f
-      ArchPPC     -> PPC.mkVirtualReg
d69bc0f
-      ArchSPARC   -> SPARC.mkVirtualReg
d69bc0f
-      ArchPPC_64  -> panic "targetMkVirtualReg ArchPPC_64"
d69bc0f
-      ArchARM _ _ -> panic "targetMkVirtualReg ArchARM"
d69bc0f
-      ArchUnknown -> panic "targetMkVirtualReg ArchUnknown"
d69bc0f
+      ArchX86       -> X86.mkVirtualReg
d69bc0f
+      ArchX86_64    -> X86.mkVirtualReg
d69bc0f
+      ArchPPC       -> PPC.mkVirtualReg
d69bc0f
+      ArchSPARC     -> SPARC.mkVirtualReg
d69bc0f
+      ArchPPC_64    -> panic "targetMkVirtualReg ArchPPC_64"
d69bc0f
+      ArchARM _ _ _ -> panic "targetMkVirtualReg ArchARM"
d69bc0f
+      ArchUnknown   -> panic "targetMkVirtualReg ArchUnknown"
d69bc0f
 
d69bc0f
 targetRegDotColor :: Platform -> RealReg -> SDoc
d69bc0f
 targetRegDotColor platform
d69bc0f
     = case platformArch platform of
d69bc0f
-      ArchX86     -> X86.regDotColor platform
d69bc0f
-      ArchX86_64  -> X86.regDotColor platform
d69bc0f
-      ArchPPC     -> PPC.regDotColor
d69bc0f
-      ArchSPARC   -> SPARC.regDotColor
d69bc0f
-      ArchPPC_64  -> panic "targetRegDotColor ArchPPC_64"
d69bc0f
-      ArchARM _ _ -> panic "targetRegDotColor ArchARM"
d69bc0f
-      ArchUnknown -> panic "targetRegDotColor ArchUnknown"
d69bc0f
+      ArchX86       -> X86.regDotColor platform
d69bc0f
+      ArchX86_64    -> X86.regDotColor platform
d69bc0f
+      ArchPPC       -> PPC.regDotColor
d69bc0f
+      ArchSPARC     -> SPARC.regDotColor
d69bc0f
+      ArchPPC_64    -> panic "targetRegDotColor ArchPPC_64"
d69bc0f
+      ArchARM _ _ _ -> panic "targetRegDotColor ArchARM"
d69bc0f
+      ArchUnknown   -> panic "targetRegDotColor ArchUnknown"
d69bc0f
 
d69bc0f
 
d69bc0f
 targetClassOfReg :: Platform -> Reg -> RegClass
d69bc0f
diff --git a/compiler/utils/Platform.hs b/compiler/utils/Platform.hs
d69bc0f
index 47dd779..8252621 100644
d69bc0f
--- a/compiler/utils/Platform.hs
d69bc0f
+++ b/compiler/utils/Platform.hs
d69bc0f
@@ -7,6 +7,7 @@ module Platform (
d69bc0f
         OS(..),
d69bc0f
         ArmISA(..),
d69bc0f
         ArmISAExt(..),
d69bc0f
+        ArmABI(..),
d69bc0f
 
d69bc0f
         target32Bit,
d69bc0f
         osElfTarget
d69bc0f
@@ -41,7 +42,9 @@ data Arch
d69bc0f
         | ArchSPARC
d69bc0f
         | ArchARM
d69bc0f
           { armISA    :: ArmISA
d69bc0f
-          , armISAExt :: [ArmISAExt] }
d69bc0f
+          , armISAExt :: [ArmISAExt]
d69bc0f
+          , armABI    :: ArmABI
d69bc0f
+          }
d69bc0f
         deriving (Read, Show, Eq)
d69bc0f
 
d69bc0f
 
d69bc0f
@@ -61,7 +64,7 @@ data OS
d69bc0f
         | OSHaiku
d69bc0f
         deriving (Read, Show, Eq)
d69bc0f
 
d69bc0f
--- | ARM Instruction Set Architecture and Extensions
d69bc0f
+-- | ARM Instruction Set Architecture, Extensions and ABI
d69bc0f
 --
d69bc0f
 data ArmISA
d69bc0f
     = ARMv5
d69bc0f
@@ -77,6 +80,11 @@ data ArmISAExt
d69bc0f
     | IWMMX2
d69bc0f
     deriving (Read, Show, Eq)
d69bc0f
 
d69bc0f
+data ArmABI
d69bc0f
+    = SOFT
d69bc0f
+    | SOFTFP
d69bc0f
+    | HARD
d69bc0f
+    deriving (Read, Show, Eq)
d69bc0f
 
d69bc0f
 target32Bit :: Platform -> Bool
d69bc0f
 target32Bit p = platformWordSize p == 4
d69bc0f
diff --git a/config.guess b/config.guess
d69bc0f
index 463a03a..d622a44 100644
d69bc0f
--- a/config.guess
d69bc0f
+++ b/config.guess
d69bc0f
@@ -1,10 +1,10 @@
d69bc0f
 #! /bin/sh
d69bc0f
 # Attempt to guess a canonical system name.
d69bc0f
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
d69bc0f
-#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008
d69bc0f
-#   Free Software Foundation, Inc.
d69bc0f
+#   2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
d69bc0f
+#   2011, 2012 Free Software Foundation, Inc.
d69bc0f
 
d69bc0f
-timestamp='2008-11-15'
d69bc0f
+timestamp='2012-02-10'
d69bc0f
 
d69bc0f
 # This file is free software; you can redistribute it and/or modify it
d69bc0f
 # under the terms of the GNU General Public License as published by
d69bc0f
@@ -17,9 +17,7 @@ timestamp='2008-11-15'
d69bc0f
 # General Public License for more details.
d69bc0f
 #
d69bc0f
 # You should have received a copy of the GNU General Public License
d69bc0f
-# along with this program; if not, write to the Free Software
d69bc0f
-# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
d69bc0f
-# 02110-1301, USA.
d69bc0f
+# along with this program; if not, see <http://www.gnu.org/licenses/>.
d69bc0f
 #
d69bc0f
 # As a special exception to the GNU General Public License, if you
d69bc0f
 # distribute this file as part of a program that contains a
d69bc0f
@@ -27,16 +25,16 @@ timestamp='2008-11-15'
d69bc0f
 # the same distribution terms that you use for the rest of that program.
d69bc0f
 
d69bc0f
 
d69bc0f
-# Originally written by Per Bothner <per@bothner.com>.
d69bc0f
-# Please send patches to <config-patches@gnu.org>.  Submit a context
d69bc0f
-# diff and a properly formatted ChangeLog entry.
d69bc0f
+# Originally written by Per Bothner.  Please send patches (context
d69bc0f
+# diff format) to <config-patches@gnu.org> and include a ChangeLog
d69bc0f
+# entry.
d69bc0f
 #
d69bc0f
 # This script attempts to guess a canonical system name similar to
d69bc0f
 # config.sub.  If it succeeds, it prints the system name on stdout, and
d69bc0f
 # exits with 0.  Otherwise, it exits with 1.
d69bc0f
 #
d69bc0f
-# The plan is that this can be called by configure scripts if you
d69bc0f
-# don't specify an explicit build system type.
d69bc0f
+# You can get the latest version of this script from:
d69bc0f
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
d69bc0f
 
d69bc0f
 me=`echo "$0" | sed -e 's,.*/,,'`
d69bc0f
 
d69bc0f
@@ -56,8 +54,9 @@ version="\
d69bc0f
 GNU config.guess ($timestamp)
d69bc0f
 
d69bc0f
 Originally written by Per Bothner.
d69bc0f
-Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
d69bc0f
-2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
d69bc0f
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000,
d69bc0f
+2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
d69bc0f
+Free Software Foundation, Inc.
d69bc0f
 
d69bc0f
 This is free software; see the source for copying conditions.  There is NO
d69bc0f
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
d69bc0f
@@ -144,7 +143,7 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
d69bc0f
 case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
     *:NetBSD:*:*)
d69bc0f
 	# NetBSD (nbsd) targets should (where applicable) match one or
d69bc0f
-	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
d69bc0f
+	# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
d69bc0f
 	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
d69bc0f
 	# switched to ELF, *-*-netbsd* would select the old
d69bc0f
 	# object file format.  This provides both forward
d69bc0f
@@ -170,7 +169,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
d69bc0f
 		eval $set_cc_for_build
d69bc0f
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
d69bc0f
-			| grep __ELF__ >/dev/null
d69bc0f
+			| grep -q __ELF__
d69bc0f
 		then
d69bc0f
 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
d69bc0f
 		    # Return netbsd for either.  FIX?
d69bc0f
@@ -180,7 +179,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 		fi
d69bc0f
 		;;
d69bc0f
 	    *)
d69bc0f
-	        os=netbsd
d69bc0f
+		os=netbsd
d69bc0f
 		;;
d69bc0f
 	esac
d69bc0f
 	# The OS release
d69bc0f
@@ -223,7 +222,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
d69bc0f
 		;;
d69bc0f
 	*5.*)
d69bc0f
-	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
d69bc0f
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
d69bc0f
 		;;
d69bc0f
 	esac
d69bc0f
 	# According to Compaq, /usr/sbin/psrinfo has been available on
d69bc0f
@@ -269,7 +268,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 	# A Xn.n version is an unreleased experimental baselevel.
d69bc0f
 	# 1.2 uses "1.2" for uname -r.
d69bc0f
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
d69bc0f
-	exit ;;
d69bc0f
+	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
d69bc0f
+	exitcode=$?
d69bc0f
+	trap '' 0
d69bc0f
+	exit $exitcode ;;
d69bc0f
     Alpha\ *:Windows_NT*:*)
d69bc0f
 	# How do we know it's Interix rather than the generic POSIX subsystem?
d69bc0f
 	# Should we change UNAME_MACHINE based on the output of uname instead
d69bc0f
@@ -295,7 +297,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 	echo s390-ibm-zvmoe
d69bc0f
 	exit ;;
d69bc0f
     *:OS400:*:*)
d69bc0f
-        echo powerpc-ibm-os400
d69bc0f
+	echo powerpc-ibm-os400
d69bc0f
 	exit ;;
d69bc0f
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
d69bc0f
 	echo arm-acorn-riscix${UNAME_RELEASE}
d69bc0f
@@ -324,12 +326,18 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 	case `/usr/bin/uname -p` in
d69bc0f
 	    sparc) echo sparc-icl-nx7; exit ;;
d69bc0f
 	esac ;;
d69bc0f
+    s390x:SunOS:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
d69bc0f
+	exit ;;
d69bc0f
     sun4H:SunOS:5.*:*)
d69bc0f
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
d69bc0f
 	exit ;;
d69bc0f
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
d69bc0f
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
d69bc0f
 	exit ;;
d69bc0f
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
d69bc0f
+	echo i386-pc-auroraux${UNAME_RELEASE}
d69bc0f
+	exit ;;
d69bc0f
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
d69bc0f
 	eval $set_cc_for_build
d69bc0f
 	SUN_ARCH="i386"
d69bc0f
@@ -337,17 +345,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
d69bc0f
 	# This test works for both compilers.
d69bc0f
 	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
d69bc0f
-            # bash is not able to generate correct code here
d69bc0f
-            # i.e. it leaves \ns there
d69bc0f
-            # so we need to use /usr/bin/echo to get what we want
d69bc0f
-            # note that if config.guess is run by /bin/sh then
d69bc0f
-            # this works as expected even without /usr/bin/echo
d69bc0f
-            # but the problem is that configure is clever enough
d69bc0f
-            # to find bash installed and then runs config.guess
d69bc0f
-            # by bash instead of by /bin/sh
d69bc0f
-            # It seems that using /usr/bin/echo here is the most
d69bc0f
-            # portable Solaris fix
d69bc0f
-	    if /usr/bin/echo '\n#ifdef __amd64\nIS_64BIT_ARCH\n#endif' | \
d69bc0f
+	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
d69bc0f
 		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
d69bc0f
 		grep IS_64BIT_ARCH >/dev/null
d69bc0f
 	    then
d69bc0f
@@ -398,23 +396,23 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
d69bc0f
     # MiNT.  But MiNT is downward compatible to TOS, so this should
d69bc0f
     # be no problem.
d69bc0f
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
d69bc0f
-        echo m68k-atari-mint${UNAME_RELEASE}
d69bc0f
+	echo m68k-atari-mint${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
d69bc0f
 	echo m68k-atari-mint${UNAME_RELEASE}
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
d69bc0f
-        echo m68k-atari-mint${UNAME_RELEASE}
d69bc0f
+	echo m68k-atari-mint${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
d69bc0f
-        echo m68k-milan-mint${UNAME_RELEASE}
d69bc0f
-        exit ;;
d69bc0f
+	echo m68k-milan-mint${UNAME_RELEASE}
d69bc0f
+	exit ;;
d69bc0f
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
d69bc0f
-        echo m68k-hades-mint${UNAME_RELEASE}
d69bc0f
-        exit ;;
d69bc0f
+	echo m68k-hades-mint${UNAME_RELEASE}
d69bc0f
+	exit ;;
d69bc0f
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
d69bc0f
-        echo m68k-unknown-mint${UNAME_RELEASE}
d69bc0f
-        exit ;;
d69bc0f
+	echo m68k-unknown-mint${UNAME_RELEASE}
d69bc0f
+	exit ;;
d69bc0f
     m68k:machten:*:*)
d69bc0f
 	echo m68k-apple-machten${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
@@ -484,8 +482,8 @@ EOF
d69bc0f
 	echo m88k-motorola-sysv3
d69bc0f
 	exit ;;
d69bc0f
     AViiON:dgux:*:*)
d69bc0f
-        # DG/UX returns AViiON for all architectures
d69bc0f
-        UNAME_PROCESSOR=`/usr/bin/uname -p`
d69bc0f
+	# DG/UX returns AViiON for all architectures
d69bc0f
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
d69bc0f
 	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
d69bc0f
 	then
d69bc0f
 	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
d69bc0f
@@ -498,7 +496,7 @@ EOF
d69bc0f
 	else
d69bc0f
 	    echo i586-dg-dgux${UNAME_RELEASE}
d69bc0f
 	fi
d69bc0f
- 	exit ;;
d69bc0f
+	exit ;;
d69bc0f
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
d69bc0f
 	echo m88k-dolphin-sysv3
d69bc0f
 	exit ;;
d69bc0f
@@ -555,7 +553,7 @@ EOF
d69bc0f
 		echo rs6000-ibm-aix3.2
d69bc0f
 	fi
d69bc0f
 	exit ;;
d69bc0f
-    *:AIX:*:[456])
d69bc0f
+    *:AIX:*:[4567])
d69bc0f
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
d69bc0f
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
d69bc0f
 		IBM_ARCH=rs6000
d69bc0f
@@ -598,52 +596,52 @@ EOF
d69bc0f
 	    9000/[678][0-9][0-9])
d69bc0f
 		if [ -x /usr/bin/getconf ]; then
d69bc0f
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
d69bc0f
-                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
d69bc0f
-                    case "${sc_cpu_version}" in
d69bc0f
-                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
d69bc0f
-                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
d69bc0f
-                      532)                      # CPU_PA_RISC2_0
d69bc0f
-                        case "${sc_kernel_bits}" in
d69bc0f
-                          32) HP_ARCH="hppa2.0n" ;;
d69bc0f
-                          64) HP_ARCH="hppa2.0w" ;;
d69bc0f
+		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
d69bc0f
+		    case "${sc_cpu_version}" in
d69bc0f
+		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
d69bc0f
+		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
d69bc0f
+		      532)                      # CPU_PA_RISC2_0
d69bc0f
+			case "${sc_kernel_bits}" in
d69bc0f
+			  32) HP_ARCH="hppa2.0n" ;;
d69bc0f
+			  64) HP_ARCH="hppa2.0w" ;;
d69bc0f
 			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
d69bc0f
-                        esac ;;
d69bc0f
-                    esac
d69bc0f
+			esac ;;
d69bc0f
+		    esac
d69bc0f
 		fi
d69bc0f
 		if [ "${HP_ARCH}" = "" ]; then
d69bc0f
 		    eval $set_cc_for_build
d69bc0f
-		    sed 's/^              //' << EOF >$dummy.c
d69bc0f
+		    sed 's/^		//' << EOF >$dummy.c
d69bc0f
 
d69bc0f
-              #define _HPUX_SOURCE
d69bc0f
-              #include <stdlib.h>
d69bc0f
-              #include <unistd.h>
d69bc0f
+		#define _HPUX_SOURCE
d69bc0f
+		#include <stdlib.h>
d69bc0f
+		#include <unistd.h>
d69bc0f
 
d69bc0f
-              int main ()
d69bc0f
-              {
d69bc0f
-              #if defined(_SC_KERNEL_BITS)
d69bc0f
-                  long bits = sysconf(_SC_KERNEL_BITS);
d69bc0f
-              #endif
d69bc0f
-                  long cpu  = sysconf (_SC_CPU_VERSION);
d69bc0f
+		int main ()
d69bc0f
+		{
d69bc0f
+		#if defined(_SC_KERNEL_BITS)
d69bc0f
+		    long bits = sysconf(_SC_KERNEL_BITS);
d69bc0f
+		#endif
d69bc0f
+		    long cpu  = sysconf (_SC_CPU_VERSION);
d69bc0f
 
d69bc0f
-                  switch (cpu)
d69bc0f
-              	{
d69bc0f
-              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
d69bc0f
-              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
d69bc0f
-              	case CPU_PA_RISC2_0:
d69bc0f
-              #if defined(_SC_KERNEL_BITS)
d69bc0f
-              	    switch (bits)
d69bc0f
-              		{
d69bc0f
-              		case 64: puts ("hppa2.0w"); break;
d69bc0f
-              		case 32: puts ("hppa2.0n"); break;
d69bc0f
-              		default: puts ("hppa2.0"); break;
d69bc0f
-              		} break;
d69bc0f
-              #else  /* !defined(_SC_KERNEL_BITS) */
d69bc0f
-              	    puts ("hppa2.0"); break;
d69bc0f
-              #endif
d69bc0f
-              	default: puts ("hppa1.0"); break;
d69bc0f
-              	}
d69bc0f
-                  exit (0);
d69bc0f
-              }
d69bc0f
+		    switch (cpu)
d69bc0f
+			{
d69bc0f
+			case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
d69bc0f
+			case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
d69bc0f
+			case CPU_PA_RISC2_0:
d69bc0f
+		#if defined(_SC_KERNEL_BITS)
d69bc0f
+			    switch (bits)
d69bc0f
+				{
d69bc0f
+				case 64: puts ("hppa2.0w"); break;
d69bc0f
+				case 32: puts ("hppa2.0n"); break;
d69bc0f
+				default: puts ("hppa2.0"); break;
d69bc0f
+				} break;
d69bc0f
+		#else  /* !defined(_SC_KERNEL_BITS) */
d69bc0f
+			    puts ("hppa2.0"); break;
d69bc0f
+		#endif
d69bc0f
+			default: puts ("hppa1.0"); break;
d69bc0f
+			}
d69bc0f
+		    exit (0);
d69bc0f
+		}
d69bc0f
 EOF
d69bc0f
 		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
d69bc0f
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
d69bc0f
@@ -663,7 +661,7 @@ EOF
d69bc0f
 	    # => hppa64-hp-hpux11.23
d69bc0f
 
d69bc0f
 	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
d69bc0f
-		grep __LP64__ >/dev/null
d69bc0f
+		grep -q __LP64__
d69bc0f
 	    then
d69bc0f
 		HP_ARCH="hppa2.0w"
d69bc0f
 	    else
d69bc0f
@@ -734,22 +732,22 @@ EOF
d69bc0f
 	exit ;;
d69bc0f
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
d69bc0f
 	echo c1-convex-bsd
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
d69bc0f
 	if getsysinfo -f scalar_acc
d69bc0f
 	then echo c32-convex-bsd
d69bc0f
 	else echo c2-convex-bsd
d69bc0f
 	fi
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
d69bc0f
 	echo c34-convex-bsd
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
d69bc0f
 	echo c38-convex-bsd
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
d69bc0f
 	echo c4-convex-bsd
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     CRAY*Y-MP:*:*:*)
d69bc0f
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
d69bc0f
 	exit ;;
d69bc0f
@@ -773,14 +771,14 @@ EOF
d69bc0f
 	exit ;;
d69bc0f
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
d69bc0f
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
d69bc0f
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
d69bc0f
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
d69bc0f
-        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
d69bc0f
-        exit ;;
d69bc0f
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
d69bc0f
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
d69bc0f
+	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
d69bc0f
+	exit ;;
d69bc0f
     5000:UNIX_System_V:4.*:*)
d69bc0f
-        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
d69bc0f
-        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
d69bc0f
-        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
d69bc0f
+	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
d69bc0f
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
d69bc0f
+	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
d69bc0f
 	exit ;;
d69bc0f
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
d69bc0f
@@ -792,13 +790,12 @@ EOF
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     *:FreeBSD:*:*)
d69bc0f
-	case ${UNAME_MACHINE} in
d69bc0f
-	    pc98)
d69bc0f
-		echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
d69bc0f
+	UNAME_PROCESSOR=`/usr/bin/uname -p`
d69bc0f
+	case ${UNAME_PROCESSOR} in
d69bc0f
 	    amd64)
d69bc0f
 		echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
d69bc0f
 	    *)
d69bc0f
-		echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
d69bc0f
+		echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
d69bc0f
 	esac
d69bc0f
 	exit ;;
d69bc0f
     i*:CYGWIN*:*)
d69bc0f
@@ -807,19 +804,22 @@ EOF
d69bc0f
     *:MINGW*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-mingw32
d69bc0f
 	exit ;;
d69bc0f
+    i*:MSYS*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-pc-msys
d69bc0f
+	exit ;;
d69bc0f
     i*:windows32*:*)
d69bc0f
-    	# uname -m includes "-pc" on this system.
d69bc0f
-    	echo ${UNAME_MACHINE}-mingw32
d69bc0f
+	# uname -m includes "-pc" on this system.
d69bc0f
+	echo ${UNAME_MACHINE}-mingw32
d69bc0f
 	exit ;;
d69bc0f
     i*:PW*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-pw32
d69bc0f
 	exit ;;
d69bc0f
-    *:Interix*:[3456]*)
d69bc0f
-    	case ${UNAME_MACHINE} in
d69bc0f
+    *:Interix*:*)
d69bc0f
+	case ${UNAME_MACHINE} in
d69bc0f
 	    x86)
d69bc0f
 		echo i586-pc-interix${UNAME_RELEASE}
d69bc0f
 		exit ;;
d69bc0f
-	    EM64T | authenticamd | genuineintel)
d69bc0f
+	    authenticamd | genuineintel | EM64T)
d69bc0f
 		echo x86_64-unknown-interix${UNAME_RELEASE}
d69bc0f
 		exit ;;
d69bc0f
 	    IA64)
d69bc0f
@@ -829,6 +829,9 @@ EOF
d69bc0f
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
d69bc0f
 	echo i${UNAME_MACHINE}-pc-mks
d69bc0f
 	exit ;;
d69bc0f
+    8664:Windows_NT:*)
d69bc0f
+	echo x86_64-pc-mks
d69bc0f
+	exit ;;
d69bc0f
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
d69bc0f
 	# How do we know it's Interix rather than the generic POSIX subsystem?
d69bc0f
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
d69bc0f
@@ -858,6 +861,27 @@ EOF
d69bc0f
     i*86:Minix:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-minix
d69bc0f
 	exit ;;
d69bc0f
+    aarch64:Linux:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
+    aarch64_be:Linux:*:*)
d69bc0f
+	UNAME_MACHINE=aarch64_be
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
+    alpha:Linux:*:*)
d69bc0f
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
d69bc0f
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
d69bc0f
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
d69bc0f
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
d69bc0f
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
d69bc0f
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
d69bc0f
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
d69bc0f
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
d69bc0f
+	esac
d69bc0f
+	objdump --private-headers /bin/sh | grep -q ld.so.1
d69bc0f
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
d69bc0f
+	exit ;;
d69bc0f
     arm*:Linux:*:*)
d69bc0f
 	eval $set_cc_for_build
d69bc0f
 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
d69bc0f
@@ -865,20 +889,40 @@ EOF
d69bc0f
 	then
d69bc0f
 	    echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	else
d69bc0f
-	    echo ${UNAME_MACHINE}-unknown-linux-gnueabi
d69bc0f
+	    if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
d69bc0f
+		| grep -q __ARM_PCS_VFP
d69bc0f
+	    then
d69bc0f
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabi
d69bc0f
+	    else
d69bc0f
+		echo ${UNAME_MACHINE}-unknown-linux-gnueabihf
d69bc0f
+	    fi
d69bc0f
 	fi
d69bc0f
 	exit ;;
d69bc0f
     avr32*:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     cris:Linux:*:*)
d69bc0f
-	echo cris-axis-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-axis-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     crisv32:Linux:*:*)
d69bc0f
-	echo crisv32-axis-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-axis-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     frv:Linux:*:*)
d69bc0f
-    	echo frv-unknown-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
+    hexagon:Linux:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
+    i*86:Linux:*:*)
d69bc0f
+	LIBC=gnu
d69bc0f
+	eval $set_cc_for_build
d69bc0f
+	sed 's/^	//' << EOF >$dummy.c
d69bc0f
+	#ifdef __dietlibc__
d69bc0f
+	LIBC=dietlibc
d69bc0f
+	#endif
d69bc0f
+EOF
d69bc0f
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'`
d69bc0f
+	echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
d69bc0f
 	exit ;;
d69bc0f
     ia64:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
@@ -889,78 +933,34 @@ EOF
d69bc0f
     m68*:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
-    mips:Linux:*:*)
d69bc0f
-	eval $set_cc_for_build
d69bc0f
-	sed 's/^	//' << EOF >$dummy.c
d69bc0f
-	#undef CPU
d69bc0f
-	#undef mips
d69bc0f
-	#undef mipsel
d69bc0f
-	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
d69bc0f
-	CPU=mipsel
d69bc0f
-	#else
d69bc0f
-	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
d69bc0f
-	CPU=mips
d69bc0f
-	#else
d69bc0f
-	CPU=
d69bc0f
-	#endif
d69bc0f
-	#endif
d69bc0f
-EOF
d69bc0f
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
d69bc0f
-	    /^CPU/{
d69bc0f
-		s: ::g
d69bc0f
-		p
d69bc0f
-	    }'`"
d69bc0f
-	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
d69bc0f
-	;;
d69bc0f
-    mips64:Linux:*:*)
d69bc0f
+    mips:Linux:*:* | mips64:Linux:*:*)
d69bc0f
 	eval $set_cc_for_build
d69bc0f
 	sed 's/^	//' << EOF >$dummy.c
d69bc0f
 	#undef CPU
d69bc0f
-	#undef mips64
d69bc0f
-	#undef mips64el
d69bc0f
+	#undef ${UNAME_MACHINE}
d69bc0f
+	#undef ${UNAME_MACHINE}el
d69bc0f
 	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
d69bc0f
-	CPU=mips64el
d69bc0f
+	CPU=${UNAME_MACHINE}el
d69bc0f
 	#else
d69bc0f
 	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
d69bc0f
-	CPU=mips64
d69bc0f
+	CPU=${UNAME_MACHINE}
d69bc0f
 	#else
d69bc0f
 	CPU=
d69bc0f
 	#endif
d69bc0f
 	#endif
d69bc0f
 EOF
d69bc0f
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
d69bc0f
-	    /^CPU/{
d69bc0f
-		s: ::g
d69bc0f
-		p
d69bc0f
-	    }'`"
d69bc0f
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
d69bc0f
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
d69bc0f
 	;;
d69bc0f
     or32:Linux:*:*)
d69bc0f
-	echo or32-unknown-linux-gnu
d69bc0f
-	exit ;;
d69bc0f
-    ppc:Linux:*:*)
d69bc0f
-	echo powerpc-unknown-linux-gnu
d69bc0f
-	exit ;;
d69bc0f
-    ppc64:Linux:*:*)
d69bc0f
-	echo powerpc64-unknown-linux-gnu
d69bc0f
-	exit ;;
d69bc0f
-    alpha:Linux:*:*)
d69bc0f
-	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
d69bc0f
-	  EV5)   UNAME_MACHINE=alphaev5 ;;
d69bc0f
-	  EV56)  UNAME_MACHINE=alphaev56 ;;
d69bc0f
-	  PCA56) UNAME_MACHINE=alphapca56 ;;
d69bc0f
-	  PCA57) UNAME_MACHINE=alphapca56 ;;
d69bc0f
-	  EV6)   UNAME_MACHINE=alphaev6 ;;
d69bc0f
-	  EV67)  UNAME_MACHINE=alphaev67 ;;
d69bc0f
-	  EV68*) UNAME_MACHINE=alphaev68 ;;
d69bc0f
-        esac
d69bc0f
-	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
d69bc0f
-	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
d69bc0f
-	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     padre:Linux:*:*)
d69bc0f
 	echo sparc-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
d69bc0f
+	echo hppa64-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
     parisc:Linux:*:* | hppa:Linux:*:*)
d69bc0f
 	# Look for CPU level
d69bc0f
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
d69bc0f
@@ -969,14 +969,17 @@ EOF
d69bc0f
 	  *)    echo hppa-unknown-linux-gnu ;;
d69bc0f
 	esac
d69bc0f
 	exit ;;
d69bc0f
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
d69bc0f
-	echo hppa64-unknown-linux-gnu
d69bc0f
+    ppc64:Linux:*:*)
d69bc0f
+	echo powerpc64-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
+    ppc:Linux:*:*)
d69bc0f
+	echo powerpc-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     s390:Linux:*:* | s390x:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-ibm-linux
d69bc0f
 	exit ;;
d69bc0f
     sh64*:Linux:*:*)
d69bc0f
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     sh*:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
@@ -984,75 +987,18 @@ EOF
d69bc0f
     sparc:Linux:*:* | sparc64:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
+    tile*:Linux:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	exit ;;
d69bc0f
     vax:Linux:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-dec-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     x86_64:Linux:*:*)
d69bc0f
-	echo x86_64-unknown-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
     xtensa*:Linux:*:*)
d69bc0f
-    	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
d69bc0f
 	exit ;;
d69bc0f
-    i*86:Linux:*:*)
d69bc0f
-	# The BFD linker knows what the default object file format is, so
d69bc0f
-	# first see if it will tell us. cd to the root directory to prevent
d69bc0f
-	# problems with other programs or directories called `ld' in the path.
d69bc0f
-	# Set LC_ALL=C to ensure ld outputs messages in English.
d69bc0f
-	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
d69bc0f
-			 | sed -ne '/supported targets:/!d
d69bc0f
-				    s/[ 	][ 	]*/ /g
d69bc0f
-				    s/.*supported targets: *//
d69bc0f
-				    s/ .*//
d69bc0f
-				    p'`
d69bc0f
-        case "$ld_supported_targets" in
d69bc0f
-	  elf32-i386)
d69bc0f
-		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
d69bc0f
-		;;
d69bc0f
-	  a.out-i386-linux)
d69bc0f
-		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
d69bc0f
-		exit ;;
d69bc0f
-	  "")
d69bc0f
-		# Either a pre-BFD a.out linker (linux-gnuoldld) or
d69bc0f
-		# one that does not give us useful --help.
d69bc0f
-		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
d69bc0f
-		exit ;;
d69bc0f
-	esac
d69bc0f
-	# Determine whether the default compiler is a.out or elf
d69bc0f
-	eval $set_cc_for_build
d69bc0f
-	sed 's/^	//' << EOF >$dummy.c
d69bc0f
-	#include <features.h>
d69bc0f
-	#ifdef __ELF__
d69bc0f
-	# ifdef __GLIBC__
d69bc0f
-	#  if __GLIBC__ >= 2
d69bc0f
-	LIBC=gnu
d69bc0f
-	#  else
d69bc0f
-	LIBC=gnulibc1
d69bc0f
-	#  endif
d69bc0f
-	# else
d69bc0f
-	LIBC=gnulibc1
d69bc0f
-	# endif
d69bc0f
-	#else
d69bc0f
-	#if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
d69bc0f
-	LIBC=gnu
d69bc0f
-	#else
d69bc0f
-	LIBC=gnuaout
d69bc0f
-	#endif
d69bc0f
-	#endif
d69bc0f
-	#ifdef __dietlibc__
d69bc0f
-	LIBC=dietlibc
d69bc0f
-	#endif
d69bc0f
-EOF
d69bc0f
-	eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
d69bc0f
-	    /^LIBC/{
d69bc0f
-		s: ::g
d69bc0f
-		p
d69bc0f
-	    }'`"
d69bc0f
-	test x"${LIBC}" != x && {
d69bc0f
-		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
d69bc0f
-		exit
d69bc0f
-	}
d69bc0f
-	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
d69bc0f
-	;;
d69bc0f
     i*86:DYNIX/ptx:4*:*)
d69bc0f
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
d69bc0f
 	# earlier versions are messed up and put the nodename in both
d69bc0f
@@ -1060,11 +1006,11 @@ EOF
d69bc0f
 	echo i386-sequent-sysv4
d69bc0f
 	exit ;;
d69bc0f
     i*86:UNIX_SV:4.2MP:2.*)
d69bc0f
-        # Unixware is an offshoot of SVR4, but it has its own version
d69bc0f
-        # number series starting with 2...
d69bc0f
-        # I am not positive that other SVR4 systems won't match this,
d69bc0f
+	# Unixware is an offshoot of SVR4, but it has its own version
d69bc0f
+	# number series starting with 2...
d69bc0f
+	# I am not positive that other SVR4 systems won't match this,
d69bc0f
 	# I just have to hope.  -- rms.
d69bc0f
-        # Use sysv4.2uw... so that sysv4* matches it.
d69bc0f
+	# Use sysv4.2uw... so that sysv4* matches it.
d69bc0f
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
d69bc0f
 	exit ;;
d69bc0f
     i*86:OS/2:*:*)
d69bc0f
@@ -1081,7 +1027,7 @@ EOF
d69bc0f
     i*86:syllable:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-syllable
d69bc0f
 	exit ;;
d69bc0f
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
d69bc0f
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
d69bc0f
 	echo i386-unknown-lynxos${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     i*86:*DOS:*:*)
d69bc0f
@@ -1096,7 +1042,7 @@ EOF
d69bc0f
 	fi
d69bc0f
 	exit ;;
d69bc0f
     i*86:*:5:[678]*)
d69bc0f
-    	# UnixWare 7.x, OpenUNIX and OpenServer 6.
d69bc0f
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
d69bc0f
 	case `/bin/uname -X | grep "^Machine"` in
d69bc0f
 	    *486*)	     UNAME_MACHINE=i486 ;;
d69bc0f
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
d69bc0f
@@ -1124,10 +1070,13 @@ EOF
d69bc0f
 	exit ;;
d69bc0f
     pc:*:*:*)
d69bc0f
 	# Left here for compatibility:
d69bc0f
-        # uname -m prints for DJGPP always 'pc', but it prints nothing about
d69bc0f
-        # the processor, so we play safe by assuming i386.
d69bc0f
-	echo i386-pc-msdosdjgpp
d69bc0f
-        exit ;;
d69bc0f
+	# uname -m prints for DJGPP always 'pc', but it prints nothing about
d69bc0f
+	# the processor, so we play safe by assuming i586.
d69bc0f
+	# Note: whatever this is, it MUST be the same as what config.sub
d69bc0f
+	# prints for the "djgpp" host, or else GDB configury will decide that
d69bc0f
+	# this is a cross-build.
d69bc0f
+	echo i586-pc-msdosdjgpp
d69bc0f
+	exit ;;
d69bc0f
     Intel:Mach:3*:*)
d69bc0f
 	echo i386-pc-mach3
d69bc0f
 	exit ;;
d69bc0f
@@ -1162,8 +1111,18 @@ EOF
d69bc0f
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
d69bc0f
 	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
d69bc0f
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
d69bc0f
-        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
d69bc0f
-          && { echo i486-ncr-sysv4; exit; } ;;
d69bc0f
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
d69bc0f
+	  && { echo i486-ncr-sysv4; exit; } ;;
d69bc0f
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
d69bc0f
+	OS_REL='.3'
d69bc0f
+	test -r /etc/.relid \
d69bc0f
+	    && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
d69bc0f
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
d69bc0f
+	    && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
d69bc0f
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
d69bc0f
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
d69bc0f
+	/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
d69bc0f
+	    && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
d69bc0f
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
d69bc0f
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
@@ -1176,7 +1135,7 @@ EOF
d69bc0f
     rs6000:LynxOS:2.*:*)
d69bc0f
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
d69bc0f
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
d69bc0f
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     SM[BE]S:UNIX_SV:*:*)
d69bc0f
@@ -1196,10 +1155,10 @@ EOF
d69bc0f
 		echo ns32k-sni-sysv
d69bc0f
 	fi
d69bc0f
 	exit ;;
d69bc0f
-    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
d69bc0f
-                      # says <Richard.M.Bartel@ccMail.Census.GOV>
d69bc0f
-        echo i586-unisys-sysv4
d69bc0f
-        exit ;;
d69bc0f
+    PENTIUM:*:4.0*:*)	# Unisys `ClearPath HMP IX 4000' SVR4/MP effort
d69bc0f
+			# says <Richard.M.Bartel@ccMail.Census.GOV>
d69bc0f
+	echo i586-unisys-sysv4
d69bc0f
+	exit ;;
d69bc0f
     *:UNIX_System_V:4*:FTX*)
d69bc0f
 	# From Gerald Hewes <hewes@openmarket.com>.
d69bc0f
 	# How about differentiating between stratus architectures? -djm
d69bc0f
@@ -1225,11 +1184,11 @@ EOF
d69bc0f
 	exit ;;
d69bc0f
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
d69bc0f
 	if [ -d /usr/nec ]; then
d69bc0f
-	        echo mips-nec-sysv${UNAME_RELEASE}
d69bc0f
+		echo mips-nec-sysv${UNAME_RELEASE}
d69bc0f
 	else
d69bc0f
-	        echo mips-unknown-sysv${UNAME_RELEASE}
d69bc0f
+		echo mips-unknown-sysv${UNAME_RELEASE}
d69bc0f
 	fi
d69bc0f
-        exit ;;
d69bc0f
+	exit ;;
d69bc0f
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
d69bc0f
 	echo powerpc-be-beos
d69bc0f
 	exit ;;
d69bc0f
@@ -1269,6 +1228,16 @@ EOF
d69bc0f
     *:Darwin:*:*)
d69bc0f
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
d69bc0f
 	case $UNAME_PROCESSOR in
d69bc0f
+	    i386)
d69bc0f
+		eval $set_cc_for_build
d69bc0f
+		if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
d69bc0f
+		  if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
d69bc0f
+		      (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
d69bc0f
+		      grep IS_64BIT_ARCH >/dev/null
d69bc0f
+		  then
d69bc0f
+		      UNAME_PROCESSOR="x86_64"
d69bc0f
+		  fi
d69bc0f
+		fi ;;
d69bc0f
 	    unknown) UNAME_PROCESSOR=powerpc ;;
d69bc0f
 	esac
d69bc0f
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
d69bc0f
@@ -1284,6 +1253,9 @@ EOF
d69bc0f
     *:QNX:*:4*)
d69bc0f
 	echo i386-pc-qnx
d69bc0f
 	exit ;;
d69bc0f
+    NEO-?:NONSTOP_KERNEL:*:*)
d69bc0f
+	echo neo-tandem-nsk${UNAME_RELEASE}
d69bc0f
+	exit ;;
d69bc0f
     NSE-?:NONSTOP_KERNEL:*:*)
d69bc0f
 	echo nse-tandem-nsk${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
@@ -1329,13 +1301,13 @@ EOF
d69bc0f
 	echo pdp10-unknown-its
d69bc0f
 	exit ;;
d69bc0f
     SEI:*:*:SEIUX)
d69bc0f
-        echo mips-sei-seiux${UNAME_RELEASE}
d69bc0f
+	echo mips-sei-seiux${UNAME_RELEASE}
d69bc0f
 	exit ;;
d69bc0f
     *:DragonFly:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
d69bc0f
 	exit ;;
d69bc0f
     *:*VMS:*:*)
d69bc0f
-    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
d69bc0f
+	UNAME_MACHINE=`(uname -p) 2>/dev/null`
d69bc0f
 	case "${UNAME_MACHINE}" in
d69bc0f
 	    A*) echo alpha-dec-vms ; exit ;;
d69bc0f
 	    I*) echo ia64-dec-vms ; exit ;;
d69bc0f
@@ -1350,6 +1322,12 @@ EOF
d69bc0f
     i*86:rdos:*:*)
d69bc0f
 	echo ${UNAME_MACHINE}-pc-rdos
d69bc0f
 	exit ;;
d69bc0f
+    i*86:AROS:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-pc-aros
d69bc0f
+	exit ;;
d69bc0f
+    x86_64:VMkernel:*:*)
d69bc0f
+	echo ${UNAME_MACHINE}-unknown-esx
d69bc0f
+	exit ;;
d69bc0f
 esac
d69bc0f
 
d69bc0f
 #echo '(No uname command or uname output not recognized.)' 1>&2
d69bc0f
@@ -1372,11 +1350,11 @@ main ()
d69bc0f
 #include <sys/param.h>
d69bc0f
   printf ("m68k-sony-newsos%s\n",
d69bc0f
 #ifdef NEWSOS4
d69bc0f
-          "4"
d69bc0f
+	"4"
d69bc0f
 #else
d69bc0f
-	  ""
d69bc0f
+	""
d69bc0f
 #endif
d69bc0f
-         ); exit (0);
d69bc0f
+	); exit (0);
d69bc0f
 #endif
d69bc0f
 #endif
d69bc0f
 
d69bc0f
diff --git a/configure.ac b/configure.ac
d69bc0f
index 9237c77..8e3d9d2 100644
d69bc0f
--- a/configure.ac
d69bc0f
+++ b/configure.ac
d69bc0f
@@ -210,6 +210,20 @@ AC_CANONICAL_BUILD
d69bc0f
 AC_CANONICAL_HOST
d69bc0f
 AC_CANONICAL_TARGET
d69bc0f
 
d69bc0f
+# Testing ARM ABI
d69bc0f
+# required for code generation (LLVM options)
d69bc0f
+ARM_ABI=SOFT
d69bc0f
+echo HOST: $host
d69bc0f
+
d69bc0f
+case $host in
d69bc0f
+     arm*-*-linux-gnueabihf)
d69bc0f
+     ARM_ABI=HARD
d69bc0f
+     ;;
d69bc0f
+     arm*-*-linux-gnueabi)
d69bc0f
+     ARM_ABI=SOFTFP
d69bc0f
+     ;;
d69bc0f
+esac
d69bc0f
+
d69bc0f
 FPTOOLS_SET_PLATFORM_VARS
d69bc0f
 
d69bc0f
 # Verify that the installed (bootstrap) GHC is capable of generating
d69bc0f
-- 
d69bc0f
1.7.4.3
d69bc0f