JPH10207870A - ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法 - Google Patents
ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法Info
- Publication number
- JPH10207870A JPH10207870A JP9285854A JP28585497A JPH10207870A JP H10207870 A JPH10207870 A JP H10207870A JP 9285854 A JP9285854 A JP 9285854A JP 28585497 A JP28585497 A JP 28585497A JP H10207870 A JPH10207870 A JP H10207870A
- Authority
- JP
- Japan
- Prior art keywords
- vector
- register
- srb
- processor
- vra
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 239000013598 vector Substances 0.000 title claims abstract description 590
- 238000004590 computer program Methods 0.000 title claims abstract description 19
- 238000000034 method Methods 0.000 title claims description 47
- 239000011159 matrix material Substances 0.000 claims description 20
- 238000003860 storage Methods 0.000 claims description 17
- 230000009977 dual effect Effects 0.000 claims description 10
- 230000008878 coupling Effects 0.000 claims 1
- 238000010168 coupling process Methods 0.000 claims 1
- 238000005859 coupling reaction Methods 0.000 claims 1
- 230000006870 function Effects 0.000 description 73
- 238000007667 floating Methods 0.000 description 50
- 102100032467 Transmembrane protease serine 13 Human genes 0.000 description 42
- 238000012545 processing Methods 0.000 description 38
- 238000010586 diagram Methods 0.000 description 14
- 238000006243 chemical reaction Methods 0.000 description 12
- 230000000295 complement effect Effects 0.000 description 10
- 238000004364 calculation method Methods 0.000 description 9
- 230000003111 delayed effect Effects 0.000 description 9
- 230000004888 barrier function Effects 0.000 description 8
- 230000008569 process Effects 0.000 description 8
- 238000004519 manufacturing process Methods 0.000 description 7
- 101000641224 Homo sapiens Vimentin-type intermediate filament-associated coiled-coil protein Proteins 0.000 description 6
- 102100034331 Vimentin-type intermediate filament-associated coiled-coil protein Human genes 0.000 description 6
- 230000001343 mnemonic effect Effects 0.000 description 6
- 230000002829 reductive effect Effects 0.000 description 6
- 238000009825 accumulation Methods 0.000 description 5
- 238000000605 extraction Methods 0.000 description 5
- 230000014509 gene expression Effects 0.000 description 5
- 238000012546 transfer Methods 0.000 description 5
- 101100178280 Rattus norvegicus Homer1 gene Proteins 0.000 description 4
- 239000008186 active pharmaceutical agent Substances 0.000 description 4
- 230000008859 change Effects 0.000 description 4
- 238000004891 communication Methods 0.000 description 4
- 238000013507 mapping Methods 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 230000036961 partial effect Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 101100011399 Danio rerio eif3ea gene Proteins 0.000 description 2
- 102000008016 Eukaryotic Initiation Factor-3 Human genes 0.000 description 2
- 101150008815 INT6 gene Proteins 0.000 description 2
- 230000003247 decreasing effect Effects 0.000 description 2
- 230000007717 exclusion Effects 0.000 description 2
- 238000003780 insertion Methods 0.000 description 2
- 230000037431 insertion Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 238000005192 partition Methods 0.000 description 2
- HSCMOVCUZWPGDL-UHFFFAOYSA-N (9-methyl-3,9-diazabicyclo[3.3.1]nonan-3-yl)-phenyldiazene Chemical compound CN1C(C2)CCCC1CN2N=NC1=CC=CC=C1 HSCMOVCUZWPGDL-UHFFFAOYSA-N 0.000 description 1
- UOTMYNBWXDUBNX-UHFFFAOYSA-N 1-[(3,4-dimethoxyphenyl)methyl]-6,7-dimethoxyisoquinolin-2-ium;chloride Chemical compound Cl.C1=C(OC)C(OC)=CC=C1CC1=NC=CC2=CC(OC)=C(OC)C=C12 UOTMYNBWXDUBNX-UHFFFAOYSA-N 0.000 description 1
- 101100298412 Arabidopsis thaliana PCMP-H73 gene Proteins 0.000 description 1
- 238000012935 Averaging Methods 0.000 description 1
- 102100022511 Cadherin-like protein 26 Human genes 0.000 description 1
- 102100028918 Catenin alpha-3 Human genes 0.000 description 1
- 101000899450 Homo sapiens Cadherin-like protein 26 Proteins 0.000 description 1
- 101000916179 Homo sapiens Catenin alpha-3 Proteins 0.000 description 1
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- 102100030206 Integrator complex subunit 9 Human genes 0.000 description 1
- 101710092893 Integrator complex subunit 9 Proteins 0.000 description 1
- 101100317378 Mus musculus Wnt3 gene Proteins 0.000 description 1
- 101100176188 Onchocerca volvulus gmr-1 gene Proteins 0.000 description 1
- 108091027981 Response element Proteins 0.000 description 1
- 101000767160 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) Intracellular protein transport protein USO1 Proteins 0.000 description 1
- 230000004075 alteration Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000005266 casting Methods 0.000 description 1
- 239000011248 coating agent Substances 0.000 description 1
- 238000000576 coating method Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- -1 int9 Proteins 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000000765 microspectrophotometry Methods 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 235000019799 monosodium phosphate Nutrition 0.000 description 1
- 101150096366 pep7 gene Proteins 0.000 description 1
- 238000013215 result calculation Methods 0.000 description 1
- 229920006395 saturated elastomer Polymers 0.000 description 1
- 238000009738 saturating Methods 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 101150091813 shfl gene Proteins 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 239000011800 void material Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/22—Microcontrol or microprogram arrangements
- G06F9/28—Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Devices For Executing Special Programs (AREA)
- Complex Calculations (AREA)
- Advance Control (AREA)
Abstract
二重スレッドプログラムを記録するに一番適したC++
言語の母集合の新しいプログラム要素を提供し、且つ効
率的なプログラミングと最適のMSP対象コード発生を
容易にするコンピュータプログラムの生成方法に関す
る。 【解決手段】 MSPプログラミングモデルによれば、
ARM7プロセッサはVPを制御し得るが、VPはAR
M7プロセッサを制御することができない。ARM7プ
ログラムはVPに課題をスケジューリングし、この課題
と同期を保持する役割を果たす。この目的のために2つ
の構成がVIVIDに提供される。また、MSPのフォ
ーク/ジョインモデルをVIVIDプログラマに示すこ
とにより、C++要素拡張を通じた二重スレッド実行を
容易にするとともに、ベクトル演算から多数の回帰結果
を容易に獲得する構文または意味論を含む。
Description
言語で記録されたプログラムから実行可能なコードを生
成するもので、より詳しくは高級言語で作成されたプロ
グラムからベクトルプロセッサの実行可能コードを生成
するコンピュータプログラム生成方法に関する。また、
本発明は高級言語で作成されたプログラムから並列実行
可能コードを発生するものである。
トル演算ではごく限られた機能を提供できるに過ぎな
い。C言語はBrian W. KernighanとDennis M. Ritchie
の“Theprogramming language”(Englewod Cliffs,N.
J.:Prentice-Hall,Inc.1978) に記述されており、C+
+言語はStephen C. Dewhurst Kathy とT. Starkの“Pr
ogramming in C++”(Englewod Cliffs,N.J.:Prentice-H
all,Inc.1989) に記述されており、これらの内容は本発
明で参照として引用される。例えば、C/C++言語と
してのベクトルはそれぞれの要素レベルで接近可能であ
る。即ち、vector aをvector b に加算してその結果
をvector c に格納するためには、vector aとvector
b の各要素を通じて繰り返してその結果をvector c
の対応要素に格納するループを作成しなければならな
い。このような演算のC/C++コードは下記のように
表現されることができる。
下記のように宣言文で単一指定演算によって初期化され
得ることである。 int vector a[10] = [10, 8, 3, 5,
7, 23, 12, 1, 0, 9];
ッサは要素の集合としてよりは単一要素としてベクトル
全体に作用するいろいろの命令文を支援する。このよう
な命令文を生成するにはベクトル演算を行うプログラム
コンパイラがvector a とvector b の加算の場合に与
えられた上記例のようなコードからベクトル演算を認識
すべきである。従って、コンパイラによるベクトル演算
の認識を容易にする高級言語が必要である。これと共
に、プログラマが2つのプロセッサ間の疎通を制御する
ようにする高級インタフェースを設けることが好まし
い。
で作成され、ベクトルオペランド(operand) をもってお
り且つ文章を具現する一つ以上の第2命令語を含む実行
可能プログラムを生成する一つ以上の文章を含むプログ
ラムを読み出すことにより、ベクトルプロセッサによっ
て実行されるように構成されたコンピュータプログラム
の生成方法を提供することにある。
とRISCプロセッサを備える二重プロセッサのための
二重スレッド(thread)されたコンピュータプログラムの
生成方法を提供することにある。
に、本発明によれば、ベクトルプロセッサで実行するコ
ンピュータ判読可能媒体にコンピュータプログラムを生
成するコンピュータプログラム生成方法は、ベクトルプ
ロセッサで処理されるどの種類の演算をも指定しない高
級言語で記述されたコンピュータプログラムを読み取る
コンピュータシステムである。このプログラムは、ベク
トル型の値を含み、オペランドとして前記ベクトル型値
を含む第1演算を備え、この第1演算はベクトルオペラ
ンドを持つことが可能なベクトルプロセッサ命令VPI
1に対応する。そして、コンピュータシステムは、第1
演算で処理される1以上のベクトルプロセッサ命令を生
成し、1以上の命令は1以上のVPI1命令を含む。
ベクトル二重スレッドプログラムを記録するに適したC
++言語の母集合の新しいプログラム要素を提供し、且
つ効率的なプログラミングと最適のMSP対象コード発
生を容易にする構文論または意味論的に新しい言語構成
を開始する。VIVID状態でVECTOR及びGMA
SKのような新しいデータ型とともに@shfl、@a
vgのようにMSP命令語に直接マッピングされる演算
子集合を開発し、MSPのフォーク/ジョインモデルを
VIVIDプログラマに露出させることにより、C++
要素拡張を通じた二重スレッド実行を容易にする。これ
と共に、本発明はVD@@VC=VA@shflVBの
ようにベクトル演算から多数の回帰結果を容易に獲得す
る構文または意味論を含む。
ミング言語を取り扱う。この実施例では、新しい言語構
成としてベクトルプロセッサの命令語集合をプログラマ
に露出させる一方、プログラムがベクトルプロセッサの
プログラミングモデルに応じて高級C++コードを作成
し得るようにする。前記言語はデータ型と前記新言語構
成を含んでANSI及びC/C++言語へのベクトル拡
張を規定する。また、前記言語は低級(low-level) ハー
ドウェア特徴を高級プログラマに露出させるために拡張
言語としてインタフェースを提供することにより、最適
のベクトル命令を発生するに当たってコンパイラを支援
する。
インタフェースを提供して、プログラマが前記2つのプ
ロセッサ間の疎通を制御するようにする。前記言語はこ
のような疎通を制御する命令を露出させる。従って、実
施例によれば、前記高級言語は補助プロセッサを活性化
するように主プロセッサを指導するフォーク(fork)命令
を露出させる。また、前記言語は前記補助プロセッサが
活性化されて行った課題を完了したという事実を主プロ
セッサに信号するように補助プロセッサを指導するジョ
イン(join)命令を露出させる。
プロセッサMSP(登録商標)上にプログラムを記録す
るためのC++に基づいたベクトル化プログラミング言
語を意味する略字である。MSP(登録商標)はカリフ
ォルニア州サンホセに位置する三星半導体によって開発
されたベクトルプロセッサである。このプロセッサは
“Single-Instruction-Multiple-DataProcessing in a
Multimedia Signal ”という発明の名称をもってルツロ
ングヌエンを出願人にして1996月8月19日付けで
出願された米国特許出願第08/699,597号の出
願明細書に記載されている。この米国特許出願明細書の
内容は本発明で参照として引用される。図3を参照する
と、MSP(登録商標)300はキャッシュメモリ33
0によって結合された、本文ではベクトルコプロセッサ
(co-processor)VCPと命名されたベクトルプロセッサ
VP320と主プロセッサARM7(310)を含む。
準ANSIC/C++言語を拡張して二重スレッドベク
トル化様式におけるプログラミングを効率的で直観的に
し、且つ効率的で最適化したMSP命令コードの発生時
にコンパイラを支援する。これにより、VIVIDはベ
クトルプロセッサの高級言語インタフェースを提供す
る。高級言語インタフェースはベクトルプロセッサ32
0の命令語集合を一般コンピュータを用いるソフトウェ
ア開発者に明示するものであり、付録A〜FにMSPプ
ロセッサに対する説明とARM7及びVP命令語集合を
提示した。本発明への使用に適したコンパイラはカリフ
ォルニア州サンタクルーズ所在のMetaware会社の製品で
ある。図2は高級言語で作成された実行可能なプログラ
ムを発生する過程を示す。まず、段階200でVIVI
Dコンパイラ(図示せず)が高級言語を読み出した後、
段階210で高級言語プログラムがVIVID(即ち、
ベクトル)命令語を含むか否かを決定する。もし、プロ
グラムがベクトル命令を含まなければ、VIVIDコン
パイラによる以後の動作が不要になり、C/C++コン
パイラは前記プログラムをコンパイル(compile) する。
もしこのプログラムがVIVID命令を含むなら、この
命令は段階220でベクトルプロセッサによる実行可能
なプログラムで翻訳される。
+言語を拡張する。
er 前記宣言文はベクトル_識別者が所定要素数のベクトル
であることを宣言する。ベクトルは一般に同一の《要素
データ型》の複数変数または定数である。一部の実施の
形態ではこのような変数或いは定数はコンピュータ記憶
装置の論理アドレス空間に連続的に格納される。ベクト
ルの〈要素数〉はMSPハードウェアの処理系と関係が
ない。要素数は奇数或いは素数を含んだいずれの数も可
能である。VIVIDコンパイラはコードを発生する。
例えば、MSPの現在のハードウェアの処理系は329
−ビットバイト(各バイトの9番目のビットは下記に説
明された通りにバイト9データ型と関連のない演算では
無視される)を有するベクトルのそれぞれを支援する。
宣言文における要素数は20,50,128或いはこれ
より大きい場合もある。
は128であり、ハードウェアの処理系は32バイトベ
クトルを使用すると仮定し、且つVIVIDプログラム
は下記の文章を含むと仮定する。
記のコードを発生する。前述のアセンブラフォーマット
及びベクトルプロセッサ命令は付録Fに記述されてい
る。VIVID文章VC=VA+VBは下記のVIVI
D“関数構文”文章で置き換えることができる。
ドを発生する。 VLI.w SR1, VA address// ベクトルVAのアドレスを
スカラレジスタSR1にロードする。スカラレジスタは
付録Cに記述されている。 VL.w VR1,SR1, 0// VAの一番目の8つの単語(32
バイト)をベクトルレジスタVR1にロードする。ベク
トルレジスタは付録Cに記述されている。
をロードする。 VL.w VR3,SR1, 16//3番目の32バイトをロードす
る。 VL.w VR4,SR1, 24//4番目の32バイトをロードす
る。 //VBデータをロードする。 VLI.w SR2,VB address VL.w VR11,SR2, 0 //一番目の32をロードする。 VL.w VR12,SR2, 8// 2番目の32をロードする。 VL.w VR13,SR2, 16//3番目の32をロードする。 VL.w VR14,SR2, 24//4番目の32をロードする。 //128バイトベクトル全体に対するベクトル加算を行
う。
ジスタSR1にロードされる。その後、VAの全ての要
素はそれぞれロジックメモリのそれぞれのロケーション
で32バイト(VAの8つの要素)を格納するベクトル
レジスタVR1〜VR4にロードされる。VL命令は基
本スカラレジスタとこのレジスタに格納されているアド
レスに加算された即値(immediate) オフセット値を用い
てロジックメモリロケーションを参照する。所定の即値
(immediate value) はレジスタのアドレスとしてよりは
命令の一部としてCPUに供給されるオペランドであ
る。明確性を期するために、VPアセンブリコードにお
ける即値としてのオペランドは“#”と前提される。そ
の後、VBは類似の過程を経てベクトルレジスタVR1
1〜VR14にロードされる。最後に、VR1〜VR4
及びVR11〜VR14は要素別に加算され、その結果
はベクトルレジスタV20〜V23に格納される。
値がベクトルの各要素に加算されるとしたら、下記のV
IVID文章は加算を行う。 VECTOR <int,8>VC,VA; int,x VC = VA + x; VC = vsadd<VA,x>;//関数構文 VIVIDコンパイラのレジスタ割当器はコードの発生
に際して状況や発見的解決方法(heurisitics) に依存し
て互いに異なるベクトルレジスタを割り当てるか或いは
同一のレジスタを再使用することにより任意的に大きい
ベクトル具現する。レジスタ割当部が現在MSPの処理
系をもって効率的に行うためには_VECTOR宣言文
においてベクトル要素数の固定上限は256バイトであ
る。しかし、他の実施の形態ではベクトルの要素数に対
する限界が異なり、本発明は特定ベクトル要素数に限定
されない。
+言語の“第1市民”として取り扱われ、原始的なデー
タ型を期待するC++のSTRUCTS,UNIONS
及び他の構成内に現すことのできるものである。_VE
CTORデータはパラメータとしてパスされて結果に帰
還する。
のように示される。 コンパイラは宣言された_VECTORサイズに基づい
た構造に対してメモリを充分割り当てなければならな
い。この時、“第1市民”状態は_VECTOR型と他
のデータ型間の型キャスト及び変換が許容されることを
意味するのではない。
ECTORオペランドを有するVIVID文章は全ての
ベクトルオペランドが同一のデータ型及び同一の要素数
になるべきであり、_VECTORオペランドの要素デ
ータ型は符号のある量(signed quantity) でなければな
らない。
matrix identifierこの構成は変数“matrix identifi
er”が所定要素数のマトリックスであることを宣言す
る。マトリックスは多次元ベクトルである。本発明は便
宜上2次元マトリックスを記述する。しかし、当業者に
は2次元以上のマトリックスを含むために本説明を拡張
する方法が明らかなものである。行または列当たり要素
数はMSPハードウェアの処理系とは関係なく、奇数ま
たは素数を含んでいずれの数でも構わない。従来技術に
よれば、VIVIDにおいて全ての_MATRIX演算
は先行優先(row major) 方式で前記要素に作用する。即
ち、要素単位演算はまず第1行の全ての要素に作用し、
その後第2行の全ての要素に作用する。VIVIDコン
パイラはVPのベクトルレジスタに_MATRIXを割
り当てるためにコードを発生する。各ベクトルレジスタ
は所定の行または所定の行の一部を含む。例えば、下記
のVIVIDコードが在る。
ックスのそれぞれを割り当て、各ベクトルレジスタは8
整数要素を含む。ここで、便宜上Aマトリックスを含む
レジスタをVA1〜VA8、Bマトリックスを含むレジ
スタをVB1〜VB8、Cマトリックスを含むレジスタ
をVC1〜VC8と称し、これらレジスタはVC=VA
+VBのための前記例においてベクトルVA,VBに使
われる同一の図式を用いるマトリックスA,B,Cの値
をロードすると仮定する。コンパイラによって発生する
MSPコードは下記の通りである。
要素(同一の指数(index) を有する要素)に加算され、
その結果は_MATRIX MCの対応要素に格納され
る。
タ型に定義された演算は加算、減算、乗算、平均に限定
される。加算、減算、乗算は_MATRIXオペランド
の同一の指数値を有する要素上に要素単位で行われた従
来の算術演算である。平均は2分割による加算を含む。
しかし、他の実施の形態では_MATRIXデータ型上
に他の命令を定義し、本発明は_MATRIXデータ型
上に定義された演算の所定の集合に限定されない。
トデータ型byte9を提供する。このデータ型は発生
する命令が全てbyte9モードの場合を除いては大部
分の場合に無効(char)として取り扱う新しいデー
タ型であってVIVIDから支援される。例えば、VI
VIDにおける下記の文章は下記の命令文を生成する。
C; VC=VA @mad VB; はコード VMAD. b9 VC,VA,VB;を発生する。
リマスク(memory mask) と呼ばれる2つの特殊データ型
を定義することにより、C言語を拡張する。この要素マ
スクはベクトルALU演算で作用する有効要素を定義す
る特殊目的の32ビットスカラ値として取り扱われる
(要素マスクによって影響を受ける演算の全体目録は付
録Fを参照)。このマスクのビットはベクトルレジスタ
オペランドにおける対応バイトまたはbyte9(9ビ
ットバイト)がベクトルALU演算で使用するものであ
れば指定される。例えば、マスク1111000011
1100001111000011110000はAL
U演算用ベクトルオペランドのワード(4バイト)を交
互に(一つずつスキップしながら)選択する。残りの単
語は演算されない。もし要素マスクが定義されていない
なら、要素マスクによって影響を受ける演算はベクトル
の全ての要素に作用する(即ち、デフォールト(defaul
t) マスクはビットごとに論理値を有する)。下記のV
IVIDコードは要素マスクを宣言する。
ベクトルロード/格納動作に作用する有効要素を定義す
る特殊目的のスカラレジスタとして取り扱われる。メモ
リマスクが定義されていないなら、メモリマスクによっ
て影響を受ける演算はベクトルの全ての要素に作用する
(即ち、デフォールト(default) マスクはビットごとに
論理値を有する)。下記のVIVIDコードはメモリマ
スクを宣言する。
要素が共に加算される。 VECTOR<int,8>VB:{1,2,3,4,5,6,7,8 }; VECTOR<int,8>VC:{11,12,13,14,15,16,17,18 }; VECTOR<int,8>Vd:{1,1,1,1,1,1,1,1,}; EMASK = OxFOFOFOFO;// このhex パターンは2進数 // 11110000111100001111000011110000 である。 VD = VB + VC; 従って、先行コードセグメント実行後には VD ={12,1,16,1,20,1,24,1 }。
の初期化の同一の形態を使用する。即ち、ベクトルまた
はマトリックスを初期化するためには下記のように宣言
文にデータを規定する。 VECTOR <int,8> A ={100,27,28,29,30,31,32,33}; MATRIX <int,2,2> M ={4,5,6,7 }; マトリックスは先行優先方式で演算されるので、前記宣
言文は下記のように要素に値を割り当てる。
値は0から行番号−1まで変わり、j値は0から列番号
−1まで変わる。
コードを発生するコンパイラを支援するために、VIV
IDは特殊命令として利用可能な多数の特殊ベクトル演
算に高級プログラミングインタフェースを提供する。こ
のような演算は下記のように表すことができる。
iを有するVBの要素に加算して中間和を発生した後、
VAのi番目の要素の符号(要素値が陽であれば1、陰
であれば−1、0であれば0)を中間結果に加算し、2
つのベクトル引数(augument)として呼び出されると、こ
の値をVCのi番目の要素に格納する。この関数はスカ
ラsを指数iを有するベクトルVAの各要素に加算して
中間和を発生した後、VAのi番目の要素の符号を中間
結果に加算し、一つのベクトルと一つのスカラ引数で呼
び出されると、この値をVCのi番目の要素に格納す
る。
VAの各要素を指数i+1を有する要素に加算し、その
和をベクトルVCの指数iを有する要素に格納する。も
し@addhが2つのベクトルオペランドとして呼び出
されると、ベクトルVAの最終要素はベクトルVBの第
1要素に加算され、ベクトルVCの最終要素に格納され
る。もし@addが一つのベクトルと一つのスカラオペ
ランドとして呼び出されると、VAの最終要素はスカラ
オペランドに加算され、その結果はVCの最終要素に格
納される。この内容は下記のVPコードを発生する。 VADDH.w VR3,VR1,VR2//VR1,VR2,VR3は //それぞれVA,VB,/VC を格納する。 VADDH.w VR2,VR1,SR1//VR1,VR2,SR1は //それぞれVA,VC,s を格納する。
トルVCに格納する。VAとVBの対応ビットの全てが
論理値である時のみがVCのビットは論理値であり、そ
うでなければVCビットは論理0である。この内容は下
記のVPコードを発生する。 VADN.w VR3,VR1,VR2//VR1,VR2,VR3 は //それぞれVA,VB,VCを格納する。
トルVCに格納する。VAとVBの対応ビットのうちい
ずれか一つが論理値である時のみがVCのビットは論理
値であり、そうでなければVCビットは論理0である。
この内容は下記のVPコードを発生する。 VOR.w VR3,VR1,VR2 // VR1,VR2,VR3はそれぞれVA,VB,VC
を格納する。
ベクトルVCに格納する。VAとVBの対応ビットのう
ち全てではないいずれか一つが論理値である時、VCの
ビットは論理値であり、そうでなければ、VCビットは
論理0である。この命令文は下記のMSPコードを発生
する。 VNOR.w VR3,VR1,VR2 // VR1,VR2,VR3 はそれぞれVA,VB,
VCを格納する。
で右側に算術的移動を行う。算術移動は毎要素の符号が
保存される移動演算である。符号のある整数は2の補数
で表す。_vasrの場合、符号は移動によって空の最
上位ビットの位置に適当な数の0或いは1(0は負でな
い数に、1は負の数に)を挿入することにより保存され
る。_vaslの場合、空の最下位ビットは0で充填さ
れる。その符号はオーバフローの(即ち、符号ビットが
溢れた)場合、その値を最大陰数(最上位ビットで一つ
の1と全ての0)或いは最大陽数(最上位ビットで一つ
の0と全ての1)に飽和(代替)させることにより保存
される。例えば、ベクトルVAの要素が2進数01
0...0,即ち230と1ビット左に移動したベクトル
の要素を有するなら、この要素の値は100...0,
即ち231である。この要素に格納された値の符号がその
要素値を変えないようにするために、その要素値は予め
格納された値と同一の符号を有する最大正数或いは最小
負数、即ち231−1に代替される。この内容は下記のV
Pコードを発生する。 VASR.w VR2,VR1,SR1 // 右への移動。VR1,VR2,SR1 は // それぞれVA,VC,s を格納する。 VASL.w VR2,VR1,SR1 // 左への移動。VR1,VR2,SR1 は // それぞれVA,VC,s を格納する。
指数iを有するベクトルVAの要素値から減算して、2
つのベクトル引数で呼び出されたなら、減算結果の絶対
値をベクトルVCのi番目の要素に格納する。この関数
はスカラs値をベクトルVAのi番目の要素値から減算
して、一つのベクトル及び一つのスカラ引数で呼び出さ
れたなら、この結果の絶対値をベクトルVCのi番目の
要素に格納する。この命令文はそれぞれ下記のMSPコ
ードを発生する。 VASUB.w VR3,VR1,VR2 // VR1,VR2,VR3は //それぞれVA,VB,VCを格納する。 VASUB.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,s を格納する。
のベクトル引数で呼び出されたなら、その結果をベクト
ルVCに格納する。この関数はスカラs値としてベクト
ルVAの各要素を平均して、一つのベクトル及び一つの
スカラ引数で呼び出されたなら、その結果をベクトルV
Cに格納する。この命令文はそれぞれ下記のMSPコー
ドを発生する。 VAVG.w VR3,VR1,VR2 // VR1,VR2,VR3 は //それぞれVA,VB,VCを格納する。 VAVG.w VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,s を格納する。
VAの各要素と指数i+1を有する要素の平均を計算し
て、ベクトルVCの指数iを有する要素にその値を格納
する。ベクトルVAの最終要素はベクトルVBの第1要
素と平均して、2つのベクトル引数で呼び出されたな
ら、ベクトルVCの最終要素に格納される。ベクトルV
Aの最終要素はスカラsと平均して、一つのベクトル及
び一つのスカラ引数で呼び出されたなら、ベクトルVC
の最終要素に格納される。この命令文はそれぞれ下記の
MSPコードを発生する。 VAVGH.w VR3,VR1,VR2 // VR1,VR2,VR3は //それぞれVA,VB,VCを格納する。 VAVGH.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,s を格納する。
VAの各要素と指数i+1を有するVAの要素と指数i
及びi+1を有するベクトルVBの要素との平均を計算
して、指数iを有するベクトルVCの要素にその結果を
格納する。ベクトルVCの最終要素は定義されない。こ
の命令文はそれぞれ下記のVPコードを発生する。 VAVGQ.w VR3,VR1,VR2 。
をベクトルVCの固定小数点要素に変換する。VCの各
要素は整数部分と端数部分に分けられる浮動小数点数で
あるが、整数部分はs最上初ビットを占め、端数部分は
残りのビットを占める。この内容は下記のVPコードを
発生する。 VCVTFF VR3,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,s を格納する。
トルVCの浮動小数点要素に変換する。前記文章は下記
のVPコードを発生する。 VCVTIF VR2,VR1 // VR1,VR2 は //それぞれVA,VC を格納する。
てその結果をマスクMに格納する。マスクMはベクトル
における各要素位置に対する所定のビット数を有する。
このビット数はデータサイズに左右される。一般に1ビ
ットはベクトルの各要素で各バイト或いはbyte9の
ためにある。例えば、intのサイズが4バイトである
ため、要素データ型int4ビットはマスクに割り当て
られる。i番目の要素位置に対応するマスクMの〈要素
データ型〉に左右されるビット数は、VAとVBのi番
目の要素に対するc−op演算がTRUE結果になれば
指定され、そうでなければリセットされる。マスクのビ
ットはベクトル要素と同一の位置に現れ、マスクMはE
MASK変数或いはMMASK変数である可能性があ
る。
カウントしてその値をベクトルVCの対応要素に記録す
る。この関数は下記のMSPコードを発生する。 VCNTLZ.w VR2,VR12N ベクトル除算 VECTOR<int,8>VC,VA; int i; VC = VA @div2n i; 関数構文 VC = vdiv2n(VA,i) この関数は2i でベクトルVAを割ってその結果をベク
トルVCに格納する。前記文章は下記のVPコードを発
生する。 VDIV2N VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,i を格納する。
ラsに格納する。この内容は下記のVPコードを発生す
る。
1)を抽出し、ベクトルVCの対応要素に格納する。も
し、VA要素が正であればその符号は1である。VA要
素が負であればその符号は−1である。もし@extsgn2が
使われると、0要素の符号は0である。この命令文は下
記のMSPをそれぞれ発生する。
素を移動し、その結果をVCに格納し、溢れた一番右側
要素はsaに格納する。VAの一番左側要素はsbが供
給する。同様に、関数@eslは図10に示すように、
1だけ左側にVAの要素を移動し、その結果をVCに格
納し、溢れた一番左側要素はsaに格納する。VAの一
番右側要素はsbが供給する。この内容は下記のVPコ
ードを発生する。
をs桁だけ行って0をもつ残りのビットを充填する。こ
の内容は下記のVPコードを発生する。 VLSL.w VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,s を格納する。 VLSL.w VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,s を格納する。
素を乗じてVCの対応要素を前記乗算の倍精度(double
precision)結果に加算し、2倍精度ベクトルVDの対応
要素に前記加算の倍精度結果を格納する。関数@mad
lは結果の下位部分(最下位ビット)のみが単精度ベク
トルVSに格納されることを除いては同一の機能を行
う。関数@mulはVAの各要素をVBの対応要素に乗
じて倍精度結果の上位部分(最上位ビット)をVCの対
応要素に、結果の下位部分をVSの対応要素に格納す
る。命令語@mulfはベクトルVAの各要素をVBの
対応要素に乗じ、倍精度結果を1ビット左に移動した後
その結果を倍精度ベクトルVDの対応要素に格納する。
命令語@mullはVAの各要素をVBの対応要素に乗
じて倍精度結果の下位部分(最下位ビット)をVSの対
応要素に格納する。前記関数は下記のVPコードを発生
する。
- 1,2- 3,4- 5,・・・)のそれぞれを比較して
ベクトルVCの奇数位置(VC[ 1] ,VC[3] ,V
C[ 5] ・・・)に要素の小さい部分を格納し、偶数位
置(VC[ 0],VC[ 2] ,VC[ 4] ・・・)に大
きい部分を格納する。前記文章は下記のVPコードを発
生する。 VMAXE.w VR2,VR1//VR1,VR2はそれぞれVA,VCを格納す
る。
転してその結果をベクトルVCに格納する。@rolで
はビットが左に(最下位ビットから最上位ビットへ)回
転し、@rorでは右に(最上位ビットから最下位ビッ
トへ)回転する。
る。 VROL.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,i を格納する。 VROR.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,i を格納する。
し、MSP命令語集合は2つのベクトルレジスタまたは
2つのスカラレジスタにその結果を回帰させる構造的概
念を支援する。従って、VIVIDは多数対象のための
特殊構文を提供して標準C++指定演算を拡張する。
的に移動してその結果をベクトルVBの対応要素に格納
する。@lslの場合、i最下位ビットが0で充填さ
れ、@lsrの場合、i最上位ビットが0で充填され
る。この関数は下記のMSPコードを発生する。 VLSL.w VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,i を格納する。 VLSR.w VR2,VR1,SR1 // 前記と同一。
素をシャフルしてその結果をベクトルVCとVDに格納
する。より詳しく説明すると、VBはVC:VD(V
C,VDの連鎖)の偶数要素(ワード0,2,・・・)
に格納され、VAは奇数要素に格納される。 VD[0] = VB[0],VD[2] = VB[1],...VD[14] = VB[7] VC[0] = VB[8],VC[2] = VB[9],...VC[14] = VB[15]; VD[1] = VA[0],VD[3] = VA[1],...VD[15] = VA[7] VC[1] = VA[8],VC[3] = VA[9],...VC[15] = VA[15]. この内容は下記のVPコードを発生する。 VSHFL.w VR3,VR4,VR1,VR2 // VR1,VR2,VR3,VR4は //それぞれVA,VB,VC,VD を格納する。
ちベクトルVAとVBをアンシャフルしてその結果をベ
クトルVCとVDに格納する。より詳しく説明すると、
VA:VBの偶数要素(ワード0,2,・・・)はVD
に複写され、VD:VAの奇数要素はVCに複写され
る。
ーバローディング _VECTOR演算子がC及びC++の標準データ型と
同一の構文を使用するようにするために、一部の演算子
はオーバロードされる。即ち、コンパイラがこの演算子
の一つを認識すると、適した機械語命令を発生するため
にオーバランドのデータ型を参照する。下記の事項は_
VECTORデータ型のためにオーバロードされた現C
/C++演算子の目録である。
ードされる。これは加算、減算、乗算、除算などを含
む。 下記のVIVIDコード: VECTOR<int,8>VC,VA,VB; VC = VA + VB; は下記のMSPコードを発生する。 VADD.w = VR3,VR1,VR2 // VR1,VR2,VR3 は // それぞれVA,VB,VCを格納する。 同様に、 VC = VA * VB; は VMUL.w VR3,VR1,VR2 // 前記と同様なことを発生する。 VC = VA - VB; は VSUB.w VR3,VR1,VR2 // 前記と同様なことを発生する。 VC = VA && VB は VAND.w VR3,VR1,VR2//前記と同様なことを発生する。
位移動を行う。前記式は最上位ビットに0が充填された
状態でベクトルVAの各要素がiビットずつ左又は右に
それぞれ移動することを示す。前記命令文は下記のMS
Pコードを発生する。 VLSR.w VR2,VR1,SR1 VLSL.w VR2,VR1,SR1。
る。 VECTOR<int,8>VC,VD,VA,VB; VD = VA * VB + VC; コンパイラは下記のMSPコードを発生する。 VMAD.w VR3,VR4,VR1,VR2平均 下記の式もコンパイラによって認識される。 VECTOR<int,8>VC,VA,VB; VC = (VA + VB)/2; コンパイラは下記のMSPコードを発生する。
即ち、 @extsgn VA @addh VB は下記のように解釈される: (@extsgn VA) @addh VB 2)@shufl @unshuflのように多数の結果を回帰する演
算子は単一結果を回帰する演算子に対して一番最後の優
先権をもつ。これは多数の結果が一番最後に生産された
結果であって、より少ない数のソースオペランドを期待
する演算との意味論的な葛藤を引き起こすことを保障す
るためである。
/右優先権が適用される。
する。宣言文はポインタの指すベクトルのサイズを提供
しなければならない。言い換えれば、_VECTORの
サイズはデータ型の必須部分として取り扱われ、宣言文
の一部として必要である。結果的にベクトルのポインタ
宣言文は下記の通りである。 VECTOR<int,16> * VA; 先行コードはVAが1632- ビット整数のベクトルに
対するポインタであることを宣言する。ANSICの標
準ポインタ算術はベクトルポインタによって支援され
る。従って、一例として、ベクトルポインタはベクトル
における特定要素を索引処理するのに用いるか、ベクト
ルアドレスを関数にパスするのに用いることができる。
ベクトルポインタの典型的な使用例は下記の通りであ
る。
するためには、ポインタ値に要素の索引を単純に加算し
て下記のように*演算子を用いる。 VECTOR<int,8> VA; int x; x = *(VA + 4); 前記コードはVAがスカラ変数xを指すベクトルで4番
目の要素を割り当てる。
する 前記VA宣言文があると仮定すると、下記のようにポイ
ンタを関数にパスすることができる。 DCT fn(VA); 前記DCT_f関数インタフェースは下記の構文を有す
る。 VIVIDの効率性を説明する一例をここで提示する。
2つのベクトルをシャフルするための下記のCプログラ
ムを参照。
令文として作成されることができる: VD @@ VC = VA @shfl VB;名前空間 全てのベクトルコプロセッサ(VCP)関数はVCP::fn
nameのようなVCP名前空間にある。従って、これら
はARM7プログラムから偶然呼び出されることができ
ない。また、I/OライブラリはVCP側の一つ及びA
RM7側の一つずつ2個の互いに異なるバージョンを有
する。VCPライブラリはVCP名前空間に属する。例
えば、VCPプログラムはVCP::fopen,VCP::fwriteなど
を使用し、ARMプログラムはfopen とfwriteを引き続
き用いてこれら関数のARM7バージョンを呼び出す。
拡張 VIVIDはベクトルプロセッサVPとARMプロセッ
サの全てのための二重スレッドプログラムを便利に作成
するようにし、2つのプログラム間の同期化及びコーデ
ィネーションを便利に管理するようにする拡張機能を提
供する。本発明に適した二重プロセッサをコーディネー
トし同期化する方法としては、“Coordination and Syn
chronization of an Asymmetric,Single-Chip,Dual Mul
tiprocessor ”という発明の名称でモアタズエイ、モア
メド、ハンチョルバック及びルツロングヌエンを出願人
として1996年8月26日付けで出願された米国特許
出願第08/ 703,434号の出願明細書に開示され
ており、この米国特許出願書の内容は本明細書で参照と
して引用される。VIVIDの提供される主な特徴はフ
ォーク/ジョイン(fork/join) メカニズム、バリヤ(bar
rier) 同期化、ロック(locks) 、セマホア(semaphore)
を介したタスキング(tasking) である。
遂行 MSPプログラミングモデルによれば、図1に示すよう
に、ARM7プロセッサはVPを制御し得るが、VPは
ARM7プロセッサを制御することができない。ARM
7プログラムはVPに課題をスケジューリングし、この
課題と同期を保持する役割を果たす。この目的のために
2つの構成がVIVIDに提供される。
実行し始め、ARM7プログラムはフォークの次の文章
を実行することである。フォーク文は下記の命令語を発
生する。 STARTVP.cond // 付録A参照 ジョイン文はVPが課題実行を終了したことをARM7
に知らせることを意味する。VIVIDのジョイン文は
下記の命令語を発生する。 VCJOIN.cond Offset //付録Aの参照。
実行するように保障されたプログラムのポイントが必要
であるが、このポイントはバリヤと呼ぶ。MSPの場
合、2つのプロセッサVP,ARM7がある。従って、
バリヤはバリヤに達しようとする第1プロセッサが他の
プロセッサを待つことを意味する。バリヤポイント以後
は両プロセッサが同時に実行する。バリヤ同期化はVS
YNCH,VPTEST,VCINT命令語を用いて具
現される。
rは所定変数がlock変数、即ちVPとARM7プロ
グラムとも共有データ構造に対する独占的な接近を獲得
するか、危険地域(critical section)を具現するために
使用する共有メモリの変数であることを宣言する。VI
VIDプログラムはLOCK構成を用いてロックに対す
る接近を要請する。この機能は基礎的なものであり、付
録Aに記述されたTESTSET命令文を用いて具現さ
れる。もしロックが獲得されなければ、プログラムはロ
ック変数を待ちながら、LOCK文の次に実行しない。
VIVIDUNLOCK文はロックを解除し、危険地
域、即ち相互排除を要求するコードの終わりを表示す
る。
のBNF文法 下記の文法はBackus-Naur Form(BNF) におけるVIVI
Dベクトル拡張構文を規定する。BNFはプログラミン
グ言語構文を記述するために用いられた形式上の表示で
ある。典型的なBNFは、終了シンボルとして知られた
トークン集合、非終了シンボル集合、分離子(::=)
と分離子の左側に非終了シンボル、分離子右側の一連の
トークン及び非終了シンボルを一つ以上含み、ORの左
右シンボルがその代わりに用いられることを指すOR
(ここでは’|’)によって分離されるプロダクション
(production)集合、非終了開始シンボルの指定など4つ
の成分を含む。
開始シンボルから開始され、最後は終了トークンで終わ
るプロダクション集合によって規定される。中間プロダ
クションは一番目のプロダクションにおける各非終了シ
ンボルを追加定義して結果的に各非終了シンボルが一連
の非終了シンボルで置き換えられるようにする。BNF
で規定された言語において、各文章はこれを記述するト
ークン目録を発生するために、開始シンボルから開示さ
れ、追ってのプロダクションによって一番目のプロダク
ションで各要素を代置することにより発生する。VIV
IDBNFはKernighan & Ritchie の付録Aに提示され
たANSIC要素の文法に基づき、ベクトル延長の全て
の構成及び変化は太い(bold)活字で表示される。
ッサ構造をCとC++でない他の高級言語で現す。この
高級言語はアセンブリ言語よりは高い水準の言語であ
る。この高級言語は少なくとも一つの命令文を含むが、
この言語はその命令文が機械語で具現される正確な方式
を規定しない。例えば、C言語コード int a,b,c; a = b + c; を見よう。この命令文は下記の機械語で記述することが
できる。ここで、A,B,Cは変数a,b,cの論理メ
モリアドレスを表示する。
クトルプロセッサにどのように格納されるかを規定しな
い。例えば、C言語プログラムが int a; を定義すると、変数aは主メモリまたはレジスタに格納
することができる。C言語プログラムがレジスタ利用可
能であってレジスタに変数を格納するように規定すると
しても、或いはレジスタに変数を実際格納するとして
も、具体的なレジスタはCプログラムでないCコンパイ
ラによって規定される。この高級言語の長所としては具
体的な機械語命令や変数格納方式などの詳細な具現方法
からプログラマの手数が省ける。
とともに、変数が正確にどこに、即ち主メモリ、レジス
タ、或いはあるレジスタに格納するかを決定する必要が
ない。しかし、効率的な機械語コード(迅速に実行され
る小さいコード)を生成するのにプログラマがコンパイ
ラを支援するようにすることができる。これはプログラ
マがベクトルプロセッサ(288ビットベクトル、by
te9)の支援データ型を定義するようにすることによ
り達成される。ベクトルがベクトルプロセッサによって
支援されないサイズを有するとしても、_VECTOR
文に規定されたサイズのベクトルを含むベクトルプロセ
ッサでコンパイラがベクトルの組合せを割り当てること
は簡単である。
ルプロセッサの命令語に対応する命令語を含む。もしC
命令文のオペランドが対応するベクトルプロセッサ命令
文を支援し得るデータ型を有するならば、コンパイラは
C命令文を対応するVP命令文に容易に変換することが
できる。もし前記オペランドのデータ型がVP命令文に
よって直接支援されないならば(例えば、オペランドが
64バイトでなく、70バイトのベクトル)コンパイラ
は対応するVP命令文を容易に幾度も用いてC命令文を
具現することができる。なお、図9、図11〜図14は
それぞれ、本発明の一部実施の形態に用いられるベクト
ルプロセッサの演算を説明するためのブロック図であ
る。
して説明したが、本発明は必ずしもこれに限定されるの
ではない。一部の実施の形態は他の演算集合を提供し、
2つ以上のプロセッサを備える。従って、特許請求範囲
によって示される本発明の精神や分野を離脱しない範囲
内での本発明の種々の改造または変形は本発明の範疇に
含まれる。
7命令語集合の拡張を示す。
検出されて報告されたARM7の例外処理目録である。
例外処理ベクトルアドレスは16進表記法で与えられ
る。
述する。命名法説明及び命令語フォーマットのためのA
RM構造文書またはARM7データシート(1994年
に発行された文書番号ARMDDI0020C)を参照
する。ARM構造はコプロセッサインタフェースのため
の3つの命令語フォーマットを提供する: 1.コプロセッサデータ演算(CDP) 2.コプロセッサデータ移動(LDC,STC) 3.コプロセッサレジスタ転送(MRC,MCR) MSP構造的拡張は3つの形式をいずれも利用する。コ
プロセッサのデータ演算フォーマット(CDP)はAR
M7に回帰する必要のない演算に用いられる。
約をもつ:
DC,STC)はベクトルプロセッサのレジスタの部分
集合をメモリに直接ロードするか格納することに用いら
れる。ARM7プロセッサはワードアドレスを供給する
ものであり、ベクトルプロセッサはデータを供給又は収
容して、転送されたワードの数を制御する。より詳細な
ことはARM7データシートを参照する。
をもつ:
(MRC,MCR)はARM7とベクトルプロセッサと
の間に直接的な情報通信のために用いられる。このフォ
ーマットはARM7レジスタとベクトルプロセッサスカ
ラまたは特殊レジスタとの間の移動に用いられる。
を持つ:
ss〉 CACHE{cond}Opc,〈Address〉 ここで、cond={eq,he,cs,cc,mi,
pl,vs,vc,hi,Is,ge,It,gt,l
e,ai,nv}、Opc={0,1,3}。LDC/
STCフォーマットのCRnフィールドがOpcの規定
に用いられるので、opcodeの十進数表記は必ず第
1構文で文字“c”を先行しなければならない(即ち、
0の代わりにcOを使用する)。アドレスモード構文の
ARM7データシートを参照する。
c〈3:0〉は次の演算を規定する: ・演算 EAの算出方法についてはARM7データシートを参照
する。 ・例外処理 ARM7保護違反。
pl,vs,vc,hi,ls,ge,lt,gt,l
e,ai,ns} ・説明 この命令語はCondが真の時にのみ実行される。この
命令語によってベクトルプロセッサは停止し、ARM7
はベクトルプロセッサの停止を待たず、次の命令語実行
し続ける。MFER作業中待機(busy-wait) ループはこ
の命令語実行後ベクトルプロセッサが停止したか否かを
チェックするのに用いられる。この命令語はベクトルプ
ロセッサが予めVP_IDLE状態にあれば、効力がな
い。 ビット19:12、7:15、及び3:0は予約され
る。 ・例外処理 ベクトルプロセッサ使用不可。
pl,rs,vc,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・r15},P
={0,1},ER={0,・・15}である。RNA
MEは構造的に特定レジスタニモニック(即ち、PER
0或いはCSR)を参照する。
M7レジスタRdは下の表に示すように、P:ER
〈3:0〉に規定された拡張レジスタERから移動す
る。拡張レジスタの説明のためのセクション1.2を参
照する。 ・例外処理 使用者モード時PERxアクセスを試みる時の保護違
反。
m,0 MFVP{cond} Rd,RNAME ここで、cond={eq,ne,cs,cc,mi,
pl,vs,vc,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・・r15},
CRn={c0,・・・c15},CRm={c0,・
・c15}である。RNAMEは構造的に特定レジスタ
ニモニック(即ち、SP0またはVCS)を参照する。
7レジスタRdはベクトルプロセッサのスカラ/特殊レ
ジスタCRn〈1:0〉:CRm〈3:0〉から移動す
る。レジスタ転送のためのベクトルプロセッサレジスタ
番号指定セクション3.2.3を参照する。CRn
〈3:2〉と共にビット7.5は予約される。ベクトル
プロセッサレジスタマップは次の表に示される。ベクト
ルプロセッサ特殊レジスタ(SP0〜SP15)のため
の表15を参照する。
の書込は無視する。 ・例外処理 ベクトルプロセッサ使用不可。
pl,rs,vc,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・r15},P
={0,1},ER={0,・・15}である。RNA
MEは構造的に特定レジスタニモニック(即ち、PER
0或いはCSR)を参照する。 ・説明 この命令語はCondが真の時にのみ実行される。AR
M7レジスタRdは下記の表に示すように、P:ER
〈3:0〉に規定された拡張レジスタERから移動す
る。
反。
0 MFVP{cond}Rd,RNAME ここで、cond={eq,ne,cs,cc,mi,
pl,rs,vc,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・r15},C
Rn={c0,・・c15}、CRm={c0,・・・
c15}である。RNAMEは構造的に特定レジスタニ
モニック(即ち、SP0或いはVCS)を参照する。
M7レジスタRdはベクトルプロセッサのスカラ/特殊
目的レジスタCRn〈1:0〉:CRm〈3:0〉から
移動する。CRn〈3:2〉とともにビット7:5は予
約される。ベクトルプロセッサレジスタマップは下記に
示される。
pl,rs,vc,hi,I s,ge,lt,gt,l
e,al,nv}、アドレスモード構文のARM7デー
タシートを参照する。 ・説明 この命令はCondが真の時にのみ実行される。EAに
よって規定されたキャッシュラインはARM7データキ
ャッシュにプリフェッチされる。 ・演算 EAの計算方式に関するARM7データシートを参照す
る。 ・例外処理 なし。
pl,vs,vc,hi,Is,ge,it,gt,l
e,al,nv} ・説明 この命令はCondが真の時にのみ実行される。この命
令はベクトルプロセッサが実行を開始し、自動的にVI
SRC〈vjp〉とVISRC〈vip〉をクリアする
ようにする。ARM7はベクトルプロセッサの実行開示
を待たず、次の命令を実行する。
われる前に所定の状態に初期化されるべきである。この
命令は前記ベクトルプロセッサが予めVP_RUN状態
にあれば、効力がない。ビット19:12、7:5、及
び3:0は予約される。 ・例外処理 ベクトルプロセッサ使用不可。
pl,rs,re,hi,ls,ge,It,gt,l
e,al,nv},Rd={r0,・・r15},ER
={0,・・15}。RANAMEは構造的にレジスタ
ニモニック(即ち,UER1或いはVASYNC)を参
照する。
令はUERxの内容をRDに戻り、UERx〈30〉を
1にセットする。ARM7レジスタ15が目的地レジス
タとして規定されると、UERx〈30〉はCPSRの
Zビットに戻って小さい作業中待機ループが具現される
ことができる。現在UER1のみがこの命令と動作する
ように定義されている。ビット19:17と7:5は予
約される。 ・例外処理 なし。
MFERとMTER命令語によってアクセスする拡張レ
ジスタを定義する構造からなっている。この拡張レジス
タは特権的な(privileged)拡張レジスタと使用者拡張レ
ジスタとを含む。特権的な拡張レジスタはマルチメディ
ア信号プロセッサの作動を制御するのに主に用いられる
もので、表B.1に示されている。
する。CTRの全てのビットはリセット時にクリアされ
る。前記レジスタ定義は表B.2に示されている。
もので、STRフィールドの全てのビットはリセット時
にクリアされる。このレジスタ定義は表B.3に示され
ている。
サのマルチメディア信号プロセッサ群れの特定プロセッ
サの特定バージョンを確認する。ベクトルプロセッサイ
ンタラプトマスクレジスタVIMSKは、プロセッサ3
10へのベクトルプロセッサ例外処理報告を制御する。
VIMSKの各ビットは、VISRCレジスタの対応ビ
ットと共にセットされる時、ARM7インタラプト例外
処理例外を可能にする。しかし、これはベクトルプロセ
ッサ例外処理が検出される方式の影響されず、この例外
処理がARM7をインタラプトするか否かにのみ影響さ
れる。VIMSKの全てのビットはリセット時にクリア
される。レジスタ定義は表B.4に示されている。
ARM7プログラムデバッギング処理を支援する。その
レジスタ定義は表B.5に示されている。
はARM7プログラムデバッギング処理を支援する。こ
のレジスタ定義は表B.6に示されている。
ブシステム330のSRAMを用いて形成されたスクラ
ッチパッドのアドレスとサイズを構成する。このレジス
タ定義は表B.7に示されている。
320の同期化のために主に用いられる。使用者拡張レ
ジスタはビット30にマップされ、現在只1つのビット
をもつように定義されており、例えば“MFERR1
5,UERx”のような命令語はビット値をZフラグ側
に戻す。UERx〈31〉及びUERx〈29:0〉は
常に0と読み取られる。この使用者拡張レジスタは表
B.8に記述されている。
スタの状態を示す。
スカラレジスタ;32個の288ビットベクトルレジス
タの2バック:1対の576ビットベクトル累算器レジ
スタ;32ビット特殊目的レジスタセットを含む。スカ
ラ、ベクトル、累算器レジスタは一般的なプログラミン
グのためのものであり、多くの多様なデータ型を支援す
る。
用いられる。:VRはベクトルレジスタを示す;VRi
はi番目のベクトルレジスタ( ゼロオフセット) を示
す;VR[i]はベクトルレジスタVRにおけるi番目
のデータ要素を示す;VR〈a:b〉はベクトルレジス
タVRでa,bビットを示す;VR[i]〈a:b〉は
ベクトルレジスタVRでi番目のデータ要素のa,bビ
ットを示す。ベクトル構造は所定のベクトルレジスタ内
に多数の要素のためのデータ型とサイズの加算寸法を有
する。ベクトルレジスタが固定サイズであるため、デー
タ要素数は要素のサイズに左右される。MSP構造は表
C.1に示すように5つの要素サイズを定義する。
とサイズによってベクトルデータを解釈する。現在2の
補数(整数)フォーマットは大部分の算術命令語でバイ
ト、バイト9、ハーフワード、及びワード要素サイズを
支援するる。また、IEEE754単精度フォーマット
は大部分の算術命令語のワード要素サイズで支援され
る。プログラマは命令語順序が意味のある結果を生む限
り、所定方式でデータを自由に解釈する。例えば、プロ
グラムが「間違った」オーバフロー結果を処理すること
ができるなら、プログラマは符号のない8ビット数を格
納するのにバイト9サイズを自由に使用することがで
き、同様にバイトサイズデータ要素において符号のない
8ビット数を格納し、これを2の補数算術命令語を用い
て演算することも自由である。
個のスカラレジスタがある。このスカラレジスタは32
ビット幅であり、定義されたサイズの一つのデータ要素
を含むことができる。スカラレジスタSR0は常に0の
32ビットを読み取り、書込は無視するために特殊であ
る。バイト、バイト9、及びハーフワードデータ型は定
義されない値を有する最上位ビットをもつスカラレジス
タの最下位ビットに格納される。前記レジスタはデータ
型指示器を持っていないため、プログラマは各命令語に
用いられるレジスタのデータ型を知るべきである。これ
が32ビットレジスタは32ビット値を含むと仮定され
る他の構造とは違う相違点である。MSP構造はデータ
型Aの結果がデータ型Aと定義されたビットのみを正確
に変更すると規定する。例えば、バイト9加算の結果は
32ビット目的地スカラレジスタの下位9ビットのみを
変更する。上位23ビットの値は命令語に言及されなか
ったなら、定義されない。
トレジスタを有する2バンクから構成される。バンク0
は第1の32レジスタを含み、バンク1は第2の32レ
ジスタを含む。前記2つの列は一つの列が現在バンクと
して指定され、もう一つの列が交互バンクとして指定さ
れる方式で用いられる。全てのベクトル命令語は交互バ
ンクベクトルレジスタをアクセスできるロード/格納及
びレジスタ移動命令を除いては、現在バンクレジスタを
使用する。ベクトル制御/状態レジスタVCSRのCB
ANKビットはバンク0またはバンク1が現在バンクと
して指定されるように用いられる。(他の列は交互バン
クになる。)現在バンクではベクトルレジスタはVR0
〜VR31として引用され、交互バンクではVRA0〜
VRA31と引用される。
2個のダブルサイズベクトルレジスタをそれぞれ提供す
るために合併される。制御レジスタVCSRのVEC6
4ビットはこのモードを規定する。VEC64モードに
おいて、現在バンクと交互バンクは無く、ベクトルレジ
スタ番号は前記2つのバンクから288ビットベクトル
ベクトル対を指す。即ち、 VRi〈575:0〉=VR1 i〈287:0〉:VR
0 i〈287:0〉 ここで、VR0 i及びVR1 iはそれぞれのバンク1及
びバンク0でレジスタ番号VRiを有するベクトルレジ
スタを指す。ダブルサイズベクトルレジスタはVR0〜
VR31として引用される。ベクトルレジスタは表C.
2に示すようにバイト、バイト9、ハーフワード、ワー
ドサイズの多数の要素を収容する。
混合することは支援されない。バイト9要素サイズを除
いては、288ビットの256のみが用いられる。特
に、毎9番目のビットは用いられない。バイト、ハーフ
ワード、及びワードサイズで用いられない32ビットは
予約され、プログラマはそれらの値に対してどんな仮定
もしてはいけない。
の結果より高い精度を有する中間結果とを格納するため
のものである。このベクトル累算器レジスタはVAC1
H,VAC1L,VAC0H、VAC0Lと命名される
4つの288ビットレジスタを有する。VAC0H:V
AC0L対は3つのレジスタが用いられる。VEC64
モードでのみ、VAC1H:VAC1L対が64個のバ
イト9ベクトル演算をエミュレートするのに用いられ
る。バンク1がVEC3モードで現在バンクとして指定
される時にも、VAC0H:VAC0L対が用いられ
る。ソースベクトルレジスタと同じ数の要素をもつ拡張
精度結果を発生するために表C.3に示すようにレジス
タ対にわたって拡張精度要素が保存されている。
びバイト)、ハーフワード、及びワードに対してそれぞ
れの要素数が64,32,16である可能性のあるVE
C64モードにのみ用いられる。メモリから直接ロード
されるか、或いはメモリに直接格納され得ない33個の
特殊目的のレジスタがある。RASR0〜RASR15
と引用された16個の特殊レジスタは内部戻りアドレス
スタックを形成し、サブルーチン呼出及び戻り命令語に
よって用いられる。17個の32ビット特殊レジスタは
表C.4に示されている。
は表C.5に示されている。
SRCは、ARM7プロセッサ310のインタラプトソ
ースを指す。適切なビットは例外処理検出時にハードウ
ェアによってセットされる。ソフトウェアはベクトルプ
ロセッサ320が実行を再開始する前にレジスタVIS
RCをクリアしなければならない。レジスタVISRC
にセットされたビットはベクトルプロセッサ320がV
P_IDLE状態に進入するようにする。対応するイン
タラプトイネーブルビットがVIMSKにセットされる
と、プロセッサ310のインタラプトが発生する。表
C.6はレジスタVISRCの内容を定義する。
NSは、VCINTまたはVCJOIN命令がARM7
プロセッサ310をインタラプトするために実行される
時、VCINTまたはVCJOIN命令とともにアップ
デートされる。ベクトルカウントレジスタVCR1,V
CR2,VCR3は、減少及び分岐(Decrement And Bra
nch)命令VD1CBR,VD2CBR,VD3CBRの
ためのものであり、実行されるループのカウントととも
に初期化する。命令VD1CBRが実行されると、レジ
スタVCR1は1だけ減少する。カウント値が0でな
く、命令に規定された条件がVFLAGと整合すると、
分岐を取る。そうでない場合は、分岐を取らない。いず
れの場合でもレジスタVCR1は1だけ減少し、レジス
タVCR2及びVCR3は同一の方式で用いられる。
R0は、VEC32モードで影響を受ける目的地ベクト
ルレジスタの要素と、VEC64モードでVR〈28
7:0〉内の要素を指す。VGMR0の各ビットは目的
地ベクトルレジスタで9ビットのアップデートを制御す
る。具体的に、VGMR0〈i〉は、VEC32モード
でVRd〈9i+8:9i〉のアップデートを制御し、
VEC64モードでVR0 d〈9i+8:9i〉のアッ
プデートを制御する。VR0 dはVEC64モードのバ
ンク0で目的地レジスタを指し、VRdはVEC32モ
ードでバンク0またはバンク1の現在バンクの目的地レ
ジスタを指す。ベクトルグローバルマスクレジスタVG
MR0はVCMOVM命令を除いた全ての命令の実行に
用いられる。
R1は、VEC64モードで影響を受けるVR〈57
5:288〉内の要素を指す。レジスタVGMR1の各
ビットはバンク1の目的地ベクトルレジスタで9ビット
のアップデートを制御する。具体的に、VGMR1
〈i〉はVR1 d〈9i+8:9i〉のアップデートを
制御する。レジスタVGRM1はVEC32モードでな
いVEC64モードで用いられ、VCMOVM命令を除
いた全ての命令の影響を与える。ベクトルオーバフロー
レジスタVOR0は、ベクトル算術演算後のオーバフロ
ー結果を含む、VEC32モードの要素とVEC64モ
ードのVR〈287:0〉内の要素を指し、このレジス
タはスカラ算術演算によって変更されない。セットされ
たビットVOR0〈i〉はバイトまたはバイト9のi番
目の要素、ハーフワードのiidiv2番目の要素、或
いはワードデータ型演算のiidiv4番目の要素がオ
ーバフロー結果を含むことを指す。例えば、ビット1及
びビット3はそれぞれ1番目のハーフワード及びワード
要素のオーバフローを指すようにセットされる。VOR
0のビットマッピングはVGMR0またはVGMR1の
ビットマッピングとは異なる。
は、ベクトル算術演算後のオーバフロー結果を含むVE
C64モードのVR〈575:288〉内の要素を指
し、このレジスタはVEC32モードで使用されず、且
つスカラ算術演算によって変更されない。セットされた
ビットVOR1〈i〉はバイトまたはバイト9のi番目
の要素、ハーフワードのiidiv 2番目の要素、ワ
ードデータ型演算のiidiv 4番目の要素がオーバ
フロー結果を含むことを指す。例えば、ビット1とビッ
ト3はそれぞれVR〈575:288〉で1番目のハー
フワード及びワード要素のオーバフローを指すようにセ
ットされる。VOR1のビットマッピングはVGMR0
またはVGMR1のビットマッピングとは異なる。ベク
トル命令アドレス区切り点レジスタVIABRは、ベク
トルプログラムのデバッギングに役に立つ。このレジス
タ定義は表C.7に示されている。
VDABRは、ベクトルプログラムの誤り訂正を支援す
る。このレジスタ定義は表C.8に示されている。
は、全ての命令語でVCSR〈SMM〉=1の時を含ん
で、常にVCMOVM命令語によって用いられる。レジ
スタVMMR0はVEC32モードで影響を受ける目的
地ベクトルレジスタの要素と、VEC64モードのVR
〈287:0〉内の要素を指す。VMMR0の各ビット
は目的地ベクトルレジスタで9ビットのアップデートを
制御する。具体的に、VMMR0〈i〉はVEC32モ
ードのVRd〈9i+8:9i〉のアップデート及びV
EC64モードのVR0 d〈9i+8:9i〉のアップ
デートを制御する。VR0 dはVEC64モードでバン
ク0の目的地レジスタを指し、VRdはVEC32モー
ドでバンク0またはバンク1の現在バンクの目的地レジ
スタを指す。
は、全ての命令語でVCSR〈SMM〉=1の時を含ん
で、常にVCMOVM命令語によって用いられる。レジ
スタVMMR1はVEC64モードで影響を受けるVR
〈575:288〉内の要素を指す。VMMR1の各ビ
ットはバンク1の目的地ベクトルレジスタで9ビットの
アップデートを制御する。具体的に、VMMR1〈i〉
はVR1 d〈9i+8:9i〉のアップデートを制御す
る。レジスタVGMR1はVEC32モードで用いられ
ない。
SYNCは、プロセッサ(310及び320)間の制作
者/消費者型同期化を提供する。現在ビット30のみが
定義されている。ARM7プロセスは命令語MFER,
MTER及びTESTSETを用いてレジスタVASY
NCをアクセスすることができる反面、ベクトルプロセ
ッサ320はVP_RUNまたはVP_IDLE状態で
ある。レジスタVASYNCはTVP或いはMFVP命
令語が第1の16ベクトルプロセッサの特殊レジスタを
超過してアクセスできないために、これを通じてARM
7プロセスにアクセスすることができない。ベクトルプ
ロセスはVMOV命令語を通じてレジスタVASYNC
にアクセスすることができる。表C.9は電源供給リセ
ット時のベクトルプロセッサの状態を示す。
命令を実行し得る前に、ARM7プロセッサ310によ
って初期化される。
a type) を暗示するか或いは規定する。一部の命令語は
一つ以上のデータ型と等しく適用される意味論(semanti
cs) を有する。また、一部の命令語はソースに対して所
定のデータ型を取り、その結果に対しては他のデータ型
を生成する意味論を有する。本付録は実施例の支援する
データ型を記述する。表1はint8,int9,in
t16,int32,浮動データ型を示し、符号のない
整数フォーマットは支援されず、符号のない整数は優先
的に使用前に2の補数に変換されるべきである。プログ
ラマとしてはオーバフローが適切に取り扱われる限り、
符号の無い整数或いはいずれか他のフォーマットを有す
る算術命令語を使用することは自由である。この構造は
2の補数整数及び32ビット浮動小数点データ型のオー
バフローを定義し、符号のないオーバフローの検出に必
要な8,9,16,または32ビット演算の実行を検出
しない。表D.1はロード(load)演算によって支援され
るデータサイズを示す。
境界上に規定する。即ち、バイトは指定要求がない。ハ
ーフワードは指定要求がハーフワード境界である。ワー
ドは指定要求がワード境界である。表D.2は格納(sto
re) 演算によって支援されるデータサイズを示す。
ータ型がレジスタにマッピングされるので、所定データ
型の結果を持たない目的地レジスタにビットが存在する
こともできる。実際に、ベクトル目的地レジスタ上のバ
イト9データサイズとスカラ目的地レジスタ上のワード
データサイズを除いては、その値が演算によって定義さ
れない目的地レジスタにはビットが存在する。このビッ
トはその値が定義されないように規定される。表D.3
はそれぞれのデータサイズに対して定義されないビット
を示す。
び目的地レジスタ或いはメモリのデータ型を必ず認知し
なければならない。所定の要素サイズから他のものへの
データ型変換はベクトルレジスタに格納される要素数を
異にすることもできる。例えば、ベクトルレジスタのハ
ーフワードからワードデータ型への変換は同一数の変換
された要素を格納することに2つのベクトルレジスタが
必要である。逆に、ベクトルレジスタに使用者定義フォ
ーマットを持つこともできるワードデータ型からハーフ
ワードフォーマットへの変換はベクトルレジスタの1/
2に同一数の要素を発生し、他の1/2に残りのビット
を発生する。いずれの場合でも、データ型変換はソース
要素とは異なるサイズの変換された要素の配列において
構造的な問題を引き起こす。
変化をもたらす演算を提供しない。これに対して、プロ
グラマは目的地レジスタで要素数の変化を認知していな
ければならない。この構造は所定のデータ型から同一サ
イズの他のデータ型に変換する演算のみを提供し、所定
のデータ型から異なるサイズのデータ型に変換する時、
プログラマがデータサイズ上の変化に適応することを要
求する。
UNSHFLLのような特殊命令語は第1データサイズ
のベクトルから第2データサイズのベクトルへの変換を
単純化させる。小さい要素サイズ、例えばベクトルVR
a でint8からより大きいサイズ、例えばint16
への2の補数データ型の変換時に伴われる基本的な段階
は次の通りである: 1.バイトデータ型を用いてVRa の要素とVRb の要
素を2つのベクトルVRc :VRd にシャフルする(shu
ffle) 。VRa の要素はダブルサイズレジスタVRc :
VRd でint16データ要素の下位バイトに移動す
る。これに関係の無い値であるVRb 要素はVRc :V
Rd の上位バイトに移動する。結果的に、この演算はバ
イトからハーフワードに各要素のサイズを倍増させ、V
Ra 要素の1/2をVRc に移動させ、その1/2をV
Rd に移動させる。 2.8ビットずつVRc :VRd の要素を算術けた送り
して符号拡張する。
でint16からより小さいサイズのint8への2の
補数データ型の変換時に伴われる基本的な段階は次の通
りである。
サイズで表現し得ることを確認しなければならない。場
合によって、小さいサイズに合うようにに両端の要素を
飽和させなければならない。 2.VRa の要素とVRb の要素を2つのベクトルVR
c :VRd にアンシャフル(unshuffle) する。VRa と
VRb の上位1/2はVRc に移動し、下位1/2はV
Rd に移動する。結果的に、これはVRa 要素の下位1
/2をVRd の下位1/2に集める。 下記のデータ型変換に特殊命令語が与えられる:単精度
浮動小数点に対するint32;固定小数点(X,Y表
示)に対する単精度浮動小数点;int32に対する単
精度浮動小数点;Int9に対するint8:int1
6に対するint9:int9に対するint16。
ために、大部分のベクトル命令語は要素マスクを使用し
てベクトル内の選択された要素のみを演算する。ベクト
ルグローバルマスクレジスタ(Vector Global Mask Regi
ster) VGMR0及びVGMR1は目的地レジスタとベ
クトル累算器でベクトル命令語によって変更された要素
を確認する。バイト及びバイト9データサイズ演算で
は、VGMR0(或いはVGMR1)の32ビットのそ
れぞれが演算される要素を確認する。指定されたビット
VGMR0〈i〉はバイトサイズの要素iが影響を受け
ることを指す。ここで、iは0から31までである。ハ
ーフワードデータサイズ演算ではVGMR0(或いはV
GMR1)の32ビットの各対が演算される要素を確認
する。指定されたビットVGMR0〈2i:2i+1〉
は要素iが影響を受けることを指す。ここで、iは0か
ら15までである。VGMR0で所定対の1ビットのみ
がハーフワードデータサイズ演算のために指定される
と、対応バイトのビットのみが変更される。ワードデー
タサイズ演算ではVGMR0(或いはVGMR1)の4
ビットの各セットが演算される要素を確認する。指定さ
れたビットVGMR0〈4i:4i+3〉は要素iが影
響を受けることを指す。ここで、iは0から7までであ
る。VGMR0で4ビットのセット中の全てのビットが
ワードデータサイズ演算のために指定されたものでなけ
れば、対応バイトのビットのみが変更される。
スタをベクトル或いはスカラレジスタと、或いはVCM
PV命令語を用いて即値と比較することにより指定す
る。この命令語は特定データサイズによってマスクを適
切に指定する。スカラレジスタは只一つのデータ要素を
含むように定義されるので、スカラ演算(即ち、目的地
レジスタはスカラである)は要素マスクによって影響を
受けない。ベクトルプログラミングにおける柔軟性のた
めに、大部分のMSP命令語は3つのベクトルとスカラ
演算形態を支援する。
場合に、スカラレジスタの単一要素は必要な分だけ複写
されてベクトルAオベランド内の要素の数と同じくな
る。前記複写された要素は特定スカラオペランド内の要
素と同等の値である。前記スカラオペランドは即値オペ
ランド形態でスカラレジスタ或いは命令語から獲得され
ることができる。即値オベランドの場合、特定データ型
が即値フィールドサイズで可能なものより大きいデータ
サイズを使用するなら、適宜に符号拡張が適用される。
ス、中間及び最終結果の精度に特別な注意が必要であ
る。また、整数乗算命令語は2つのベクトルレジスタに
格納されうる“倍精度”中間結果を生成する。MSP構
造は現在8,9,16,及び32ビット要素のための2
の補数整数フォーマット及び32ビット要素のためのI
EEE754単精度フォーマットを支援する。オーバフ
ローは特定データ型で表現され得る最大陽数或いは最大
陰数を超過する結果に定義される。オーバフローが発生
すると、目的地レジスタに書込まれた値は有効数でな
い。アンダーフローは浮動小数点演算にのみ定義され
る。
〈RMODE〉で規定された4つの四捨五入モードのう
ち一つを用いる。一部の命令語はround away from zero
(roundeven)) 四捨五入モードを使用する。この命令語
は明示されている。飽和(Saturation)はマルチメディア
適用例で重要な機能である。MSP構造は4つの整数の
全てと浮動小数点演算で飽和を支援する。レジスタVC
SRのビットISATは整数飽和モードを規定する。迅
速なIEEEモードとして知られた浮動小数点飽和モー
ドはVCSRでFSATと規定されている。飽和モード
がイネーブルされると、最大陽数或いは最大陰数値を超
過する結果はそれぞれ最大陽数或いは最大陰数に指定さ
れる。この場合、オーバフローは発生することができな
く、よって、オーバフロービットは指定されることがで
きない。表D.4は誤りのある命令語が実行される前に
検出されて報告された正確な例外処理(Precise Excepti
on) 目録である。例外処理ベクトルアドレスは16進表
記法で与えられる。
令語を実行した後、検出されて報告された不明確な例外
処理(Imprecise Exception) 目録である。
に11個の等級を含む。
示す。
援し、要素マスクによって影響を受ける。表E.3は流
れ制御命令語を示す。
nt8,int9,int16及びint32データ型
(浮動データ型除外)を演算し、要素マスクによって影
響を受ける。
8,int9,int16,int32、浮動データ型
を支援し、要素マスクによって影響を受ける。支援され
ないデータ型における制限事項は次の各命令語の説明を
参照する。VCMPV命令は要素マスクを演算するため
に、要素マスクによって影響を受けない。表E.5は算
術等級命令を示す。
に特に適した命令語目録であるが、多様な方式で用いら
れることができる。MPEG命令はint8,int
9,int16及びint32データ型を支援し、要素
マスクによって影響を受ける。表E.6はMPEG命令
語目録である。
rsion)命令は特定データ型を支援し、この構造はレジス
タで1つ以上のデータ型を支援しないために、要素マス
クに影響を受けない。表E.7はデータ型変換命令語目
録である。
9,int16,int32及び浮動データ型を支援す
る。表E.8は要素間算術等級命令目録である。
ハーフワード及びワードデータサイズを支援する。表
E.9は要素間移動等級目録である。
ト、ハーフワード、及びワードデータサイズとともに特
殊バイト9関連データサイズ演算を支援し、要素マスク
によって影響を受けない。表E.10はロード/格納等
級命令語目録である。
int16,int32,及び浮動データ型を支援し、
要素マスクの影響を受けない。VCMOVM命令のみが
要素マスクの影響を受けない。表E.11はレジスタ移
動等級命令語目録である。
0を制御するキャッシュ演算(CacheOperation) 等級命
令語目録である。
って特殊用語が用いられる。例えば、命令オペランドは
バイト、バイト9、ハーフワード、ワードサイズの符号
のある2の補数整数である。“レジスタ”という用語は
一般(スカラ或いはベクトル)レジスタであり、他の類
型のレジスタは明示されている。アセンブリ言語構文(s
yntax)では接尾詞b,b9,h,wはデータサイズ(バ
イト、バイト9、ハーフワード、ワード)と整数データ
型(int8,int9,int16,int32)を
指す。また、命令語オペランド、演算、アセンブリ言語
構文に記述するために用いられる用語及び記号は次の通
りである。
ワード、或いはワードデータサイズに対してVGMR0
/1,〜VGMR0/1,VMMR0/1,〜VMMR
0/1でそれぞれ2或いは4ビットを示す。スカラ演算
でエレメントマスクはEMASK[i]=0であっても
指定されると仮定する。 MMASK[i] i番目の要素の要素マスク。バイト、バイト9、ハーフ
ワード、或いはワードデータサイズに対してVMMR0
或いはVMMR1でそれぞれ1,2,或いは4ビットを
示す。 VCSR ベクトル制御/状態レジスタ VCSR〈x〉 VCSRにおけるビットを示す。
“x”ハーフィールド名である。 VPC ベクトルプロセッサプログラムカウンタ VECSIZE ベクトルレジスタサイズはVEC32モードで32であ
り、VEC64モードで64である。 SPAD スクラッチパッド。
記述するために用いられる。例外は次の通りである。 = 指定(assignment) : 連結(consatenation) {x‖y} xとy間の選択(論理和ではない) sex 特定データサイズへの符号拡張 sex_dp 倍精度の特定データサイズ符号拡張 sign 符号拡張された(算術的)右シフト zex 特定データサイズへのゼロ拡張 zero ゼロ拡張された(論理的)右シフト 左シフト(ゼロ充てん(fill in) ) trnc7 先頭7ビット(ハーフワードから)を打ち切る trac1 (バイト9から)先頭1ビットを打ち切る % モジュロ(modulo)演算者 |expression|式の絶対値 / 分割(浮動トデータ型は4つのIEEE四捨五入モード使用) // 分割(round away form zero四捨五入モード使用) 飽和() 整数データ型はオーバフローを発生する代わりに、最大の陽数 或いは最大陰数に飽和する。浮動データ型は陽の無限大、陽の ゼロ、陰のゼロ、或いは陰の無限大に飽和することができる。
ており、下記に説明される。REARフォーマットはロ
ード、格納、キャッシュ演算命令語が用いられ、REA
Rフォーマットのフィールドは表E.13に提示された
ように次の意味をもつ。
追っての拡張との互換性を保障しなければならない。
B:DとTTフィールドの所定符号化方式は定義されて
いない。この構造はこのような符号化方式が用いられる
時に期待される結果を規定しないために、プログラマは
この符号化方法を使用してはいけない。表E.14はV
EC32とVEC64モードの両方から支援される(L
TとしてTTフィールドで符号化された)スカラロード
演算を示す。
アされる時、VEC32モードで支援される(LTにT
Tフィールドで符号化された)ベクトルロード演算を示
す。
用いられる。表E.16はビットVCSR〈0〉がクリ
アされる時、VEC64モードで支援される(LTとし
てTTフィールドで符号化された)ベクトルロード演算
を示す。
クの概念が存在しないために、ビットBは64バイトベ
クトル演算の指示に用いられる。表E.17はVEC3
2及びVEC64モードの両方から支援される(STと
してTTフィールドで符号化された)スカラ格納演算を
示す。
アされる時、VEC32モードで支援される(STとし
てフィールドTTで符号化された)ベクトル格納演算を
示す。
される時、VEC64モードで支援される(LTとして
TTフィールドで符号化された)ベクトル格納演算目録
である。
の概念が存在しないために、ビットBは64バイトベク
トル演算の指示に用いられる。REAIフォーマットは
ロード、格納、及びキャッシュ演算命令が用いられる。
表E.20はREAIフォーマットにおけるフィールド
の意味を示す。
ransfer type) としては同一の符号化方式を用いる。さ
らに詳細な符号化方式についてはREARフォーマット
を参照する。
のレジスタ及び5ビット即値オペランドを提供する。表
E.21はRRRM5フォーマットフィールドを定義す
る。
追っての拡張との互換性を保障するために0でなければ
ならない。全てのベクトルレジスタオペランドは現在バ
ンクを参照する。(バンク0或いはバンク1のいずれか
であることができる)表E.22はDS〈1:0〉が0
0,01,10の時、D:S:M符号化目録である。
次の意味をもつ。
ペランドを提供する。表E.24はRRRRフォーマッ
トのフィールドを示す。
ジスタオペランドは現在バンクを参照する。(バンク0
またはバンク1のいずれかであることができる)R1フォーマット はロード即値命令語によってのみ用い
られる。表E.25はRIフォーマットのフィールドを
示す。
号化は定義されない。このような符号化が用いられる
と、期待した結果を規定しないために、プログラマはこ
の符号化を使用してはいけない。Rdにロードされた値
は表E.26に示すようにデータ型に左右される。
ールドを含む。
フィールドを用いる。オーバフロー条件はGT,EQ,
及びLTビットに先行するVCSR[ S0] ビットを用
いる。VCCSとVCBARRは前述とは異なり、Co
nd〈2:0〉フィールドを解釈する。これに対する詳
細な命令語説明を参照する。RRRM9フォーマットは
3つまたは2つのレジスタ及び9ビット即値オペランド
を提供する。表E.28はRRRM9フォーマットフィ
ールドを定義する。
値オペランドを規定しなければ予約され、追っての互換
性を保障するために0でなければならない。全てのベク
トルレジスタオペランドは現在バンク(バンク0或いは
バンク1のいずれかであることができる)を参照する。
D:S:M符号化は即値フィールドから抽出された即値
が表E.29に示すようにDS〈1:0〉符号化に左右
されることを除いてはRRRM5フォーマットの表E.
22及びE.23に示されたものと同一である。
することができない。下記にはMSPベクトル命令語が
アルファベット順で示されている。注釈: 1.別に定義されない限り、命令語は要素マスクの影響
を受ける。しかし、CTフォーマット命令語は要素マス
クの影響されず、ロード、格納及びキャッシュ命令語を
含むREARとREAIフォーマット命令も要素マスク
の影響を受けない。 2.9ビット即値オペランドは浮動データ型には使用す
ることができない。 3.演算(operation) の説明にはベクトル形態(form)の
みが与えられ、スカラ演算は0番目の一つの要素のみ定
義されると仮定する。 4.RRRM5とRRRM9フォーマットは次の符号化
が整数データ型(b,b9,h,w)に用いられる。
は次の符号化が浮動データ型に用いられる。
れると、オーバフローを誘発する全ての命令語は、in
t8,int9,int6,int32最大或いは最小
限界飽和が適用される。従って、浮動小数点結果はVC
SR〈FSAT〉ビットが指定されると、(−)無限
大,(−)0,(+)0,或いは(+)無限大に飽和す
る。 7.構文的に、.nはバイト9サイズを示すために、.
b9の代わりに用いられることができる。 8.全ての命令語は目的地レジスタ或いはベクトル累算
器に戻る浮動小数点結果がIEEE754単精度フォー
マットである。浮動小数点結果は累算器の下位に書き込
まれ、上位は変更されない。
れる。注意: 1.特別に定義されない限り、命令語は要素マスクの影
響を受ける。CTフォーマット命令語が要素マスクに影
響を受けないことは明らかな事実である。ロード、格
納、及びキャッシュ命令語からなるREARとREAI
フォーマットの命令語も要素マスクの影響を受けない。 2.9ビット即値オペランドは浮動データ型には使用す
ることができない。 3.演算(operation) の説明ではベクトル形態(form)の
みが提示される。スカラ演算では0番目の一つの要素の
み定義する。 4.RRRM5とRRRM9フォーマットで次のような
符号化が整数データ型のために用いられる。 (b,b9,h,w):
は次の符号化が浮動データ型に用いられる。
の命令語に対して、int8,int9,int6,i
nt32の飽和、即ち最大値と最小値はVCSR〈IS
AT〉ビットが1の時に適用される。浮動小数点結果も
同様にVCSR〈FSAT〉ビットが1の時に−無限
大,−0,+0,或いは+無限大になることができる。 7.構文的に、バイト9サイズを定義するために、.b
9の代わりにいずれも用いられることができる。 8.目的地レジスタ或いはベクトル累算器に回帰する浮
動小数点結果はIEEE754単精度フォーマットによ
る。浮動小数点結果は累算器の下位に記録され、上位は
修正されない。 9.例外処理、オーバフロー及び飽和の詳細な内容は各
命令語の説明時に付加される。
0,1)加算符号 ・アセンブラ構文 VAAS3. dt VRd,VRa,VRb VAAS3. dt VRd,VRa,SRb VAAS3. dt SRd,SRa,SRb ここで、dt={b,b9,h,w}
ためにRbに加えられ、その後中間結果はRaの符号と
ともに加えられる。最終結果はベクトル/スカラレジス
タRdに格納される。 ・例外処理 オーバフロー ・未解決:この構造はオペランドRaとRbを同一に作
ることもできる。このような制約内ではVAAS3. d
tVRd,VRa,SRbフォーマットは支援されな
い。
ドとを加算して倍精度で表現される各要素の和はベクト
ル累算器と目的地レジスタRc、Rdの両側に格納す
る。RaとRbは指定されたデータ型を使用するが、こ
こではVACが適当の倍精度データ型を使用するのと同
じである。(16,18,32,64ビットがそれぞれ
int8,int9,int16,int32用として
使用される)各倍精度要素の上位はVACHとRcに格
納される。Rc=Rdであれば、Rcにある結果は定義
されない。
ればならないか。(VACが限界値に近い時)同様に、
倍精度フォーマットで飽和も適用しなければならない
か。
値オペランドを加算して拡張倍精度の和はベクトル累算
器に格納する。目的地レジスタEdには下位の精密mを
回帰する。RaとRb/即値オペランドは特定データ型
を使用するが、ここではVACが適切な倍精度データ型
を使用するのと同じである。(16,18,32,64
ビットがそれぞれint8,int9,int16,i
nt32用として使用する)各拡張倍精度要素の上位は
VACHに格納される。
ればならないか。(VACが限界値に近い時)同様に、
ダブルサイズ/拡張精度フォーマットで飽和も適用しな
ければならないか。
レジスタRdに回帰する。 ・例外処理 オーバフロー、浮動小数点無効オペランド。
算 ・アセンブラ構文 VADDH. dt VRd,VRa,VRb VADDH. dt VRd,VRa,SRb ここで、dt={b,b9,h,w, f}
一の演算を規定する。
的地レジスタRdに回帰する。 ・演算 for( i = 0; i < NumElem && EMASK[i]; i++) { Bop[i] = {VRb[i] II SRb II Sex(IMM<8:0>)}; Rd[i]<k> = Ra[i]<k> & Bop[i]<k>,k -- 要素iの全てのビット } ・例外処理 なし。
一の演算を規定する。
的地レジスタRdに回帰する。 ・演算 for(i = 0; i< NumElem &&; EMASK[i]; i++){ Bop[i] ={VRb[i] II SRb II Sex(IMM<8:0>)}; Rd[i]<k> = Ra[i]<k> & Bop[i]<k>,k --要素iの全てのビット } ・例外処理 なし。
は移動方向、即ち左右を示す。
動し、右側ビットは0で充填する(R=0の場合)。1
ビット右側への移動時には符号拡張になる(R=1の場
合)。結果はベクトル累算器に格納する。 ・演算 for(i = 0; i < NumElem && EMASK[i]; i++){ if(R==1) VACOH[i]:VACOL[i] = VACOH[i]:VACOL[i]sign>>1; else VACOH[i]:VACOL[i] = VACOH[i]:VACOL[i]<<1; } ・例外処理 オーバフロー。
し、右側は0で充填する。移動する量はスカラレジスタ
Rbまたは即値IMMフィールドで決められ、結果はベ
クトル/スカラレジスタRdに格納される。オーバフロ
ーを生じさせる要素に対しては符号に応じて陽数または
陰数で飽和する値とする。移動量は符号のない整数であ
る。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたは[]V[]V<4:0> から5ビッ
ト数と見なす。byt、byte9、ハーフワードデー
タ型の場合、プログラマはデータビットの数より小さい
か同じshift _amount値を正確に規定すべきである。値
が規定されたサイズより大きければ、要素は全て0で充
填される。
し、一番左側のビットは符号拡張がなされる。右側は0
で充填する。移動する量はスカラレジスタRbまたは即
値IMMフィールドで決められ、結果はベクトル/スカ
ラレジスタRdに格納される。オーバフローを生じさせ
る要素に対しては符号に応じて陽数または陰数で飽和す
る値とする。移動量は符号のない整数である。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたはIMM<4:0>から5ビット数
と見なす。byte、byte9、ハーフワードデータ
型の場合、プログラマはデータビットの数より小さいか
同じshift _amount値を正確に規定すべきである。値が
規定されたサイズより大きければ、符号ビットで充填さ
れる。
0,1)符号減算 ・アセンブラ構文 VASS3. dt VRd,VRa,VRb VASS3. dt VRd,VRa,SRb VASS3. dt SRd,SRa,SRb ここで、dt={b,b9,h,w}。
ためにRbに加えられ、その後中間結果からRaの符号
を引く。最終結果はベクトル/スカラレジスタRdに格
納される。 ・例外処理 オーバフロー。
ジスタRbまたはIMMだけ減算し、それの絶対値をベ
クトル/スカラレジスタRdに格納する。 ・演算 for(i = 0; i < NumElem && EMASK[i]; i++){ Bop[i] = {Rb[i] II SRb II sex[IMM<8:0>] }; Rd[i] =|Ra[i] - Bop[i]|; } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 減算の結果が陰数の最大値である時、絶対値を取ると、
オーバフローが発生する。飽和方式が設置されていれ
ば、絶対演算の結果は最大陽数になる。
型に対して四捨五入様式を用いて切捨てをするためには
VAVGTを使用する。
ラレジスタRbに加算されて中間結果を生成する。中間
結果は再び2で割ってベクトル/スカラレジスタRdに
格納する。整数データ型に対してT=1であれば、四捨
五入が適用され、0であれば無条件切捨てが適用される
(デフォールト)。浮動データ型はVCSR〈RMOD
E〉で四捨五入方式が指定される。 ・演算 for(i = 0; i < NumElem && EMASK[i]; i++) { Bop[i] = {Rb[i] II SRb II sex[IMM<8:0>] }; Rd[i] =(Ra[i] - Bop[i])II 2; } ・例外処理 なし。
型に対して四捨五入様式を用いて切捨てをするためには
VAVGTを使用する。
ータ型に対してT=1であれば、四捨五入が適用され、
0であれば無条件切捨てが適用される(デフォール
ト)。浮動データ型はVCSR〈RMODE〉で四捨五
入方式が指定される。 ・演算 for(i =0 ; i < NumElem-1; i++) { Rd[i] = (Ra[i] - Bop[i+1]) II 2; } Rd[NumElem-1 = (Ra[NumElem-1] + {VRb[0] II SRb })II 2; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
対して四捨五入様式を用いて切捨てをするためにはVA
VGQTを使用する。
の図のように4つの要素の平均を計算する。T=1であ
れば、四捨五入が適用され、0であれば無条件切捨て(r
ound away form zero)が適用される。(デフォールト)
一番左側の要素は定義されない。図8を参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
一の演算を規定する。
果をRdに格納する。 ・演算 for(i = 0; i < NumElem && EMASK[i]; i++) { Bop[i] ={VP.b[i] II SRb II Sex(l]vlM<8:0>) }; Rd[i] <io = -Ra[i]<k> & Bop[i]<k>,k = 要素iに対する全てのビット] ・例外処理 なし。
ックで与えられる。 ・説明 条件が有効な限りこの命令語とこの命令語の後にくる命
令語実行を止める。cond〈2:0〉フィールドはC
Tフォーマットの他の条件文とは異に解釈される。次の
ような条件が現在定義されている。
れる。この命令語は不明確な例外処理の正確な報告を作
るのに用いられることができる。例えば、例外処理を生
じさせる算術文の後に用いられると、この命令語はアド
レスを知らせるプログラムカウンタとともに例外処理を
知ることができる。
ne,ge,ov}。 ・説明 condが真であれば、分岐する。これは遅滞分岐でな
い。 ・例外処理 無効命令語アドレス。
ne,ge,ov}。 ・説明 condが真であれば、分岐する。これは遅滞分岐文で
はない。 ・例外処理 無効命令語アドレス。
ンにジャンプする。これは遅滞分岐文ではない。VIM
SK〈CSE〉が真であれば、VPC+4(戻りアドレ
ス)が戻りアドレススタックに格納される。そうでなけ
れば、実行はVPC+4から始まる。 ・例外処理 戻りアドレススタックのオーバフロー。
せる。モードで各ビットは下記の事項を規定する。 ・演算 ・例外処理 なし ・プログラミング時注意 VMOV命令語よりさらに効率的な方法でVCSRの制
御ビットを変化させるハードウェアのために提供され
る。
ne,ge,ov} ・説明 condが真であれば、命令語実行を中止し、可能であ
れば、インタラプトAR7をかける。 ・例外処理 VCINTインタラプト。
件付きジョイン ・フォーマット ・アセンブラ構文 VCJOIN. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、命令語実行を中止し、可能であ
れば、ARM7インタラプトをかける。 ・例外処理 VCJOINインタラプト。
条件付きジャンプ ・フォーマット ・アセンブラ構文 VCJSR. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンにジャンプする。
これは遅滞した分岐ではない。condが真であれば、
VPC+4(戻りアドレス)は戻りアドレススタックに
格納される。そうでなければ、実行はVPC+4から始
まる。 ・例外処理 戻りアドレススタックオーバフロー。
条件付き間接ジャンプ ・フォーマット ・アセンブラ構文 VCJSRI. cond SRb ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンに間接ジャンプす
る。これは遅滞した分岐ではない。condが真であれ
ば、VPC+4(戻りアドレス)は戻りアドレススタッ
クに格納される。そうでなければ、実行はVPC+4か
ら始まる。 ・例外処理 戻りアドレススタックオーバフロー。
{un,lt,eq,le,gt,ne,ge,o
v}。.fデータ型が8ビット即値オペランドを支援し
ないことを除いては.fと.wは同一の演算を指定す
る。
Rdに移る。ID〈1.0〉はソース及び目的地レジス
タを規定する。 VR 現在バンクベクトルレジスタ SR スカラレジスタ SY 同期化レジスタ VAC ベクトル累算器レジスタ(VACレジスタコー
ディングはVMOV説明を参照する。)
VMは影響を受ける。ベクトル累算器の拡張浮動小数点
精密表示は全て576ビットを8個の要素を表示するた
めに用いる。従って、累算器に関連したレジスタ移動は
b9データサイズを指定すべきである。
に条件付き移動 ・フォーマット ・アセンブラ構文 VCMOVM. dt Rd,Rb,cond VCMOVM. dt Rd,#IMM,cond ここで、dt={b,b9,h,w,f}、cond=
{un,lt,eq,le,gt,ne,ge,o
v}。.fデータ型が8ビット即値オペランドを支援し
ないことを除いては.fと.wは同一の演算を指定す
る。
Rdに移る。ID〈1.0〉はソース及び目的地レジス
タを指定する。 VR 現在バンクベクトルレジスタ SR スカラレジスタ VAC ベクトル累算器レジスタ(VACレジスタコー
ディングの説明はVMOVの説明を参照する。)
VMは影響を受ける。ベクトル累算器の拡張浮動小数点
精度表示は全て576ビットを8個の要素を表示するた
めに用いる。従って、累算器に関連したレジスタ移動は
b9データサイズを指定すべきである。
k VCMPV. dt VRa,SRb,cond,mas
k ここで、dt={b,b9,h,w,f}、cond=
{lt,eq,le,gt,he,ge}。mask=
{VGMR,VMMR}maskが与えられなければ、
VGMRを使用する。
Ra [i]−VRb[i])要素単位として比較し、比
較結果がVCMPV命令語のcondフィールドに合う
と、VGMR(K=0の時)或いはVMMR(K=1の
時)レジスタの対応ビット#iを設定する。例えば、c
ondフィールドが小さければ(LT)、VGMR
[i](またはMR[i])ビットが設定される。
す。 ・例外処理 なし ・プログラミング時注意 要素にある全てのビットが0であれば、結果は要素のサ
イズと同一である(byte,byte9,halfw
ord,wordのそれぞれに対して8,9,16,3
2)。この数は要素位置の索引と逆関係がある(VCM
PR命令語の次に用いられるならば)。要素の上に変換
させるためにはNumElemからVCNTLZを減算
する。
一の演算を指定する。
目的地レジスタRdに回帰する。 ・演算 for(i = 0;i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i] II SRb II Sex(IMM<8:0>)}; Rd[i]<k> = -Ra[i]<k> I Bop[i]<k>, k --要素iの全てのビット } ・例外処理 なし。
の条件付き回帰 ・フォーマット ・アセンブラ構文 VCRSR. cond ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンから回帰する。こ
れは遅滞した分岐ではない。condが真であれば、V
PC+4(戻りアドレス)は戻りアドレススタックに格
納される。そうでなければ、実行はVPC+4から始ま
る。
ー....。
yte9からハーフワード(b9h)へ、ハーフワード
からbyte9(hb9)へ変換する。 ・演算 if(md<1:0> = 0)[ //bb9はbyteからbyte9 へ変換 VRd = VRb; VRd<9i+8> = VRb<9i+7>,i=0 to 31(または63、VEC64モードで)} else if(md<1:0> == 2)[ //bh9はbyte9 からハーフワードに変換 VRd = VRb; VRD<18i+16:18i+9> = VRB<18i+8>,i = 0 to 15( または31、VEC6 4モードで)} else if(md<1:0> == 3) //hb9 はハーフワードからバイト9へ転換 VRd<18i+8> = VRb<18i+9>,i = 0 to 15(または31、VEC64モードで)} else VRd = undefined; ・例外処理 なし ・プログラミング時注意 b9hモードを使用する前に、プログラマはシャフル演
算を通じてベクトルレジスタの要素数を減らすべきであ
る。hb9モードの使用後にはアンシャフル演算によっ
て目的地レジスタの要素数を減らすべきである。この命
令語は要素マスクの影響を受けない。
小数点への変換 ・フォーマット ・アセンブラ構文 VCVTFF VRd,VRa,SRb VCVTFF VRd,VRa,#IMM VCVTFF SRd,SRa,SRb VCVTFF SRd,SRa,#IMM
う表現の32ビット固定小数点実数に変換されるが、Y
の幅はRbまたはIMMフィールドで、Xは32−〈Y
の幅〉と定義される。Xは整数部分であり、Yは端数で
ある。結果はベクトル/スカラレジスタのRdに格納さ
れる。 ・演算 Y-size ={SRb % 32 II IMM<4:0>}; for(i = 0;i < NumElem;i++) { Rd[i] = convert to (32-Y _size,Y_size) format(Ra[i]);} ・例外処理 オーバフロー ・プログラミング時注意 この命令語はワードデータサイズのみ支援する。この構
造が多数のデータ型を支援しないために、これは要素マ
スクを使用しない。この命令語は整数データ型のために
無条件切捨て方式(round away from zero)を取る。
浮動データ型に変換される。結果はベクトル/スカラレ
ジスタのRdに格納される。 ・演算 for(i = 0;i < NumElem;i++) { Rd[i] = convert to floating point format(Rb[i]); } ・例外処理 なし ・プログラミング時注意 この命令語はワードデータサイズのみ支援する。この構
造が多数のデータ型を支援しないために、これは要素マ
スクを使用しない。
ne,ge,ov}。 ・説明 VCR1を減少し、condが真であれば分岐する。こ
れは遅滞した分岐ではない。 ・例外処理 無効命令語アドレス ・プログラミング時注意 分岐条件文が検査される前にVCR1を減少することを
注意されたい。VCR1が0の時、この命令語を実行す
ると、ループ回数が232−1になる。
ne,ge,ov}。 ・説明 VCR2を減少し、条件が真であれば分岐する。これは
遅滞した分岐ではない。 ・演算 VCR2 = VCR2 - 1; If((VCR2 > 0) & ((cond == VCSR[SO,GT,EQ,LT] I (Cond == un))) VPC = VPC + sex(Offset<22:0> * 4); else VPC = VPC + 4; ・例外処理 無効命令語アドレス ・プログラミング時注意 分岐条件文が検査される前にVCR2を減少することに
注意されたい。VCR2が0の時、この命令語を実行す
ると、ループ回数232−1になる。
ne,ge,ov}。 ・説明 VCR3を減少し、条件が真であれば分岐する。これは
遅滞した分岐ではない。 ・例外処理 無効命令語アドレス ・プログラミング時注意 分岐条件文が検査される前にVCR3を減少することに
注意されたい。VCR3が0の時、この命令語を実行す
ると、ループ回数232−1になる。
で、nは陽数であり、スカラレジスタRbまたはIMM
になり、最終結果はベクトル/スカラレジスタRdに格
納する。この命令語は四捨五入方式で無条件切捨てを使
用する。 ・例外処理 なし ・プログラミング時注意 Nは5ビットの数字であるSRbまたはIMM〈4:
0〉からきたことに注意されたい。バイト、byte
9、ハーフワードデータ型に対してプログラマはNの値
がそのデータサイズの精度と同一か又は小さいものに指
定すべきことに注意されたい。もし大きくなると、要素
は符号ビットで充填される。この命令語の四捨五入方式
は無条件切捨てである。
nは陽数であり、スカラレジスタRbまたはIMMにな
り、最終結果はベクトル/スカラレジスタRdに格納す
る。この命令語は四捨五入方式で無条件切捨てを使用す
る。 ・例外処理 なし ・プログラミング時注意 Nは5ビットの数字であるSRbまたはIMM〈4:
0〉からきたことに注意する。
段階を行う。被除数は累算器にある倍精度の符号のある
整数である。被除数が単精度であれば、倍精度に符号拡
張をしてVACOHとVACOLに格納されるべきであ
る。除数は単精度の符号のある整数であってRbにあ
る。被除数の符号が除数のものと同一であれば、上位累
算器からRbを減算し、異なれば上位累算器にRbを加
算する。
やオーバフローを検査する責任がある。
行う。この命令語はデータのサイズだけ実行しなければ
ならない(即ち、int8は8番、int9は9番、i
nt16は16番、int32は32番)。除算段階が
初期の部分的な残りを累算器に置く前に、VDIVI命
令語は一度行われなければならない。除数は単精度の符
号のあるRbである。各段階ごとに商のビットが抽出さ
れて累算器LSBに移動する。累算器にある部分的な残
りの符号がRbにある除数のものと同一であれば、上位
累算器からRbを引く。そうでなければ、上位累算器に
Rbを加える。結果的な部分(余りの加算または減算の
結果)の符号が除数のものと同一であれば、商のビット
は1である。そうでなければ、商のビットは0である。
累算器は左側に一つ移動し、商のビットで充填される。
除算の最終段階において余りは上位累算器にあり、商は
下位累算器にある。商は逆になっている。
は同一の演算を指定する。
動し、空いた所はレジスタRbの値で充填する。シフト
された一番左側の要素はスカラレジスタRcに移り、残
りの要素はベクトルレジスタRdに格納される。図9を
参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
は同じ演算を指定する。
動し、空いた所はレジスタRbの値で充填する。シフト
された一番右側の要素はスカラレジスタRcに移り、残
りの要素はベクトルレジスタRdに格納される。図10
を参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
同じ演算を指定する。
MMの指定した要素を抽出してスカラレジスタRdに格
納する。 ・演算 index32 = {SRb % 32 II IMM<4:0)> }; index64 = {SRb % 64 II IMM<5:0>}; index = (VCSR<vec64>)? index64:index32; SRd = VRa[index]; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
その結果をベクトル/スカラレジスタRdに格納する。 ・例外処理 なし。
その結果をベクトル/スカラレジスタRdに格納する。 ・例外処理 なし。
同じ演算を指定する。
MMの指定した要素を挿入してスカラレジスタRdに格
納する。 ・演算 index32 = {SRb % 32 II IMM<4:0>}; index64 = {SRb % 64 II IMM<5:0>}; index = (VCSR<vec64>)? index64:index32; VRd[index] = SRa; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLOFFを使用する。
ードする。スカラレジスタも適用可能である。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A==1) SRb = EA; RD =下記の表を参照する。
限が必要な理由は何か。
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLCBOFFを使用する。
ポインタに区画された円形バッファでベクトルまたはス
カラレジスタをロードする。ロード前に有効なアドレス
が終了アドレスより大きければ、アドレス更新演算と同
様に調節されるべきである。しかも、.hと.wのスカ
ラロード時に円形バッファの区画はそれぞれハーフワー
ドとワード境界線に整列されるべきである。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; BEGIN = SRb+1; END = SRb+2; cbsize = END - BEGIN; if(EA > END)EA = BEGIN + (EA - END); if(A == 1) SRb = EA; Rd =下記の表を参照する。
はこの命令語が碌に実行されるためには次のような条件
が満足しなければならないことを銘ずるべきである。 BEGIN < EA <2*END - BEGIN これはEA - END<END - BEGINとEA > BEGINを合わせたも
のである。
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLDOFFを使用する。
る。スカラレジスタも適用することができる。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A==1) SRb = EA; Rd:Rd+1 = 下記の表を参照する。
する。スカラレジスタに対してバイト、byte9、ハ
ーフワードまたはワードはデータ型によってロードされ
る。バイト、byte9、ハーフワードのデータ型に対
して影響を受けないバイトは修正されない。 ・演算 Rd =下記の表を参照する。 ・例外処理 なし
8,16,32,64}、Rd={VRd,VRAd,
SRd}.bと.bs9は同一の演算を指定する。.6
4とVRAdは共に指定され得ない。キャッシュオフロ
ードのためにVLQOFFを使用する。
ドする。スカラレジスタも適用することができる。 ・演算 EA = SRb +{SRi II Sex(IMM<7:0> }; if (A == 1) SRb = EA;; Rd:Rd+1:Rd+2:Rd+3 = 下記の表を参照する。
更新関数とともに使用するには極めて小さい(最大値1
27)。
{VRd,VRAd,SRd}。.64とVRAdは共
に指定され得ない。キャッシュオフロードのためにVl
DOFFを使用する。
ジスタは支援しない。 ・演算 EA = SRb +{SRi II Sex(IMM<7:0> }; if (A == 1) SRb = EA; Rd =下記の表を参照する。
動をし、最下位ビットには0を充填し、移動量はスカラ
レジスタRbまたはIMMフィールドが決定する。結果
はベクトル/スカラレジスタRdに格納される。 ・演算 shift _amount = (SRb % 32 II IMM<4:0>); for(i = 0; i < NumElem && EMASK[i]; i++) Rd[i] = Ra[i] << shift_amount; } ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたはIMM〈4:0〉から5
ビットで抽出されることを注意する。byte、byt
e9、ハーフワードデータ型の場合、プログラマは移動
量がデータサイズを外れないようにすべきである。もし
移動量が指定されるデータサイズより大きければ、要素
を0のみで充填する。
論理移動をし、最上位ビットには0を充填し、移動量は
スカラレジスタRbまたはIMMフィールドが決定す
る。結果はベクトル/スカラレジスタRdに格納され
る。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたはIMM〈4:0〉から5
ビットで抽出されることに注意する。byte、byt
e9、ハーフワードデータ型の場合、プログラマは移動
量がデータサイズを外れないようにすべきである。もし
移動量が指定されるデータサイズより大きければ、要素
を0のみで充填する。
d,VRAd}。.64モードは支援されないので、そ
の代わりにVLを使用する。キャッシュオフロードのた
めにはVLWSOFFを使用する。
スタVRdへロードするが、SRb+1はストライド調
節レジスタとして使用する。LTはブロックのサイズを
指定するもので、各ブロックに対してロードされる連接
したバイトの数をいう。SRb+1はストライトで隣接
したブロックの開始を区別するためのバイトの数であ
る。ストライドはブロックのサイズが同じか又は大きけ
ればならない。EAは整列されたデータサイズである。
ストライドとブロックのサイズはデータサイズの倍数で
ある。
を作る。この中間結果はベクトル累算器の倍精度要素に
加えてベクトル累算器に格納する。RaとRbは指定さ
れたデータ型を使用するが、VACが適当な倍精度デー
タ型を使用するのと同じである。各倍精度の要素の上位
はVACHに格納する。浮動データ型に対して全てのオ
ペランドの結果は単精度である。
代わりにint16を使用する。
を作り、1ビット左側に移動した後、この中間結果はベ
クトル累算器の倍精度要素に加えてベクトル累算器に格
納する。RaとRbは指定されたデータ型を使用する
が、VACが適当な倍精度データ型を使用するのと同じ
である(int8,int16,int32に対してそ
れぞれ16,32,64ビットを使用する)。各倍精度
の要素の上位はVACHに格納する。
代わりにint16を使用する。
を作る。この中間結果はベクトル累算器の倍精度要素に
加えてベクトル累算器に格納し、目的地レジスタVRd
の下位部分を戻す。RaとRbは指定されたデータ型を
使用するが、VACが適当な倍精度データ型を使用する
のと同じである(int8,int16,int32に
対してそれぞれ16,32,64ビットを使用する)。
各倍精度の要素の上位はVACHに格納する。浮動デー
タ型に対して全てのオペランドの結果は単精度である。
代わりにint16を使用する。
を作る。この中間結果はRcの倍精度要素に加えて目的
地レジスタRd+1:Rdに格納する。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Aop[i] ={VRa[i] II SRa }; Bop[i] ={VRb[i] II SRb }; Cop[i] ={VRc[i] II SRc }; Rd +1[i]:Rd[i] = Aop[i] * Bop[i] + sex_dp(Cop[i]); } ・例外処理 なし。
に移動する。倍精度の中間効果をRcの倍精度各要素に
加える。目的地レジスタRdに各要素の倍精度の和の中
から下位を戻す。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Aop[i] ={VRa[i] II SRa }; Bop[i] ={VRb[i] II SRb }; Cop[i] ={VRc[i] II SRc }; if(dt == float) Lo[i] = Aop[i] * Bop[i] + Cop[i]; else Hi[i]:Lo[i] = Aop[i] * Bop[i] + sex_dp(Cop[i]); Rd[i] = Lo[i]; } ・例外処理 オーバフロー、浮動小数点無効オペランド。
を作る。ベクトル累算器の倍精度要素から倍精度の中間
結果を引く。ベクトル累算器に各要素の倍精度の和を格
納する。RaとRbは指定されたデータ型を使用する
が、VACが適当な倍精度データを使用するのと同一で
ある(int8,int16,int32に対してそれ
ぞれ16,32,64ビットを使用する)。各倍精度の
要素の上位はVACHに格納する。浮動小数点データ型
に対して全てのオペランドと結果は単精度である。
わりにint16を使用する。
果を作る。倍精度の中間結果を左側に1ビット移動す
る。ベクトル累算器の倍精度要素から倍精度の中間結果
を引く。ベクトル累算器に各要素の倍精度の和を格納す
る。VRaとRbは指定されたデータ型を使用するが、
VACが適当な倍精度データを使用するのと同一である
(int8,int16,int32に対してそれぞれ
16,32,64ビットを使用する)。各倍精度の要素
の上位はVACHに格納する。
わりにint16を使用する。
果を作る。ベクトル累算器の倍精度要素から倍精度の中
間結果を引く。ベクトル累算器に各要素の倍精度の和を
格納する。下位を目的地レジスタに戻す。VRaとRb
は指定されたデータ型を使用するが、VACが適当な倍
精度データを使用するのと同一である(int8,in
t16,int32に対してそれぞれ16,32,64
ビットを使用する)。各倍精度の要素の上位はVACH
に格納する。浮動小数点データ型に対して全てのオペラ
ンドと結果は単精度である。
代わりにint16を使用する。
果を作る。倍精度の中間結果を左側に1ビットずつ移動
する。ベクトル累算器の倍精度要素から移動された倍精
度の中間結果を引く。ベクトル累算器に各要素の倍精度
の和を格納する。VRaとRbは指定されたデータ型を
使用するが、VACが適当な倍精度データを使用するの
と同一である(int8,int16,int32に対
してそれぞれ16,32,64ビットを使用する)。各
倍精度の要素の上位はVACHに格納する。
代わりにint16を使用する。
果を作る。ベクトル累算器の倍精度要素から倍精度の中
間結果を引く。ベクトル累算器に各要素の倍精度の和を
格納する。下位を目的地レジスタVRdに戻す。Raと
Rbは指定されたデータ型を使用するが、VACが適当
な倍精度データを使用するのと同一である(int8,
int16,int32に対してそれぞれ16,32,
64ビットを使用する)。各倍精度の要素の上位はVA
CHに格納する。浮動小数点データ型に対して全てのオ
ペランドと結果は単精度である。
代わりにint16を使用する。
Rbと異なれば、結果は予測不能である。各偶数或いは
奇数のベクトル要素は対で比較され、大きいものは偶数
位置に、小さいものは奇数位置のRdに格納する。 ・演算 for(i=0;i < NumElem && EMASK[i]; i+2) { VRd[i] = (VRb[i] > VRb[i+1])? VRb[i]:VRb[i+1]; VRd[i+1] = (VRb[i] > VRb[i+1])?VRb[i+1]:VRb[i]; } ・例外処理 なし。
は構造的に指定されたレジスタ名を指す。.fと.wは
同一の演算を指定する。
ィールドはソースと目的地レジスタグループを指定す
る。レジスタグループの説明は次の通りである。 VR 現在バンクベクトルレジスタ VRA 交互バンクベクトルレジスタ SR スカラレジスタ SP 特殊レジスタ RASR 復帰アドレススタックレジスタ VAC ベクトル累算器レジスタ(下記の内容のVAC
レジスタコーディングを参照する。)
レジスタに移動することができない。VEXTRがこの
ような目的に適する。VACレジスタコーティングに次
の表を使用する。
と、対応例外処理が引き起こされる。 ・プログラミング時注意 この命令語は要素マスクに影響を受けない。交互バンク
概念がVEC64モードでは存在しないために、この命
令語を用いてVEC64モードで交互バンクレジスタか
ら或いはそこへデータを移すことができない。
果を作る。ベクトル累算器に各要素の倍精度の和を格納
する。RaとRbは指定されたデータ型を使用するが、
Rc:Rdが適当な倍精度データを使用するのと同一で
ある(int8,int16,int32に対してそれ
ぞれ16,32,64ビットを使用する)。各倍精度要
素の上位はRcに格納する。
代わりにint16を使用する。拡張された結果は支援
されるデータ型でないため、この命令語は浮動データ型
も支援しない。
果を作って累算器にその結果を書き込む。浮動小数点デ
ータ型に対して全てのオペランドと結果は単精度であ
る。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
果を作る。倍精度結果は左側に1ビットずつ移動する。
累算器にその結果を書き込む。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
果を作る。倍精度結果は左側に1ビット移動する。結果
の上位を目的地レジスタVRd+1に戻し、下位は目的
地レジスタVRdに戻す。VRdは必ず偶数(even numv
red)レジスタでなければならない。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
果を作る。倍精度結果は左側に1ビット移動する。結果
を四捨五入して上位に送る。上位を目的地レジスタVR
dに戻す。 ・例外処理なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
果を作る。この結果の下位を目的地レジスタVRdに戻
す。浮動データ型に対して全てのオペランドと結果は単
精度である。 ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
の演算を規定する。
理積する。この結果をRdに戻す。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; Rd[i]<k> = (Ra[i]<k> & Bop[i]<k>,for k = all bits in element i; } ・例外処理 なし。
の演算を規定する。
理和する。この結果をRdに戻す。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; Rd[i]<k> = (Ra[i]<k> & Bop[i]<k>,for k = all bits in element i; } ・例外処理 なし。
の演算を規定する。
する。この結果をRdに戻す。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; Rd[i]<k> = (Ra[i]<k> & Bop[i]<k>,for k = all bits in element i; } ・例外処理 なし。
の演算を規定する。
理和する。この結果をRdに戻す。 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; Rd[i]<k> = (Ra[i]<k>I〜Bop[i]<k>,for k = all bits in element i; } ・例外処理 なし。
ュラインをプリフェッチする。キャッシュラインは下記
のように規定される: LN〈1:0〉=00:164- バイトキャッシュライ
ンがプリフェッチされる。 LN〈1:0〉=01:264- バイトキャッシュライ
ンがプリフェッチされる。 LN〈1:0〉=10:464- バイトキャッシュライ
ンがプリフェッチされる。 LN〈1:0〉=11:864- バイトキャッシュライ
ンがプリフェッチされる。 もし有効アドレスが64- バイト境界に存在しなけれ
ば、これを一番先に捨てることにより、64バイト境界
に配列されるようにする。 ・演算 ・例外処理 無効データアドレス ・プログラミング時注意 EA〈31:0〉は局部メモリでバイトアドレスを示
す。
へのプリフェッチ ・フォーマット ・アセンブラ構文 VPFTCHSP. ln SRb,Si VPFTCHSP. ln SRb,#IMM VPFTCHSP. ln SRb+,Si VPFTCHSP. ln SRb+,#IMM In={1,2,4,8}。VPFTCHとVPFTC
HSPは同一の演算コードを有する。
ッドへ移動する。有効アドレスはメモリの開始アドレス
を提供し、SRpはスクラッチパッドの開始アドレスを
提供する。64- バイトブロック数は下記のように規定
される。 LN〈I:0〉=00:164- バイトブロックが移動
される。 LN〈I:0〉=01:264- バイトブロックが移動
される。 LN〈I:0〉=10:464- バイトブロックが移動
される。 LN〈I:0〉=11:864- バイトブロックが移動
される。 もし有効アドレスが64- バイト境界に存在しなけれ
ば、これを最優先に捨てることにより、64バイト境界
に配列されるようにする。SRpのスクラッチパッドポ
インタアドレスが64バイト境界に存在しなければ、こ
れもやはり捨てることにより64バイト境界に配列され
るようにする。
レジスタRbまたはIMMフィールドに与えられたビッ
ト量だけ左側に回転して、この結果をベクトル/スカラ
レジスタRdに格納する。 ・演算 rotate_amount ={SRb % 32 II IMM<4:0>}; for(i = 0;i < NumElem && EMASK[i];i++){ Rd[i] == Ra[i] rotate _left rotate _amount; } ・例外処理 なし ・プログラミング時注意 rotate_amountはSRbまたはIMM〈4:0〉から5
ビット数として取り、バイト、byte9、ハーフワー
ドデータ型においてはデータサイズがビット数より少な
いか同一の回転量を正確にプログラマによって規定すべ
きである。もし回転量が規定データサイズより大きけれ
ば、その結果は定義されない。n左回転はElemSi
ze右回転と等価である。ここで、ElemSizeは
所定データサイズでビット数を指す。
レジスタRbまたはIMMフィールドに与えられたビッ
ト量だけ右側に回転して、この結果をベクトル/スカラ
レジスタRdに格納する。 ・例外処理 なし ・プログラミング時注意 rotate_amountはSRbまたはIMM〈4:0〉から5
ビット数として取り、バイト、byte9、ハーフワー
ドデータ型においてはデータサイズがビット数より少な
いか同一の回転量を正確にプログラマによって規定すべ
きである。もし回転量が規定データサイズより大きけれ
ば、その結果は定義されない。n左回転はElemSi
ze右回転と等価である。ここで、ElemSizeは
所定データサイズでビット数を指す。
数への四捨五入 ・フォーマット ・アセンブラ構文 VROUND. rm VRd,VRb VROUND. rm SRd,SRb rm={ninf,zero,near,pinf}。
内容を最近似値32-ビット整数(ワード)に四捨五入
し、この結果をベクトル/スカラレジスタRdに格納す
る。四捨五入モードはRMに定義される。
ト即値で支援されない。
レジスタRb或いはIMMフィールドに与えられた対応
下限に比較する。その値が下限より小さければ、下限に
同等に設定され、その最終結果をベクトル/スカラレジ
スタRdに格納する。 ・例外処理 なし。
ット即値で支援されない。
レジスタRb或いはIMMフィールドに与えられた対応
上限と比較する。その値が上限より大きければ、上限に
同等に設定され、その最終結果をベクトル/スカラレジ
スタRdに格納する。 ・例外処理 なし。
は同一の演算を規定する。
4に示すようにその結果をベクトルレジスタRc:Rd
に格納する。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
は同一の演算を規定する。
に示すようにその結果をベクトルレジスタRdに格納す
る。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
は同一の演算を規定する。
1に示すようにその結果をベクトルレジスタRdに格納
する。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
のようにその結果の上位をベクトルレジスタRdに格納
する。 ・演算 ・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
2,64}、RS={VRs,VRa,SRs}。.b
と.b9tは同一の演算を規定し、.64とVRAsは
共に規定されない。キャッシュオフ格納にはVSTOF
Fを使用する。
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAdは共に
規定されない。キャッシュオフ格納はVSTCBOFF
を使用する。
ポインタに区画された円形バッファでベクトル或いはス
カラレジスタを格納する。格納前に有効アドレスが終了
アドレスより大きければ、アドレス更新演算と同様に調
節されるべきである。しかも、.hと.wのスカラロー
ド時に円形バッファの区画はそれぞれハーフワードとワ
ード境界線に整列されるべきである。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; BEGIN = SRb+1; END = SRb+2; cbsize = END -BEGIN; if(EA > END) EA = BEGIN + (EA - END); if(A == 1)SRb EA; MEM[EA] = 下記の表を参照する。
はこの命令語が期待通りに動作するように下記の条件を
確認しなければならない。 BEGIN < EA < 2*END - BEGIN これはEA - END< END - BIGIN とEA > BEGINを合わせた
ものである。
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAsは共に
規定されない。キャッシュオフ格納はVSTDOFFを
使用する。
タ或いは2つのスカラレジスタを格納する。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A == 1)SRb = EA; MEM[EA] = 下記の表を参照する。
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAsは共に
規定されなく、キャッシュオフ格納はVSTQOFFを
使用する。
タ或いは2つのスカラレジスタを格納する。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A == 1) SRb EA; MEM[EA] = 下記の表を参照する。
2,64}、Rs={VRs,VRAs}。64とVR
Asは共に規定されない。キャッシュオフ格納にはVS
TROFFを使用する。
令語はスカラデータソースレジスタを支援しない。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if (A == I)SRb = EA; MEM[EA] = 下記の表を参照する;
s}。.64モードは支援されない。その代わりにVS
Tを使用する。キャッシュオフ格納にVSTWOFFを
使用されたい。
でメモリに格納するが、SRb+1 はストライド制御レジ
スタとして用いる。STとはブロックのサイズを指定す
るもので、各ブロックに対して格納される連接したバイ
トの数である。SRb+1はストライドであり、隣接し
たブロックの開始を区別するためのバイトの数である。
ストライドはブロックのサイズが同じか大きくなければ
ならない。EAは整列されたデータサイズである。スト
ライドとブロックのサイズはデータサイズの倍数であ
る。
してその結果をベクトルレジスタRdに格納する。 ・例外処理 オーバーフロー、浮動小数点無効オペランド。
し、VCSRのVFLAGビットを設定する。 ・演算 Bop[i] = {SRb II sex(IMM<8:0>)}; SRd[i] = SRa - Bop; VCSR<lt, eq, gt> = status(SRa, Bop); ・例外処理 オーバーフロー、浮動小数点無効オペランド。
にベクトルレジスタVRc:VRdにアンシャフルす
る。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
演算を規定する。
ルする。図12のようにその結果の上位はベクトルレジ
スタVRdに回帰する。 ・演算 ・例外処理 無し ・プログラミング時注意 この命令語は要素マスクを使用しない。
演算を規定する。
ルする。図13のようにその結果の下位はベクトルレジ
スタVRdに回帰する。 ・演算 ・例外処理 無し ・プログラミング時注意 この命令語は要素マスクを使用しない。
と同一のものとは反対に)規定された索引を有するキャ
ッシュラインはもしそれが変更されたデータを含むな
ら、メモリにアップデータされる。一つ以上のキャッシ
ュラインが規定されると、次の順序のキャッシュライン
はもしそれが変更されたデータをもつなら、メモリにア
ップグレードされる。キャッシュラインの数は下記のよ
うに規定される。 LN〈I:0〉=00:1 64- バイトキャッシュラ
インが記録される。 LN〈I:0〉=01:2 64- バイトキャッシュラ
インが記録される。 LN〈I:0〉=10:4 64- バイトキャッシュラ
インが記録される。 LN〈I:0〉=11:8 64- バイトキャッシュラ
インが記録される。 有効アドレスが64- バイト境界に存在しないなら、こ
れを一番先に捨てることにより、64- バイト境界に整
列されるようにする。 ・演算 無効データアドレス ・プログラミング時注意 EA〈3I:0〉は局部メモリのバイトアドレスを指
す。
ラッチパッドからメモリへ移動する。有効アドレスはメ
モリの開始アドレスを提供し、SRpはスクラッチパッ
ドの開始アドレスを提供する。64バイトブロック数は
下記のように規定される。 LN〈I:0〉=00:164- バイトブロックが移動
する。 Ln〈I:0〉=01:264- バイトブロックが移動
する。 LN〈I:0〉=10:464- バイトブロックが移動
する。 Ln〈I:0〉=11:864- バイトブロックが移動
する。 もし有効アドレスが64- バイト境界に存在しなけれ
ば、これを最優先に捨てることにより、64- バイト境
界に配列されるようにする。SRpのスクラッチパッド
ポインタアドレスが64- バイト境界に存在しなけれ
ば、これもやはり捨てることにより、64- バイト境界
に配列されるようにする。
容をベクトル/スカラレジスタRbと排他 的否定論理和してその結果をベクトル/スカラレジスタ
Rbに格納する。 ・演算 for (i = 0; i < NumElem && EMAK[i];i++) { Bop[i] = [VRb[i] I 〜SRb II sex(IMM<8:0>)}; Rd[i]<k> = 〜(Ra[i]<k> ^Bop[i]<k>. for k = all bits in element i; ・例外処理 なし。
ラレジスタRbと排他的論理和してその結果をベクトル
/スカラレジスタRbに格納する。 ・演算 for (i = 0; i < NumElem && EMAK[i];i++) { Bop[i] = {VRb[i] II SRb II sex(IMM<8:0>)}; Rd[i]<k> = (Ra[i]<k> ^Bop[i]<k>. for k = all bits in element i; ・例外処理 なし。
一の演算を示す。
れ、1ビット結果はSRbの最下位ビットに回帰する。
この命令語は要素マスクに影響を受けない。 ・演算 ・例外処理 なし。
説明するためのブロック図。
されたプログラムから実行可能なプログラムを発生する
過程を示す流れ図。
プロセッサのブロック図。
るためのブロック図。
説明するためのブロック図。
説明するためのブロック図。
作を説明するためのブロック図。
セッサの演算を説明するためのブロック図。
セッサの演算を説明するためのブロック図。
ロセッサの演算を説明するためのブロック図。
ロセッサの演算を説明するためのブロック図。
ロセッサの演算を説明するためのブロック図。
ロセッサの演算を説明するためのブロック図。
ロセッサの演算を説明するためのブロック図。
Claims (14)
- 【請求項1】 ベクトルプロセッサで実行するコンピュ
ータ判読可能媒体にコンピュータプログラムを生成する
コンピュータプログラム生成方法において、 ベクトルプロセッサで処理されるどの種類の演算をも指
定しない高級言語で記述されたコンピュータプログラム
を読み取るコンピュータシステムであって、前記プログ
ラムはベクトル型の値を含み、このプログラムはオペラ
ンドとして前記ベクトル型値を含む第1演算を備え、こ
の第1演算はベクトルオペランドを持つことが可能なベ
クトルプロセッサ命令VPI1に対応し、 前記コンピュータシステムは前記第1演算で処理される
1以上のベクトルプロセッサ命令を生成し、前記1以上
の命令は1以上のVPI1命令を含むことを特徴とする
コンピュータプログラム生成方法。 - 【請求項2】 前記高級言語はそれぞれの値に対してそ
の値がベクトルプロセッサのレジスタに格納されるかそ
れとも前記ベクトルプロセッサの外部のメモリに格納さ
れるかを規定しないことを特徴とする請求項1記載のコ
ンピュータプログラム生成方法。 - 【請求項3】 前記プログラムは前記ベクトル型値の格
納方式を規定しないことを特徴とする請求項1記載のコ
ンピュータプログラム生成方法。 - 【請求項4】 ベクトル演算は選択マスク(selection m
ask)に従属し、ベクトルオペランドのどの要素が演算さ
れるかを決定することを特徴とする請求項1記載のコン
ピュータプログラム生成方法。 - 【請求項5】 前記第1演算は一つ以上の算術演算を備
えることを特徴とする請求項1記載のコンピュータプロ
グラム生成方法。 - 【請求項6】 第1演算の対象は複数のオペランドであ
ることを特徴とする請求項1記載のコンピュータプログ
ラム生成方法。 - 【請求項7】 前記第1演算は第1,2ベクトルオペラ
ンドの要素をシャフルして第3,4ベクトルを発生する
過程を備えることを特徴とする請求項1記載のコンピュ
ータプログラム生成方法。 - 【請求項8】 前記第1演算は一つ以上のマトリックス
オペランドを備えることを特徴とする請求項1記載のコ
ンピュータプログラム生成方法。 - 【請求項9】 前記第1演算は一つ以上の9ビットオペ
ランドを備えることを特徴とする請求項1記載のコンピ
ュータプログラム生成方法。 - 【請求項10】 前記高級プログラム言語はC言語の拡
張であることを特徴とする請求項1記載のコンピュータ
プログラム生成方法。 - 【請求項11】 前記高級プログラム言語はC++言語
の拡張であることを特徴とする請求項1記載のコンピュ
ータプログラム生成方法。 - 【請求項12】 前記コンピュータシステムは制御プロ
セッサ、ベクトルプロセッサ、及び前記制御プロセッサ
を前記ベクトルプロセッサに結合するキャッシュメモリ
を備えることを特徴とする請求項1記載のコンピュータ
プログラム生成方法。 - 【請求項13】 前記制御プロセッサは前記ベクトルプ
ロセッサが実行を始めるように信号で通信するが、前記
ベクトルプロセッサは前記制御プロセッサが実行を始め
るようにすることができないことを特徴とする請求項1
2記載のコンピュータプログラム生成方法。 - 【請求項14】 ベクトルプロセッサとRISCプロセ
ッサを含む二重プロセッサによる実行のためにコンピュ
ータ判読可能媒体に並列コンピュータプログラムを生成
する方法において、 各演算において演算を行う前記ベクトルプロセッサまた
はRISCプロセッサでその演算が具現される方式を規
定しない高級言語で作成され、前記RISCプロセッサ
が前記ベクトルプロセッサを起動するようにする命令で
ある第1演算を有するコンピュータプログラムを読み出
し、前記命令を具現するRISCプロセッサ命令を生成
するコンピュータシステムを備えることを特徴とするコ
ンピュータプログラム生成方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/731,455 US6016395A (en) | 1996-10-18 | 1996-10-18 | Programming a vector processor and parallel programming of an asymmetric dual multiprocessor comprised of a vector processor and a risc processor |
US08/731,455 | 1996-10-18 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH10207870A true JPH10207870A (ja) | 1998-08-07 |
Family
ID=24939580
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP9285854A Pending JPH10207870A (ja) | 1996-10-18 | 1997-10-17 | ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法 |
Country Status (4)
Country | Link |
---|---|
US (1) | US6016395A (ja) |
JP (1) | JPH10207870A (ja) |
KR (1) | KR100294016B1 (ja) |
TW (1) | TW356540B (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014513340A (ja) * | 2011-04-01 | 2014-05-29 | インテル・コーポレーション | データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法 |
Families Citing this family (63)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6530075B1 (en) * | 1998-12-03 | 2003-03-04 | International Business Machines Corporation | JIT/compiler Java language extensions to enable field performance and serviceability |
US7526630B2 (en) * | 1999-04-09 | 2009-04-28 | Clearspeed Technology, Plc | Parallel data processing apparatus |
US7966475B2 (en) | 1999-04-09 | 2011-06-21 | Rambus Inc. | Parallel data processing apparatus |
US7802079B2 (en) | 1999-04-09 | 2010-09-21 | Clearspeed Technology Limited | Parallel data processing apparatus |
US8174530B2 (en) * | 1999-04-09 | 2012-05-08 | Rambus Inc. | Parallel date processing apparatus |
US20080008393A1 (en) * | 1999-04-09 | 2008-01-10 | Dave Stuttard | Parallel data processing apparatus |
US8762691B2 (en) | 1999-04-09 | 2014-06-24 | Rambus Inc. | Memory access consolidation for SIMD processing elements using transaction identifiers |
US20080162875A1 (en) * | 1999-04-09 | 2008-07-03 | Dave Stuttard | Parallel Data Processing Apparatus |
US8169440B2 (en) | 1999-04-09 | 2012-05-01 | Rambus Inc. | Parallel data processing apparatus |
US8171263B2 (en) * | 1999-04-09 | 2012-05-01 | Rambus Inc. | Data processing apparatus comprising an array controller for separating an instruction stream processing instructions and data transfer instructions |
US20070242074A1 (en) * | 1999-04-09 | 2007-10-18 | Dave Stuttard | Parallel data processing apparatus |
JP5285828B2 (ja) | 1999-04-09 | 2013-09-11 | ラムバス・インコーポレーテッド | 並列データ処理装置 |
US20080162874A1 (en) * | 1999-04-09 | 2008-07-03 | Dave Stuttard | Parallel data processing apparatus |
US6813701B1 (en) * | 1999-08-17 | 2004-11-02 | Nec Electronics America, Inc. | Method and apparatus for transferring vector data between memory and a register file |
US7099812B2 (en) * | 1999-09-24 | 2006-08-29 | Intrinsity, Inc. | Grid that tracks the occurrence of a N-dimensional matrix of combinatorial events in a simulation using a linear index |
US6550059B1 (en) * | 1999-10-04 | 2003-04-15 | Advanced Micro Devices, Inc. | Method for generating optimized vector instructions from high level programming languages |
US6665790B1 (en) * | 2000-02-29 | 2003-12-16 | International Business Machines Corporation | Vector register file with arbitrary vector addressing |
US6857061B1 (en) * | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US6567711B1 (en) * | 2000-08-28 | 2003-05-20 | Brooks Automation | Observer-corrector control system for systems with unmodeled dynamics |
US7489779B2 (en) * | 2001-03-22 | 2009-02-10 | Qstholdings, Llc | Hardware implementation of the secure hash standard |
US7752419B1 (en) * | 2001-03-22 | 2010-07-06 | Qst Holdings, Llc | Method and system for managing hardware resources to implement system functions using an adaptive computing architecture |
US7400668B2 (en) * | 2001-03-22 | 2008-07-15 | Qst Holdings, Llc | Method and system for implementing a system acquisition function for use with a communication device |
US20040133745A1 (en) * | 2002-10-28 | 2004-07-08 | Quicksilver Technology, Inc. | Adaptable datapath for a digital processing system |
US6836839B2 (en) | 2001-03-22 | 2004-12-28 | Quicksilver Technology, Inc. | Adaptive integrated circuitry with heterogeneous and reconfigurable matrices of diverse and adaptive computational units having fixed, application specific computational elements |
US7653710B2 (en) | 2002-06-25 | 2010-01-26 | Qst Holdings, Llc. | Hardware task manager |
US7962716B2 (en) * | 2001-03-22 | 2011-06-14 | Qst Holdings, Inc. | Adaptive integrated circuitry with heterogeneous and reconfigurable matrices of diverse and adaptive computational units having fixed, application specific computational elements |
US6577678B2 (en) | 2001-05-08 | 2003-06-10 | Quicksilver Technology | Method and system for reconfigurable channel coding |
US20020184291A1 (en) * | 2001-05-31 | 2002-12-05 | Hogenauer Eugene B. | Method and system for scheduling in an adaptable computing engine |
US20030122584A1 (en) * | 2001-07-02 | 2003-07-03 | Boehm Fritz A. | Software program that transforms an N-dimensional matrix of integers to a linear index |
US6941548B2 (en) * | 2001-10-16 | 2005-09-06 | Tensilica, Inc. | Automatic instruction set architecture generation |
US7046635B2 (en) * | 2001-11-28 | 2006-05-16 | Quicksilver Technology, Inc. | System for authorizing functionality in adaptable hardware devices |
US6986021B2 (en) | 2001-11-30 | 2006-01-10 | Quick Silver Technology, Inc. | Apparatus, method, system and executable module for configuration and operation of adaptive integrated circuitry having fixed, application specific computational elements |
US8412915B2 (en) * | 2001-11-30 | 2013-04-02 | Altera Corporation | Apparatus, system and method for configuration of adaptive integrated circuitry having heterogeneous computational elements |
US7602740B2 (en) * | 2001-12-10 | 2009-10-13 | Qst Holdings, Inc. | System for adapting device standards after manufacture |
US7088825B2 (en) * | 2001-12-12 | 2006-08-08 | Quicksilver Technology, Inc. | Low I/O bandwidth method and system for implementing detection and identification of scrambling codes |
US7215701B2 (en) * | 2001-12-12 | 2007-05-08 | Sharad Sambhwani | Low I/O bandwidth method and system for implementing detection and identification of scrambling codes |
US7231508B2 (en) * | 2001-12-13 | 2007-06-12 | Quicksilver Technologies | Configurable finite state machine for operation of microinstruction providing execution enable control value |
US7403981B2 (en) | 2002-01-04 | 2008-07-22 | Quicksilver Technology, Inc. | Apparatus and method for adaptive multimedia reception and transmission in communication environments |
US7346898B2 (en) * | 2002-01-29 | 2008-03-18 | Texas Instruments Incorporated | Method for scheduling processors and coprocessors with bit-masking |
GB2390443B (en) * | 2002-04-15 | 2005-03-16 | Alphamosaic Ltd | Application registers |
US6732354B2 (en) * | 2002-04-23 | 2004-05-04 | Quicksilver Technology, Inc. | Method, system and software for programming reconfigurable hardware |
US7328414B1 (en) * | 2003-05-13 | 2008-02-05 | Qst Holdings, Llc | Method and system for creating and programming an adaptive computing engine |
US7660984B1 (en) | 2003-05-13 | 2010-02-09 | Quicksilver Technology | Method and system for achieving individualized protected space in an operating system |
US20030231660A1 (en) * | 2002-06-14 | 2003-12-18 | Bapiraju Vinnakota | Bit-manipulation instructions for packet processing |
US6986023B2 (en) * | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
US20040034858A1 (en) * | 2002-08-14 | 2004-02-19 | Kushlis Robert J. | Programming a multi-threaded processor |
US8108656B2 (en) | 2002-08-29 | 2012-01-31 | Qst Holdings, Llc | Task definition for specifying resource requirements |
US7937591B1 (en) | 2002-10-25 | 2011-05-03 | Qst Holdings, Llc | Method and system for providing a device which can be adapted on an ongoing basis |
US8276135B2 (en) | 2002-11-07 | 2012-09-25 | Qst Holdings Llc | Profiling of software and circuit designs utilizing data operation analyses |
US7225301B2 (en) | 2002-11-22 | 2007-05-29 | Quicksilver Technologies | External memory controller node |
US7609297B2 (en) * | 2003-06-25 | 2009-10-27 | Qst Holdings, Inc. | Configurable hardware based digital imaging apparatus |
US7200837B2 (en) * | 2003-08-21 | 2007-04-03 | Qst Holdings, Llc | System, method and software for static and dynamic programming and configuration of an adaptive computing architecture |
US7730456B2 (en) * | 2004-05-19 | 2010-06-01 | Sony Computer Entertainment Inc. | Methods and apparatus for handling processing errors in a multi-processing system |
JP4079923B2 (ja) * | 2004-07-26 | 2008-04-23 | エヌイーシーコンピュータテクノ株式会社 | ベクトル処理装置、情報処理装置、および、ベクトル処理方法 |
US7873947B1 (en) * | 2005-03-17 | 2011-01-18 | Arun Lakhotia | Phylogeny generation |
US7779397B2 (en) * | 2005-08-29 | 2010-08-17 | Microsoft Corporation | Data interfaces |
US20100199067A1 (en) * | 2009-02-02 | 2010-08-05 | International Business Machines Corporation | Split Vector Loads and Stores with Stride Separated Words |
WO2011091323A1 (en) | 2010-01-21 | 2011-07-28 | Qst Holdings, Llc | A method and apparatus for a general-purpose, multiple-core system for implementing stream-based computations |
CN103959240B (zh) * | 2011-12-15 | 2017-05-17 | 英特尔公司 | 使用混洗表和掩码存储表经由矢量指令优化程序循环的方法 |
CN107741861B (zh) * | 2011-12-23 | 2022-03-15 | 英特尔公司 | 用于混洗浮点或整数值的装置和方法 |
CN104813279B (zh) | 2012-12-28 | 2018-12-18 | 英特尔公司 | 用于减少具有步幅式访问模式的向量寄存器中的元素的指令 |
US9898292B2 (en) * | 2015-02-25 | 2018-02-20 | Mireplica Technology, Llc | Hardware instruction generation unit for specialized processors |
US20180005346A1 (en) * | 2016-07-01 | 2018-01-04 | Google Inc. | Core Processes For Block Operations On An Image Processor Having A Two-Dimensional Execution Lane Array and A Two-Dimensional Shift Register |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4101960A (en) * | 1977-03-29 | 1978-07-18 | Burroughs Corporation | Scientific processor |
US4722052A (en) * | 1984-04-02 | 1988-01-26 | Sperry Corporation | Multiple unit adapter |
US4791560A (en) * | 1985-07-31 | 1988-12-13 | Unisys Corporation | Macro level control of an activity switch in a scientific vector processor which processor requires an external executive control program |
US4945479A (en) * | 1985-07-31 | 1990-07-31 | Unisys Corporation | Tightly coupled scientific processing system |
JPS62159274A (ja) * | 1986-01-08 | 1987-07-15 | Hitachi Ltd | 条件分岐の分割・複写によるベクトル化方式 |
JPH0724013B2 (ja) * | 1986-09-10 | 1995-03-15 | 株式会社日立製作所 | ベクトルプロセツサ |
US5109523A (en) * | 1987-01-23 | 1992-04-28 | Hitachi, Ltd. | Method for determining whether data signals of a first set are related to data signal of a second set |
US5341482A (en) * | 1987-03-20 | 1994-08-23 | Digital Equipment Corporation | Method for synchronization of arithmetic exceptions in central processing units having pipelined execution units simultaneously executing instructions |
JPS6491228A (en) * | 1987-09-30 | 1989-04-10 | Takeshi Sakamura | Data processor |
US5206903A (en) * | 1990-12-26 | 1993-04-27 | At&T Bell Laboratories | Automatic call distribution based on matching required skills with agents skills |
US5274818A (en) * | 1992-02-03 | 1993-12-28 | Thinking Machines Corporation | System and method for compiling a fine-grained array based source program onto a course-grained hardware |
-
1996
- 1996-10-18 US US08/731,455 patent/US6016395A/en not_active Expired - Lifetime
-
1997
- 1997-08-04 KR KR1019970037223A patent/KR100294016B1/ko not_active IP Right Cessation
- 1997-09-13 TW TW086113323A patent/TW356540B/zh active
- 1997-10-17 JP JP9285854A patent/JPH10207870A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2014513340A (ja) * | 2011-04-01 | 2014-05-29 | インテル・コーポレーション | データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法 |
JP2016040737A (ja) * | 2011-04-01 | 2016-03-24 | インテル・コーポレーション | 装置および方法 |
Also Published As
Publication number | Publication date |
---|---|
US6016395A (en) | 2000-01-18 |
TW356540B (en) | 1999-04-21 |
KR19980032264A (ko) | 1998-07-25 |
KR100294016B1 (ko) | 2002-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JPH10207870A (ja) | ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法 | |
JP3983857B2 (ja) | ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 | |
JP3847672B2 (ja) | コンパイラ装置及びコンパイル方法 | |
US8893095B2 (en) | Methods for generating code for an architecture encoding an extended register specification | |
KR100505799B1 (ko) | 코프로세서 데이터 액세스 제어 | |
US7386844B2 (en) | Compiler apparatus and method of optimizing a source program by reducing a hamming distance between two instructions | |
US5958048A (en) | Architectural support for software pipelining of nested loops | |
KR100715055B1 (ko) | Vliw 프로세서, 인스트럭션 컴파일 방법, 머신 판독가능한 매체 및 컴퓨터 프로그램 실행 방법 | |
KR100705507B1 (ko) | 확장가능한 프로세서 아키텍처에 진보된 명령어들을부가하는 방법 및 장치 | |
US20070011441A1 (en) | Method and system for data-driven runtime alignment operation | |
US6795908B1 (en) | Method and apparatus for instruction execution in a data processing system | |
US20060095721A1 (en) | Tightly coupled accelerator | |
TW200945190A (en) | Processor | |
US7447886B2 (en) | System for expanded instruction encoding and method thereof | |
KR100267089B1 (ko) | 스칼라/벡터연산이조합된단일명령복수데이터처리 | |
US6857063B2 (en) | Data processor and method of operation | |
KR100520807B1 (ko) | 데이터 처리 조건 코드 플래그 | |
KR20000048531A (ko) | 데이터 처리장치에서의 입력 오퍼랜드 제어 | |
KR100267092B1 (ko) | 멀티미디어신호프로세서의단일명령다중데이터처리 | |
Johnstone et al. | Reverse compilation of Digital Signal Processor assembler source to ANSI-C | |
JP4879589B2 (ja) | コンパイラ装置 | |
Shi et al. | C/C++ compiler support for Siemens TriCore DSP instruction set | |
JP2010186487A (ja) | コンパイラ装置及びそのシステム | |
JP2002091779A (ja) | コード方式アーキテクチャ |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20040810 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20041110 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20050614 |
|
A521 | Written amendment |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20051013 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20051026 |
|
A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20051222 |
|
A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20081008 |
|
A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20081014 |