cpu_insn.h

説明を見る。
00001 /*
00002  *  TOPPERS/JSP Kernel
00003  *      Toyohashi Open Platform for Embedded Real-Time Systems/
00004  *      Just Standard Profile Kernel
00005  * 
00006  *  Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
00007  *                              Toyohashi Univ. of Technology, JAPAN
00008  * 
00009  *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation 
00010  *  によって公表されている GNU General Public License の Version 2 に記
00011  *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
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  *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
00032  *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
00033  *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
00034  *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
00035  * 
00036  *  @(#) $Id: cpu_insn.h,v 1.9 2003/06/04 01:51:39 hiro Exp $
00037  */
00038 
00039 /*
00040  *      プロセッサの特殊命令のインライン関数定義(M68040用)
00041  */
00042 
00043 #ifndef _CPU_INSN_H_
00044 #define _CPU_INSN_H_
00045 
00046 /*
00047  *  ステータスレジスタ(SR)の現在値の読出し
00048  */
00049 Inline UH
00050 current_sr()
00051 {
00052         UH      sr;
00053 
00054         Asm("move.w %%sr, %0" : "=g"(sr));
00055         return(sr);
00056 }
00057 
00058 /*
00059  *  ステータスレジスタ(SR)の現在値の変更
00060  */
00061 Inline void
00062 set_sr(UH sr)
00063 {
00064         Asm("move.w %0, %%sr" : : "g"(sr));
00065 }
00066 
00067 /*
00068  *  NMIを除くすべての割込みを禁止
00069  */
00070 Inline void
00071 disint()
00072 {
00073         Asm("or.w #0x0700, %sr");
00074 }
00075 
00076 /*
00077  *  すべての割込みを許可
00078  */
00079 Inline void
00080 enaint()
00081 {
00082         Asm("and.w #~0x0700, %sr");
00083 }
00084 
00085 /*
00086  *  ベクタベースレジスタ(VBR)の現在値の読出し
00087  */
00088 Inline VP
00089 current_vbr()
00090 {
00091         VP      vbr;
00092 
00093         Asm("movec.l %%vbr, %0" : "=r"(vbr));
00094         return(vbr);
00095 }
00096 
00097 /*
00098  *  ベクタベースレジスタ(VBR)の設定
00099  */
00100 Inline void
00101 set_vbr(VP vbr)
00102 {
00103         Asm("movec.l %0, %%vbr" : : "r"(vbr));
00104 }
00105 
00106 /*
00107  *  レディキューサーチのためのビットマップサーチ関数
00108  *
00109  *  ビットマップの下位16ビットを使用し,最下位ビットを最低優先度に対応
00110  *  させる.
00111  */
00112 #define CPU_BITMAP_SEARCH
00113 #define PRIMAP_BIT(pri)         (0x8000u >> (pri))
00114 
00115 Inline UINT
00116 bitmap_search(UINT bitmap)
00117 {
00118         UINT    offset;
00119 
00120         /*
00121          *  このコードは,bitmap(UINT型)が32ビットであることを仮定し
00122          *  ている.
00123          */
00124         Asm("bfffo %1{16,16}, %0" : "=d"(offset) : "g"(bitmap));
00125         return(offset - 16);
00126 }
00127 
00128 #endif /* _CPU_INSN_H_ */
00129 

Copyright © 2006 by TAKAGI Nobuhisa.
Copyright © 2006 by Kijineko Inc..
このページは Mon Dec 18 17:18:38 2006 に Doxygen によって生成されました。
データ入力からプログラム開発まで!様々なスキルを持ったメンバーが登録しています【@SOHO】