[PATCH] add better support for Raspberry Pi board

Simon Marlow marlowsd at gmail.com
Fri Jan 25 21:38:37 CET 2013


This would improve things for RPi, but we shouldn't be guessing here. 
gcc has predefines for the appropriate features:

#define __ARM_PCS_VFP 1

indicates hard-float ABI, and

#define __VFP_FP__ 1

indicates VFP presences (2 or 3? I don't know)

Cheers,
	Simon

On 25/01/13 15:56, Karel Gardas wrote:
> This patch adds support for Raspberry Pi board. The board is based
> on Broadcom BCM2835, which includes ARM1176JZF-S CPU core. The core
> is classical ARM11 so implementing ARMv6 ISA, but also provides VFPv2 FPU
> unit. As this looks like fairly popular hardware, in this patch we assume
> detected ARMv6 hardware to support VFPv2. Also as Raspberry Pi is very commonly
> used with hard-float ABI Linux distribution, the patch relaxes a condition
> of "hard-float support for ARMv7 only" to any general ARM core.
> ---
>   aclocal.m4                      |    2 +-
>   compiler/main/DriverPipeline.hs |    9 ++++++---
>   2 files changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/aclocal.m4 b/aclocal.m4
> index edbe389..b23568f 100644
> --- a/aclocal.m4
> +++ b/aclocal.m4
> @@ -369,7 +369,7 @@ AC_DEFUN([GET_ARM_ISA],
>                   [AC_DEFINE(arm_HOST_ARCH_PRE_ARMv7, 1, [ARM pre v7])
>                    changequote(, )dnl
>                    ARM_ISA=ARMv6
> -                 ARM_ISA_EXT="[]"
> +                 ARM_ISA_EXT="[VFPv2]"
>                    changequote([, ])dnl
>                   ],
>                   [changequote(, )dnl
> diff --git a/compiler/main/DriverPipeline.hs b/compiler/main/DriverPipeline.hs
> index c24bb51..81d0bc0 100644
> --- a/compiler/main/DriverPipeline.hs
> +++ b/compiler/main/DriverPipeline.hs
> @@ -1454,14 +1454,17 @@ runPhase LlvmLlc input_fn dflags
>                                         else if (elem VFPv3D16 ext)
>                                              then ["-mattr=+v7,+vfp3,+d16"]
>                                              else []
> +                   ArchARM ARMv6 ext _ -> if (elem VFPv2 ext)
> +                                          then ["-mattr=+v6,+vfp2"]
> +                                          else ["-mattr=+v6"]
>                      _                 -> []
>           -- On Ubuntu/Debian with ARM hard float ABI, LLVM's llc still
>           -- compiles into soft-float ABI. We need to explicitly set abi
>           -- to hard
>           abiOpts = case platformArch (targetPlatform dflags) of
> -                    ArchARM ARMv7 _ HARD -> ["-float-abi=hard"]
> -                    ArchARM ARMv7 _ _    -> []
> -                    _                    -> []
> +                    ArchARM _ _ HARD -> ["-float-abi=hard"]
> +                    ArchARM _ _ _    -> []
> +                    _                -> []
>
>           sseOpts | isSse4_2Enabled dflags = ["-mattr=+sse42"]
>                   | isSse2Enabled dflags   = ["-mattr=+sse2"]
>




More information about the ghc-devs mailing list