Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 12 Mar 2014 01:09:19 +1300
From:      Andrew Turner <andrew@fubar.geek.nz>
To:        Warner Losh <imp@bsdimp.com>
Cc:        freebsd-arm@freebsd.org
Subject:   Re: Updating the minimum armv6 requirement
Message-ID:  <20140312010919.30e90f96@bender>
In-Reply-To: <E19645D3-0297-4620-91F2-D394117F567C@bsdimp.com>
References:  <20140311131945.01f4c9b2@bender> <E19645D3-0297-4620-91F2-D394117F567C@bsdimp.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Mon, 10 Mar 2014 20:42:38 -0600
Warner Losh <imp@bsdimp.com> wrote:

> 
> On Mar 10, 2014, at 6:19 PM, Andrew Turner <andrew@fubar.geek.nz>
> wrote:
> 
> > I've been looking at code that uses 64-bit C++ atomic operations on
> > armv6. These require the ldrexd and strexd instructions that are
> > present on armv6k.
> > 
> > The problem is there is a mismatch between clang and binutils. Clang
> > thinks armv6k is an arm1136jf-s and sets the cpu in the asm output
> > as one. Binutils will see the cpu and think clang means an earlier
> > armv6 instruction set that lacks the above instructions.
> > 
> > In this case both are correct as prior to the r1p0 release of the
> > arm1136jf-s core it was an armv6 core, and as of the r1p0 release it
> > became an armv6k core.
> > 
> > All of this is uninteresting for FreeBSD as the only ARMv6 SoC we
> > run on appears to be the bcm2835, and maybe some Marvell parts. As
> > the bcm2835 is an arm1176jzf-s and we are unlikely to get a new
> > ARMv6 port I am suggesting we make this the minimum requirement. It
> > appears NetBSD has the same requirement as clang will set the cpu
> > to arm1176jzf-s when building for NetBSD and armv6.
> > 
> > My proposal is to have the same CPU requirement as NetBSD for
> > armv6. Is anyone working on an SoC that would be affected by this?
> 
> I think this is OK. Is there some way to make the new requirement a
> compile time error, or kernel-time panic?

I don't think there is any way. On further investigation it appears all
this would change is to update clang to generate for the same
architecture variant as gcc. As far as I can tell there are no
instruction differences between the arm1136 r1p0 and the arm1176, they
are both armv6k cores. The additions the  arm1176 bring are in other
areas, e.g. adding TrustZone.

In gcc we target armv6k as the base instruction set.

Andrew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20140312010919.30e90f96>