source: ssp_aarch64/trunk/arm64_gcc/arm64.h@ 353

Last change on this file since 353 was 353, checked in by nmir-saito, 6 years ago

initial import

File size: 4.5 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2006-2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 * Copyright (C) 2018 by Naoki Saito
8 * Nagoya Municipal Industrial Research Institute, JAPAN
9 *
10 * 上記著作権者
11は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
13 * 変・再é…
14å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
15 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
16 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
17 * スコード中に含まれていること.
18 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
19 * 用できる形で再é…
20å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
21å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
22 * 者
23マニュアルなど)に,上記の著作権表示,この利用条件および下記
24 * の無保証規定を掲載すること.
25 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
26 * 用できない形で再é…
27å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
28 * と.
29 * (a) 再é…
30å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
31マニュアルなど)に,上記の著
32 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
33 * (b) 再é…
34å¸ƒã®å½¢æ…
35‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
36 * 報告すること.
37 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
38 * 害からも,上記著作権者
39およびTOPPERSプロジェクトをå…
40è²¬ã™ã‚‹ã“と.
41 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
42 * 由に基づく請求からも,上記著作権者
43およびTOPPERSプロジェクトを
44 * å…
45è²¬ã™ã‚‹ã“と.
46 *
47 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
48お
49 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
50 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
51 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
52 * の責任を負わない.
53 *
54 * $Id: arm64.h 714 2018-05-29 05:52:19Z saito $
55 */
56#ifndef TOPPERS_ARM64_H
57#define TOPPERS_ARM64_H
58
59/*
60 * PSTATE
61 */
62#define AARCH64_PSTATE_N (1 << 31)
63#define AARCH64_PSTATE_Z (1 << 30)
64#define AARCH64_PSTATE_C (1 << 29)
65#define AARCH64_PSTATE_V (1 << 28)
66#define AARCH64_PSTATE_SS (1 << 21)
67#define AARCH64_PSTATE_IL (1 << 20)
68#define AARCH64_PSTATE_D (1 << 9)
69#define AARCH64_PSTATE_A (1 << 8)
70#define AARCH64_PSTATE_I (1 << 7)
71#define AARCH64_PSTATE_F (1 << 6)
72#define AARCH64_PSTATE_MODE4 (1 << 4)
73#define AARCH64_PSTATE_MODE_MASK (AARCH64_PSTATE_MODE4 - 1)
74
75/*
76 * DAIF
77 */
78#define AARCH64_DAIF_FIQ UINT64_C(1)
79#define AARCH64_DAIF_IRQ UINT64_C(2)
80
81#ifndef TOPPERS_MACRO_ONLY
82
83/*
84 * DAIFの設定および状æ…
85‹å‚ç…
86§
87 */
88Inline uint32_t
89aarch64_get_daif(void){
90 uint32_t daif;
91 Asm ("mrs %0, daif\n\t":"=r"(daif));
92 return daif;
93}
94
95Inline void
96aarch64_set_daif(uint32_t daif) {
97
98 Asm ("msr daif, %0\n\t" : : "r"(daif));
99}
100
101/*
102 * DAIF.F および DAIF.I のセット/クリア
103 */
104Inline void
105aarch64_set_daif_if(void) {
106 Asm ("msr daifset, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ));
107}
108
109Inline void
110aarch64_clear_daif_if(void) {
111 Asm ("msr daifclr, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ));
112}
113
114/*
115 * DAIF.I の状æ…
116‹å‚ç…
117§
118 */
119Inline bool_t
120aarch64_sense_daif_irq(void) {
121 uint32_t daif;
122 bool_t state;
123
124 daif = aarch64_get_daif();
125
126 if(daif & AARCH64_PSTATE_I) {
127 state = true;
128 }
129 else {
130 state = false;
131 }
132
133 return state;
134}
135
136/*
137 * DAIF.F の状æ…
138‹å‚ç…
139§
140 */
141Inline bool_t
142aarch64_sense_daif_fiq(void) {
143 uint32_t daif;
144 bool_t state;
145
146 daif = aarch64_get_daif();
147
148 if(daif & AARCH64_PSTATE_F) {
149 state = true;
150 }
151 else {
152 state = false;
153 }
154
155 return state;
156}
157
158
159#endif /* TOPPERS_MACRO_ONLY */
160#endif /* TOPPERS_ARM64_H */
Note: See TracBrowser for help on using the repository browser.