- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/arm_insn.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;charset=UTF-8
r270 r321 8 8 * Graduate School of Information Science, Nagoya Univ., JAPAN 9 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 責ãããã¨ï¼ 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 * 免責すること. 46 32 * 47 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 * ã®è²¬ä»»ãè² ããªãï¼ 33 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 * の責任を負わない. 53 38 * 54 39 * $Id$ … … 56 41 57 42 /* 58 * ARM ã³ã¢ã®ç¹æ®å½ä»¤ã®ã¤ã³ã©ã¤ã³é¢æ°å®ç¾©59 * 60 * ãã®ããããã¡ã¤ã«ã¯ï¼arm.hããã¤ã³ã¯ã«ã¼ããããï¼arm.hããåé¢ã61 * ã¦ããã®ã¯ï¼ã³ã³ãã¤ã©ã«ããã¤ã³ã©ã¤ã³ã¢ã»ã³ãã©ã®è¨è¿°æ¹æ³ã®éãã62 * å¸åããããã«ï¼ãã®ãã¡ã¤ã«ã®ã¿ãç½®ãæããã°ããããã«ããããã§63 * ããï¼43 * ARMコアの特殊命令のインライン関数定義 44 * 45 * このヘッダファイルは,arm.hからインクルードされる.arm.hから分離し 46 * ているのは,コンパイラによるインラインアセンブラの記述方法の違いを 47 * 吸収するために,このファイルのみを置き換えればよいようにするためで 48 * ある. 64 49 */ 65 50 … … 70 55 71 56 /* 72 * CLZ ï¼Count Leading Zeroï¼å½ä»¤57 * CLZ(Count Leading Zero)命令 73 58 */ 74 59 #if __TARGET_ARCH_ARM >= 6 … … 86 71 87 72 /* 88 * ã¡ã¢ãªãå¤æ´ããããã¨ãã³ã³ãã¤ã©ã«ä¼ããããã®ãã¯ã73 * メモリが変更されることをコンパイラに伝えるためのマクロ 89 74 */ 90 75 #define ARM_MEMORY_CHANGED Asm("":::"memory") 91 76 92 77 /* 93 * ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ã®æä½é¢æ°78 * ステータスレジスタの操作関数 94 79 */ 95 80 #ifndef __thumb__ 96 81 97 82 /* 98 * ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼CPSRï¼ã®ç¾å¨å¤ã®èªåºã83 * ステータスレジスタ(CPSR)の現在値の読出し 99 84 */ 100 85 Inline uint32_t … … 108 93 109 94 /* 110 * ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼CPSRï¼ã®ç¾å¨å¤ã®å¤æ´95 * ステータスレジスタ(CPSR)の現在値の変更 111 96 */ 112 97 Inline void … … 118 103 #else /* __thumb__ */ 119 104 /* 120 * Thumb ã¢ã¼ãã§ã¯mrs/msrå½ä»¤ã使ç¨ã§ããªãããï¼é¢æ°ã¨ãã¦å®ç¾ãã¦ï¼121 * ARM ã¢ã¼ãã«ç§»è¡ãã¦å®è¡ããï¼122 */ 123 124 /* 125 * ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼CPSRï¼ã®ç¾å¨å¤ã®èªåºã105 * Thumbモードではmrs/msr命令が使用できないため,関数として実現して, 106 * ARMモードに移行して実行する. 107 */ 108 109 /* 110 * ステータスレジスタ(CPSR)の現在値の読出し 126 111 */ 127 112 extern uint32_t current_cpsr(void); 128 113 129 114 /* 130 * ã¹ãã¼ã¿ã¹ã¬ã¸ã¹ã¿ï¼CPSRï¼ã®ç¾å¨å¤ã®å¤æ´115 * ステータスレジスタ(CPSR)の現在値の変更 131 116 */ 132 117 extern void set_cpsr(uint32_t cpsr); … … 135 120 136 121 /* 137 * å²è¾¼ã¿ç¦æ¢ï¼è¨±å¯é¢æ° 138 * 139 * ARMv6ãã追å ãããã·ã¹ãã ç¶æ 140 ãå¤æ´ããå½ä»¤ã使ã£ãå²è¾¼ã¿ç¦æ¢ï¼è¨± 141 * å¯ã®ããã®é¢æ°ï¼ 142 */ 143 #if __TARGET_ARCH_ARM >= 6 144 145 /* 146 * IRQã®ç¦æ¢ 122 * 割込み禁止/許可関数 123 * 124 * ARMv6から追加されたシステム状態を変更する命令を使った割込み禁止/許 125 * 可のための関数. 126 */ 127 #if __TARGET_ARCH_ARM >= 6 128 129 /* 130 * IRQの禁止 147 131 */ 148 132 Inline void … … 153 137 154 138 /* 155 * IRQ ã®è¨±å¯139 * IRQの許可 156 140 */ 157 141 Inline void … … 162 146 163 147 /* 164 * FIQ ã®ç¦æ¢148 * FIQの禁止 165 149 */ 166 150 Inline void … … 171 155 172 156 /* 173 * FIQ ã®è¨±å¯157 * FIQの許可 174 158 */ 175 159 Inline void … … 180 164 181 165 /* 182 * FIQ ã¨IRQã®ç¦æ¢166 * FIQとIRQの禁止 183 167 */ 184 168 Inline void … … 189 173 190 174 /* 191 * FIQ ã¨IRQã®è¨±å¯175 * FIQとIRQの許可 192 176 */ 193 177 Inline void … … 200 184 201 185 /* 202 * CP15 ã®IDã¬ã¸ã¹ã¿æä½ãã¯ã203 */ 204 205 /* ã¡ã¤ã³IDã¬ã¸ã¹ã¿*/186 * CP15のIDレジスタ操作マクロ 187 */ 188 189 /* メインIDレジスタ */ 206 190 #define CP15_READ_MIDR(reg) Asm("mrc p15, 0, %0, c0, c0, 0":"=r"(reg)) 207 191 208 /* ãã«ãããã»ããµã¢ãã£ããã£ã¬ã¸ã¹ã¿ï¼ARMv6以éï¼*/192 /* マルチプロセッサアフィニティレジスタ(ARMv6以降)*/ 209 193 #if __TARGET_ARCH_ARM >= 6 210 194 #define CP15_READ_MPIDR(reg) Asm("mrc p15, 0, %0, c0, c0, 5":"=r"(reg)) 211 195 #endif /* __TARGET_ARCH_ARM >= 6 */ 212 196 213 /* ãã£ãã·ã¥ã¿ã¤ãã¬ã¸ã¹ã¿*/197 /* キャッシュタイプレジスタ */ 214 198 #define CP15_READ_CTR(reg) Asm("mrc p15, 0, %0, c0, c0, 1":"=r"(reg)) 215 199 216 200 #if __TARGET_ARCH_ARM == 7 217 /* ãã£ãã·ã¥ã¬ãã«IDã¬ã¸ã¹ã¿ï¼ARMv7ï¼*/201 /* キャッシュレベルIDレジスタ(ARMv7) */ 218 202 #define CP15_READ_CLIDR(reg) Asm("mrc p15, 1, %0, c0, c0, 1":"=r"(reg)) 219 203 220 /* ãã£ãã·ã¥ãµã¤ãºé¸æã¬ã¸ã¹ã¿ï¼ARMv7ï¼*/204 /* キャッシュサイズ選択レジスタ(ARMv7)*/ 221 205 #define CP15_WRITE_CSSELR(reg) Asm("mcr p15, 2, %0, c0, c0, 0"::"r"(reg)) 222 206 223 /* ãã£ãã·ã¥ãµã¤ãºIDã¬ã¸ã¹ã¿ï¼ARMv7ï¼*/207 /* キャッシュサイズIDレジスタ(ARMv7)*/ 224 208 #define CP15_READ_CCSIDR(reg) Asm("mrc p15, 1, %0, c0, c0, 0":"=r"(reg)) 225 209 #endif /* __TARGET_ARCH_ARM == 7 */ 226 210 227 211 /* 228 * CP15 ã®ã·ã¹ãã å¶å¾¡ã¬ã¸ã¹ã¿æä½ãã¯ã229 */ 230 231 /* ã·ã¹ãã å¶å¾¡ã¬ã¸ã¹ã¿*/212 * CP15のシステム制御レジスタ操作マクロ 213 */ 214 215 /* システム制御レジスタ */ 232 216 #define CP15_READ_SCTLR(reg) Asm("mrc p15, 0, %0, c1, c0, 0":"=r"(reg)) 233 217 #define CP15_WRITE_SCTLR(reg) Asm("mcr p15, 0, %0, c1, c0, 0"::"r"(reg)) 234 218 235 /* è£å©å¶å¾¡ã¬ã¸ã¹ã¿ï¼æ©è½ã¯ãããä¾åï¼*/219 /* 補助制御レジスタ(機能はチップ依存)*/ 236 220 #define CP15_READ_ACTLR(reg) Asm("mrc p15, 0, %0, c1, c0, 1":"=r"(reg)) 237 221 #define CP15_WRITE_ACTLR(reg) Asm("mcr p15, 0, %0, c1, c0, 1"::"r"(reg)) 238 222 239 223 /* 240 * CP15ã«ãããã£ãã·ã¥æä½ãã¯ã 241 */ 242 243 /* å½ä»¤ãã£ãã·ã¥å 244 ¨ä½ã®ç¡å¹å */ 224 * CP15によるキャッシュ操作マクロ 225 */ 226 227 /* 命令キャッシュ全体の無効化 */ 245 228 #define CP15_INVALIDATE_ICACHE() \ 246 229 Asm("mcr p15, 0, %0, c7, c5, 0"::"r"(0)) 247 230 248 /* åå²äºæ¸¬å 249 ¨ä½ã®ç¡å¹å */ 231 /* 分岐予測全体の無効化 */ 250 232 #define CP15_INVALIDATE_BP() Asm("mcr p15, 0, %0, c7, c5, 6"::"r"(0)) 251 233 252 /* ãã¼ã¿ãã£ãã·ã¥å 253 ¨ä½ã®ç¡å¹åï¼ARMv6以åï¼*/ 234 /* データキャッシュ全体の無効化(ARMv6以前)*/ 254 235 #if __TARGET_ARCH_ARM <= 6 255 236 #define CP15_INVALIDATE_DCACHE() Asm("mcr p15, 0, %0, c7, c6, 0"::"r"(0)) 256 237 #endif /* __TARGET_ARCH_ARM <= 6 */ 257 238 258 /* çµ±åãã£ãã·ã¥å 259 ¨ä½ã®ç¡å¹åï¼ARMv6以åï¼*/ 239 /* 統合キャッシュ全体の無効化(ARMv6以前)*/ 260 240 #if __TARGET_ARCH_ARM <= 6 261 241 #define CP15_INVALIDATE_UCACHE() Asm("mcr p15, 0, %0, c7, c7, 0"::"r"(0)) 262 242 #endif /* __TARGET_ARCH_ARM <= 6 */ 263 243 264 /* ãã¼ã¿ãã£ãã·ã¥å 265 ¨ä½ã®ã¯ãªã¼ã³ã¨ç¡å¹åï¼ARMv5ã®ã¿ï¼*/ 244 /* データキャッシュ全体のクリーンと無効化(ARMv5のみ)*/ 266 245 #if __TARGET_ARCH_ARM <= 5 267 246 #define ARMV5_CLEAN_AND_INVALIDATE_DCACHE() \ … … 269 248 #endif /* __TARGET_ARCH_ARM <= 5 */ 270 249 271 /* ãã¼ã¿ãã£ãã·ã¥å 272 ¨ä½ã®ã¯ãªã¼ã³ã¨ç¡å¹åï¼ARMv6ã®ã¿ï¼*/ 250 /* データキャッシュ全体のクリーンと無効化(ARMv6のみ)*/ 273 251 #if __TARGET_ARCH_ARM == 6 274 252 #define CP15_CLEAN_AND_INVALIDATE_DCACHE() \ … … 276 254 #endif /* __TARGET_ARCH_ARM == 6 */ 277 255 278 /* çµ±åãã£ãã·ã¥å 279 ¨ä½ã®ã¯ãªã¼ã³ã¨ç¡å¹åï¼ARMv6ã®ã¿ï¼*/ 256 /* 統合キャッシュ全体のクリーンと無効化(ARMv6のみ)*/ 280 257 #if __TARGET_ARCH_ARM == 6 281 258 #define CP15_CLEAN_AND_INVALIDATE_UCACHE() \ … … 283 260 #endif /* __TARGET_ARCH_ARM == 6 */ 284 261 285 /* ãã¼ã¿ãã£ãã·ã¥ã®ã»ããï¼ã¦ã§ã¤åä½ã®ç¡å¹å*/262 /* データキャッシュのセット/ウェイ単位の無効化 */ 286 263 #define CP15_WRITE_DCISW(reg) Asm("mcr p15, 0, %0, c7, c6, 2"::"r"(reg)) 287 264 288 /* ãã¼ã¿ãã£ãã·ã¥ã®ã»ããï¼ã¦ã§ã¤åä½ã®ã¯ãªã¼ã³ã¨ç¡å¹å*/265 /* データキャッシュのセット/ウェイ単位のクリーンと無効化 */ 289 266 #define CP15_WRITE_DCCISW(reg) Asm("mcr p15, 0, %0, c7, c14, 2"::"r"(reg)) 290 267 291 268 /* 292 * CP15ã®ãã©ã¼ã«ãç¶æ 293 ï¼ã¢ãã¬ã¹ã®æä½ãã¯ã 269 * CP15のフォールト状態/アドレスの操作マクロ 294 270 */ 295 271 #if __TARGET_ARCH_ARM >= 6 … … 304 280 305 281 /* 306 * CP15 ã«ããMMUã®æä½ãã¯ãï¼VMSAï¼307 */ 308 309 /* å¤æãã¼ãã«ãã¼ã¹å¶å¾¡ã¬ã¸ã¹ã¿ï¼ARMv6以éï¼*/282 * CP15によるMMUの操作マクロ(VMSA) 283 */ 284 285 /* 変換テーブルベース制御レジスタ(ARMv6以降)*/ 310 286 #if __TARGET_ARCH_ARM >= 6 311 287 #define CP15_WRITE_TTBCR(reg) Asm("mcr p15, 0, %0, c2, c0, 2"::"r"(reg)) 312 288 #endif /* __TARGET_ARCH_ARM >= 6 */ 313 289 314 /* å¤æãã¼ãã«ãã¼ã¹ã¬ã¸ã¹ã¿0 */290 /* 変換テーブルベースレジスタ0 */ 315 291 #define CP15_READ_TTBR0(reg) Asm("mrc p15, 0, %0, c2, c0, 0":"=r"(reg)) 316 292 #define CP15_WRITE_TTBR0(reg) Asm("mcr p15, 0, %0, c2, c0, 0"::"r"(reg)) 317 293 318 /* ãã¡ã¤ã³ã¢ã¯ã»ã¹å¶å¾¡ã¬ã¸ã¹ã¿*/294 /* ドメインアクセス制御レジスタ */ 319 295 #define CP15_WRITE_DACR(reg) Asm("mcr p15, 0, %0, c3, c0, 0":: "r"(reg)) 320 296 321 /* ã³ã³ããã¹ãIDã¬ã¸ã¹ã¿ï¼ARMv6以éï¼*/297 /* コンテキストIDレジスタ(ARMv6以降)*/ 322 298 #if __TARGET_ARCH_ARM >= 6 323 299 #define CP15_WRITE_CONTEXTIDR(reg) Asm("mcr p15, 0, %0, c13, c0, 1" ::"r"(reg)) … … 325 301 326 302 /* 327 * CP15ã«ããTLBæä½ãã¯ãï¼VMSAï¼ 328 */ 329 330 /* TLBå 331 ¨ä½ã®ç¡å¹å */ 303 * CP15によるTLB操作マクロ(VMSA) 304 */ 305 306 /* TLB全体の無効化 */ 332 307 #define CP15_INVALIDATE_TLB() Asm("mcr p15, 0, %0, c8, c7, 0"::"r"(0)) 333 308 334 309 /* 335 * CP15 ã®ããã©ã¼ãã³ã¹ã¢ãã¿æä½ãã¯ãï¼ARMv7ã®ã¿ï¼310 * CP15のパフォーマンスモニタ操作マクロ(ARMv7のみ) 336 311 */ 337 312 #if __TARGET_ARCH_ARM == 7 338 313 339 /* ããã©ã¼ãã³ã¹ã¢ãã¿å¶å¾¡ã¬ã¸ã¹ã¿*/314 /* パフォーマンスモニタ制御レジスタ */ 340 315 #define CP15_READ_PMCR(reg) Asm("mrc p15, 0, %0, c9, c12, 0":"=r"(reg)) 341 316 #define CP15_WRITE_PMCR(reg) Asm("mcr p15, 0, %0, c9, c12, 0"::"r"(reg)) 342 317 343 /* ããã©ã¼ãã³ã¹ã¢ãã¿ã«ã¦ã³ãã¤ãã¼ãã«ã»ããã¬ã¸ã¹ã¿*/318 /* パフォーマンスモニタカウントイネーブルセットレジスタ */ 344 319 #define CP15_READ_PMCNTENSET(reg) Asm("mrc p15, 0, %0, c9, c12, 1":"=r"(reg)) 345 320 #define CP15_WRITE_PMCNTENSET(reg) Asm("mcr p15, 0, %0, c9, c12, 1"::"r"(reg)) 346 321 347 /* ããã©ã¼ãã³ã¹ã¢ãã¿ã«ã¦ã³ã¿ãµã¤ã¯ã«ã¬ã¸ã¹ã¿*/322 /* パフォーマンスモニタカウンタサイクルレジスタ */ 348 323 #define CP15_READ_PMCCNTR(reg) Asm("mrc p15, 0, %0, c9, c13, 0":"=r"(reg)) 349 324 #define CP15_WRITE_PMCCNTR(reg) Asm("mcr p15, 0, %0, c9, c13, 0"::"r"(reg)) … … 352 327 353 328 /* 354 * CP15 ã«ããã¡ã¢ãªããªã¢æä½ãã¯ã329 * CP15によるメモリバリア操作マクロ 355 330 */ 356 331 #define CP15_INST_SYNC_BARRIER() \ … … 362 337 363 338 /* 364 * ã¡ã¢ãªããªã¢ 365 * 366 * ARMv6ã¨ARMv7ãæã¤3ã¤ã®ã¡ã¢ãªããªã¢æ©è½ã使ç¨ããããã®é¢æ°ï¼ã¡ã¢ãª 367 * ããªã¢ã¯ï¼ARMv7ã§ã¯å°ç¨å½ä»¤ï¼ARMv6ã§ã¯CP15ã¸ã®æ¸è¾¼ã¿ã§å®ç¾ãããï¼ 368 * ARMv7ã®ã¡ã¢ãªããªã¢å½ä»¤ã¯ï¼åæãåãç¯å²ãæå®ã§ãããï¼ä»¥ä¸ã®é¢æ° 369 * ã§ã¯æ大ç¯å²ï¼ã·ã¹ãã å 370 ¨ä½ï¼ãªã¼ãï¼ã©ã¤ãã®ä¸¡æ¹ï¼ã§åæãåãï¼ 371 * 372 * ARMv5以åã§ã¯ï¼ã¡ã¢ãªããªã¢æ©è½ã¯å®è£ 373 ä¾åã§ããããï¼ããããï¼ 374 * DATA_MEMORY_BARRIERï¼DATA_SYNC_BARRIERï¼INST_SYNC_BARRIERãå®ç¾©ãã 375 * ãã¨ã«ãã£ã¦ï¼é¢æ°ã®å 376 容ãå 377 ¥ãæããããããã«ãã¦ããï¼ 378 */ 379 380 /* 381 * ãã¼ã¿ã¡ã¢ãªããªã¢ 382 * 383 * ãã®ããªã¢ã®åå¾ã§ï¼ã¡ã¢ãªã¢ã¯ã»ã¹ã®é åºãå 384 ¥ãæãããªãããã«ããï¼ 385 * ãã«ãã³ã¢ï¼å³å¯ã«ã¯ãã«ããã¹ã¿ï¼ã§ã®ä½¿ç¨ãæ³å®ããå½ä»¤ï¼ 339 * メモリバリア 340 * 341 * ARMv6とARMv7が持つ3つのメモリバリア機能を使用するための関数.メモリ 342 * バリアは,ARMv7では専用命令,ARMv6ではCP15への書込みで実現される. 343 * ARMv7のメモリバリア命令は,同期を取る範囲を指定できるが,以下の関数 344 * では最大範囲(システム全体,リード/ライトの両方)で同期を取る. 345 * 346 * ARMv5以前では,メモリバリア機能は実装依存であるため,それぞれ, 347 * DATA_MEMORY_BARRIER,DATA_SYNC_BARRIER,INST_SYNC_BARRIERを定義する 348 * ことによって,関数の内容を入れ換えられるようにしている. 349 */ 350 351 /* 352 * データメモリバリア 353 * 354 * このバリアの前後で,メモリアクセスの順序が入れ換わらないようにする. 355 * マルチコア(厳密にはマルチマスタ)での使用を想定した命令. 386 356 */ 387 357 Inline void … … 398 368 399 369 /* 400 * ãã¼ã¿åæããªã¢ 401 * 402 * å 403 è¡ããã¡ã¢ãªã¢ã¯ã»ã¹ãå®äºããã®ãå¾ 404 ã¤ï¼ã¡ã¢ãªã¢ã¯ã»ã¹ãå¯ä½ç¨ã 405 * æã¤æã«ï¼ãã®å¯ä½ç¨ãèµ·ããã®ãå¾ 406 ã¤ããã®ä½¿ç¨ãæ³å®ããå½ä»¤ï¼ 370 * データ同期バリア 371 * 372 * 先行するメモリアクセスが完了するのを待つ.メモリアクセスが副作用を 373 * 持つ時に,その副作用が起こるのを待つための使用を想定した命令. 407 374 */ 408 375 Inline void … … 419 386 420 387 /* 421 * å½ä»¤åæããªã¢ 422 * 423 * ããã°ã©ã ãæ¸ãæããããï¼ã¾ãã¯ï¼ã·ã¹ãã ç¶æ 424 ã®å¤åã«ããå®è¡ã 425 * ã¹ãããã°ã©ã ãå¤ãã£ãï¼æã«ï¼ãã¤ãã©ã¤ã³ããã©ãã·ã¥ãããªã©ï¼ 426 * æ°ããããã°ã©ã ãèªã¿è¾¼ãããã«ããï¼ARMv6ã§ã¯ï¼ããªãã§ãããã©ã 427 * ã·ã¥ã¨å¼ã°ãã¦ããï¼ 388 * 命令同期バリア 389 * 390 * プログラムが書き換えられた(または,システム状態の変化により実行す 391 * べきプログラムが変わった)時に,パイプラインをフラッシュするなど, 392 * 新しいプログラムを読み込むようにする.ARMv6では,プリフェッチフラッ 393 * シュと呼ばれている. 428 394 */ 429 395 Inline void … … 440 406 441 407 /* 442 * CP15 ã®ã»ãã¥ãªãã£æ¡å¼µã¬ã¸ã¹ã¿æä½ãã¯ãï¼ARMv7ã®ã¿ï¼408 * CP15のセキュリティ拡張レジスタ操作マクロ(ARMv7のみ) 443 409 */ 444 410 #if __TARGET_ARCH_ARM == 7 445 411 446 /* ãã¯ã¿ãã¼ã¹ã¢ãã¬ã¹ã¬ã¸ã¹ã¿*/412 /* ベクタベースアドレスレジスタ */ 447 413 #define CP15_READ_VBAR(reg) Asm("mrc p15, 0, %0, c12, c0, 0":"=r"(reg)) 448 414 #define CP15_WRITE_VBAR(reg) Asm("mcr p15, 0, %0, c12, c0, 0"::"r"(reg))
Note:
See TracChangeset
for help on using the changeset viewer.