The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Fri May 26 12:30:20 2017 +0100
Revision:
143:86740a56073b
Parent:
142:4eea097334d6
Release 143 of the mbed library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anna Bridge 142:4eea097334d6 1 /**************************************************************************//**
Anna Bridge 142:4eea097334d6 2 * @file core_cmSimd.h
Anna Bridge 142:4eea097334d6 3 * @brief CMSIS Cortex-M SIMD Header File
Anna Bridge 142:4eea097334d6 4 * @version V4.10
Anna Bridge 142:4eea097334d6 5 * @date 18. March 2015
Anna Bridge 142:4eea097334d6 6 *
Anna Bridge 142:4eea097334d6 7 * @note
Anna Bridge 142:4eea097334d6 8 *
Anna Bridge 142:4eea097334d6 9 ******************************************************************************/
Anna Bridge 142:4eea097334d6 10 /* Copyright (c) 2009 - 2014 ARM LIMITED
Anna Bridge 142:4eea097334d6 11
Anna Bridge 142:4eea097334d6 12 All rights reserved.
Anna Bridge 142:4eea097334d6 13 Redistribution and use in source and binary forms, with or without
Anna Bridge 142:4eea097334d6 14 modification, are permitted provided that the following conditions are met:
Anna Bridge 142:4eea097334d6 15 - Redistributions of source code must retain the above copyright
Anna Bridge 142:4eea097334d6 16 notice, this list of conditions and the following disclaimer.
Anna Bridge 142:4eea097334d6 17 - Redistributions in binary form must reproduce the above copyright
Anna Bridge 142:4eea097334d6 18 notice, this list of conditions and the following disclaimer in the
Anna Bridge 142:4eea097334d6 19 documentation and/or other materials provided with the distribution.
Anna Bridge 142:4eea097334d6 20 - Neither the name of ARM nor the names of its contributors may be used
Anna Bridge 142:4eea097334d6 21 to endorse or promote products derived from this software without
Anna Bridge 142:4eea097334d6 22 specific prior written permission.
Anna Bridge 142:4eea097334d6 23 *
Anna Bridge 142:4eea097334d6 24 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
Anna Bridge 142:4eea097334d6 25 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Anna Bridge 142:4eea097334d6 26 IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Anna Bridge 142:4eea097334d6 27 ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
Anna Bridge 142:4eea097334d6 28 LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
Anna Bridge 142:4eea097334d6 29 CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
Anna Bridge 142:4eea097334d6 30 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
Anna Bridge 142:4eea097334d6 31 INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
Anna Bridge 142:4eea097334d6 32 CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
Anna Bridge 142:4eea097334d6 33 ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
Anna Bridge 142:4eea097334d6 34 POSSIBILITY OF SUCH DAMAGE.
Anna Bridge 142:4eea097334d6 35 ---------------------------------------------------------------------------*/
Anna Bridge 142:4eea097334d6 36
Anna Bridge 142:4eea097334d6 37
Anna Bridge 142:4eea097334d6 38 #if defined ( __ICCARM__ )
Anna Bridge 142:4eea097334d6 39 #pragma system_include /* treat file as system include file for MISRA check */
Anna Bridge 142:4eea097334d6 40 #endif
Anna Bridge 142:4eea097334d6 41
Anna Bridge 142:4eea097334d6 42 #ifndef __CORE_CMSIMD_H
Anna Bridge 142:4eea097334d6 43 #define __CORE_CMSIMD_H
Anna Bridge 142:4eea097334d6 44
Anna Bridge 142:4eea097334d6 45 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 46 extern "C" {
Anna Bridge 142:4eea097334d6 47 #endif
Anna Bridge 142:4eea097334d6 48
Anna Bridge 142:4eea097334d6 49
Anna Bridge 142:4eea097334d6 50 /*******************************************************************************
Anna Bridge 142:4eea097334d6 51 * Hardware Abstraction Layer
Anna Bridge 142:4eea097334d6 52 ******************************************************************************/
Anna Bridge 142:4eea097334d6 53
Anna Bridge 142:4eea097334d6 54
Anna Bridge 142:4eea097334d6 55 /* ################### Compiler specific Intrinsics ########################### */
Anna Bridge 142:4eea097334d6 56 /** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics
Anna Bridge 142:4eea097334d6 57 Access to dedicated SIMD instructions
Anna Bridge 142:4eea097334d6 58 @{
Anna Bridge 142:4eea097334d6 59 */
Anna Bridge 142:4eea097334d6 60
Anna Bridge 142:4eea097334d6 61 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
Anna Bridge 142:4eea097334d6 62 /* ARM armcc specific functions */
Anna Bridge 142:4eea097334d6 63 #define __SADD8 __sadd8
Anna Bridge 142:4eea097334d6 64 #define __QADD8 __qadd8
Anna Bridge 142:4eea097334d6 65 #define __SHADD8 __shadd8
Anna Bridge 142:4eea097334d6 66 #define __UADD8 __uadd8
Anna Bridge 142:4eea097334d6 67 #define __UQADD8 __uqadd8
Anna Bridge 142:4eea097334d6 68 #define __UHADD8 __uhadd8
Anna Bridge 142:4eea097334d6 69 #define __SSUB8 __ssub8
Anna Bridge 142:4eea097334d6 70 #define __QSUB8 __qsub8
Anna Bridge 142:4eea097334d6 71 #define __SHSUB8 __shsub8
Anna Bridge 142:4eea097334d6 72 #define __USUB8 __usub8
Anna Bridge 142:4eea097334d6 73 #define __UQSUB8 __uqsub8
Anna Bridge 142:4eea097334d6 74 #define __UHSUB8 __uhsub8
Anna Bridge 142:4eea097334d6 75 #define __SADD16 __sadd16
Anna Bridge 142:4eea097334d6 76 #define __QADD16 __qadd16
Anna Bridge 142:4eea097334d6 77 #define __SHADD16 __shadd16
Anna Bridge 142:4eea097334d6 78 #define __UADD16 __uadd16
Anna Bridge 142:4eea097334d6 79 #define __UQADD16 __uqadd16
Anna Bridge 142:4eea097334d6 80 #define __UHADD16 __uhadd16
Anna Bridge 142:4eea097334d6 81 #define __SSUB16 __ssub16
Anna Bridge 142:4eea097334d6 82 #define __QSUB16 __qsub16
Anna Bridge 142:4eea097334d6 83 #define __SHSUB16 __shsub16
Anna Bridge 142:4eea097334d6 84 #define __USUB16 __usub16
Anna Bridge 142:4eea097334d6 85 #define __UQSUB16 __uqsub16
Anna Bridge 142:4eea097334d6 86 #define __UHSUB16 __uhsub16
Anna Bridge 142:4eea097334d6 87 #define __SASX __sasx
Anna Bridge 142:4eea097334d6 88 #define __QASX __qasx
Anna Bridge 142:4eea097334d6 89 #define __SHASX __shasx
Anna Bridge 142:4eea097334d6 90 #define __UASX __uasx
Anna Bridge 142:4eea097334d6 91 #define __UQASX __uqasx
Anna Bridge 142:4eea097334d6 92 #define __UHASX __uhasx
Anna Bridge 142:4eea097334d6 93 #define __SSAX __ssax
Anna Bridge 142:4eea097334d6 94 #define __QSAX __qsax
Anna Bridge 142:4eea097334d6 95 #define __SHSAX __shsax
Anna Bridge 142:4eea097334d6 96 #define __USAX __usax
Anna Bridge 142:4eea097334d6 97 #define __UQSAX __uqsax
Anna Bridge 142:4eea097334d6 98 #define __UHSAX __uhsax
Anna Bridge 142:4eea097334d6 99 #define __USAD8 __usad8
Anna Bridge 142:4eea097334d6 100 #define __USADA8 __usada8
Anna Bridge 142:4eea097334d6 101 #define __SSAT16 __ssat16
Anna Bridge 142:4eea097334d6 102 #define __USAT16 __usat16
Anna Bridge 142:4eea097334d6 103 #define __UXTB16 __uxtb16
Anna Bridge 142:4eea097334d6 104 #define __UXTAB16 __uxtab16
Anna Bridge 142:4eea097334d6 105 #define __SXTB16 __sxtb16
Anna Bridge 142:4eea097334d6 106 #define __SXTAB16 __sxtab16
Anna Bridge 142:4eea097334d6 107 #define __SMUAD __smuad
Anna Bridge 142:4eea097334d6 108 #define __SMUADX __smuadx
Anna Bridge 142:4eea097334d6 109 #define __SMLAD __smlad
Anna Bridge 142:4eea097334d6 110 #define __SMLADX __smladx
Anna Bridge 142:4eea097334d6 111 #define __SMLALD __smlald
Anna Bridge 142:4eea097334d6 112 #define __SMLALDX __smlaldx
Anna Bridge 142:4eea097334d6 113 #define __SMUSD __smusd
Anna Bridge 142:4eea097334d6 114 #define __SMUSDX __smusdx
Anna Bridge 142:4eea097334d6 115 #define __SMLSD __smlsd
Anna Bridge 142:4eea097334d6 116 #define __SMLSDX __smlsdx
Anna Bridge 142:4eea097334d6 117 #define __SMLSLD __smlsld
Anna Bridge 142:4eea097334d6 118 #define __SMLSLDX __smlsldx
Anna Bridge 142:4eea097334d6 119 #define __SEL __sel
Anna Bridge 142:4eea097334d6 120 #define __QADD __qadd
Anna Bridge 142:4eea097334d6 121 #define __QSUB __qsub
Anna Bridge 142:4eea097334d6 122
Anna Bridge 142:4eea097334d6 123 #define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \
Anna Bridge 142:4eea097334d6 124 ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) )
Anna Bridge 142:4eea097334d6 125
Anna Bridge 142:4eea097334d6 126 #define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \
Anna Bridge 142:4eea097334d6 127 ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) )
Anna Bridge 142:4eea097334d6 128
Anna Bridge 142:4eea097334d6 129 #define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \
Anna Bridge 142:4eea097334d6 130 ((int64_t)(ARG3) << 32) ) >> 32))
Anna Bridge 142:4eea097334d6 131
Anna Bridge 142:4eea097334d6 132
Anna Bridge 142:4eea097334d6 133 #elif defined ( __GNUC__ ) /*------------------ GNU Compiler ---------------------*/
Anna Bridge 142:4eea097334d6 134 /* GNU gcc specific functions */
Anna Bridge 142:4eea097334d6 135 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 136 {
Anna Bridge 142:4eea097334d6 137 uint32_t result;
Anna Bridge 142:4eea097334d6 138
Anna Bridge 142:4eea097334d6 139 __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 140 return(result);
Anna Bridge 142:4eea097334d6 141 }
Anna Bridge 142:4eea097334d6 142
Anna Bridge 142:4eea097334d6 143 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 144 {
Anna Bridge 142:4eea097334d6 145 uint32_t result;
Anna Bridge 142:4eea097334d6 146
Anna Bridge 142:4eea097334d6 147 __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 148 return(result);
Anna Bridge 142:4eea097334d6 149 }
Anna Bridge 142:4eea097334d6 150
Anna Bridge 142:4eea097334d6 151 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 152 {
Anna Bridge 142:4eea097334d6 153 uint32_t result;
Anna Bridge 142:4eea097334d6 154
Anna Bridge 142:4eea097334d6 155 __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 156 return(result);
Anna Bridge 142:4eea097334d6 157 }
Anna Bridge 142:4eea097334d6 158
Anna Bridge 142:4eea097334d6 159 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 160 {
Anna Bridge 142:4eea097334d6 161 uint32_t result;
Anna Bridge 142:4eea097334d6 162
Anna Bridge 142:4eea097334d6 163 __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 164 return(result);
Anna Bridge 142:4eea097334d6 165 }
Anna Bridge 142:4eea097334d6 166
Anna Bridge 142:4eea097334d6 167 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 168 {
Anna Bridge 142:4eea097334d6 169 uint32_t result;
Anna Bridge 142:4eea097334d6 170
Anna Bridge 142:4eea097334d6 171 __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 172 return(result);
Anna Bridge 142:4eea097334d6 173 }
Anna Bridge 142:4eea097334d6 174
Anna Bridge 142:4eea097334d6 175 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 176 {
Anna Bridge 142:4eea097334d6 177 uint32_t result;
Anna Bridge 142:4eea097334d6 178
Anna Bridge 142:4eea097334d6 179 __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 180 return(result);
Anna Bridge 142:4eea097334d6 181 }
Anna Bridge 142:4eea097334d6 182
Anna Bridge 142:4eea097334d6 183
Anna Bridge 142:4eea097334d6 184 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 185 {
Anna Bridge 142:4eea097334d6 186 uint32_t result;
Anna Bridge 142:4eea097334d6 187
Anna Bridge 142:4eea097334d6 188 __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 189 return(result);
Anna Bridge 142:4eea097334d6 190 }
Anna Bridge 142:4eea097334d6 191
Anna Bridge 142:4eea097334d6 192 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 193 {
Anna Bridge 142:4eea097334d6 194 uint32_t result;
Anna Bridge 142:4eea097334d6 195
Anna Bridge 142:4eea097334d6 196 __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 197 return(result);
Anna Bridge 142:4eea097334d6 198 }
Anna Bridge 142:4eea097334d6 199
Anna Bridge 142:4eea097334d6 200 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 201 {
Anna Bridge 142:4eea097334d6 202 uint32_t result;
Anna Bridge 142:4eea097334d6 203
Anna Bridge 142:4eea097334d6 204 __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 205 return(result);
Anna Bridge 142:4eea097334d6 206 }
Anna Bridge 142:4eea097334d6 207
Anna Bridge 142:4eea097334d6 208 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 209 {
Anna Bridge 142:4eea097334d6 210 uint32_t result;
Anna Bridge 142:4eea097334d6 211
Anna Bridge 142:4eea097334d6 212 __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 213 return(result);
Anna Bridge 142:4eea097334d6 214 }
Anna Bridge 142:4eea097334d6 215
Anna Bridge 142:4eea097334d6 216 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 217 {
Anna Bridge 142:4eea097334d6 218 uint32_t result;
Anna Bridge 142:4eea097334d6 219
Anna Bridge 142:4eea097334d6 220 __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 221 return(result);
Anna Bridge 142:4eea097334d6 222 }
Anna Bridge 142:4eea097334d6 223
Anna Bridge 142:4eea097334d6 224 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 225 {
Anna Bridge 142:4eea097334d6 226 uint32_t result;
Anna Bridge 142:4eea097334d6 227
Anna Bridge 142:4eea097334d6 228 __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 229 return(result);
Anna Bridge 142:4eea097334d6 230 }
Anna Bridge 142:4eea097334d6 231
Anna Bridge 142:4eea097334d6 232
Anna Bridge 142:4eea097334d6 233 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 234 {
Anna Bridge 142:4eea097334d6 235 uint32_t result;
Anna Bridge 142:4eea097334d6 236
Anna Bridge 142:4eea097334d6 237 __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 238 return(result);
Anna Bridge 142:4eea097334d6 239 }
Anna Bridge 142:4eea097334d6 240
Anna Bridge 142:4eea097334d6 241 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 242 {
Anna Bridge 142:4eea097334d6 243 uint32_t result;
Anna Bridge 142:4eea097334d6 244
Anna Bridge 142:4eea097334d6 245 __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 246 return(result);
Anna Bridge 142:4eea097334d6 247 }
Anna Bridge 142:4eea097334d6 248
Anna Bridge 142:4eea097334d6 249 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 250 {
Anna Bridge 142:4eea097334d6 251 uint32_t result;
Anna Bridge 142:4eea097334d6 252
Anna Bridge 142:4eea097334d6 253 __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 254 return(result);
Anna Bridge 142:4eea097334d6 255 }
Anna Bridge 142:4eea097334d6 256
Anna Bridge 142:4eea097334d6 257 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 258 {
Anna Bridge 142:4eea097334d6 259 uint32_t result;
Anna Bridge 142:4eea097334d6 260
Anna Bridge 142:4eea097334d6 261 __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 262 return(result);
Anna Bridge 142:4eea097334d6 263 }
Anna Bridge 142:4eea097334d6 264
Anna Bridge 142:4eea097334d6 265 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 266 {
Anna Bridge 142:4eea097334d6 267 uint32_t result;
Anna Bridge 142:4eea097334d6 268
Anna Bridge 142:4eea097334d6 269 __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 270 return(result);
Anna Bridge 142:4eea097334d6 271 }
Anna Bridge 142:4eea097334d6 272
Anna Bridge 142:4eea097334d6 273 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 274 {
Anna Bridge 142:4eea097334d6 275 uint32_t result;
Anna Bridge 142:4eea097334d6 276
Anna Bridge 142:4eea097334d6 277 __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 278 return(result);
Anna Bridge 142:4eea097334d6 279 }
Anna Bridge 142:4eea097334d6 280
Anna Bridge 142:4eea097334d6 281 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 282 {
Anna Bridge 142:4eea097334d6 283 uint32_t result;
Anna Bridge 142:4eea097334d6 284
Anna Bridge 142:4eea097334d6 285 __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 286 return(result);
Anna Bridge 142:4eea097334d6 287 }
Anna Bridge 142:4eea097334d6 288
Anna Bridge 142:4eea097334d6 289 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 290 {
Anna Bridge 142:4eea097334d6 291 uint32_t result;
Anna Bridge 142:4eea097334d6 292
Anna Bridge 142:4eea097334d6 293 __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 294 return(result);
Anna Bridge 142:4eea097334d6 295 }
Anna Bridge 142:4eea097334d6 296
Anna Bridge 142:4eea097334d6 297 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 298 {
Anna Bridge 142:4eea097334d6 299 uint32_t result;
Anna Bridge 142:4eea097334d6 300
Anna Bridge 142:4eea097334d6 301 __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 302 return(result);
Anna Bridge 142:4eea097334d6 303 }
Anna Bridge 142:4eea097334d6 304
Anna Bridge 142:4eea097334d6 305 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 306 {
Anna Bridge 142:4eea097334d6 307 uint32_t result;
Anna Bridge 142:4eea097334d6 308
Anna Bridge 142:4eea097334d6 309 __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 310 return(result);
Anna Bridge 142:4eea097334d6 311 }
Anna Bridge 142:4eea097334d6 312
Anna Bridge 142:4eea097334d6 313 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 314 {
Anna Bridge 142:4eea097334d6 315 uint32_t result;
Anna Bridge 142:4eea097334d6 316
Anna Bridge 142:4eea097334d6 317 __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 318 return(result);
Anna Bridge 142:4eea097334d6 319 }
Anna Bridge 142:4eea097334d6 320
Anna Bridge 142:4eea097334d6 321 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 322 {
Anna Bridge 142:4eea097334d6 323 uint32_t result;
Anna Bridge 142:4eea097334d6 324
Anna Bridge 142:4eea097334d6 325 __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 326 return(result);
Anna Bridge 142:4eea097334d6 327 }
Anna Bridge 142:4eea097334d6 328
Anna Bridge 142:4eea097334d6 329 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 330 {
Anna Bridge 142:4eea097334d6 331 uint32_t result;
Anna Bridge 142:4eea097334d6 332
Anna Bridge 142:4eea097334d6 333 __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 334 return(result);
Anna Bridge 142:4eea097334d6 335 }
Anna Bridge 142:4eea097334d6 336
Anna Bridge 142:4eea097334d6 337 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 338 {
Anna Bridge 142:4eea097334d6 339 uint32_t result;
Anna Bridge 142:4eea097334d6 340
Anna Bridge 142:4eea097334d6 341 __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 342 return(result);
Anna Bridge 142:4eea097334d6 343 }
Anna Bridge 142:4eea097334d6 344
Anna Bridge 142:4eea097334d6 345 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 346 {
Anna Bridge 142:4eea097334d6 347 uint32_t result;
Anna Bridge 142:4eea097334d6 348
Anna Bridge 142:4eea097334d6 349 __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 350 return(result);
Anna Bridge 142:4eea097334d6 351 }
Anna Bridge 142:4eea097334d6 352
Anna Bridge 142:4eea097334d6 353 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 354 {
Anna Bridge 142:4eea097334d6 355 uint32_t result;
Anna Bridge 142:4eea097334d6 356
Anna Bridge 142:4eea097334d6 357 __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 358 return(result);
Anna Bridge 142:4eea097334d6 359 }
Anna Bridge 142:4eea097334d6 360
Anna Bridge 142:4eea097334d6 361 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 362 {
Anna Bridge 142:4eea097334d6 363 uint32_t result;
Anna Bridge 142:4eea097334d6 364
Anna Bridge 142:4eea097334d6 365 __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 366 return(result);
Anna Bridge 142:4eea097334d6 367 }
Anna Bridge 142:4eea097334d6 368
Anna Bridge 142:4eea097334d6 369 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHASX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 370 {
Anna Bridge 142:4eea097334d6 371 uint32_t result;
Anna Bridge 142:4eea097334d6 372
Anna Bridge 142:4eea097334d6 373 __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 374 return(result);
Anna Bridge 142:4eea097334d6 375 }
Anna Bridge 142:4eea097334d6 376
Anna Bridge 142:4eea097334d6 377 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SSAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 378 {
Anna Bridge 142:4eea097334d6 379 uint32_t result;
Anna Bridge 142:4eea097334d6 380
Anna Bridge 142:4eea097334d6 381 __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 382 return(result);
Anna Bridge 142:4eea097334d6 383 }
Anna Bridge 142:4eea097334d6 384
Anna Bridge 142:4eea097334d6 385 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 386 {
Anna Bridge 142:4eea097334d6 387 uint32_t result;
Anna Bridge 142:4eea097334d6 388
Anna Bridge 142:4eea097334d6 389 __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 390 return(result);
Anna Bridge 142:4eea097334d6 391 }
Anna Bridge 142:4eea097334d6 392
Anna Bridge 142:4eea097334d6 393 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 394 {
Anna Bridge 142:4eea097334d6 395 uint32_t result;
Anna Bridge 142:4eea097334d6 396
Anna Bridge 142:4eea097334d6 397 __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 398 return(result);
Anna Bridge 142:4eea097334d6 399 }
Anna Bridge 142:4eea097334d6 400
Anna Bridge 142:4eea097334d6 401 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 402 {
Anna Bridge 142:4eea097334d6 403 uint32_t result;
Anna Bridge 142:4eea097334d6 404
Anna Bridge 142:4eea097334d6 405 __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 406 return(result);
Anna Bridge 142:4eea097334d6 407 }
Anna Bridge 142:4eea097334d6 408
Anna Bridge 142:4eea097334d6 409 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 410 {
Anna Bridge 142:4eea097334d6 411 uint32_t result;
Anna Bridge 142:4eea097334d6 412
Anna Bridge 142:4eea097334d6 413 __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 414 return(result);
Anna Bridge 142:4eea097334d6 415 }
Anna Bridge 142:4eea097334d6 416
Anna Bridge 142:4eea097334d6 417 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 418 {
Anna Bridge 142:4eea097334d6 419 uint32_t result;
Anna Bridge 142:4eea097334d6 420
Anna Bridge 142:4eea097334d6 421 __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 422 return(result);
Anna Bridge 142:4eea097334d6 423 }
Anna Bridge 142:4eea097334d6 424
Anna Bridge 142:4eea097334d6 425 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USAD8(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 426 {
Anna Bridge 142:4eea097334d6 427 uint32_t result;
Anna Bridge 142:4eea097334d6 428
Anna Bridge 142:4eea097334d6 429 __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 430 return(result);
Anna Bridge 142:4eea097334d6 431 }
Anna Bridge 142:4eea097334d6 432
Anna Bridge 142:4eea097334d6 433 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3)
Anna Bridge 142:4eea097334d6 434 {
Anna Bridge 142:4eea097334d6 435 uint32_t result;
Anna Bridge 142:4eea097334d6 436
Anna Bridge 142:4eea097334d6 437 __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 438 return(result);
Anna Bridge 142:4eea097334d6 439 }
Anna Bridge 142:4eea097334d6 440
Anna Bridge 142:4eea097334d6 441 #define __SSAT16(ARG1,ARG2) \
Anna Bridge 142:4eea097334d6 442 ({ \
Anna Bridge 142:4eea097334d6 443 uint32_t __RES, __ARG1 = (ARG1); \
Anna Bridge 142:4eea097334d6 444 __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
Anna Bridge 142:4eea097334d6 445 __RES; \
Anna Bridge 142:4eea097334d6 446 })
Anna Bridge 142:4eea097334d6 447
Anna Bridge 142:4eea097334d6 448 #define __USAT16(ARG1,ARG2) \
Anna Bridge 142:4eea097334d6 449 ({ \
Anna Bridge 142:4eea097334d6 450 uint32_t __RES, __ARG1 = (ARG1); \
Anna Bridge 142:4eea097334d6 451 __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \
Anna Bridge 142:4eea097334d6 452 __RES; \
Anna Bridge 142:4eea097334d6 453 })
Anna Bridge 142:4eea097334d6 454
Anna Bridge 142:4eea097334d6 455 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTB16(uint32_t op1)
Anna Bridge 142:4eea097334d6 456 {
Anna Bridge 142:4eea097334d6 457 uint32_t result;
Anna Bridge 142:4eea097334d6 458
Anna Bridge 142:4eea097334d6 459 __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1));
Anna Bridge 142:4eea097334d6 460 return(result);
Anna Bridge 142:4eea097334d6 461 }
Anna Bridge 142:4eea097334d6 462
Anna Bridge 142:4eea097334d6 463 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 464 {
Anna Bridge 142:4eea097334d6 465 uint32_t result;
Anna Bridge 142:4eea097334d6 466
Anna Bridge 142:4eea097334d6 467 __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 468 return(result);
Anna Bridge 142:4eea097334d6 469 }
Anna Bridge 142:4eea097334d6 470
Anna Bridge 142:4eea097334d6 471 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTB16(uint32_t op1)
Anna Bridge 142:4eea097334d6 472 {
Anna Bridge 142:4eea097334d6 473 uint32_t result;
Anna Bridge 142:4eea097334d6 474
Anna Bridge 142:4eea097334d6 475 __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1));
Anna Bridge 142:4eea097334d6 476 return(result);
Anna Bridge 142:4eea097334d6 477 }
Anna Bridge 142:4eea097334d6 478
Anna Bridge 142:4eea097334d6 479 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 480 {
Anna Bridge 142:4eea097334d6 481 uint32_t result;
Anna Bridge 142:4eea097334d6 482
Anna Bridge 142:4eea097334d6 483 __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 484 return(result);
Anna Bridge 142:4eea097334d6 485 }
Anna Bridge 142:4eea097334d6 486
Anna Bridge 142:4eea097334d6 487 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 488 {
Anna Bridge 142:4eea097334d6 489 uint32_t result;
Anna Bridge 142:4eea097334d6 490
Anna Bridge 142:4eea097334d6 491 __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 492 return(result);
Anna Bridge 142:4eea097334d6 493 }
Anna Bridge 142:4eea097334d6 494
Anna Bridge 142:4eea097334d6 495 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 496 {
Anna Bridge 142:4eea097334d6 497 uint32_t result;
Anna Bridge 142:4eea097334d6 498
Anna Bridge 142:4eea097334d6 499 __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 500 return(result);
Anna Bridge 142:4eea097334d6 501 }
Anna Bridge 142:4eea097334d6 502
Anna Bridge 142:4eea097334d6 503 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3)
Anna Bridge 142:4eea097334d6 504 {
Anna Bridge 142:4eea097334d6 505 uint32_t result;
Anna Bridge 142:4eea097334d6 506
Anna Bridge 142:4eea097334d6 507 __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 508 return(result);
Anna Bridge 142:4eea097334d6 509 }
Anna Bridge 142:4eea097334d6 510
Anna Bridge 142:4eea097334d6 511 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3)
Anna Bridge 142:4eea097334d6 512 {
Anna Bridge 142:4eea097334d6 513 uint32_t result;
Anna Bridge 142:4eea097334d6 514
Anna Bridge 142:4eea097334d6 515 __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 516 return(result);
Anna Bridge 142:4eea097334d6 517 }
Anna Bridge 142:4eea097334d6 518
Anna Bridge 142:4eea097334d6 519 __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc)
Anna Bridge 142:4eea097334d6 520 {
Anna Bridge 142:4eea097334d6 521 union llreg_u{
Anna Bridge 142:4eea097334d6 522 uint32_t w32[2];
Anna Bridge 142:4eea097334d6 523 uint64_t w64;
Anna Bridge 142:4eea097334d6 524 } llr;
Anna Bridge 142:4eea097334d6 525 llr.w64 = acc;
Anna Bridge 142:4eea097334d6 526
Anna Bridge 142:4eea097334d6 527 #ifndef __ARMEB__ // Little endian
Anna Bridge 142:4eea097334d6 528 __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
Anna Bridge 142:4eea097334d6 529 #else // Big endian
Anna Bridge 142:4eea097334d6 530 __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
Anna Bridge 142:4eea097334d6 531 #endif
Anna Bridge 142:4eea097334d6 532
Anna Bridge 142:4eea097334d6 533 return(llr.w64);
Anna Bridge 142:4eea097334d6 534 }
Anna Bridge 142:4eea097334d6 535
Anna Bridge 142:4eea097334d6 536 __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc)
Anna Bridge 142:4eea097334d6 537 {
Anna Bridge 142:4eea097334d6 538 union llreg_u{
Anna Bridge 142:4eea097334d6 539 uint32_t w32[2];
Anna Bridge 142:4eea097334d6 540 uint64_t w64;
Anna Bridge 142:4eea097334d6 541 } llr;
Anna Bridge 142:4eea097334d6 542 llr.w64 = acc;
Anna Bridge 142:4eea097334d6 543
Anna Bridge 142:4eea097334d6 544 #ifndef __ARMEB__ // Little endian
Anna Bridge 142:4eea097334d6 545 __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
Anna Bridge 142:4eea097334d6 546 #else // Big endian
Anna Bridge 142:4eea097334d6 547 __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
Anna Bridge 142:4eea097334d6 548 #endif
Anna Bridge 142:4eea097334d6 549
Anna Bridge 142:4eea097334d6 550 return(llr.w64);
Anna Bridge 142:4eea097334d6 551 }
Anna Bridge 142:4eea097334d6 552
Anna Bridge 142:4eea097334d6 553 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 554 {
Anna Bridge 142:4eea097334d6 555 uint32_t result;
Anna Bridge 142:4eea097334d6 556
Anna Bridge 142:4eea097334d6 557 __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 558 return(result);
Anna Bridge 142:4eea097334d6 559 }
Anna Bridge 142:4eea097334d6 560
Anna Bridge 142:4eea097334d6 561 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 562 {
Anna Bridge 142:4eea097334d6 563 uint32_t result;
Anna Bridge 142:4eea097334d6 564
Anna Bridge 142:4eea097334d6 565 __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 566 return(result);
Anna Bridge 142:4eea097334d6 567 }
Anna Bridge 142:4eea097334d6 568
Anna Bridge 142:4eea097334d6 569 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3)
Anna Bridge 142:4eea097334d6 570 {
Anna Bridge 142:4eea097334d6 571 uint32_t result;
Anna Bridge 142:4eea097334d6 572
Anna Bridge 142:4eea097334d6 573 __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 574 return(result);
Anna Bridge 142:4eea097334d6 575 }
Anna Bridge 142:4eea097334d6 576
Anna Bridge 142:4eea097334d6 577 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3)
Anna Bridge 142:4eea097334d6 578 {
Anna Bridge 142:4eea097334d6 579 uint32_t result;
Anna Bridge 142:4eea097334d6 580
Anna Bridge 142:4eea097334d6 581 __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 582 return(result);
Anna Bridge 142:4eea097334d6 583 }
Anna Bridge 142:4eea097334d6 584
Anna Bridge 142:4eea097334d6 585 __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc)
Anna Bridge 142:4eea097334d6 586 {
Anna Bridge 142:4eea097334d6 587 union llreg_u{
Anna Bridge 142:4eea097334d6 588 uint32_t w32[2];
Anna Bridge 142:4eea097334d6 589 uint64_t w64;
Anna Bridge 142:4eea097334d6 590 } llr;
Anna Bridge 142:4eea097334d6 591 llr.w64 = acc;
Anna Bridge 142:4eea097334d6 592
Anna Bridge 142:4eea097334d6 593 #ifndef __ARMEB__ // Little endian
Anna Bridge 142:4eea097334d6 594 __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
Anna Bridge 142:4eea097334d6 595 #else // Big endian
Anna Bridge 142:4eea097334d6 596 __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
Anna Bridge 142:4eea097334d6 597 #endif
Anna Bridge 142:4eea097334d6 598
Anna Bridge 142:4eea097334d6 599 return(llr.w64);
Anna Bridge 142:4eea097334d6 600 }
Anna Bridge 142:4eea097334d6 601
Anna Bridge 142:4eea097334d6 602 __attribute__( ( always_inline ) ) __STATIC_INLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc)
Anna Bridge 142:4eea097334d6 603 {
Anna Bridge 142:4eea097334d6 604 union llreg_u{
Anna Bridge 142:4eea097334d6 605 uint32_t w32[2];
Anna Bridge 142:4eea097334d6 606 uint64_t w64;
Anna Bridge 142:4eea097334d6 607 } llr;
Anna Bridge 142:4eea097334d6 608 llr.w64 = acc;
Anna Bridge 142:4eea097334d6 609
Anna Bridge 142:4eea097334d6 610 #ifndef __ARMEB__ // Little endian
Anna Bridge 142:4eea097334d6 611 __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) );
Anna Bridge 142:4eea097334d6 612 #else // Big endian
Anna Bridge 142:4eea097334d6 613 __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) );
Anna Bridge 142:4eea097334d6 614 #endif
Anna Bridge 142:4eea097334d6 615
Anna Bridge 142:4eea097334d6 616 return(llr.w64);
Anna Bridge 142:4eea097334d6 617 }
Anna Bridge 142:4eea097334d6 618
Anna Bridge 142:4eea097334d6 619 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SEL (uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 620 {
Anna Bridge 142:4eea097334d6 621 uint32_t result;
Anna Bridge 142:4eea097334d6 622
Anna Bridge 142:4eea097334d6 623 __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 624 return(result);
Anna Bridge 142:4eea097334d6 625 }
Anna Bridge 142:4eea097334d6 626
Anna Bridge 142:4eea097334d6 627 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QADD(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 628 {
Anna Bridge 142:4eea097334d6 629 uint32_t result;
Anna Bridge 142:4eea097334d6 630
Anna Bridge 142:4eea097334d6 631 __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 632 return(result);
Anna Bridge 142:4eea097334d6 633 }
Anna Bridge 142:4eea097334d6 634
Anna Bridge 142:4eea097334d6 635 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __QSUB(uint32_t op1, uint32_t op2)
Anna Bridge 142:4eea097334d6 636 {
Anna Bridge 142:4eea097334d6 637 uint32_t result;
Anna Bridge 142:4eea097334d6 638
Anna Bridge 142:4eea097334d6 639 __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) );
Anna Bridge 142:4eea097334d6 640 return(result);
Anna Bridge 142:4eea097334d6 641 }
Anna Bridge 142:4eea097334d6 642
Anna Bridge 142:4eea097334d6 643 #define __PKHBT(ARG1,ARG2,ARG3) \
Anna Bridge 142:4eea097334d6 644 ({ \
Anna Bridge 142:4eea097334d6 645 uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \
Anna Bridge 142:4eea097334d6 646 __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \
Anna Bridge 142:4eea097334d6 647 __RES; \
Anna Bridge 142:4eea097334d6 648 })
Anna Bridge 142:4eea097334d6 649
Anna Bridge 142:4eea097334d6 650 #define __PKHTB(ARG1,ARG2,ARG3) \
Anna Bridge 142:4eea097334d6 651 ({ \
Anna Bridge 142:4eea097334d6 652 uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \
Anna Bridge 142:4eea097334d6 653 if (ARG3 == 0) \
Anna Bridge 142:4eea097334d6 654 __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \
Anna Bridge 142:4eea097334d6 655 else \
Anna Bridge 142:4eea097334d6 656 __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \
Anna Bridge 142:4eea097334d6 657 __RES; \
Anna Bridge 142:4eea097334d6 658 })
Anna Bridge 142:4eea097334d6 659
Anna Bridge 142:4eea097334d6 660 __attribute__( ( always_inline ) ) __STATIC_INLINE uint32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3)
Anna Bridge 142:4eea097334d6 661 {
Anna Bridge 142:4eea097334d6 662 int32_t result;
Anna Bridge 142:4eea097334d6 663
Anna Bridge 142:4eea097334d6 664 __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) );
Anna Bridge 142:4eea097334d6 665 return(result);
Anna Bridge 142:4eea097334d6 666 }
Anna Bridge 142:4eea097334d6 667
Anna Bridge 142:4eea097334d6 668
Anna Bridge 142:4eea097334d6 669 #elif defined ( __ICCARM__ ) /*------------------ ICC Compiler -------------------*/
Anna Bridge 142:4eea097334d6 670 /* IAR iccarm specific functions */
Anna Bridge 142:4eea097334d6 671 #include <cmsis_iar.h>
Anna Bridge 142:4eea097334d6 672
Anna Bridge 142:4eea097334d6 673
Anna Bridge 142:4eea097334d6 674 #elif defined ( __TMS470__ ) /*---------------- TI CCS Compiler ------------------*/
Anna Bridge 142:4eea097334d6 675 /* TI CCS specific functions */
Anna Bridge 142:4eea097334d6 676 #include <cmsis_ccs.h>
Anna Bridge 142:4eea097334d6 677
Anna Bridge 142:4eea097334d6 678
Anna Bridge 142:4eea097334d6 679 #elif defined ( __TASKING__ ) /*------------------ TASKING Compiler --------------*/
Anna Bridge 142:4eea097334d6 680 /* TASKING carm specific functions */
Anna Bridge 142:4eea097334d6 681 /* not yet supported */
Anna Bridge 142:4eea097334d6 682
Anna Bridge 142:4eea097334d6 683
Anna Bridge 142:4eea097334d6 684 #elif defined ( __CSMC__ ) /*------------------ COSMIC Compiler -------------------*/
Anna Bridge 142:4eea097334d6 685 /* Cosmic specific functions */
Anna Bridge 142:4eea097334d6 686 #include <cmsis_csm.h>
Anna Bridge 142:4eea097334d6 687
Anna Bridge 142:4eea097334d6 688 #endif
Anna Bridge 142:4eea097334d6 689
Anna Bridge 142:4eea097334d6 690 /*@} end of group CMSIS_SIMD_intrinsics */
Anna Bridge 142:4eea097334d6 691
Anna Bridge 142:4eea097334d6 692
Anna Bridge 142:4eea097334d6 693 #ifdef __cplusplus
Anna Bridge 142:4eea097334d6 694 }
Anna Bridge 142:4eea097334d6 695 #endif
Anna Bridge 142:4eea097334d6 696
Anna Bridge 142:4eea097334d6 697 #endif /* __CORE_CMSIMD_H */