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
Application number
JP9285854A
Other languages
English (en)
Inventor
Moataz A Mohammed
エー モハメッド モアタズ
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JPH10207870A publication Critical patent/JPH10207870A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/22Microcontrol or microprogram arrangements
    • G06F9/28Enhancement of operational speed, e.g. by using several microcontrol devices operating in parallel
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions 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

(57)【要約】 【課題】 本発明はMSP媒体プロセッサ上にベクトル
二重スレッドプログラムを記録するに一番適したC++
言語の母集合の新しいプログラム要素を提供し、且つ効
率的なプログラミングと最適のMSP対象コード発生を
容易にするコンピュータプログラムの生成方法に関す
る。 【解決手段】 MSPプログラミングモデルによれば、
ARM7プロセッサはVPを制御し得るが、VPはAR
M7プロセッサを制御することができない。ARM7プ
ログラムはVPに課題をスケジューリングし、この課題
と同期を保持する役割を果たす。この目的のために2つ
の構成がVIVIDに提供される。また、MSPのフォ
ーク/ジョインモデルをVIVIDプログラマに示すこ
とにより、C++要素拡張を通じた二重スレッド実行を
容易にするとともに、ベクトル演算から多数の回帰結果
を容易に獲得する構文または意味論を含む。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明は高級プログラミング
言語で記録されたプログラムから実行可能なコードを生
成するもので、より詳しくは高級言語で作成されたプロ
グラムからベクトルプロセッサの実行可能コードを生成
するコンピュータプログラム生成方法に関する。また、
本発明は高級言語で作成されたプログラムから並列実行
可能コードを発生するものである。
【0002】
【従来の技術】ANSIやC++などの高級言語はベク
トル演算ではごく限られた機能を提供できるに過ぎな
い。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++コードは下記のように
表現されることができる。
【0003】 int i, vector a[10], vector b[10]. vector c[10]; for(i=0, i<10, i++) {vector c[i] = vector a[i] + vector b[i]; } この法則において、例外は静的(static)ベクトル配列が
下記のように宣言文で単一指定演算によって初期化され
得ることである。 int vector a[10] = [10, 8, 3, 5,
7, 23, 12, 1, 0, 9];
【0004】
【発明が解決しようとする課題】一方、ベクトルプロセ
ッサは要素の集合としてよりは単一要素としてベクトル
全体に作用するいろいろの命令文を支援する。このよう
な命令文を生成するにはベクトル演算を行うプログラム
コンパイラがvector a とvector b の加算の場合に与
えられた上記例のようなコードからベクトル演算を認識
すべきである。従って、コンパイラによるベクトル演算
の認識を容易にする高級言語が必要である。これと共
に、プログラマが2つのプロセッサ間の疎通を制御する
ようにする高級インタフェースを設けることが好まし
い。
【0005】本発明の目的は、高級プログラミング言語
で作成され、ベクトルオペランド(operand) をもってお
り且つ文章を具現する一つ以上の第2命令語を含む実行
可能プログラムを生成する一つ以上の文章を含むプログ
ラムを読み出すことにより、ベクトルプロセッサによっ
て実行されるように構成されたコンピュータプログラム
の生成方法を提供することにある。
【0006】本発明の他の目的は、ベクトルプロセッサ
とRISCプロセッサを備える二重プロセッサのための
二重スレッド(thread)されたコンピュータプログラムの
生成方法を提供することにある。
【0007】
【課題を解決するための手段】上記目的を達成するため
に、本発明によれば、ベクトルプロセッサで実行するコ
ンピュータ判読可能媒体にコンピュータプログラムを生
成するコンピュータプログラム生成方法は、ベクトルプ
ロセッサで処理されるどの種類の演算をも指定しない高
級言語で記述されたコンピュータプログラムを読み取る
コンピュータシステムである。このプログラムは、ベク
トル型の値を含み、オペランドとして前記ベクトル型値
を含む第1演算を備え、この第1演算はベクトルオペラ
ンドを持つことが可能なベクトルプロセッサ命令VPI
1に対応する。そして、コンピュータシステムは、第1
演算で処理される1以上のベクトルプロセッサ命令を生
成し、1以上の命令は1以上のVPI1命令を含む。
【0008】また、本発明はMSP媒体プロセッサ上に
ベクトル二重スレッドプログラムを記録するに適したC
++言語の母集合の新しいプログラム要素を提供し、且
つ効率的なプログラミングと最適のMSP対象コード発
生を容易にする構文論または意味論的に新しい言語構成
を開始する。VIVID状態でVECTOR及びGMA
SKのような新しいデータ型とともに@shfl、@a
vgのようにMSP命令語に直接マッピングされる演算
子集合を開発し、MSPのフォーク/ジョインモデルを
VIVIDプログラマに露出させることにより、C++
要素拡張を通じた二重スレッド実行を容易にする。これ
と共に、本発明はVD@@VC=VA@shflVBの
ようにベクトル演算から多数の回帰結果を容易に獲得す
る構文または意味論を含む。
【0009】一実施例はC++の母集合であるプログラ
ミング言語を取り扱う。この実施例では、新しい言語構
成としてベクトルプロセッサの命令語集合をプログラマ
に露出させる一方、プログラムがベクトルプロセッサの
プログラミングモデルに応じて高級C++コードを作成
し得るようにする。前記言語はデータ型と前記新言語構
成を含んでANSI及びC/C++言語へのベクトル拡
張を規定する。また、前記言語は低級(low-level) ハー
ドウェア特徴を高級プログラマに露出させるために拡張
言語としてインタフェースを提供することにより、最適
のベクトル命令を発生するに当たってコンパイラを支援
する。
【0010】本発明の実施例によれば、高級言語は高級
インタフェースを提供して、プログラマが前記2つのプ
ロセッサ間の疎通を制御するようにする。前記言語はこ
のような疎通を制御する命令を露出させる。従って、実
施例によれば、前記高級言語は補助プロセッサを活性化
するように主プロセッサを指導するフォーク(fork)命令
を露出させる。また、前記言語は前記補助プロセッサが
活性化されて行った課題を完了したという事実を主プロ
セッサに信号するように補助プロセッサを指導するジョ
イン(join)命令を露出させる。
【0011】
【発明の実施の形態】VIVIDはマルチメディア信号
プロセッサ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)を含む。
【0012】VIVIDは特殊データ型と言語構成で標
準ANSIC/C++言語を拡張して二重スレッドベク
トル化様式におけるプログラミングを効率的で直観的に
し、且つ効率的で最適化したMSP命令コードの発生時
にコンパイラを支援する。これにより、VIVIDはベ
クトルプロセッサの高級言語インタフェースを提供す
る。高級言語インタフェースはベクトルプロセッサ32
0の命令語集合を一般コンピュータを用いるソフトウェ
ア開発者に明示するものであり、付録A〜FにMSPプ
ロセッサに対する説明とARM7及びVP命令語集合を
提示した。本発明への使用に適したコンパイラはカリフ
ォルニア州サンタクルーズ所在のMetaware会社の製品で
ある。図2は高級言語で作成された実行可能なプログラ
ムを発生する過程を示す。まず、段階200でVIVI
Dコンパイラ(図示せず)が高級言語を読み出した後、
段階210で高級言語プログラムがVIVID(即ち、
ベクトル)命令語を含むか否かを決定する。もし、プロ
グラムがベクトル命令を含まなければ、VIVIDコン
パイラによる以後の動作が不要になり、C/C++コン
パイラは前記プログラムをコンパイル(compile) する。
もしこのプログラムがVIVID命令を含むなら、この
命令は段階220でベクトルプロセッサによる実行可能
なプログラムで翻訳される。
【0013】新しいデータ型 この言語は下記の新データ型をもってANSIC/C+
+言語を拡張する。
【0014】ベクトル VECTOR《要素データ型》、〈要素数〉vector identifi
er 前記宣言文はベクトル_識別者が所定要素数のベクトル
であることを宣言する。ベクトルは一般に同一の《要素
データ型》の複数変数または定数である。一部の実施の
形態ではこのような変数或いは定数はコンピュータ記憶
装置の論理アドレス空間に連続的に格納される。ベクト
ルの〈要素数〉はMSPハードウェアの処理系と関係が
ない。要素数は奇数或いは素数を含んだいずれの数も可
能である。VIVIDコンパイラはコードを発生する。
例えば、MSPの現在のハードウェアの処理系は329
−ビットバイト(各バイトの9番目のビットは下記に説
明された通りにバイト9データ型と関連のない演算では
無視される)を有するベクトルのそれぞれを支援する。
宣言文における要素数は20,50,128或いはこれ
より大きい場合もある。
【0015】宣言文例 VECTOR <short int, 64> x; VECTOR <char, 32> C; この宣言文におけるベクトルサイズ(即ち〈要素数〉)
は128であり、ハードウェアの処理系は32バイトベ
クトルを使用すると仮定し、且つVIVIDプログラム
は下記の文章を含むと仮定する。
【0016】 VECTOR <int,128> VA,VB,VC; VC = VA + VB; それから、VIVIDコンパイラはアセンブラ形態の下
記のコードを発生する。前述のアセンブラフォーマット
及びベクトルプロセッサ命令は付録Fに記述されてい
る。VIVID文章VC=VA+VBは下記のVIVI
D“関数構文”文章で置き換えることができる。
【0017】 VC = vvadd(VA,VB); これらの2つのコードセグメントは全て下記のVPコー
ドを発生する。 VLI.w SR1, VA address// ベクトルVAのアドレスを
スカラレジスタSR1にロードする。スカラレジスタは
付録Cに記述されている。 VL.w VR1,SR1, 0// VAの一番目の8つの単語(32
バイト)をベクトルレジスタVR1にロードする。ベク
トルレジスタは付録Cに記述されている。
【0018】VL.w VR2,SR1, 8// 2番目の32バイト
をロードする。 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バイトベクトル全体に対するベクトル加算を行
う。
【0019】 VADD.w VR20,VR1,VR11 VADD.w VR21,VR2,VR12 VADD.w VR22,VR3,VR13 VADD.w VR23,VR4,VR14 VAの格納されたロジックメモリのアドレスはスカラレ
ジスタSR1にロードされる。その後、VAの全ての要
素はそれぞれロジックメモリのそれぞれのロケーション
で32バイト(VAの8つの要素)を格納するベクトル
レジスタVR1〜VR4にロードされる。VL命令は基
本スカラレジスタとこのレジスタに格納されているアド
レスに加算された即値(immediate) オフセット値を用い
てロジックメモリロケーションを参照する。所定の即値
(immediate value) はレジスタのアドレスとしてよりは
命令の一部としてCPUに供給されるオペランドであ
る。明確性を期するために、VPアセンブリコードにお
ける即値としてのオペランドは“#”と前提される。そ
の後、VBは類似の過程を経てベクトルレジスタVR1
1〜VR14にロードされる。最後に、VR1〜VR4
及びVR11〜VR14は要素別に加算され、その結果
はベクトルレジスタV20〜V23に格納される。
【0020】ベクトル- スカラ混合形では即ち、スカラ
値がベクトルの各要素に加算されるとしたら、下記のV
IVID文章は加算を行う。 VECTOR <int,8>VC,VA; int,x VC = VA + x; VC = vsadd<VA,x>;//関数構文 VIVIDコンパイラのレジスタ割当器はコードの発生
に際して状況や発見的解決方法(heurisitics) に依存し
て互いに異なるベクトルレジスタを割り当てるか或いは
同一のレジスタを再使用することにより任意的に大きい
ベクトル具現する。レジスタ割当部が現在MSPの処理
系をもって効率的に行うためには_VECTOR宣言文
においてベクトル要素数の固定上限は256バイトであ
る。しかし、他の実施の形態ではベクトルの要素数に対
する限界が異なり、本発明は特定ベクトル要素数に限定
されない。
【0021】_VECTORデータ型はVIVIDC+
+言語の“第1市民”として取り扱われ、原始的なデー
タ型を期待するC++のSTRUCTS,UNIONS
及び他の構成内に現すことのできるものである。_VE
CTORデータはパラメータとしてパスされて結果に帰
還する。
【0022】例えば、STRUCT内でベクトルは下記
のように示される。 コンパイラは宣言された_VECTORサイズに基づい
た構造に対してメモリを充分割り当てなければならな
い。この時、“第1市民”状態は_VECTOR型と他
のデータ型間の型キャスト及び変換が許容されることを
意味するのではない。
【0023】一部の実施の形態において2つ以上の_V
ECTORオペランドを有するVIVID文章は全ての
ベクトルオペランドが同一のデータ型及び同一の要素数
になるべきであり、_VECTORオペランドの要素デ
ータ型は符号のある量(signed quantity) でなければな
らない。
【0024】マトリックス MATRIX <<element data type>>,< rows>,< cols>
matrix identifierこの構成は変数“matrix identifi
er”が所定要素数のマトリックスであることを宣言す
る。マトリックスは多次元ベクトルである。本発明は便
宜上2次元マトリックスを記述する。しかし、当業者に
は2次元以上のマトリックスを含むために本説明を拡張
する方法が明らかなものである。行または列当たり要素
数はMSPハードウェアの処理系とは関係なく、奇数ま
たは素数を含んでいずれの数でも構わない。従来技術に
よれば、VIVIDにおいて全ての_MATRIX演算
は先行優先(row major) 方式で前記要素に作用する。即
ち、要素単位演算はまず第1行の全ての要素に作用し、
その後第2行の全ての要素に作用する。VIVIDコン
パイラはVPのベクトルレジスタに_MATRIXを割
り当てるためにコードを発生する。各ベクトルレジスタ
は所定の行または所定の行の一部を含む。例えば、下記
のVIVIDコードが在る。
【0025】 MATRIX <int,8,8> MA,MB,MC; MC = MA + MB; 前記発生したVPコードは8ベクトルレジスタにマトリ
ックスのそれぞれを割り当て、各ベクトルレジスタは8
整数要素を含む。ここで、便宜上Aマトリックスを含む
レジスタをVA1〜VA8、Bマトリックスを含むレジ
スタをVB1〜VB8、Cマトリックスを含むレジスタ
をVC1〜VC8と称し、これらレジスタはVC=VA
+VBのための前記例においてベクトルVA,VBに使
われる同一の図式を用いるマトリックスA,B,Cの値
をロードすると仮定する。コンパイラによって発生する
MSPコードは下記の通りである。
【0026】 VADD.w VC1,VA1,VB1 VADD.w VC2,VA2,VB2 VADD.w VC3,VA3,VB3 VADD.w VC4,VA4,VB4 VADD.w VC5,VA5,VB5 VADD.w VC6,VA6,VB6 VADD.w VC7,VA7,VB7 VADD.w VC8,VA8,VB8 _MATRIXMAの要素は_MATRIXMBの対応
要素(同一の指数(index) を有する要素)に加算され、
その結果は_MATRIX MCの対応要素に格納され
る。
【0027】本実施の形態において_MATRIXデー
タ型に定義された演算は加算、減算、乗算、平均に限定
される。加算、減算、乗算は_MATRIXオペランド
の同一の指数値を有する要素上に要素単位で行われた従
来の算術演算である。平均は2分割による加算を含む。
しかし、他の実施の形態では_MATRIXデータ型上
に他の命令を定義し、本発明は_MATRIXデータ型
上に定義された演算の所定の集合に限定されない。
【0028】BYTE- 9データ型 MSPはMPEG適用例に使われるための特殊9- ビッ
トデータ型byte9を提供する。このデータ型は発生
する命令が全てbyte9モードの場合を除いては大部
分の場合に無効(char)として取り扱う新しいデー
タ型であってVIVIDから支援される。例えば、VI
VIDにおける下記の文章は下記の命令文を生成する。
【0029】byte9x,y,z z=x+y; はコード VADD. b9 x,y,z;を発生する。同様に、 _vector〈byte9,32〉VA,VB,V
C; VC=VA @mad VB; はコード VMAD. b9 VC,VA,VB;を発生する。
【0030】全域マスク また、VIVIDは要素マスク(element mask)及びメモ
リマスク(memory mask) と呼ばれる2つの特殊データ型
を定義することにより、C言語を拡張する。この要素マ
スクはベクトルALU演算で作用する有効要素を定義す
る特殊目的の32ビットスカラ値として取り扱われる
(要素マスクによって影響を受ける演算の全体目録は付
録Fを参照)。このマスクのビットはベクトルレジスタ
オペランドにおける対応バイトまたはbyte9(9ビ
ットバイト)がベクトルALU演算で使用するものであ
れば指定される。例えば、マスク1111000011
1100001111000011110000はAL
U演算用ベクトルオペランドのワード(4バイト)を交
互に(一つずつスキップしながら)選択する。残りの単
語は演算されない。もし要素マスクが定義されていない
なら、要素マスクによって影響を受ける演算はベクトル
の全ての要素に作用する(即ち、デフォールト(defaul
t) マスクはビットごとに論理値を有する)。下記のV
IVIDコードは要素マスクを宣言する。
【0031】 EMASK E; EMASK = <constant hex value>; EMASK = OxABCD120F;//hex value ABCD120F これと同様に、メモリマスクはメモリへ/からの全ての
ベクトルロード/格納動作に作用する有効要素を定義す
る特殊目的のスカラレジスタとして取り扱われる。メモ
リマスクが定義されていないなら、メモリマスクによっ
て影響を受ける演算はベクトルの全ての要素に作用する
(即ち、デフォールト(default) マスクはビットごとに
論理値を有する)。下記のVIVIDコードはメモリマ
スクを宣言する。
【0032】 MMASK M; MMASK = <constnat hex value>; MMASK = OxABCD120f;//hex value ABCD120F 例えば、下記の文章順序はベクトルVBとVCの毎奇数
要素が共に加算される。 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 }。
【0033】ベクトル初期化 VIVIDはCが配列や構造などに与えられるベクトル
の初期化の同一の形態を使用する。即ち、ベクトルまた
はマトリックスを初期化するためには下記のように宣言
文にデータを規定する。 VECTOR <int,8> A ={100,27,28,29,30,31,32,33}; MATRIX <int,2,2> M ={4,5,6,7 }; マトリックスは先行優先方式で演算されるので、前記宣
言文は下記のように要素に値を割り当てる。
【0034】 M[0,0] = 4; M[0,1] = 5; M[1,0] = 6; M[1,1] = 7; 式M[i,j]で、iは行番号、jは列番号である。i
値は0から行番号−1まで変わり、j値は0から列番号
−1まで変わる。
【0035】新しい特殊ベクトル演算 MSP特徴を効率的に用いるのに役に立ち、より優れた
コードを発生するコンパイラを支援するために、VIV
IDは特殊命令として利用可能な多数の特殊ベクトル演
算に高級プログラミングインタフェースを提供する。こ
のような演算は下記のように表すことができる。
【0036】加算及び加算符号 VECTOR <int,8> VC,VA,VB; int s; VC = VA @aas3 VB; 関数構文 VC = vvaas3(VA,VB); ベクトル- スカラ混合モードでは VC = vsaa3(VA,s); この関数は指数iを有するベクトルVAの各要素を指数
iを有するVBの要素に加算して中間和を発生した後、
VAのi番目の要素の符号(要素値が陽であれば1、陰
であれば−1、0であれば0)を中間結果に加算し、2
つのベクトル引数(augument)として呼び出されると、こ
の値をVCのi番目の要素に格納する。この関数はスカ
ラsを指数iを有するベクトルVAの各要素に加算して
中間和を発生した後、VAのi番目の要素の符号を中間
結果に加算し、一つのベクトルと一つのスカラ引数で呼
び出されると、この値をVCのi番目の要素に格納す
る。
【0037】 VAAS3.w VR3,VR1,VR2// VR1,VR2,VR3 はそれぞれVA,VB,VCを //格納する。 VAAS3.w VR2,VR1,SR1// VR1,VR2,SR1 はそれぞれVA,VC,s を // 格納する。
【0038】水平加算 VECTOR <int,8> VC,VA,VB; int s; VC = VA @addh VB; //水平加算 VC = VA @addh s; 関数構文 VC = vvaddh(VA,VB); VC = vsaddh(VA,s); この関数は図6を参照すると、指数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 を格納する。
【0039】ベクトル論理積 VECTOR <int,8>VC,VA,VB; VC = VA & VB;//Vector AND 関数構文 VC = vvand(VA,VB); この関数はベクトルVAとVBの論理積を計算してベク
トルVCに格納する。VAとVBの対応ビットの全てが
論理値である時のみがVCのビットは論理値であり、そ
うでなければVCビットは論理0である。この内容は下
記のVPコードを発生する。 VADN.w VR3,VR1,VR2//VR1,VR2,VR3 は //それぞれVA,VB,VCを格納する。
【0040】ベクトル論理和 VECTOR <int,8>VC,VA,VB; VC = VA |VB;//Vector OR 関数構文 VC = vvor(VA,VB); この関数はベクトルVAとVBの論理和を計算してベク
トルVCに格納する。VAとVBの対応ビットのうちい
ずれか一つが論理値である時のみがVCのビットは論理
値であり、そうでなければVCビットは論理0である。
この内容は下記のVPコードを発生する。 VOR.w VR3,VR1,VR2 // VR1,VR2,VR3はそれぞれVA,VB,VC
を格納する。
【0041】ベクトル否定論理和 VECTOR <int,8> VC,VA,VB; VC = VA @NOR VB; 関数構文 VC = vvnor(VA,VB); この関数はベクトルVAとVBの否定論理和を計算して
ベクトルVCに格納する。VAとVBの対応ビットのう
ち全てではないいずれか一つが論理値である時、VCの
ビットは論理値であり、そうでなければ、VCビットは
論理0である。この命令文は下記のMSPコードを発生
する。 VNOR.w VR3,VR1,VR2 // VR1,VR2,VR3 はそれぞれVA,VB,
VCを格納する。
【0042】ベクトル移動 VECTOR <int,8> VC,VA; int s; VC = VA >> s; //右への移動 VC = VA << s; //左への移動 関数構文 VC = vasr(VA,s); //右への移動 VC = vasl(VA,s); //左への移動 この関数はベクトルVAの各要素に対してsビット単位
で右側に算術的移動を行う。算術移動は毎要素の符号が
保存される移動演算である。符号のある整数は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 を格納する。
【0043】ベクトル絶対減算 VECTOR(int,8)VC,VA,VB; int s; VC = VA @asub VB; 関数構文 VC = vvasub(VA,VB) VC = vsasub(VA,s) この関数は指数iを有するベクトルVBの各要素の値を
指数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 を格納する。
【0044】ベクトル平均 VECTOR <int,8> VC,VA,VB; int s; VC = VA @avg VB; 関数構文: VC = vvavg(VB,VA); VC = vsavg(VB,s); この関数はベクトルVAとVBの平均を計算して、2つ
のベクトル引数で呼び出されたなら、その結果をベクト
ル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 を格納する。
【0045】ベクトル水平平均 VECTOR <int,8> VC,VA,VB int s; VC = VA @avgh VB; 関数構文: VC = vvavgh(VB,VA); VC = vsavgh(VB,s); この関数は図7に示すように、指数iを有するベクトル
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 を格納する。
【0046】4ベクトル平均 VECTOR <int,8> VC,VA,VB; VC = VA @avgq VB; 関数構文: VC = vvavq(VB,VA); この関数は図8に示すように、指数iを有するベクトル
VAの各要素と指数i+1を有するVAの要素と指数i
及びi+1を有するベクトルVBの要素との平均を計算
して、指数iを有するベクトルVCの要素にその結果を
格納する。ベクトルVCの最終要素は定義されない。こ
の命令文はそれぞれ下記のVPコードを発生する。 VAVGQ.w VR3,VR1,VR2 。
【0047】浮動ベクトルから固定ベクトルへの変換 VECTOR<float,8>VA; VECTOR<int,8>VC; int s; VC = VA @cvtff s; 関数構文: VC = vcvtff(VA,s) この関数はベクトルVAの各32ビット浮動小数点要素
をベクトルVCの固定小数点要素に変換する。VCの各
要素は整数部分と端数部分に分けられる浮動小数点数で
あるが、整数部分はs最上初ビットを占め、端数部分は
残りのビットを占める。この内容は下記のVPコードを
発生する。 VCVTFF VR3,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,s を格納する。
【0048】浮動変換のベクトル整数 VECTOR<int,8>VA; VECTOR<float,8>VC; VC = @cvtif VA; 関数構文: VC = vvcvtif(VA) この関数はベクトルVAの各32ビット整数要素をベク
トルVCの浮動小数点要素に変換する。前記文章は下記
のVPコードを発生する。 VCVTIF VR2,VR1 // VR1,VR2 は //それぞれVA,VC を格納する。
【0049】ベクトル比較及びマスク指定 VECTOR<int,8>VA,VB; MMASK M; M = VA "c op" VB; 関数構文 M = vcmpv(VA,VB,c op) ここで、"c op" は<,<=,>,>=,==, 或いは!=. この関数はベクトルVAとVBの要素単位比較を実行し
てその結果をマスクMに格納する。マスクMはベクトル
における各要素位置に対する所定のビット数を有する。
このビット数はデータサイズに左右される。一般に1ビ
ットはベクトルの各要素で各バイト或いはbyte9の
ためにある。例えば、intのサイズが4バイトである
ため、要素データ型int4ビットはマスクに割り当て
られる。i番目の要素位置に対応するマスクMの〈要素
データ型〉に左右されるビット数は、VAとVBのi番
目の要素に対するc−op演算がTRUE結果になれば
指定され、そうでなければリセットされる。マスクのビ
ットはベクトル要素と同一の位置に現れ、マスクMはE
MASK変数或いはMMASK変数である可能性があ
る。
【0050】ベクトルの先頭0カウント VECTOR<int,8>VC,VA; VC = @vcntlz VA; 関数構文 VC = vvcntlz(VA) この関数はベクトルVAの各要素における先頭0の数を
カウントしてその値をベクトルVCの対応要素に記録す
る。この関数は下記のMSPコードを発生する。 VCNTLZ.w VR2,VR1N ベクトル除算 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 を格納する。
【0051】ベクトル抽出 VECTOR<int,8>VA; int s,i; s = VA @extrt i; 関数構文: s = vextrt(VA,i) この関数はベクトルVAのi番目の要素を抽出してスカ
ラsに格納する。この内容は下記のVPコードを発生す
る。
【0052】ベクトル符号抽出 VECTOR<int,8>VA; VC = @extsgn2 VA; VC = @extsgn3 VA; 関数構文: VC = vextsgn2(VA); VC = vextsgn3(VA) この関数はベクトルVAの各要素の符号(−1,0,
1)を抽出し、ベクトルVCの対応要素に格納する。も
し、VA要素が正であればその符号は1である。VA要
素が負であればその符号は−1である。もし@extsgn2が
使われると、0要素の符号は0である。この命令文は下
記のMSPをそれぞれ発生する。
【0053】
【0054】ベクトル要素1移動 VECTOR<int,8>VC,VA; int sa,sb; VC @@sa = VA @esr sb; VC @@sa = VA @esl sb; 関数構文: vesr(VC,sa,VA,sb) vesl(VC,sa,VA,sb) 関数@esrは図10に示すように、1だけ右側にVAの要
素を移動し、その結果をVCに格納し、溢れた一番右側
要素はsaに格納する。VAの一番左側要素はsbが供
給する。同様に、関数@eslは図10に示すように、
1だけ左側にVAの要素を移動し、その結果をVCに格
納し、溢れた一番左側要素はsaに格納する。VAの一
番右側要素はsbが供給する。この内容は下記のVPコ
ードを発生する。
【0055】 VESR.w SR2.VR2.VR1.SR1 // VR1,VR2,SR1,SR2 は //それぞれVA,VC,sa,sb を格納する。 VESL.w SR2.VR2.VR1.SR1 // VR1,VR2,SR1,SR2 は //それぞれVA,VC,sa,sb を格納する。
【0056】ベクトル挿入 VECTOR<int,8>VC,VA; int s; VC = VA @insrt s; 関数構文: VC = vinsrt(VA,s)ベクトル論理移動 VECTOR<int,8>VC,VA; int s; VC = VA @lsl s; //左への移動 VC = VA @lsr s; //右への移動 関数構文 VC = vlsl(VA,s);// 左への移動 VC = vlsr(VA,s);// 右への移動 この関数は特定方向にベクトルVAの各要素の論理移動
を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 を格納する。
【0057】ベクトル乗算 VECTOR<int,8>VC,VS,VA,VB; VECTOR<int,8>VD,VE; VD @@ VE = VA @mad(VB,VC); VS = VA @mad1(VB,VC) VC @@ VS = VA @mul VB; VD = VA @mulf VB; VC = VA @mulf VB; 関数構文 vmad(VD,VE,VA,VB,VC); vmadl(VS,VA,VB,VC); v*mul(VS,VA,VB,VC); v*mulf(VD,VA,VB); v*mull(VS,VA,VB); 関数@madは優先的にVBの対応要素だけVAの各要
素を乗じてVCの対応要素を前記乗算の倍精度(double
precision)結果に加算し、2倍精度ベクトルVDの対応
要素に前記加算の倍精度結果を格納する。関数@mad
lは結果の下位部分(最下位ビット)のみが単精度ベク
トルVSに格納されることを除いては同一の機能を行
う。関数@mulはVAの各要素をVBの対応要素に乗
じて倍精度結果の上位部分(最上位ビット)をVCの対
応要素に、結果の下位部分をVSの対応要素に格納す
る。命令語@mulfはベクトルVAの各要素をVBの
対応要素に乗じ、倍精度結果を1ビット左に移動した後
その結果を倍精度ベクトルVDの対応要素に格納する。
命令語@mullはVAの各要素をVBの対応要素に乗
じて倍精度結果の下位部分(最下位ビット)をVSの対
応要素に格納する。前記関数は下記のVPコードを発生
する。
【0058】 VMAD.w VR3,VR4,VR1,VR2 // VR1,VR2,VR3,VR4 は //それぞれVA,VB,VC,VD をそれぞれ格納する。 VMADL.w VR3,VR4,VR1,VR2 // VR1,VR2,VR3,VR4は //それぞれVA,VB,VC,VS をそれぞれ格納する。 VMUL.w VR3,VR4,VR1,VR2 // VR1,VR2,VR3,VR4 は //それぞれVA,VB,VC,VS をそれぞれ格納する。 VMULF.w VR3,VR1,VR2 // VR1,VR2,VR3は //それぞれVC,VA,VBをそれぞれ格納する。 VMULL.w VR3,VR1,VR2// 前記と同一。
【0059】ベクトル最大値交換 VECTOR<int,8>VC,VA; VC = @maxe VA; 関数構文 VC = vmaxe(VA); この関数はベクトルVAの要素の偶数/奇数対(要素0
- 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を格納す
る。
【0060】ベクトル回転 VECTOR<int,8>VC,VA,VB; int i; VC = VA @rol i; VC = VA @rol i; 関数構文 VC = vrol(VA,i)//左への回転 VC = vrol(VA,i)//右への回転 この関数はベクトルVAの各要素をiビット位置だけ回
転してその結果をベクトルVCに格納する。@rolで
はビットが左に(最下位ビットから最上位ビットへ)回
転し、@rorでは右に(最上位ビットから最下位ビッ
トへ)回転する。
【0061】前記命令文は下記のMSPコードを発生す
る。 VROL.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,i を格納する。 VROR.w VR2,VR1,SR1 // VR1,VR2,SR1は //それぞれVA,VC,i を格納する。
【0062】多数回帰結果演算 C++には多数回帰結果を扱うのが直説的でない。しか
し、MSP命令語集合は2つのベクトルレジスタまたは
2つのスカラレジスタにその結果を回帰させる構造的概
念を支援する。従って、VIVIDは多数対象のための
特殊構文を提供して標準C++指定演算を拡張する。
【0063】ベクトル論理移動 VECTOR(int,8)VC,VD,VA; int i; VC = VA @lsl i; VC = VA @lsr i; 関数構文 VC = vlsl(VA,i) VC = vlsr(VA,i) この関数はベクトルVAの各要素をiビット数だけ論理
的に移動してその結果をベクトルVBの対応要素に格納
する。@lslの場合、i最下位ビットが0で充填さ
れ、@lsrの場合、i最上位ビットが0で充填され
る。この関数は下記のMSPコードを発生する。 VLSL.w VR2,VR1,SR1 // VR1,VR2,SR1 は //それぞれVA,VC,i を格納する。 VLSR.w VR2,VR1,SR1 // 前記と同一。
【0064】シャフル VECTOR(int,8)VC,VD,VA,VB; VC @@ VD = VA @shfl VB; 関数構文 vshfl(VC,VD,VA,VB); この関数は図4に示すように、ベクトルVAとVBの要
素をシャフルしてその結果をベクトル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 を格納する。
【0065】アンシャフル VC @@ VD = VA @unshfl VB; 関数構文 vunshfl(VC,VD,VA,VB); この関数は図5に示すように、@shflの逆演算、即
ちベクトルVAとVBをアンシャフルしてその結果をベ
クトルVCとVDに格納する。より詳しく説明すると、
VA:VBの偶数要素(ワード0,2,・・・)はVD
に複写され、VD:VAの奇数要素はVCに複写され
る。
【0066】 VD[0] = VB[0],VD[1] = VB[2],...VD[7] = VB[14] VD[8] = VB[0],VD[9] = VA[2],...VC[15] = VA[14]; VC[0] = VB[1],VC[1] = VB[3],...VC[7] = VB[15] VD[8] = VA[1],VD[9] = VA[3],...VD[15] = VA[15]. 前記文章は下記のVPコードを発生する。 VUNSHFL.w VR3,VR4,VR1,VR2 // VR1,VR2,VR3,VR4は //それぞれVA,VB,VC,VD を格納する。
【0067】ベクトルデータ型のための現C演算子のオ
ーバローディング _VECTOR演算子がC及びC++の標準データ型と
同一の構文を使用するようにするために、一部の演算子
はオーバロードされる。即ち、コンパイラがこの演算子
の一つを認識すると、適した機械語命令を発生するため
にオーバランドのデータ型を参照する。下記の事項は_
VECTORデータ型のためにオーバロードされた現C
/C++演算子の目録である。
【0068】ベクトル上の標準算術演算 標準算術演算全部はベクトルに作用するためにオーバロ
ードされる。これは加算、減算、乗算、除算などを含
む。 下記の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//前記と同様なことを発生する。
【0069】ベクトル要素の左/右論理移動 VECTOR<int,8>VC,VA; int s; VC = VA >> i; VC = VA << i; VIVIDのシフト演算子はオーバロードされて要素単
位移動を行う。前記式は最上位ビットに0が充填された
状態でベクトルVAの各要素がiビットずつ左又は右に
それぞれ移動することを示す。前記命令文は下記のMS
Pコードを発生する。 VLSR.w VR2,VR1,SR1 VLSL.w VR2,VR1,SR1。
【0070】乗算及び加算 下記の乗算/加算構成はコンパイラによって認識され
る。 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コードを発生する。
【0071】VAVG.w VR3,VR1,VR2。
【0072】演算子優先権及び数式評価 @operatorsに対する優先方式は下記のようである。 1)単項演算子(unary operator)が一番優先的である。
即ち、 @extsgn VA @addh VB は下記のように解釈される: (@extsgn VA) @addh VB 2)@shufl @unshuflのように多数の結果を回帰する演
算子は単一結果を回帰する演算子に対して一番最後の優
先権をもつ。これは多数の結果が一番最後に生産された
結果であって、より少ない数のソースオペランドを期待
する演算との意味論的な葛藤を引き起こすことを保障す
るためである。
【0073】例えば、文章 VECTOR<int,8>VC,VD,VA,VB,VX,VY; VD @@ VC = VA @shfl VB @addh VX @avg VY; は下記のように解釈される。 VD @@ VC = VA @shfl((VB @addh VX)@avg VY); 言い換えれば、シャフルは最終演算である。同様に、 VD @@ VC = VA @addh VB @avg VY @shfl VZ; は下記のように解釈される。 VD @@ VC = ((VA @addh VB)@avg VY @shf1 VZ; は下記のように解釈される。 3)いろいろ演算子が同一の優先権をもっていれば、左
/右優先権が適用される。
【0074】ベクトルポインタ及び別名分析 VIVIDはベクトルにポインタを用いる便利さを提供
する。宣言文はポインタの指すベクトルのサイズを提供
しなければならない。言い換えれば、_VECTORの
サイズはデータ型の必須部分として取り扱われ、宣言文
の一部として必要である。結果的にベクトルのポインタ
宣言文は下記の通りである。 VECTOR<int,16> * VA; 先行コードはVAが1632- ビット整数のベクトルに
対するポインタであることを宣言する。ANSICの標
準ポインタ算術はベクトルポインタによって支援され
る。従って、一例として、ベクトルポインタはベクトル
における特定要素を索引処理するのに用いるか、ベクト
ルアドレスを関数にパスするのに用いることができる。
ベクトルポインタの典型的な使用例は下記の通りであ
る。
【0075】ベクトルポインタを通じた索引処理 ベクトルポインタを通じてベクトルから特定要素を選択
するためには、ポインタ値に要素の索引を単純に加算し
て下記のように*演算子を用いる。 VECTOR<int,8> VA; int x; x = *(VA + 4); 前記コードはVAがスカラ変数xを指すベクトルで4番
目の要素を割り当てる。
【0076】ベクトルポインタを引数として関数にパス
する 前記VA宣言文があると仮定すると、下記のようにポイ
ンタを関数にパスすることができる。 DCT fn(VA); 前記DCT_f関数インタフェースは下記の構文を有す
る。 VIVIDの効率性を説明する一例をここで提示する。
2つのベクトルをシャフルするための下記のCプログラ
ムを参照。
【0077】 void shuffle(int,VA[],int VB[],int VC[],int VD[]) { int i,j; d = 0: for(i=0; i<7;i+ = 2) { VC[i] = VA[j]; VC[i+1] = VB[J]; j++; } j = 4; for(i=0; i<7; i+ = 2) { VD[i] = VA[j]; VD[i+1] = VB[j]; j++ } } VIVIDにおいて、このプログラムは単純に一つの命
令文として作成されることができる: 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バージョンを呼び出す。
【0078】VIVIDのC/C++の並列プログラム
拡張 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) である。
【0079】フォーク/ジョインを通じた明示的な課題
遂行 MSPプログラミングモデルによれば、図1に示すよう
に、ARM7プロセッサはVPを制御し得るが、VPは
ARM7プロセッサを制御することができない。ARM
7プログラムはVPに課題をスケジューリングし、この
課題と同期を保持する役割を果たす。この目的のために
2つの構成がVIVIDに提供される。
【0080】 FORK<function identifier>; // FORKはVIVIDプログラムのARM7 // セグメントにのみ登場する。 JOIN; // Join はVIVIDプログラムのVPセグメントにのみ登場する。 フォーク文の意味はVPがフォークに規定された関数を
実行し始め、ARM7プログラムはフォークの次の文章
を実行することである。フォーク文は下記の命令語を発
生する。 STARTVP.cond // 付録A参照 ジョイン文はVPが課題実行を終了したことをARM7
に知らせることを意味する。VIVIDのジョイン文は
下記の命令語を発生する。 VCJOIN.cond Offset //付録Aの参照。
【0081】バリヤ同期化 並列処理プログラミングにおいて、プロセッサが同時に
実行するように保障されたプログラムのポイントが必要
であるが、このポイントはバリヤと呼ぶ。MSPの場
合、2つのプロセッサVP,ARM7がある。従って、
バリヤはバリヤに達しようとする第1プロセッサが他の
プロセッサを待つことを意味する。バリヤポイント以後
は両プロセッサが同時に実行する。バリヤ同期化はVS
YNCH,VPTEST,VCINT命令語を用いて具
現される。
【0082】バリヤに対するVIVID構文は
【0083】ロック及びセマホア VIVIDはロック管理特徴を提供する。LockVa
rは所定変数がlock変数、即ちVPとARM7プロ
グラムとも共有データ構造に対する独占的な接近を獲得
するか、危険地域(critical section)を具現するために
使用する共有メモリの変数であることを宣言する。VI
VIDプログラムはLOCK構成を用いてロックに対す
る接近を要請する。この機能は基礎的なものであり、付
録Aに記述されたTESTSET命令文を用いて具現さ
れる。もしロックが獲得されなければ、プログラムはロ
ック変数を待ちながら、LOCK文の次に実行しない。
VIVIDUNLOCK文はロックを解除し、危険地
域、即ち相互排除を要求するコードの終わりを表示す
る。
【0084】 LockVar x; //xがlock変数であることを宣言する。 LOCK(x); //危険地域 UNLOCK(x); ロック及びセマホアはTESTSET 文を用いて具現される。
【0085】VIVIDプログラミング要素C→のため
のBNF文法 下記の文法はBackus-Naur Form(BNF) におけるVIVI
Dベクトル拡張構文を規定する。BNFはプログラミン
グ言語構文を記述するために用いられた形式上の表示で
ある。典型的なBNFは、終了シンボルとして知られた
トークン集合、非終了シンボル集合、分離子(::=)
と分離子の左側に非終了シンボル、分離子右側の一連の
トークン及び非終了シンボルを一つ以上含み、ORの左
右シンボルがその代わりに用いられることを指すOR
(ここでは’|’)によって分離されるプロダクション
(production)集合、非終了開始シンボルの指定など4つ
の成分を含む。
【0086】言語構文はBNFにおいて、その一番目は
開始シンボルから開始され、最後は終了トークンで終わ
るプロダクション集合によって規定される。中間プロダ
クションは一番目のプロダクションにおける各非終了シ
ンボルを追加定義して結果的に各非終了シンボルが一連
の非終了シンボルで置き換えられるようにする。BNF
で規定された言語において、各文章はこれを記述するト
ークン目録を発生するために、開始シンボルから開示さ
れ、追ってのプロダクションによって一番目のプロダク
ションで各要素を代置することにより発生する。VIV
IDBNFはKernighan & Ritchie の付録Aに提示され
たANSIC要素の文法に基づき、ベクトル延長の全て
の構成及び変化は太い(bold)活字で表示される。
【0087】
【表1】
【0088】本発明の一部実施の形態はベクトルプロセ
ッサ構造をCとC++でない他の高級言語で現す。この
高級言語はアセンブリ言語よりは高い水準の言語であ
る。この高級言語は少なくとも一つの命令文を含むが、
この言語はその命令文が機械語で具現される正確な方式
を規定しない。例えば、C言語コード int a,b,c; a = b + c; を見よう。この命令文は下記の機械語で記述することが
できる。ここで、A,B,Cは変数a,b,cの論理メ
モリアドレスを表示する。
【0089】 VL.w SR1,B, 0 VL.w SR2,C, 0 VADD.w SR3,SR1,SR2 VSTO.w SR3,A 本発明の高級言語はメモリ変数を含むが、この変数がベ
クトルプロセッサにどのように格納されるかを規定しな
い。例えば、C言語プログラムが int a; を定義すると、変数aは主メモリまたはレジスタに格納
することができる。C言語プログラムがレジスタ利用可
能であってレジスタに変数を格納するように規定すると
しても、或いはレジスタに変数を実際格納するとして
も、具体的なレジスタはCプログラムでないCコンパイ
ラによって規定される。この高級言語の長所としては具
体的な機械語命令や変数格納方式などの詳細な具現方法
からプログラマの手数が省ける。
【0090】また、ベクトルプロセッサの命令文の露出
とともに、変数が正確にどこに、即ち主メモリ、レジス
タ、或いはあるレジスタに格納するかを決定する必要が
ない。しかし、効率的な機械語コード(迅速に実行され
る小さいコード)を生成するのにプログラマがコンパイ
ラを支援するようにすることができる。これはプログラ
マがベクトルプロセッサ(288ビットベクトル、by
te9)の支援データ型を定義するようにすることによ
り達成される。ベクトルがベクトルプロセッサによって
支援されないサイズを有するとしても、_VECTOR
文に規定されたサイズのベクトルを含むベクトルプロセ
ッサでコンパイラがベクトルの組合せを割り当てること
は簡単である。
【0091】これと共に、本発明のC言語拡張はベクト
ルプロセッサの命令語に対応する命令語を含む。もしC
命令文のオペランドが対応するベクトルプロセッサ命令
文を支援し得るデータ型を有するならば、コンパイラは
C命令文を対応するVP命令文に容易に変換することが
できる。もし前記オペランドのデータ型がVP命令文に
よって直接支援されないならば(例えば、オペランドが
64バイトでなく、70バイトのベクトル)コンパイラ
は対応するVP命令文を容易に幾度も用いてC命令文を
具現することができる。なお、図9、図11〜図14は
それぞれ、本発明の一部実施の形態に用いられるベクト
ルプロセッサの演算を説明するためのブロック図であ
る。
【0092】本発明を特定の好ましい実施の形態に関連
して説明したが、本発明は必ずしもこれに限定されるの
ではない。一部の実施の形態は他の演算集合を提供し、
2つ以上のプロセッサを備える。従って、特許請求範囲
によって示される本発明の精神や分野を離脱しない範囲
内での本発明の種々の改造または変形は本発明の範疇に
含まれる。
【0093】付録A 表A.1はベクトルプロセッサ相互作用のためのARM
7命令語集合の拡張を示す。
【0094】
【表2】
【0095】
【表3】
【0096】表A2は誤りのある命令語を実行する前に
検出されて報告されたARM7の例外処理目録である。
例外処理ベクトルアドレスは16進表記法で与えられ
る。
【0097】
【表4】
【0098】次に、ARM7命令語集合の拡張構文を記
述する。命名法説明及び命令語フォーマットのためのA
RM構造文書またはARM7データシート(1994年
に発行された文書番号ARMDDI0020C)を参照
する。ARM構造はコプロセッサインタフェースのため
の3つの命令語フォーマットを提供する: 1.コプロセッサデータ演算(CDP) 2.コプロセッサデータ移動(LDC,STC) 3.コプロセッサレジスタ転送(MRC,MCR) MSP構造的拡張は3つの形式をいずれも利用する。コ
プロセッサのデータ演算フォーマット(CDP)はAR
M7に回帰する必要のない演算に用いられる。
【0099】
【表5】
【0100】CDPフォーマットのフィールドは次の規
約をもつ:
【0101】
【表6】
【0102】コプロセッサデータ転送フォーマット(L
DC,STC)はベクトルプロセッサのレジスタの部分
集合をメモリに直接ロードするか格納することに用いら
れる。ARM7プロセッサはワードアドレスを供給する
ものであり、ベクトルプロセッサはデータを供給又は収
容して、転送されたワードの数を制御する。より詳細な
ことはARM7データシートを参照する。
【0103】
【表7】
【0104】このフォーマットのフィールドは次の規約
をもつ:
【0105】
【表8】
【0106】コプロセッサレジスタ転送フォーマット
(MRC,MCR)はARM7とベクトルプロセッサと
の間に直接的な情報通信のために用いられる。このフォ
ーマットはARM7レジスタとベクトルプロセッサスカ
ラまたは特殊レジスタとの間の移動に用いられる。
【0107】
【表9】
【0108】このフォーマットのフィールドは次の規約
を持つ:
【0109】
【表10】
【0110】拡張ARM命令語説明 拡張ARM命令語はアルファベット順で記述される。
【0111】CACHE キャッシュ演算
【0112】
【表11】
【0113】・アセンブラ構文 STC{cond} p15,cOpc,〈Addre
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データシートを参照する。
【0114】
【表12】
【0115】・説明 この命令語はCondが真の時にのみ実行される。Op
c〈3:0〉は次の演算を規定する: ・演算 EAの算出方法についてはARM7データシートを参照
する。 ・例外処理 ARM7保護違反。
【0116】INTVP インタラプトベクトルプロセッサ
【0117】
【表13】
【0118】・アセンブラ構文 CDP{cond}p7,1,c0,c0,co INTVP{cond} ここで、cond={eq,ne,cs,cc,mi,
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は予約され
る。 ・例外処理 ベクトルプロセッサ使用不可。
【0119】MFER 拡張レジスタからの移動
【0120】
【表14】
【0121】・アセンブラ構文 MRC{cond}p7,2,Rd,cP,cER,0 MFER{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
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)を参照する。
【0122】
【表15】
【0123】・説明 この命令語はCondが真の時にのみ実行される。AR
M7レジスタRdは下の表に示すように、P:ER
〈3:0〉に規定された拡張レジスタERから移動す
る。拡張レジスタの説明のためのセクション1.2を参
照する。 ・例外処理 使用者モード時PERxアクセスを試みる時の保護違
反。
【0124】MFVP ベクトルレジスタからの移動
【0125】
【表16】
【0126】・アセンブラ構文 MRC{cond} p7,1,Rd,Crn,CR
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)を参照する。
【0127】・説明 この命令はCondが真の時にのみ実行される。ARM
7レジスタRdはベクトルプロセッサのスカラ/特殊レ
ジスタCRn〈1:0〉:CRm〈3:0〉から移動す
る。レジスタ転送のためのベクトルプロセッサレジスタ
番号指定セクション3.2.3を参照する。CRn
〈3:2〉と共にビット7.5は予約される。ベクトル
プロセッサレジスタマップは次の表に示される。ベクト
ルプロセッサ特殊レジスタ(SP0〜SP15)のため
の表15を参照する。
【0128】
【表17】
【0129】SR0は常に32ビット0と読み取り、そ
の書込は無視する。 ・例外処理 ベクトルプロセッサ使用不可。
【0130】MTER 拡張レジスタからの移動
【0131】
【表18】
【0132】・アセンブラ構文 MRC{cond}p7,2,Rd,cP,cER,0 MFER{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
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から移動す
る。
【0133】
【表19】
【0134】・例外処理 使用者モード時PERxアクセスを試みる時の保護違
反。
【0135】MTVP ベクトルレジスタへの移動
【0136】
【表20】
【0137】・アセンブラ構文 MRC{cond}p7,1,Rd,Crn,CRm,
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)を参照する。
【0138】・説明 この命令語はCondが真の時にのみ実行される。AR
M7レジスタRdはベクトルプロセッサのスカラ/特殊
目的レジスタCRn〈1:0〉:CRm〈3:0〉から
移動する。CRn〈3:2〉とともにビット7:5は予
約される。ベクトルプロセッサレジスタマップは下記に
示される。
【0139】
【表21】
【0140】・例外処理 ベクトルプロセッサ使用不可。
【0141】PFTCH プリフェッチ
【0142】
【表22】
【0143】・アセンブラ構文 LDC{cond}p15,2,〈Address〉 PFTCH{cond}〈Address〉 ここで、cond={eq,he,cs,cc,mi,
pl,rs,vc,hi,I s,ge,lt,gt,l
e,al,nv}、アドレスモード構文のARM7デー
タシートを参照する。 ・説明 この命令はCondが真の時にのみ実行される。EAに
よって規定されたキャッシュラインはARM7データキ
ャッシュにプリフェッチされる。 ・演算 EAの計算方式に関するARM7データシートを参照す
る。 ・例外処理 なし。
【0144】STARTVP ベクトルプロセッサ開始
【0145】
【表23】
【0146】・アセンブラ構文 CDP{cond}p7,c0,c0,c0 STARTVP{cond} ここで、cond={eq,he,cs,cc,mi,
pl,vs,vc,hi,Is,ge,it,gt,l
e,al,nv} ・説明 この命令はCondが真の時にのみ実行される。この命
令はベクトルプロセッサが実行を開始し、自動的にVI
SRC〈vjp〉とVISRC〈vip〉をクリアする
ようにする。ARM7はベクトルプロセッサの実行開示
を待たず、次の命令を実行する。
【0147】ベクトルプロセッサの状態はこの命令が行
われる前に所定の状態に初期化されるべきである。この
命令は前記ベクトルプロセッサが予めVP_RUN状態
にあれば、効力がない。ビット19:12、7:5、及
び3:0は予約される。 ・例外処理 ベクトルプロセッサ使用不可。
【0148】TESTSET テスト及びセット
【0149】
【表24】
【0150】・アセンブラ構文 MRC{cond}p7,0,Rd,cO,cER,0 TESTSET{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
pl,rs,re,hi,ls,ge,It,gt,l
e,al,nv},Rd={r0,・・r15},ER
={0,・・15}。RANAMEは構造的にレジスタ
ニモニック(即ち,UER1或いはVASYNC)を参
照する。
【0151】・説明 この命令はCondが真の時にのみ実行される。この命
令はUERxの内容をRDに戻り、UERx〈30〉を
1にセットする。ARM7レジスタ15が目的地レジス
タとして規定されると、UERx〈30〉はCPSRの
Zビットに戻って小さい作業中待機ループが具現される
ことができる。現在UER1のみがこの命令と動作する
ように定義されている。ビット19:17と7:5は予
約される。 ・例外処理 なし。
【0152】付録B マルチメディアプロセッサ300はプロセッサ310が
MFERとMTER命令語によってアクセスする拡張レ
ジスタを定義する構造からなっている。この拡張レジス
タは特権的な(privileged)拡張レジスタと使用者拡張レ
ジスタとを含む。特権的な拡張レジスタはマルチメディ
ア信号プロセッサの作動を制御するのに主に用いられる
もので、表B.1に示されている。
【0153】
【表25】
【0154】制御レジスタはMSP300の演算を制御
する。CTRの全てのビットはリセット時にクリアされ
る。前記レジスタ定義は表B.2に示されている。
【0155】
【表26】
【0156】
【表27】
【0157】状態レジスタはMSP300の状態を示す
もので、STRフィールドの全てのビットはリセット時
にクリアされる。このレジスタ定義は表B.3に示され
ている。
【0158】
【表28】
【0159】プロセッサバージョンレジスタはプロセッ
サのマルチメディア信号プロセッサ群れの特定プロセッ
サの特定バージョンを確認する。ベクトルプロセッサイ
ンタラプトマスクレジスタVIMSKは、プロセッサ3
10へのベクトルプロセッサ例外処理報告を制御する。
VIMSKの各ビットは、VISRCレジスタの対応ビ
ットと共にセットされる時、ARM7インタラプト例外
処理例外を可能にする。しかし、これはベクトルプロセ
ッサ例外処理が検出される方式の影響されず、この例外
処理がARM7をインタラプトするか否かにのみ影響さ
れる。VIMSKの全てのビットはリセット時にクリア
される。レジスタ定義は表B.4に示されている。
【0160】
【表29】
【0161】ARM7命令アドレス区切り点レジスタは
ARM7プログラムデバッギング処理を支援する。その
レジスタ定義は表B.5に示されている。
【0162】
【表30】
【0163】ARM7データアドレス区切り点レジスタ
はARM7プログラムデバッギング処理を支援する。こ
のレジスタ定義は表B.6に示されている。
【0164】
【表31】
【0165】スクラッチパッドレジスタはキャッシュサ
ブシステム330のSRAMを用いて形成されたスクラ
ッチパッドのアドレスとサイズを構成する。このレジス
タ定義は表B.7に示されている。
【0166】
【表32】
【0167】使用者拡張レジスタはプロセッサ310,
320の同期化のために主に用いられる。使用者拡張レ
ジスタはビット30にマップされ、現在只1つのビット
をもつように定義されており、例えば“MFERR1
5,UERx”のような命令語はビット値をZフラグ側
に戻す。UERx〈31〉及びUERx〈29:0〉は
常に0と読み取られる。この使用者拡張レジスタは表
B.8に記述されている。
【0168】
【表33】
【0169】表B.9は電源供給リセット時の拡張レジ
スタの状態を示す。
【0170】
【表34】
【0171】付録C ベクトルプロセッサ320の構造は32個の32ビット
スカラレジスタ;32個の288ビットベクトルレジス
タの2バック:1対の576ビットベクトル累算器レジ
スタ;32ビット特殊目的レジスタセットを含む。スカ
ラ、ベクトル、累算器レジスタは一般的なプログラミン
グのためのものであり、多くの多様なデータ型を支援す
る。
【0172】下記のような表記法は本節とその付属節に
用いられる。: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つの要素サイズを定義する。
【0173】
【表35】
【0174】MSP構造は命令語において特定データ型
とサイズによってベクトルデータを解釈する。現在2の
補数(整数)フォーマットは大部分の算術命令語でバイ
ト、バイト9、ハーフワード、及びワード要素サイズを
支援するる。また、IEEE754単精度フォーマット
は大部分の算術命令語のワード要素サイズで支援され
る。プログラマは命令語順序が意味のある結果を生む限
り、所定方式でデータを自由に解釈する。例えば、プロ
グラムが「間違った」オーバフロー結果を処理すること
ができるなら、プログラマは符号のない8ビット数を格
納するのにバイト9サイズを自由に使用することがで
き、同様にバイトサイズデータ要素において符号のない
8ビット数を格納し、これを2の補数算術命令語を用い
て演算することも自由である。
【0175】SR0からSR31として引用された32
個のスカラレジスタがある。このスカラレジスタは32
ビット幅であり、定義されたサイズの一つのデータ要素
を含むことができる。スカラレジスタSR0は常に0の
32ビットを読み取り、書込は無視するために特殊であ
る。バイト、バイト9、及びハーフワードデータ型は定
義されない値を有する最上位ビットをもつスカラレジス
タの最下位ビットに格納される。前記レジスタはデータ
型指示器を持っていないため、プログラマは各命令語に
用いられるレジスタのデータ型を知るべきである。これ
が32ビットレジスタは32ビット値を含むと仮定され
る他の構造とは違う相違点である。MSP構造はデータ
型Aの結果がデータ型Aと定義されたビットのみを正確
に変更すると規定する。例えば、バイト9加算の結果は
32ビット目的地スカラレジスタの下位9ビットのみを
変更する。上位23ビットの値は命令語に言及されなか
ったなら、定義されない。
【0176】64ベクトルレジスタはそれぞれ32ビッ
トレジスタを有する2バンクから構成される。バンク0
は第1の32レジスタを含み、バンク1は第2の32レ
ジスタを含む。前記2つの列は一つの列が現在バンクと
して指定され、もう一つの列が交互バンクとして指定さ
れる方式で用いられる。全てのベクトル命令語は交互バ
ンクベクトルレジスタをアクセスできるロード/格納及
びレジスタ移動命令を除いては、現在バンクレジスタを
使用する。ベクトル制御/状態レジスタVCSRのCB
ANKビットはバンク0またはバンク1が現在バンクと
して指定されるように用いられる。(他の列は交互バン
クになる。)現在バンクではベクトルレジスタはVR0
〜VR31として引用され、交互バンクではVRA0〜
VRA31と引用される。
【0177】選択的に前記2バンクは576ビットの3
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、ハーフワード、ワー
ドサイズの多数の要素を収容する。
【0178】
【表36】
【0179】一つのベクトルレジスタ内で要素サイズを
混合することは支援されない。バイト9要素サイズを除
いては、288ビットの256のみが用いられる。特
に、毎9番目のビットは用いられない。バイト、ハーフ
ワード、及びワードサイズで用いられない32ビットは
予約され、プログラマはそれらの値に対してどんな仮定
もしてはいけない。
【0180】ベクトル累算器レジスタは目的地レジスタ
の結果より高い精度を有する中間結果とを格納するため
のものである。このベクトル累算器レジスタはVAC1
H,VAC1L,VAC0H、VAC0Lと命名される
4つの288ビットレジスタを有する。VAC0H:V
AC0L対は3つのレジスタが用いられる。VEC64
モードでのみ、VAC1H:VAC1L対が64個のバ
イト9ベクトル演算をエミュレートするのに用いられ
る。バンク1がVEC3モードで現在バンクとして指定
される時にも、VAC0H:VAC0L対が用いられ
る。ソースベクトルレジスタと同じ数の要素をもつ拡張
精度結果を発生するために表C.3に示すようにレジス
タ対にわたって拡張精度要素が保存されている。
【0181】
【表37】
【0182】VAC1H:VAC1L対はバイト9(及
びバイト)、ハーフワード、及びワードに対してそれぞ
れの要素数が64,32,16である可能性のあるVE
C64モードにのみ用いられる。メモリから直接ロード
されるか、或いはメモリに直接格納され得ない33個の
特殊目的のレジスタがある。RASR0〜RASR15
と引用された16個の特殊レジスタは内部戻りアドレス
スタックを形成し、サブルーチン呼出及び戻り命令語に
よって用いられる。17個の32ビット特殊レジスタは
表C.4に示されている。
【0183】
【表38】
【0184】ベクトル制御/状態レジスタVCSR定義
は表C.5に示されている。
【0185】
【表39】
【0186】
【表40】
【0187】
【表41】
【0188】ベクトルインタラプトソースレジスタVI
SRCは、ARM7プロセッサ310のインタラプトソ
ースを指す。適切なビットは例外処理検出時にハードウ
ェアによってセットされる。ソフトウェアはベクトルプ
ロセッサ320が実行を再開始する前にレジスタVIS
RCをクリアしなければならない。レジスタVISRC
にセットされたビットはベクトルプロセッサ320がV
P_IDLE状態に進入するようにする。対応するイン
タラプトイネーブルビットがVIMSKにセットされる
と、プロセッサ310のインタラプトが発生する。表
C.6はレジスタVISRCの内容を定義する。
【0189】
【表42】
【0190】ベクトルインタラプト命令レジスタVII
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は同一の方式で用いられる。
【0191】ベクトルグローバルマスクレジスタVGM
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命令を除いた全ての命令の実行に
用いられる。
【0192】ベクトルグローバルマスクレジスタVGM
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の
ビットマッピングとは異なる。
【0193】ベクトルオーバフローレジスタVOR1
、ベクトル算術演算後のオーバフロー結果を含む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に示されている。
【0194】
【表43】
【0195】ベクトルデータアドレス区切り点レジスタ
VDABRは、ベクトルプログラムの誤り訂正を支援す
る。このレジスタ定義は表C.8に示されている。
【0196】
【表44】
【0197】ベクトル移動マスクレジスタVMMR0
、全ての命令語で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の現在バンクの目的地レジ
スタを指す。
【0198】ベクトル移動マスクレジスタVMMR1
、全ての命令語でVCSR〈SMM〉=1の時を含ん
で、常にVCMOVM命令語によって用いられる。レジ
スタVMMR1はVEC64モードで影響を受けるVR
〈575:288〉内の要素を指す。VMMR1の各ビ
ットはバンク1の目的地ベクトルレジスタで9ビットの
アップデートを制御する。具体的に、VMMR1〈i〉
はVR1 d〈9i+8:9i〉のアップデートを制御す
る。レジスタVGMR1はVEC32モードで用いられ
ない。
【0199】ベクトル及びARM7同期化レジスタVA
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は電源供給リセ
ット時のベクトルプロセッサの状態を示す。
【0200】
【表45】
【0201】特殊目的レジスタはベクトルプロセッサが
命令を実行し得る前に、ARM7プロセッサ310によ
って初期化される。
【0202】付録D 各命令語はソース及び目的地オベランドのデータ型(dat
a type) を暗示するか或いは規定する。一部の命令語は
一つ以上のデータ型と等しく適用される意味論(semanti
cs) を有する。また、一部の命令語はソースに対して所
定のデータ型を取り、その結果に対しては他のデータ型
を生成する意味論を有する。本付録は実施例の支援する
データ型を記述する。表1はint8,int9,in
t16,int32,浮動データ型を示し、符号のない
整数フォーマットは支援されず、符号のない整数は優先
的に使用前に2の補数に変換されるべきである。プログ
ラマとしてはオーバフローが適切に取り扱われる限り、
符号の無い整数或いはいずれか他のフォーマットを有す
る算術命令語を使用することは自由である。この構造は
2の補数整数及び32ビット浮動小数点データ型のオー
バフローを定義し、符号のないオーバフローの検出に必
要な8,9,16,または32ビット演算の実行を検出
しない。表D.1はロード(load)演算によって支援され
るデータサイズを示す。
【0203】
【表46】
【0204】前記構造はメモリアドレス指定をデータ型
境界上に規定する。即ち、バイトは指定要求がない。ハ
ーフワードは指定要求がハーフワード境界である。ワー
ドは指定要求がワード境界である。表D.2は格納(sto
re) 演算によって支援されるデータサイズを示す。
【0205】
【表47】
【0206】スカラ或いはベクトルである一つ以上のデ
ータ型がレジスタにマッピングされるので、所定データ
型の結果を持たない目的地レジスタにビットが存在する
こともできる。実際に、ベクトル目的地レジスタ上のバ
イト9データサイズとスカラ目的地レジスタ上のワード
データサイズを除いては、その値が演算によって定義さ
れない目的地レジスタにはビットが存在する。このビッ
トはその値が定義されないように規定される。表D.3
はそれぞれのデータサイズに対して定義されないビット
を示す。
【0207】
【表48】
【0208】プログラマは、プログラミング時ソース及
び目的地レジスタ或いはメモリのデータ型を必ず認知し
なければならない。所定の要素サイズから他のものへの
データ型変換はベクトルレジスタに格納される要素数を
異にすることもできる。例えば、ベクトルレジスタのハ
ーフワードからワードデータ型への変換は同一数の変換
された要素を格納することに2つのベクトルレジスタが
必要である。逆に、ベクトルレジスタに使用者定義フォ
ーマットを持つこともできるワードデータ型からハーフ
ワードフォーマットへの変換はベクトルレジスタの1/
2に同一数の要素を発生し、他の1/2に残りのビット
を発生する。いずれの場合でも、データ型変換はソース
要素とは異なるサイズの変換された要素の配列において
構造的な問題を引き起こす。
【0209】原則的に、MSP構造は暗黙的に要素数の
変化をもたらす演算を提供しない。これに対して、プロ
グラマは目的地レジスタで要素数の変化を認知していな
ければならない。この構造は所定のデータ型から同一サ
イズの他のデータ型に変換する演算のみを提供し、所定
のデータ型から異なるサイズのデータ型に変換する時、
プログラマがデータサイズ上の変化に適応することを要
求する。
【0210】付録Eに記述されているVSHFLLとV
UNSHFLLのような特殊命令語は第1データサイズ
のベクトルから第2データサイズのベクトルへの変換を
単純化させる。小さい要素サイズ、例えばベクトルVR
a でint8からより大きいサイズ、例えばint16
への2の補数データ型の変換時に伴われる基本的な段階
は次の通りである: 1.バイトデータ型を用いてVRa の要素とVRb の要
素を2つのベクトルVRc :VRd にシャフルする(shu
ffle) 。VRa の要素はダブルサイズレジスタVRc
VRd でint16データ要素の下位バイトに移動す
る。これに関係の無い値であるVRb 要素はVRc :V
d の上位バイトに移動する。結果的に、この演算はバ
イトからハーフワードに各要素のサイズを倍増させ、V
a 要素の1/2をVRc に移動させ、その1/2をV
d に移動させる。 2.8ビットずつVRc :VRd の要素を算術けた送り
して符号拡張する。
【0211】大きい要素サイズ、例えばベクトルVRa
でint16からより小さいサイズのint8への2の
補数データ型の変換時に伴われる基本的な段階は次の通
りである。
【0212】1.int16データ型の各要素はバイト
サイズで表現し得ることを確認しなければならない。場
合によって、小さいサイズに合うようにに両端の要素を
飽和させなければならない。 2.VRa の要素とVRb の要素を2つのベクトルVR
c :VRd にアンシャフル(unshuffle) する。VRa
VRb の上位1/2はVRc に移動し、下位1/2はV
d に移動する。結果的に、これはVRa 要素の下位1
/2をVRd の下位1/2に集める。 下記のデータ型変換に特殊命令語が与えられる:単精度
浮動小数点に対するint32;固定小数点(X,Y表
示)に対する単精度浮動小数点;int32に対する単
精度浮動小数点;Int9に対するint8:int1
6に対するint9:int9に対するint16。
【0213】ベクトルプログラミングに柔軟性を与える
ために、大部分のベクトル命令語は要素マスクを使用し
てベクトル内の選択された要素のみを演算する。ベクト
ルグローバルマスクレジスタ(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ビットのセット中の全てのビットが
ワードデータサイズ演算のために指定されたものでなけ
れば、対応バイトのビットのみが変更される。
【0214】VGMR0及びVGMR1はベクトルレジ
スタをベクトル或いはスカラレジスタと、或いはVCM
PV命令語を用いて即値と比較することにより指定す
る。この命令語は特定データサイズによってマスクを適
切に指定する。スカラレジスタは只一つのデータ要素を
含むように定義されるので、スカラ演算(即ち、目的地
レジスタはスカラである)は要素マスクによって影響を
受けない。ベクトルプログラミングにおける柔軟性のた
めに、大部分のMSP命令語は3つのベクトルとスカラ
演算形態を支援する。
【0215】1.vector = vector op vector 2.vector = vector op scalar 3.scalar = scalar op scalar スカラレジスタがBオペランドとして規定される第2の
場合に、スカラレジスタの単一要素は必要な分だけ複写
されてベクトルAオベランド内の要素の数と同じくな
る。前記複写された要素は特定スカラオペランド内の要
素と同等の値である。前記スカラオペランドは即値オペ
ランド形態でスカラレジスタ或いは命令語から獲得され
ることができる。即値オベランドの場合、特定データ型
が即値フィールドサイズで可能なものより大きいデータ
サイズを使用するなら、適宜に符号拡張が適用される。
【0216】多くのマルチメディア適用例では、ソー
ス、中間及び最終結果の精度に特別な注意が必要であ
る。また、整数乗算命令語は2つのベクトルレジスタに
格納されうる“倍精度”中間結果を生成する。MSP構
造は現在8,9,16,及び32ビット要素のための2
の補数整数フォーマット及び32ビット要素のためのI
EEE754単精度フォーマットを支援する。オーバフ
ローは特定データ型で表現され得る最大陽数或いは最大
陰数を超過する結果に定義される。オーバフローが発生
すると、目的地レジスタに書込まれた値は有効数でな
い。アンダーフローは浮動小数点演算にのみ定義され
る。
【0217】全ての浮動小数点演算はビットVCSR
〈RMODE〉で規定された4つの四捨五入モードのう
ち一つを用いる。一部の命令語はround away from zero
(roundeven)) 四捨五入モードを使用する。この命令語
は明示されている。飽和(Saturation)はマルチメディア
適用例で重要な機能である。MSP構造は4つの整数の
全てと浮動小数点演算で飽和を支援する。レジスタVC
SRのビットISATは整数飽和モードを規定する。迅
速なIEEEモードとして知られた浮動小数点飽和モー
ドはVCSRでFSATと規定されている。飽和モード
がイネーブルされると、最大陽数或いは最大陰数値を超
過する結果はそれぞれ最大陽数或いは最大陰数に指定さ
れる。この場合、オーバフローは発生することができな
く、よって、オーバフロービットは指定されることがで
きない。表D.4は誤りのある命令語が実行される前に
検出されて報告された正確な例外処理(Precise Excepti
on) 目録である。例外処理ベクトルアドレスは16進表
記法で与えられる。
【0218】
【表49】
【0219】表D.5は誤りのある命令より後にくる命
令語を実行した後、検出されて報告された不明確な例外
処理(Imprecise Exception) 目録である。
【0220】
【表50】
【0221】付録E ベクトルプロセッサの命令語集合は表E.1に示すよう
に11個の等級を含む。
【0222】
【表51】
【0223】表E.2は流れ制御(Flow Control)命令を
示す。
【0224】
【表52】
【0225】論理等級はブール(Boolean) データ型を支
援し、要素マスクによって影響を受ける。表E.3は流
れ制御命令語を示す。
【0226】
【表53】
【0227】移動/回転(Shift/Rotate)等級命令語はi
nt8,int9,int16及びint32データ型
(浮動データ型除外)を演算し、要素マスクによって影
響を受ける。
【0228】
【表54】
【0229】算術(Arithmetic)等級命令は一般にint
8,int9,int16,int32、浮動データ型
を支援し、要素マスクによって影響を受ける。支援され
ないデータ型における制限事項は次の各命令語の説明を
参照する。VCMPV命令は要素マスクを演算するため
に、要素マスクによって影響を受けない。表E.5は算
術等級命令を示す。
【0230】
【表55】
【0231】MPEG命令はMPEG符号化及び復号化
に特に適した命令語目録であるが、多様な方式で用いら
れることができる。MPEG命令はint8,int
9,int16及びint32データ型を支援し、要素
マスクによって影響を受ける。表E.6はMPEG命令
語目録である。
【0232】
【表56】
【0233】それぞれのデータ型変換(Data Type Conve
rsion)命令は特定データ型を支援し、この構造はレジス
タで1つ以上のデータ型を支援しないために、要素マス
クに影響を受けない。表E.7はデータ型変換命令語目
録である。
【0234】
【表57】
【0235】要素間算術等級命令はint8,int
9,int16,int32及び浮動データ型を支援す
る。表E.8は要素間算術等級命令目録である。
【0236】
【表58】
【0237】要素間移動等級命令はバイト、バイト9、
ハーフワード及びワードデータサイズを支援する。表
E.9は要素間移動等級目録である。
【0238】
【表59】
【0239】ロード/格納(Load/Store)命令語はバイ
ト、ハーフワード、及びワードデータサイズとともに特
殊バイト9関連データサイズ演算を支援し、要素マスク
によって影響を受けない。表E.10はロード/格納等
級命令語目録である。
【0240】
【表60】
【0241】レジスタ移動命令はint8,int9,
int16,int32,及び浮動データ型を支援し、
要素マスクの影響を受けない。VCMOVM命令のみが
要素マスクの影響を受けない。表E.11はレジスタ移
動等級命令語目録である。
【0242】
【表61】
【0243】表E.12はキャッシュサブシステム13
0を制御するキャッシュ演算(CacheOperation) 等級命
令語目録である。
【0244】
【表62】
【0245】命令語記述命名法 命令語集合の明細を簡潔にするために、付録全体にわた
って特殊用語が用いられる。例えば、命令オペランドは
バイト、バイト9、ハーフワード、ワードサイズの符号
のある2の補数整数である。“レジスタ”という用語は
一般(スカラ或いはベクトル)レジスタであり、他の類
型のレジスタは明示されている。アセンブリ言語構文(s
yntax)では接尾詞b,b9,h,wはデータサイズ(バ
イト、バイト9、ハーフワード、ワード)と整数データ
型(int8,int9,int16,int32)を
指す。また、命令語オペランド、演算、アセンブリ言語
構文に記述するために用いられる用語及び記号は次の通
りである。
【0246】 Rd 目的地レジスタ(ベクトル、スカラ或いは特殊目的) Ra,Rb ソースレジスタa及びb(ベクトル、スカラ或いは特殊目的) Rc ソース或いは目的地レジスタc(ベクトル或いはスカラ) Rs データ格納ソースレジスタ(ベクトル或いはスカラ) S 32ビットスカラ或いは特殊レジスタ VR 現在バンクベクトルレジスタ VRA 交互バンクバベクトルレジスタ VR0 バンク0ベクトルレジスタ VR1 バンク1ベクトルレジスタ VRd 目的地ベクトルレジスタ(VRAが規定されていないなら、 現在バンク省略時) VRa,VRb ベクトルソースレジスタa及びb VRc ベクトルソース或いは目的地レジスタc VRs ベクトルデータ格納ソースレジスタ VAC0H 上位ベクトル累算器レジスタ0 VAC0L 下位ベクトル累算器レジスタ0 VAC1H 上位ベクトル累算器レジスタ1 VAC1L 下位ベクトル累算器レジスタ1 SRd スカラ目的地レジスタ SRa,SRb スカラソースレジスタa及びb SRb+ 有効アドレスへのベースレジスタのアップデート SRs スカラデータ格納ソースレジスタ SP 特殊レジスタ VR[ i] ベクトルレジスタVRのi番目の要素 VR[ i] 〈a:b〉 ベクトルレジスタVRのi番目の要素のビットa及びb VR[ i] 〈msb〉 ベクトルレジスタVRのi番目の要素の最上位ビット EA メモリアクセスのための有効アドレス MEM メモリ BYTE[ EA] EAアドレスのメモリ内の1バイト HALF[ EA] EAアドレスのメモリ内のハーフワード。 ビット〈15:8〉はEA+1アドレス WORD[ EA] EAアドレスのメモリ内のワード。 ビット〈31:24〉はEA+3アドレス NumElem 特定データ型の要素数。VEC32モードでバイト、バイト9 、ハーフワード、或いはワードデータサイズに対してそれぞれ 32,16,或いは8である。VEC64モードでバイト、バ イト9、ハーフワード、或いはワードデータサイズに対してそ れぞれ64,32,或いは16である。スカラ演算の場合、N umElemは0である。
【0247】EMASK[i] i番目の要素の要素マスク。バイト、バイト9、ハーフ
ワード、或いはワードデータサイズに対して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 スクラッチパッド。
【0248】Cプログラミング構造は演算の制御流れを
記述するために用いられる。例外は次の通りである。 = 指定(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四捨五入モード使用) 飽和() 整数データ型はオーバフローを発生する代わりに、最大の陽数 或いは最大陰数に飽和する。浮動データ型は陽の無限大、陽の ゼロ、陰のゼロ、或いは陰の無限大に飽和することができる。
【0249】一般命令語フォーマットは図8に表示され
ており、下記に説明される。REARフォーマットはロ
ード、格納、キャッシュ演算命令語が用いられ、REA
Rフォーマットのフィールドは表E.13に提示された
ように次の意味をもつ。
【0250】
【表63】
【0251】ビット17:15は予約され、この構造で
追っての拡張との互換性を保障しなければならない。
B:DとTTフィールドの所定符号化方式は定義されて
いない。この構造はこのような符号化方式が用いられる
時に期待される結果を規定しないために、プログラマは
この符号化方法を使用してはいけない。表E.14はV
EC32とVEC64モードの両方から支援される(L
TとしてTTフィールドで符号化された)スカラロード
演算を示す。
【0252】
【表64】
【0253】表E.15はビットVCSR〈0〉がクリ
アされる時、VEC32モードで支援される(LTにT
Tフィールドで符号化された)ベクトルロード演算を示
す。
【0254】
【表65】
【0255】Bビットは現在或いは交互バンクの指示に
用いられる。表E.16はビットVCSR〈0〉がクリ
アされる時、VEC64モードで支援される(LTとし
てTTフィールドで符号化された)ベクトルロード演算
を示す。
【0256】
【表66】
【0257】VECビットモードでは現在及び交互バン
クの概念が存在しないために、ビットBは64バイトベ
クトル演算の指示に用いられる。表E.17はVEC3
2及びVEC64モードの両方から支援される(STと
してTTフィールドで符号化された)スカラ格納演算を
示す。
【0258】
【表67】
【0259】表E.18はビットVCSR〈0〉がクリ
アされる時、VEC32モードで支援される(STとし
てフィールドTTで符号化された)ベクトル格納演算を
示す。
【0260】
【表68】
【0261】表E.19はビットVCSR〈0〉が指定
される時、VEC64モードで支援される(LTとして
TTフィールドで符号化された)ベクトル格納演算目録
である。
【0262】
【表69】
【0263】VEC64モードでは現在及び交互バンク
の概念が存在しないために、ビットBは64バイトベク
トル演算の指示に用いられる。REAIフォーマット
ロード、格納、及びキャッシュ演算命令が用いられる。
表E.20はREAIフォーマットにおけるフィールド
の意味を示す。
【0264】
【表70】
【0265】REARREAIフォーマットは転送型(t
ransfer type) としては同一の符号化方式を用いる。さ
らに詳細な符号化方式についてはREARフォーマット
を参照する。
【0266】RRRM5フォーマットは3つ或いは2つ
のレジスタ及び5ビット即値オペランドを提供する。表
E.21はRRRM5フォーマットフィールドを定義す
る。
【0267】
【表71】
【0268】ビット19:15は予約され、この構造で
追っての拡張との互換性を保障するために0でなければ
ならない。全てのベクトルレジスタオペランドは現在バ
ンクを参照する。(バンク0或いはバンク1のいずれか
であることができる)表E.22はDS〈1:0〉が0
0,01,10の時、D:S:M符号化目録である。
【0269】
【表72】
【0270】DS〈1:0〉が11の時、D:S:Mは
次の意味をもつ。
【0271】
【表73】
【0272】RRRRフォーマットは4つのレジスタオ
ペランドを提供する。表E.24はRRRRフォーマッ
トのフィールドを示す。
【0273】
【表74】
【0274】別に言及されない限り、全てのベクトルレ
ジスタオペランドは現在バンクを参照する。(バンク0
またはバンク1のいずれかであることができる)R1フォーマット はロード即値命令語によってのみ用い
られる。表E.25はRIフォーマットのフィールドを
示す。
【0275】
【表75】
【0276】F:DS〈1:0〉フィールドの所定の符
号化は定義されない。このような符号化が用いられる
と、期待した結果を規定しないために、プログラマはこ
の符号化を使用してはいけない。Rdにロードされた値
は表E.26に示すようにデータ型に左右される。
【0277】
【表76】
【0278】CTフォーマットは表E.27に示すフィ
ールドを含む。
【0279】
【表77】
【0280】分岐条件はVCSR[ GT:EQ:LT]
フィールドを用いる。オーバフロー条件はGT,EQ,
及びLTビットに先行するVCSR[ S0] ビットを用
いる。VCCSとVCBARRは前述とは異なり、Co
nd〈2:0〉フィールドを解釈する。これに対する詳
細な命令語説明を参照する。RRRM9フォーマット
3つまたは2つのレジスタ及び9ビット即値オペランド
を提供する。表E.28はRRRM9フォーマットフィ
ールドを定義する。
【0281】
【表78】
【0282】ビット19:15はD:S:M符号化が即
値オペランドを規定しなければ予約され、追っての互換
性を保障するために0でなければならない。全てのベク
トルレジスタオペランドは現在バンク(バンク0或いは
バンク1のいずれかであることができる)を参照する。
D:S:M符号化は即値フィールドから抽出された即値
が表E.29に示すようにDS〈1:0〉符号化に左右
されることを除いてはRRRM5フォーマットの表E.
22及びE.23に示されたものと同一である。
【0283】
【表79】
【0284】即値フォーマットは浮動データ型には使用
することができない。下記にはMSPベクトル命令語が
アルファベット順で示されている。注釈: 1.別に定義されない限り、命令語は要素マスクの影響
を受ける。しかし、CTフォーマット命令語は要素マス
クの影響されず、ロード、格納及びキャッシュ命令語を
含むREARとREAIフォーマット命令も要素マスク
の影響を受けない。 2.9ビット即値オペランドは浮動データ型には使用す
ることができない。 3.演算(operation) の説明にはベクトル形態(form)の
みが与えられ、スカラ演算は0番目の一つの要素のみ定
義されると仮定する。 4.RRRM5とRRRM9フォーマットは次の符号化
が整数データ型(b,b9,h,w)に用いられる。
【0285】
【表80】
【0286】5.RRRM5とRRRM9フォーマット
は次の符号化が浮動データ型に用いられる。
【0287】
【表81】
【0288】6.VCSR〈ISAT〉ビットが指定さ
れると、オーバフローを誘発する全ての命令語は、in
t8,int9,int6,int32最大或いは最小
限界飽和が適用される。従って、浮動小数点結果はVC
SR〈FSAT〉ビットが指定されると、(−)無限
大,(−)0,(+)0,或いは(+)無限大に飽和す
る。 7.構文的に、.nはバイト9サイズを示すために、.
b9の代わりに用いられることができる。 8.全ての命令語は目的地レジスタ或いはベクトル累算
器に戻る浮動小数点結果がIEEE754単精度フォー
マットである。浮動小数点結果は累算器の下位に書き込
まれ、上位は変更されない。
【0289】付録F MSPベクトル命令語が次にアルファベット順で並べら
れる。注意: 1.特別に定義されない限り、命令語は要素マスクの影
響を受ける。CTフォーマット命令語が要素マスクに影
響を受けないことは明らかな事実である。ロード、格
納、及びキャッシュ命令語からなるREARとREAI
フォーマットの命令語も要素マスクの影響を受けない。 2.9ビット即値オペランドは浮動データ型には使用す
ることができない。 3.演算(operation) の説明ではベクトル形態(form)の
みが提示される。スカラ演算では0番目の一つの要素の
み定義する。 4.RRRM5とRRRM9フォーマットで次のような
符号化が整数データ型のために用いられる。 (b,b9,h,w):
【0290】
【表82】
【0291】5.RRRM5とRRRM9フォーマット
は次の符号化が浮動データ型に用いられる。
【0292】
【表83】
【0293】6.オーバフローを誘発する虞のある全て
の命令語に対して、int8,int9,int6,i
nt32の飽和、即ち最大値と最小値はVCSR〈IS
AT〉ビットが1の時に適用される。浮動小数点結果も
同様にVCSR〈FSAT〉ビットが1の時に−無限
大,−0,+0,或いは+無限大になることができる。 7.構文的に、バイト9サイズを定義するために、.b
9の代わりにいずれも用いられることができる。 8.目的地レジスタ或いはベクトル累算器に回帰する浮
動小数点結果はIEEE754単精度フォーマットによ
る。浮動小数点結果は累算器の下位に記録され、上位は
修正されない。 9.例外処理、オーバフロー及び飽和の詳細な内容は各
命令語の説明時に付加される。
【0294】VAAS3 加算及び(−1,
0,1)加算符号 ・アセンブラ構文 VAAS3. dt VRd,VRa,VRb VAAS3. dt VRd,VRa,SRb VAAS3. dt SRd,SRa,SRb ここで、dt={b,b9,h,w}
【0295】
【表84】
【0296】・説明 ベクトル/スカラレジスタRaの内容は中間結果を出す
ためにRbに加えられ、その後中間結果はRaの符号と
ともに加えられる。最終結果はベクトル/スカラレジス
タRdに格納される。 ・例外処理 オーバフロー ・未解決:この構造はオペランドRaとRbを同一に作
ることもできる。このような制約内ではVAAS3. d
tVRd,VRa,SRbフォーマットは支援されな
い。
【0297】VADAC 加算及び累積 ・アセンブラ構文 VADAC. dt VRc,VRD,VRa,SRb VADAC. dt SRc,SRd,SRa,SRb ここで、dt={b,b9,h,w}
【0298】
【表85】
【0299】・説明 ベクトル累算器の倍精度要素とRa及びRbのオペラン
ドとを加算して倍精度で表現される各要素の和はベクト
ル累算器と目的地レジスタRc、Rdの両側に格納す
る。RaとRbは指定されたデータ型を使用するが、こ
こではVACが適当の倍精度データ型を使用するのと同
じである。(16,18,32,64ビットがそれぞれ
int8,int9,int16,int32用として
使用される)各倍精度要素の上位はVACHとRcに格
納される。Rc=Rdであれば、Rcにある結果は定義
されない。
【0300】 ・例外処理 TBD ・未解決:倍精度演算からのオーバフローは検出しなけ
ればならないか。(VACが限界値に近い時)同様に、
倍精度フォーマットで飽和も適用しなければならない
か。
【0301】VADACL 加算及び下位累算 ・アセンブラ構文 VADACL. dt VRd,VRa,VRb VADACL. dt VRd,VRa,SRb VADACL. dt VRd,VRa,#IMM VADACL. dt SRd,SRa,SRb VADACL. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}
【0302】
【表86】
【0303】・説明 ベクトル累算器の拡張倍精度要素としてRaとRb/即
値オペランドを加算して拡張倍精度の和はベクトル累算
器に格納する。目的地レジスタEdには下位の精密mを
回帰する。RaとRb/即値オペランドは特定データ型
を使用するが、ここではVACが適切な倍精度データ型
を使用するのと同じである。(16,18,32,64
ビットがそれぞれint8,int9,int16,i
nt32用として使用する)各拡張倍精度要素の上位は
VACHに格納される。
【0304】 ・演算 for(i = 0; i < NumElem && EMASK[i];i-H-) { Bop[i] = {VRb[i] II SRb II Sex(IMM<8:0>)}; VACH[i]:VACL[i] = sex[Ra[i] + Bop[i]) + VACH[i]:VACL[i]; Rd[i] = VACL[i]; } ・例外処理 TBD ・未解決:倍精度演算からのオーバフローは検出しなけ
ればならないか。(VACが限界値に近い時)同様に、
ダブルサイズ/拡張精度フォーマットで飽和も適用しな
ければならないか。
【0305】VADD 加算 ・アセンブラ構文 VADD. dt VRd,VRa,VRb VADD. dt VRd,VRa,SRb VADD. dt VRd,VRa,#IMM VADD. dt SRd,SRa,SRb VADD. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}
【0306】
【表87】
【0307】・説明 RaとRb/即値オペランドを加算してその和を目的地
レジスタRdに回帰する。 ・例外処理 オーバフロー、浮動小数点無効オペランド。
【0308】VADDH 2つの隣接要素加
・アセンブラ構文 VADDH. dt VRd,VRa,VRb VADDH. dt VRd,VRa,SRb ここで、dt={b,b9,h,w, f}
【0309】
【表88】
【0310】・説明 図6を参照する。 ・演算 for(i = 0; i < NumElem-1;i++) { Rd[i] = Ra[i] + Ra[i+1]; } Rd[NumElem-1] = Ra[NumElem-1] + (VRb[0] II SRb); ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0311】VAND 論理積 ・アセンブラ構文 VAND. dt VRd,VRa,VRb VAND. dt VRd,VRa,SRb VAND. dt VRd,VRa,#IMM VAND. dt SRd,SRa,SRb VAND. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。.wと.fは同
一の演算を規定する。
【0312】
【表89】
【0313】・説明 RaとRb/即値オベランドを論理積してその結果を目
的地レジスタ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の全てのビット } ・例外処理 なし。
【0314】VANDC 論理積の逆 ・アセンブラ構文 VAND. dt VRd,VRa,VRb VAND. dt VRd,VRa,SRb VAND. dt VRd,VRa,#IMM VAND. dt SRd,SRa,SRb VAND. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。.wと.fは同
一の演算を規定する。
【0315】
【表90】
【0316】・説明 RaとRb/即値オベランドを論理積してその結果を目
的地レジスタ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の全てのビット } ・例外処理 なし。
【0317】VASA 算術的移動累算器 ・アセンブラ構文 VASAL. dt VASAR. dt ここで、dt={b,b9,h,w}。そして、RとL
は移動方向、即ち左右を示す。
【0318】
【表91】
【0319】・説明 ベクトル累算器の各データ要素は左側に1ビットずつ移
動し、右側ビットは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; } ・例外処理 オーバフロー。
【0320】VASL 算術的左側移動 ・アセンブラ構文 VASL. dt VRd,VRa,SRb VASL. dt VRd,VRa,#I MM VASL. dt SRd,SRa,SRb VASL. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0321】
【表92】
【0322】・説明 ベクトル/スカラレジスタの各データ要素は左側に移動
し、右側は0で充填する。移動する量はスカラレジスタ
Rbまたは即値IMMフィールドで決められ、結果はベ
クトル/スカラレジスタRdに格納される。オーバフロ
ーを生じさせる要素に対しては符号に応じて陽数または
陰数で飽和する値とする。移動量は符号のない整数であ
る。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたは[]V[]V<4:0> から5ビッ
ト数と見なす。byt、byte9、ハーフワードデー
タ型の場合、プログラマはデータビットの数より小さい
か同じshift _amount値を正確に規定すべきである。値
が規定されたサイズより大きければ、要素は全て0で充
填される。
【0323】VASR 算術的右側移動 ・アセンブラ構文 VASR. dt VRd,VRa,SRb VASR. dt VRd,VRa,#I MM VASR. dt SRd,SRa,SRb VASR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0324】
【表93】
【0325】・説明 ベクトル/スカラレジスタの各データ要素は右側に移動
し、一番左側のビットは符号拡張がなされる。右側は0
で充填する。移動する量はスカラレジスタRbまたは即
値IMMフィールドで決められ、結果はベクトル/スカ
ラレジスタRdに格納される。オーバフローを生じさせ
る要素に対しては符号に応じて陽数または陰数で飽和す
る値とする。移動量は符号のない整数である。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたはIMM<4:0>から5ビット数
と見なす。byte、byte9、ハーフワードデータ
型の場合、プログラマはデータビットの数より小さいか
同じshift _amount値を正確に規定すべきである。値が
規定されたサイズより大きければ、符号ビットで充填さ
れる。
【0326】VASS3 減算及び(−1,
0,1)符号減算 ・アセンブラ構文 VASS3. dt VRd,VRa,VRb VASS3. dt VRd,VRa,SRb VASS3. dt SRd,SRa,SRb ここで、dt={b,b9,h,w}。
【0327】
【表94】
【0328】・説明 ベクトル/スカラレジスタRaの内容は中間結果を出す
ためにRbに加えられ、その後中間結果からRaの符号
を引く。最終結果はベクトル/スカラレジスタRdに格
納される。 ・例外処理 オーバフロー。
【0329】VASUB 減算絶対値 ・アセンブラ構文 VASUB. dt VRd,VRa,VRb VASUB. dt VRd,VRa,SRb VASUB. dt VRd,VRa,#I MM VASUB. dt SRd,SRa,SRb VASUB. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w,f}。
【0330】
【表95】
【0331】・説明 ベクトル/スカラレジスタRaからベクトル/スカラレ
ジスタ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]|; } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 減算の結果が陰数の最大値である時、絶対値を取ると、
オーバフローが発生する。飽和方式が設置されていれ
ば、絶対演算の結果は最大陽数になる。
【0332】VAVG 2つの要素の平均 ・アセンブラ構文 VAVG. dt VRd,VRa,SRb VAVG. dt VRd,VRa,SRb VAVG. dt SRd,SRa,SRb ここで、dt={b,b9,h,w,f}。整数データ
型に対して四捨五入様式を用いて切捨てをするためには
VAVGTを使用する。
【0333】
【表96】
【0334】・説明 ベクトル/スカラレジスタRaの内容がベクトル/スカ
ラレジスタ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; } ・例外処理 なし。
【0335】VAVGH 2つの隣接要素の平均 ・アセンブラ構文 VAVGH. dt VRd,VRa,VRb VAVGH. dt VRd,VRa,SRb VAVGH. dt SRd,SRa,SRb ここで、dt={b,b9,h,w,f}。整数データ
型に対して四捨五入様式を用いて切捨てをするためには
VAVGTを使用する。
【0336】
【表97】
【0337】・説明 全ての要素に対して隣接した要素の平均を出す。整数デ
ータ型に対して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; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0338】VAVGQ 4要素平均 ・アセンブラ構文 VAVGQ. dt VRd,VRa,VRb ここで、dt={b,b9,h,w}。整数データ型に
対して四捨五入様式を用いて切捨てをするためにはVA
VGQTを使用する。
【0339】
【表98】
【0340】・説明 この命令語はVEC64モードでは支援されない。下記
の図のように4つの要素の平均を計算する。T=1であ
れば、四捨五入が適用され、0であれば無条件切捨て(r
ound away form zero)が適用される。(デフォールト)
一番左側の要素は定義されない。図8を参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0341】VCACHE キャッシュ演算 ・アセンブラ構文 VCACHE. fc SRb,SRi VCACHE. fc SRb,#IMM VCACHE. fc SRb+,SRi VCACHE. fc SRb+,#IMM ここで、fc={0,1}
【0342】
【表99】
【0343】・演算 ・例外処理 なし。
【0344】VCAND 逆論理積 ・アセンブラ構文 VCAND. dt VEd,VEa,VEb VCAND. dt VRd,VRa,SRb VCAND. dt VRd,VRa,#IMM VCAND. dt SRd,SRa,SRb VCAND. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。.wと.fは同
一の演算を規定する。
【0345】
【表100】
【0346】・説明 RaとRbまたは即値オベランドを逆論理積してその結
果を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に対する全てのビット] ・例外処理 なし。
【0347】VCBARR 条件付きバリヤ ・アセンブラ構文 BCBARR. cond ここで、cond={0−7}各条件は後部分にニモニ
ックで与えられる。 ・説明 条件が有効な限りこの命令語とこの命令語の後にくる命
令語実行を止める。cond〈2:0〉フィールドはC
Tフォーマットの他の条件文とは異に解釈される。次の
ような条件が現在定義されている。
【0348】
【表101】
【0349】・演算 while(cond==ture) 追っての全ての命令語を止める。 ・例外処理 なし ・プログラミング時注意 この命令語は命令実行の順次性を強化するために提供さ
れる。この命令語は不明確な例外処理の正確な報告を作
るのに用いられることができる。例えば、例外処理を生
じさせる算術文の後に用いられると、この命令語はアド
レスを知らせるプログラムカウンタとともに例外処理を
知ることができる。
【0350】VCBR 条件分岐 ・フォーマット ・アセンブラ構文 VCBR. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。 ・説明 condが真であれば、分岐する。これは遅滞分岐でな
い。 ・例外処理 無効命令語アドレス。
【0351】VCBRI 条件付き間接分岐 ・フォーマット ・アセンブラ構文 VCBRI. cond SRb ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。 ・説明 condが真であれば、分岐する。これは遅滞分岐文で
はない。 ・例外処理 無効命令語アドレス。
【0352】VCCS 条件付き文脈切換 ・フォーマット ・アセンブラ構文 VCCS #offset ・説明 VIMS〈cse〉が真であれば、文脈切換サブルーチ
ンにジャンプする。これは遅滞分岐文ではない。VIM
SK〈CSE〉が真であれば、VPC+4(戻りアドレ
ス)が戻りアドレススタックに格納される。そうでなけ
れば、実行はVPC+4から始まる。 ・例外処理 戻りアドレススタックのオーバフロー。
【0353】VCHGCR 制御レジスタの変化 ・フォーマット ・アセンブラ構文 VCHGCR Mode ・説明 この命令語はベクトルプロセッサの演算モードを変化さ
せる。モードで各ビットは下記の事項を規定する。 ・演算 ・例外処理 なし ・プログラミング時注意 VMOV命令語よりさらに効率的な方法でVCSRの制
御ビットを変化させるハードウェアのために提供され
る。
【0354】
【表102】
【0355】VCINT 条件付きインタラプトARM7 ・フォーマット ・アセンブラ構文 VCINST. cond #ICODE ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、命令語実行を中止し、可能であ
れば、インタラプトAR7をかける。 ・例外処理 VCINTインタラプト。
【0356】VCJOIN ARM7タスク条
件付きジョイン ・フォーマット ・アセンブラ構文 VCJOIN. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、命令語実行を中止し、可能であ
れば、ARM7インタラプトをかける。 ・例外処理 VCJOINインタラプト。
【0357】VCJSR サブルーチンへの
条件付きジャンプ ・フォーマット ・アセンブラ構文 VCJSR. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンにジャンプする。
これは遅滞した分岐ではない。condが真であれば、
VPC+4(戻りアドレス)は戻りアドレススタックに
格納される。そうでなければ、実行はVPC+4から始
まる。 ・例外処理 戻りアドレススタックオーバフロー。
【0358】VCJSRI サブルーチンへの
条件付き間接ジャンプ ・フォーマット ・アセンブラ構文 VCJSRI. cond SRb ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンに間接ジャンプす
る。これは遅滞した分岐ではない。condが真であれ
ば、VPC+4(戻りアドレス)は戻りアドレススタッ
クに格納される。そうでなければ、実行はVPC+4か
ら始まる。 ・例外処理 戻りアドレススタックオーバフロー。
【0359】VCMOV 条件付き移動 ・フォーマット ・アセンブラ構文 VCMOV. dt Rd. Rb cond VCMOV. dt Rd. #IMM、cond ここで、dt={b,b9,h,w,f}、cond=
{un,lt,eq,le,gt,ne,ge,o
v}。.fデータ型が8ビット即値オペランドを支援し
ないことを除いては.fと.wは同一の演算を指定す
る。
【0360】
【表103】
【0361】・説明 condが真であれば、レジスタRbは内容がレジスタ
Rdに移る。ID〈1.0〉はソース及び目的地レジス
タを規定する。 VR 現在バンクベクトルレジスタ SR スカラレジスタ SY 同期化レジスタ VAC ベクトル累算器レジスタ(VACレジスタコー
ディングはVMOV説明を参照する。)
【0362】
【表104】
【0363】 ・演算 IF((Cond == VCSR[SO,GT,EQ,LT]) I (Cond == un)){ for(i = 0;i < NumElem; i++) Rd[i] = [Rb[i] II SRb II sex(IMM<8:0>)}; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。−VCMO
VMは影響を受ける。ベクトル累算器の拡張浮動小数点
精密表示は全て576ビットを8個の要素を表示するた
めに用いる。従って、累算器に関連したレジスタ移動は
b9データサイズを指定すべきである。
【0364】VCMOVM 要素マスクととも
に条件付き移動 ・フォーマット ・アセンブラ構文 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は同一の演算を指定す
る。
【0365】
【表105】
【0366】・説明 condが真であれば、レジスタRbの内容がレジスタ
Rdに移る。ID〈1.0〉はソース及び目的地レジス
タを指定する。 VR 現在バンクベクトルレジスタ SR スカラレジスタ VAC ベクトル累算器レジスタ(VACレジスタコー
ディングの説明はVMOVの説明を参照する。)
【0367】
【表106】
【0368】 ・演算 IF((cond == VCSR[SO,GT,EQ,LT]) I (cond == un)) for(i = 0;i < NumElem && MMASK[i]; i++) Rd[i] = {Rb[i] II SRb II sex(IMM<8:0>) }; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。−VCMO
VMは影響を受ける。ベクトル累算器の拡張浮動小数点
精度表示は全て576ビットを8個の要素を表示するた
めに用いる。従って、累算器に関連したレジスタ移動は
b9データサイズを指定すべきである。
【0369】VCMPV 比較及びマスク指定 ・フォーマット ・アセンブラ構文 VCMPV. dt VRa,VRb,cond,mas
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を使用する。
【0370】
【表107】
【0371】・説明 ベクトルレジスタVRaとVRbの内容を減算して(V
Ra [i]−VRb[i])要素単位として比較し、比
較結果がVCMPV命令語のcondフィールドに合う
と、VGMR(K=0の時)或いはVMMR(K=1の
時)レジスタの対応ビット#iを設定する。例えば、c
ondフィールドが小さければ(LT)、VGMR
[i](またはMR[i])ビットが設定される。
【0372】 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0373】VCNTLZ 先頭0カウント ・フォーマット ・アセンブラ構文 VCNTLZ. dt VRd,VRb VCNTLZ. dt SRd,SRb ここで、dt={b,b9,h,w}
【0374】
【表108】
【0375】・説明 Rbの各要素に対して先頭0の数を数えてRdに値を戻
す。 ・例外処理 なし ・プログラミング時注意 要素にある全てのビットが0であれば、結果は要素のサ
イズと同一である(byte,byte9,halfw
ord,wordのそれぞれに対して8,9,16,3
2)。この数は要素位置の索引と逆関係がある(VCM
PR命令語の次に用いられるならば)。要素の上に変換
させるためにはNumElemからVCNTLZを減算
する。
【0376】VCOR 逆論理和 ・フォーマット ・アセンブラ構文 VCOR. dt VRd,VRa,VRb VCOR. dt VRd,VRa,SRb VCOR. dt VRd,VRa,#IMM VCOR. dt SRd,SRa,SRb VCOR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。.wと.fは同
一の演算を指定する。
【0377】
【表109】
【0378】・説明 RaとRb/即値オペランドを逆論理和してその結果を
目的地レジスタ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の全てのビット } ・例外処理 なし。
【0379】VCRSR サブルーチンから
の条件付き回帰 ・フォーマット ・アセンブラ構文 VCRSR. cond ここで、cond={un,lt,eq,le,gt,
ne,ge,ov} ・説明 condが真であれば、サブルーチンから回帰する。こ
れは遅滞した分岐ではない。condが真であれば、V
PC+4(戻りアドレス)は戻りアドレススタックに格
納される。そうでなければ、実行はVPC+4から始ま
る。
【0380】 ・例外処理 無効命令語アドレス、アドレススタックアンダフロ
ー....。
【0381】VCVTB9 byte9データ型変換 フォーマット ・アセンブラ構文 VCVTB9. md VRd,VRb VCVTB9. md SRd,SRb ここで、md={bb9,b9h,hb9}
【0382】
【表110】
【0383】・説明 Rbの各要素はバイトからbyte9(bb9)へ、b
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モードの使用後にはアンシャフル演算によっ
て目的地レジスタの要素数を減らすべきである。この命
令語は要素マスクの影響を受けない。
【0384】VCVTFF 浮動小数点の固定
小数点への変換 ・フォーマット ・アセンブラ構文 VCVTFF VRd,VRa,SRb VCVTFF VRd,VRa,#IMM VCVTFF SRd,SRa,SRb VCVTFF SRd,SRa,#IMM
【0385】
【表111】
【0386】・説明 ベクトル/スカラレジスタRaの内容が〈X,Y〉とい
う表現の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)を取る。
【0387】VCVTIF 整数の浮動小数点変換 ・フォーマット ・アセンブラ構文 VCVTIF VRd,VRb VCVTIF VRd,SRb VCVTIF SRd,SRb
【0388】
【表112】
【0389】・説明 ベクトル/スカラレジスタRbの内容がint32から
浮動データ型に変換される。結果はベクトル/スカラレ
ジスタのRdに格納される。 ・演算 for(i = 0;i < NumElem;i++) { Rd[i] = convert to floating point format(Rb[i]); } ・例外処理 なし ・プログラミング時注意 この命令語はワードデータサイズのみ支援する。この構
造が多数のデータ型を支援しないために、これは要素マ
スクを使用しない。
【0390】VD1CBR VCR1減少及び条件分岐 ・フォーマット ・アセンブラ構文 VD1CBR. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。 ・説明 VCR1を減少し、condが真であれば分岐する。こ
れは遅滞した分岐ではない。 ・例外処理 無効命令語アドレス ・プログラミング時注意 分岐条件文が検査される前にVCR1を減少することを
注意されたい。VCR1が0の時、この命令語を実行す
ると、ループ回数が232−1になる。
【0391】VD2CBR VCR2減少及び条件付き分岐 ・フォーマット ・アセンブラ構文 VD2CBR. cond #offset ここで、cond={un,lt,eq,le,gt,
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になる。
【0392】VD3CBR VCR3減少及び条件付き分岐 ・フォーマット ・アセンブラ構文 VD3CBR. cond #offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。 ・説明 VCR3を減少し、条件が真であれば分岐する。これは
遅滞した分岐ではない。 ・例外処理 無効命令語アドレス ・プログラミング時注意 分岐条件文が検査される前にVCR3を減少することに
注意されたい。VCR3が0の時、この命令語を実行す
ると、ループ回数232−1になる。
【0393】VDIV2N 2n で割る ・フォーマット ・アセンブラ構文 VDIV2N. dt VRd,VRa,SRb VDIV2N. dt VRd,VRa,#IMM VDIV2N. dt SRd,SRa,SRb VDIV2N. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}
【0394】
【表113】
【0395】・説明 ベクトル/スカラレジスタRaは2^nで割る。ここ
で、nは陽数であり、スカラレジスタRbまたはIMM
になり、最終結果はベクトル/スカラレジスタRdに格
納する。この命令語は四捨五入方式で無条件切捨てを使
用する。 ・例外処理 なし ・プログラミング時注意 Nは5ビットの数字であるSRbまたはIMM〈4:
0〉からきたことに注意されたい。バイト、byte
9、ハーフワードデータ型に対してプログラマはNの値
がそのデータサイズの精度と同一か又は小さいものに指
定すべきことに注意されたい。もし大きくなると、要素
は符号ビットで充填される。この命令語の四捨五入方式
は無条件切捨てである。
【0396】VDIV2N. F 浮動小数点の2n 除算 ・フォーマット ・アセンブラ構文 VDIV2N. f VRd,VRa,SRb VDIV2N. f VRd,VRa,#IMM VDIV2N. f SRd,SRa,SRb VDIV2N. f SRd,SRa,#IMM
【0397】
【表114】
【0398】・説明 ベクトル/スカラレジスタRaは2n で割る。ここで、
nは陽数であり、スカラレジスタRbまたはIMMにな
り、最終結果はベクトル/スカラレジスタRdに格納す
る。この命令語は四捨五入方式で無条件切捨てを使用す
る。 ・例外処理 なし ・プログラミング時注意 Nは5ビットの数字であるSRbまたはIMM〈4:
0〉からきたことに注意する。
【0399】VDIVI 除算初期化−不完全 ・フォーマット ・アセンブラ構文 VDIVI. ds VRb VDIVI. ds SRb ここで、ds={b,b9,h,w}
【0400】
【表115】
【0401】・説明 非復旧され、符号のある整数の除算をするための初期化
段階を行う。被除数は累算器にある倍精度の符号のある
整数である。被除数が単精度であれば、倍精度に符号拡
張をしてVACOHとVACOLに格納されるべきであ
る。除数は単精度の符号のある整数であってRbにあ
る。被除数の符号が除数のものと同一であれば、上位累
算器からRbを減算し、異なれば上位累算器にRbを加
算する。
【0402】 ・例外処理 なし ・プログラミング時注意 プログラマは除算段階に先だって0で割って生じる問題
やオーバフローを検査する責任がある。
【0403】VDIVS 除算段階−不完全 ・フォーマット ・アセンブラ構文 VDIVIS. ds VRb VDIVIS. ds SRb ここで、ds={b,b9,h,w}
【0404】
【表116】
【0405】・説明 非復旧される符号のある整数の除算で反復的な1段階を
行う。この命令語はデータのサイズだけ実行しなければ
ならない(即ち、int8は8番、int9は9番、i
nt16は16番、int32は32番)。除算段階が
初期の部分的な残りを累算器に置く前に、VDIVI命
令語は一度行われなければならない。除数は単精度の符
号のあるRbである。各段階ごとに商のビットが抽出さ
れて累算器LSBに移動する。累算器にある部分的な残
りの符号がRbにある除数のものと同一であれば、上位
累算器からRbを引く。そうでなければ、上位累算器に
Rbを加える。結果的な部分(余りの加算または減算の
結果)の符号が除数のものと同一であれば、商のビット
は1である。そうでなければ、商のビットは0である。
累算器は左側に一つ移動し、商のビットで充填される。
除算の最終段階において余りは上位累算器にあり、商は
下位累算器にある。商は逆になっている。
【0406】・演算 ・例外処理 TBD ・プログラミング時注意。
【0407】VESL 要素の左側1移動 ・フォーマット ・アセンブラ構文 VESL. dt SRC,VRd,VRa,SRb ここで、dt={b,b9,h,w,f}。.wと.f
は同一の演算を指定する。
【0408】
【表117】
【0409】・説明 ベクトルレジスタRaの全ての要素を左側に一つずつ移
動し、空いた所はレジスタRbの値で充填する。シフト
された一番左側の要素はスカラレジスタRcに移り、残
りの要素はベクトルレジスタRdに格納される。図9を
参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0410】VESR 要素の右側1移動 ・フォーマット ・アセンブラ構文 VESR. dt SRc,VRd,VRa,SRb ここで、dt={b,b9,h,w,f}。.wと.f
は同じ演算を指定する。
【0411】
【表118】
【0412】・説明 ベクトルレジスタRaの全ての要素を右側に一つずつ移
動し、空いた所はレジスタRbの値で充填する。シフト
された一番右側の要素はスカラレジスタRcに移り、残
りの要素はベクトルレジスタRdに格納される。図10
を参照する。 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0413】VEXTRT 1要素抽出 ・フォーマット ・アセンブラ構文 VEXTRT. dt SRd,VRa,SRb VEXTRT. dt SRd,VRa,#IMM ここで、dt={b,b9,h,w,f}.fと.wは
同じ演算を指定する。
【0414】
【表119】
【0415】・説明 ベクトルレジスタRaからスカラレジスタRbまたはI
MMの指定した要素を抽出してスカラレジスタRdに格
納する。 ・演算 index32 = {SRb % 32 II IMM<4:0)> }; index64 = {SRb % 64 II IMM<5:0>}; index = (VCSR<vec64>)? index64:index32; SRd = VRa[index]; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0416】VEXTSGN2 (1,−1)符号抽出 ・フォーマット ・アセンブラ構文 VEXTSGN2. dt VRd,VRa VEXTSGN2. dt SRd,SRa ここで、dt={b,b9,h,w}
【0417】
【表120】
【0418】・説明 ベクトル/スカラレジスタRaの内容で符号を計算して
その結果をベクトル/スカラレジスタRdに格納する。 ・例外処理 なし。
【0419】VEXTSGN3 (1,0,−1)符号抽出 ・フォーマット ・アセンブラ構文 VEXTSGN3. dt VRd,VRa VEXTSGN3. dt SRd,SRa ここで、dt={b,b9,h,w}
【0420】
【表121】
【0421】・説明 ベクトル/スカラレジスタRaの内容で符号を計算して
その結果をベクトル/スカラレジスタRdに格納する。 ・例外処理 なし。
【0422】VINSRT 1要素挿入 ・フォーマット ・アセンブラ構文 VINSRT. dt VRd,SRa,SRb VINSRT. dt VRd,SRa,#IMM ここで、dt={b,b9,h,w,f}.fと.wは
同じ演算を指定する。
【0423】
【表122】
【0424】・説明 ベクトルレジスタRaからスカラレジスタRbまたはI
MMの指定した要素を挿入してスカラレジスタRdに格
納する。 ・演算 index32 = {SRb % 32 II IMM<4:0>}; index64 = {SRb % 64 II IMM<5:0>}; index = (VCSR<vec64>)? index64:index32; VRd[index] = SRa; ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0425】VL ロード ・フォーマット ・アセンブラ構文 VL. it Rd,SRb,SRi VL. it Rd,SRb,#IMM VL. it Rd,SRb+,SRi VL. it Rd,SRb+,#IMM ここで、it={b,bz9,bs9,h,w,4,
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLOFFを使用する。
【0426】・説明 ベクトル現在または交互バンクのベクトルレジスタをロ
ードする。スカラレジスタも適用可能である。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A==1) SRb = EA; RD =下記の表を参照する。
【0427】
【表123】
【0428】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。 ・未解決:ベクトルロードまたは格納にアドレス整列制
限が必要な理由は何か。
【0429】VLCB 円形バッファのロード ・フォーマット ・アセンブラ構文 VLCB. it Rd,SRb,SRi VLCB. it Rd,SRb,#IMM VLCB. it Rd,SRb+,SRi VLCB. it Rd,SRb+,#IMM ここで、it={b,bz9,bs9,h,w,4,
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLCBOFFを使用する。
【0430】・説明 SRb+1にある開始ポインタとSRb+2にある終了
ポインタに区画された円形バッファでベクトルまたはス
カラレジスタをロードする。ロード前に有効なアドレス
が終了アドレスより大きければ、アドレス更新演算と同
様に調節されるべきである。しかも、.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 =下記の表を参照する。
【0431】
【表124】
【0432】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。プログラマ
はこの命令語が碌に実行されるためには次のような条件
が満足しなければならないことを銘ずるべきである。 BEGIN < EA <2*END - BEGIN これはEA - END<END - BEGINとEA > BEGINを合わせたも
のである。
【0433】VLD 二重ロード ・フォーマット ・アセンブラ構文 VLD. it Rd,SRb,SRi VLD. it Rd,SRb,#IMM VLD. it Rd,SRb+,SRi VLD. it Rd,SRb+,#IMM ここで、it={b,bz9,bs9,h,w,4,
8,16,32,64}Rd={VRd,VRAd,S
Rd}.bと.bs9は同一の演算を指定し、.64と
VRAdは共に指定され得ない。キャッシュオフロード
のためにはVLDOFFを使用する。
【0434】・説明 現在または交互バンクのベクトルレジスタをロードす
る。スカラレジスタも適用することができる。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A==1) SRb = EA; Rd:Rd+1 = 下記の表を参照する。
【0435】
【表125】
【0436】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0437】VLI 即値ロード ・フォーマット ・アセンブラ構文 VLI. dt VRd,#IMM VLI. dt SRd,#IMM ここで、d t={b,b9,h,w,f} ・説明 スカラレジスタまたはベクトルレジスタに即値をロード
する。スカラレジスタに対してバイト、byte9、ハ
ーフワードまたはワードはデータ型によってロードされ
る。バイト、byte9、ハーフワードのデータ型に対
して影響を受けないバイトは修正されない。 ・演算 Rd =下記の表を参照する。 ・例外処理 なし
【0438】
【表126】
【0439】VLQ 4重ロード ・フォーマット ・アセンブラ構文 VLQ. it Rd,SRb,SRi VLQ. it Rd、SRb,#IMM VLQ. it Rd,SRb+,SRi VLQ. it Rd、SRb+,#IMM ここで、it={b,bz9,bs9,h,w,4,
8,16,32,64}、Rd={VRd,VRAd,
SRd}.bと.bs9は同一の演算を指定する。.6
4とVRAdは共に指定され得ない。キャッシュオフロ
ードのためにVLQOFFを使用する。
【0440】・説明 現在または交互バンクに4つのベクトルレジスタをロー
ドする。スカラレジスタも適用することができる。 ・演算 EA = SRb +{SRi II Sex(IMM<7:0> }; if (A == 1) SRb = EA;; Rd:Rd+1:Rd+2:Rd+3 = 下記の表を参照する。
【0441】
【表127】
【0442】
【表128】
【0443】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクの影響を受けない。 ・未解決:8ビットの2の補数即値はVLQがアドレス
更新関数とともに使用するには極めて小さい(最大値1
27)。
【0444】VLR 逆ロード ・フォーマット ・アセンブラ構文 VLR. it Rd,SRb,SRi VLR. it Rd,SRb,#IMM VLR. it Rd,SRb+,SRi VLR. it Rd,SRb+,#IMM ここで、it={4,8,16,32,64},Rd=
{VRd,VRAd,SRd}。.64とVRAdは共
に指定され得ない。キャッシュオフロードのためにVl
DOFFを使用する。
【0445】・説明 ベクトルレジスタを要素の逆順でロードする。スカラレ
ジスタは支援しない。 ・演算 EA = SRb +{SRi II Sex(IMM<7:0> }; if (A == 1) SRb = EA; Rd =下記の表を参照する。
【0446】
【表129】
【0447】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクの影響を受けない。
【0448】VLSL 左側論理移動 ・アセンブラ構文 VLSL. dt VRd,VRa,SRb VLSL. dt VRd,VRa,#I MM VLSL. dt SRd,SRa,SRb VLSL. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0449】
【表130】
【0450】・説明 ベクトル/スカラレジスタRaの各要素はビット論理移
動をし、最下位ビットには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のみで充填する。
【0451】VLSR 右側論理移動 ・フォーマット ・アセンブラ構文 VLSR. dt VRd,VRa,SRb VLSR. dt VRd,VRa,#I MM VLSR. dt SRd,SRa,SRb VLSR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0452】
【表131】
【0453】・説明 ベクトル/スカラレジスタRaの各要素は右側にビット
論理移動をし、最上位ビットには0を充填し、移動量は
スカラレジスタRbまたはIMMフィールドが決定す
る。結果はベクトル/スカラレジスタRdに格納され
る。 ・例外処理 なし ・プログラミング時注意 shift _amountはSRbまたはIMM〈4:0〉から5
ビットで抽出されることに注意する。byte、byt
e9、ハーフワードデータ型の場合、プログラマは移動
量がデータサイズを外れないようにすべきである。もし
移動量が指定されるデータサイズより大きければ、要素
を0のみで充填する。
【0454】VLWS ストライドロード ・フォーマット ・アセンブラ構文 VLWS. lt Rd,SRb,SRi VLWS. lt Rd,SRb,#IMM VLWS. lt Rd,SRb+,SRi VLWS. lt Rd,SRb+,#IMM ここで、lt={4,8,16,32},Rd={VR
d,VRAd}。.64モードは支援されないので、そ
の代わりにVLを使用する。キャッシュオフロードのた
めにはVLWSOFFを使用する。
【0455】・説明 有効アドレスから32バイトをメモリからベクトルレジ
スタVRdへロードするが、SRb+1はストライド調
節レジスタとして使用する。LTはブロックのサイズを
指定するもので、各ブロックに対してロードされる連接
したバイトの数をいう。SRb+1はストライトで隣接
したブロックの開始を区別するためのバイトの数であ
る。ストライドはブロックのサイズが同じか又は大きけ
ればならない。EAは整列されたデータサイズである。
ストライドとブロックのサイズはデータサイズの倍数で
ある。
【0456】 ・例外処理 無効データアドレス、非整列アクセス。
【0457】VMAC 乗算及び累算 ・フォーマット ・アセンブラ構文 VMAC. dt VRa,VRb VMAC. dt VRa,SRb VMAC. dt VRa,#IMM VMAC. dt SRa,SRb VMAC. dt SRa,#IMM ここで、dt={b,h,w,f}
【0458】
【表132】
【0459】・説明 Raの各要素をRbの各要素に乗じて倍精度の中間結果
を作る。この中間結果はベクトル累算器の倍精度要素に
加えてベクトル累算器に格納する。RaとRbは指定さ
れたデータ型を使用するが、VACが適当な倍精度デー
タ型を使用するのと同じである。各倍精度の要素の上位
はVACHに格納する。浮動データ型に対して全てのオ
ペランドの結果は単精度である。
【0460】 ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0461】VMACF 乗算及び端数累算 ・フォーマット ・アセンブラ構文 VMACF. dt VRa,VRb VMACF. dt VRa,SRb VMACF. dt VRa,#IMM VMACF. dt SRa,SRb VMACF. dt SRa,#IMM ここで、dt={b,h,w}
【0462】
【表133】
【0463】・説明 Raの各要素をRbの各要素に乗じて倍精度の中間結果
を作り、1ビット左側に移動した後、この中間結果はベ
クトル累算器の倍精度要素に加えてベクトル累算器に格
納する。RaとRbは指定されたデータ型を使用する
が、VACが適当な倍精度データ型を使用するのと同じ
である(int8,int16,int32に対してそ
れぞれ16,32,64ビットを使用する)。各倍精度
の要素の上位はVACHに格納する。
【0464】 ・例外処理 オーバフロー ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0465】VMACL 乗算及び下位累算 ・フォーマット ・アセンブラ構文 VMACL. dt VRa,VRb,VRb VMACL. dt VRd,VRa,SRb VMACL. dt VRd,VRa,#IMM VMACL. dt SRd,SRb,SRb VMACL. dt SRd,SRa,#IMM ここで、dt={b,h,w,f}
【0466】
【表134】
【0467】・説明 Raの各要素をRbの各要素に乗じて倍精度の中間結果
を作る。この中間結果はベクトル累算器の倍精度要素に
加えてベクトル累算器に格納し、目的地レジスタVRd
の下位部分を戻す。RaとRbは指定されたデータ型を
使用するが、VACが適当な倍精度データ型を使用する
のと同じである(int8,int16,int32に
対してそれぞれ16,32,64ビットを使用する)。
各倍精度の要素の上位はVACHに格納する。浮動デー
タ型に対して全てのオペランドの結果は単精度である。
【0468】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb }; if (dt = float) VACL[i] = VRa[i] * Bop[i] + VAC:[i]; else VACH[i]:VACL[i] = VRa[i] * Bop[i] + VACH[i]:VACL[i]; } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0469】VMAD 乗算及び加算 ・フォーマット ・アセンブラ構文 VMAD. dt VRc,VRd,VRa,VRb VMAD. dt SRc,SRd,SRa,SRb ここで、dt={b,h,w}
【0470】
【表135】
【0471】・説明 Raの各要素をRbの各要素に乗じて倍精度の中間結果
を作る。この中間結果は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]); } ・例外処理 なし。
【0472】VMADL 乗算及び下位加算 ・フォーマット ・アセンブラ構文 VMADL. dt VRc,VRd,VRa,VRb VMADL. dt SRc,SRd,SRa,SRb ここで、dt={b,h,w,f}
【0473】
【表136】
【0474】・説明 Raの各要素をRbの各要素に乗じた後、1ビット左側
に移動する。倍精度の中間効果を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]; } ・例外処理 オーバフロー、浮動小数点無効オペランド。
【0475】VMAS 乗算及び累算器減算 ・アセンブラ構文 VMAS. dt VRa,VRb VMAS. dt VRa,SRb VMAS. dt VRa,#IMM VMAS. dt SRa,SRb VMAS.dt SRa,#IMM ここで、dt={b,h,w,f}
【0476】
【表137】
【0477】・説明 Raの各要素をRbの各要素に乗じて倍精度の中間結果
を作る。ベクトル累算器の倍精度要素から倍精度の中間
結果を引く。ベクトル累算器に各要素の倍精度の和を格
納する。RaとRbは指定されたデータ型を使用する
が、VACが適当な倍精度データを使用するのと同一で
ある(int8,int16,int32に対してそれ
ぞれ16,32,64ビットを使用する)。各倍精度の
要素の上位はVACHに格納する。浮動小数点データ型
に対して全てのオペランドと結果は単精度である。
【0478】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb }; if(dt == float) VACL[i] = VACL[i] − VRa[i] * Bop[i]; else VACH[i]:VACL[i] = VACH[i] :VACL[i] - VRa[i] * Bop[i] ; } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はintデータ型を支援しないので、その代
わりにint16を使用する。
【0479】VMASF 乗算及び累算器端数減算 ・アセンブラ構文 VMASF. dt VRa,VRb VMASF. dt VRa,SRb VMASF. dt VRa,#IMM VMASF. dt SRa,SRb VMASF. dt SRa,#IMM ここで、dt={b,h,w}
【0480】
【表138】
【0481】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。倍精度の中間結果を左側に1ビット移動す
る。ベクトル累算器の倍精度要素から倍精度の中間結果
を引く。ベクトル累算器に各要素の倍精度の和を格納す
る。VRaとRbは指定されたデータ型を使用するが、
VACが適当な倍精度データを使用するのと同一である
(int8,int16,int32に対してそれぞれ
16,32,64ビットを使用する)。各倍精度の要素
の上位はVACHに格納する。
【0482】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; VACH[i]:VACL[i] = VACH[i] :VACL[i]_ VRa[i] * Bop[i] ; } ・例外処理 オーバフロー ・プログラミング時注意 この命令語はintデータ型を支援しないので、その代
わりにint16を使用する。
【0483】VMASL 乗算及び累算器下位減算 ・フォーマット ・アセンブラ構文 VMASL. dt VRd,VRa,VRb VMASL. dt VRd,VRa,SRb VMASL. dt VRd,VRa,#IMM VMASL. dt SRd,SRa,SRb VMASL. dt SRd,SRa,#IMM ここで、dt={b,h,w,f}
【0484】
【表139】
【0485】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。ベクトル累算器の倍精度要素から倍精度の中
間結果を引く。ベクトル累算器に各要素の倍精度の和を
格納する。下位を目的地レジスタに戻す。VRaとRb
は指定されたデータ型を使用するが、VACが適当な倍
精度データを使用するのと同一である(int8,in
t16,int32に対してそれぞれ16,32,64
ビットを使用する)。各倍精度の要素の上位はVACH
に格納する。浮動小数点データ型に対して全てのオペラ
ンドと結果は単精度である。
【0486】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb }; if(dt == float) VACL[i] = VACL[i] - VRa[i] * Bop[i]; else VACH[i]:VACL[i] = VACH[i] :VACL[i] - VRa[i] * Bop[i] ; VRd[i] = VACL[i] } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0487】VMASF 乗算及び累算器端数減算 ・フォーマット ・アセンブラ構文 VMASF. dt VRa,VRb VMASF. dt VRa,SRb VMASF. dt VRa,#IMM VMASF. dt SRa,SRb VMASF. dt SRa,#IMM ここで、dt={b,h,w}
【0488】
【表140】
【0489】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。倍精度の中間結果を左側に1ビットずつ移動
する。ベクトル累算器の倍精度要素から移動された倍精
度の中間結果を引く。ベクトル累算器に各要素の倍精度
の和を格納する。VRaとRbは指定されたデータ型を
使用するが、VACが適当な倍精度データを使用するの
と同一である(int8,int16,int32に対
してそれぞれ16,32,64ビットを使用する)。各
倍精度の要素の上位はVACHに格納する。
【0490】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb II sex(IMM<8:0>)}; VACH[i]:VACL[i] = VACH[i] :VACL[i]_VRa[i] * Bop[i] ; } ・例外処理 オーバフロー ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0491】VMASL 乗算及び累算器下位減算 ・フォーマット ・アセンブラ構文 VMASL. dt VRd,VRa,VRb VMASL. dt VRd,VRa,SRb VMASL. dt VRd,VRa,#IMM VMASL. dt SRd,SRa,SRb VMASL. dt SRd,SRa,#IMM ここで、dt={b,h,w,f}
【0492】
【表141】
【0493】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。ベクトル累算器の倍精度要素から倍精度の中
間結果を引く。ベクトル累算器に各要素の倍精度の和を
格納する。下位を目的地レジスタVRdに戻す。Raと
Rbは指定されたデータ型を使用するが、VACが適当
な倍精度データを使用するのと同一である(int8,
int16,int32に対してそれぞれ16,32,
64ビットを使用する)。各倍精度の要素の上位はVA
CHに格納する。浮動小数点データ型に対して全てのオ
ペランドと結果は単精度である。
【0494】 ・演算 for(i=0;i < NumElem && EMASK[i]; i++) { Bop[i] ={VRb[i] II SRb }; if(dt == float) VACL[i] = VACL[i] - VRa[i] * Bop[i]; else VACH[i]:VACL[i] = VACH[i] :VACL[i] - VRa[i] * Bop[i] ; VRd[i] = VACL[i] } ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0495】VMAXE 双単位最大値交換 ・フォーマット ・アセンブラ構文 VMAXE. dt VRd,VRb ここで、dt={b,b9,h,w,f}
【0496】
【表142】
【0497】・説明 VRaはVRbと同じでなければならない。VRaがV
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]; } ・例外処理 なし。
【0498】VMOV 移動 ・フォーマット ・アセンブラ構文 VMOV. dt Rd,Rb ここで、dt={b,b9,h,w,f}。RdとRb
は構造的に指定されたレジスタ名を指す。.fと.wは
同一の演算を指定する。
【0499】
【表143】
【0500】・説明 レジスタRbの内容はレジスタRdに移す。グループフ
ィールドはソースと目的地レジスタグループを指定す
る。レジスタグループの説明は次の通りである。 VR 現在バンクベクトルレジスタ VRA 交互バンクベクトルレジスタ SR スカラレジスタ SP 特殊レジスタ RASR 復帰アドレススタックレジスタ VAC ベクトル累算器レジスタ(下記の内容のVAC
レジスタコーディングを参照する。)
【0501】
【表144】
【0502】この命令語ではベクトルレジスタがスカラ
レジスタに移動することができない。VEXTRがこの
ような目的に適する。VACレジスタコーティングに次
の表を使用する。
【0503】
【表145】
【0504】・演算 Rd = Rb ・例外処理 VCSRまたはVISRCで例外処理ビットを設定する
と、対応例外処理が引き起こされる。 ・プログラミング時注意 この命令語は要素マスクに影響を受けない。交互バンク
概念がVEC64モードでは存在しないために、この命
令語を用いてVEC64モードで交互バンクレジスタか
ら或いはそこへデータを移すことができない。
【0505】VMUL 乗算 ・フォーマット ・アセンブラ構文 VMUL. dt VRc,VRd,VRa,VRb VMUL. dt SRc,SRd,SRa,SRb ここで、dt={b,h,w}
【0506】
【表146】
【0507】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。ベクトル累算器に各要素の倍精度の和を格納
する。RaとRbは指定されたデータ型を使用するが、
Rc:Rdが適当な倍精度データを使用するのと同一で
ある(int8,int16,int32に対してそれ
ぞれ16,32,64ビットを使用する)。各倍精度要
素の上位はRcに格納する。
【0508】 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。拡張された結果は支援
されるデータ型でないため、この命令語は浮動データ型
も支援しない。
【0509】VMULA 累算器乗算 ・フォーマット ・アセンブラ構文 VMULA. dt VRa,VRb VMULA. dt VRa,SRb VMULA. dt VRa,#IMM VMULA. dt SRa,SRb VMULA. dt SRa,#IMM ここで、dt={b,h,w,f}
【0510】
【表147】
【0511】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作って累算器にその結果を書き込む。浮動小数点デ
ータ型に対して全てのオペランドと結果は単精度であ
る。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0512】VMULAF 累算器端数乗算 ・フォーマット ・アセンブラ構文 VMULAF. dt VRa,VRb VMULAF. dt VRa,SRb VMULAF. dt VRa,#IMM VMULAF. dt SRa,SRb VMULAF. dt SRa,#IMM ここで、dt={b,h,w}
【0513】
【表148】
【0514】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。倍精度結果は左側に1ビットずつ移動する。
累算器にその結果を書き込む。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0515】VMULF 端数乗算 ・フォーマット ・アセンブラ構文 VMULF. dt VRd,VRa,VRb VMULF. dt VRd,VRa,SRb VMULF. dt VRd,VRa,#IMM VMULF. dt SRd,SRa,SRb VMULF. dt SRd,SRa,#IMM ここで、dt={b,h,w}
【0516】
【表149】
【0517】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。倍精度結果は左側に1ビット移動する。結果
の上位を目的地レジスタVRd+1に戻し、下位は目的
地レジスタVRdに戻す。VRdは必ず偶数(even numv
red)レジスタでなければならない。 ・例外処理 なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0518】VMULFR 端数乗算及び四捨五入 ・フォーマット ・アセンブラ構文 VMULFR. dt VRd,VPa,VRb VMULFR. dt VRd,VPa,SRb VMULFR. dt VRd,VPa,#IMM VMULFR. dt SRd,SPa,SRb VMULFR. dt SRd,SPa,#IMM ここで、dt={b,h,w}
【0519】
【表150】
【0520】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。倍精度結果は左側に1ビット移動する。結果
を四捨五入して上位に送る。上位を目的地レジスタVR
dに戻す。 ・例外処理なし ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0521】VMULL 下位乗算 ・フォーマット ・アセンブラ構文 VMULL. dt VRd,VRa,VRb VMULL. dt VRd,VRa,SRb VMULL. dt VRd,VRa,#IMM VMULL. dt SRd,SRa,SRb VMULL. dt SRd,SRa,#IMM ここで、dt={b,h,w,f}
【0522】
【表151】
【0523】・説明 VRaの各要素をRbの各要素に乗じて倍精度の中間結
果を作る。この結果の下位を目的地レジスタVRdに戻
す。浮動データ型に対して全てのオペランドと結果は単
精度である。 ・例外処理 オーバフロー、浮動小数点無効オペランド ・プログラミング時注意 この命令語はint9データ型を支援しないので、その
代わりにint16を使用する。
【0524】VAND 否定論理積 ・フォーマット ・アセンブラ構文 VNAND. dt VRd,VRa,VRb VNAND. dt VRd,VRa,SRb VNAND. dt VRd,VRa,#IMM VNAND. dt SRd,SRa,SRb VNAND. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}.wと.fは同一
の演算を規定する。
【0525】
【表152】
【0526】・説明 Raの各要素をRb/即値オペランドの各要素と否定論
理積する。この結果を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; } ・例外処理 なし。
【0527】VNOR 否定論理和 ・フォーマット ・アセンブラ構文 VNOR. dt VRd,VRa,VRb VNOR. dt VRd,VRa,SRb VNOR. dt VRd,VRa,#IMM VNOR. dt SRd,SRa,SRb VNOR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}.wと.fは同一
の演算を規定する。
【0528】
【表153】
【0529】・説明 Raの各要素をRb/即値オペランドの各要素と否定論
理和する。この結果を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; } ・例外処理 なし。
【0530】VOR 論理和 ・フォーマット ・アセンブラ構文 VOR. dt VRd,VRa,VRb VOR. dt VRd,VRa,SRb VOR. dt VRd,VRa,#IMM VOR. dt SRd,SRa,SRb VOR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}.wと.fは同一
の演算を規定する。
【0531】
【表154】
【0532】・説明 Raの各要素をRb/即値オペランドの各要素と論理和
する。この結果を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; } ・例外処理 なし。
【0533】VORC 逆論理和 ・フォーマット ・アセンブラ構文 VORC. dt VRd,VRa,VRb VORC. dt VRd,VRa,SRb VORC. dt VRd,VRa,#IMM VORC. dt SRd,SRa,SRb VORC. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}.wと.fは同一
の演算を規定する。
【0534】
【表155】
【0535】・説明 Raの各要素をRb/即値オペランドの各要素の逆と論
理和する。この結果を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; } ・例外処理 なし。
【0536】VPFTCH プリフェッチ ・フォーマット ・アセンブラ構文 VPFTCH. ln SRb,Si VPFTCH. ln SRb,#IMM VPFTCH. ln SRb+,Si VPFTCH. ln SRb+,#IMM In={1,2,4,8} ・説明 有効アドレスから始まる多数のベクトルデータキャッシ
ュラインをプリフェッチする。キャッシュラインは下記
のように規定される: 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〉は局部メモリでバイトアドレスを示
す。
【0537】VPFTCHSP スクラッチパッド
へのプリフェッチ ・フォーマット ・アセンブラ構文 VPFTCHSP. ln SRb,Si VPFTCHSP. ln SRb,#IMM VPFTCHSP. ln SRb+,Si VPFTCHSP. ln SRb+,#IMM In={1,2,4,8}。VPFTCHとVPFTC
HSPは同一の演算コードを有する。
【0538】・説明 多数の64- バイトブロックをメモリからスクラッチパ
ッドへ移動する。有効アドレスはメモリの開始アドレス
を提供し、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バイト境界に配列され
るようにする。
【0539】 ・例外処理 無効データアドレス。
【0540】VROL 左回転 ・フォーマット ・アセンブラ構文 VROL. dt VRd,VRa,SRb VROL. dt VRd,VRa,#IMM VROL. dt SRd,SRa,SRb VROL. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0541】
【表156】
【0542】・説明 ベクトル/スカラレジスタRaの各データ要素をスカラ
レジスタ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は
所定データサイズでビット数を指す。
【0543】VROR 右回転 ・フォーマット ・アセンブラ構文 VROR. dt VRd,VRa,SRb VROR. dt VRd,VRa,#IMM VROR. dt SRd,SRa,SRb VROR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0544】
【表157】
【0545】・説明 ベクトル/スカラレジスタRaの各データ要素をスカラ
レジスタRbまたはIMMフィールドに与えられたビッ
ト量だけ右側に回転して、この結果をベクトル/スカラ
レジスタRdに格納する。 ・例外処理 なし ・プログラミング時注意 rotate_amountはSRbまたはIMM〈4:0〉から5
ビット数として取り、バイト、byte9、ハーフワー
ドデータ型においてはデータサイズがビット数より少な
いか同一の回転量を正確にプログラマによって規定すべ
きである。もし回転量が規定データサイズより大きけれ
ば、その結果は定義されない。n左回転はElemSi
ze右回転と等価である。ここで、ElemSizeは
所定データサイズでビット数を指す。
【0546】VROUND 浮動称す点から整
数への四捨五入 ・フォーマット ・アセンブラ構文 VROUND. rm VRd,VRb VROUND. rm SRd,SRb rm={ninf,zero,near,pinf}。
【0547】
【表158】
【0548】・説明 浮動小数点データ型のベクトル/スカラレジスタRbの
内容を最近似値32-ビット整数(ワード)に四捨五入
し、この結果をベクトル/スカラレジスタRdに格納す
る。四捨五入モードはRMに定義される。
【0549】
【表159】
【0550】 ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0551】VSATL 下位境界飽和 ・フォーマット ・アセンブラ構文 VSATL. dt VRd,VRa,VRb VSATL. dt VRd,VRa,SRb VSATL. dt VRd,VRa,#IMM VSATL. dt SRd,SRa,SRb VSATL. dt SRb,SRa,#IMM dt={b9,h,w,f}.fはデータ型は9- ビッ
ト即値で支援されない。
【0552】
【表160】
【0553】・説明 ベクトル/スカラレジスタRaの各データ要素をスカラ
レジスタRb或いはIMMフィールドに与えられた対応
下限に比較する。その値が下限より小さければ、下限に
同等に設定され、その最終結果をベクトル/スカラレジ
スタRdに格納する。 ・例外処理 なし。
【0554】VSATU 上位境界飽和 ・フォーマット ・アセンブラ構文 VSATU. dt VRd,VRa,VRb VSATU. dt VRd,VRa,SRb VSATU. dt VRd,VRa,#IMM VSATU. dt SRd,SRa,SRb VSATU. dt SRd,SRa,#IMM dt={b,b9,h,w,f}.fデータ型は9- ビ
ット即値で支援されない。
【0555】
【表161】
【0556】・説明 ベクトル/スカラレジスタRaの各データ要素をスカラ
レジスタRb或いはIMMフィールドに与えられた対応
上限と比較する。その値が上限より大きければ、上限に
同等に設定され、その最終結果をベクトル/スカラレジ
スタRdに格納する。 ・例外処理 なし。
【0557】VSHFL シャフル ・フォーマット ・アセンブラ構文 VSHFL. dt VRc,VRd,VRa,VRb VSHFL. dt VRc,VRd,VRa,SRb ここで、dt={b,b9,h,w,f}。.wと.f
は同一の演算を規定する。
【0558】
【表162】
【0559】・説明 ベクトルレジスタRaの内容をRbとシャフルして図1
4に示すようにその結果をベクトルレジスタRc:Rd
に格納する。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0560】VSHFLH 上位シャフル ・フォーマット ・アセンブラ構文 VSHFLH. dt VRd,VRa,VRb VSHFLH. dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}。.wと.f
は同一の演算を規定する。
【0561】
【表163】
【0562】・説明 ベクトルレジスタRaの内容をRbとシャフルして図4
に示すようにその結果をベクトルレジスタRdに格納す
る。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0563】VSHFLL 下位シャフル ・フォーマット ・アセンブラ構文 VSHFLL. dt VRd,VRa,VRb VSHFLL. dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}。.wと.f
は同一の演算を規定する。
【0564】
【表164】
【0565】・説明 ベクトルレジスタRaの内容をRbとシャフルして図1
1に示すようにその結果をベクトルレジスタRdに格納
する。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0566】VSHFLH 上位シャフル ・フォーマット ・アセンブラ構文 VSHFLH. dt VRd,VRa,VRb VSHFLH. dt VRd,VRa,SRb
【0567】
【表165】
【0568】・説明 ベクトルレジスタRaの内容をRbとシャフルして下記
のようにその結果の上位をベクトルレジスタRdに格納
する。 ・演算 ・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0569】VST 格納 ・フォーマット ・アセンブラ構文 VST. st Rs,SRb,SRi VST. st Rs,SRb,#IMM VST. st Rs,SRb+,SRi VST. st Rs,SRb+,#IMM ここで、st={b,b9,h,w,4,8,16,3
2,64}、RS={VRs,VRa,SRs}。.b
と.b9tは同一の演算を規定し、.64とVRAsは
共に規定されない。キャッシュオフ格納にはVSTOF
Fを使用する。
【0570】・説明 ベクトルまたはスカラレジスタを格納されたい。 ・演算 EA = SRb +{SRi 00 sex(IMM<7.0>)}; if (A == I) SRb = EA; MEM[EA] = 下記の表を参照する;
【0571】
【表166】
【0572】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0573】VSTCB 円形バッファ格納 ・フォーマット ・アセンブラ構文 VSTCB. st Rs,SRb,SRi VSTCB. st Rs,SRb,#IMM VSTCB. st Rs,SRb+,SRi VSTCB. st Rs,SRb+,#IMM st={b,b9,h,w,4,8,16,32,6
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAdは共に
規定されない。キャッシュオフ格納はVSTCBOFF
を使用する。
【0574】・説明 SRb+1にある開始ポインタとSRb+2にある終了
ポインタに区画された円形バッファでベクトル或いはス
カラレジスタを格納する。格納前に有効アドレスが終了
アドレスより大きければ、アドレス更新演算と同様に調
節されるべきである。しかも、.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] = 下記の表を参照する。
【0575】
【表167】
【0576】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。プログラマ
はこの命令語が期待通りに動作するように下記の条件を
確認しなければならない。 BEGIN < EA < 2*END - BEGIN これはEA - END< END - BIGIN とEA > BEGINを合わせた
ものである。
【0577】VSTD 二重格納 ・フォーマット ・アセンブラ構文 VSTD. st Rs,SRb,SRi VSTD. st Rs,SRb,#IMM VSTD. st Rs,SRb+,SRi VSTD. st Rs,SRb+,#IMM st={b,b9,h,w,4,8,16,32,6
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAsは共に
規定されない。キャッシュオフ格納はVSTDOFFを
使用する。
【0578】・説明 現在バンクまたは交互バンクから2つのベクトルレジス
タ或いは2つのスカラレジスタを格納する。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A == 1)SRb = EA; MEM[EA] = 下記の表を参照する。
【0579】
【表168】
【0580】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0581】VSTQ 二重格納 ・フォーマット ・アセンブラ構文 VSTQ. st Rs,SRb,SRi VSTQ. st Rs,SRb,#IMM VSTQ. st Rs,SRb+,SRi VSTQ. st Rs,SRb+,#IMM st={b,b9t,h,w,4,8,16,32,6
4},Rs={VRs,VRAs,SRs}。.bと.
b9tは同一の演算を規定し、.64とVRAsは共に
規定されなく、キャッシュオフ格納はVSTQOFFを
使用する。
【0582】・説明 現在バンクまたは交互バンクから2つのベクトルレジス
タ或いは2つのスカラレジスタを格納する。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if(A == 1) SRb EA; MEM[EA] = 下記の表を参照する。
【0583】
【表169】
【0584】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0585】VSTR 逆格納 ・フォーマット ・アセンブラ構文 VSTR. st Rs,SRb,SRi VSTR. st Rs,SRb,#IMM VSTR. st Rs,SRb+,SRi VSTR. st Rs,SRb+,#IMM ここで、st={b,b9,h,w,4,8,16,3
2,64}、Rs={VRs,VRAs}。64とVR
Asは共に規定されない。キャッシュオフ格納にはVS
TROFFを使用する。
【0586】・説明 逆要素順によってベクトルレジスタを格納する。この命
令語はスカラデータソースレジスタを支援しない。 ・演算 EA = SRb +{SRi II sex(IMM<7:0>)}; if (A == I)SRb = EA; MEM[EA] = 下記の表を参照する;
【0587】
【表170】
【0588】・例外処理 無効データアドレス、非整列アクセス ・プログラミング時注意 この命令語は要素マスクに影響を受けない。
【0589】VSTWS ストライド格納 ・フォーマット ・アセンブラ構文 VSTWS. st RS,SRb,SRi VSTWS. st Rs,SRb,#IMM VSTWS. st Rs,SRb+,SRi VSTWS. st Rs,SRb+,#IMM st={8,16,32}、Rs={VRs,VRA
s}。.64モードは支援されない。その代わりにVS
Tを使用する。キャッシュオフ格納にVSTWOFFを
使用されたい。
【0590】・説明 有効アドレスから32バイトをベクトルレジスタVRs
でメモリに格納するが、SRb+1 はストライド制御レジ
スタとして用いる。STとはブロックのサイズを指定す
るもので、各ブロックに対して格納される連接したバイ
トの数である。SRb+1はストライドであり、隣接し
たブロックの開始を区別するためのバイトの数である。
ストライドはブロックのサイズが同じか大きくなければ
ならない。EAは整列されたデータサイズである。スト
ライドとブロックのサイズはデータサイズの倍数であ
る。
【0591】 ・例外処理 無効データアドレス、非整列アクセス。
【0592】VSUB 減算 ・フォーマット ・アセンブラ構文 VSUB.st VRd,VRa,VRb VSUB.st VRd,VRa,SRb VSUB.st VRd,VRa,#IMN VSUB.st SRd,SRa,SRb VSUB.st SRd,SRa,#IMN dt={b,b9t,h,w,f}
【0593】
【表171】
【0594】・説明 ベクトル/スカラーレジスタRhの内容をRaから減算
してその結果をベクトルレジスタRdに格納する。 ・例外処理 オーバーフロー、浮動小数点無効オペランド。
【0595】VSUBS 減算及び設定 ・フォーマット ・アセンブラ構文 VSUBS.dt SRd,SRa,SRb VSUBS.dt SRd,SRa,#IMN dt={b,b9,h,w,f}
【0596】
【表172】
【0597】・説明 SRbをSRaから減算してその結果をSRbに格納
し、VCSRのVFLAGビットを設定する。 ・演算 Bop[i] = {SRb II sex(IMM<8:0>)}; SRd[i] = SRa - Bop; VCSR<lt, eq, gt> = status(SRa, Bop); ・例外処理 オーバーフロー、浮動小数点無効オペランド。
【0598】VUNSHFL アンシャフル ・フォーマット ・アセンブラ構文 VUNSHFL.dt VRc,VRd,VRa,VRb VUNSHFL.dt VRc,VRd,VRa,VRb dt={b,b9,h,w,f}。.wと.fは同一の演算を規定する。
【0599】
【表173】
【0600】・説明 ベクトルレジスタVRaの内容を図5のようにRbと共
にベクトルレジスタVRc:VRdにアンシャフルす
る。 ・演算 ・例外処理 なし ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0601】VUNSHFLH 上位アンシャフル ・フォーマット ・アセンブラ構文 VUNSHFLH.dt VRd,VRa,VRb VUNSHFLH.dt VRd,VRa,VRb dt={b,b9,h,w,f}。.wと.fは同一の
演算を規定する。
【0602】
【表174】
【0603】・説明 ベクトルレジスタVRaの内容をRbと共にアンシャフ
ルする。図12のようにその結果の上位はベクトルレジ
スタVRdに回帰する。 ・演算 ・例外処理 無し ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0604】VUNSHFLL 下位アンシャフル ・フォーマット ・アセンブラ構文 VUNSHFL.dt VRd,VRa,VRb VUNSHFL.dt VRd,VRa,VRb dt={b,b9,h,w,f}。.wと.fは同一の
演算を規定する。
【0605】
【表175】
【0606】・説明 ベクトルレジスタVRaの内容をRbと共にアンシャフ
ルする。図13のようにその結果の下位はベクトルレジ
スタVRdに回帰する。 ・演算 ・例外処理 無し ・プログラミング時注意 この命令語は要素マスクを使用しない。
【0607】VWBACK ライトバック ・フォーマット ・アセンブラ構文 VWBACK.ln SRb,Si VWBACK.ln SRb,#IMM VWBACK.ln SRb+,Si VWBACK.ln SRb+,#IMN ln={1,2,4,8} ・説明 ベクトルデータキャッシュでEAによって(タグがEA
と同一のものとは反対に)規定された索引を有するキャ
ッシュラインはもしそれが変更されたデータを含むな
ら、メモリにアップデータされる。一つ以上のキャッシ
ュラインが規定されると、次の順序のキャッシュライン
はもしそれが変更されたデータをもつなら、メモリにア
ップグレードされる。キャッシュラインの数は下記のよ
うに規定される。 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〉は局部メモリのバイトアドレスを指
す。
【0608】VWBACKSP スクラッチパッドからのライトバック ・フォーマット ・アセンブラ構文 VWBACKSP. ln SRp,SRb,SRi VWBACKSP. ln SRp,SRb,#IMM VWBACKSP. ln SRp,SRb+,SRi VWBACKSP. ln SRp,SRb+,#IMM In={1,2,4,8}。VWBACKとVWBACKSPは同一の演算コ ードを使用する。
【0609】・説明多数の64- バイトブロックをスク
ラッチパッドからメモリへ移動する。有効アドレスはメ
モリの開始アドレスを提供し、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- バイト境界
に配列されるようにする。
【0610】 ・例外処理 無効データアドレス。
【0611】VXNOR 排他的否定論理和 ・フォーマット ・アセンブラ構文 VXNOR. dt VRd,VRa,VRb VXNOR. dt VRd,VRa,VRb VXNOR. dt VRd,VRa,#IMM VXNOR. dt SRd,SRa,SRb VXNOR. dt SRd,SRa,#IMM dt={b,b9,h,w}。
【0612】
【表176】
【0613】・説明ベクトル/スカラレジスタRaの内
容をベクトル/スカラレジスタ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; ・例外処理 なし。
【0614】VXOR 排他的論理和 ・フォーマット ・アセンブラ構文 VXOR. dt VRd,VRa,VRb VXOR. dt VRd,VRa,VRb VXOR. dt VRd,VRa,#IMM VXOR. dt SRd,SRa,SRb VXOR. dt SRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0615】
【表177】
【0616】・説明 ベクトル/スカラレジスタRaの内容をベクトル/スカ
ラレジスタ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; ・例外処理 なし。
【0617】VXORALL 全体要素排他的論理和 ・フォーマット ・アセンブラ構文 VXORALL. dt SRd,VRb ここでdt={b,b9,h,w}。.bと.b9は同
一の演算を示す。
【0618】
【表178】
【0619】・説明 VRbの各要素の最下位ビットは共に排他的論理和さ
れ、1ビット結果はSRbの最下位ビットに回帰する。
この命令語は要素マスクに影響を受けない。 ・演算 ・例外処理 なし。
【図面の簡単な説明】
【図1】本発明による2つのプログラム間の相互作用を
説明するためのブロック図。
【図2】本発明によって高級プログラミング言語で作成
されたプログラムから実行可能なプログラムを発生する
過程を示す流れ図。
【図3】本発明による二重スレッド適用例に適した二重
プロセッサのブロック図。
【図4】本発明によるシャフル(shuffle) 動作を説明す
るためのブロック図。
【図5】本発明によるアンシャフル(unshuffle) 動作を
説明するためのブロック図。
【図6】本発明による水平加算(add horizontal)動作を
説明するためのブロック図。
【図7】本発明による水平平均(average horizontal)動
作を説明するためのブロック図。
【図8】本発明の一部実施例に用いられるベクトルプロ
セッサの演算を説明するためのブロック図。
【図9】本発明の一部実施例に用いられるベクトルプロ
セッサの演算を説明するためのブロック図。
【図10】本発明の一部実施例に用いられるベクトルプ
ロセッサの演算を説明するためのブロック図。
【図11】本発明の一部実施例に用いられるベクトルプ
ロセッサの演算を説明するためのブロック図。
【図12】本発明の一部実施例に用いられるベクトルプ
ロセッサの演算を説明するためのブロック図。
【図13】本発明の一部実施例に用いられるベクトルプ
ロセッサの演算を説明するためのブロック図。
【図14】本発明の一部実施例に用いられるベクトルプ
ロセッサの演算を説明するためのブロック図。
【符号の説明】 300 マルチメディア信号プロセッサ 310 主プロセッサ 320 ベクトルプロセッサ 330 キャッシュメモリ

Claims (14)

    【特許請求の範囲】
  1. 【請求項1】 ベクトルプロセッサで実行するコンピュ
    ータ判読可能媒体にコンピュータプログラムを生成する
    コンピュータプログラム生成方法において、 ベクトルプロセッサで処理されるどの種類の演算をも指
    定しない高級言語で記述されたコンピュータプログラム
    を読み取るコンピュータシステムであって、前記プログ
    ラムはベクトル型の値を含み、このプログラムはオペラ
    ンドとして前記ベクトル型値を含む第1演算を備え、こ
    の第1演算はベクトルオペランドを持つことが可能なベ
    クトルプロセッサ命令VPI1に対応し、 前記コンピュータシステムは前記第1演算で処理される
    1以上のベクトルプロセッサ命令を生成し、前記1以上
    の命令は1以上のVPI1命令を含むことを特徴とする
    コンピュータプログラム生成方法。
  2. 【請求項2】 前記高級言語はそれぞれの値に対してそ
    の値がベクトルプロセッサのレジスタに格納されるかそ
    れとも前記ベクトルプロセッサの外部のメモリに格納さ
    れるかを規定しないことを特徴とする請求項1記載のコ
    ンピュータプログラム生成方法。
  3. 【請求項3】 前記プログラムは前記ベクトル型値の格
    納方式を規定しないことを特徴とする請求項1記載のコ
    ンピュータプログラム生成方法。
  4. 【請求項4】 ベクトル演算は選択マスク(selection m
    ask)に従属し、ベクトルオペランドのどの要素が演算さ
    れるかを決定することを特徴とする請求項1記載のコン
    ピュータプログラム生成方法。
  5. 【請求項5】 前記第1演算は一つ以上の算術演算を備
    えることを特徴とする請求項1記載のコンピュータプロ
    グラム生成方法。
  6. 【請求項6】 第1演算の対象は複数のオペランドであ
    ることを特徴とする請求項1記載のコンピュータプログ
    ラム生成方法。
  7. 【請求項7】 前記第1演算は第1,2ベクトルオペラ
    ンドの要素をシャフルして第3,4ベクトルを発生する
    過程を備えることを特徴とする請求項1記載のコンピュ
    ータプログラム生成方法。
  8. 【請求項8】 前記第1演算は一つ以上のマトリックス
    オペランドを備えることを特徴とする請求項1記載のコ
    ンピュータプログラム生成方法。
  9. 【請求項9】 前記第1演算は一つ以上の9ビットオペ
    ランドを備えることを特徴とする請求項1記載のコンピ
    ュータプログラム生成方法。
  10. 【請求項10】 前記高級プログラム言語はC言語の拡
    張であることを特徴とする請求項1記載のコンピュータ
    プログラム生成方法。
  11. 【請求項11】 前記高級プログラム言語はC++言語
    の拡張であることを特徴とする請求項1記載のコンピュ
    ータプログラム生成方法。
  12. 【請求項12】 前記コンピュータシステムは制御プロ
    セッサ、ベクトルプロセッサ、及び前記制御プロセッサ
    を前記ベクトルプロセッサに結合するキャッシュメモリ
    を備えることを特徴とする請求項1記載のコンピュータ
    プログラム生成方法。
  13. 【請求項13】 前記制御プロセッサは前記ベクトルプ
    ロセッサが実行を始めるように信号で通信するが、前記
    ベクトルプロセッサは前記制御プロセッサが実行を始め
    るようにすることができないことを特徴とする請求項1
    2記載のコンピュータプログラム生成方法。
  14. 【請求項14】 ベクトルプロセッサとRISCプロセ
    ッサを含む二重プロセッサによる実行のためにコンピュ
    ータ判読可能媒体に並列コンピュータプログラムを生成
    する方法において、 各演算において演算を行う前記ベクトルプロセッサまた
    はRISCプロセッサでその演算が具現される方式を規
    定しない高級言語で作成され、前記RISCプロセッサ
    が前記ベクトルプロセッサを起動するようにする命令で
    ある第1演算を有するコンピュータプログラムを読み出
    し、前記命令を具現するRISCプロセッサ命令を生成
    するコンピュータシステムを備えることを特徴とするコ
    ンピュータプログラム生成方法。
JP9285854A 1996-10-18 1997-10-17 ベクトルプロセッサプログラミング、及びベクトルプロセッサとriscプロセッサを備える非対称二重プロセッサの並列プログラミングにおけるコンピュータプログラム生成方法 Pending JPH10207870A (ja)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014513340A (ja) * 2011-04-01 2014-05-29 インテル・コーポレーション データ要素のストライドパターンギャザーおよびデータ要素のストライドパターンスキャッタのためのシステム、装置、および方法

Families Citing this family (63)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Cited By (2)

* Cited by examiner, † Cited by third party
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