Shinobi Library

1998/10/4


キャッシュ関数

0. 概要

キャッシュ関数は、SH4 のキャッシュユニットを管理し、キャッシュの初期化、無効化(インバリデート)、パージ、内蔵メモリとしてのキャッシュ領域の管理を行います。
キャッシュコントロールレジスタの操作は、P2 領域から行う必要があるので、syCacheInit, syCacheICI, syCacheOCI の各 API はマクロで提供され、内部で、syCacheInit_P2, syCacheICI_P2, syCacheOCI_P2 関数を呼び出します。

1.データ型

マクロ名
SYD_CACHE_FORM_IC_INDEX0x00008000
SYD_CACHE_FORM_OC_INDEX0x00000080
SYD_CACHE_FORM_IC_ENABLE0x00000100
SYD_CACHE_FORM_OC_ENABLE0x00000001
SYD_CACHE_FORM_OC_RAM0x00000020
SYD_CACHE_FORM_P1_CB0x00000004
SYD_CACHE_FORM_P0_WT0x00000002

typedef Uint32 SY_CACHE_FORM;


2. 関数リファレンス

2.1 関数一覧

関数機能
syCacheInit<新規>関数の初期化
syCacheICI<新規>すべてのキャッシュの無効化
syCacheOCl<新規>オペランドキャッシュのすべてのエントリを無効化
syCacheOCBI<新規>オペランドキャッシュブロックの無効化
syCacheOCBP<新規>オペランドキャッシュブロックのパージ
syCacheOCWB<新規>オペランドキャッシュブロックの書き戻し
syCachePREF<新規>オペランドキャッシュのプリフェッチ
syCacheMOVCAL<新規>MOVCA.L命令の実行

2.2 関数API

syCacheInit

[関数]
Void syCacheInit(SY_CACH_FORM form)
[入力]
form
キャッシュのタイプ。以下のタイプのORを取って指定する。
SYD_CACHE_IC_INDEXインストラクションキャッシュをインデックスモードにする
SYD_CACHE_OC_INDEXオペランドキャッシュをインデックスモードにする
SYD_CACHE_IC_ENABLEインストラクションキャッシュをイネーブル
SYD_CACHE_OC_ENABLEオペランドキャッシュをイネーブル
SYD_CACHE_OC_RAMオペランドキャッシュをRAMモードにする
SYD_CACHE_P1_CBP1領域をコピーバックモードに
SYD_CACHE_P0_WTP0領域をライトバックモードに

[出力]
なし
[戻値]
なし
[機能]
キャッシュ関数を初期化します。
[備考]
この関数は、syHwInit関数内で呼ばれており、かつ、ここで設定する値は、アプリケーションで勝手に書きかえることは禁止されています。
初期化時の設定値は次の通りです。
SYD_CACHE_FORM_IC_ENABLE | SYD_CACHE_FORM_OC_ENABLE | SYD_CACHE_FORM_P1_CB
オペランドキャッシュのRAMモードはSHINOBIライブラリとしては禁止します。

syCacheICI

[関数]
Void syCacheICI(Void)
[入力]
なし
[出力]
なし
[戻値]
なし
[機能]
インストラクションキャッシュのすべてのエントリをインバリデートします。
[備考]
なし

syCacheOCI

[関数]
Void syCacheOCI(Void)
[入力]
なし
[出力]
なし
[戻値]
なし
[機能]
オペランドキャッシュのすべてのエントリをインバリデートします。
[備考]
なし

syCacheOCBI

[関数]
Void syCacheOCBI(void *address, Uint32 size)
[入力]
address
先頭アドレス
size
サイズ
[出力]
なし
[戻値]
なし
[機能]
指定された領域を含む全キャッシュブロックをインバリデートします。(インバリデート=キャッシュ内容を捨てる)
[用例]

[備考]
P2領域(0xa0000000h〜0xbfffffff)のアドレスが指定された時は、P0領域に置き換えインバリデートします。

syCacheOCBP

[関数]
Void syCacheOCBP(Void *address, Uint32 size)
[入力]
address
先頭アドレス
size
サイズ
[出力]
なし
[戻値]
なし
[機能]
指定された領域を含む全キャッシュブロックをパージします。(パージ=ライトバック後に捨てる)
[備考]
P2領域(0xa0000000h〜0xbfffffff)のアドレスが指定された時は、P0領域に置き換えパージします。つまり、キャッシュ不可のP2領域であっても、メモリの実体に対する変更が行われます。

syCacheOCWB

[関数]
Void syCacheOCWB(Void *address, Uint32 size);
[入力]
address
先頭アドレス
size
サイズ
[出力]
なし
[戻値]
なし
[機能]
指定された領域を含む全キャッシュブロックをライトバックします。(ライトバック=実メモリに書き戻す)
[備考]
P2領域(0xa0000000h〜0xbfffffff)のアドレスが指定された時は、P0領域に置き換えライトバックします。つまり、キャッシュ不可のP2領域であっても、メモリの実体に対する変更が行われます。

syCachePREF

[関数]
Void syCachePREF(Void *address, Uint32 size)
[入力]
address
先頭アドレス
size
サイズ
[出力]
なし
[戻値]
なし
[機能]
指定された領域に対し、プリフェッチを実行します。
[備考]
なし

syCacheMOVCAL

[関数]
Void syCacheMOVCAL(Void *address, Uint32 size)
[入力]
address
先頭アドレス
size
サイズ
[出力]
なし
[戻値]
なし
[機能]
指定された領域を含む全キャッシュブロックに MOVCA.L を実行します。(キャッシュブロックの確保=キャッシュミス時にブロックリードを行わずにキャッシュ上にだけデータを書込む)
[備考]
指定する領域の先頭や末尾が 32 bytes に整合されていない場合に本関数を実行すると、隣接するデータが壊れます。


オーバービューに戻る

TOPに戻る
Copyright 1998 SEGA Enterprises, LTD.