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

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

modify crobber lists of inline-assembly in arm64.h

  • Property svn:mime-type set to text/plain; charset=utf-8
File size: 4.6 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 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19 * の無保証規定を掲載すること.
20 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22 * と.
23 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
25 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26 * 報告すること.
27 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31 * 免責すること.
32 *
33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37 * の責任を負わない.
38 *
39 * $Id: arm64.h 714 2018-05-29 05:52:19Z saito $
40 */
41#ifndef TOPPERS_ARM64_H
42#define TOPPERS_ARM64_H
43
44/*
45 * PSTATE
46 */
47#define AARCH64_PSTATE_N (1 << 31)
48#define AARCH64_PSTATE_Z (1 << 30)
49#define AARCH64_PSTATE_C (1 << 29)
50#define AARCH64_PSTATE_V (1 << 28)
51#define AARCH64_PSTATE_SS (1 << 21)
52#define AARCH64_PSTATE_IL (1 << 20)
53#define AARCH64_PSTATE_D (1 << 9)
54#define AARCH64_PSTATE_A (1 << 8)
55#define AARCH64_PSTATE_I (1 << 7)
56#define AARCH64_PSTATE_F (1 << 6)
57#define AARCH64_PSTATE_MODE4 (1 << 4)
58#define AARCH64_PSTATE_MODE_MASK (AARCH64_PSTATE_MODE4 - 1)
59
60/*
61 * DAIF
62 */
63#define AARCH64_DAIF_FIQ UINT64_C(1)
64#define AARCH64_DAIF_IRQ UINT64_C(2)
65
66#ifndef TOPPERS_MACRO_ONLY
67
68/*
69 * DAIFの設定および状態参照
70 */
71Inline uint32_t
72aarch64_get_daif(void){
73 uint32_t daif;
74 Asm ("mrs %0, daif\n\t":"=r"(daif): : "memory");
75 return daif;
76}
77
78Inline void
79aarch64_set_daif(uint32_t daif) {
80
81 Asm ("msr daif, %0\n\t" : : "r"(daif): "cc");
82}
83
84/*
85 * DAIF.F および DAIF.I のセット/クリア
86 */
87Inline void
88aarch64_set_daif_if(void) {
89 Asm ("msr daifset, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ): "cc");
90}
91
92Inline void
93aarch64_clear_daif_if(void) {
94 Asm ("msr daifclr, %0\n\t"::"i"(AARCH64_DAIF_IRQ | AARCH64_DAIF_FIQ): "cc");
95}
96
97/*
98 * DAIF.I の状態参照
99 */
100Inline bool_t
101aarch64_sense_daif_irq(void) {
102 uint32_t daif;
103 bool_t state;
104
105 daif = aarch64_get_daif();
106
107 if(daif & AARCH64_PSTATE_I) {
108 state = true;
109 }
110 else {
111 state = false;
112 }
113
114 return state;
115}
116
117/*
118 * DAIF.F の状態参照
119 */
120Inline bool_t
121aarch64_sense_daif_fiq(void) {
122 uint32_t daif;
123 bool_t state;
124
125 daif = aarch64_get_daif();
126
127 if(daif & AARCH64_PSTATE_F) {
128 state = true;
129 }
130 else {
131 state = false;
132 }
133
134 return state;
135}
136
137
138#endif /* TOPPERS_MACRO_ONLY */
139#endif /* TOPPERS_ARM64_H */
Note: See TracBrowser for help on using the repository browser.