prc_insn.h

説明を見る。
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.

ホームページ制作