source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/mbed/targets/TARGET_RENESAS/TARGET_RZA1XX/common/vfp_neon_push_pop.h@ 374

Last change on this file since 374 was 374, checked in by coas-nagasima, 5 years ago

mbed関連を更新
シリアルドライバをmbedのHALを使うよう変更
ファイルディスクリプタの処理を更新

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