1269956Simp/* 2269956Simp * Copyright (c) 2014 ARM Ltd 3269956Simp * All rights reserved. 4269956Simp * 5269956Simp * Redistribution and use in source and binary forms, with or without 6269956Simp * modification, are permitted provided that the following conditions 7269956Simp * are met: 8269956Simp * 1. Redistributions of source code must retain the above copyright 9269956Simp * notice, this list of conditions and the following disclaimer. 10269956Simp * 2. Redistributions in binary form must reproduce the above copyright 11269956Simp * notice, this list of conditions and the following disclaimer in the 12269956Simp * documentation and/or other materials provided with the distribution. 13269956Simp * 3. The name of the company may not be used to endorse or promote 14269956Simp * products derived from this software without specific prior written 15269956Simp * permission. 16269956Simp * 17269956Simp * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED 18269956Simp * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19269956Simp * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 20269956Simp * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 21269956Simp * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 22269956Simp * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 23269956Simp * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 24269956Simp * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 25269956Simp * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 26269956Simp * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27269956Simp * 28269956Simp * $FreeBSD: releng/11.0/sys/arm/include/acle-compat.h 269956 2014-08-14 04:20:13Z imp $ 29269956Simp */ 30269956Simp 31269956Simp#ifndef __ARM_ARCH 32269956Simp 33269956Simp/* ACLE standardises a set of pre-defines that describe the ARM architecture. 34269956Simp These were mostly implemented in GCC around GCC-4.8; older versions 35269956Simp have no, or only partial support. To provide a level of backwards 36269956Simp compatibility we try to work out what the definitions should be, given 37269956Simp the older pre-defines that GCC did produce. This isn't complete, but 38269956Simp it should be enough for use by routines that depend on this header. */ 39269956Simp 40269956Simp/* No need to handle ARMv8, GCC had ACLE support before that. */ 41269956Simp 42269956Simp#define __ARM_ACLE 101 43269956Simp 44269956Simp# ifdef __ARM_ARCH_7__ 45269956Simp/* The common subset of ARMv7 in all profiles. */ 46269956Simp# define __ARM_ARCH 7 47269956Simp# define __ARM_ARCH_ISA_THUMB 2 48269956Simp# define __ARM_FEATURE_CLZ 49269956Simp# define __ARM_FEATURE_LDREX 7 50269956Simp# define __ARM_FEATURE_UNALIGNED 51269956Simp# endif 52269956Simp 53269956Simp# if defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7R__) 54269956Simp# define __ARM_ARCH 7 55269956Simp# define __ARM_ARCH_ISA_THUMB 2 56269956Simp# define __ARM_ARCH_ISA_ARM 57269956Simp# define __ARM_FEATURE_CLZ 58269956Simp# define __ARM_FEATURE_SIMD32 59269956Simp# define __ARM_FEATURE_DSP 60269956Simp# define __ARM_FEATURE_QBIT 61269956Simp# define __ARM_FEATURE_SAT 62269956Simp# define __ARM_FEATURE_LDREX 15 63269956Simp# define __ARM_FEATURE_UNALIGNED 64269956Simp# ifdef __ARM_ARCH_7A__ 65269956Simp# define __ARM_ARCH_PROFILE 'A' 66269956Simp# else 67269956Simp# define __ARM_ARCH_PROFILE 'R' 68269956Simp# endif 69269956Simp# endif 70269956Simp 71269956Simp# ifdef __ARM_ARCH_7EM__ 72269956Simp# define __ARM_ARCH 7 73269956Simp# define __ARM_ARCH_ISA_THUMB 2 74269956Simp# define __ARM_FEATURE_CLZ 75269956Simp# define __ARM_FEATURE_SIMD32 76269956Simp# define __ARM_FEATURE_DSP 77269956Simp# define __ARM_FEATURE_QBIT 78269956Simp# define __ARM_FEATURE_SAT 79269956Simp# define __ARM_FEATURE_LDREX 7 80269956Simp# define __ARM_FEATURE_UNALIGNED 81269956Simp# define __ARM_ARCH_PROFILE 'M' 82269956Simp# endif 83269956Simp 84269956Simp# ifdef __ARM_ARCH_7M__ 85269956Simp# define __ARM_ARCH 7 86269956Simp# define __ARM_ARCH_ISA_THUMB 2 87269956Simp# define __ARM_FEATURE_CLZ 88269956Simp# define __ARM_FEATURE_QBIT 89269956Simp# define __ARM_FEATURE_SAT 90269956Simp# define __ARM_FEATURE_LDREX 7 91269956Simp# define __ARM_FEATURE_UNALIGNED 92269956Simp# define __ARM_ARCH_PROFILE 'M' 93269956Simp# endif 94269956Simp 95269956Simp# ifdef __ARM_ARCH_6T2__ 96269956Simp# define __ARM_ARCH 6 97269956Simp# define __ARM_ARCH_ISA_THUMB 2 98269956Simp# define __ARM_ARCH_ISA_ARM 99269956Simp# define __ARM_FEATURE_CLZ 100269956Simp# define __ARM_FEATURE_SIMD32 101269956Simp# define __ARM_FEATURE_DSP 102269956Simp# define __ARM_FEATURE_QBIT 103269956Simp# define __ARM_FEATURE_SAT 104269956Simp# define __ARM_FEATURE_LDREX 4 105269956Simp# define __ARM_FEATURE_UNALIGNED 106269956Simp# endif 107269956Simp 108269956Simp# ifdef __ARM_ARCH_6M__ 109269956Simp# define __ARM_ARCH 6 110269956Simp# define __ARM_ARCH_ISA_THUMB 1 111269956Simp# define __ARM_ARCH_PROFILE 'M' 112269956Simp# endif 113269956Simp 114269956Simp# if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__) \ 115269956Simp || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6Z__) \ 116269956Simp || defined (__ARM_ARCH_6ZK__) 117269956Simp# define __ARM_ARCH 6 118269956Simp# define __ARM_ARCH_ISA_THUMB 1 119269956Simp# define __ARM_ARCH_ISA_ARM 120269956Simp# define __ARM_FEATURE_CLZ 121269956Simp# define __ARM_FEATURE_SIMD32 122269956Simp# define __ARM_FEATURE_DSP 123269956Simp# define __ARM_FEATURE_QBIT 124269956Simp# define __ARM_FEATURE_SAT 125269956Simp# define __ARM_FEATURE_UNALIGNED 126269956Simp# ifndef __thumb__ 127269956Simp# if defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__) 128269956Simp# define __ARM_FEATURE_LDREX 15 129269956Simp# else 130269956Simp# define __ARM_FEATURE_LDREX 4 131269956Simp# endif 132269956Simp# endif 133269956Simp# endif 134269956Simp 135269956Simp# if defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5E__) 136269956Simp# define __ARM_ARCH 5 137269956Simp# define __ARM_ARCH_ISA_ARM 138269956Simp# ifdef __ARM_ARCH_5TE__ 139269956Simp# define __ARM_ARCH_ISA_THUMB 1 140269956Simp# endif 141269956Simp# define __ARM_FEATURE_CLZ 142269956Simp# define __ARM_FEATURE_DSP 143269956Simp# endif 144269956Simp 145269956Simp# if defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5__) 146269956Simp# define __ARM_ARCH 5 147269956Simp# define __ARM_ARCH_ISA_ARM 148269956Simp# ifdef __ARM_ARCH_5TE__ 149269956Simp# define __ARM_ARCH_ISA_THUMB 1 150269956Simp# endif 151269956Simp# define __ARM_FEATURE_CLZ 152269956Simp# endif 153269956Simp 154269956Simp# ifdef __ARM_ARCH_4T__ 155269956Simp# define __ARM_ARCH 4 156269956Simp# define __ARM_ARCH_ISA_ARM 157269956Simp# define __ARM_ARCH_ISA_THUMB 1 158269956Simp# endif 159269956Simp 160269956Simp# ifdef __ARM_ARCH_4__ 161269956Simp# define __ARM_ARCH 4 162269956Simp# define __ARM_ARCH_ISA_ARM 163269956Simp# endif 164269956Simp 165269956Simp# if defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__) 166269956Simp# define __ARM_ARCH 3 167269956Simp# define __ARM_ARCH_ISA_ARM 168269956Simp# endif 169269956Simp 170269956Simp# ifdef __ARM_ARCH_2__ 171269956Simp# define __ARM_ARCH 2 172269956Simp# define __ARM_ARCH_ISA_ARM 173269956Simp# endif 174269956Simp 175269956Simp# ifdef __ARMEB__ 176269956Simp# define __ARM_BIG_ENDIAN 177269956Simp# endif 178269956Simp 179269956Simp/* If we still don't know what the target architecture is, then we're 180269956Simp probably not using GCC. */ 181269956Simp# ifndef __ARM_ARCH 182269956Simp# error Unable to determine architecture version. 183269956Simp# endif 184269956Simp 185269956Simp#endif /* __ARM_ARCH */ 186