00001 /* 00002 * TOPPERS/ASP Kernel 00003 * Toyohashi Open Platform for Embedded Real-Time Systems/ 00004 * Advanced Standard Profile Kernel 00005 * 00006 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory 00007 * Toyohashi Univ. of Technology, JAPAN 00008 * Copyright (C) 2005-2007 by Embedded and Real-Time Systems Laboratory 00009 * Graduate School of Information Science, Nagoya Univ., JAPAN 00010 * 00011 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 00012 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 00013 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 00014 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 00015 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 00016 * スコード中に含まれていること. 00017 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 00018 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 00019 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 00020 * の無保証規定を掲載すること. 00021 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 00022 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 00023 * と. 00024 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 00025 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 00026 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 00027 * 報告すること. 00028 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 00029 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 00030 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 00031 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 00032 * 免責すること. 00033 * 00034 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 00035 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 00036 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 00037 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 00038 * の責任を負わない. 00039 * 00040 * @(#) $Id: prc_insn.h 591 2007-11-12 02:39:38Z asp $ 00041 */ 00042 00043 /* 00044 * プロセッサの特殊命令のインライン関数定義(M68040用) 00045 */ 00046 00047 #ifndef TOPPERS_PRC_INSN_H 00048 #define TOPPERS_PRC_INSN_H 00049 00050 /* 00051 * ステータスレジスタ(SR)の現在値の読出し 00052 */ 00053 Inline uint16_t 00054 current_sr(void) 00055 { 00056 uint16_t sr; 00057 00058 Asm("move.w %%sr, %0" : "=g"(sr)); 00059 return(sr); 00060 } 00061 00062 /* 00063 * ステータスレジスタ(SR)の現在値の設定 00064 */ 00065 Inline void 00066 set_sr(uint16_t sr) 00067 { 00068 Asm("move.w %0, %%sr" : : "g"(sr) : "cc"); 00069 } 00070 00071 /* 00072 * NMIを除くすべての割込みの禁止 00073 * 00074 * set_srを用いて実現することもできるが,別の命令を用いて実現した方が 00075 * 効率が良いために用意している. 00076 */ 00077 Inline void 00078 disint(void) 00079 { 00080 Asm("or.w #0x0700, %sr"); 00081 } 00082 00083 /* 00084 * すべての割込みの許可 00085 * 00086 * set_srを用いて実現することもできるが,別の命令を用いて実現した方が 00087 * 効率が良いために用意している. 00088 */ 00089 Inline void 00090 enaint(void) 00091 { 00092 Asm("and.w #~0x0700, %sr"); 00093 } 00094 00095 /* 00096 * ベクタベースレジスタ(VBR)の現在値の読出し 00097 */ 00098 Inline void 00099 *current_vbr(void) 00100 { 00101 void *vbr; 00102 00103 Asm("movec.l %%vbr, %0" : "=r"(vbr)); 00104 return(vbr); 00105 } 00106 00107 /* 00108 * ベクタベースレジスタ(VBR)の現在値の設定 00109 */ 00110 Inline void 00111 set_vbr(void *vbr) 00112 { 00113 Asm("movec.l %0, %%vbr" : : "r"(vbr)); 00114 } 00115 00116 /* 00117 * レディキューサーチのためのビットマップサーチ関数 00118 * 00119 * bfffo命令は最上位ビットからサーチするため,最上位ビットを最高優先度 00120 * に対応させる. 00121 */ 00122 #define OMIT_BITMAP_SEARCH 00123 #define PRIMAP_BIT(pri) (0x8000U >> (pri)) 00124 00125 Inline uint_t 00126 bitmap_search(uint16_t bitmap) 00127 { 00128 uint32_t offset; 00129 00130 Asm("bfffo %1{16,16}, %0" : "=d"(offset) : "d"((uint32_t) bitmap)); 00131 return((uint_t)(offset - 16)); 00132 } 00133 00134 #endif /* TOPPERS_PRC_INSN_H */
Copyright © 2008 by Kijineko Inc.