JP3983857B2 - ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 - Google Patents
ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 Download PDFInfo
- Publication number
- JP3983857B2 JP3983857B2 JP23766597A JP23766597A JP3983857B2 JP 3983857 B2 JP3983857 B2 JP 3983857B2 JP 23766597 A JP23766597 A JP 23766597A JP 23766597 A JP23766597 A JP 23766597A JP 3983857 B2 JP3983857 B2 JP 3983857B2
- Authority
- JP
- Japan
- Prior art keywords
- register
- vector
- instruction
- data
- bank
- 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.)
- Expired - Fee Related
Links
- 239000013598 vector Substances 0.000 title claims description 455
- 238000012545 processing Methods 0.000 title description 13
- 238000000034 method Methods 0.000 claims description 13
- 238000004364 calculation method Methods 0.000 description 110
- 239000000872 buffer Substances 0.000 description 48
- 238000010586 diagram Methods 0.000 description 16
- 230000000295 complement effect Effects 0.000 description 15
- 238000006243 chemical reaction Methods 0.000 description 12
- 235000019800 disodium phosphate Nutrition 0.000 description 12
- 238000009825 accumulation Methods 0.000 description 9
- 230000003111 delayed effect Effects 0.000 description 9
- 230000006870 function Effects 0.000 description 9
- 239000008186 active pharmaceutical agent Substances 0.000 description 7
- 230000001343 mnemonic effect Effects 0.000 description 7
- 101000641224 Homo sapiens Vimentin-type intermediate filament-associated coiled-coil protein Proteins 0.000 description 6
- 102100034331 Vimentin-type intermediate filament-associated coiled-coil protein Human genes 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 6
- 230000008859 change Effects 0.000 description 6
- 230000008569 process Effects 0.000 description 6
- 238000013507 mapping Methods 0.000 description 4
- 230000002441 reversible effect Effects 0.000 description 4
- 238000012546 transfer Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000009467 reduction Effects 0.000 description 3
- 238000012360 testing method Methods 0.000 description 3
- 101100011399 Danio rerio eif3ea gene Proteins 0.000 description 2
- 102000008016 Eukaryotic Initiation Factor-3 Human genes 0.000 description 2
- 101150008815 INT6 gene Proteins 0.000 description 2
- 240000001987 Pyrus communis Species 0.000 description 2
- 230000002950 deficient Effects 0.000 description 2
- 238000000605 extraction Methods 0.000 description 2
- UOTMYNBWXDUBNX-UHFFFAOYSA-N 1-[(3,4-dimethoxyphenyl)methyl]-6,7-dimethoxyisoquinolin-2-ium;chloride Chemical compound Cl.C1=C(OC)C(OC)=CC=C1CC1=NC=CC2=CC(OC)=C(OC)C=C12 UOTMYNBWXDUBNX-UHFFFAOYSA-N 0.000 description 1
- OVSKIKFHRZPJSS-UHFFFAOYSA-N 2,4-D Chemical compound OC(=O)COC1=CC=C(Cl)C=C1Cl OVSKIKFHRZPJSS-UHFFFAOYSA-N 0.000 description 1
- 101710147597 Homer protein homolog 1 Proteins 0.000 description 1
- 102100030148 Integrator complex subunit 8 Human genes 0.000 description 1
- 101710092891 Integrator complex subunit 8 Proteins 0.000 description 1
- 101100178280 Rattus norvegicus Homer1 gene Proteins 0.000 description 1
- 230000004888 barrier function Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 238000002405 diagnostic procedure Methods 0.000 description 1
- 230000009365 direct transmission Effects 0.000 description 1
- 230000009977 dual effect Effects 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000013508 migration Methods 0.000 description 1
- 230000005012 migration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- NRBNGHCYDWUVLC-UHFFFAOYSA-N mtep Chemical compound S1C(C)=NC(C#CC=2C=NC=CC=2)=C1 NRBNGHCYDWUVLC-UHFFFAOYSA-N 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30025—Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8053—Vector processors
- G06F15/8076—Details on data register access
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/3012—Organisation of register space, e.g. banked or distributed register file
- G06F9/3013—Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
- G06F9/30167—Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
Description
【発明の属する技術分野】
本発明はディジタル信号プロセッサに係り、特にビデオ及びオーディオの符号化及び復号化のようなマルチメディア機能のために命令ごとに複数のデータエレメントを並列処理するプロセッサに関する。
【0002】
【従来の技術】
実時間ビデオ符号化及び復号化のようなマルチメディアアプリケーションのためのプログラマブルディジタル信号プロセッサDSPは、制限された時間内に処理されるべき多量のデータのために相当な処理力を必要とする。ディジタル信号プロセッサのための幾つかのアーキテクチャが知られている。大部分のマイクロプロセッサに用いられるように汎用アーキテクチャは典型的に実時間符号化または復号化するのに充分な演算力を有するDSPを提供するために高周波数を必要とする。これはDSPのコストを高くする。
【0003】
超長命令ワードVLIWプロセッサは比較的簡単な作業のように相違して行う多くの機能ユニットを有するDSPである。VLIW DSPのための単一命令は128バイトあるいはより長い長さを持つことができ、個別的な機能ユニットが並列に実行する個別的な部品を有する。VLIW DSPは多くの機能ユニットが並列に行うことができるので高い演算力を有する。尚、VLIW DSPはそれぞれの機能ユニットが比較的小さくて簡単なので、比較的低コストである。
【0004】
【発明が解決しようとする課題】
VLIW DSPの問題点は入力/出力制御の処理における非効率性、ホストコンピュータとの通信、及びVLIW DSPの機能ユニット上における並列実行に適しない他の機能である。しかも、VLIWソフトウェアは従来のソフトウェアとは異なり、プログラムツールとVLIWソフトウェアアーキテクチャに慣れているプログラマが足りないために開発し難い。
適正な価格、高い演算力、及び馴染みのプログラミング環境を提供するDSPがマルチメディアアプリケーションに要求される。
【0005】
【課題が解決するための手段】
本発明の特徴によれば、マルチメディアディジタル信号プロセッサDSPは、高い処理力を提供するためにベクトルデータ(即ち、オペランドごとに複数のデータエレメント)を操作するベクトルプロセッサを備える。前記プロセッサはRISC型命令語セットを有する単一命令複数データアーキテクチャを用いる。大多数のプログラマは馴染みの汎用プロセッサのプログラミング環境に慣れているために、ベクトルプロセッサのプログラミング環境に容易く適応することができる。
【0006】
DSPは汎用ベクトルレジスタセットを備える。各ベクトルレジスタは固定のサイズを有するが、使用者選択可能なサイズの個別的なデータエレメントに分割(partition)されている。従って、ベクトルレジスタに貯蔵されたデータエレメントの数はエレメントに対して選択されたサイズによる。例えば、32バイトレジスタは32個の8ビットデータエレメント、16個の16ビットデータエレメント、或いは8個の32ビットデータエレメントに分けられる。データサイズ及び類型の選択はベクトルレジスタと連関性のあるデータを処理する命令によってなされ、命令のための実行データ経路は命令によって指示されたデータサイズによる多数の並列演算を行う。
【0007】
ベクトルレジスタのための命令はオペランドとしてベクトルレジスタ或いはスカラレジスタを持つことができ、高い演算力のために並列のベクトルレジスタの複数データエレメントを操作する。本発明によるベクトルプロセッサのための例示的な命令は:コプロセッサインタフェース演算;流れ制御演算;ロード/貯蔵演算;及び論理/算術演算を含む。前記論理/算術演算は結果として現れるデータベクトルのデータエレメントを生成するために一つのベクトルレジスタからのデータエレメントを一つ以上の他のベクトルレジスタからの対応するデータエレメントと結合する演算を含む。他の論理/算術演算は一つ以上のベクトルレジスタからのいろんなデータエレメントを合成するか、或いはベクトルレジスタからのデータエレメントとスカラ量を合成する。
【0008】
ベクトルプロセッサアーキテクチャの拡張はそれぞれスカラデータエレメントを含むスカラレジスタを加える。スカラ及びベクトルレジスタの組合せはベクトルの各データエレメントをスカラ値と並列に結合する演算を含むように設定されたベクトルプロセッサの命令の拡張を容易にする。例えば、一つの命令はベクトルのデータエレメントにスカラ値を乗ずる。尚、スカラレジスタはベクトルレジスタから抽出されるか、或いはそれに貯蔵される単一データエレメントを貯蔵するための場所を提供する。また、前記スカラレジスタはベクトルプロセッサとスカラレジスタのみを提供するアーキテクチャを有するコプロセッサ間の情報の伝達、及びロード/貯蔵演算のための効率的なアドレスの計算が容易である。
【0009】
本発明の他の特徴によれば、ベクトルプロセッサのベクトルレジスタはバンクから構成されている。各バンクは“現在の(current)”バンクとして選択される一方、他のバンクは“代替(alternative)”バンクである。ベクトルプロセッサの制御レジスタにある“現在のバンク”ビットは現在のバンクを指す。ベクトルレジスタの識別に必要なビット数を減らすために、一部の命令はレジスタ番号のみを提供して現在のバンクからベクトルレジスタを識別する。ロード/貯蔵命令はある一つのバンクからベクトルレジスタを識別するための付随的なビットを有する。従って、ロード/貯蔵演算は現在のバンクにあるデータの操作の間代替バンクにデータをフェッチすることができる。これは画像処理及びグラフィックプロシージャのためのソフトウェアパイプラインを容易にし、論理/算術演算が代替レジスタバンクをアクセスするロード/貯蔵演算とは異なる順序で行われることができるため、データのフェッチ時にプロセッサ遅延を減少させる。他の命令において、代替バンクは現在のバンクからのベクトルレジスタと代替バンクからの対応するベクトルレジスタを含む二重サイズ(double-size)ベクトルレジスタの使用を可能にする。このような二重サイズレジスタは命令構文から識別されることができる。ベクトルプロセッサにある制御ビットはデフォルトベクトルサイズが一つ或いは2つのベクトルレジスタのうちいずれか一つに設定されることができる。また、代替バンクはシャフル(shuffle)、アンシャフル(unshuffle)、飽和(saturate)、2つの根元地と2つの目的地レジスタを有する条件付き移動(conditional moves)のような複雑な命令の構文において少数の明示的識別オペランドの使用を可能にする。
【0010】
また、ベクトルプロセッサはカッド(quad)、シャフル、アンシャフル、対方式最大及び交換(pair-wise maximum and exchange)、及び飽和のような新規命令を具現する。これら命令はビデオ符号化及び復号化のようなマルチメディア機能を共通とする演算を行い、他の命令語セットは同一機能の遂行時に必要とする2つ以上の命令に代える。従って、ベクトルプロセッサ命令語セットはマルチメディアアプリケーションでプログラムの効率性及び速度を向上させる。
【0011】
【発明の実施の形態】
以下、添付した図面に基づき本発明の望ましい実施形態をさらに詳しく説明する。
図1は本発明の実施形態によるマルチメディア信号プロセッサ(MSP)100のブロック図を示す。マルチメディアプロセッサ100は汎用プロセッサ110とベクトルプロセッサ120を含むプロセッシングコア105を備える。プロセッシングコア105はSRAM160,190、ROM170、及びキャッシュ制御部180を含むキャッシュサブシステム130を通してマルチメディアプロセッサ100の残り部分に接続される。キャッシュ制御部180は汎用プロセッサ110のために命令語キャッシュ162とデータキャッシュ164からSRAM160を構成することができ、ベクトルプロセッサ120のために命令語キャッシュ192とデータキャッシュ194からSRAM190を構成することができる。
【0012】
オンチップROM170はプロセッサ110のためにデータと命令語を含み、キャッシュから構成されることができる。例示的な実施形態において、ROM170は:リセット及び初期化プロシージャ;自己試験診断プロシージャ;インタラプト及び例外ハンドラ;サウンドブラストエミュレーションのためのサブルーチン;V.34モデム信号処理のためのサブルーチン;一般的な電話方式機能;1−D及び3−Dグラフィックスサブルーチンライブラリ;及びMPEG-1,MPEG-2,H.261,H.263,G.728及びG.723のようなオーディオ及びビデオ標準のためのサブルーチンライブラリを含む。
【0013】
キャッシュサブシステム130はプロセッサ110,120に接続されて2つのシステムバス140,150に立ち向かい、プロセッサ110,120のためのキャッシュ及びスイッチングステーション両方として動作し、デバイスバス140,150に結合している。システムバス150は高いクロック周波数で動作し、外部局部メモリのためのインタフェース、ホストコンピュータの局部バス、直接メモリアクセス、及び多様なアナログ/ディジタル及びディジタル/アナログ変換器をそれぞれ提供するメモリコントローラ158、局部バスインタフェース156、DMAコントローラ154、及びデバイスインタフェース152に接続される。バス140に接続されているものはシステムタイマ142、UART(ユニバーサル非同期受信器トランシーバ)144、ビットストリームプロセッサ146、及びインタラプトコントローラ148である。“マルチメディア信号プロセッサにおけるマルチプロセッサ演算”及び“ビデオデータを処理するための方法及び装置”という発明の名称を有する本発明に参照として一体化された特許出願は、プロセッサ110,120がキャッシュサブシステム130及びバス140,150をアクセスする例示的なデバイス及びキャッシュサブシステム130の動作をより詳しく説明する。
【0014】
プロセッサ110,120は個別的なプログラムスレッドを実行し、それらに割り当てられた特定作業のより効率的な実行のために構造的に異なる。プロセッサ110は主に実時間演算システムの実行のような制御機能及び多くのそれぞれの演算を必要としない類似機能のためのものである。従って、プロセッサ110は高度の演算力を必要とせず、従来の汎用プロセッサアーキテクチャを用いて具現されることができる。ベクトルプロセッサ120は大部分のマルチメディア処理において共通であるデータブロックに対する反復的な演算を含む数字クラッシング(number crushing)を行う。高度の演算力と比較的簡単なプログラミングのために、ベクトルプロセッサ120はSIMD(Single Instruction Multimedia Data)アーキテクチャを有し、例示的な実施形態において、ベクトルプロセッサ120の大部分の経路はベクトルデータ操作を支援するために288または576ビット幅をもつ。付随的に、ベクトルプロセッサ120のための命令語セットは特にマルチメディアの問題に適した命令語を含む。
【0015】
例示的な実施形態において、プロセッサ110は40MHzで動作する32ビットRISCプロセッサであり、ARM7標準によって定義されたように、レジスタセットを含むARM7プロセッサのアーキテクチャに合う。ARM7 RISCプロセッサのために設定されたアーキテクチャ及び命令語は“ARM7 DMデータシート”、文書番号:Advance RISC Machines Ltd.から入手できるARM DDI 0010Gに説明されている。前記ARM7 DMデータシートは以下その全文が本発明の参照として一体化されている。後述する第一実施例は例示的な実施例でARM7命令語の拡張を説明する。
【0016】
ベクトルプロセッサ120はベクトル及びスカラ量を両方とも操作する。例示的な実施形態において、ベクトルデータプロセッサ120は80MHzで動作するパイプラインされたRISCエンジンから構成される。ベクトルプロセッサ120のレジスタは32ビットスカラレジスタ、32ビット特殊目的レジスタ、288ビットベクトルレジスタの2つのバンク、及び二重サイズ(即ち、576ビット)の2つのベクトル累算レジスタを備える。後述する第三実施例はベクトルプロセッサ120の例示的な実施例のためのレジスタセットを説明する。例示的な実施例において、プロセッサ120は0から31までの範囲に至る5ビットレジスタ番号によって命令語から識別される。また、32ベクトルレジスタの2つのバンクからなる64個の288ビットベクトルレジスタが存在する。それぞれのベクトルレジスタは1ビットバンク番号(0または1)及び0から31までの範囲に至る5ビットベクトルレジスタ番号で識別されることができる。大部分の命令語はベクトルプロセッサ120の制御レジスタVCSRに貯蔵されたデフォルトバンクビットCBANKで指された現在のバンクにあるベクトルレジスタをアクセスする。2番目の制御ビットVEC4はデフォルトとしてレジスタ番号が各バンクからのレジスタを含む二重サイズベクトルレジスタを識別するかを指す。命令語の構文はスカラレジスタを識別するレジスタ番号からベクトルレジスタを識別するレジスタ番号を区別する。
【0017】
それぞれのベクトルレジスタはプログラム可能なサイズのデータエレメントに分割されることができる。表1は288ビットベクトルレジスタ内のデータエレメントを支援するデータ類型を示す。
【0018】
【表1】
【0019】
後述する第四実施例は本発明の例示的な実施例で支援されるデータサイズと類型の詳細な説明を提供する。
【0020】
int9データ型の場合、9ビットバイトが288ビットベクトルレジスタに順次パック(pack)されるが、他のデータ型の場合には288ビットベクトルレジスタの毎9番目のビットが用いられない。288ビットベクトルレジスタは328ビット或いは9ビット整数データエレメント、16個の16ビット整数データエレメント、或いは8個の32ビット整数または浮動小数点エレメントを保有することができる。付随的に、2つのベクトルレジスタが二重サイズベクトルのデータエレメントに組み合わせられることができる。本発明の例示的な実施形態において、制御ビットVEC64を制御及び状態レジスタVCSRにセットすることにより二重サイズ(576ビット)がベクトルレジスタのデフォルトサイズであるモードVEC64に位置させる。
【0021】
また、マルチメディアプロセッサ100は両方のプロセッサ110,120にアクセスし得る32ビット拡張レジスタ115のセットを収容する。後述する第二実施例は本発明の例示的な実施例で拡張レジスタセット及びその機能を説明する。ベクトルプロセッサ120の拡張レジスタ及びスカラ及び特殊目的レジスタは幾つかの環境でプロセッサ110にアクセスことができる。2つの特殊“使用者”拡張レジスタは2つの読取ポートを有することにより、プロセッサ110,120がレジスタを同時に判読することができる。他の拡張レジスタは同時にアクセスされ得ない。
【0022】
ベクトルプロセッサ120はベクトルレジスタ120が実行中か或いはアイドルであるかを示す2つの選択的な状態VP_RUN及びVP_IDLEを有する。プロセッサ110は、ベクトルプロセッサ120が状態VP_IDLEにある時、ベクトルプロセッサ120のスカラ或いは特殊目的レジスタを読取或いは記録することができる。しかし、ベクトルプロセッサ120が状態VP_RUNにある間、ベクトルプロセッサ120のレジスタを読取或いは記録するプロセッサ110の結果は定義されていない。
【0023】
プロセッサ110のためのARM7命令語セットの拡張はベクトルプロセッサ120の拡張レジスタ及びスカラまたは特殊目的レジスタをアクセスする命令語を含む。命令語MFER及びMFEPは拡張レジスタ及びベクトルプロセッサ120のスカラ或いは特殊目的レジスタからプロセッサの汎用レジスタにそれぞれデータを移動させる。命令語MTER及びMTEPはそれぞれプロセッサ110の汎用レジスタから拡張レジスタ及びベクトルプロセッサ120のスカラまたは特殊目的レジスタへデータを移動させる。TESTSET命令語は拡張レジスタを判読し、全ての拡張レジスタのビット30を1にセットさせる。命令語TESTSETはプロセッサ100から出力された結果を判読(或いは使用)したプロセッサ120にシグナルするためにビット30をセットさせることにより、使用者/生産者同期化を容易にする。STARTVPとINTVPのための他の命令語はベクトルプロセッサ120の動作状態を制御する。
【0024】
プロセッサ110はベクトルプロセッサ120の動作を制御するためにマスタプロセッサとして動作する。プロセッサ110,120間の制御の非同期分割を使用することにより、プロセッサ110,120の同期化問題を簡単にする。プロセッサ110は、ベクトルプロセッサ120が状態VP_IDLEにある時にベクトルプロセッサ120のためのプログラムカウンタに命令語アドレスを記録することにより、ベクトルプロセッサ120を初期化する。次に、プロセッサ110はベクトルプロセッサ120を状態VP_RUNに変えるSTARTVP命令語を実行する。状態VP_RUNにおいて、ベクトルプロセッサ120はキャッシュサブシステム130を通して命令語をフェッチし、自分のプログラムの実行を続けながらプロセッサ110と並列にそのような命令語を実行する。開始すると、ベクトルプロセッサ120は例外に出会う時まで実行を続け、適当な条件が充足されると、VCJOIN或いはVCINT命令語を実行するか或いはプロセッサ120によってインタラプトされる。ベクトルプロセッサ120はベクトルプロセッサ120が状態VP_IDLEに再進入する時にその結果を拡張レジスタに記録し、その結果をプロセッサ110,120の共有アドレス空間に記録するか、或いはその結果をプロセッサ110のアクセスするスカラ或いは特殊目的レジスタに位置させることにより、プログラム実行の結果をプロセッサ120に渡す。
【0025】
ベクトルプロセッサ120は自分の例外を処理しない。例外を誘発する命令語を実行すると、ベクトルプロセッサ120は状態VP_IDLEに進入し、直接ラインを通してインタラプト要求をプロセッサ110にシグナルする。ベクトルプロセッサ120はプロセッサ110が別のSTARTVP命令語を実行する時まで状態VP_IDLEに残る。プロセッサ110は例外の性質を判断するためにベクトルプロセッサ120のレジスタVISRCを判読し、ベクトルプロセッサ120を再び初期化させることによりできる限り例外を処理した後、必要なら例外を再び開始するためにベクトルプロセッサ120をダイレクトする責任がある。
【0026】
プロセッサ110によって実行されたINTVP命令語はベクトルプロセッサ120をアイドル状態VP_IDLEに進入させる。例えば、命令語INTVPはビデオ復号化のような一つの作業からサウンドカードエミュレーションのような他の作業へベクトルプロセッサを転換させるマルチタスクシステムに用いられることができる。
【0027】
ベクトルプロセッサ命令語VCINT及びVCJOINは、命令語によって指された条件が充足されると、ベクトルプロセッサ120による実行を中止し、ベクトルプロセッサ120を状態VP_IDLEにし、このような要求がマスクされる時までインタラプト要求をプロセッサ110に発行する流れ制御命令語である。ベクトルプロセッサ120のプログラムカウンタ(特殊目的レジスタ)はVCINTまたはVCJOIN命令語以後の命令語アドレスを指す。プロセッサ110はベクトルプロセッサ120のインタラプトソースレジスタVISRCを点検してVCINT或いはVCJOIN命令語がインタラプト要求を誘発したかを決定する。ベクトルプロセッサ120がより大きいデータバスを有し、そのレジスタを貯蔵及び復旧するのにより効率的なので、ベクトルプロセッサ120によって実行されたソフトウェアは構文転換中にレジスタを貯蔵及び復旧しなければならない。前記一体になった“マイクロプロセッサにおける効率的な構文貯蔵及び復旧”という発明の名称を有する特許出願は構文転換のための例示的なシステムを説明する。
【0028】
図2は図1のベクトルプロセッサ120の例示的な実施形態の主要機能ブロック図である。ベクトルプロセッサ120は命令語フェッチ部(IFU)210、デコーダ220、スケジューラ230、実行データ経路240、及びロード/貯蔵部(LSU)250を備える。IFU210は命令語をフェッチし、分岐のような流れ制御命令語を処理する。命令語デコーダ220はIFU210から到達順序によってサイクルごとに一つの命令語を復号化し、命令語から復号化されたフィールド値をスケジューラ230のFIFOに記録する。スケジューラ230は演算の実行ステージに必要であれば、実行制御レジスタに発行されたフィールド値を選択する。発行選択は実行データ経路240またはロード/貯蔵部250のようなプロセッシング資源の依存性と利用可能性による。実行データ経路240はベクトルまたはスカラデータを操作する論理/算術命令語を実行する。ロード/貯蔵部250はベクトルプロセッサ120のアドレス空間をアクセスするロード/貯蔵命令語を実行する。
【0029】
図3は主命令語バッファ310と補助命令語バッファ312に分けられる命令語バッファを含むIFU210の実施形態に対するブロック図を示す。主バッファ310は現在のプログラムカウントに対応する命令語を含む8つの連続する命令語を収容する。補助命令語バッファ312はバッファ310の命令語に相次ぐ8つの命令語を収容する。また、IFU210はバッファ310,312の他の流れ制御命令語の目標を含む8つの連続する命令語を収容する分岐目標バッファ314を含む。例示的な実施形態において、ベクトルプロセッサ120は各命令語が32ビット長さのRISC型命令語セットを使用し、バッファ310,312,及び314は8×32ビットバッファであって、256ビット命令語バスを通じてキャッシュサブシステム130に接続される。IFU210はキャッシュサブシステム130から任意のバッファ310,312,または314へ単一クロックサイクルで8つの命令語をロードすることができる。レジスタ340,342,及び344はそれぞれバッファ310,312,及び314にロードされた命令語に対するベースアドレスを指す。
【0030】
マルチプレクサ332は主命令語バッファ310から現在の命令語を選択する。もし現在の命令語が流れ制御命令語でなく、命令語レジスタ330に貯蔵された命令語が実行のデコードステージに進行すると、現在の命令語は命令語レジスタ330に貯蔵され、プログラムカウントは増加する。プログラムカウントを増加させてバッファ310の最終命令語を選択した後、次のセットの8命令語がバッファ310にロードされる。もしバッファ312が所定の8命令語を含むと、バッファ312及びレジスタ342の内容は直ちにバッファ310及びレジスタ340に移動され、8つ以上の命令語がキャッシュシステム130から補助命令語バッファ312にプリフェッチされる。加算器350はレジスタ342にあるベースアドレスから次の命令語セットのアドレスとマルチプレクサ352によって選択されたオフセットを決定する。加算器350から結果として現れるアドレスはレジスタ342からレジスタ340に移動するか或いは移動した後レジスタ342に貯蔵される。また、算出されたアドレスは8つの命令語のための要求でキャッシュシステム130に伝達される。もしキャッシュ制御システム130に対する以前の呼出がバッファ310が要求したバッファ312へ次の8命令語を提供しなかったら、以前に要求された命令語はキャッシュサブシステム130から受信される時にバッファ310に直ちに貯蔵される。
【0031】
もし現在の命令語が流れ制御命令語であれば、IFU210は流れ制御命令語に対する条件を評価し、流れ制御命令語の後続のプログラムカウントを更新することにより命令語を処理する。条件を変えることのできる以前命令語が完了していないために、もし条件が決定されなければ、IFU210は保留される。もし分岐が取られなければ、プログラムカウンタは増加し、次の命令語が上述したように選択される。もし分岐が取られ且つ分岐目標バッファ314が分岐の目標を含んでいれば、バッファ314及びレジスタ344の内容がバッファ310及びレジスタ340に移動され、IFU210はキャッシュサブシステム130から命令語を待機せず、命令語をデコーダ220に引き続き提供することができる。
【0032】
分岐目標バッファ314に対する命令語をプリフェッチするために、スキャナ320はバッファ310及び312を走査して現在のプログラムカウントの後にくる次の流れ制御命令語を探す。もし流れ制御命令語がバッファ310または312から発見されると、スキャナ320は命令語を収容しているバッファ310または312のベースアドレスから流れ制御命令語の目標アドレスを含む8つの命令語の整列されたセットでオフセットを決定する。マルチプレクサ352及び354は流れ制御命令語からのオフセットとレジスタ340または342からのベースアドレスをバッファ314に対して新しいベースアドレスを生成する加算器350へ供給する。新しいベースアドレスは次に分岐目標バッファ314に対して8つの命令語を供給するキャッシュサブシステム130へ伝達される。
【0033】
“減少及び条件分岐”命令語VD1CBR,VD2CBR,VD3CBR及び“変更制御レジスタ”命令語VCHGCRのような流れ制御命令語を取り扱うにおいて、IFU210はプログラムカウンタの以外にレジスタ値を変えることができる。IFU210が流れ制御命令語でない命令語を発見すると、該当命令語は命令語レジスタ330からデコーダ220へ伝達する。
【0034】
デコーダ220は図4に示すようにスケジューラ230のFIFOバッファ410がフィールドに制御値を記録することにより命令語を復号化する。FIFOバッファ410は4行のフリップフロップを収容することができるが、これらそれぞれは一つの命令語の実行を制御するための5フィールドの情報を収容することができる。行0乃至3は一番古いものから一番最近の命令語に対する情報をそれぞれ保有し、FIFOバッファ410の情報は命令語が完了されるにつれて古い情報が除去される時により低い行にシフトダウンする。スケジューラ230は実行レジスタ421乃至427を収容している制御パイプ420にロードされる命令語の必要なフィールドを選択することにより、実行ステージに命令語を発行する。大部分の命令語は順序からずれた発行及び実行でスケジュールされることができる。特に、ロード/貯蔵演算と論理/算術演算の順序はロード/貯蔵演算及び論理/算術演算間にオペランド従属性が存在しない限り任意的である。FIFOバッファ410のフィールド値の比較は任意のオペランド従属性が存在するかを示す。
【0035】
図5(a)はベクトルプロセッサ120のアドレス空間をアクセスせずにレジスタ対レジスタ演算を行う命令語に対する6つのステージ実行パイプラインを示す。命令語フェッチステージ511において、IFU210は上述したように命令語をフェッチする。フェッチステージはIFU210がパイプライン遅延、未解決分岐条件、或いはプリフェッチされた命令語を提供するキャッシュサブシステム130における遅延によって保留されない限り、一つのクロックサイクルを必要とする。デコードステージ512において、デコーダ220はIFU210から命令語を復号化し、スケジューラ230に命令語に対する情報を記録する。また、デコードステージ512はFIFO410のいずれの行も新しい演算に使用し得ない限り、一つのクロックサイクルを必要とする。演算はFIFO410から一番目のサイクルの間制御パイプ420へ発生されることができるが、より古い演算の発行によって遅延することができる。
【0036】
実行データ経路240はレジスタ対レジスタ演算を行い、ロード/貯蔵演算のためにデータ及びアドレスを供給する。図6は実行データ経路240の実施形態のブロック図を示し、実行ステージ514,515及び516と結合して叙述される。実行レジスタ421は読取ステージ514の間クロックサイクルで読み取られたレジスタファイル610に2つのレジスタを識別する信号を提供する。図7はレジスタファイル610のブロック図を示す。レジスタファイル610は2つの読取及び2つの記録を各クロックサイクルごとに収容するために2つの読取及び2つの記録ポートを有する。それぞれのポートは選択回路612,614,616,618,288ビットデータバス613,615,617,619を含む。回路612、614、616、618のような選択回路は技術分野に公知されており、デコーダ220が典型的に命令語から抽出される5ビットレジスタ番号から誘導するアドレス信号WRADDR1、WRADDR2、RDADDR1またはRDADDR2、命令語或いは制御状態レジスタVCSRからのバンクビット、及びレジスタがベクトルレジスタ或いはスカラレジスタであるかを示す命令語構文を用いる。データ読み取りはマルチプレクサ656を通してロード/貯蔵部250へ、或いはマルチプレクサ622及び624を通して乗算部620、算術論理部630、或いは累算器640を通してルート(route)されることができる。大部分の演算は2つのレジスタを判読し、読取ステージ514は1サイクルに完了する。しかし、乗算と加算命令語VMAD及び二重サイズベクトルを操作する命令語のような一部命令語は読取ステージ514が1クロックサイクルより長くなるように2つのレジスタ以上からデータを必要とする。
【0037】
実行ステージ515の間、乗算器620、算術論理部630及び累算器640はレジスタファイル610から以前に読み取られたデータを処理する。実行ステージ515は所定のデータの読取に多数のサイクルが必要であれば、読取ステージ514をオーバーラップすることができる。実行ステージ515の期間は処理されたデータエレメントの類型(整数または浮動小数点)及び量(読取サイクルの数)に依存する。実行レジスタ422,423及び425からの信号は実行ステージの間に行われた第1演算時に算術論理部630、累算器640及び乗算器620への入力データを制御する。実行レジスタ432,433及び435からの信号は実行ステージ515の間に行われた第2演算を制御する。
【0038】
図8は乗算器620及びALU630の実施形態に対するブロック図である。乗算器620は8つの独立的な36×36ビット乗算器626を含む整数乗算器である。それぞれの乗算器626は制御回路によって共に接続された4つの9×9ビット乗算器を含む。8ビット及び9ビットデータエレメントサイズの場合、スケジューラ230からの制御信号は各乗算器626が4つの乗算を行うように相互4つの9×9ビット乗算器から分離させ、乗算器620はサイクルの間32個の独立的な乗算を行う。16ビットデータエレメントの場合、制御回路は共に動作する9×9ビット乗算器の対を連結し、乗算器620は16個の並列乗算を行う。32ビット整数データエレメント類型の場合、8個の乗算器626はクロックサイクルごとに8個の並列乗算を行う。乗算の結果は9ビットデータエレメントサイズに対して576ビット結果を、そして他のデータサイズに対して512ビットを提供する。
【0039】
ALU630は2つのクロックサイクルの間に乗算器620からの結果、即ち576ビット或いは512ビット結果を処理することができる。ALU630は8個の独立的な36ビットALU636を含む。それぞれのALU636は浮動小数点加算及び乗算のために32×32ビット浮動小数点部を含む。付随的な回路は整数シフト、算術及び論理関数を実行する。整数操作の場合、それぞれのALU636は独立的な8ビット及び9ビット操作を行うことができ、16ビット及び32ビット整数データエレメントに対して2つ或いは4つのセットと共にリンクされ得る4つの部(unit)を含む。
【0040】
累算器640は結果を累算し、中間結果でより高い精度のために2つの576ビットレジスタを含む。
【0041】
記録ステージ516の間、実行ステージからの結果はレジスタファイル610に貯蔵される。2つのレジスタは単一クロックサイクルの間記録されることができ、入力乗算器602及び605は記録される2つのデータ値を選択する。演算のための記録ステージ516の期間は演算の結果として記録されるデータの量と、レジスタファイル610に記録することによりロード命令語を完了し得るLSU250からの完了にしたがう。実行レジスタ426及び427からの信号は算術論理部630、累算器640及び乗算器620からのデータが記録されるレジスタを選択する。
【0042】
図5(b)はロード命令語の実行のための実行パイプライン520を示す。実行パイプライン520のための命令語フェッチステージ511、デコードステージ512及び発生ステージ513はレジスタ対レジスタ演算について叙述されたものと同一である。また、読取ステージ514は実行データ経路240がレジスタファイル610からのデータを用いてキャッシュサブシステム130への呼出のためのアドレスを決定することを除いては上述と同一である。アドレス算出ステージ525において、マルチプレクサ652、654及び656は実行ステージ526及び527のためにロード/貯蔵部250に提供されるアドレスを選択する。ロード演算のための情報はステージ526及び527の間FIFO410に保持される反面、ロード/貯蔵部250は演算を取り扱う。
【0043】
図9はロード/貯蔵部250の実施形態を示す。ステージ256の間、ステージ525で決定されたアドレスからのデータのためにキャッシュサブシステム130に対して呼び出される。例示的な実施形態はプロセッサ110,120を含む多数のデバイスがキャッシュサブシステム130を通して局部アドレス空間をアクセスし得るトランザクションに基づいたキャッシュ呼出を用いる。要請されたデータはキャッシュサブシステム130を呼び出した後幾サイクルの間用いることはできないが、ロード/貯蔵部250は他の呼出が係留される間キャッシュサブシステムを呼び出すことができる。従って、ロード/貯蔵部250は保留されない。要請されたデータを提供するためにキャッシュサブシステム130に必要なクロックサイクルの数はデータキャッシュ194をヒットまたはミスしたかによる。
【0044】
駆動ステージ527において、キャッシュサブシステム130はロード/貯蔵部250に対してデータ信号をアサートする。キャッシュサブシステム130はロード/貯蔵部250にサイクルごとにデータの256ビット(32バイト)を提供することができる。バイト整列器710は288ビット値を提供するために対応する9ビット貯蔵場所にそれぞれの32バイトを整列させる。288ビットフォーマットは時々9ビットデータエレメントを使用するMPEG符号化及び復号化のようなマルチメディアアプリケーションに適する。288ビット値は読取データバッファ720に記録される。記録ステージ528の場合、スケジューラ230はデータバッファ720からの288ビット量をレジスタファイル610に記録するためにFIFOバッファ410から実行レジスタ426または427へフィールド4を運搬する。
【0045】
図5(c)は貯蔵命令語の実行のための実行パイプライン530を示す。実行パイプライン530のための命令語フェッチステージ511、デコードステージ512及び発行ステージ513は上述と同様である。読取ステージ514は貯蔵されるデータ及びアドレス算出のためのデータを読み取ることを除いては上述と同一である。貯蔵されるデータはロード/貯蔵部250のデータバッファ730に記録される。マルチプレクサ740は9ビットバイトを提供するためのフォーマットのデータを8ビットバイトを有する従来のフォーマットに変換する。バッファ730からの変換されたデータ及びアドレス算出ステージ525からの連関アドレスはSRAMステージ536の間キャッシュサブシステム130に並列に送り出される。
【0046】
ベクトルプロセッサ120の例示的な実施形態において、各命令語は32ビット長さであり、図10に示した9つのフォーマット中のいずれか一つを有し、REAR,REAI,RRRM5,RRRR,RI,CT,RRRM9,RRRM9*及びRRRM9**の標識を有する。後述する第五実施例はベクトルプロセッサ120のための命令語セットを説明する。
【0047】
効率的なアドレスを決定する時にスカラレジスタを用いる一部ロード、貯蔵及びキャッシュ演算はREARフォーマットを有する。REARフォーマット命令は000bのビット29〜31によって識別され、スカラレジスタのための2つのレジスタ番号SRb,SRi及びビットDに依存するスカラまたはベクトルレジスタのレジスタ番号Rnによって識別される3つのオペランドを有する。バンクビットBはレジスタRnに対するバンクを識別するか、或いはデフォルトベクトルレジスタサイズが二重サイズであれば、ベクトルレジスタRnが二重サイズベクトルレジスタであるかを指す。opコードフィールドOpcはオペランドに対して行われた演算を識別し、フィールドTTはロードまたは貯蔵として伝送類型を識別する。典型的なREARフォーマット命令はスカラレジスタSRb及びSRiの内容を加えることにより決定されたアドレスからレジスタRnをロードする命令語VLである。もしビットAがセットされると、算出されたアドレスはスカラレジスタSRbに貯蔵される。
【0048】
REAIフォーマット命令はフィールドIMMからの8ビット即値がスカラレジスタSRiの内容の代わりに用いられることを除いてはREAR命令と同一である。REAR及びREAIフォーマットはデータエレメントサイズフィールドを持っていない。
【0049】
RRRM5フォーマットは2つのソースオペランドと一つの目的地オペランドを有する命令語のためのものである。これら命令は3つのレジスタオペランド或いは2つのレジスタオペランドのうちいずれか一つと5ビット即値を有する。後述する第五実施例に示すようにフィールドD,S及びMの符号化は第1のソースオペランドRaがスカラまたばベクトルレジスタであるか、第2のソースオペランドRb/IM5がスカラレジスタ、ベクトルレジスタ、或いは5ビット即値であるか、そして目的地レジスタRdがスカラまたはベクトルレジスタであるかを判断する。
【0050】
RRRRフォーマットは4つのレジスタオペランドを有する命令語のためのものである。レジスタ番号Ra及びRbはソースレジスタを指す。レジスタ番号Rdは目的地レジスタを示し、レジスタ番号RcはフィールドOpcに応じてソースまたは目的地レジスタのうちいずれか一つを示す。全てのオペランドはビットSがレジスタRbのスカラレジスタであることを指すようにセットされていない限りベクトルレジスタである。フィールドDSはベクトルレジスタのためのデータエレメントサイズを指す。フィールドOpcは32ビットデータエレメントのためのデータ類型を選択する。
【0051】
RIフォーマット命令は即値をレジスタへロードする。フィールドIMMは18ビットまでの即値を収容する。レジスタ番号Rdは現在のバンクにあるベクトルレジスタまたはビットDによるスカラレジスタのうちいずれかの目的地レジスタを示す。フィールドDS及びFはそれぞれデータエレメントのサイズと類型を指す。32ビット整数データエレメントの場合、18ビット即値はレジスタRdにロードされる前に拡張された符号である。浮動小数点データエレメントの場合、ビット18、ビット17乃至10及びビット9乃至0はそれぞれ32ビット浮動小数点値の符号、指数及び仮数を示す。
【0052】
CTフォーマットは流れ制御命令語のためのものであり、opコードフィールドOpc、条件フィールドCond、及び23ビット即値IMMを含む。条件フィールドによって指された条件が真であれば分岐が取られる。可能な条件は“常時”、“より小さい”、“等しい”、“小さいかもしくは等しい”、“より大きい”、“等しくない”、“〜より大きいか若しくは等しい”、及び“オーバーフロー”である。状態及び制御レジスタVCSRにあるビットGT、EQ、LT及びSOは条件の評価に用いられる。
【0053】
フォーマットRRRM9は3つのレジスタオペランドまたは2つのレジスタオペランドのうちいずれか一つと9ビット即値を提供する。ビットD,S及びMの組合せはどのオペランドがベクトルレジスタ、スカラレジスタ、または9ビット即値であるかを指す。フィールドDSはデータエレメントサイズを示す。RRRM9*及びRRRM9**フォーマットはRRRM9フォーマットの特殊な場合であり、opコードフィールドOpcによって識別される。RRRM9*フォーマットはソースレジスタ番号Raを条件コードCond及びIDフィールドに交替する。RRRM9*フォーマットは即値の最上位ビットを条件コードCond及びビットKに交替する。RRRM9*及びRRRM9**の付加的な説明は条件移動命令VCMOV、エレメントマスクを有する条件移動CMOVMと関連して第五実施例に提示されており、マスクCMPV命令と比較し、それをセットさせる。
【0054】
たとえ本発明が特定実施形態を参照として叙述されたが、本説明は単に本出願の例に過ぎないし、限定すると見なされてはいけない。開示された実施形態の多様な変形と組合せは次の特許請求の範囲領域で限定されたように、本発明の領域内に包括される。
【0055】
【実施例】
以下に、第一実施例について説明する。
本実施例において、プロセッサ110はARM7プロセッサ用標準と互換する汎用プロセッサである。ARM7内のレジスタの説明のためのARMアーキテクチャ文書或いはARM7データシート(1994年12月に発行された文書番号ARM DDI 0020C)を参照する。
【0056】
ベクトルプロセッサ120と相互作用するために、プロセッサ110はベクトルプロセッサを開始し停止させ、同期化のためのものを含んでベクトルプロセッサ状態をテストし、ベクトルプロセッサ120にあるスカラ/特殊目的レジスタからのデータをプロセッサ110の汎用レジスタへ伝送し、且つ汎用レジスタからのデータをベクトルプロセッサスカラ/特殊目的レジスタへ伝送する。汎用レジスタとベクトルプロセッサベクトルレジスタ間の直接的な伝送手段は存在しない。このような伝送は中間としてメモリを必要とする。
表2はベクトルプロセッサ命令語のためのARM7命令語セットへの拡張を説明する。
【表2】
【0057】
表3は欠陥のある命令を実行する前に検出されて報告されたARM7の例外を列挙する。例外ベクトルアドレスが16進数表記法で提示されている。
【0058】
【表3】
【0059】
次に、ARM7命令語セットに対する拡張構文を説明する。命名法説明及び命令語フォーマットのためにはARMアーキテクチャ文書またはARM7データシート(1994年12月に発行された文書番号ARM DDI 0020C)を参照する。
【0060】
前記ARMアーキテクチャはコプロセッサインタフェースのために3つの命令語を提供する:
1.コプロセッサデータ演算(CDP)
2.コプロセッサデータ転送(LDC,STC)
3.コプロセッサレジスタ転送(MRC,MCR)
MSPアーキテクチャ拡張は3つの形式を全て利用する。
コプロセッサのデータ演算フォーマットCDPはARM7に再び通信する必要のない演算に用いられる。
【0061】
CDPフォーマット
【数1】
【0062】
CDPフォーマットにあるフィールドは次のような規約をもつ:
【0063】
【表4】
【0064】
コプロセッサデータ伝送フォーマット(LDC,STC)はベクトルプロセッサのレジスタのサブセットを直接メモリにロードするか或いは貯蔵するのに用いられる。ARM7プロセッサはワードアドレスを供給する役目を担い、前記ベクトルプロセッサはデータを供給或いは受信し、伝送されたワードの数を制御する。より詳細なことはARM7データシートを参照する。
LDC,STCフォーマット
【数2】
フォーマットにあるフィールドは次の規約をもつ:
【表5】
【0065】
コプロセッサレジスタ転送フォーマット(MRC,MCR)はARM7とベクトルプロセッサとの間に情報を直接通信するのに用いられる。このフォーマットはARM7レジスタとベクトルプロセッサのスカラまたは特殊レジスタとの間を移動させるのに用いられる。
【0066】
MRC,MCRフォーマット
【数3】
【0067】
フォーマットにあるフィールドは次の規約を持つ:
【表6】
【0068】
拡張ARM命令語説明
拡張ARM命令語はアルファベット順で説明される。
【0069】
CACHE キャッシュ演算
●フォーマット
【数4】
●アセンブラ構文
STC{cond} p15,cOpc,〈Address〉
CACHE{cond}Opc,〈Address〉
ここで、cond={eq,he,cs,cc,mi,pl,vs,vc,hi,Is,ge,It,gt,le,ai,nv}及びOpc={0,1,3}。LDC/STCフォーマットのCRnフィールドがOpcの明示に用いられるので、演算コードの十進数表記は第1構文で文字“c”が先行しなければならない(即ち、0の代わりにcOを使用する)。アドレスモード構文についてはARM7データシートを参照する。
●説明
この命令語はCondが真の時にのみ実行される。Opc〈3:0〉は次の演算を明示する:
【0070】
【表7】
【0071】
●演算
EAの算出方法についてはARM7データシートを参照する。
例外
ARM7保護違反
【0072】
INTVP インタラプトベクトルプロセッサ
●フォーマット
【数5】
●アセンプラ構文
CDP{cond}p7,1,c0,c0,co
INTVP{cond}
ここで、cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,ns}
●説明
この命令はCondが真の時にのみ実行される。この命令はベクトルプロセッサに中止するようにシグナルする。ARM7はベクトルプロセッサの中止を待機せず、次の命令を引き続き実行する。
MFER使用中(busy)待機ループはもしこの命令が行われた後ベクトルプロセッサが停止されたかを確認するのに用いられる。この命令はもしベクトルプロセッサが予めVP_IDLE状態にあれば、何の影響も及ぼさない。
ビット19:12,7:15及び3:0が割り当てられる。
●例外
利用不可能なベクトルプロセッサ。
【0073】
MFER 拡張レジスタからの移動
●フォーマット
【数6】
●アセンブラ構文
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,le,al,nv},Rd={r0,・・・r15},P={0,1},ER={0,・・15}、そしてRNAMEはアーキテクチャ的に明示されたレジスタニモニック(即ち、PERO或いはCSR)を意味する。
●説明
本命令はCondが真の時にのみ実行される。ARM7レジスタRdは下記の表に示すように、P:ER〈3:0〉で明示された拡張レジスタERから移動する。
【0074】
拡張レジスタの説明については1.2節を参照する。
【表8】
【0075】
ビット19:17及び7:5は予約されている。
●例外
使用者モード中にPERxをアクセスしようと試みるのは保護違反
【0076】
MFVP ベクトルプロセッサからの移動
●フォーマット
【数7】
●アセンブラ構文
MRC{cond}p7,1,Rd,Crn,CRm,0
MFER{cond}Rd,RNAME
ここで、cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,・・・r15},CRn={c0,・・・c15},CRm={c0,・・c15}、及びRNAMEはアーキテクチャ的に明示されたレジスタニモニック(即ち、SP0またはVSR)を意味する。
●説明
本命令はCondが真の時にのみ実行される。ARM7レジスタRdはベクトルプロセッサのスカラ/特殊レジスタCRn〈1:0〉:CRm〈3:0〉から移動される。レジスタ伝送のためのベクトルプロセッサレジスタ番号割当については3.2.3節を参照する。
CRn〈3:2〉はもちろんビット7.5も予約されている。
ベクトルプロセッサレジスタマップは以下の表に示される。ベクトルプロセッサ特殊目的レジスタ{SP0〜SP15〉については表15を参照する。
【0077】
【表9】
【0078】
SR0は常に0の32ビットとして読み取られ、これに対する記録は無視される。
●例外
利用不可能なベクトルプロセッサ
【0079】
MTER 拡張レジスタ側への移動
●フォーマット
【数8】
●アセンブラ構文
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,le,al,nv},Rd={r0,・・・r15},P={0,1},ER={0,・・15}、及びRNAMEはアーキテクチャ的に明示されたレジスタニモニック(即ち、PERO或いはCSR)を意味する。
●説明
本命令はCondが真の時にのみ実行される。ARM7レジスタRdは下記の表に示すように、P:ER〈3:0〉で明示された拡張レジスタERから移動される。
【0080】
【表10】
【0081】
ビット19:17及び7:5は予約されている。
●例外
使用者モード中にPERxをアクセスしようと試みるのは保護違反
【0082】
MTVP ベクトルプロセッサからの移動
●フォーマット
【数9】
●アセンブラ構文
MRC{cond}p7,1,Rd,Crn,CRm,0
MFVP{cond}Rd,RNAME
ここで、cond={eq,ne,cs,cc,mi,pl,vs,vc,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,・・・r15},CRn={c0,・・c15}、CRm={c0,・・・c15}、及びRNAMEはアーキテクチャ的に明示されたレジスタニモニック(即ち、SP0或いはVCS)を意味する。
●説明
この命令はCondが真の時にのみ実行される。ARM7レジスタRdはベクトルプロセッサのスカラ/特殊目的レジスタCRn〈1:0〉:CRm〈3:0〉から移動される。
CRn〈3:2〉はもちろん、ビット7:5も予約されている。
ベクトルプロセッサレジスタマップが以下の表に示されている。
【0083】
【表11】
【0084】
●例外
利用不可能なベクトルプロセッサ
【0085】
PFTCH プリフェッチ
●フォーマット
【数10】
●アセンブラ構文
LDC{cond}p15,2,〈Address〉
PFTCH{cond}〈Address〉
ここで、cond={eq,he,cs,cc,mi,pl,rs,vc,hi,ls,ge,lt,gt,le,al,nv}、アドレスモード構文についてはARM7データシートを参照する。
●説明
この命令はCondが真の時にのみ実行される。EAによって明示されたキャッシュラインはARM7データキャッシュにプリフェッチされる。
●演算
EAがどのように計算されるかについてはARM7データシートを参照する。
●例外
なし
【0086】
STARTVP 開始ベクトルプロセッサ
●フォーマット
【数11】
●アセンブラ構文
LDP{cond}p7,0,cO,cO,cO
STARTVP{cond}
ここで、cond={eq,he,cs,cc,mi,pl,vs,vc,hi,ls,ge,it,gt,le,al,nv}
●説明
本命令はCondが真の時にのみ実行される。この命令はベクトルプロセッサにシグナルして実行を開始できるようにし、VISRC〈vjp〉とVISRC〈vip〉を自動的にクリアさせる。ARM7はベクトルプロセッサが実行を開始する時まで待機せず、次の命令を引き続き行う。
ベクトルプロセッサの状態はこの命令が行われる前に所望の状態に初期化されるべきである。この命令は前記ベクトルプロセッサが既にVP_RUN状態にあれば、何の影響も及ぼさない。
ビット19:12,7:5,及び3:0は予約されている。
●例外
ベクトルプロセッサは利用することができない
【0087】
TESTSET テストとセット
●フォーマット
【数12】
●アセンブラ構文
MRC{cond}p7,0,Rd,cO,cER,0
TESTSET{cond}Rd,RNAME
ここで、cond={eq,he,cs,cc,mi,pl,rs,re,hi,ls,ge,lt,gt,le,al,nv},Rd={r0,・・r15},ER={0,・・15},そしてRANAMEはアーキテクチャ的に明示されたレジスタニモニック(即ち,UER1或いはVASYNC)を意味する。
●説明
本命令はCondが真の時にのみ実行される。この命令はUERxの内容をRDに返還し、UERx〈30〉を1にセットさせる。もしARM7レジスタ15が目的地レジスタとして明示されていれば、短い使用中待機(busywait)ループが具現されうるように、UERx〈30〉はCPSRのZビットから返還される。
●例外
無し
【0088】
以下に、第二実施例について説明する。
マルチメディアプロセッサ100のアーキテクチャはプロセッサ110がMFERとMTER命令語でアクセスする拡張レジスタを定義する。この拡張レジスタは専用拡張レジスタと使用者拡張レジスタとを含む。
前記専用拡張レジスタはマルチメディア信号プロセッサの動作を制御するのに主に用いられる。これらは表B1に示されている。
【0089】
【表12】
【0090】
制御レジスタはMSP100の演算を制御する。CTRにある全てのビットはリセット時にクリアされる。前記レジスタ定義が表13に示されている。
【0091】
【表13】
【0092】
状態レジスタはMSP100の状態を指す。フィールドSTRにある全てのビットはリセット時にクリアされる。前記レジスタ定義が表B3に示されている。
【0093】
【表14】
【0094】
プロセッサバージョンレジスタはプロセッサのマルチメディア信号プロセッサ群の特殊なプロセッサの特殊バージョンを識別する。
ベクトルプロセッサインタラプトマスクレジスタVIMSKは、プロセッサ110へのベクトルプロセッサ例外の報告を制御する。VIMSKにある各ビットは、VISRCレジスタの対応ビットと共にセットされる時、例外をイネーブルさせてARM7をインタラプトさせる。ベクトルプロセッサ例外が検出される方法には何の影響も及ぼさないが、前記例外がARM7をインタラプトさせるべきかどうかについてのみ影響を及ぼす。VIMSKの全てのビットはリセット時にクリアされる。レジスタ定義が表B4に示されている
【0095】
【表15】
【0096】
ARM7命令語アドレス区切り点レジスタはARM7プログラムをデバッグ(debugging)するのに役に立つ。レジスタ定義が下表に示されている。
【0097】
【表16】
【0098】
ARM7データアドレス区切り点レジスタはARM7プログラムをデバッグするのに役に立つ。レジスタ定義が下表に示されている。
【0099】
【表17】
【0100】
スクラッチパッドレジスタはキャッシュサブシステム130のSRAMを用いて形成されたスクラッチパッドのアドレスとサイズを構成する。レジスタ定義が下表に示されている。
【0101】
【表18】
【0102】
使用者拡張レジスタはプロセッサ110,120の同期化に主に用いられる。使用者拡張レジスタはビット30にマッピングされた只1ビットのみを持つように現在定義されており、例えば“MFER R15,UERx”のような命令はビット値をZフラグ側に返還する。ビットUERx〈31〉およびUERx〈29:0〉は常にゼロと読み取られる。使用者拡張レジスタが下表に説明されている。
【0103】
【表19】
【0104】
下表はパワーオンリセット時の拡張レジスタの状態を示す。
【0105】
【表20】
【0106】
以下に、第三実施例について説明する。ベクトルプロセッサ120のアーキテクチャ状態は:32個の32ビットスカラレジスタ;32個の288ビットベクトルレジスタの2つのバンク:一対の576ビットベクトル累算レジスタ;1セットの32ビット特殊目的レジスタを備える。スカラ、ベクトル及び累算器レジスタは汎用目的プログラミングのために意図されており、他の多くのデータ型を支援する。
【0107】
次の表記法はこのような節及び後続の節に用いられる。:
VRはベクトルレジスタを示す;VRiはi番目のベクトルレジスタ(ゼロオフセット)を示す;VR[i]はベクトルレジスタVRのi番目のデータエレメントを示す;VR〈a:b〉はベクトルレジスタVRのビットa乃至ビットbを示す;そしてVR[i]〈a:b〉はベクトルレジスタVRのi番目のデータエレメントのビットa乃至ビットbを示す。
ベクトルアーキテクチャは一つのベクトルレジスタ内に多数のエレメントのためのデータ型及びサイズの付加された寸法をもつ。ベクトルレジスタは固定されたサイズをもつので、収容可能なデータエレメントの個数はエレメントのサイズによる。MSPアーキテクチャは下表に示すように5つのエレメントサイズを有する。
【0108】
【表21】
【0109】
MSPアーキテクチャは命令にある明示されたデータ型とサイズによってベクトルデータを解釈する。現在2の補数(整数)フォーマットが大部分のアーキテクチャ命令のバイト、バイト9、ハーフワード及びワードエレメントサイズに支援される。しかも、大部分のアーキテクチャ命令のためのワードエレメントサイズとしてIEEE754単精度フォーマットが支援される。
プログラマは命令語シーケンスが意味のある結果を出す限り、任意の所定方法でデータを自由に解釈することができる。例えば、プログラマはバイト9サイズを使用して8ビット符号のない数字を貯蔵することができ、同様にバイトサイズデータエレメントに8ビット符号のない数字を自由に貯蔵することができ、プログラマが“偽(false)”オーバフロー結果を取り扱うことができる限り、提供された2の補数アーキテクチャ命令を使用して自由にそれらを演算することができる。
【0110】
SR0乃至SR31で表記された32個のスカラレジスタが存在する。スカラレジスタは32ビット幅であり、定義されたサイズのうちいずれかのサイズの1つのデータエレメントを収容することができる。スカラレジスタSR0はレジスタSR0が常に32ビットと読み取られ、レジスタSR0への記録が無視されるという点で特殊である。バイト、バイト9及びハーフワードデータ型は最上位ビットが定義されていない値を有するスカラレジスタの最下位ビットに貯蔵される。
レジスタがデータ型表示器を持っていないため、プログラマは各命令に用いられているレジスタのデータ型を知るべきである。これは32ビットレジスタが32ビット値を収容すると見なされる他のアーキテクチャとは異なる。MSPアーキテクチャはデータ型Aの結果がデータ型Aに対して定義されたビットのみを正確に修正することを明示する。例えば、バイト9加算の結果は32ビット目的地スカラレジスタの下位9ビットのみを修正する。上位23ビットの値は命令語に対して異に指示されない限り、定義されていない。
【0111】
64ベクトルレジスタはそれぞれ32ビットレジスタを有する2つのバンクから組織される。バンク0は一番目の32レジスタを収容し、バンク1は2番目の32レジスタを収容する。2つのバンクは一つが現在のバンクとしてセットされ、もう一つが代替バンクとしてセットされる方式で用いられる。全てのベクトル命令は代替バンクにあるベクトルレジスタをアクセスし得る命令をロード/記憶及びレジスタが移送させることをを除き、デフォルトとして現在のバンクにあるレジスタを使用する。ベクトル制御及び状態レジスタVCSRにあるCBANKビットはバンク0またはバンク1を現在のバンクとしてセットさせるのに用いられる。(他のバンクは代替バンクになる。)現在のバンクにあるベクトルレジスタはVR0乃至VR31と呼ばれ、代替バンク内のベクトルレジスタはVRA0乃至VRA31と呼ばれる。
【0112】
選択的に、2つのバンクは576ビットの32二重サイズベクトルレジスタをそれぞれ提供するように概念的に合併されることができる。制御レジスタVCSRにあるVEC64ビットはこのようなモードを明示する。VEC64モードにおいて、現在バンク及び交替バンクは存在せず、ベクトルレジスタ番号は2つのバンクから対応する288ビットベクトルベクトル対を指称する。即ち、
VRi〈575:0〉=VR1i〈287:0〉:VR0i〈287:0〉
ここで、VR0i及びVR1iはバンク1及びバンク0のそれぞれにレジスタ番号VRiをもつベクトルレジスタを指称する。二重サイズベクトルレジスタはVR0乃至VR31と呼ばれる。
ベクトルレジスタは下表に示したようにバイト、バイト9、ハーフワードまたはワードサイズの多数のエレメントを収容することができる。
【0113】
【表22】
【0114】
一つのベクトルレジスタ内のエレメントサイズの混合は支援されない。バイト9エレメントサイズを除き、ただ288ビットの256ビットのみが用いられる。特に、全ての9番目のビットは用いられない。バイト、ハーフワード及びワードサイズにある用いられない32ビットは予約され、プログラマはそれらの値に対して何の仮定もしてはいけない。
【0115】
ベクトル累算レジスタは目的地レジスタの結果より精度の高い中間結果のための記憶装置を提供するように意図される。ベクトル累算レジスタはVAC1H,VAC1L,VAC0H及びVAC0Lという4つの288ビットレジスタから構成される。VAC0H:VAC0L対はデフォルトで3つの命令によって用いられる。VEC64モードでのみ、VAC1H:VAC1L対が64バイト9ベクトル演算をエミュレートするのに用いられる。バンク1がVEC32モードで現在のバンクにセットされても、VAC0H:VAC0L対が用いられる。
ソースベクトルレジスタと等しい数のエレメントをもつ拡張された精度結果を出すために、下表に示したようにレジスタ対にわたって拡張された精度エレメントが節約される。
【0116】
【表23】
【0117】
VAC1H及びVAC1L対はエレメントの数がバイト9(及びバイト)、ハーフワード、及びワードのそれぞれに対して64,32,または16のVEC64モードでのみ用いられる。
メモリから直接ロードされるか、或いはメモリに直接貯蔵され得ない33個の特殊目的レジスタが存在する。RASR0乃至RASR15と呼ばれる16個の特殊目的レジスタは内部の返還アドレススタックを形成し、サブルーチン呼出及び返還命令によって用いられる。17個の32ビット特殊目的レジスタが表C4に示されている。
【0118】
【表24】
【0119】
ベクトル制御及び状態レジスタVCSR定義が下表に示されている。
【表25】
【0120】
ベクトルプログラムカウンタレジスタVPCは、ベクトルプロセッサ120によって実行される次の命令のアドレスである。ARM7プロセッサ110はベクトルプロセッサ120の演算を開始するためにSTARTVP命令を発生する前にレジスタVPCをロードしなければならない。
【0121】
ベクトル例外プログラムカウンタVEPCは、一番最近の例外を誘発する可能性のある命令語のアドレスを明示する。MSP100は正確な例外、即ち“一番可能性のある”という用語を支援しない。
【0122】
ベクトルインタラプトソースレジスタVISRCは、ARM7プロセッサ110に対するインタラプトソースを指す。例外の検出時、適当なビットがハードウェアによってセットされる。ソフトウェアはベクトルプロセッサ120が実行を再開する前にレジスタVISRCをクリアしなければならない。レジスタVISRCに設定された任意のビットはベクトルプロセッサ120を状態VP_IDLEに進入させる。もし対応するインタラプトイネーブルビットがVIMSKに設定されていると、プロセッサ110に対するインタラプトがシグナルされる。下表はレジスタVISRCの内容を定義する。
【0123】
【表26】
【0124】
ベクトルインタラプト命令レジスタVIINSは、VCINTまたはVCJOIN命令がARM7プロセッサ110をインタラプトするために実行される時、VCINTまたはVCJOIN命令により更新される。
【0125】
ベクトルカウンタレジスタVCR1,VCR2及びVCR3は、減少及び分岐命令VD1CBR,VD2CBR,VD3CBRであり、実行されるループのカウントで初期化される。命令VD1CBRが実行される時、レジスタVCR1は1だけ減少する。もしカウント値がゼロでなく命令語に明示された条件がVFLAGと一致すると、この時分岐が取られる。もし一致しなければ、分岐は取られない。レジスタVCR1はどの場合にも1だけ減少する。レジスタVCR2及びVCR3もこれと同一に用いられる。
【0126】
ベクトルグローバルマスクレジスタVGMR0は、VEC32で影響を及ぼす目的地ベクトルレジスタのエレメントと、VEC64モードでVR〈287:0〉内のにあるエレメントを指す。VGMR0の各ビットはベクトル目的地レジスタの9ビットの更新を制御する。特に、VGMR0〈i〉は、VEC32モードのVRd〈9i+8:9i〉とVEC64モードのVR0d〈9i+8:9i〉の更新を制御する。VR0dはVEC64モードでバンク0の目的地レジスタを指し、VRdはVEC32モードでバンク0またはバンク1のうちいずれか一つである可能性のある現在のバンクにある目的地レジスタを指す。ベクトルグローバルマスクレジスタVGMR0はVCMOVM命令を除いて全ての命令の実行に用いられる。
【0127】
ベクトルグローバルマスクレジスタVGMR1は、VEC64モードで影響を受けるVR〈575:288〉内のエレメントを指す。VGMR1の各ビットはバンク1でベクトル目的地レジスタにある9ビットの更新を制御する。特に、VGMR1〈i〉はVR1d〈9i+8:9i〉の更新を制御する。レジスタVGMR1はVEC32モードで使用されないが、VEC64ではVCMOVM命令を除いて全ての命令を実行するのに用いられる。
【0128】
ベクトルオーバフローレジスタVOR0は、VEC32モードにあるエレメントとベクトル算術演算後オーバフロー結果を収容しているVEC64モードにあるVR〈287:0〉内のエレメントを指す。このレジスタはスカラ算術演算により修正されない。セットされるビットVOR0〈i〉はバイトまたはバイト9のi番目のエレメント、ハーフワードの(i idiv 2)番目のエレメント、或いはワードデータ型演算の(i idiv 4)番目のエレメントがオーバフロー結果を含んでいることを指す。例えば、ビット1及びビット3はそれぞれ一番目のハーフワード及びワードエレメントのオーバフローを指すようにセットされる。このようなVOR0にあるビットのマッピングはVGMR0またはVGMR1にあるビットのマッピングとは異なる。
【0129】
ベクトルオーバフローレジスタVOR1は、ベクトル算術演算後にオーバフロー結果を含んでいるVEC64モードでVR〈575:288〉内のエレメントを指すのに用いられる。レジスタVOR1はVEC32モードで使用されず、且つスカラ算術演算によって修正もされない。セットされているビットVOR1〈i〉はバイトまたはバイト9のi番目のエレメント、ハーフワードの(i idiv 2)番目のエレメント、或いはオーバフロー結果を含んでいるワードデータ型演算の(i idiv 4)番目のエレメントを指す。例えば、ビット1とビット3はVR〈575:288〉でそれぞれ1番目のハーフワードとワードエレメントのオーバフローを指すようにセットされる。VOR1にあるビットのマッピングはVGMR0またはVGMR1にあるビットのマッピングとは異なる。
【0130】
ベクトル命令アドレス区切り点レジスタVIABRは、ベクトルプログラムをデバッグするのに役に立つ。このレジスタ定義が下表に示されている。
【0131】
【表27】
【0132】
ベクトルデータアドレス区切り点レジスタVDABRは、ベクトルプログラムをデバッグするのに役に立つ。このレジスタ定義が下表に示されている。
【0133】
【表28】
【0134】
ベクトル移動マスクレジスタVMMR0は、全ての命令に対してVCSR〈SMM〉=1の時は勿論、全ての場合にVCMOVM命令によって用いられる。レジスタVMMR0はVEC32モードで影響を受ける目的地レジスタのエレメントと、VEC64モードでVR〈287:0〉内のエレメントを指す。VMMR0の各ビットはベクトル目的地レジスタの9ビットの更新を制御する。特に、VMMR0〈i〉はVEC32モードでVRd〈9i+8:9i〉とVEC64モードでVR0d〈9i+8:9i〉の更新を制御する。VR0dはVEC64モードでバンク0の目的地レジスタを指し、VRdはVEC32モードでバンク0またはバンク1のうちいずれか一つである可能性のある現在のバンクで目的地レジスタを指す。
【0135】
ベクトル移動マスクレジスタVMMR1は、全ての命令に対してVCSR〈SMM〉=1の時は勿論、全ての場合にVCMOVM命令によって用いられる。レジスタVMMR1はVEC64モードで影響を受けるVR〈575:288〉内のエレメントを指す。VMMR1の各ビットはバンク1でベクトル目的地レジスタの9ビットの更新を制御する。特に、VGMR1〈i〉はVR1d〈9i+8:9i〉の更新を制御する。レジスタVGMR1はVEC32モードで用いられない。
【0136】
ベクトル及びARM7同期化レジスタVASYNCは、プロセッサ(110及び120)間の同期化の生産者/消費者を提供する。現在、只ビット30のみが定義されている。ARM7プロセッサはベクトルプロセッサ120が状態VP_RUNまたはVP_IDLEにある間、命令語MFER,MTER及びTESTSETを使用してレジスタVASYNCをアクセスすることができる。レジスタVASYNCはこれら命令が一番目の16ベクトルプロセッサの特殊目的レジスタを外れてアクセスすることができないために、TVP或いはMFVP命令を通じてARM7プロセッサにアクセスすることができない。ベクトルプロセッサはVMOV命令を通じてレジスタVASYNCをアクセスすることができる。
下表はパワーオンリセット時の前記ベクトルプロセッサの状態を示す。
【0137】
【表29】
【0138】
特殊目的レジスタは前記ベクトルプロセッサが命令を実行し得る前に、ARM7プロセッサ110によって初期化される。
【0139】
以下に、第四実施例について説明する。
各命令はソースと目的地オペランドのデータ型(data type)を暗示するか或いは明示する。一部の命令は一種以上のデータ型と等しく適用される意味(semantics)を有する。一部の命令はソースに対する一つのデータ型を取る意味を有し、その結果に対して他のデータ型を作る。本実施例は例示的な実施例によって支援されるデータ型を説明する。本章の表1は支援されるデータ型int8,int9,int16,int32及び浮動データを説明する。符号の無い整数フォーマット(unsigned integer format)は支持されず、符号の無い整数値はまず使用される前に2の補数フォーマットに変換されるべきである。プログラマはオーバフローが適切に処理される限り、符号の無い整数或いはその選択した任意の他のフォーマットで算術命令を自由に使用する。アーキテクチャは単に2の補数整数及び32ビット浮動小数点データ型のみのオーバフローを定義する。アーキテクチャは符号の無いオーバフローに必要な8,9,16,または32ビット演算のキャリアウトを検出することができない。
下表はロード(load)演算によって支持されるデータサイズを示す。
【0140】
【表30】
【0141】
アーキテクチャはデータ型境界上のメモリアドレス整列を明示する。即ち、バイトの場合、何の整列条件も存在しない。ハーフワードの場合、整列条件はハーフワード境界である。ワードの場合、整列条件はワード境界である。
下表は貯蔵(store)演算によって支持されるデータサイズを示す。
【0142】
【表31】
【0143】
スカラ或いはベクトルである一つ以上のダム(dam)型がレジスタにマッピングされるために、一部のデータ型に対して定義された結果を持たない、目的地レジスタにビットが存在することができる。実は、ベクトル目的地レジスタに対するバイト9データサイズ演算とスカラ目的地レジスタに対するワードデータサイズ演算の他にも、その値が演算によって定義されていない目的地レジスタにビットが存在する。これらビットの場合、アーキテクチャはそれらの値が定義されることを指定する。下表はそれぞれのデータサイズに対して定義されていないビットを示す。
【0144】
【表32】
【0145】
プログラミング時、プログラマはソース及び目的地レジスタ或いはメモリのデータ型を知っていなければならない。一つのエレメントサイズから他のエレメントサイズへのデータ型変換は暫定的にベクトルレジスタに貯蔵される数が他のエレメンになる結果をもたらす。例えば、ハーフワードからワードデータタイプへのベクトルレジスタの変換は同一数の変換されたエレメントを貯蔵するために2つのベクトルレジスタを必要とする。逆に、ベクトルレジスタで使用者定義のフォーマットをもつワードデータ型からハーフワードフォーマットへの変換はベクトルレジスタの半分に同一数のエレメントと、そして他の半分に残りのビットを発生させる。いずれの場合も、データ型変換はソースエレメントとは異なるサイズの変換されたエレメントの配列にアーキテクチャの問題を引き起こす。
【0146】
原則的に、MSPアーキテクチャはエレメントの数を黙視的に返還させる演算を結果として提供する。アーキテクチャはプログラマが目的地レジスタにあるエレメントの数を変えた結果を知っているべきと判断する。アーキテクチャは一つのデータ型から同一サイズの他のデータ型に変換する演算のみを提供し、一つのデータ型から異なるサイズの他のデータ型に変換する時、プログラマがデータサイズの差異を調整することを要求する。
【0147】
第五実施例に叙述されたようにVSHFLL及びVUNSHFLLのような特殊命令は一つのデータサイズをもつ一つのベクトルから他のデータサイズをもつ他のベクトルへの変換を単純にする。ベクトルVRaでより小さいエレメントサイズ、(例えばint8)からより大きいエレメント(例えばint16)へ2の補数データ型を変換することに関連した基本的なステップは次の通りである:
1.バイトデータタイプを用いて別のベクトルVRbを有するVRaにあるエレメントを2つのベクトルVRc:VRdにシャフルする(shuffle)。VRaにあるエレメントは二重サイズレジスタVRc:VRdにあるint16データエレメントの下位バイトに移動し、その値と関係の無いVRbのエレメントがVRc:VRdの上位バイトに移動する。この演算はバイトからハーフワードに各エレメントのサイズを倍加させながら、VRaのエレメントの半分をVRcに、残りの半分をVRdに効果的に移動させる。
2.VRcにあるエレメントを符号拡張するために8ビット算術シフトさせる。
【0148】
例えばベクトルVRaにあるより大きいエレメントサイズ、(例えばint16)からより小さいサイズ(例えばint6)へ2の補数データ型を変換することに関連した基本ステップは次の通りである:
1.int16データ型にある各エレメントがバイトサイズで表現可能であるかを点検する。もし必要なら、両方ともにエレメントを飽和させてより小さいサイズに合わせる。
2.VRaのエレメントを他のベクトルVRbとして2つのベクトルVRc:VRd内にアンシャフル(unshuffle)する。VRaとVRbにある各エレメントの上位半分はVRcに移動し、下位半分はVRdに移動する。これはVRdの下位半分にあるVRaの全てのエレメントの下位半分を効果的に収集する。
3.特殊命令が次のようなデータ型の変換に提供される:単精度浮動小数点に対してint32;固定小数点に対して単精度浮動小数点(X,Y表記法);int32に対して単精度浮動小数点;int9に対してint8;int16に対してint9;及びint9に対してint16。
【0149】
ベクトルプログラミングに柔軟性を提供するために、大部分のベクトル命令はエレメントマスクを用いてベクトル内の選択されたエレメントに対してのみ演算する。ベクトルグローバルマスクレジスタ(Vector Global Mask Register)VGMR0及びVGMR1はベクトル命令によって目的地レジスタ及びベクトル累算器で修正されたエレメントを識別する。バイト及びバイト9データサイズ演算の場合、VGMR0(或いはVGMR1)にある32ビットのそれぞれは演算されるエレメントを識別する。セットされているビットVGMR0〈i〉はバイトサイズのエレメント(i,ここでiは0から31まで)が影響を受けることを指す。ハーフワードデータサイズ演算の場合、VGMR0(或いはVGMR1)にある32ビットの各対は演算されるエレメントを識別する。セットされているビットVGMR0〈2i:2i+1〉はエレメントi(ここでiは0から15まで〉が影響を受けることを指す。もしVGMR0にある対の1つのビットのみがハーフワードデータサイズ演算のためにセットされると、対応するバイトにあるビットのみが修正される。ワードデータサイズ演算の場合、VGMR0(或いはVGMR1)にある4つのビットの各セットは演算されるエレメントを識別する。セットされているビットVGMR0〈4i:4i+3〉はエレメントi(ここでiは0から7まで)が影響を受けることを指す。もしVGMR0における4つのセットにある全てのビットがワードデータサイズ演算のためにセットされていなければ、対応するバイトにあるビットのみが修正される。
【0150】
VGMR0及びVGMR1はVCMPM命令を使用してベクトルレジスタをベクトル或いはスカラレジスタ或いは即値と比較することによりセットされることができる。この命令は指定されたデータサイズによってマスクを適切にセットさせる。スカラレジスタは一つのデータエレメントのみを収容するように定義されているために、スカラ演算(即ち、目的地レジスタがスカラである)はエレメントマスクによって影響されない。
【0151】
ベクトルプログラミングに柔軟性を与えるために、大部分のMSP命令は3つの形態のベクトルとスカラ演算を支援する。それらは次の通りである:
1.ベクトル=ベクトルopベクトル
2.ベクトル=ベクトルopスカラ
3.スカラ=スカラopスカラ
スカラレジスタがBオペランドとして明示されたケース2の場合、スカラレジスタにおける一つのエレメントはベクトルAオペランド内のエレメントの数と一致する必要のある数だけ複製される。複製されたエレメントは指定されたスカラオペランドにあるエレメントを同じ値をもつ。スカラオペランドは即値オペランド形態でスカラレジスタ或いは命令から来ることができる。即値オペランドの場合、もし指定されたデータ型が即値フィールドサイズとして利用し得るものよりさらに大きいデータサイズを用いると、適宜に符号拡張される。
【0152】
多くのマルチメディアアプリケーションにおいて、ソース、即値及び結果の精度に対して多くの関心が集まるべきである。また、整数乗算命令は2つのベクトルレジスタに貯蔵されうる“倍精度”中間結果を生成する。
【0153】
MSPアーキテクチャは現在8,9,16,及び32ビットエレメントのための2の補数整数フォーマットと32ビットエレメントのためのIEEE754単精度フォーマットを支援する。オーバフローは明示されたデータ型として表現できる最陽或いは最陰の値を外れた結果として定義される。オーバフローが発生する時、目的地レジスタに記録された値は無効数字でない。アンダーフローは浮動小数点演算に対してのみ定義されている。
【0154】
別に定義しない限り、全ての浮動小数点演算はVCSR〈RMODE〉に明示された4つのラウンディングモードのうちいずれか一つを用いる。一部の命令はラウンドアウェイフロムゼロ(round away from zero)(ラウンドイブン(round even))ラウンディングモードと知られていることを利用する。
【0155】
飽和(Saturation)は多くのマルチメディアアプリケーションにおける重要な機能である。MSPアーキテクチャは4種の全ての整数及び浮動小数点演算における飽和を支援する。レジスタVCSRにあるビットISATは整数飽和モードを明示する。また、高速IEEEモードとして知られている浮動小数点飽和モードはVCSRでFSATと明示されている。飽和モードがイネーブルされると、最陽或いは最陰の値を外れた結果がそれぞれ最陽或いは最陰の値にそれぞれセットされる。この場合、オーバフローは発生することができなく、オーバフロービットはセットされることができない。
下表は欠陥のある命令が実行されるる前に検出されて報告される正確な例外(Precise Exception)を列挙する。
【0156】
【表33】
【0157】
下表は欠陥のある命令以外の後続のプログラムにある幾つかの命令を実行してから、検出されて報告された不正確な例外(Imprecise Exception)を列挙する。
【0158】
【表34】
【0159】
以下に、第五実施例について説明する。ベクトルプロセッサのためにセットされた命令は下表に示すように11個に分類することができる。
【0160】
【表35】
【0161】
下表は流れ制御(Flow Control)命令を列挙する。
【0162】
【表36】
【0163】
論理的分類はブール(Boolean)データ型を支援し、エレメントマスクによって影響される。下表は流れ制御命令を列挙する。
【0164】
【表37】
【0165】
シフト/回転(Shift/Rotate)分類命令はint8,int9,int16及びint32データ型(浮動データ型無し)に対して演算し、エレメントマスクによって影響される。下表はシフト/回転分類命令を列挙する。
【0166】
【表38】
【0167】
算術(Arithmetic)分類命令は一般にint8,int9,int16,int32浮動データ型を支援し、エレメントマスクによって影響される。支援されないデータ型に対する特定の制限に対しては、次の各命令に対する詳細な説明を参照する。VCMPV命令はエレメントマスクに対して演算するので、エレメントマスクによって影響されない。表E5は算術演算命令を列挙する。
【0168】
【表39】
【0169】
MPEG命令はMPEG符号化及び復号化に特に適した命令語の分類であるが、多様な方式で用いられることができる。MPEG命令はint8,int9,int16及びint32データ型を支援し、エレメントマスクによって影響される。下表はMPEG命令を列挙する。
【0170】
【表40】
【0171】
それぞれのデータ型変換(Data Type Conversion)命令は特定データ型を支援し、アーキテクチャがレジスタにある1つ以上のデータ型を支援しないために、エレメントマスクによって影響されない。下表はデータ型変換命令を列挙する。
【0172】
【表41】
【0173】
命令のエレメント間算術(Inter-element Arithmetic)分類はint8,int9,int16,int32及び浮動データ型を支援する。下表はエレメント間算術分類を列挙する。
【0174】
【表42】
【0175】
命令のエレメント間移動(Inter-element Move)分類はバイト、バイト9、ハーフワード及びワードデータサイズを支援する。下表は命令のエレメント間移動分類を列挙する。
【0176】
【表43】
【0177】
ロード/貯蔵(Load/Store)命令はバイト、ハーフワード、及びワードデータサイズの他に特殊なバイト9関連データサイズ演算を支援し、エレメントマスクによって影響されない。下表はロード/貯蔵分類にある命令を列挙する。
【0178】
【表44】
【0179】
大部分のレジスタ移動(Register Move)命令はint8,int9,int16,int32及び浮動データ型を支援し、エレメントマスクによって影響されない。VCMOVM命令のみはエレメントマスクによって影響される。下表は命令のレジスタ移動分類を列挙する。
【0180】
【表45】
【0181】
下表はキャッシュサブシステム130を制御するキャッシュ演算(Cache Operation)分類にある命令を列挙する。
【0182】
【表46】
【0183】
命令語説明命名
命令語セットの明細を簡単にするために、本実施例全般にわたって特殊な用語が用いられる。例えば、命令語オペランドは別に定義されない限り、バイト、バイト9、ハーフワード或いはワードサイズの符号のある2の補数整数である。“レジスタ”という用語は汎用(スカラ或いはベクトル)レジスタを指すのに用いられる。他の種類のレジスタは明示的に説明されている。アセンブリ言語構文(syntax)において、添え字b,b9,h及びwはデータサイズ(バイト、バイト9、ハーフワード、及びワード)と整数データ型(int8,int9,int16,及びint32)の全てを指称する。また、命令語オペランド、演算、及びアセンブリ言語構文の説明に用いられた用語とニモニックは次の通りである:
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である。スカラ演算の場合、NumElemは0である。
EMASK[i]: i番目のエレメントに対するエレメントマスクを指す。これはバイト、バイト9、ハーフワード、或いはワードデータサイズに対してそれぞれVGMR0/1,〜VGMR0/1,VMMR0/1,〜VMMR0/1を表現する。スカラ演算の場合、エレメントマスクはEMASK[i]=0であってもセットされると仮定する。
MMASK[i]:i番目のエレメントに対するエレメントマスクを指称する。これはバイト、バイト9、ハーフワード、或いはワードデータサイズに対してそれぞれVMMR0或いはVMMR1にある1,2或いは4ビットを表現する。
VCSR:ベクトル制御及び状態レジスタ
VCSR〈x〉:VCSRにあるビット或いは複数のビットを示す。“x”はフィールド名である。
VPC:ベクトルプロセッサプログラムカウンタ
VECSIZE:ベクトルレジスタサイズはVEC32で32、VEC64モードで64である。
SPAD:スクラッチパッド
【0184】
Cプログラミング構造は演算の制御流れを説明するのに用いられる。例外は次の通りである:
= 割当(assignment)
: 連結(consatenation)
{x‖y} xとyの間の選択を指す(論理的でないまたは)
sex 指定されたデータサイズへの符号拡張
sex-dp 指定されたデータサイズの倍精度に符号拡張する
sign≫ 符号拡張された(算術)右側シフト
zex 指定されたデータサイズへのゼロ拡張
zero≫ ゼロ拡張された(論理的)右側シフト
≪ 左側シフト(ゼロ充てん(fill in))
trnc7 先頭7ビット(ハーフワードから)を打ち切る(truncate)
trac1 先頭1ビット(バイト9から)を打ち切る
% モジュロ演算者
|expression| 式の絶対値
/ 分割(浮動トデータ型の場合、4つのIEEEラウンディングモードのうち一つを使用する)
// 分割(ラウンドアウェイフロムゼロラウンディングモードを用いる。)
飽和( ) 整数データ型の場合、オーバフローを生成する代わりに最陰或いは最陽の値まで飽和する。浮動データ型の場合、飽和は陽の無限大、陽のゼロ、陰のゼロ、或いは陰の無限大に行われることができる。
【0185】
全般的な命令語フォーマットは図10に表示されており、下記に説明される。
REARフォーマットはロード、貯蔵及びキャッシュ演算命令によって用いられ、REARフォーマットにあるフィールドは下表に提示されたように次の意味をもつ。
【0186】
【表47】
【0187】
ビット17:15は予約されており、アーキテクチャで未来の拡張と互換するためにゼロでなければならない。B:DとTTフィールドの一部符号化は定義されない。
プログラマはこのような符号化が用いられる時にアーキテクチャが予想される結果を指定しないために、前記のような符号化を使用してはいけない。下表はVEC32とVEC64モードで支援される(LTとしてTTフィールドで符号化される〉スカラロード演算を示す。
【0188】
【表48】
【0189】
下表はビットVCSR〈0〉がクリアする時、VEC32モードで(LTとしてTTフィールドで符号化される)支援されるベクトルロード演算を示す。
【0190】
【表49】
【0191】
Bビットは現在或いは交替バンクの指示に用いられる。
下表はビットVCSR〈0〉ビットがセットされる時、VEC64モードで(LTとしてTTフィールドで符号化される)支援されるベクトルロード演算を示す。
【0192】
【表50】
【0193】
Bビットは現在及び代替バンクの概念がVEC64モードに存在しないために、64バイトベクトル演算の指示に用いられる。
下表はVEC32及びVEC64モードの両方で(STとしてTTフィールドで符号化される)支援されるスカラ貯蔵演算を列挙する。
【0194】
【表51】
【0195】
下表はビットVCSR〈0〉がクリアの時、VEC32モードで(STとしてフィールドTTで符号化される)支援されるベクトル貯蔵演算を列挙する。
【0196】
【表52】
【0197】
下表はビットVCSR〈0〉がセットされる時、VEC64モードで(STとしてTTフィールドで符号化される)支援されるベクトル貯蔵演算を列挙する。
【0198】
【表53】
【0199】
Bビットは現在及び代替バンクの概念がVEC64モードに存在しないために、64バイトベクトル演算の指示に用いられる。
REAIフォーマットはロード、貯蔵及びキャッシュ演算命令によって用いられる。下表はREAIフォーマットにあるフィールドの意味を示す。
【表54】
【0200】
REAR及びREAIフォーマットは伝達型に対して同一の符号化を適用する。追加的な符号化に対してはREARフォーマットを参考する。
RRRM5フォーマットは3つのレジスタ或いは2つのレジスタ及び5ビット即値オペランドを提供する。下表はRRRM5フォーマットに対するフィールドを示す。
【0201】
【表55】
【0202】
ビット19:15は予約(RESERVED)されており、アーキテクチャにおける未来の拡張と互換するようにゼロでなければならない。
全てのベクトルレジスタオペランドは別に定義されない限り、現在のバンク(これはバンク0或いはバンク1のいずれかになることができる)を参照する。下表はDS〈1:0〉が00,01,或いは10の時、D:S:M符号化を列挙する。
【0203】
【表56】
【0204】
DS〈1:0〉が11の時、D:S:M符号化は次の意味をもつ。
【0205】
【表57】
【0206】
RRRRフォーマットは4つのレジスタオペランドを提供する。
下表はRRRRフォーマットのフィールドを示す。
【0207】
【表58】
【0208】
全てのベクトルレジスタオペランドは別に定義されない限り、現在のバンク(これはバンク0またはバンク1のいずれかになることができる)を参照する。
R1フォーマットはロード即値命令によって用いられる。下表はRIフォーマットのフィールドを示す。
【0209】
【表59】
【0210】
F:DS〈1:0〉フィールドの任意の符号化は定義されていない。プログラマはこのような符号化が用いられると、アーキテクチャが予想される結果を明示しないために、これら符号化を使用してはいけない。Rdにロードされる値は下表に示したようにデータ型による。
【0211】
【表60】
【0212】
CTフォーマットは下表に示したフィールドを含む。
【0213】
【表61】
【0214】
分岐条件はVCSR[GT:EQ:LT]フィールドを用いる。オーバフロー条件はセットされると、GT,EQ,及びLTビットに先行するVCSR[SO]ビットを用いる。VCCSとVCBARRは前述とは異なり、Cond〈2:0〉フィールドを解釈する。細部事項をついてはそれら命令説明をを参考する。
RRRM9フォーマットは3つのレジスタ或いは2つのレジスタ及び9ビット即値オペランドを明示する。下表はRRRM9フォーマットのフィールドを示す。
【0215】
【表62】
【0216】
ビット19:15はD:S:M符号化が即値オペランドを明示しない時に予約され、未来の互換性を保障するためにゼロでなければならない。
全てのベクトルレジスタオペランドは別に定義されない限り、現在のバンク(これはバンク0或いはバンク1のいずれかになることができる〉を参照する。D:S:M符号化は即値フィールドから抽出された即値が下表に示すようにDS〈1:0〉符号化によって左右されることを除いてはRRRM5フォーマットに対する表56及び表57に示されていることと同一である。
【0217】
【表63】
【0218】
即値フォーマットは浮動データ型とは一緒に使用することができない。
次にMSPベクトル命令が次のアルファベット順で示される。注:
1.命令は別に定義されない限り、エレメントマスクによって影響される。CTフォーマット命令はエレメントマスクによって影響されない。ロード、貯蔵、及びキャッシュ命令からなるREARとREAIフォーマット命令もやはりエレメントマスクによって影響されない。
2.9ビット即値オペランドは浮動データ型とは使用することができない。
3.演算(operation)説明において、ベクトル形式(form)のみが提示される。スカラ演算の場合、単に一つのみを仮定すると、0番目のエレメントが定義される。
4.RRRM5とRRRM9フォーマットの場合、次の符号化が整数データ型(b,b9,h,w)に用いられる。
【表64】
5.RRRM5とRRRM9フォーマットの場合、次の符号化が浮動データ型に用いられる。
【表65】
6.オーバフローを誘発する全ての命令に対して、VCSR〈ISAT〉ビットがセットされる時、int8,int9,int6,int32最大或いは最小限界値までの飽和が適用される。従って、浮動小数点結果はVCSR〈FSAT〉ビットがセットされる時に(−)無限大,(−)ゼロ,(+)ゼロ,或いは(+)無限大まで飽和する。
7.構文から見て、.nはバイト9データサイズを示すために、.b9の代わりに用いられることができる。
8.全ての命令に対して、目的地レジスタ或いはベクトル累算器に返還された浮動小数点結果はIEEE754単精度フォーマットである。浮動小数点結果は累算器の下部に記録され、上部は修正されない。
【0219】
VAAS3 加算及び(1,0,1)の符号加算
●フォーマット
【数13】
●アセンブラ構文
VAAS3.dt VRd,VRa,VRb
VAAS3.dt VRd,VRa,SRb
VAAS3.dt SRd,SRa,SRb
ここで、dt={b,b9,h,w}
●支援モード
【数14】
●説明
ベクトル/スカラレジスタRaの内容がRbに加算されて中間結果を生成し、その後中間結果はRaの符号に加算され、最終結果はベクトル/スカラレジスタRdに貯蔵される。
●演算
【数15】
●例外
オーバフロー
【0220】
VADAC 加算及び累算
●フォーマット
【数16】
●アセンブラ構文
VADAC.dt VRc,VRd,VRa,VRb
VADAC.dt SRc,SRd,SRa,SRb
ここで、dt={b,b9,h,w}。
●支援モード
【数17】
●説明
RaとRbオペランドの各エレメントをベクトル累算器のそれぞれの倍精度エレメントに加算し、各エレメントの倍精度の和をベクトル累算器と目的地レジスタRc及びRdの全てに貯蔵する。Ra及びRbは指定されたデータ型を使用するに反して、VACは適当な倍精度データ型(int8,int9,int16,及びint32のそれぞれに対して16,18,32,及び64ビット)を用いる。それぞれの倍精度エレメントの上部はVACHとRcに貯蔵され、Rcにあるその結果は定義されない。
●演算
【数18】
VADACL 加算及びロー累算
●フォーマット
【数19】
●アセンブラ構文
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}。
●支援モード
【数20】
●説明
RaとRb/即値オペランドの各エレメントをベクトル累算器のそれぞれの拡張された精度エレメントに加算し、拡張された精度の合計をベクトル累算器に貯蔵し、その下位精度を目的地レジスタRdに返還する。Ra及びRb/即値は指定されたデータ型を使用するに対して、VACは適当な倍精度データ型(int8,int9,int16及びint32にそれぞれに対して16,18,32及び64ビット)を用いる。それぞれの拡張された精度エレメントの上部はVACHに貯蔵される。
●演算
【数21】
【0221】
VADD 加算
●フォーマット
【数22】
●アセンブラ構文
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,f}。
●支援モード
【数23】
●説明
RaとRb/即値オペランドを加算し、その合計を目的地レジスタRdに返還する。
●演算
【数24】
●例外
オーバフロー、浮動小数点無効オペランド
【0222】
VADDH 隣接する2つのエレメント加算
●フォーマット
【数25】
●アセンブラ構文
VADDH.dt VRd,VRa,VRb
VADDH.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}。
●支援モード
【数26】
●説明
【数27】
●演算
【数28】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0223】
VAND AND
●フォーマット
【数29】
●アセンブラ構文
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が同一演算を明示することに留意する。
●支援モード
【数30】
●説明
Ra及びRb/即値オペランドを論理的にANDし、その結果を目的地レジスタRdに返還する。
●演算
【数31】
●例外
無し
【0224】
VANDC AND補数
●フォーマット
【数32】
●アセンブラ構文
VANDC.dt VRd,VRa,VRb
VANDC.dt VRd,VRa,SRb
VANDC.dt VRd,VRa,#IMM
VANDC.dt SRd,SRa,SRb
VANDC.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w},.wと.fが同一の演算を明示することに留意する。
●支援モード
【数33】
●説明
Ra及びRb/即値オペランドの補数を論理的にADNし、その結果を目的地レジスタRdに返還する。
●演算
【数34】
●例外
無し
【0225】
VASA 算術シフト累算器
●フォーマット
【数35】
●アセンブラ構文
VASAL.dt
VASAR.dt
ここで、dt={b,b9,h,w}であり、Rは左側或いは右側のシフト方向を示す。
●支援モード
【数36】
●説明
ベクトル累算器レジスタの各データエレメントはゼロが右側(もしR=0であれば)から充てん(fill)され、1ビット位置だけシフトされるか或いは符号拡張(もしR=1であれば)で1ビット位置だけ右にシフトされる。この結果はベクトル累算器に貯蔵される。
●演算
【数37】
●例外
オーバフロー
【0226】
VASL 左側算術シフト
●フォーマット
【数38】
●アセンブラ構文
VASL.dt VRd,VRa,SRb
VASL.dt VRd,VRa,#IMM
VASL.dt SRd,SRa,SRb
VASL.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}。
●支援モード
【数39】
●説明
ベクトル/スカラレジスタRaの各データエレメントはスカラレジスタRb或いはIMMフィールドに与えられたシフト量だけゼロが右側から充てんされ1ビット左にシフトされ、その結果はベクトル/スカラレジスタRdに貯蔵される。このようなエレメントがオーバフローを発生させると、その結果はその符号によって最大陽或いは最大陰の値まで飽和する。前記シフト量は符号のない整数となるように定義される。
●演算
【数40】
●例外
なし
●プログラミング注釈
shift_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られる。バイト、ハーフワードデータ型の場合、プログラマはデータサイズにおいてビットの数字より小さいかもしくは等しいシフト量を正確に明示する責任がある。もしシフト量が指定されたデータサイズより大きければ、エレメントはゼロで充てんされる。
【0227】
VASR 右側算術シフト
●フォーマット
【数41】
●アセンブラ構文
VASR.dt VRd,VRa,SRb
VASR.dt VRd,VRa,#IMM
VASR.dt SRd,SRa,SRb
VASR.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}。
●支援モード
【数42】
●説明
ベクトル/スカラレジスタRaの各データエレメントはスカラレジスタRb或いはIMMフィールドの最下位ビットに与えられたシフト量だけ最上位ビット位置で符号が拡張されて右に算術的にシフトされ、その結果はベクトル/スカラレジスタRdに貯蔵される。シフト量は符号のない整数となるように定義される。
●演算
【数43】
●例外
なし
●プログラミング注釈
shift_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られる。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおいてビットの数字より小さいか等しいシフト量を正確に明示する責任がある。もしシフト量が指定されたデータサイズより大きければ、エレメントは符号ビットで充てんされる。
【0228】
VASS3 加算及び(−1,0,1)の符号減算
●フォーマット
【数44】
●アセンブラ構文
VASS3.dt VRd,VRa,VRb
VASS3.dt VRd,VRa,SRb
VASS3.dt SRd,SRa,SRb
ここで、dt={b,b9,h,w}。
●支援モード
【数45】
●説明
ベクトル/スカラレジスタRaの内容がRbに加算されて中間結果を出し、その後前記中間結果からRaの符号が減算され、最終結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数46】
●例外
オーバフロー
【0229】
VASUB 減算の絶対値
●フォーマット
【数47】
●アセンブラ構文
VASUB.dt VRd,VRa,VRb
VASUB.dt VRd,VRa,SRb
VASUB.dt VRd,VRa,#IMM
VASUB.dt SRd,SRa,SRb
VASUB.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}。
●支援モード
【数48】
●説明
ベクトル/スカラレジスタRb或いはIMMフィールドの内容がベクトル/スカラレジスタRaの内容から減算され、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数49】
●例外
オーバフロー
【0230】
VAVG 2つのエレメントの平均
●フォーマット
【数50】
●アセンブラ構文
VAVG.dt VRd,VRa,VRb
VAVG.dt VRd,VRa,SRb
VAVG.dt SRd,SRa,SRb
ここで、dt={b,b9,h,w,f}であり、VAVGTを用いて整数データ型に対する“打切り(truncate)”ラウンディングモードを指定する。
●支援モード
【数51】
●説明
ベクトル/スカラレジスタRaの内容がベクトル/スカラレジスタRbの内容に加えられて中間結果を出し、その後中間結果は2で割り、最終結果がベクトル/スカラレジスタRdに貯蔵される。整数データ型の場合、ラウンディングモードはもしT=1であれば打ち切り、もしT=0(デフォルト)であればゼロからラウンドアェイされる。浮動データ型の場合、ラウンディングモードはVCSR〈RMODE〉に指定されている。
●演算
【数52】
●例外
なし
【0231】
VAVGH 隣接する2つのエレメントの平均
●フォーマット
【数53】
●アセンブラ構文
VAVGH.dt VRd,VRa,VRb
VAVGH.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}であり、VAVGHTを用いて整数データ型に対する“打切り(truncate)”ラウンディングモードを指定する。
●支援モード
【数54】
●説明
各エレメントに対して、エレメントの隣接する2つの対を平均する。整数データ型の場合、ラウンディングモードはもしT=1であれば打ち切り、もしT=0(デフォルト)であればゼロからラウンドアェイされる。浮動データ型の場合、ラウンディングモードはVCSR〈RMODE〉に指定されている。
【数55】
●演算
【数56】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0232】
VAVGQ Quad平均
●フォーマット
【数57】
●アセンブラ構文
VAVGQ.dt VRd,VRa,VRb
ここで、dt={b,b9,h,w}であり、VAVGQTを用いて整数データ型に対する“打切り(truncate)”ラウンディングモードを指定する。
●支援モード
【数58】
●説明
この命令はVEC64モードに支援されない。以下の図に示されているように、T(打切りのために1、ゼロからのラウンドアェイのために0、デフォルト)に指定されたラウンディングモードを使用して4つのエレメントの平均を算出する。最左側エレメント(Dn-1)は定義されていない。
【数59】
●演算
【数60】
●例外
なし
【0233】
VCACHE キャッシュ演算
●フォーマット
【数61】
●アセンブラ構文
VCACHE.fc SRb,SRi
VCACHE.fc SRb,#IMM
VCACHE.fc SRb+,SRi
VCACHE.fc SRb+,#IMM
ここで、fc={0,1}。
●説明
この命令はベクトルデータキャッシュのソフトウェア管理のために提供される。前記データキャッシュの一部或いは全部がスクラッチパッドから構成される時、この命令はスクラッチパッドに影響を与えない。
【0234】
【表66】
【0235】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない
【0236】
VCAND 補数AND
●フォーマット
【数62】
●アセンブラ構文
VCAND.dt VRd,VRa,VRb
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が同一の演算を指定することに留意する。
●支援モード
【数63】
●説明
RaとRb/即値オペランドの補数を論理的にANDし、その結果は目的地レジスタRdに返還する。
●演算
【数64】
●例外
なし
【0237】
VCBARR 条件バリヤ
●フォーマット
【数65】
●アセンブラ構文
VCBARR.cond
ここで、cond={0,−7}、それぞれの条件は後からニモニック(mnemonic)で与えられる。
●説明
条件が有効である限り、命令と全ての後続命令(後でプログラム順序に表れる命令)を停滞させる。Cond〈2:0〉フィールドはCTフォーマットで他の条件命令とは相違するように解析される。
【表67】
●演算
【数66】
●例外
なし
●プログラミング注釈
この命令は命令実行を強制に一連化させるためにソフトウェアに提供される。この命令は強制に不正確な実行を正確に報告させるに用いられることができる。例えば、もしこの命令が例外を誘発する虞のある算術命令の直後に用いられると、この例外はプログラムカウンタがこの命令をアドレスするものと報告される。
【0238】
VCBR 条件分岐
●フォーマット
【数67】
●アセンブラ構文
VCBR.cond #Offset
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
Condが真であれば分岐する。これは遅延した分岐ではない。
●演算
【数68】
●例外
無効命令アドレス
【0239】
VCBRI 条件分岐インダイレクト
●フォーマット
【数69】
●アセンブラ構文
VCBRI.cond SRb
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
Condが真であれば、分岐する。これは遅延した分岐ではない。
●演算
【数70】
●例外
無効命令アドレス
【0240】
VCCS 条件文脈切換
●フォーマット
【数71】
●アセンブラ構文
VCCS #Offset
●説明
もしVIMSK〈cse〉が真であれば、文脈切換サブルーチンにジャンプする。これは遅延した分岐ではない。もし、VIMSK〈cse〉が真であれば、VPC+4(返還アドレス)が返還アドレススタックに貯蔵される。もしそうでなければ、実行はVPC+4で続けられる。
●演算
【数72】
●例外
返還アドレススタックオーバフロー
【0241】
VCHGCR 制御レジスタ変更
●フォーマット
【数73】
●アセンブラ構文
VCHGCRモード
●説明
この命令はベクトルプロセッサの動作モードを変える。モードにある各ビットは次のように指定される:
【表68】
●演算
●例外
なし
●プログラミング注釈
この命令はVMOV命令で可能なものよりさらに効率的な方法でVCSRにある制御ビットを変更するためにハードウェアに提供される。
【0242】
VCINT 条件インタラプトARM7
●フォーマット
【数74】
●アセンブラ構文
VCINT.cond #ICODE
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
もしCondが真であれば、実行を中止し、もしイネーブルされれば、ARM7をインタラプトする。
●演算
【数75】
●例外
VCINTインタラプト
【0243】
VCJOIN ARM7タスクと条件結合
●フォーマット
【数76】
●アセンブラ構文
VCJOIN.cond #Offsset
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
もしCondが真であれば、実行を中止し、もしイネーブルされれば、ARM7をインタラプトする。
●演算
【数77】
●例外
VCJOINインタラプト
【0244】
VCJSR サブルーチンへの条件ジャンプ
●フォーマット
【数78】
●アセンブラ構文
VCJSR.cond #Offsset
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
もしCondが真であれば、サブルーチンにジャンプする。これは遅延した分岐ではない。
もしCondが真であれば、VPC+4(返還アドレス)が返還アドレススタックに貯蔵される。もしそうでなければ、実行はVPC+4で続けられる。
●演算
【数79】
●例外
返還アドレススタックオーバフロー
【0245】
VCJSRI サブルーチンインダイレクトに条件ジャンプ
●フォーマット
【数80】
●アセンブラ構文
VCJSRI.cond SRb
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
もしCondが真であれば、サブルーチンにインダイレクトジャンプする。これは遅延した分岐でない。
もしCondが真であれば、VPC+4(返還アドレス)が返還アドレススタックに貯蔵される。もしそうでなければ、実行はVPC+4で続けられる。
●演算
【数81】
●例外
返還アドレススタックオーバフロー
【0246】
VCMOV 条件移動
●フォーマット
【数82】
●アセンブラ構文
VCMOV.dt Rd,Rb,cond
VCMOV.dt Rd,#IMM,cond
ここで、dt={b,b9,h,w,f}、cond={un, lt,eq,le,gt,ne,ge,ov}。.fデータ型 が9ビット即値オペランドと共に支援されないことを除いては、. fと.wは同一の演算を指定していることに留意する。
●支援モード
【数83】
●説明
もしCondが真であれば、レジスタRbの内容がレジスタRdに移動される。ID〈1:0〉はソースと目的地レジスタを付加的に明示する。
VR 現在のバンクベクトルレジスタ
SR スカラレジスタ
SY 同期化レジスタ
VAC ベクトル累算器レジスタ(VACレジスタ符号化に対するVMOV説明を参照する。)
【表69】
●演算
【数84】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。VCMOVMはエレメントマスクによる影響を受ける。ベクトル累算器にある拡張された浮動小数点精度表現は8エレメントに対して全ての576ビットを使用する。従って、累算器に関係したベクトルレジスタ移動は.b9データサイズを明示すべきである。
【0247】
VCMOVM エレメントマスクと条件移動
●フォーマット
【数85】
●アセンブラ構文
VCMOVM.dt Rd,Rb,cond
VCMOVM.dt Rd,#IMM,cond
ここで、dt={b,b9,h,w,f}、cond={un, lt,eq,le,gt,ne,ge,ov}、.fデータ型 が9ビット即値オペランドと共に支援されないことを除いては. fと.wは同一の演算を指定していることに留意する。
●支援モード
【数86】
●説明
もしCondが真であれば、レジスタRbの内容がレジスタRdに移動される。また、ID〈1:0〉はソースと目的地レジスタを付加的に明示する。
SR スカラレジスタ
VAC ベクトル累算器レジスタ(VACレジスタ符号化に対するVMOV説明を参照する。)
【表70】
●演算
【数87】
●例外
なし
●プログラミング注釈
この命令はVMMRエレメントマスクによる影響を受ける。VCMOVはエレメントマスクによって影響されない。ベクトル累算器にある拡張された浮動小数点精度表現は8エレメントに対して全ての576ビットを使用する。従って、累算器に関係したベクトルレジスタ移動は.b9データサイズを明示すべきである。
【0248】
VCMPV マスクの比較及びセット
●フォーマット
【数88】
●アセンブラ構文
VCMPV.dt VRd,VRb,cond.mask
VCMPV.dt VRd,SRb,cond.mask
ここで、dt={b,b9,h,w,f}、cond={lt, eq,le,gt,ne,ge}、mask={VGMR,V MMR}、もしいずれのマスクも指定されていなければ、VG MRが仮定される。
●支援モード
【数89】
●説明
ベクトルレジスタVRa及びVRbの内容が減算演算(VRa[i]−VRb[i])を行うことによりエレメント方式で比較され、(もしK=0であれば)VGMR或いは(もしK=1であれば)VMMRレジスタにある対応するビット#iは比較の結果がVCMPV命令のCondフィールドと一致するとセットされる。例えば、もしCondフィールドが(LT)より小さい場合、VGMR[i]またはVMMR[i]ビットがもしVRa[i]<VRb[i]であればセットされる。
●演算
【数90】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0249】
VCNTLZ 先頭ゼロのカウント
●フォーマット
【数91】
●アセンブラ構文
VCNTLZ.dt VRd,VRb
VCNTLZ.dt SRd,SRb
ここで、dt={b,b9,h,w}。
●支援モード
【数92】
●説明
Rbにある各エレメントに対して、先頭ゼロの数をカウントし、Rdにカウントを返還する。
●演算
【数93】
●例外
なし
●プログラミング注釈
もしエレメントにある全てのビットがゼロであれば、その結果はエレメントサイズ(バイト、バイト9、ハーフワード、或いはワードのそれぞれに対して8,9,16,或いは32)と同一である。先頭ゼロのカウントは(もしVCMPR命令以後に用いられる場合)エレメント位置のインデックスと反転関係をもつ。エレメント位置に変換するため、所定のデータ型に対してNumElemからVCNTLZの結果を減算する。
【0250】
VCOR ORの補数
●フォーマット
【数94】
●アセンブラ構文
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が同一の演算を明示することに留意する。
●支援モード
【数95】
●説明
Ra及びRb/即値オペランドの補数を論理的にORし、その結果を目的地レジスタRdに返還する。
●演算
【数96】
●例外
なし
【0251】
VCRSR サブルーチンからの条件返還
●フォーマット
【数97】
●アセンブラ構文
VCRSR.cond
ここで、cond={un,lt,eq,le,gt,ne,ge,ov}。
●説明
もしCondが真であれば、返還アドレススタックに貯蔵された返還アドレスから実行が続けられる。もしそうでなければ、VPC+4で実行を続ける。
●演算
【数98】
●例外
無効命令アドレス、アドレススタックオーバフロー返還。
【0252】
VCVTB9 バイト9データ型の変換
●フォーマット
【数99】
●アセンブラ構文
VCVTB9.md VRd,VRb
VCVTB9.md SRd,SRb
ここで、md={bb9,b9h,hb9}
●支援モード
【数100】
●説明
Rbにある各エレメントはバイトからバイト9(bb9)へ、バイト9からハーフワード(b9h)へ、或いはハーフワードからバイト9(hb9)へ変換される。
●演算
【数101】
●例外
なし
●プログラミング注釈
b9hモードと共にこの命令を使用する前に、プログラマはシャフル(shuffle)演算でベクトルレジスタにある減少したエレメントの数を調整する必要がある。hb9モードと共にこの命令を使用した後、プログラマはシャフル演算で目的地ベクトルレジスタにある増加したエレメントの数を調整する必要がある。この命令はエレメントマスクによって影響されない。
【0253】
VCVTFF 浮動小数点のを固定小数点への変換
●フォーマット
【数102】
●アセンブラ構文
VCVTFF VRd,VRa,SRb
VCVTFF VRd,VRa,#IMM
VCVTFF SRd,SRa,SRb
VCVTFF SRd,SRa,#IMM
●支援モード
【数103】
●説明
ベクトル/スカラレジスタRaの内容が32ビット浮動小数点からフォーマット〈X,Y〉の固定小数点実数に変換されるが、ここでYの幅はRb(モジュロ32)或いはIMMフィールドによって指定され、Xの幅は(32−Yの幅)によって指定される。Xは整数部分を指称し、Yは分数部分を指称する。その結果はベクトル/スカラレジスタRdに貯蔵される。
●演算
【数104】
●例外
オーバフロー
●プログラミング注釈
この命令はワードデータサイズのみを支援する。この命令はアーキテクチャがレジスタ内の複数データ型を支援しないために、エレメントマスクを使用しない。この命令は整数データ型に対してゼロラウンディングモードからラウンドアウェイを使用する。
【0254】
VCVTIF 整数の浮動小数点への変換
●フォーマット
【数105】
●アセンブラ構文
VCVTIF VRd,VRb
VCVTIF VRd,SRb
VCVTIF SRd,SRb
●支援モード
【数106】
●説明
ベクトル/スカラレジスタRbの内容がint32から浮動データ型に変換され、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数107】
●例外
なし
●プログラミング注釈
この命令はワードデータサイズのみを支援する。この命令はアーキテクチャがレジスタ内の複数データ型を支援しないために、エレメントマスクを使用しない。
【0255】
VD1CBR VCR1の減少及び条件分岐
●フォーマット
【数108】
●アセンブラ構文
VD1CBR.cond #Offset
ここで、cond={un,lt,eq,gt,ne, ge,ov}。
●説明
VCR1を減少させ、もしCondが真であれば分岐する。これは遅延した分岐ではない。
●演算
【数109】
●例外
無効命令アドレス
●プログラミング注釈
VCR1は分岐条件が点検される前に減少されることに留意する。VCR1が0の時、この命令の実行はループカウントを232−1に効果的にセットさせる。
【0256】
VD2CBR VCR2の減少及び条件分岐
●フォーマット
【数110】
●アセンブラ構文
VD2CBR.cond #Offset
ここで、cond={un,lt,eq,gt,ne, ge,ov}。
●説明
VCR2を減少させ、もしCondが真であれば分岐する。これは遅延した分岐ではない。
●演算
【数111】
●例外
無効命令アドレス
●プログラミング注釈
VCR2は分岐条件が点検される前に減少されることに留意する。VCR2が0の時、この命令の実行はループカウントを232−1に効果的にセットさせる。
【0257】
VD3CBR VCR3の減少及び条件分岐
●フォーマット
【数112】
●アセンブラ構文
VD3CBR,cond #Offset
ここで、cond={un,lt,eq,gt,ne,ge,ov}。
●説明
VCR3を減少させ、もしCondが真であれば分岐する。これは遅延した分岐ではない。
●演算
【数113】
●例外
無効命令アドレス
●プログラミング注釈
VCR3は分岐条件が点検される前に減少されることに留意する。VCR3が0の時、この命令の実行はループカウントを232−1に効果的にセットさせる。
【0258】
VDIV2N 2 n による分割
●フォーマット
【数114】
●アセンブラ構文
VDIV2N.dt VRd,VRa,VRb
VDIV2N.dt VRd,VRa,#IMM
VDIV2N.dt SRd,SRa,SRb
VDIV2N.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}
●支援モード
【数115】
●説明
ベクトル/スカラレジスタRaの内容を(ここでnがスカラレジスタRb或いはIMMの陽の整数である場合)2nによって割り、その結果がベクトル/スカラレジスタRdに貯蔵される。この命令はラウンディングモードとして打切り(truncate)(ラウンドツウワードゼロ)を使用する。
●演算
【数116】
●例外
なし
●プログラミング注釈
NはSRb或いはIMM〈4:0〉から5ビット数として取られる。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおける精度より小さいか等しいNの値を正確に明示する責任がある。もし明示されたデータサイズの精度より大きければ、エレメントが符号ビットで充てんされる。この命令はラウンドツウワードゼロラウンディングモードを使用する。
【0259】
VDIV2N.F 2 n 浮動による分割
●フォーマット
【数117】
●アセンブラ構文
VDIV2N.f VRd,VRa,SRb
VDIV2N.f VRd,VRa,#IMM
VDIV2N.f SRd,SRa,SRb
VDIV2N.f SRd,SRa,#IMM
●支援モード
【数118】
●説明
ベクトル/スカラレジスタRaの内容を(ここで、nがスカラレジスタRb或いはIMMの陽の整数である場合)2nによって割り、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数119】
●例外
なし
●プログラミング注釈
NがSRb或いはIMM〈4:0〉から5ビット数として取られることに留意する。
【0260】
VDIVI 初期化分割−不完全
●フォーマット
【数120】
●アセンブラ構文
VDIVI.ds VRb
VDIVI.ds SRb
ここで、ds={b,b9,h,w}。
●支援モード
【数121】
●説明
非復原符号付き整数除算の初期段階を実行する。被除数は累算器にある倍精度符号付き整数である。もし除数が単精度でれば、倍精度で符号が拡張されてVAC0H及びVAC0Lに貯蔵されるべきである。除数はRbにある単精度の符号付き整数である。
もし被除数の符号(sign)が除数の符号と同一であれば、Rbが累算器の上位から減算される、もしそうでなければ、Rbが累算器の上位に加算される。
●演算
【数122】
●例外
なし
●プログラミング注釈
プログラマは除算段階以前にゼロケースでオーバフロー或いは除算を検出する責任がある。
【0261】
VDIVS 除算段階−不完全
●フォーマット
【数123】
●アセンブラ構文
VDIVS.ds VRb
VDIVS.ds SRb
ここで、ds={b,b9,h,w}。
●支援モード
【数124】
●説明
被復原符号付き除算の一つの循環段階を行う。この命令はデータサイズ(即ち、int8データ型に対して8回、int9に対して9回、int16に対して16回、そしてint32データ型に対して32回)だけ実行されるべきである。VDIVI命令は累算器で初期部分の残りを生成する除算段階前に使用されるべきである。除数はRbにある符号付き単精度整数である。一旦指数ビットが段階ごとに抽出されると、累算器の最下位ビットにシフトされる。
累算器にある部分残りの符号がRbにある除数の符号と同一であれば、Rbが累算器の上位から減算される。そうでなければ、Rbは累算器の上位に加えられる。もし累算器にある結果として現れる部分残り(加算或いは減算の結果)が除数の符号と同一であれば、指数ビットは1である。そうでなければ、指数ビットは0である。累算器は指数ビットを充てんするように1ビット位置だけ左にシフトされる。除算段階の結果として、残りは累算器の上位に、指数は累算器の下位にある。指数は1の補数形態である。
●演算
【0262】
VESL 1だけ左にエレメントをシフトする
●フォーマット
【数125】
●アセンブラ構文
VESL.dt SRc,VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数126】
●説明
ベクトルレジスタRaにあるエレメントを1位置だけ左にシフトし、スカラレジスタRbから充てんする。シフトアウットされる最左側のエレメントはスカラレジスタRcに返還され、他のエレメントはベクトルレジスタRdに返還される。
【数127】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0263】
VESR 1だけ右にエレメントをシフトする
●フォーマット
【数128】
●アセンブラ構文
VESR.dt SRc,VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数129】
●説明
ベクトルレジスタRaにあるエレメントを1位置だけ右にシフトし、スカラレジスタRbから充てんする。シフトアウットされる最右側のエレメントはスカラレジスタRcに返還され、他のエレメントはベクトルレジスタRdに返還される。
【数130】
●演算
【数131】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0264】
VEXTRT 1つのエレメントの抽出
●フォーマット
【数132】
●アセンブラ構文
VEXTRT.dt SRd,VRa,SRb
VEXTRT.dt SRd,VRa,#IMM
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数133】
●説明
そのインデックスがスカラレジスタRb或いはIMMフィールドで明示されたRaベクトルレジスタからエレメントを抽出し、それをスカラレジスタRdに貯蔵する。
●演算
【数134】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0265】
VEXTSGN2 (1,−1)の符号抽出
●フォーマット
【数135】
●アセンブラ構文
VEXTSGN2.dt VRd,VRa
VEXTSGN2.dt SRd,SRa
ここで、dt={b,b9,h,w}。
●支援モード
【数136】
●説明
ベクトル/スカラレジスタRaエレメント方式の内容の符号値が計算され、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数137】
●例外
なし
【0266】
VEXTSGN3 (1,0,−1)の符号抽出
●フォーマット
【数138】
●アセンブラ構文
VEXTSGN3.dt VRd,VRa
VEXTSGN3.dt SRd,SRa
ここで、dt={b,b9,h,w}。
●支援モード
【数139】
●説明
ベクトル/スカラレジスタRaエレメント方式の内容の符号値が計算され、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数140】
●例外
なし
【0267】
VINSRT 1つのエレメントの挿入
●フォーマット
【数141】
●アセンブラ構文
VINSRT.dt VRd,SRa,SRb
VINSRT.dt VRd,SRa,#IMM
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数142】
●説明
スカラレジスタRb或いはIMMフィールドによって明示されたインデックスでスカラレジスタRaにあるエレメントをベクトルレジスタRdに挿入する。
●演算
【数143】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0268】
VL ロード
●フォーマット
【数144】
●アセンブラ構文
VL.lt Rd,SRb,SRi
VL.lt Rd,SRb,#IMM
VL.lt Rd,SRb+,SRi
VL.lt Rd,SRb+,#IMM
ここで、lt={b,bz9,bs9,h,w,4,8,16, 32,64}、Rd={VRd,VRAd,SRd}、.bと. bs9は同一の演算を明示し、.64とVRAdは共に指定さ れ得ないことに留意する。キャッシュ−オフロードのためにVL OFFを使用する。
●説明
現在或いは代替バンクにあるベクトルレジスタ或いはスカラレジスタをロードする。
●演算
【数145】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0269】
VLCB 循環バッファからのロード
●フォーマット
【数146】
●アセンブラ構文
VLCB.lt Rd,SRb,SRi
VLCB.lt Rd,SRb,#IMM
VLCB.lt Rd,SRb+,SRi
VLCB.lt Rd,SRb+,#IMM
ここで、lt={b,bz9,bs9,h,w,4,8,16, 32,64}、Rd={VRd,VRAd,SRd}、.bと. bs9は同一の演算が明示され、.64とVRAdは共に明示 され得ないことに留意する。キャッシュ−オフロードのためにV LCBOFFを使用する。
●説明
SRb+1にあるBEGINポインタとSRb+2にあるENDポインタで指された循環バッファからベクトルレジスタ或いはスカラレジスタをロードする。もしアドレス更新演算は勿論のこと、ロード以前にENDアドレスより大きければ有効アドレスが調整される。また、循環バッファバウンドはそれぞれ.h及び.wスカラレジスタに対してハーフワード及びワード境界上で整列されなければならない。
●演算
【数147】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。プログラマは次の条件が予想通りに作動するように確かめなければならない。
BEGIN<EA<2*END−BEGIN
即ち、EA−END<END−BEGINは勿論、EA>BEGIN
【0270】
VLD 二重ロード
●フォーマット
【数148】
●アセンブラ構文
VLD.lt Rd,SRb,SRi
VLD.lt Rd,SRb,#IMM
VLD.lt Rd,SRb+,SRi
VLD.lt Rd,SRb+,#IMM
ここで、lt={b,bz9,bs9,h,w,4,8,16, 32,64}、Rd={VRd,VRAd,SRd}、.bと bs9は同一の演算が明示され、.64とVRAdは共に明示 され得ないことに留意する。キャッシュ−オフロードのためにV LDOFFを使用する。
●説明
現在或いは代替バンクにある2つのベクトルレジスタ或いは2つのスカラレジスタをロードする。
●演算
【数149】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0271】
VLI 即値ロード
●フォーマット
【数150】
●アセンブラ構文
VLI.dt VRd,#IMM
VLI.dt SRd,#IMM
ここで、dt={b,b9,h,f}
●説明
即値をスカラまたはベクトルレジスタにロードする。スカラレジスタロードの場合、バイト、バイト9、ハーフワード或いはワードはデータ型によってロードする。バイト、バイト9及びハーフワードデータ型の場合、影響を受けないバイト(バイト9)は修正されない。
●演算
Rd=以下の表を参照する:
【数151】
●例外
なし
【0272】
VLQ Quadロード
●フォーマット
【数152】
●アセンブラ構文
VLQ.lt Rd,SRb,SRi
VLQ.lt Rd,SRb,#IMM
VLQ.lt Rd,SRb+,SRi
VLQ.lt Rd,SRb+,#IMM
ここで、lt={b,bz9,bs9,h,w,4,8,16, 32,64}、Rd={VRd,VRAd,SRd}、.bと. bs9は同一の演算を明示し、.64とVRAdは共に明示 され得ないことに留意する。キャッシュ−オフロードのためにV LQOFFを使用する。
●説明
現在或いは代替バンクにある4つのベクトルレジスタ或いは4つのスカラレジスタをロードする。
●演算
【数153】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0273】
VLR 反転ロード
●フォーマット
【数154】
●アセンブラ構文
VLR.lt Rd,SRb,SRi
VLR.lt Rd,SRb,#IMM
VLR.lt Rd,SRb+,SRi
VLR.lt Rd,SRb+,#IMM
ここで、lt={4,8,16,32,64}、Rd={VRd,VRAd}、.64とVRAdは共に明示され得ないことに留意する。キャッシュ−オフロードのためにVLROFFを使用する。
●説明
逆エレメント順序でベクトルレジスタをロードする。この命令はスカラ目的地レジスタを支援しない。
●演算
【数155】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0274】
VLSL 論理的左側シフト
●フォーマット
【数156】
●アセンブラ構文
VLSL.dt VRd,VRa,SRb
VLSL.dt VRd,VRa,#IMM
VLSL.dt SRd,SRa,SRb
VLSL.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w,}。
●支援モード
【数157】
●説明
ベクトル/スカラレジスタRaにある各エレメントはスカラレジスタRb或いはIMMフィールドに与えられたシフト量だけゼロが最下位ビット(LSB)位置に充てんされながら論理的に左にビットシフトされ、その結果はベクトル/スカラレジスタRdに貯蔵される。
●演算
【数158】
●例外
なし
●プログラミング注釈
shift_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られることに注意する。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおけるビット数より少ないか等しいシフト量を正確に明示する責任がある。もしシフト量が明示されたデータサイズより大きければ、エレメントはゼロで充てんされる。
【0275】
VLSR 論理的右側移動
●フォーマット
【数159】
●アセンブラ構文
VLSR.dt VRd,VRa,SRb
VLSR.dt VRd,VRa,#IMM
VLSR.dt SRd,SRa,SRb
VLSR.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w,}。
●支援モード
【数160】
●説明
ベクトル/スカラレジスタRaにある各エレメントはスカラレジスタRb或いはIMMフィールドに与えられたシフト量だけゼロが最上位ビット(MSB)場所に充てんされながら論理的に右にビットシフトされ、その結果はベクトル/スカラレジスタRdに貯蔵される。
●演算
【数161】
●例外
なし
●プログラミング注釈
shift_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られることに注意する。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおいてビット数より小さいか等しいシフト量を正確に明示する責任がある。もしシフト量が明示されたデータサイズより大きければ、エレメントはゼロで充てんされる。
【0276】
VLWS ストライドにロードする
●フォーマット
【数162】
●アセンブラ構文
VLWS.lt Rd,SRa,SRi
VLWS.lt Rd,SRb,#IMM
VLWS.lt Rd,SRb+,SRi
VLWS.lt Rd,SRb+,#IMM
ここで、lt={4,8,16,32},Rd={VRd,VRAd}、.64モードは支援されない−その代わりにVLを使用する。キャッシュオフロードのためにVLWSOFFを使用する。
●説明
有効アドレスから始めて、ストライド制御レジスタ(Stride Control register)としてスカラレジスタSRb+1を用いて32バイトがメモリからベクトルレジスタVRdにロードされる。LTはブロックサイズ、各ブロックに対してロードする連続的なバイトの数を明示する。SRb+1はストライド(stride)、2つの連続するブロックの始まりを分離するバイトの数を明示する。ストライドはブロックサイズと同一か或いはさらに大きいべきである。EAはデータサイズが整列されるべきである。ストライドとブロックサイズは複数のデータサイズでなければならない。
●演算
【数163】
●例外
無効データアドレス、非整列アクセス
【0277】
VMAC 乗算及び累算
●フォーマット
【数164】
●アセンブラ構文
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}。
●支援モード
【数165】
●説明
倍精度中間結果を出すために、Raの各エレメントをRbにある各エレメントと乗算し、前記中間結果の各倍精度エレメントをベクトル累算器の各倍精度エレメントに加算し、各エレメントの倍精度の合計を前記ベクトル累算器に貯蔵する。 RaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上位部分はVACHに貯蔵される。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数166】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりにint16データ型を用いる。
【0278】
VMACF 分数の乗算及び累算
●フォーマット
【数167】
●アセンブラ構文
VMACF.dt VRa,VRb
VMACF.dt VRa,SRb
VMACF.dt VRa,#IMM
VMACF.dt SRa,SRb
VMACF.dt SRa,#IMM
ここで、dt={b,h,w,}。
●支援モード
【数168】
●説明
倍精度中間結果を出すために、VRaの各エレメントをRbの各エレメントと乗算し、前記倍精度中間結果を左に1ビットシフトし、シフトされた中間結果の各倍精度エレメントをベクトル累算器の各倍精度エレメントに加算し、各エレメントの倍精度の合計を前記ベクトル累算器に貯蔵する。VRaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はVACHに貯蔵される。
●演算
【数169】
●例外
オーバフロー、
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0279】
VMACL ローの乗算及び累算
●フォーマット
【数170】
●アセンブラ構文
VMACL.dt VRd,VRa,VRb
VMACL.dt VRd,VRa,SRb
VMACL.dt VRd,VRa,#IMM
VMACL.dt SRd,SRa,SRb
VMACL.dt SRd,SRa,#IMM
ここで、dt={b,h,w,f}。
●支援モード
【数171】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、前記中間結果の各倍精度エレメントをベクトル累算器の各倍精度エレメントに加算し、各エレメントの倍精度の合計を前記ベクトル累算器に貯蔵し、その下部を目的地レジスタVRdに貯蔵する。
VRaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はVACHに貯蔵される。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数172】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0280】
VMAD 乗算及び加算
●フォーマット
【数173】
●アセンブラ構文
VMAD.dt VRc,VRd,VRa,VRb
VMAD.dt SRc,SRd,SRa,SRb
ここで、dt={b,h,w}。
●支援モード
【数174】
●説明
倍精度中間結果を出すためにRaの各エレメントをRbの各エレメントと乗算し、前記中間結果の各倍精度エレメントをRcの各エレメントに加算し、各エレメントの倍精度の合計を目的地レジスタRd+1:Rdに貯蔵する。
●演算
【数175】
●例外
なし
【0281】
VMADL ロー乗算及び加算
●フォーマット
【数176】
●アセンブラ構文
VMADL.dt VRc,VRd,VRa,VRb
VMADL.dt SRc,SRd,SRa,SRb
ここで、dt={b,h,w,f}。
●支援モード
【数177】
●説明
倍精度中間結果を出すためにRaの各エレメントをRbの各エレメントと乗算し、前記中間結果の各倍精度エレメントをRcの各エレメントに加算し、各エレメントの倍精度の合計を前記目的地レジスタRdに貯蔵する。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数178】
●例外
オーバフロー、浮動小数点無効オペランド。
【0282】
VMAS 累算器からの乗算及び減算
●フォーマット
【数179】
●アセンブラ構文
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}。
●支援モード
【数180】
●説明
倍精度中間結果を出すためにRaの各エレメントをRbの各エレメントと乗算し、ベクトル累算器の各倍精度エレメントから前記中間結果の各倍精度エレメントを減算し、各エレメントの倍精度の合計を前記ベクトル累算器に貯蔵する。
RaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はVACHに貯蔵される。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数181】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0283】
VMASF 累算器分数からの乗算及び減算
●フォーマット
【数182】
●アセンブラ構文
VMASF.dt VRa,VRb
VMASF.dt VRa,SRb
VMASF.dt VRa,#IMM
VMASF.dt SRa,SRb
VMASF.dt SRa,#IMM
ここで、dt={b,h,w}。
●支援モード
【数183】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、倍精度中間結果を左に1ビットだけシフトし、ベクトル累算器の各倍精度エレメントから前記シフトされた中間結果の各倍精度エレメントを減算し、各エレメントの倍精度の合計をベクトル累算器に貯蔵する。
VRaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はVACHに貯蔵される。
●演算
【数184】
●例外
オーバフロー
●プログラミング注釈
この命令
はint9データ型を支援しない−その代わりint16データ型を使用する。
【0284】
VMASL 累算器ローからの乗算及び減算
●フォーマット
【数185】
●アセンブラ構文
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}。
●支援モード
【数186】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、ベクトル累算器の各倍精度エレメントから前記中間結果の各倍精度エレメントを減算し、各エレメントの倍精度の合計をベクトル累算器に貯蔵し、その下部を目的地レジスタVRdに返還する。
VRaとRbは指定されたデータ型を使用し、一方VACは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はVACHに貯蔵される。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数187】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0285】
VMAXE 双方式 (pair-wise) 最大及び交換
●フォーマット
【数188】
●アセンブラ構文
VMAXE.dt VRd,VRb
ここで、dt={b,b9,h,w,f}。
●支援モード
【数189】
●説明
VRaとVRbは同一である。VRaがVRbと相違すると、その結果は定義されない。
ベクトルレジスタVRbの各偶数/奇数データエレメントは対で比較され、各データエレメント対のうちより大きい値がベクトルレジスタRdの偶数位置に貯蔵され、各データエレメント対のうちより小さい値がベクトルレジスタRdの奇数位置に貯蔵される。
●演算
【数190】
●例外
なし
【0286】
VMOV 移動
●フォーマット
【数191】
●アセンブラ構文
VMOV.dt Rd,Rb
ここで、dt={b,b9,h,w,f}であり、RdとRbはアーキテクチャ的に指定されたレジスタ名を指称する。.wと.fが同一の演算を指定することに留意する。
●支援モード
【数192】
●説明
レジスタRbの内容がレジスタRdに移動される。グループフィールドはソースと目的地レジスタグループを明示する。レジスタグループ表記法は次の通りである:
VR 現在のバンクベクトルレジスタ
VRA 代替バンクベクトルレジスタ
SR スカラレジスタ
RASR 返還アドレススタックレジスタ
VAC ベクトル累算器レジスタ(下記のVACレジスタ符号化表を参照する。)
【表71】
ベクトルレジスタはこの命令でスカラレジスタに移動され得ないことに留意する。VEXTRT命令が前記目的のために提供される。
VACレジスタ符号化のために次の表を使用する:
【表72】
●演算
Rd=Rb
●例外
例外状態をVCSR或いはVISRCにセットすることにより、対応する例外をもたらす。
●プログラミング注釈
この命令はエレメントマスクによって影響されない。代替バンク概念はVEC64モードには存在しないため、この命令はVEC64モードの代替バンクから或いは代替バンクへ移動するに使用されることができない。
【0287】
VMUL 乗算
●フォーマット
【数193】
●アセンブラ構文
VMUL.dt VRc,VRd,VRa,VRb
VMUL.dt SRc,SRd,SRa,SRb
ここで、dt={b,h,w}。
●支援モード
【数194】
●説明
倍精度の結果を出すためにRaの各エレメントをRbの各エレメントと乗算し、各エレメントの倍精度の合計を前記目的地レジスタRc:Rdに返還する。
RaとRbは指定されたデータ型を使用し、一方Rc:Rdは適宜な倍精度データ型(int8,int16,及びint32のそれぞれに対して16,32,及び64)を使用する。各倍精度エレメントの上部はRcに貯蔵される。
●演算
【数195】
●例外
なし
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。この命令はまた拡張された結果が支援されたデータ型でないために、浮動データ型を支援しない。
【0288】
VMULA 累算器に対する乗算
●フォーマット
【数196】
●アセンブラ構文
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}。
●支援モード
【数197】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、その結果を累算器に記録する。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数198】
●例外
なし
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0289】
VMULAF 累算器分数に対する乗算
●フォーマット
【数199】
●アセンブラ構文
VMULAF.dt VRa,VRb
VMULAF.dt VRa,SRb
VMULAF.dt VRa,#IMM
VMULAF.dt SRa,SRb
VMULAF.dt SRa,#IMM
ここで、dt={b,h,w}。
●支援モード
【数200】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、前記倍精度中間結果を左に1ビットだけシフトし、その結果を累算器に記録する。
●演算
【数201】
●例外
なし
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0290】
VMULF 分数乗算
●フォーマット
【数202】
●アセンブラ構文
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}。
●支援モード
【数203】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、前記倍精度中間結果を左に1ビットだけシフトし、その結果の上部を目的地レジスタVRd+1及び目的地レジスタVRdに返還する。VRdは偶数番号のレジスタでなければならない。
●演算
【数204】
●例外
なし
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0291】
VMULFR 分数乗算及びラウンド
●フォーマット
【数205】
●アセンブラ構文
VMULFR.dt VRd,VRa,VRb
VMULFR.dt VRd,VRa,SRb
VMULFR.dt VRd,VRa,#IMM
VMULFR.dt SRd,SRa,SRb
VMULFR.dt SRd,SRa,#IMM
ここで、dt={b,h,w}。
●支援モード
【数206】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、前記倍精度中間結果を左に1ビットだけシフトし、前記シフトされた中間結果を上部にラウンドし、その上部を目的地レジスタVRdに返還する。
●演算
【数207】
●例外
なし
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0292】
VMULL ロー乗算
●フォーマット
【数208】
●アセンブラ構文
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}。
●支援モード
【数209】
●説明
倍精度中間結果を出すためにVRaの各エレメントをRbの各エレメントと乗算し、その結果の上部を目的地レジスタVRdに返還する。
浮動データ型の場合、全てのオペランドと結果は単精度型である。
●演算
【数210】
●例外
オーバフロー、浮動小数点無効オペランド
●プログラミング注釈
この命令はint9データ型を支援しない−その代わりint16データ型を使用する。
【0293】
VNAND NAND
●フォーマット
【数211】
●アセンブラ構文
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,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数212】
●説明
Raにある各エレメントの各ビットをRb/即値オペランドにある対応のビットと論理的にNANDし、その結果をRdに返還する。
●演算
【数213】
●例外
なし
【0294】
VNOR NOR
●フォーマット
【数214】
●アセンブラ構文
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,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数215】
●説明
Raにある各エレメントの各ビットをRb/即値オペランドにある対応のビットと論理的にNORし、その結果をRdに返還する。
●演算
【数216】
●例外
なし
【0295】
VOR OR
●フォーマット
【数217】
●アセンブラ構文
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,w,f}、.wと.fは同一の演算を明示することに注意する。
●支援モード
【数218】
●説明
Raにある各エレメントの各ビットをRb/即値オペランドにある対応のビットと論理的にORし、その結果をRdに返還する。
●演算
【数219】
●例外
なし
【0296】
VORC OR補数
●フォーマット
【数220】
●アセンブラ構文
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は同一の演算を明示する。
●支援モード
【数221】
●説明
Raにある各エレメントの各ビットをRb/即値オペランドにある対応のビットと論理的にORし、その結果をRdに返還する。
●演算
【数222】
●例外
なし
【0297】
VPFTCH プリフェッチ
●フォーマット
【数223】
●アセンブラ構文
VPFTCH.ln SRb,SRi
VPFTCH.ln SRb,#IMM
VPFTCH.ln SRb+,SRi
VPFTCH.ln SRb+,#IMM
ここで、ln={1,2,4,8}。
●説明
有効アドレスから始めて複数のベクトルデータキャッシュラインをプリフェッチする。キャッシュラインの数は次のように指定される:
LN〈1:0〉=00:1つの64バイトキャッシュラインがプリフェッチされる。
LN〈1:0〉=01:2つの64バイトキャッシュラインがプリフェッチされる。
LN〈1:0〉=10:4つの64バイトキャッシュラインがプリフェッチされる。
LN〈1:0〉=11:8つの64バイトキャッシュラインがプリフェッチされる。
●演算
●例外
無効データアドレス例外
●プログラミング注釈
EA〈31:0〉はローカルメモリにあるバイトアドレスを指称する。
【0298】
VPFTCHSP スクラッチパッドに対するプリフェッチ
●フォーマット
【数224】
●アセンブラ構文
VPFTCHSP.ln SRp,SRb,SRi
VPFTCHSP.ln SRp,SRb,#IMM
VPFTCHSP.ln SRp,SRb+,SRi
VPFTCHSP.ln SRp,SRb+,#IMM
ここで、ln={1,2,4,8}、VPFTCHとVPFTCHSPは同一の演算コードを有する
●説明
メモリからスクラッチパッドへ複数の64バイトブロックを伝送する。有効アドレスはメモリに開始アドレスを提供し、SRpはスクラッチパッドに開始アドレスを提供する。64バイトブロックの数は次のように明示される:
LN〈1:0〉=00:1つの64バイトブロックが伝送される。
LN〈1:0〉=01:2つの64バイトブロックが伝送される。
LN〈1:0〉=10:4つの64バイトブロックが伝送される。
LN〈1:0〉=11:8つの64バイトブロックが伝送される。
もし有効キャッシュラインが64バイト境界上になければ、まず64バイト境界に整列されるように打ち切られる(truncate)。もしSRpにあるスクラッチパッドポインタアドレスが64バイト境界上になければ、これも64バイト境界に整列されるように打ち切られる。前記整列されたスクラッチパッドポインタアドレスは伝送されたバイトの数だけ増加する。
●演算
【数225】
●例外
無効データアドレス例外
【0299】
VROL 左への回転
●フォーマット
【数226】
●アセンブラ構文
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}。
●支援モード
【数227】
●説明
ベクトル/スカラレジスタRaの各データエレメントはスカラレジスタRb或いはIMMフィールドに与えられたビット量だけ左に回転し、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数228】
●例外
なし
●プログラミング注釈
rotate_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られる。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおいてビットの数字より少ないか等しい回転量を正確に明示する責任がある。もし回転量が指定されたデータサイズより大きければ、結果は定義されない。左にnだけ回転することはElemSize−nだけ右に回転することに等しい。ここで、ElemSizeは所定のデータサイズにおけるビットの数を指称する。
【0300】
VROR 右への回転
●フォーマット
【数229】
●アセンブラ構文
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}。
●支援モード
【数230】
●説明
ベクトル/スカラレジスタRaの各データエレメントはスカラレジスタRb或いはIMMフィールドに与えられたビット量だけ右に回転し、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数231】
●例外
なし
●プログラミング注釈
rotate_amountはSRb或いはIMM〈4:0〉から5ビット数字として取られる。バイト、バイト9、ハーフワードデータ型の場合、プログラマはデータサイズにおいてビットの数字より少ないか等しい回転量を正確に明示する責任がある。もし回転量が指定されたデータサイズより大きければ、結果は定義されない。nだけ右に回転することはElemSize−nだけ左に回転するのと等しい。ここで、ElemSizeは所定のデータサイズでビットの数を指称する。
【0301】
VROUND 浮動小数点から整数にラウンドする
●フォーマット
【数232】
●アセンブラ構文
VROUND.rm VRd,VRb
VROUND.rm SRd,SRb
ここで、rm={ninf,zero,near,pinf}。
●支援モード
【数233】
●説明
浮動小数点データフォーマットにあるベクトル/スカラレジスタRbの内容は一番近い32ビット整数(ワード)にラウンドされ、その結果はベクトル/スカラレジスタRdに貯蔵される。ラウンディングモードはRMに定義されている。
【表73】
●演算
【数234】
●例外
なし
●プログラミング注釈
この命令はエレメントマスクによる影響を受けない。
【0302】
VSATL より下位のラウンドまで飽和する
●フォーマット
【数235】
●アセンブラ構文
VSATL.dt VRd,VRa,VRb
VSATL.dt VRd,VRa,SRb
VSATL.dt VRd,VRa,#IMM
VSATL.dt SRd,SRa,SRb
VSATL.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w,f}、.fデータ型が9ビット即値と共に支援されないことに留意する。
●支援モード
【数236】
●説明
ベクトル/スカラレジスタRaの各データエレメントはベクトル/スカラレジスタRb或いはIMMフィールドにあるそれの対応する下位限界に対して点検される。もしデータエレメントの値が前記下位限界より小さければ、下位限界と同一にセットされ、最終結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数237】
●例外
なし
【0303】
VSATU より上位のラウンドまで飽和する
●フォーマット
【数238】
●アセンブラ構文
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ビット即値と共に支援されないことに留意する。
●支援モード
【数239】
●説明
ベクトル/スカラレジスタRaの各データエレメントはベクトル/スカラレジスタRb或いはIMMフィールドにあるそれの対応する上位限界に対して点検される。もしデータエレメントの値が前記上位限界より大きければ、上位限界と同一にセットされ、最終結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数240】
●例外
なし
【0304】
VSHFL シャフル (shuffle)
●フォーマット
【数241】
●アセンブラ構文
VSHFL.dt VRc,VRd,VRa,VRb
VSHFL.dt VRc,VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数242】
●説明
ベクトルレジスタRaの内容がRbとシャフル(shuffle)され、その結果が次に示すようにベクトルレジスタRc:Rdに貯蔵される。
【数243】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントアスクを使用しない。
【0305】
VSHFLH ハイシャフル
●フォーマット
【数244】
●アセンブラ構文
VSHFLH.dt VRd,VRa,VRb
VSHFLH.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数245】
●説明
ベクトルレジスタRaの内容がRbとシャフル(shuffle)され、その結果の上部が次に示すようにベクトルレジスタRdに貯蔵される。
【数246】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクを使用しない。
【0306】
VSHFLL ローシャフル
●フォーマット
【数247】
●アセンブラ構文
VSHFLL.dt VRd,VRa,VRb
VSHFLL.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を明示することに留意する。
●支援モード
【数248】
●説明
ベクトルレジスタRaの内容がRbとシャフル(shuffle)され、その結果の下部が次に示すようにベクトルレジスタRdに貯蔵される。
【数249】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクを使用しない。
【0307】
VST 貯蔵
●フォーマット
【数250】
●アセンブラ構文
VST.st Rs,SRb,SRi
VST.st Rs,SRb,#IMM
VST.st Rs,SRb+,SRi
VST.st Rs,SRb+,#IMM
ここで、st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}、.bと.b9tは同一の演算が明示され、.64とVRAsは一緒に明示できない点に留意する。キャッシュ−オフ貯蔵のためにはVSOFFを使用する。
●説明
ベクトルまたはスカラレジスタを貯蔵する。
●演算
【数251】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0308】
VSTCB 循環バッファへの貯蔵
●フォーマット
【数252】
●アセンブラ構文
VSTCB.st Rs,SRb,SRi
VSTCB.st Rs,SRb,#IMM
VSTCB.st Rs,SRb+,SRi
VSTCB.st Rs,SRb+,#IMM
ここで、st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}、.bと.b9tは同一の演算を指定し、.64とVRAdは一緒に指定できないことに留意する。キャッシュ−オフロードのためにVSTCBOFFを使用する。
●説明
SRb+1にあるBEGINポインタ、SRb+2にあるENDポインタによって指された循環バッファからベクトルまたはスカラレジスタを貯蔵する。
アドレス更新演算は勿論のこと、貯蔵する前にENDアドレスより大きければ、有効アドレスが調整される。また、循環バッファバウンダリは.fと.wスカラロードのためにそれぞれハーフワード及びワード境界上で整列されるべきである。
●演算
【数253】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。プログラマは次の条件を次の命令が予想通りに動作するように確認しなければならない。
BEGIN<EA<2*END−BEGIN
即ち、EA−END<END−BEGINはもちろんのことEA<BEGIN
【0309】
VSTD 二重貯蔵
●フォーマット
【数254】
●アセンブラ構文
VSTD.st Rs,SRb,SRi
VSTD.st Rs,SRb,#IMM
VSTD.st Rs,SRb+,SRi
VSTD.st Rs,SRb+,#IMM
ここで、st={b,b9t,h,w,4,8,16,32,64},Rs={VRs,VRAs,SRs}、.bと.b9tは同一の演算が指定され、.64とVRAsは一緒に指定され得ないことに留意する。キャッシュ−オフ貯蔵のためにVSTDOFFを使用する。
●説明
現在または代替バンクからの2つのベクトルレジスタ或いは4つのスカラレジスタを貯蔵する。
●演算
【数255】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0310】
VSTQ Quad貯蔵
●フォーマット
【数256】
●アセンブラ構文
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,64},Rs={VRs,VRAs,SRs}、.bと.b9tは同一の演算が指定され、.64とVRAsは共に指定され得ないことに留意する。キャッシュ−オフ貯蔵のためにVSTQOFFを用いる。
●説明
現在或いは代替バンクからの4つのベクトルレジスタ或いは4つのスカラレジスタを貯蔵する。
●演算
【数257】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0311】
VSTR 反転貯蔵
●フォーマット
【数258】
●アセンブラ構文
VSTR.st Rs,SRb,SRi
VSTR.st Rs,SRb,#IMM
VSTR.st Rs,SRb+,SRi
VSTR.st Rs,SRb+,#IMM
ここで、st={4,8,16,32,64},Rs={VRs,VRAs}、.64とVRAsが一緒に指定できないことに留意する。キャッシュ−オフ貯蔵のためにVSTROFFを用いる。
●説明
ベクトルレジスタを逆エレメント順で貯蔵する。この命令はスカラデータソースレジスタを支援しない。
●演算
【数259】
●例外
無効データアドレス、非整列アクセス
●プログラミング注釈
この命令はエレメントマスクによって影響されない。
【0312】
VSTWS ストライド貯蔵
●フォーマット
【数260】
●アセンブラ構文
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,VRAs}、.64モードは支援されない−その代わりVSTを使用する。キャッシュ−オフ貯蔵のためにVSTWSOFFを用いる。
●説明
有効アドレスから始めて、スカラレジスタSRb+1をストライド制御レジスタ(Stride Control Register)として用いて32バイトをベクトルレジスタVRSからメモリに貯蔵する。
STはブロックサイズ、各ブロックから貯蔵される連続バイトの数を指定し、SRb+1はストライド、及び2つの連続するブロックの開始を分離するバイトの数を指定する。
ストライドはブロックサイズと等しいかもしくは大きくなければならない。EAはデータサイズが整列されるべきである。ストライドとブロックサイズは複数のデータサイズ類型になければならない。
●演算
【数261】
●例外
無効データアドレス、非整列アクセス
【0313】
VSUB 減算
●フォーマット
【数262】
●アセンブラ構文
VSUB.dt VRd,VRa,VRb
VSUB.dt VRd,VRa,SRb
VSUB.dt VRd,VRa,#IMM
VSUB.dt SRd,SRa,SRb
VSUB.dt SRd,SRa,#IMM
ここで、st={b,b9,h,w,f}
●支援モード
【数263】
●説明
ベクトル/スカラレジスタRbの内容がベクトル/スカラレジスタRaの内容から減算され、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数264】
●例外
オーバフロー、浮動小数点無効オペランド
【0314】
VSUBS 減算及びセット
●フォーマット
【数265】
●アセンブラ構文
VSUBS.dt SRd,SRa,SRb
VSUBS.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w,f}。
●支援モード
【数266】
●説明
SRbがSRaから減算され、その結果がSRdに貯蔵され、VCSRにあるVFLAGビットがセットされる。
●演算
【数267】
●例外
オーバフロー、浮動小数点無効オペランド
【0315】
VUNSHFL アンシャフル
●フォーマット
【数268】
●アセンブラ構文
VUNSHFL.dt VRc,VRd,VRa,VRb
VUNSHFL.dt VRc,VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を指定することに留意する。
●支援モード
【数269】
●説明
ベクトルレジスタVRaの内容が次に示すようにベクトルレジスタVRc:VRdにRdとアンシャフルされる。
【数270】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクを使用しない。
【0316】
VUNSHFLH ハイへのアンシャフル
●フォーマット
【数271】
●アセンブラ構文
VUNSHFLH.dt VRd,VRa,VRb
VUNSHFLH.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を指定することに留意する。
●支援モード
【数272】
●説明
ベクトルレジスタVRaの内容がRbとアンシャフル(unshuffle)され、その結果の上部が次に示すようにベクトルレジスタVRdに返還される。
【数273】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクを使用しない。
【0317】
VUNSHFLL ローへのアンシャフル
●フォーマット
【数274】
●アセンブラ構文
VUNSHFLL.dt VRd,VRa,VRb
VUNSHFLL.dt VRd,VRa,SRb
ここで、dt={b,b9,h,w,f}、.wと.fが同一の演算を指定することに留意する。
●支援モード
【数275】
●説明
ベクトルレジスタVRaの内容がRbとアンシャフル(unshuffle)され、その結果の下部が次に示すようにベクトルレジスタVRdに返還される。
【数276】
●演算
●例外
なし
●プログラミング注釈
この命令はエレメントマスクを使用しない。
【0318】
VWBACK ライトバック
●フォーマット
【数277】
●アセンブラ構文
VWBACK.ln SRb,SRi
VWBACK.ln SRb,#IMM
VWBACK.ln SRb+,SRi
VWBACK.ln SRb+,#IMM
ここで、ln={1,2,4,8}。
●説明
そのインデックスがベクトルデータキャッシュにあるEA(そのタグがEAと一致するものと反対のものとして)によって指定されたキャッシュラインは、もし修正されたデータを含んでいるとメモリに更新される。もし一本以上のキャッシュラインが指定されていると、次の順次的なキャッシュラインが修正されたデータを含む場合、メモリに更新される。キャッシュラインの数は次のように指定される:
LN〈1:0〉=00:1つの64バイトキャッシュラインが記録される。
LN〈1:0〉=01:2つの64バイトキャッシュラインが記録される。
LN〈1:0〉=10:4つの64バイトキャッシュラインが記録される。
LN〈1:0〉=11:8つの64バイトキャッシュラインが記録される。
もし有効アドレスが64バイト境界上になければ、まず64バイト境界に整列されるように打ち切られる(truncate)。
●演算
●例外
無効データアドレス例外
●プログラミング注釈
EA〈31:0〉はローカルメモリのバイトアドレスを指称する。
【0319】
VWBACKSP スクラッチパッドからのライトバック
●フォーマット
【数278】
●アセンブラ構文
VWBACKSP.ln SRp,SRb,SRi
VWBACKSP.ln SRp,SRb,#IMM
VWBACKSP.ln SRp,SRb+,SRi
VWBACKSP.ln SRp,SRb+,#IMM
ここで、ln={1,2,4,8}、VWBACKとVWBACKSPは同一の演算コードを使用することに留意する。
●説明
スクラッチパッドからメモリへ複数の64バイトブロックを伝送する。有効アドレスはメモリに開始アドレスを提供し、SRpはスクラッチパッドに開始アドレスを提供する。64バイトブロックの数は次のように指定される:
LN〈1:0〉=00:1つの64バイトブロックが伝送される。
LN〈1:0〉=01:2つの64バイトブロックが伝送される。
LN〈1:0〉=10:4つの64バイトブロックが伝送される。
LN〈1:0〉=11:8つの64バイトブロックが伝送される。
もし有効アドレスが64バイト境界上になければ、まず64バイト境界に整列されるように打ち切られる(truncate)。もしSRpにあるスクラッチパッドポインタアドレスが64バイト境界上になければ、これもやはり64バイト境界に整列されるように打ち切られる。前記整列されたスクラッチパッドポインタアドレスは伝送されたバイトの数だけ増加する。
●演算
●例外
無効データアドレス例外
【0320】
VXNOR XNOR(排他的NOR)
●フォーマット
【数279】
●アセンブラ構文
VXNOR.dt VRd,VRa,VRb
VXNOR.dt VRd,VRa,SRb
VXNOR.dt VRd,VRa,#IMM
VXNOR.dt SRd,SRa,SRb
VXNOR.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}。
●支援モード
【数280】
●説明
ベクトル/スカラレジスタRaの内容がベクトル/スカラレジスタRbの内容に論理的にXNORされ、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数281】
●例外
なし
【0321】
VXOR XOR(排他的OR)
●フォーマット
【数282】
●アセンブラ構文
VXOR.dt VRd,VRa,VRb
VXOR.dt VRd,VRa,SRb
VXOR.dt VRd,VRa,#IMM
VXOR.dt SRd,SRa,SRb
VXOR.dt SRd,SRa,#IMM
ここで、dt={b,b9,h,w}。
●支援モード
【数283】
●説明
ベクトル/スカラレジスタRaの内容がベクトル/スカラレジスタRbの内容と論理的にXORされ、その結果がベクトル/スカラレジスタRdに貯蔵される。
●演算
【数284】
●例外
なし
【0322】
VXORALL 全てのエレメントのXOR(排他的OR)
●フォーマット
【数285】
●アセンブラ構文
VXORALL.dt SRd,VRd
ここで、dt={b,b9,h,w}、.bと.b9が同一の演算を指称することに留意する。
●支援モード
【数286】
●説明
VRbにある各エレメントの最下位ビットが共にXORされ、1ビット結果がSRdの最下位ビットから返還される。この命令はエレメントマスクによって影響されない。
●演算
●例外
なし
【図面の簡単な説明】
【図1】 本発明の実施例によるマルチメディアプロセッサのブロック図である。
【図2】 図1のマルチメディアプロセッサのためのベクトルプロセッサのブロック図である。
【図3】 図2のベクトルプロセッサのための命令フェッチ部のブロック図である。
【図4】 図2のベクトルプロセッサのための命令フェッチ部のブロック図である。
【図5】 図5(a),(b),(c)は、それぞれ図2のベクトルプロセッサのレジスタ対レジスタ命令、ロード命令、及び貯蔵命令に対する実行パイプラインのステージを示す図である。
【図6】 図2のベクトルプロセッサのための実行データ経路のブロック図である。
【図7】 図6の実行データ経路に対するレジスタファイルのブロック図である。
【図8】 図6の実行データ経路に対する並列処理論理部のブロック図である。。
【図9】 図2のベクトルプロセッサに対するロード/貯蔵部のブロック図である。
【図10】 本発明の実施例によるベクトルプロセッサの命令セットに対するフォーマット図である。
【符号の説明】
100 マルチメディア信号プロセッサ(MSP)
105 プロセッシングコア
110 汎用プロセッサ
120 ベクトルプロセッサ
130 キャッシュサブシステム
140,150 システムバス
142 システムタイマ
146 ビットストリームプロセッサ
148 インタラプトコントローラ
152 デバイスインタフェース
156 局部バスインタフェース
158 メモリコントローラ
162,192 命令語キャッシュ
164,194 データキャッシュ
180 キャッシュ制御部
220 デコーダ
230 スケジューラ
310 主命令語バッファ
312 補助命令語バッファ
340,342,344 レジスタ
350 加算器
420 制御パイプ
421〜427 実行レジスタ
514,515 実行ステージ
610 レジスタファイル
612,614,616,618 選択回路
620,626 乗算器
630 算術論理部
640 累算器
Claims (4)
- ベクトルプロセッサにおいて、
ベクトルレジスタの第1バンク、ベクトルレジスタの第2バンク、第1フィールドを含むコントロールレジスタ、及びベクトルレジスタの前記第1及び第2バンクのための選択回路を備え、
前記第1バンク内のそれぞれのベクトルレジスタは、前記第1バンク内の他のベクトルレジスタに割り当てられたレジスタ番号と区分されるレジスタ番号が割り当てられ、
前記第2バンク内のそれぞれのベクトルレジスタは、前記第2バンク内の他のベクトルレジスタに割り当てられたレジスタ番号とは区別され且つ前記第1バンク内の対応するベクトルレジスタに割り当てられたレジスタ番号とは同一のレジスタ番号が割り当てられ、
前記コントロールレジスタの第1フィールドは、デフォルトバンクとして第1及び第2のバンクの1つを識別する値を格納し、
前記選択回路は第1モードで作動し、前記デフォルトバンク内に存在して前記ベクトルプロセッサによって実行される命令からのレジスタ番号によって識別されるベクトルレジスタにアクセス可能になり、
前記選択回路が第2モードで作動し、前記第1バンクからの第1ベクトルレジスタ及び前記第2バンクからの第2ベクトルレジスタにアクセス可能になり、
前記第1及び第2ベクトルレジスタは前記ベクトルプロセッサによって実行される命令からレジスタ番号が割り当てられ、第1及び第2レジスタの組合は前記第1ベクトルレジスタに貯蔵され得るベクトル値より大きいベクトル値のために用いられることを特徴とするベクトルプロセッサ。 - 前記選択回路が第3モードで作動し、前記ベクトルプロセッサによって実行される命令からのレジスタ番号及びバンク値の組合せによって識別されるベクトルレジスタにアクセス可能になることを特徴とする請求項1記載のベクトルプロセッサ。
- ベクトルプロセッサを作動させるための方法において、
第1バンク内のそれぞれのベクトルレジスタに対して割り当てられたレジスタ番号が前記第1バンク内の他のベクトルレジスタに割り当てられたレジスタ番号とは区別されるように、第1バンク内のベクトルレジスタにレジスタ番号を割り当てる段階と、
第2バンク内のそれぞれのベクトルレジスタに対して割り当てられたレジスタ番号が前記第2バンク内の他のベクトルレジスタに割り当てられたレジスタ番号とは区別され、前記第1バンク内の対応するベクトルレジスタに割り当てられたレジスタ番号とは同一になるように、第2バンク内のベクトルレジスタにレジスタ番号を割り当てる段階と、
レジスタ番号を含む第1命令を形成する段階と、
前記第1命令に含まれたレジスタ番号が割り当てられ、前記ベクトルプロセッサのコントロールレジスタのフィールドによって指示されるバンク内のベクトルレジスタにアクセスする過程を含む方式で前記第1命令を実行する段階と、を備えることを特徴とするベクトルプロセッサを作動させるための方法。 - レジスタ番号を含む第2命令を形成する段階と、
レジスタ番号が割り当てられ前記第1バンク内に存するようになるベクトルレジスタにアクセスする過程及びレジスタ番号が割り当てられ前記第2バンク内に存するようになるベクトルレジスタにアクセスする過程を含む方式で、前記第2命令を実行する段階とをさらに備えることを特徴とする請求項3記載のベクトルプロセッサを作動させるための方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US08/697,086 US5838984A (en) | 1996-08-19 | 1996-08-19 | Single-instruction-multiple-data processing using multiple banks of vector registers |
US697,086 | 1996-08-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
JPH10116268A JPH10116268A (ja) | 1998-05-06 |
JP3983857B2 true JP3983857B2 (ja) | 2007-09-26 |
Family
ID=24799731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP23766597A Expired - Fee Related JP3983857B2 (ja) | 1996-08-19 | 1997-08-19 | ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 |
Country Status (7)
Country | Link |
---|---|
US (1) | US5838984A (ja) |
JP (1) | JP3983857B2 (ja) |
KR (1) | KR100236527B1 (ja) |
CN (1) | CN1117316C (ja) |
DE (1) | DE19735348B4 (ja) |
FR (1) | FR2752965B1 (ja) |
TW (1) | TW345650B (ja) |
Families Citing this family (132)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6643765B1 (en) | 1995-08-16 | 2003-11-04 | Microunity Systems Engineering, Inc. | Programmable processor with group floating point operations |
US5961631A (en) * | 1997-07-16 | 1999-10-05 | Arm Limited | Data processing apparatus and method for pre-fetching an instruction in to an instruction cache |
US7197625B1 (en) * | 1997-10-09 | 2007-03-27 | Mips Technologies, Inc. | Alignment and ordering of vector elements for single instruction multiple data processing |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6230259B1 (en) | 1997-10-31 | 2001-05-08 | Advanced Micro Devices, Inc. | Transparent extended state save |
US6157996A (en) * | 1997-11-13 | 2000-12-05 | Advanced Micro Devices, Inc. | Processor programably configurable to execute enhanced variable byte length instructions including predicated execution, three operand addressing, and increased register space |
US6334176B1 (en) * | 1998-04-17 | 2001-12-25 | Motorola, Inc. | Method and apparatus for generating an alignment control vector |
US6282634B1 (en) * | 1998-05-27 | 2001-08-28 | Arm Limited | Apparatus and method for processing data having a mixed vector/scalar register file |
US20060168431A1 (en) * | 1998-10-14 | 2006-07-27 | Peter Warnes | Method and apparatus for jump delay slot control in a pipelined processor |
US6862563B1 (en) | 1998-10-14 | 2005-03-01 | Arc International | Method and apparatus for managing the configuration and functionality of a semiconductor design |
US7308559B2 (en) * | 2000-02-29 | 2007-12-11 | International Business Machines Corporation | Digital signal processor with cascaded SIMD organization |
AU2001243463A1 (en) | 2000-03-10 | 2001-09-24 | Arc International Plc | Memory interface and method of interfacing between functional entities |
JP3940542B2 (ja) * | 2000-03-13 | 2007-07-04 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
JP2001283413A (ja) * | 2000-03-29 | 2001-10-12 | Tdk Corp | スピンバルブ膜の製造方法 |
US6857061B1 (en) | 2000-04-07 | 2005-02-15 | Nintendo Co., Ltd. | Method and apparatus for obtaining a scalar value directly from a vector register |
US6981132B2 (en) | 2000-08-09 | 2005-12-27 | Advanced Micro Devices, Inc. | Uniform register addressing using prefix byte |
US6877084B1 (en) | 2000-08-09 | 2005-04-05 | Advanced Micro Devices, Inc. | Central processing unit (CPU) accessing an extended register set in an extended register mode |
US7155601B2 (en) * | 2001-02-14 | 2006-12-26 | Intel Corporation | Multi-element operand sub-portion shuffle instruction execution |
US7162621B2 (en) | 2001-02-21 | 2007-01-09 | Mips Technologies, Inc. | Virtual instruction expansion based on template and parameter selector information specifying sign-extension or concentration |
US7181484B2 (en) * | 2001-02-21 | 2007-02-20 | Mips Technologies, Inc. | Extended-precision accumulation of multiplier output |
US7711763B2 (en) | 2001-02-21 | 2010-05-04 | Mips Technologies, Inc. | Microprocessor instructions for performing polynomial arithmetic operations |
US7599981B2 (en) * | 2001-02-21 | 2009-10-06 | Mips Technologies, Inc. | Binary polynomial multiplier |
US7039060B2 (en) * | 2001-03-07 | 2006-05-02 | Mips Tech Inc | System and method for extracting fields from packets having fields spread over more than one register |
US6986025B2 (en) * | 2001-06-11 | 2006-01-10 | Broadcom Corporation | Conditional execution per lane |
US7127593B2 (en) * | 2001-06-11 | 2006-10-24 | Broadcom Corporation | Conditional execution with multiple destination stores |
US7861071B2 (en) * | 2001-06-11 | 2010-12-28 | Broadcom Corporation | Conditional branch instruction capable of testing a plurality of indicators in a predicate register |
US7739319B2 (en) * | 2001-10-29 | 2010-06-15 | Intel Corporation | Method and apparatus for parallel table lookup using SIMD instructions |
US7631025B2 (en) * | 2001-10-29 | 2009-12-08 | Intel Corporation | Method and apparatus for rearranging data between multiple registers |
US7725521B2 (en) * | 2001-10-29 | 2010-05-25 | Intel Corporation | Method and apparatus for computing matrix transformations |
US7685212B2 (en) * | 2001-10-29 | 2010-03-23 | Intel Corporation | Fast full search motion estimation with SIMD merge instruction |
US7818356B2 (en) * | 2001-10-29 | 2010-10-19 | Intel Corporation | Bitstream buffer manipulation with a SIMD merge instruction |
US20040054877A1 (en) | 2001-10-29 | 2004-03-18 | Macy William W. | Method and apparatus for shuffling data |
US7624138B2 (en) | 2001-10-29 | 2009-11-24 | Intel Corporation | Method and apparatus for efficient integer transform |
US20100274988A1 (en) * | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US20030231660A1 (en) * | 2002-06-14 | 2003-12-18 | Bapiraju Vinnakota | Bit-manipulation instructions for packet processing |
US7793084B1 (en) | 2002-07-22 | 2010-09-07 | Mimar Tibet | Efficient handling of vector high-level language conditional constructs in a SIMD processor |
US7392368B2 (en) * | 2002-08-09 | 2008-06-24 | Marvell International Ltd. | Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements |
US6986023B2 (en) | 2002-08-09 | 2006-01-10 | Intel Corporation | Conditional execution of coprocessor instruction based on main processor arithmetic flags |
WO2004015563A1 (en) * | 2002-08-09 | 2004-02-19 | Intel Corporation | Multimedia coprocessor control mechanism including alignment or broadcast instructions |
GB2394571B (en) * | 2002-10-23 | 2005-08-10 | Motorola Inc | Arrangement system and method for vector permutation in single-instruction multiple-data microprocessors |
JP2004302647A (ja) * | 2003-03-28 | 2004-10-28 | Seiko Epson Corp | ベクトルプロセッサおよびレジスタのアドレス指定方法 |
US20040215924A1 (en) * | 2003-04-28 | 2004-10-28 | Collard Jean-Francois C. | Analyzing stored data |
US7610466B2 (en) * | 2003-09-05 | 2009-10-27 | Freescale Semiconductor, Inc. | Data processing system using independent memory and register operand size specifiers and method thereof |
US7315932B2 (en) | 2003-09-08 | 2008-01-01 | Moyer William C | Data processing system having instruction specifiers for SIMD register operands and method thereof |
US7275148B2 (en) * | 2003-09-08 | 2007-09-25 | Freescale Semiconductor, Inc. | Data processing system using multiple addressing modes for SIMD operations and method thereof |
GB2409060B (en) * | 2003-12-09 | 2006-08-09 | Advanced Risc Mach Ltd | Moving data between registers of different register data stores |
GB2411975B (en) * | 2003-12-09 | 2006-10-04 | Advanced Risc Mach Ltd | Data processing apparatus and method for performing arithmetic operations in SIMD data processing |
GB2409068A (en) * | 2003-12-09 | 2005-06-15 | Advanced Risc Mach Ltd | Data element size control within parallel lanes of processing |
GB2411973B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | Constant generation in SMD processing |
GB2409061B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | Table lookup operation within a data processing system |
GB2411976B (en) * | 2003-12-09 | 2006-07-19 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2409062C (en) * | 2003-12-09 | 2007-12-11 | Advanced Risc Mach Ltd | Aliasing data processing registers |
GB2409065B (en) * | 2003-12-09 | 2006-10-25 | Advanced Risc Mach Ltd | Multiplexing operations in SIMD processing |
GB2409063B (en) * | 2003-12-09 | 2006-07-12 | Advanced Risc Mach Ltd | Vector by scalar operations |
GB2409066B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
GB2409067B (en) * | 2003-12-09 | 2006-12-13 | Advanced Risc Mach Ltd | Endianess compensation within a SIMD data processing system |
GB2409059B (en) * | 2003-12-09 | 2006-09-27 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
GB2410097B (en) * | 2004-01-13 | 2006-11-01 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing data processing operations on floating point data elements |
GB2411978B (en) * | 2004-03-10 | 2007-04-04 | Advanced Risc Mach Ltd | Inserting bits within a data word |
US7302627B1 (en) * | 2004-04-05 | 2007-11-27 | Mimar Tibet | Apparatus for efficient LFSR calculation in a SIMD processor |
US7873812B1 (en) | 2004-04-05 | 2011-01-18 | Tibet MIMAR | Method and system for efficient matrix multiplication in a SIMD processor architecture |
US7493481B1 (en) * | 2004-05-17 | 2009-02-17 | Netxen, Inc. | Direct hardware processing of internal data structure fields |
US9557994B2 (en) | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
US20060070042A1 (en) * | 2004-09-24 | 2006-03-30 | Muratori Richard D | Automatic clocking in shared-memory co-simulation |
US20060179265A1 (en) * | 2005-02-08 | 2006-08-10 | Flood Rachel M | Systems and methods for executing x-form instructions |
US20060218377A1 (en) * | 2005-03-24 | 2006-09-28 | Stexar Corporation | Instruction with dual-use source providing both an operand value and a control value |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US20070038984A1 (en) | 2005-08-12 | 2007-02-15 | Gschwind Michael K | Methods for generating code for an architecture encoding an extended register specification |
US7421566B2 (en) * | 2005-08-12 | 2008-09-02 | International Business Machines Corporation | Implementing instruction set architectures with non-contiguous register file specifiers |
US7734897B2 (en) * | 2005-12-21 | 2010-06-08 | Arm Limited | Allocation of memory access operations to memory access capable pipelines in a superscalar data processing apparatus and method having a plurality of execution threads |
US20070283129A1 (en) * | 2005-12-28 | 2007-12-06 | Stephan Jourdan | Vector length tracking mechanism |
US7565514B2 (en) * | 2006-04-28 | 2009-07-21 | Freescale Semiconductor, Inc. | Parallel condition code generation for SIMD operations |
US7958181B2 (en) | 2006-09-21 | 2011-06-07 | Intel Corporation | Method and apparatus for performing logical compare operations |
US9223751B2 (en) * | 2006-09-22 | 2015-12-29 | Intel Corporation | Performing rounding operations responsive to an instruction |
US8127113B1 (en) | 2006-12-01 | 2012-02-28 | Synopsys, Inc. | Generating hardware accelerators and processor offloads |
WO2008087779A1 (ja) * | 2007-01-19 | 2008-07-24 | Nec Corporation | アレイ型プロセッサおよびデータ処理システム |
US20080229062A1 (en) * | 2007-03-12 | 2008-09-18 | Lorenzo Di Gregorio | Method of sharing registers in a processor and processor |
US8122229B2 (en) * | 2007-09-12 | 2012-02-21 | Convey Computer | Dispatch mechanism for dispatching instructions from a host processor to a co-processor |
US9015399B2 (en) | 2007-08-20 | 2015-04-21 | Convey Computer | Multiple data channel memory module architecture |
US8561037B2 (en) | 2007-08-29 | 2013-10-15 | Convey Computer | Compiler for generating an executable comprising instructions for a plurality of different instruction sets |
US8095735B2 (en) * | 2008-08-05 | 2012-01-10 | Convey Computer | Memory interleave for heterogeneous computing |
US9710384B2 (en) * | 2008-01-04 | 2017-07-18 | Micron Technology, Inc. | Microprocessor architecture having alternative memory access paths |
US8156307B2 (en) * | 2007-08-20 | 2012-04-10 | Convey Computer | Multi-processor system having at least one processor that comprises a dynamically reconfigurable instruction set |
CN101377735B (zh) * | 2007-08-28 | 2011-09-28 | 凌阳科技股份有限公司 | 于多模处理器中以串行位决定指令长度的装置及方法 |
US8078836B2 (en) | 2007-12-30 | 2011-12-13 | Intel Corporation | Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits |
US20100115233A1 (en) * | 2008-10-31 | 2010-05-06 | Convey Computer | Dynamically-selectable vector register partitioning |
US8205066B2 (en) * | 2008-10-31 | 2012-06-19 | Convey Computer | Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor |
US8423745B1 (en) | 2009-11-16 | 2013-04-16 | Convey Computer | Systems and methods for mapping a neighborhood of data to general registers of a processing element |
US8434074B2 (en) * | 2010-02-24 | 2013-04-30 | Intel Corporation | Register allocation with SIMD architecture using write masks |
KR20110103256A (ko) * | 2010-03-12 | 2011-09-20 | 삼성전자주식회사 | 다중 입출력 오퍼레이션 지원 프로세서 및 그 방법 |
US20120185670A1 (en) * | 2011-01-14 | 2012-07-19 | Toll Bret L | Scalar integer instructions capable of execution with three registers |
US9128701B2 (en) * | 2011-04-07 | 2015-09-08 | Via Technologies, Inc. | Generating constant for microinstructions from modified immediate field during instruction translation |
KR20120134549A (ko) | 2011-06-02 | 2012-12-12 | 삼성전자주식회사 | Simd 프로세서를 이용한 병렬 연산 처리 장치 및 방법 |
KR101572770B1 (ko) | 2011-09-26 | 2015-11-27 | 인텔 코포레이션 | 벡터 로드-op/저장-op에 스트라이드 기능을 제공하는 명령어 및 로직 |
KR101783312B1 (ko) * | 2011-11-15 | 2017-10-10 | 삼성전자주식회사 | 클러스터 간의 통신으로 인한 오버헤드를 최소화하는 장치 및 방법 |
WO2013085491A1 (en) * | 2011-12-06 | 2013-06-13 | Intel Corporation | System, apparatus and method for translating vector instructions |
CN104011645B (zh) * | 2011-12-22 | 2018-06-26 | 英特尔公司 | 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质 |
WO2013095614A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Super multiply add (super madd) instruction |
CN104081337B (zh) | 2011-12-23 | 2017-11-07 | 英特尔公司 | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 |
CN104011664B (zh) | 2011-12-23 | 2016-12-28 | 英特尔公司 | 使用三个标量项的超级乘加(超级madd)指令 |
US9557998B2 (en) | 2011-12-28 | 2017-01-31 | Intel Corporation | Systems, apparatuses, and methods for performing delta decoding on packed data elements |
WO2013100991A1 (en) | 2011-12-28 | 2013-07-04 | Intel Corporation | Systems, apparatuses, and methods for performing delta encoding on packed data elements |
US9864602B2 (en) | 2011-12-30 | 2018-01-09 | Intel Corporation | Packed rotate processors, methods, systems, and instructions |
US10289412B2 (en) * | 2012-02-09 | 2019-05-14 | Qualcomm Incorporated | Floating point constant generation instruction |
WO2013180712A1 (en) * | 2012-05-30 | 2013-12-05 | Intel Corporation | Vector and scalar based modular exponentiation |
US10430190B2 (en) | 2012-06-07 | 2019-10-01 | Micron Technology, Inc. | Systems and methods for selectively controlling multithreaded execution of executable code segments |
CN102819692A (zh) * | 2012-08-10 | 2012-12-12 | 上海交通大学 | 基于fpga的rna二级结构预测装置、系统及其实现方法 |
CN102930008B (zh) * | 2012-10-29 | 2015-10-07 | 无锡江南计算技术研究所 | 向量查表方法 |
US9639371B2 (en) | 2013-01-29 | 2017-05-02 | Advanced Micro Devices, Inc. | Solution to divergent branches in a SIMD core using hardware pointers |
CN104375803B (zh) * | 2013-08-13 | 2017-10-24 | 华为技术有限公司 | 一种数据处理的方法及装置 |
CN104461939A (zh) * | 2014-12-16 | 2015-03-25 | 清华大学 | 扩展处理器寄存器堆容量的方法 |
US10296489B2 (en) * | 2014-12-27 | 2019-05-21 | Intel Corporation | Method and apparatus for performing a vector bit shuffle |
US10296334B2 (en) * | 2014-12-27 | 2019-05-21 | Intel Corporation | Method and apparatus for performing a vector bit gather |
US10503502B2 (en) | 2015-09-25 | 2019-12-10 | Intel Corporation | Data element rearrangement, processors, methods, systems, and instructions |
GB2543303B (en) * | 2015-10-14 | 2017-12-27 | Advanced Risc Mach Ltd | Vector data transfer instruction |
US9733899B2 (en) * | 2015-11-12 | 2017-08-15 | Arm Limited | Lane position information for processing of vector |
US20170177350A1 (en) * | 2015-12-18 | 2017-06-22 | Intel Corporation | Instructions and Logic for Set-Multiple-Vector-Elements Operations |
US10152321B2 (en) * | 2015-12-18 | 2018-12-11 | Intel Corporation | Instructions and logic for blend and permute operation sequences |
CN107315563B (zh) * | 2016-04-26 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量比较运算的装置和方法 |
CN107315568B (zh) | 2016-04-26 | 2020-08-07 | 中科寒武纪科技股份有限公司 | 一种用于执行向量逻辑运算的装置 |
CN108009976A (zh) * | 2016-10-27 | 2018-05-08 | 超威半导体公司 | 用于图形处理单元(gpu)计算的超级单指令多数据(超级simd) |
US10216479B2 (en) * | 2016-12-06 | 2019-02-26 | Arm Limited | Apparatus and method for performing arithmetic operations to accumulate floating-point numbers |
EP3747167B1 (en) | 2018-02-19 | 2022-08-31 | Huawei Technologies Co., Ltd. | Multi-cloud vpc routing and registration |
JP7296574B2 (ja) * | 2019-03-04 | 2023-06-23 | パナソニックIpマネジメント株式会社 | プロセッサ及びプロセッサの制御方法 |
US11132198B2 (en) | 2019-08-29 | 2021-09-28 | International Business Machines Corporation | Instruction handling for accumulation of register results in a microprocessor |
CN110727412B (zh) * | 2019-09-14 | 2022-01-07 | 无锡江南计算技术研究所 | 一种基于掩码的混合浮点乘法低功耗控制方法及装置 |
US11551148B2 (en) * | 2020-04-29 | 2023-01-10 | Marvell Asia Pte Ltd | System and method for INT9 quantization |
CN112230995B (zh) * | 2020-10-13 | 2024-04-09 | 广东省新一代通信与网络创新研究院 | 一种指令的生成方法、装置以及电子设备 |
CN112328511B (zh) * | 2021-01-04 | 2021-05-04 | 统信软件技术有限公司 | 一种数据处理方法、计算设备及可读存储介质 |
CN115794671B (zh) * | 2023-02-07 | 2023-04-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPS59160267A (ja) * | 1983-03-02 | 1984-09-10 | Hitachi Ltd | ベクトル処理装置 |
US4791555A (en) * | 1983-10-24 | 1988-12-13 | International Business Machines Corporation | Vector processing unit |
JPH0648486B2 (ja) * | 1986-10-08 | 1994-06-22 | 日本電気株式会社 | ベクトルデ−タ処理装置 |
JP2679994B2 (ja) * | 1987-08-14 | 1997-11-19 | 株式会社日立製作所 | ベクトル処理装置 |
JP2941817B2 (ja) * | 1988-09-14 | 1999-08-30 | 株式会社日立製作所 | ベクトル処理装置 |
US5226142A (en) * | 1990-11-21 | 1993-07-06 | Ross Technology, Inc. | High performance register file with overlapping windows |
US5493687A (en) * | 1991-07-08 | 1996-02-20 | Seiko Epson Corporation | RISC microprocessor architecture implementing multiple typed register sets |
US5438669A (en) * | 1991-11-20 | 1995-08-01 | Hitachi, Ltd. | Data processor with improved loop handling utilizing improved register allocation |
JP2823767B2 (ja) * | 1992-02-03 | 1998-11-11 | 松下電器産業株式会社 | レジスタファイル |
JPH06274528A (ja) * | 1993-03-18 | 1994-09-30 | Fujitsu Ltd | ベクトル演算処理装置 |
JP2883784B2 (ja) * | 1993-04-27 | 1999-04-19 | 株式会社東芝 | マイクロコンピュータ |
US5669013A (en) * | 1993-10-05 | 1997-09-16 | Fujitsu Limited | System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions |
WO1995032466A1 (en) * | 1994-05-19 | 1995-11-30 | Vlsi Technology, Inc. | Flexible register mapping scheme |
-
1996
- 1996-08-19 US US08/697,086 patent/US5838984A/en not_active Expired - Lifetime
-
1997
- 1997-04-07 KR KR1019970012770A patent/KR100236527B1/ko not_active IP Right Cessation
- 1997-08-14 DE DE19735348A patent/DE19735348B4/de not_active Expired - Lifetime
- 1997-08-18 FR FR9710436A patent/FR2752965B1/fr not_active Expired - Lifetime
- 1997-08-19 CN CN97117403A patent/CN1117316C/zh not_active Expired - Lifetime
- 1997-08-19 TW TW086111968A patent/TW345650B/zh not_active IP Right Cessation
- 1997-08-19 JP JP23766597A patent/JP3983857B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
KR100236527B1 (ko) | 1999-12-15 |
CN1117316C (zh) | 2003-08-06 |
FR2752965B1 (fr) | 2004-09-24 |
JPH10116268A (ja) | 1998-05-06 |
FR2752965A1 (fr) | 1998-03-06 |
KR19980018072A (ko) | 1998-06-05 |
DE19735348A1 (de) | 1998-03-12 |
CN1174353A (zh) | 1998-02-25 |
TW345650B (en) | 1998-11-21 |
DE19735348B4 (de) | 2006-10-05 |
US5838984A (en) | 1998-11-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP3983857B2 (ja) | ベクトルレジスタの複数バンクを用いた単一命令複数データ処理 | |
US6058465A (en) | Single-instruction-multiple-data processing in a multimedia signal processor | |
KR100500890B1 (ko) | 디지탈 신호처리용 집적회로구조 | |
KR100505799B1 (ko) | 코프로세서 데이터 액세스 제어 | |
US5881257A (en) | Data processing system register control | |
US5983336A (en) | Method and apparatus for packing and unpacking wide instruction word using pointers and masks to shift word syllables to designated execution units groups | |
US20080140994A1 (en) | Data-Parallel processing unit | |
US5969975A (en) | Data processing apparatus registers | |
US5881259A (en) | Input operand size and hi/low word selection control in data processing systems | |
WO1998012626A1 (en) | Data processing condition code flags | |
GB2317464A (en) | Register addressing in a data processing apparatus | |
KR100500889B1 (ko) | 데이터 처리장치에서의 레지스터 어드레싱 | |
KR100267089B1 (ko) | 스칼라/벡터연산이조합된단일명령복수데이터처리 | |
KR100520807B1 (ko) | 데이터 처리 조건 코드 플래그 | |
KR100267092B1 (ko) | 멀티미디어신호프로세서의단일명령다중데이터처리 | |
KR20000048531A (ko) | 데이터 처리장치에서의 입력 오퍼랜드 제어 | |
US6925548B2 (en) | Data processor assigning the same operation code to multiple operations | |
US7107302B1 (en) | Finite impulse response filter algorithm for implementation on digital signal processor having dual execution units | |
KR20000048529A (ko) | 데이터 처리장치의 레지스터 제어 | |
KR20000048530A (ko) | 데이터 처리장치 레지스터 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A977 | Report on retrieval |
Free format text: JAPANESE INTERMEDIATE CODE: A971007 Effective date: 20050502 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20050517 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20050811 |
|
A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20060221 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20060522 |
|
A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20070104 |
|
A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20070426 |
|
A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20070510 |
|
TRDD | Decision of grant or rejection written | ||
A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20070605 |
|
A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20070705 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20100713 Year of fee payment: 3 |
|
R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20110713 Year of fee payment: 4 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120713 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20120713 Year of fee payment: 5 |
|
FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20130713 Year of fee payment: 6 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
LAPS | Cancellation because of no payment of annual fees |