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:
Thu Nov 08 11:45:42 2018 +0000
Revision:
171:3a7713b1edbc
Parent:
TARGET_GR_LYCHEE/TARGET_RENESAS/TARGET_RZ_A1XX/common/vfp_neon_push_pop.h@161:aa5281ff4a02
mbed library. Release version 164

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 161:aa5281ff4a02 1 #ifndef __VFP_NEON_PUSH_POP_H__
AnnaBridge 161:aa5281ff4a02 2 #define __VFP_NEON_PUSH_POP_H__
AnnaBridge 161:aa5281ff4a02 3
AnnaBridge 161:aa5281ff4a02 4
AnnaBridge 161:aa5281ff4a02 5 #if defined ( __CC_ARM ) /*------------------RealView Compiler -----------------*/
AnnaBridge 161:aa5281ff4a02 6 /* ARM armcc specific functions */
AnnaBridge 161:aa5281ff4a02 7 #pragma push
AnnaBridge 161:aa5281ff4a02 8 #pragma arm
AnnaBridge 161:aa5281ff4a02 9 static __asm void __vfp_neon_push(void) {
AnnaBridge 161:aa5281ff4a02 10 ARM
AnnaBridge 161:aa5281ff4a02 11
AnnaBridge 161:aa5281ff4a02 12 VMRS R2,FPSCR
AnnaBridge 161:aa5281ff4a02 13 STMDB SP!,{R2,R4} ; Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 14 VSTMDB SP!,{D0-D15}
AnnaBridge 161:aa5281ff4a02 15 VSTMDB SP!,{D16-D31}
AnnaBridge 161:aa5281ff4a02 16 BX LR
AnnaBridge 161:aa5281ff4a02 17 }
AnnaBridge 161:aa5281ff4a02 18 #pragma pop
AnnaBridge 161:aa5281ff4a02 19
AnnaBridge 161:aa5281ff4a02 20 #pragma push
AnnaBridge 161:aa5281ff4a02 21 #pragma arm
AnnaBridge 161:aa5281ff4a02 22 static __asm void __vfp_neon_pop(void) {
AnnaBridge 161:aa5281ff4a02 23 ARM
AnnaBridge 161:aa5281ff4a02 24
AnnaBridge 161:aa5281ff4a02 25 VLDMIA SP!,{D16-D31}
AnnaBridge 161:aa5281ff4a02 26 VLDMIA SP!,{D0-D15}
AnnaBridge 161:aa5281ff4a02 27 LDR R2,[SP]
AnnaBridge 161:aa5281ff4a02 28 VMSR FPSCR,R2
AnnaBridge 161:aa5281ff4a02 29 ADD SP,SP,#8
AnnaBridge 161:aa5281ff4a02 30 BX LR
AnnaBridge 161:aa5281ff4a02 31 }
AnnaBridge 161:aa5281ff4a02 32 #pragma pop
AnnaBridge 161:aa5281ff4a02 33
AnnaBridge 161:aa5281ff4a02 34
AnnaBridge 161:aa5281ff4a02 35 #pragma push
AnnaBridge 161:aa5281ff4a02 36 #pragma arm
AnnaBridge 161:aa5281ff4a02 37 static __asm void __vfp_push(void) {
AnnaBridge 161:aa5281ff4a02 38 ARM
AnnaBridge 161:aa5281ff4a02 39
AnnaBridge 161:aa5281ff4a02 40 VMRS R2,FPSCR
AnnaBridge 161:aa5281ff4a02 41 STMDB SP!,{R2,R4} ; Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 42 VSTMDB SP!,{D0-D15}
AnnaBridge 161:aa5281ff4a02 43 BX LR
AnnaBridge 161:aa5281ff4a02 44 }
AnnaBridge 161:aa5281ff4a02 45 #pragma pop
AnnaBridge 161:aa5281ff4a02 46
AnnaBridge 161:aa5281ff4a02 47 #pragma push
AnnaBridge 161:aa5281ff4a02 48 #pragma arm
AnnaBridge 161:aa5281ff4a02 49 static __asm void __vfp_pop(void) {
AnnaBridge 161:aa5281ff4a02 50 ARM
AnnaBridge 161:aa5281ff4a02 51
AnnaBridge 161:aa5281ff4a02 52 VLDMIA SP!,{D0-D15}
AnnaBridge 161:aa5281ff4a02 53 LDR R2,[SP]
AnnaBridge 161:aa5281ff4a02 54 VMSR FPSCR,R2
AnnaBridge 161:aa5281ff4a02 55 ADD SP,SP,#8
AnnaBridge 161:aa5281ff4a02 56 BX LR
AnnaBridge 161:aa5281ff4a02 57 }
AnnaBridge 161:aa5281ff4a02 58 #pragma pop
AnnaBridge 161:aa5281ff4a02 59
AnnaBridge 161:aa5281ff4a02 60 #elif (defined (__ICCARM__)) /*---------------- ICC Compiler ---------------------*/
AnnaBridge 161:aa5281ff4a02 61
AnnaBridge 161:aa5281ff4a02 62 __arm static inline void __vfp_neon_push(void) {
AnnaBridge 161:aa5281ff4a02 63 __asm(
AnnaBridge 161:aa5281ff4a02 64 "ARM \n"
AnnaBridge 161:aa5281ff4a02 65 "VMRS R2,FPSCR \n"
AnnaBridge 161:aa5281ff4a02 66 "STMDB SP!,{R2,R4} \n" // Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 67 "VSTMDB SP!,{D0-D15} \n"
AnnaBridge 161:aa5281ff4a02 68 "VSTMDB SP!,{D16-D31} \n"
AnnaBridge 161:aa5281ff4a02 69 "BX lr \n" );
AnnaBridge 161:aa5281ff4a02 70 }
AnnaBridge 161:aa5281ff4a02 71
AnnaBridge 161:aa5281ff4a02 72 __arm static inline void __vfp_neon_pop(void) {
AnnaBridge 161:aa5281ff4a02 73 __asm(
AnnaBridge 161:aa5281ff4a02 74 "ARM \n"
AnnaBridge 161:aa5281ff4a02 75 "VLDMIA SP!,{D16-D31} \n"
AnnaBridge 161:aa5281ff4a02 76 "VLDMIA SP!,{D0-D15} \n"
AnnaBridge 161:aa5281ff4a02 77 "LDR R2,[SP] \n"
AnnaBridge 161:aa5281ff4a02 78 "VMSR FPSCR,R2 \n"
AnnaBridge 161:aa5281ff4a02 79 "ADD SP,SP,#8 \n"
AnnaBridge 161:aa5281ff4a02 80 "BX lr \n" );
AnnaBridge 161:aa5281ff4a02 81 }
AnnaBridge 161:aa5281ff4a02 82
AnnaBridge 161:aa5281ff4a02 83 __arm static inline void __vfp_push(void) {
AnnaBridge 161:aa5281ff4a02 84 __asm(
AnnaBridge 161:aa5281ff4a02 85 "ARM \n"
AnnaBridge 161:aa5281ff4a02 86 "VMRS R2,FPSCR \n"
AnnaBridge 161:aa5281ff4a02 87 "STMDB SP!,{R2,R4} \n" // Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 88 "VSTMDB SP!,{D0-D15} \n"
AnnaBridge 161:aa5281ff4a02 89 "BX lr \n" );
AnnaBridge 161:aa5281ff4a02 90 }
AnnaBridge 161:aa5281ff4a02 91
AnnaBridge 161:aa5281ff4a02 92 __arm static inline void __vfp_pop(void) {
AnnaBridge 161:aa5281ff4a02 93 __asm(
AnnaBridge 161:aa5281ff4a02 94 "ARM \n"
AnnaBridge 161:aa5281ff4a02 95 "VLDMIA SP!,{D0-D15} \n"
AnnaBridge 161:aa5281ff4a02 96 "LDR R2,[SP] \n"
AnnaBridge 161:aa5281ff4a02 97 "VMSR FPSCR,R2 \n"
AnnaBridge 161:aa5281ff4a02 98 "ADD SP,SP,#8 \n"
AnnaBridge 161:aa5281ff4a02 99 "BX lr \n" );
AnnaBridge 161:aa5281ff4a02 100 }
AnnaBridge 161:aa5281ff4a02 101
AnnaBridge 161:aa5281ff4a02 102 #elif (defined (__GNUC__)) /*------------------ GNU Compiler ---------------------*/
AnnaBridge 161:aa5281ff4a02 103
AnnaBridge 161:aa5281ff4a02 104 __attribute__( ( always_inline ) ) __STATIC_INLINE void __vfp_neon_push(void)
AnnaBridge 161:aa5281ff4a02 105 {
AnnaBridge 161:aa5281ff4a02 106 __asm__ volatile (
AnnaBridge 161:aa5281ff4a02 107 ".ARM;"
AnnaBridge 161:aa5281ff4a02 108
AnnaBridge 161:aa5281ff4a02 109 "VMRS R2,FPSCR;"
AnnaBridge 161:aa5281ff4a02 110 "STMDB SP!,{R2,R4};" // Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 111 "VSTMDB SP!,{D0-D15};"
AnnaBridge 161:aa5281ff4a02 112 "VSTMDB SP!,{D16-D31};"
AnnaBridge 161:aa5281ff4a02 113 :
AnnaBridge 161:aa5281ff4a02 114 :
AnnaBridge 161:aa5281ff4a02 115 : );
AnnaBridge 161:aa5281ff4a02 116 return;
AnnaBridge 161:aa5281ff4a02 117 }
AnnaBridge 161:aa5281ff4a02 118
AnnaBridge 161:aa5281ff4a02 119 __attribute__( ( always_inline ) ) __STATIC_INLINE void __vfp_neon_pop(void)
AnnaBridge 161:aa5281ff4a02 120 {
AnnaBridge 161:aa5281ff4a02 121 __asm__ volatile (
AnnaBridge 161:aa5281ff4a02 122 ".ARM;"
AnnaBridge 161:aa5281ff4a02 123
AnnaBridge 161:aa5281ff4a02 124 "VLDMIA SP!,{D16-D31};"
AnnaBridge 161:aa5281ff4a02 125 "VLDMIA SP!,{D0-D15};"
AnnaBridge 161:aa5281ff4a02 126 "LDR R2,[SP];"
AnnaBridge 161:aa5281ff4a02 127 "VMSR FPSCR,R2;"
AnnaBridge 161:aa5281ff4a02 128 "ADD SP,SP,#8;"
AnnaBridge 161:aa5281ff4a02 129 :
AnnaBridge 161:aa5281ff4a02 130 :
AnnaBridge 161:aa5281ff4a02 131 : );
AnnaBridge 161:aa5281ff4a02 132 return;
AnnaBridge 161:aa5281ff4a02 133 }
AnnaBridge 161:aa5281ff4a02 134
AnnaBridge 161:aa5281ff4a02 135 __attribute__( ( always_inline ) ) __STATIC_INLINE void __vfp_push(void)
AnnaBridge 161:aa5281ff4a02 136 {
AnnaBridge 161:aa5281ff4a02 137 __asm__ volatile (
AnnaBridge 161:aa5281ff4a02 138 ".ARM;"
AnnaBridge 161:aa5281ff4a02 139
AnnaBridge 161:aa5281ff4a02 140 "VMRS R2,FPSCR;"
AnnaBridge 161:aa5281ff4a02 141 "STMDB SP!,{R2,R4};" // Push FPSCR, maintain 8-byte alignment
AnnaBridge 161:aa5281ff4a02 142 "VSTMDB SP!,{D0-D15};"
AnnaBridge 161:aa5281ff4a02 143 :
AnnaBridge 161:aa5281ff4a02 144 :
AnnaBridge 161:aa5281ff4a02 145 : );
AnnaBridge 161:aa5281ff4a02 146 return;
AnnaBridge 161:aa5281ff4a02 147 }
AnnaBridge 161:aa5281ff4a02 148
AnnaBridge 161:aa5281ff4a02 149 __attribute__( ( always_inline ) ) __STATIC_INLINE void __vfp_pop(void)
AnnaBridge 161:aa5281ff4a02 150 {
AnnaBridge 161:aa5281ff4a02 151 __asm__ volatile (
AnnaBridge 161:aa5281ff4a02 152 ".ARM;"
AnnaBridge 161:aa5281ff4a02 153
AnnaBridge 161:aa5281ff4a02 154 "VLDMIA SP!,{D0-D15};"
AnnaBridge 161:aa5281ff4a02 155 "LDR R2,[SP];"
AnnaBridge 161:aa5281ff4a02 156 "VMSR FPSCR,R2;"
AnnaBridge 161:aa5281ff4a02 157 "ADD SP,SP,#8;"
AnnaBridge 161:aa5281ff4a02 158 :
AnnaBridge 161:aa5281ff4a02 159 :
AnnaBridge 161:aa5281ff4a02 160 : );
AnnaBridge 161:aa5281ff4a02 161 return;
AnnaBridge 161:aa5281ff4a02 162 }
AnnaBridge 161:aa5281ff4a02 163
AnnaBridge 161:aa5281ff4a02 164 #endif
AnnaBridge 161:aa5281ff4a02 165
AnnaBridge 161:aa5281ff4a02 166 #endif