[go: up one dir, main page]

JPH10143494A - スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理 - Google Patents

スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理

Info

Publication number
JPH10143494A
JPH10143494A JP9222417A JP22241797A JPH10143494A JP H10143494 A JPH10143494 A JP H10143494A JP 9222417 A JP9222417 A JP 9222417A JP 22241797 A JP22241797 A JP 22241797A JP H10143494 A JPH10143494 A JP H10143494A
Authority
JP
Japan
Prior art keywords
register
vector
instruction
scalar
data
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP9222417A
Other languages
English (en)
Inventor
Moataz A Mohamed
エー モハメッド モアタズ
Heon Chul Park
チュル パク ヒョン
Le Trong Nguyen
トロン ギュエン リ
Roney Sau Don Wong
サー ドン ウォン ロニー
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Samsung Electronics Co Ltd
Original Assignee
Samsung Electronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Samsung Electronics Co Ltd filed Critical Samsung Electronics Co Ltd
Publication of JPH10143494A publication Critical patent/JPH10143494A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/16Matrix or vector computation, e.g. matrix-matrix or matrix-vector multiplication, matrix factorization
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N7/00Television systems
    • H04N7/24Systems for the transmission of television signals using pulse code modulation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Mathematical Analysis (AREA)
  • Computational Mathematics (AREA)
  • Pure & Applied Mathematics (AREA)
  • Algebra (AREA)
  • Computing Systems (AREA)
  • Databases & Information Systems (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Complex Calculations (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

(57)【要約】 【課題】 ビデオ及びオーディオ符号化および復号化の
ようなマルチメディア機能のために命令毎に複数のデー
タエレメントの並列処理のためのプロセッサを提供する
こと。 【解決手段】 ベクトルプロセッサはスカラ値のための
スカラレジスタと多数のデータエレメントを含むベクト
ルのためのベクトルレジスタの両方とも備える。前記ベ
クトルプロセッサにより実行された演算はベクトル量を
決定するために二つ以上のベクトルオペランドを処理
し、ベクトル量を決定するためにスカラオペランドとベ
クトルオペランドを結合し、スカラ量を決定するために
二つ以上のスカラオペランドを結合する。スカラレジス
タもベクトルレジスタ内の個別的なデータエレメントの
乗算を容易にする。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】本発明はディジタル信号プロ
セッサ、特にビデオ信号及びオーディオ信号の符号化(e
ncoding)及び復号化(decoding)のようなマルチメディア
機能に有利に適用される命令毎に多重データエレメント
の並列処理を行なうプロセッサに関する。
【0002】
【従来の技術】実時間ビデオ符号化及び復号化などのマ
ルチメディア応用のためのプログラム可能ディジタル信
号プロセッサ(DSP:Digital Signal Processor、以
下DSPと称する)は、制限された時間内に処理される
べき多量のデータが発生するので高速な処理能力を必要
とする。例えば特開平6−309349号公報または特
開平6−266860号公報に示すように、ディジタル
信号プロセッサに対する幾つかのアーキテクチャ(archi
tecture)が知られている。大部分のマイクロプロセッサ
に採用されたこのような汎用アーキテクチャは、実時間
ビデオ符号化または復号化のための充分な計算能力を有
するDSPを提供するためには高速演算周期を必要とす
る。このため、このようなDSPは高コストとなる。
【0003】超長命令ワード(VLIW:Very Long In
struction Word、以下VLIWと称する)プロセッサは
多くの機能ユニットを有するDSPであって、これらの
大部分は相違し、比較的単純なタスク(task)を行う。V
LIWDSPに対する単一命令は128バイト或いはそ
れ以上であり、分離された機能ユニットを並列に実行す
る分離された部分をもっている。VLIWDSPは多く
の機能ユニットが並列演算を行えるために高い計算能力
を備えている。また、VLIWDSPは各機能ユニット
が比較的小さくて単純なので比較的安価である。
【0004】
【発明が解決しようとする課題】VLIW DSPの問
題は、VLIWDSPの機能ユニットに対する並列実行
に適しない入出力制御、ホストコンピュータとの通信、
及び他の機能を処理することに対する非効率性である。
また、VLIWソフトウェアは、通常のソフトウェアと
相違し、VLIWソフトウェアアーキテクチャに慣れて
いるプログラマとプログラムツールが足りないために、
開発し難い。
【0005】妥当な費用、高い計算能力、及び馴染みの
プログラミング環境を提供するDSPがマルチメディア
応用に要求されている。
【0006】
【課題を解決するための手段】本発明の一特徴によれ
ば、マルチメディアディジタル信号プロセッサは、高い
計算能力を提供するためにベクトルデータ(即ち、オペ
ランド当たり多重データエレメント)を操作するベクト
ルプロセッサを含む。プロセッサはRISC型命令セッ
トを有する単一命令−多重データ(single-instruction-
multiple-data)アーキテクチャを使用する。プログラマ
にとっては、プログラム環境が馴染みの汎用プロセッサ
のプログラム環境と類似しているので、プログラムはベ
クトルプロセッサのプログラム環境に容易に適応でき
る。
【0007】DSPは1セットの汎用ベクトルレジスタ
を含む。各ベクトルレジスタは固定サイズをもっている
が、使用者の選択可能なサイズの分離されたデータエレ
メントに分割される。従って、ベクトルレジスタに記憶
されたデータエレメントの数は、エレメントに対する選
択されたサイズによって決定される。例えば、32バイ
トレジスタは32個の8ビットデータエレメント、16
個の16ビットデータエレメント、或いは8個の32ビ
ットデータエレメントに分けられる。データサイズと形
式の選択はベクトルレジスタと演算されたデータを処理
する命令によって行われ、命令に対する実行データパス
は命令によって指示されたデータサイズによって多数の
並列演算を実行する。
【0008】ベクトルプロセッサに対する命令はオペラ
ンドとしてベクトルレジスタ或いはスカラレジスタをも
つことができ、計算能力が高くなるように並列にベクト
ルレジスタの多重データエレメントを操作することがで
きる。本発明によるベクトルプロセッサに対する命令セ
ットの例はコプロセッサインタフェース演算、フロー制
御演算、ロード/記憶演算、及び論理/算術演算を含
む。論理/算術演算は、データエレメントの結果的なデ
ータベクトルを発生するために、1つのベクトルレジス
タからのデータエレメントを、1つ或いはそれ以上の他
のベクトルレジスタからの対応するデータエレメントと
結合させる演算を含む。他の論理/算術演算は1つ或い
はそれ以上のベクトルレジスタからの各種のデータエレ
メントを混合するか、或いはベクトルレジスタからのデ
ータエレメントをスカラ量と結合させる。
【0009】ベクトルプロセッアーキテクチャの拡張は
それぞれスカラデータエレメントを含むスカラレジスタ
を加算する。スカラとベクトルレジスタの結合(combina
tion)は、ベクトルの各データエレメントをスカラ値と
並列に結合する命令を含むベクトルプロセッサの命令セ
ットの拡張を容易にする。例えば、1つの命令がベクト
ルのデータエレメントにスカラ値を乗算する。また、ス
カラレジスタは単一データエレメントの記憶場所を提供
してベクトルレジスタから抽出されるか、或いはベクト
ルレジスタに記憶されるようにする。また、スカラレジ
スタはベクトルプロセッサとスカラレジスタのみを備え
るアーキテクチャをもつコプロセッサとの間に情報をパ
スするか、或いはロード/記憶演算に対する有効アドレ
スの計算に便利である。
【0010】本発明の他の特徴によれば、ベクトルプロ
セッサのベクトルレジスタはバンク(bank)から組み合わ
せられる。各バンクは“現在(current)”バンクとして
選択でき、一方他のバンクは“交替(alternative)”バ
ンクである。ベクトルプロセッサの制御レジスタで“現
在バンク”ビットは現在バンクを指示する。ビットの数
の減縮にはベクトルレジスタを識別することが必要であ
り、現在バンクにベクトルレジスタを識別するために若
干の命令はレジスタ番号のみを提供する。ロード/記憶
命令はあるバンクからベクトルレジスタを識別するため
に付加ビットをもつ。従って、ロード/記憶命令は現在
バンクでデータを操作する間、交替バンクでデータを取
り出すことができる。これはイメージ処理及びグラフィ
ック手続に対するソフトウェアパイプライニングを容易
にし、論理/算術演算が規則を外れて交替レジスタバン
クをアクセスするロード/記憶演算によって実行される
ことができるために、データ取出し時にプロセッサ遅延
を減らす。他の命令により交替バンクは現在バンクから
のベクトルレジスタと交替バンクからの対応するベクト
ルレジスタを含むダブルサイズベクトルレジスタの使用
を可能にする。このようなダブルサイズレジスタは命令
構文(syntax)から識別されることができる。ベクトルプ
ロセッサで制御ビットはデフォールトベクトルサイズが
1つ或いは2つのベクトルレジスタのいずれか1つにな
るように設定できる。また、交替バンクは2つのソース
と2つの目的地レジスタを有するシャフル(shuffle)、
アンシャフル(unshuffle)、飽和(saturate)、及び条件
移動のような複合命令の構文でより小さくて且つ明確な
識別されたオペランドを使用可能にする。
【0011】さらに、ベクトルレジスタは平均カッド(q
uad)、シャフル、アンシャフル、ペア式最大と交換、及
び飽和などの新規命令を具現する。これらの命令はビデ
オ符号化及び復号化のようなマルチメディア機能に共通
の演算を行い、他の命令セットが同一の機能を具現する
ために必要とする2或いはそれ以上の命令に代える。従
って、ベクトルプロセッサ命令セットはマルチメディア
応用時にプログラムの効率と速度を向上させる。
【0012】
【発明の実施の形態】以下、添付図面を参照して本発明
の好ましい実施の形態をさらに詳しく説明する。図中の
同一部分には同一符号を付する。
【0013】図1は本発明の実施の形態によるマルチメ
ディア信号プロセッサ100(MSP:Multimedia Sig
nal Processor)の実施の形態のブロック図を示す。マル
チメディアプロセッサ100は汎用プロセッサ110と
ベクトルプロセッサ120を含むプロセッシングコア1
05を含む。プロセッシングコア105はSRAM16
0,190、ROM170、及びキャッシュコントロー
ル180を含むキャッシュサブシステム130を通して
マルチメディアプロセッサ100の残りに接続されてい
る。キャッシュコントロール180はプロセッサ110
に対する命令キャッシュ162とデータキャッシュ16
4でSRAM160を構成することができ、ベクトルプ
ロセッサ120に対する命令キャッシュ192とデータ
キャッシュ194でSRAM190を構成することがで
きる。
【0014】ワンチップROM170はプロセッサ11
0,120に対するデータと命令を含み、且つキャッシ
ュから構成することができる。好ましい実施の形態にお
いて、ROM170はリセット及び初期化手続、自己テ
スト診断手続、インタラプト及び例外処理器、及びサウ
ンドブラスタエミュレーション用サブルーチン、V.3
4モデム信号処理用サブルーチン、一般電話機能、1−
D及び3−Dグラフィックサブライブラリ、及びMPE
G−1、MPEG−2、H.261、H.263、G.
728、G.723のようなオーディオ及びビデオ標準
用サブルーチンライブラリを含む。
【0015】キャッシュサブシステム130は、プロセ
ッサ110,120を2つのシステムバス140,15
0に接続させ、プロセッサ110,120とバス14
0、150に結合された装置に対するキャッシュとスイ
ッチングステーションとして作用する。システムバス1
50はバス140よりさらに高いクロック周波数で動作
し、それぞれ外部ローカルメモリ、ホストコンピュータ
のローカルバス、ダイレクトメモリアクセス(DMA:
Direct Memory Access)、及び各種アナログ/ディジタ
ル(A/D)及びディジタル/アナログ(D/A)変換
器に対するインタフェースを提供するデバイスインタフ
ェース152、DMAコントローラ154、ローカルバ
スインタフェース156、及びメモリコントローラ15
8に接続されている。バス140にはシステムタイマ1
42、UART(Universal Asynchronous Receiver Tra
nsceiver)144、ビットストリームプロセッサ14
6、及びインタラプトコントローラ148が接続されて
いる。“マルチメディア信号プロセッサのマルチプロセ
ッサ動作及びビデオデータを処理するための方法及び装
置”の名称を有する本願出願と合体する特許出願は、プ
ロセッサ110,120がキャッシュシステム130と
バス140,150を通してアクセスする、好ましいデ
バイスとキャッシュサブシステム130の作用をさらに
詳しく説明している。
【0016】プロセッサ110,120は分離されたプ
ログラムスレッド(thread)を実行し、それらに割り当て
られた特定タスクをより効率的に実行するために構造的
に相違する。プロセッサ110は実時間作動システムの
実行のような制御機能と多数の反復的な計算を要求しな
い類似機能を優先している。従って、プロセッサ100
は高い計算能力を必要とせず、通常の汎用プロセッサア
ーキテクチャを用いて具現することができる。ベクトル
プロセッサ120は大部分のマルチメディア処理におい
て共通のデータブロックに対する反復的な演算を含むナ
ンバクランチング(number crunching)を施す。高い計算
能力と比較的単純なプログラミングのために、ベクトル
プロセッサ120はSIMD(Single Instruction Mult
iple Data)アーキテクチャを有し、例示された実施の形
態でベクトルプロセッサ120における大部分のデータ
パスはベクトルデータ操作を支援するために288或い
は576ビットのうち1つの広さを有する。また、ベク
トルプロセッサ120に対する命令セットは特にマルチ
メディア問題に適した命令を含む。
【0017】上述の実施の形態において、プロセッサ1
10は40MHzで動作して、ARM7標準によって定
義されたレジスタセットを含むARM7プロセッサのア
ーキテクチャと一致する32ビットRISCプロセッサ
である。ARM7RISCプロセッサに対するアーキテ
クチャと命令セットはAdvance RISC Machines Ltd.から
入手可能な“ARM7DMDataSheet”、文書
番号:ARMDDI0010Gに記載されている。AR
M7DMDataSheetはこの出願に参考として含
まれる。後述する別添Aには好ましい実施の形態でAR
M7命令セットの拡張を説明している。
【0018】ベクトルプロセッサ120はベクトルとス
カラ量を全て演算する。好ましい実施の形態において、
ベクトルプロセッサ120は80MHzで動作するパイ
プライン構造のRISCエンジンから構成されている。
ベクトルプロセッサ120のレジスタは32ビットスカ
ラレジスタ、32ビット特殊目的レジスタ、2バンクの
288ビットベクトルレジスタ、及び2ダブルサイズ
(例えば、576ビット)ベクトルアキュムレータレジ
スタを含む。後述する別添Cにはベクトルプロセッサ1
20の好ましい実施の形態に対するレジスタセットを説
明する。好ましい実施の形態において、プロセッサ12
0は0〜31の5ビットレジスタ番号によって命令が識
別される32個のスカラレジスタを含む。また、2バン
クの32ベクトルレジスタ構造からなっている64個の
288ビットベクトルレジスタを備えている。各ベクト
ルレジスタは1ビットのバンク番号(0または1)と0
〜31の5ビットベクトルレジスタ番号によって識別さ
れる。大部分の命令はただベクトルプロセッサ120の
制御レジスタVCSRに記憶されたデフォールトバンク
ビットCBANKとして指示された現在バンクからベク
トルレジスタをアクセスする。第2制御ビットVEC6
4はデフォールトによるレジスタ番号が各バンクからレ
ジスタを含むダブルサイズベクトルレジスタを識別する
かを指示する。命令の構文はベクトルレジスタを識別す
るレジスタ番号をスカラレジスタを識別するレジスタ番
号と区別する。
【0019】各ベクトルレジスタはプログラム可能なサ
イズのデータエレメントに分割されることができる。表
1は288ビットベクトルレジスタ内でデータエレメン
トに対して支援されるデータ形式を示す。
【0020】
【表1】
【0021】後述する別添Dにおいて本発明の好ましい
実施の形態から支援されるデータサイズとデータ形式に
対する追加説明を提供する。
【0022】int9データ形式の場合、9ビットバイ
トが288ビットベクトルレジスタに必然的に包装され
るが、他のデータ形式の場合には288ビットベクトル
レジスタに全ての9ビットは使用されない。288ビッ
トベクトルレジスタは32個の8ビット又は9ビット整
数データエレメント、16個の16ビット整数データエ
レメント、或いは8個の32ビット整数または浮動小数
点エレメントを保有することができる。また、2ベクト
ルレジスタはダブルサイズベクトルでデータエレメント
を包装するように結合できる。本発明の好ましい実施の
形態で制御及び状態レジスタVCSRに制御ビットVE
C64を設定することは、ダブルサイズ(576ビッ
ト)がベクトルレジスタのデフォールトサイズの場合、
ベクトルプロセッサ120をモードVEC64に設定す
る。
【0023】また、マルチメディアプロセッサ100は
両プロセッサ110,120がアクセスし得る1セット
の32ビット拡張レジスタ115を含む。後述する別添
Bにおいて本発明の好ましい実施の形態で1セットのレ
ジスタとそれらの機能を説明する。拡張レジスタとベク
トルプロセッサ120のスカラ及び特殊目的のレジスタ
は、幾つかの環境でプロセッサ110がアクセスし得
る。2つの特殊“使用者”拡張レジスタはプロセッサ1
10,120が同時にレジスタを読み取れるように2つ
の読取りポートをもっている。他の拡張レジスタは同時
にアクセスされることができない。
【0024】ベクトルプロセッサ120はベクトルプロ
セッサがランニング或いはアイドル状態にあるかを示す
2つの選択的な状態(VP_RUN,VP_IDLE)
を有する。プロセッサ110はベクトルプロセッサ12
0が状態VP_IDLEにある時、ベクトルプロセッサ
120のスカラ或いは特殊目的のレジスタを読み取るか
書き込むことができるが、ベクトルプロセッサ120が
状態VP_RUNにある間にプロセッサ110がベクト
ルプロセッサ120のレジスタを読み取ったり書き込ん
だりした結果は未定である。
【0025】プロセッサ110に対するARM7命令セ
ットの拡張は拡張レジスタとベクトルプロセッサ120
のスカラ及び特殊目的のレジスタをアクセスする命令を
含む。命令MFER,MFEPはそれぞれ、拡張レジス
タとベクトルプロセッサ120のスカラ或いは特殊目的
のレジスタからプロセッサ110の一般レジスタにデー
タを移動させる。命令MTER,MTEPはそれぞれ、
プロセッサ110の一般的なレジスタから拡張レジスタ
とベクトルプロセッサ120のスカラ或いは特殊目的の
レジスタにデータを移動させる。TESTSET命令は
拡張レジスタを読み取り拡張レジスタのビット30を1
に設定させる。命令TESTSETはプロセッサ110
が生産された結果を読み取るか、或いは使用したプロセ
ッサ120に対する信号を発生するようにビット30を
設定することにより、使用者/生産者同期を容易にす
る。STARTVP及びINTVPのようなプロセッサ
110に対する他の命令はベクトルプロセッサ120の
演算状態を制御する。
【0026】プロセッサ110はベクトルプロセッサ1
20の演算を制御するマスタプロセッサとしての役割を
果たす。プロセッサ110,120の間の不均衡分割制
御を使用することはプロセッサ110,120の同期化
問題を単純化させる。プロセッサ110はベクトルプロ
セッサ120が状態VP_IDLEにある間にベクトル
プロセッサ120に対するプログラムカウンタに命令ア
ドレスを記録することにより、ベクトルプロセッサ12
0を初期化させる。その後、プロセッサ110はベクト
ルプロセッサ120を状態VP_RUNに変更させるS
TARTVP命令を実行する。状態VP_RUNにおい
てベクトルプロセッサ120はキャッシュサブシステム
130を通して命令を取り出し、プロセッサ110と並
列にそれら命令を実行し、引き続き自分のプログラムを
実行する。起動後にベクトルプロセッサ120は例外に
会うか、適切な条件が満足されてVCJOINまたはV
CINT命令を実行するか、或いはプロセッサ110に
よってインタラプトがかかる時まで実行し続ける。ベク
トルプロセッサ120は拡張レジスタに結果を記録する
か、プロセッサ110,120の共有アドレス空間に結
果を記録するか、或いはベクトルプロセッサ120が状
態VP_IDLEに再進入する時プロセッサ110がア
クセスするスカラ或いは特殊目的のレジスタに結果を残
すことにより、プロセッサ110に対するプログラム実
行の結果をパスすることができる。
【0027】ベクトルプロセッサ120は自分の例外を
処理することができない。例外を引き起こす命令の実行
時にベクトルプロセッサ120は状態VP_IDLEに
進入してプロセッサ110に対してダイレクトラインを
通してインタラプト要求(interrupt request)を発生す
る。ベクトルプロセッサ120はプロセッサ110が他
のSTARTVP命令を実行する時まで状態VP_ID
LEに残っている。プロセッサ110は例外現象を判断
してベクトルプロセッサ120のレジスタVISRCを
読み取り、ベクトルプロセッサ120を更に初期化させ
ることによりできるだけ例外を処理し、その後所望に応
じて、実行を再び始めるようにベクトルプロセッサ12
0を調整する。
【0028】プロセッサ110によって実行されるIN
TVP命令は、ベクトルプロセッサ120がアイドル状
態VP_IDLEに進入するようにベクトルプロセッサ
120にインタラプトを掛ける。例えば、命令INTV
Pはマルチタスクシステム(multitasking system)に用
いられ、ビデオ復号化のような1つのタスクからサウン
ドカードエミュレーションのような他のタスクにベクト
ルプロセッサを交換する。
【0029】ベクトルプロセッサ命令VCINT,VC
JOINは命令によって指示された条件が満足される場
合、ベクトルプロセッサ120による実行を停止し、状
態VP_IDLEにベクトルプロセッサ120を設定
し、このような要求が遮断されない場合、プロセッサ1
10に対するインタラプトを発する。ベクトルプロセッ
サ120のプログラムカウンタ(特殊目的のレジスタV
PC)はVCINT或いはVCJOIN命令の次の命令
アドレスを示す。プロセッサ110はVCINT或いは
VCJOIN命令がインタラプト要求を引き起こしたか
否かを判断するために、ベクトルプロセッサ120のイ
ンタラプトソースレジスタVISRCをチェックするこ
とができる。ベクトルプロセサ120は大きいデータバ
スをもっており且つレジスタのセーブ及び復旧にさらに
効率的なので、ベクトルプロセッサ120によって実行
されたソフトウェアは環境スイッチングの間、レジスタ
をセーブし復旧する。“マルチプロセッサにおける効率
的な環境セービング及び復旧”との名称の本願出願と関
連した他の出願には環境スイッチングに対する好ましい
システムが記述されている。
【0030】図2はベクトルプロセッサ120の好まし
い実施の形態の重要な機能ブロックを示す。ベクトルプ
ロセッサ120は命令取出しユニット(IFU:Instru
ction Fetch Unit)210、デコーダ220、スケジュ
ーラ230、実行データパス240、及びロード/記憶
ユニット(LSU:Load/Store Unit)250を含む。I
FU210は命令を取り出してブランチ(Branch)のよう
なフローコントロール命令を処理する。命令デコーダ2
20はIFU210から達した順序によって各サイクル
ごとに1つの命令を復号化して、命令から復号化された
フィールド値をFIFO方式でスケジューラ230に記
録する。スケジューラ230は演算実行段階において必
要とする実行制御レジスタに発行されるフィールド値を
選択する。発行選択は実行データパス240或いはロー
ド/記憶ユニット250のような処理資源の有効性とオ
ペランド(operand)依存性による。実行データパス24
0はベクトルまたはスカラデータを操作する論理/算術
命令を実行する。ロード/記憶ユニット250はベクト
ルプロセッサ120のアドレス空間をアクセスするロー
ド/記憶命令を実行する。
【0031】図3はメイン命令バッファ310と第2命
令バッファ312に分割された命令バッファを含むIF
U210の実施の形態に対するブロック図を示す。メイ
ンバッファ310は現在プログラムカウントに対応する
命令を含む8つの連続命令を含む。第2命令バッファ3
12はバッファ310命令の後続の8命令を含む。IF
U210はまたバッファ310或いは312の次のフロ
ーコントロール命令のターゲットを含んだ8連続命令を
含むブランチターゲットバッファ314を備える。好ま
しい実施の形態でベクトルプロセッサ120は各命令が
32ビットで長い場合、RISC形命令セットを使用
し、バッファ310,312,314は8×32ビット
バッファであり、256ビット命令バスを通じてキャッ
シュサブシステム130に接続される。IFU210は
単一クロックサイクル内にキャッシュサブシステム13
0からバッファ310,312,314中のいずれか1
つに8命令をロードすることができる。レジスタ34
0,342,344はそれぞれのバッファ310,31
2,314にロードされた命令に対するベースアドレス
を指示する。
【0032】マルチプレクサMUX332はメイン命令
バッファ310から現在命令を選択する。もし、現命令
がフローコントロール命令でなく且つ命令レジスタ33
0に記憶された命令が復号化段階の実行より前にある場
合、現命令は命令レジスタ330に記憶され、プログラ
ムカウントは増分される。プログラムカウントの増分が
バッファ310にある最終の命令を選択した後、次のセ
ットの8命令はバッファ310にロードされる。もしバ
ッファ312が所望の8命令を含む場合、バッファ31
2とレジスタ342の内容は直ちにバッファ310とレ
ジスタ340に移動され、8以上の命令はキャッシュサ
ブシステム130から第2命令バッファ312に予め取
り出される。加算器350はマルチプレクサMUX35
2によって選択されたオフセットレジスタ342のベー
スアドレスから次のセットの命令のアドレスを決定す
る。加算器350からの結果アドレスはレジスタ342
からのアドレスがレジスタ340に移動した場合に或い
はその後にレジスタ342に記憶される。さらに、計算
されたアドレスは8命令に対する要求を有するキャッシ
ュサブシステム130に送られる。キャッシュサブシス
テム130に対する予備呼出がバッファ310に要求さ
れる時、バッファ312に対する次の8命令がまだ備え
られていない場合、予め要求された命令はキャッシュサ
ブシステム130から受信され次第にバッファ310に
記憶される。
【0033】現在命令がフローコントロール命令の場
合、IFU210はフローコントロール命令に対する条
件を評価し、フローコントロール命令を従うプログラム
カウントをアップデートさせることにより命令を処理す
る。IFU210は条件変更可能な従前の命令が完了し
ていないために、条件が決定されていない場合に保留に
なる。ブランチがなされない場合、プログラムは増分さ
れ、次の命令が前記のように選択される。もしブランチ
が成されてブランチターゲットバッファ314がブラン
チのターゲットを含む場合、バッファ314とレジスタ
344の内容がバッファ310及びレジスタ340に移
動され、IFU210はキャッシュサブシステム130
からの命令を待たずにデコーダ220に引き続き命令を
提供する。
【0034】ブランチターゲットバッファ314に対す
る命令を予め取り出すために、スキャナ320は現在プ
ログラムカウント後の次のフロー制御命令を探すため、
バッファ310,312をスキャニングする。もしフロ
ー制御命令がバッファ310または312から発見され
る場合、スキャナ320は命令を含むバッファ(310
又は312)のベースアドレスからフロー制御命令のタ
ーゲットアドレスを含む整列したセットの8命令に対す
るオフセットを決定する。マルチプレクサ352,35
4はレジスタ340或いは342からバッファ314に
対する新しいベースアドレスを発生する加算器350に
ベースアドレスとフローコントロール命令からオフセッ
トを提供する。新しいベースアドレスはキャッシュサブ
システム130に印加されてブランチターゲットバッフ
ァ314に8命令を引き続き提供する。
【0035】“減少及び条件部ブランチ”命令(VD1
CBR,VD2CBR,VD3CBR)及び“変更制御
レジスタ”命令VCHGCRのようなフローコントロー
ル命令を処理する場合、IFU210はプログラムカウ
ントに付加してレジスタ値を変更することができる。I
FU210がフローコントロール命令でない命令を発見
した時、その命令は命令レジスタ330に送られてから
デコーダ220に送り出される。
【0036】デコーダ220は図4に示すように、スケ
ジューラ230でFIFOバッファ410のフィールド
に制御値を記録することにより、命令を復号化する。F
IFOバッファ410は4行列のフリップフロップを含
み、各フリップフロップは1つの命令の実行を制御する
するための5フィールドの情報を含むことができる。行
列0〜行列3はそれぞれ一番古いものから一番新しい命
令に対する情報を保有し、FIFOバッファ410の情
報はさらに古い情報が命令として完全に除去されたと
き、さらに低い行列にシフトされる。スケジューラ23
0は実行レジスタ421〜427を含むコントロールパ
イプ420にロードされる命令の必要なフィールドを選
択することにより、実行端に命令を発行する。大部分の
命令は不規則的な順序で発行と実行を予定することがで
きる。特に論理/算術演算とロード/記憶演算の順序は
ロード/記憶演算と論理/算術演算との間のオペランド
従属性がない限り任意である。FIFOバッファ410
でフィールド値の比較はあるオペランド従属性が存在す
るかを指示する。
【0037】図5はベクトルプロセッサ120のアドレ
ス空間をアクセスせず、レジスタ対レジスタ演算を行う
命令に対する6段実行パイプラインを示す。命令取出し
段階511でIFU210は前記のように命令を取り出
す。取出し端はIFU210がパイプライン遅延、未解
決ブランチ条件、或いは予め取り出された命令を提供す
るキャッシュサブシステム130における遅延によって
保留されない限り1クロックサイクルを必要とする。復
号化段階512でデコーダ220はIFU210から命
令を復号化してスケジューラ230に命令に対する情報
を記録する。尚、復号化段階512はFIFO410で
いずれの行列も新しい演算を利用しない限り1クロック
サイクルを必要とする。演算はFIFO410で第1サ
イクルの間コントロールパイプ420に発行されること
ができるが、さらに古い演算の発行によって遅延するこ
ともある。
【0038】実行データパス240はレジスタ対レジス
タ演算を行い、ロード/記録演算に対するアドレスを提
供する。図8は実行データパス240の実施の形態のブ
ロック図であり、実行段階514,515,516と関
連して説明される。実行レジスタ421は読取り段階5
14の間クロックサイクルで読み取られたレジスタファ
イル610に2レジスタを識別する信号を提供する。レ
ジスタファイル610は32スカラレジスタと64ベク
トルレジスタを含む。図9はレジスタファイルのブロッ
ク図である。レジスタファイル610は各クロックサイ
クルごとに2読取り及び2書込みを収容するように2つ
の読取りポートと2つの書込みポートをもっている。各
ポートは選択回路612,614,616或いは618
と、288ビットデータバス613,615,617或
いは619を含む。回路612,614,616,61
8のような選択回路は当分野の周知された事項であり、
命令から典型的に抽出された5ビットレジスタ番号から
デコーダ220が導出するアドレス信号WRADDR
1,WRADDR2,RDADDR1或いはRDADD
R2と、命令又は制御状態レジスタVCSRからのバン
クビットと、レジスタがベクトルレジスタ或いはスカラ
レジスタであるかを指示する命令構文を使用する。デー
タ読取りはマルチプレクサ656を通してロード/記憶
ユニット250に対してなされるか、或いはマルチプレ
クサ622,624を通してマルチプライヤ620、算
術論理ユニット630、又はアキュムレータ640に対
してなされる。大部分の演算は2レジスタを読み取り、
読取り段階514は1サイクルで完了する。しかし、乗
算及び加算命令VMAD及びダブルサイズベクトルを調
整する命令のような幾つかの命令は2以上のレジスタか
らデータを必要とするので、読取り段階514は1クロ
ックサイクルよりさらに長くなる。
【0039】実行段階515において、マルチプライヤ
620、算術論理ユニット630、及びアキュムレータ
640を通る間、処理データはレジスタファイル610
から予め読み取られる。実行段階515は必要なデータ
の読取りに多数のサイクルが要求される場合、読取り段
階514をオーバーラップすることができる。実行段階
515の期間はデータエレメントのタイプ(整数或いは
浮動小数点)及び処理されたデータの量(読み取りサイ
クルの数)によって変わる。実行レジスタ422,42
3,425の信号は実行段階の間行われた第1演算のた
めに算術論理ユニット630、アキュムレータ640、
及びマルチプライヤ620に対する入力データを制御す
る。実行レジスタ432,433,435は実行段階5
15の間行われた第2演算を制御する。
【0040】図10は乗算器(マルチプライヤ)620
とALU(arithmetic and logic unit)630の実施の
形態に対するブロック図である。マルチプライヤ620
は8つの独立した36×36ビットマルチプライヤ62
6を含む整数マルチプライヤである。それぞれのマルチ
プライヤ626は制御回路に相互接続された4つの9×
9ビットマルチプライヤを含む。8ビット及び9ビット
データエレメントサイズをもつ場合、スケジューラ23
0からの制御信号は4つの9×9ビットマルチプライヤ
を互いに分離させて各マルチプライヤ626が4乗算を
行うようにすることで、マルチプライヤ620が1サイ
クルの間32独立乗算を行うようにする。16ビットデ
ータエレメントの場合、制御回路は一対の9×9ビット
マルチプライヤが共に動作するように接続させて、マル
チプライヤ620は16並列乗算を行う。32ビット整
数データエレメント形の場合、8つのマルチプライヤ6
26はクロックサイクルごとに8並列乗算を行う。乗算
の結果は9ビットデータエレメントサイズに対いて57
6ビットを提供し、そして他のデータサイズに対して5
12ビットを提供する。
【0041】ALU630は2クロックサイクル内にマ
ルチプライヤ620から生成された576ビットまたは
512ビットの結果を処理することができる。ALU6
30は8つの独立した36ビットALU636を含む。
各ALU636は浮動小数点加算と乗算のための32×
32ビット浮動小数点ユニットを含む。整数操作のため
に各ALU636は独立した8ビット及び9ビット操作
を行うことができ、16ビット及び32ビット整数デー
タエレメントに対して2或いは4セットで互いに接続さ
れ得る4ユニットを含む。
【0042】累算器(アキュムレータ)640は結果を
累算し、中間結果でさらに高い精密度のために2つの5
76ビットレジスタを含む。
【0043】記録段階516の間実行段階の結果はレジ
スタファイル610に記憶される。2つのレジスタは単
一クロックサイクルの間に記録されることができ、入力
マルチプレクサ602,605は記録される2データ値
を選択する。演算に対する記録段階516の期間は演算
結果として記録されるデータの量と、レジスタファイル
610に記録することによりロード命令を完了できるL
SU250からの完了によって異なる。実行レジスタ4
26,427からの信号は論理ユニット630、アキュ
ムレータ640、及びマルチプライヤ620のデータが
記録されるレジスタを選択する。
【0044】図6はロード命令の実行のための実行パイ
プライン520を示す。実行パイプライン520のため
の命令取出し段階511、復号化段階512、及び発行
段階513はレジスタ対レジスタ演算に対して説明され
たものと同一である。また、読取り段階514はキャッ
シュサブシステム130に対する呼出用アドレスを決定
するために実行データパス240がレジスタファイル6
10からデータを使用することを除いては前述と同一で
ある。アドレス段階525においてマルチプレクサ65
2,654,656は実行段階526,527のために
ロード/記憶ユニット250に提供されるアドレスを選
択する。ロード演算に対する情報は段階526,527
の間FIFO410に残留し、一方ロード/記憶ユニッ
ト250は演算を処理する。
【0045】図11はロード/記憶ユニット250に対
する実施の形態を示す。256段階の間525段階で決
定されたアドレスのデータのためにキャッシュサブシス
テム130に対するコール(call)を行う。好まし
い実施の形態はプロセッサ110,120を含む多重デ
バイスがキャッシュサブシステム130を通してローカ
ルアドレス空間をアクセスする場合、トランザクション
ベースキャッシュコール(transaction based cache cal
l)を使用する。要求されたデータはキャッシュサブシス
テム130に対するコール後に幾つかのサイクルの間に
使用し得ないが、ロード/記憶ユニット250は他のコ
ールが保留(pending)されている間キャッシュサブシス
テムに対するコールをすることができる。従って、ロー
ド/記憶ユニット250は停止されない。要求されたデ
ータを提供するためにキャッシュサブシステムに要求さ
れるクロックサイクルの数は、データキャッシュ194
にヒット或いはミスが存在するかによっている。
【0046】ドライブ段階527において、キャッシュ
サブシステム130はロード/記憶ユニット250に対
するデータ信号を要求する。キャッシュサブシステム1
30はロード/記憶ユニット250にサイクル当たり2
56ビット(32バイト)データを提供することができ
る。バイトアライナ710は288ビット値を提供する
ために対応する9ビット記憶位置に32バイトをそれぞ
れ整列させる。288ビットフォーマットは時々9ビッ
トデータエレメントを使用するMPEG符号化及び復号
化のようなマルチメディア応用に便利である。288ビ
ット値は読取りデータバッファ720に記録される。記
録段階528でスケジューラ230はFIFOバッファ
410から実行レジスタ(426または427)にフィ
ールド4を伝送して、データバッファ720からレジス
タファイル610に288ビット量を記録する。
【0047】図7は記憶命令の実行のための実行パイプ
ライン530を示す。実行パイプライン530のための
取出し段階511、復号化段階512、及び発行段階5
13は前述と同様である。読み取り段階514は記憶さ
れるべきデータとアドレス計算用データとを読み取るこ
とを除いては前述と同一である。記憶されるべきデータ
はロード/記憶ユニット250で記録データバッファ7
30に記録される。マルチプレクサ740は9ビットバ
イトを提供するフォーマットのデータを8ビットバイト
を有する通常のフォーマットに変換する。バッファ73
0からの変換されたデータとアドレス計算段階525か
らの関連アドレスはSRAM段階536の間キャッシュ
サブシステム130に並列に送られる。
【0048】ベクトルプロセッサ120の好ましい実施
の形態において、各命令は32ビット長であって、図8
に示された9つのフォーマットのうち1つをもち、RE
AR,REAI,RRRM5,RRRR,RI,CT,
RRRM9,RRRM*,及びRRRM9**のレベル
が付けてある。なお、別添Eにおいてベクトルプロセッ
サ120に対する命令セットについて説明する。
【0049】有効アドレスを決定する時にスカラレジス
タを使用する幾つかのロード、記憶、及びキャッシュ演
算はREARフォーマットをもつ。REAR−フォーマ
ット命令は000bのビット29〜31によって識別さ
れ、スカラレジスタに対する2つのレジスタ番号SR
b,SRiとビットDによるスカラ或いはベクトルレジ
スタである可能性のあるレジスタのレジスタ番号Rnに
よって識別される3オペランドをもつ。バンクビットB
はレジスタRnに対するバンクを識別するか、或いはデ
フォールトベクトルレジスタサイズがダブルサイズの場
合、ベクトルレジスタRnがダブルサイズベクトルレジ
スタであるかを指示する。op−コードフィールドOp
cはオペランドに実行される演算を識別し、フィールド
TTはロード或いは記憶のような伝送タイプを指す。典
型的なREAR−フォーマット命令はスカラレジスタS
Rb,SRiの内容を加算することにより決定されるア
ドレスからレジスタRnをロードする命令VLである。
もしビットAが設定される場合、計算されたアドレスは
スカラレジスタSRbに記憶される。
【0050】REA1−フォーマット命令は、フィール
ドIMMの8ビット中間値がスカラレジスタSRiの内
容の代わりに使用されることを除いてはREAR命令と
同一である。REARとREAIフォーマットはデータ
エレメントサイズフィールドを持たない。
【0051】RRRM5フォーマットは2ソースオペラ
ンドと1目的オペランドをもつ命令のためのものであ
る。これらの命令は3レジスタオペランド或いは2レジ
スタオペランドと5ビット中間値のうち1つを有する。
別添Eに示すように、フィールドD,S,Mの符号化は
第1ソースオペランドRaがスカラまたはベクトルレジ
スタであるか否かを判断し、第2ソースオペランドRb
/IM5がスカラレジスタ、ベクトルレジスタ、或いは
5ビット中間値であるか否かを判断し、目的レジスタR
dがスカラ或いはベクトルレジスタであるか否かを判断
する。
【0052】RRRRフォーマットは4レジスタオペラ
ンドをもつ命令のためのものである。レジスタ番号R
a,Rbはソースレジスタを指摘する。レジスタ番号R
dは目的レジスタを示し、レジスタ番号Rcはフィール
ドOpcによるソースまたは目的レジスタのうち1つを
示す。レジスタRbがスカラレジスタであることを指示
するようにビットSが設定されている場合を除いて全て
のオペランドはベクトルレジスタである。フィールドD
Sはベクトルレジスタに対するデータエレメントサイズ
を示す。フィールドOpcは32ビットデータエレメン
トに対するデータ型を選択する。
【0053】RI−フォーマット命令は中間値をレジス
タにロードさせる。フィールドIMMは18ビットまで
の中間値を含む。レジスタ番号RdはビットDによるス
カラレジスタと現在バンクのベクトルレジスタのうち1
つである目的レジスタを示す。フィールドDS,Fはそ
れぞれのデータエレメントサイズとタイプを指す。32
ビット整数データエレメントの場合、18ビット中間値
はレジスタRdにロードされる前に拡張されたサインで
ある。浮動小数点データエレメントの場合、ビット1
8、ビット17〜10、及びビット9〜0はそれぞれ3
2ビット浮動小数点値のサイン、指数、及び仮数(manti
ssa)を示す。
【0054】CTフォーマットはフローコントロール命
令に対するものであり、op−コードフィールドOp
c、条件フィールドCond、23ビット中間値IMM
を含む。条件フィールドによって示される条件が真実で
ある場合、ブランチが取られる。可能な条件コードは
“常時(always)”、“より少ない(less than)”、“同
一(equal)”、“以下或いは同一(less than or equa
l)”、“より大きい(greaterthan)”、“同一でない(no
t equal)”、“より大きいか或いは同一(greater than
or equal) ”、及び“オーバフロー(overflow)”であ
る。状態及び制御レジスタVCSRでビットGT,E
Q,LT,SOは条件を評価するのに用いられる。
【0055】フォーマットRRRM9は3レジスタオペ
ランド或いは2レジスタオペランドと9ビット中間値の
うちいずれかを提供する。ビットD,S,Mの組合せは
どのオペランドがベクトルレジスタ、スカラレジスタ、
或いは9ビット中間値であるかを示す。フィールドDS
はデータエレメントサイズを示す。RRRM9*とRR
RM9**フォーマットはRRRM9フォーマットの特
殊なケースであって、演算コードフィールドOpcによ
って区別される。RRRM9**フォーマットはソース
レジスタ番号Raを条件コードCondとIDフィール
ドに置き換えた。RRRM9**フォーマットは中間値
の最上位ビットMSBを条件コードCondとビットK
に置き換えた。RRRM9*とRRRM9**に対する
追加説明が条件部移動命令VCMOV、エレメントマス
クを有する条件部移動CMOVM、及び比較とマスク設
定CMPV命令と関連して後述する別添Eになされてい
る。
【0056】以上、本発明による特定の好ましい実施の
形態に関連して図示し述べたが、特許請求の範囲によっ
て設けられる本発明の精神や分野を外れない限度内で本
発明を多様に改造及び変換し得ることは当分野で通常の
知識を有する者には明らかなことである。
【0057】[別添A]例示的な実施例において、プロ
セッサ110はARM7プロセッサの規格に合う汎用プ
ロセッサである。ARM7プロセッサ内のレジスタ内の
説明に関するARMアーキテクチャ文献或いはARM7
データシート(1994年12月に発行された文献番号
ARMDDI0020C)を参照する。
【0058】ベクトルプロセッサ120との相互作用の
ために、プロセッサ110はベクトルプロセッサを開始
及び停止させ、同期を含んだベクトルプロセッサ状態を
テストし、ベクトルプロセッサ120内のスカラ/特殊
レジスタからのデータをプロセッサ110内の汎用レジ
スタ側に伝送し、一般レジスタからのデータをベクトル
プロセッサスカラ/特殊レジスタ側に伝送する。このよ
うな伝送のためには仲介者としてメモリを必要とする。
【0059】表2にはベクトルプロセッサの相互作用の
ためのARM7命令セットの拡張について説明されてい
る。
【0060】
【表2】
【0061】
【表3】
【0062】表3にはARM7の例外がリストされてお
り、これら例外はフローティング命令を行う前に検出及
び報告される。例外ベクトルアドレスは16進数表記で
与えられる。
【0063】
【表4】
【0064】次に、ARM7命令セットに対する拡張の
構文について説明する。用語説明及び命令フォーマット
に関するARMアーキテクチャ文献或いはARM7デー
タシート(1994年12月に発行された文献番号AR
MDDI0020Cを参照する。
【0065】前記ARMアーキテクチャはコプロセッサ
インタフェースのための3種類の命令フォーマットを提
供する。
【0066】1.コプロセッサデータ演算(CDP) 2.コプロセッサデータ伝送(LDC,STC) 3.コプロセッサレジスタ伝送(MRC,MCR) MSPアーキテクチャ拡張は3種類の形態を全て使用す
る。前記コプロセッサのデータ演算フォーマットCDP
はARM7側に再び伝送する必要のない演算のために用
いられる。
【0067】
【表5】
【0068】
【表6】
【0069】コプロセッサデータ伝送フォーマット(L
DC,STC)はベクトルプロセッサのレジスタのサブ
セットをメモリに直接ロード或いは記憶させるのに用い
られる。前記ARM7プロセッサはワードアドレスを供
給する役目をし、前記ベクトルプロセッサはデータを供
給又は受信し、伝送されたワードの個数を制御する。よ
り詳細なことはARM7データシートを参照する。
【0070】
【表7】
【0071】
【表8】
【0072】コプロセッサレジスタ伝送フォーマット
(MRC,MCR)はARM7とベクトルプロセッサと
の間で直接情報を通信するのに用いられる。このフォー
マットはARM7レジスタとベクトルプロセッサスカラ
或いは特殊レジスタとの間の移動に用いられる。
【0073】
【表9】
【0074】
【表10】
【0075】拡張ARM命令説明 拡張ARM命令についてはアルファベット順で説明す
る。
【0076】CACHE キャッシュ演算
【0077】
【表11】
【0078】アセンブラ構文 STC{cond} p15,c0pc,(Addre
ss) CACHE{cond}Opc,(Address) ここで、cond={eq,he,cs,cc,mi,
pl,vs,vc,hi,Is,ge,It,gt,l
e,ai,nv}、Opc={0,1,3}。LDC/
STCフォーマットのCRnフィールドはOpcを特定
するのに用いられるので、演算コードの十進数表記は第
1構文で文字“c”(即ち、0の代わりにc0を使用す
る)で開始すべきことに注目されたい。アドレスモード
構文に関するARM7データシートを参照する。
【0079】
【表12】
【0080】演算 EAを算出する方法に対するARM7データシートを参
照する。
【0081】例外 ARM7保護侵害INTVP インタラプトベクトルプロセッサ
【0082】
【表13】
【0083】アセンプラ構文 CDP{cond}p7,1,c0,c0,c0 INTVP{cond} ここで、cond={eq,ne,cs,cc,mi,
pl,vs,hi,ls,ge,lt,gt,le,a
l,ns} 説明 この命令はCondが真の時にのみ行われる。
【0084】この命令はベクトルプロセッサを停止させ
るために信号伝送を行う。
【0085】ARM7はベクトルプロセッサの停止を待
たず、次の命令を引き続き行う。
【0086】MFER使用中(busy)待機ループはこの命
令が行われた後にベクトルプロセッサが停止されたかを
調べるために用いられるべきである。この命令はベクト
ルプロセッサが予めVP_IDLE状態であれば、何の
影響も及ぼさない。
【0087】ビット19:12,7:15及び3:0は
予約されている。
【0088】例外 ベクトルプロセッサ利用不可能。
【0089】MFER 拡張レジスタからの移動
【0090】
【表14】
【0091】アセンブラ構文 MRC{cond}p7,1,Rd,cP,cER,0 MFER{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
pl,rs,vs,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・r15},P
={0,1},ER={0,・・15}、そしてRNA
MEはアーキテクチャ的に特定されたレジスタニモニッ
ク{即ち、PERO或いはCSR}を意味する。
【0092】
【表15】
【0093】ビット19:17及び7:5は予約されて
いる。
【0094】例外 使用者モード中にPERxをアクセスしようとする時の
保護侵害MFVP ベクトルプロセッサからの移動
【0095】
【表16】
【0096】アセンブラ構文 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,l
e,al,nv},Rd={r0,・・・r15},C
Rn={c0,・・・c15},CRm={c0,・・
c15}、そしてRNAMEはアーキテクチャ的に特定
されたレジスタニモニック{即ち、SPO或いはVC
S}を意味する。
【0097】
【表17】
【0098】SR0は常に0である32ビットと判読
し、これに対する記録は無視される。
【0099】例外 ベクトルプロセッサ利用不可能MTER 拡張レジスタ側への移動
【0100】
【表18】
【0101】アセンブラ構文 MRC{cond}p7,1,Rd,cP,cER,0 MRER{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
pl,rs,vc,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・・r15},P
={0,1},ER={0,・・15},そしてRNA
MEはアーキテクチャ的に特定されたレジスタニモニッ
ク{即ち、PERO或いはCSR}を意味する。
【0102】
【表19】
【0103】ビット19:17及び7:5は予約されて
いる。
【0104】例外 使用者モード中にPERxをアクセスしようとする時の
保護侵害MTVP ベクトルプロセッサ側への移動
【0105】
【表20】
【0106】アセンブラ構文 MRC{cond}p7,1,Rd,cRn,CRm,
0 MRER{cond}Rd,RNAME ここで、cond={eq,ne,cs,cc,mi,
pl,vs,hi,ls,ge,lt,gt,le,a
l,nv},Rd={r0,・・・r15},CRn=
{c0,・・c15}、CRm={c0,・・・c1
5}、そしてRNAMEはアーキテクチャ的に特定され
たレジスタニモニック{即ち、SPO或いはVCS}を
意味する。
【0107】
【表21】
【0108】例外 ベクトルプロセッサ利用不可能PFTCH プリフェッチ
【0109】
【表22】
【0110】アセブラ構文 MRC{cond}p15,2,(Address) MFTCH{cond}(Address) ここで、cond={eq,he,cs,cc,mi,
pl,rs,vc,hi,ls,ge,lt,gt,l
e,al,nv}、アドレスモード構文に関するARM
7データシートを参照する。
【0111】説明 この命令はCondが真の時にのみ行われる。EAによ
って特定されたキャッシュラインはARM7データキャ
ッシュ側にプリフェッチされる。
【0112】演算 EAが算出される方法に関してはARM7データシート
を参照する。
【0113】例外 無しSTARTVP 開始ベクトルプロセッサ
【0114】
【表23】
【0115】アセブラ構文 CDP{cond}p7,2,c0,c0,c0 STARTVP{cond} ここで、cond={eq,he,cs,cc,mi,
pl,vs,vc,hi,ls,ge,lt,gt,l
e,al,nv} 説明 この命令はCondが真の時にのみ行われる。この命令
は遂行を開始するようにベクトルプロセッサ側に信号伝
送を行い、VISRC(vjp)とVISRC(vi
p)を自動的にクリアさせる。ARM7はベクトルプロ
セッサが遂行を開始することを待たず、次の命令を引き
続き行う。前記ベクトルプロセッサの状態はこの命令が
行われる前に所望の状態に初期化されるべきである。こ
の命令は前記ベクトルプロセッサが予めVP_RUN状
態になっている場合には何の影響も及ぼさない。
【0116】ビット19:12,7:5,及び3:0は
予約されている。
【0117】例外 ベクトルプロセッサ利用不可能TESTSET テスト及びセット
【0118】
【表24】
【0119】アセンブラ構文 MRC{cond}p7,0,Rd,c0,cER,0 TESTSET{cond}Rd,RNAME ここで、cond={eq,he,cs,cc,mi,
pl,rs,re,hi,ls,ge,lt,gt,l
e,al,nv},Rd={r0,・・r15},ER
={0,・・15},そしてRANAMEはアーキテク
チャ的に特定されたレジスタニモニック(即ち,UER
1或いはVASYNC)を意味する。
【0120】説明 この命令はCondが真の時にのみ行われる。この命令
はUERx乃至RDの内容を復帰させ、UERx(3
0)を1に設定する。ARM7レジスタ(15)が目的
レジスタとして特定されると、UERx(30)はCP
SRのZビットから復帰し、これにより短い使用中(bus
y)待機ループが行われることができる。現在、UER1
のみがこの命令に従って動作するように定義されてい
る。
【0121】ビット19:12及び7:5は予約されて
いる。
【0122】例外 無し [別添B]マルチメディアプロセッサのアーキテクチャ
100はプロセッサ110がMFER命令或いはMTE
R命令でアクセスする拡張レジスタを定義する。この拡
張レジスタは特権拡張レジスタと使用者拡張レジスタを
含んでいる。
【0123】特権拡張レジスタはマルチメディア信号プ
ロセッサの演算を制御するのに主に用いられる。これら
は表12に示されている。
【0124】
【表25】
【0125】前記制御レジスタはMSP(100)の演
算を制御する。CTRの全てのビットはリセット時にク
リアされる。前記レジスタ定義は表2Bに示されてい
る。
【0126】
【表26】
【0127】
【表27】
【0128】前記状態レジスタはMSP(100)の状
態を指示する。フィールドSTRの全てのビットはリセ
ット時にクリアされる。レジスタ定義は表14に示され
ている。
【0129】
【表28】
【0130】プロセッサバージョンレジスタはプロセッ
サのマルチメディア信号プロセッサファミリーの特定プ
ロセッサの特定バージョンを表示する。
【0131】ベクトルプロセッサインタラプトマスクレ
ジスタVIMSKはプロセッサ110にベクトルプロセ
ッサ例外を報告する演算を制御する。VIMSKのそれ
ぞれのビットはVISRCレジスタの対応ビットと共に
セットされると、ARM7に対してインタラプトを行う
例外をイネーブルさせる。これはベクトルプロセッサ例
外を検出する方法には何の影響も及ぼさず、但し前記例
外がARM7に対してインタラプトを掛けるべきかにの
み影響を及ぼす。VIMSKの全てのビットはリセット
時にクリアされる。レジスタ定義は表15に示されてい
る。
【0132】
【表29】
【0133】ARM7命令アドレス区切り点レジスタは
ARM7プログラムデバック(debugging)時にこれを支
援する。レジスタ定義は表16に示されている。
【0134】
【表30】
【0135】ARM7データアドレス区切り点レジスタ
はARM7プログラムデバッグ(debugging)時にこれを
支援する。レジスタ定義は表17に示されている。
【0136】
【表31】
【0137】スクラッチパッドレジスタはキャッシュサ
ブシステム130のSRAMを使用して形成されたスク
ラッチのアドレスとサイズを構成する。レジスタ定義は
表18に示されている。
【0138】
【表32】
【0139】使用者拡張レジスタはプロセッサ110,
120の同期に主に用いられる。使用者拡張レジスタは
ビット30にマッピングされた1ビットのみを持てるよ
うに現在定義されており、“MFERR15,UER
x”のような命令は例えばビット値をZフラグ側に復帰
させる。ビットUERx(31)及びUERx(29:
0)は常にゼロと判読される。使用者拡張レジスタは表
19に説明されている。
【0140】
【表33】
【0141】表20はパワーオンリセット時の拡張レジ
スタの状態を示す。
【0142】
【表34】
【0143】[別添C]ベクトルプロセッサ120のア
ーキテクチャ状態は32個の32ビットスカラレジス
タ;32個の288ビットベクトルレジスタの2つのバ
ンク:一対の576ビットベクトルアキュムレータレジ
スタ;1セットの32ビット特殊レジスタを含んでい
る。スカラレジスタ、ベクトルレジスタ及びアキュムレ
ータレジスタは汎用プログラミングのためのものであ
り、多数の他のデータ形態を支援する。
【0144】このセクション及び次のセクションでは次
の表記を使用する。:VRはベクトルレジスタを示し、
VRiは第iベクトルレジスタ(ゼロオフセット)を示
し、VR[i]はベクトルレジスタVRの第iデータエ
レメントを示し、VR(a:b)はベクトルレジスタV
Rのビットa乃至ビットbを示し、VR[i](a:
b)はベクトルレジスタVRの第iデータエレメントの
ビットa乃至ビットbを示す。
【0145】ベクトルアーキテクチャは一つのベクトル
レジスタ内の多数のエレメントDMLデータ種類とサイ
ズの追加された寸法をもっている。ベクトルレジスタは
固定されたサイズをもっているので、保持可能なデータ
エレメントの個数は前記エレメントのサイズに左右され
る。MSPアーキテクチャは表21に示すように5種類
のエレメントサイズを定義している。
【0146】
【表35】
【0147】MSPアーキテクチャは特定されたデータ
種類と命令サイズによってベクトルデータを解釈する。
現在、大部分の算術命令のバイト、バイト9、ハフワー
ド及びワードエレメントサイズに対しては2の補数(整
数)フォーマットが支援されている。また、IEEE7
4単一精密度フォーマットは大部分の算術命令のワード
エレメントサイズが支援されている。
【0148】命令シーケンスが意味のある結果をもたら
す限り、プログラマは所望の方式でデータを自由に解釈
する。例えば、プログラマはプログラムが“偽(fals
e)”オーバフロー結果を処理し得る限り、符号のない
8ビット数の格納にバイト9サイズを自由に使用し、バ
イトサイズデータエレメントの符号の無い8ビット数を
同様に自由に格納し、提供された2補数算術命令を使用
してこれらに対して演算を自由に行うことができる。
【0149】SR0乃至SR31で表記された32個の
スカラレジスタが存在する。これらスカラレジスタは幅
が32ビットであり、未確定されたサイズのうちいずれ
かのサイズの1つのデータエレメントを含むことができ
る。スカラレジスタSR0はこのレジスタSR0が0か
らなる32であって常に判読することができ、レジスタ
SR0への記録が無視される点から特別であると言え
る。バイト形、バイト9形及びハフワードデータ形は未
確定の値をもった最上位ビットをもっているスカラレジ
スタの最下位ビットに格納される。
【0150】レジスタはデータ種類指示器を持っていな
いので、プログラマはそれぞれの命令に用いられるレジ
スタのデータ種類を知っていなければならない。これは
32ビットレジスタが32ビットレジスタを含んでいる
と仮定される他のアーキテクチャとは異なる。MSPア
ーキテクチャはデータ種類Aの結果がデータ種類Aに対
して未確定されたビットのみを修正することを指示す
る。例えば、バイト9加算の結果は32ビット目的スカ
ラレジスタの下位9ビットのみを修正する。上位23ビ
ットの値は命令に対して異に言及されなければ、未確定
された状態である。
【0151】64ベクトルレジスタはそれぞれ32ビッ
トレジスタをもっている2つのバンクから構成されてい
る。バンク0は第1の32レジスタを含んでおり、バン
ク1は第2の32ビットレジスタを含んでいる。これら
2つのバンクのうち、一つは現在バンクとして設定さ
れ、もう一つは交替バンクとして設定されるようにして
用いられる。交替バンクのベクトルレジスタをアクセス
し得るロード/記憶命令及びレジスタ移動命令を除いた
全てのベクトル命令はデフォルトであって、現在バンク
内のレジスタを使用する。ベクトル制御及び状態レジス
タVCSRのCBANKビットはバンク0或いはバンク
1を現在バンクとして設定するのに用いられる(他のバ
ンクは交替バンクになる)。現在バンク内のベクトルレ
ジスタはVR0乃至VR31とし、交替バンク内のベク
トルレジスタはVRA0乃至VRA31とする。
【0152】また、2つのバンクは概念的には576ビ
ットそれぞれのダブルサイズの32個のベクトルレジス
タを提供し得るように結合することができる。制御レジ
スタVCSRのVEC64ビットはこのモードを示す。
VEC64モードには現在バンク及び交替バンクが存在
せず、ベクトルレジスタ番号は2つのバンクからの対応
する対の288ベクトルビットベクトルを示す。即ち、 VRi(575:0)=VR1i(287:0):VR
0i(287:0) ここで、VR0i及びVR1iはそれぞれバンク1及び
バンク0でレジスタ番号VRiをもっているベクトルレ
ジスタを示す。ダブルサイズベクトルレジスタはVR0
乃至VR31と表記されている。
【0153】ベクトルレジスタは表22に示したバイ
ト、バイト9、ハフワード或いはワードサイズの多数の
エレメントを収容することができる。
【0154】
【表36】
【0155】一つのベクトルレジスタ内のエレメントサ
イズ間の混合は支援されない。バイト9エレメントサイ
ズを除いては288ビットのうち256ビットにのみが
用いられる。特に、全ての第9ビットは用いられない。
バイト、ハフワード及びワードサイズのうち用いられな
い32ビットは予約されており、プログラマはこれらの
値に対してどのの仮定もできない。ベクトルアキュムレ
ータレジスタは目的レジスタの結果より高い正確度をも
っている中間結果を記憶装置に提供する。ベクトルアキ
ュムレータレジスタは4つの288ビットレジスタ、即
ちVAC1H,VAC1L,VAC0H,VAC0Lか
ら構成されている。VAC0H,VAC0L対はデフォ
ルトによって3つの命令によって用いられる。VEC6
4モードでのみ、VAC1H,VAC1L対が64種類
のバイト9ベクトル演算を模倣するのに用いられる。ソ
ースベクトルレジスタと同じ個数のエレメントをもって
いる拡張された正確度の結果を生成するために、拡張精
密度エレメントは表23に示すように一対のレジスタに
わたって節減される。
【0156】
【表37】
【0157】VAC1H,VAC1L対はVEC64モ
ードでのみ用いられることができ、この時エレメントの
個数はバイト9(及びバイト)、ハフワード、及びワー
ドの場合にそれぞれ64,32,或いは16になること
ができる。
【0158】メモリから直接ロードされ得るか、或いは
メモリに直接格納されうる33つの特殊レジスタがあ
る。RASR0乃至RASR15とする16つの特殊レ
ジスタは内部復帰アドレススタックを形成しており、そ
してサブルーチン呼出命令及びサブルーチン復帰命令に
よって用いられる。17個以上の32ビット特殊レジス
タが表24に示されている。
【0159】
【表38】
【0160】ベクトル制御及び状態レジスタ(VCS
R)に関する定義は表25に示されている。
【0161】
【表39】
【0162】
【表40】
【0163】
【表41】
【0164】ベクトルプログラムカウンタレジスタVP
Cはベクトルプロセッサ120によって行われる次の命
令のアドレスである。ARM7プロセッサ110はベク
トルプロセッサ120の演算を開始させるためにSTA
RTVP命令を発生する前にレジスタVPCをロードし
なければならない。
【0165】ベクトル例外プログラムカウンタVEPC
は一番最近の例外を一番生じさせるような命令のアドレ
スを指定する。MSP100は正確な例外を支援せず、
よって“一番生じさせるような”という用語を使用す
る。
【0166】ベクトルインタラプト供給レジスタVIS
RCはインタラプト供給源をARM7プロセッサ110
に特定する。適切なビットは例外の検出時にハードウェ
アによって設定される。ソフトウェアはベクトルプロセ
ッサ120が遂行を再開する前にレジスタVISRCを
クリアさせなければならない。レジスタVISRCで設
定されたあるビットによってベクトルプロセッサ120
は状態VP_IDLEに入る。対応するインタラプトイ
ネーブルビットがVIMSKに設定されると、プロセッ
サ110に対するインタラプトが信号伝送される。表2
6にはレジスタVISRCの内容が定義されている。
【0167】
【表42】
【0168】ベクトルインタラプト命令レジスタVII
NSはVCINT命令或いはVCJOIN命令がARM
7プロセッサ100をインタラプトするために行われる
と、VCINT命令或いはVCJOIN命令に更新され
る。
【0169】ベクトルカウントレジスタVCR1,VC
R2,VCR3は減少及びブランチ命令VD1CBR,
VD2CBR,VD3CBRのためのものであり、行わ
れるループのカウントに初期化される。命令VD1CB
Rが行われると、レジスタVCR1は1だけデクレメン
ト(decrement)される。カウント値がゼロでなく前記命
令に特定された条件がVFLAGと一致すると、ブラン
チが取られる。一致しなければ、ブランチは取られな
い。レジスタVCR1は2つの場合において1だけデク
レメントされる。レジスタVCR2,VCR3も同一方
法で用いられる。
【0170】ベクトルグローバルマスクレジスタVGM
R0は、VEC6モードで影響を受けるVR(575:
288)内のエレメントとVEC64モードにおけるV
R(287:0)内のエレメントを指示するのに用いら
れる。レジスタVGMR0のそれぞれのビットはベクト
ル目的レジスタの9ビットの更新を制御する。具体的
に、VGMR0(i)は、VEC32モードではVRd
(9i+8:9i)の更新を、そしてVEC64モード
ではVR0d(9i+8:9i)の更新を制御する。V
R0dはVEC64モードでバンク0の目的レジスタを
示し。VRdはVEC32モードでバンク0或いはバン
ク1になれる現在バンクの目的レジスタを意味する。ベ
クトルグローバルマスクレジスタVGMR0はVCMO
VM命令を除いた全ての命令の遂行に用いられる。
【0171】ベクトルグローバルマスクレジスタVGM
R1はVEC64モードで影響を受けるVR(575:
288)内のエレメントを指示するのに用いられる。レ
ジスタVGMR1のそれぞれのビットはバンク1のベク
トル目的レジスタの9ビットの更新を制御する。具体的
に、VGMR(i)はVR1d(9i+8:9i)の更
新を制御する。レジスタVGRM1はVEC32モード
では使用されないが、VEC64ではVCMOVM命令
を除いた全ての命令の遂行に影響を及ぼす。
【0172】ベクトルオーバフローレジスタVOR0は
ベクトル算術演算後にオーバフロー結果を含んでいるV
EC64モードでVR(287:0)内のエレメントを
指示するのに用いられる。このレジスタはスカラ算術演
算に修正されない。セットされたビットVOR1(i)
はバイトまたはバイト9の第iエレメント、ハフワード
の第(iidiv2)エレメント、或いはワードデータ
形演算の第(iidiv4)エレメントがオーバフロー
の結果を含んでいることを指示する。例えば、ビット1
とビット3は第1ハフワード及びワードエレメントのオ
ーバフローをそれぞれ指示するように設定される。VO
R0のビットのマッピングはVGMR0或いはVGMR
1のビットのマッピングとは異なる。
【0173】ベクトルオーバフローレジスタVOR1は
ベクトル算術演算後にオーバフローの結果を含んでいる
VEC64モードでVR(575:288)内のエレメ
ントを指示するのに用いられる。レジスタVOR1はV
EC32モードで使用されず、且つスカラ算術演算によ
って修正もされない。セットされたビットVOR1
(i)はバイトまたはバイト9の第iエレメント、ハフ
ワードの第1(iidiv2)エレメント、或いはワー
ドデータ形演算の第(iidiv4)エレメントがオー
バフローの結果を含んでいることを指示する。例えば、
ビット1とビット3はそれぞれVR(575:288)
で第1ハフワードとワードエレメントのオーバフローを
指示し得るようにセットされる。VOR1のビットマッ
ピングはVGMR0或いはVGMR1のビットマッピン
グとは異なる。
【0174】ベクトル命令アドレス区切り点レジスタV
IABRはベクトルプログラムデバッグ(debugging)時
にこれを支援する。このレジスタ定義は表27に示され
ている。
【0175】
【表43】
【0176】ベクトルデータアドレス区切り点レジスタ
VDABRはベクトルプログラムのデバッグ(debuggin
g)時にこれを支援する。表28にレジスタ定義が示さ
れている。
【0177】
【表44】
【0178】ベクトル移動マスクレジスタVMMR0は
モード命令に対してVCSR(SMM)=1の時のみな
らず、常にVCMOVMによって用いられる。レジスタ
VMMR0はVEC32モードで影響を受ける目的レジ
スタのエレメント、及びVEC64モードでVR(28
7:0)内のエレメントを指示する。VMMR0のそれ
ぞれのビットはベクトル目的レジスタの9ビットの更新
を制御する。具体的に、VMMR0(i)はVEC32
モードでVRd(9i+8:9i)の更新及びVEC6
4モードでVR0d(9i+8:9i)の更新を制御す
る。VR0dはVEC64モードでバンク0の目的レジ
スタを示し、このVRdはVEC32モードでバンク0
或いはバンク1になれる現在バンクの目的レジスタを意
味する。
【0179】ベクトル移動マスクレジスタVMMR1は
全ての命令に対してVCSR(SMM)=1の時のみな
らず、常にVCMOVMによって用いられる。レジスタ
VMMR1はVEC32モードで影響を受けるVR(5
75:288)内のエレメントを指示する。VMMR1
のそれぞれのビットはバンク1のベクトル目的レジスタ
の9ビットに対する更新を制御する。具体的に、VGM
R01(i)はVRd(9i+8:9i)の更新を制御
する。レジスタVGMR1はVEC32モードで用いら
れない。
【0180】ベクトル及びARM7同期レジスタVAS
YNCはプロセッサ110とプロセッサ120との間に
生産者/消費者形態の同期を提供する。現在、ビット3
0のみが定義されている。ARM7プロセッサは命令
(MFER,MTER,TESTSET)を使用してレ
ジスタVASYNCをアクセスすることができ、ベクト
ルプロセッサ120は状態VP_RUN或いは状態VP
_IDLEにある。レジスタVASYNCはTVP或い
はMFVP命令を通じてARM7プロセッサにアクセス
できないが、これはこれら命令が第1の16ベクトルプ
ロセッサの特殊レジスタに対してアクセスし得ないため
である。ベクトルプロセッサはVMOV命令を通じてレ
ジスタVASYNCをアクセスすることができる。
【0181】表29はパワーオンリセット時の前記ベク
トルプロセッサの状態を示す。
【0182】
【表45】
【0183】前記特殊レジスタは前記ベクトルプロセッ
サが命令を行える前に、ARM7プロセッサ110によ
って初期化される。
【0184】〔別添D〕各命令はソースと目的オベラン
ドのデータタイプを意味するか或いは指定する。いくつ
かの命令はソースに対して一つのデータタイプを取り、
結果に対して相違したデータタイプを生成する意味をも
つ。この別添は好ましい実施例で指示されるデータタイ
プを説明する。この出願の表30では支持されるデータ
タイプint8,int9,int16,int32,
及びフロート(float)について説明した。符号の無い整
数フォーマット(unsigned integer format)は支持され
ず、そしてそれの符号の無い整数値はまず使用前に2の
補数フォーマットに変換されるべきである。プログラマ
はオーバフローを適切に処理する限り、その選択による
ある他のフォーマット或いは符号の無い整数フォーマッ
トをもつ算術命令を自由に使用することができる。アー
キテクチャは単に2の補数整数のオーバフロー及び32
ビット浮動小数点データタイプを定義する。アーキテク
チャは符号なしオーバフローの検出に必要な8,9,1
6,或いは32ビット演算のキャリアウトを検出しな
い。
【0185】表30はロード(load)演算によって支持さ
れるデータサイズを示す。
【0186】
【表46】
【0187】アーキテクチャはデータタイプ境界に存在
するようにメモリアドレス整列を指定する。即ち、バイ
トに対しては何の整列要求事項もない。ハフワードに対
する整列要求事項はハフワード境界である。ワードに対
する整列要求事項はワード境界である。
【0188】表31はストア(store)演算によって支持
されるデータサイズを示す。
【0189】
【表47】
【0190】1以上のダム(dam)タイプはスカラ或いは
ベクトルでレジスタにマッピングされているために、若
干のデータタイプに対して何の定義もされていない結果
をもつ目的レジスタにビットが存在することができる。
実際に、ベクトル目的レジスタに対するバイト9データ
サイズ演算とスカラ目的レジスタに対するワードデータ
サイズ演算以外にも目的レジスタでその値が演算によっ
て定義されていないビットが存在する。これらビットの
ために、アーキテクチャはそれらの値が未定の状態にな
るように指定する。表32は各データサイズに対して定
義されていないビットを示す。
【0191】
【表48】
【0192】プログラマはプログラミング時にソース及
び目的レジスタ或いはメモリのデータタイプを知ってい
なければならない。一つのエレメントサイズから他のエ
レメントサイズへのデータタイプ変換は暫定的にベクト
ルレジスタに相違した数のエレメントが記憶されるよう
にする。例えば、ハフワードのワードデータタイプへの
ベクトルレジスタ変換は同一数の変換されたエレメント
を記憶するのに2つのレジスタを必要とする。逆に、ベ
クトルレジスタで使用者定義されたフォーマットが持て
るワードデータタイプからハフワードフォーマットへの
変換はベクトルレジスタの1/2に同一数のエレメント
と、他の1/2に残りのビットを生成する。いずれか一
つの場合に、データタイプの変換はソースエレメントと
相違したサイズをもつ変換されたエレメントの整列をも
つ構造的な発行(issue)を生成する。
【0193】原則的に、MSPアーキテクチャは結果と
してエレメントの数を密かに変更する演算を提供しな
い。アーキテクチャはプログラマが目的レジスタでエレ
メントの数を変更させる順序を知っていると判断する。
アーキテクチャは只一つのデータタイプから同一サイズ
の他のデータタイプに変換する演算を提供し、一つのデ
ータタイプから異なるサイズの他のデータタイプに変換
する時、プログラマがデータサイズの差異を調整するこ
とを要求する。
【0194】別添Eに説明されるVSHFLL及びVU
NSHFLLのような特殊命令は第1サイズをもつベク
トルから第2データサイズをもつ第2ベクトルへの変換
を単純にする。ベクトルVRa、例えばさらに小さいエ
レメントサイズのint8から、例えばさらに大きいサ
イズのint16へ2の補数データタイプを変換するの
に含まれた基本段階は次のようである。
【0195】1.異なるベクトルVRbをもつVRaに
あるエレメントをバイトデータタイプを使用して2ベク
トル(VRc:VRd)に分割する(shuffle)。VRa
にあるエレメントはダブルサイズレジスタ(VRc:V
Rd)にあるint16データエレメントの下位バイト
に移動させ、その値と関係の無いVRbのエレメントは
VRc:VRdの上位バイトに移動させる。この演算は
各エレメントのサイズをバイトからハフワードにダブル
化される間、VRaエレメントの1/2をVRcに、残
りの1/2をVRdに効果的に移動させる。
【0196】2.8ビットでVRc:VRdにあるエレ
メントを算術シフトさせてそれらをサイン拡張させる。
【0197】ベクトルVRa、例えばさらに大きいエレ
メントサイズのint16から、例えばさらに小さいサ
イズのint8に2の補数データタイプを変換するのに
含まれた基本段階は次のようである。
【0198】1.int16データタイプの各エレメン
トがバイトサイズで表現され得るかを保障するためにチ
ェックする。もし必要なら、さらに小さいサイズに合わ
せるために両端のエレメントを飽和(saturate)させる。
【0199】2.異なるベクトルVRbをもつVRaに
あるエレメントを2ベクトルVRc:VRdに結合させ
る(unshuffle)。VRaとVRbにある各エレメントの
上位1/2をVRcに移動させ、下位1/2をVRdに
移動させる。これはVRaの全てのエレメントの下位1
/2をVRdの下位1/2に効果的に集める。
【0200】特殊な命令は次のデータタイプ変換に提供
される:int32を単一精密浮動小数点に;単一精密
浮動小数点を固定小数点に(X.Y注解);単一精密浮
動小数点をint32に;int8をInt9に;in
t9をint16に;及びint16をint9に。
【0201】ベクトルプログラミングに余裕度を与える
ために大部分のベクトル命令はベクトル内から選択され
たエレメントに対してのみ演算を行うようにエレメント
マスクを使用する。ベクトルグローバルマスクレジスタ
(Vector Global Mask Register:VGMR0,VGMR
1)はベクトル命令によってベクトルアキュムレータと
目的レジスタで修正されるエレメントを識別する。バイ
ト及びバイト9データサイズ演算のためにVGMR0
(或いはVGMR1)で32ビットそれぞれは演算され
るエレメントを識別する。セット状態のビット(VGM
R0(i)はバイトサイズのエレメント(i,ここでi
は0から31まで)が影響を受けることを指示する。ハ
フワードデータサイズ演算のためにVGMR0(或いは
VGMR1)で各32ビット対は演算されるエレメント
を識別する。セット状態のビットVGMR0(2i:2
i+1)はエレメント(i,ここでiは0から15ま
で)が影響を受けることを指示する。もしVGMR0で
一対のうち只1つのビットがハフワードデータサイズ演
算のためにセットされた場合、対応するバイトで只その
ビットのみが修正される。ワードデータサイズ演算のた
めにVGMR0(或いはVGMR1)で各4ビットセッ
トは演算されるエレメントを識別する。セット状態のビ
ットVGMR0(4i:4i+3)はエレメント(i,
ここでiは0から7まで)が影響を受けることを指示す
る。もしVGMR0で4ビットセットの全てのビットが
ワードデータサイズ演算のためにセットされない場合、
対応するバイトで単にそのビットのみが修正される。
【0202】VGMR0及びVGMR1はベクトルレジ
スタをベクトル或いはスカラレジスタ或いはVCMPV
命令を使用した即値と比較することによりセットされる
ことができる。この命令は特定されたビットサイズによ
ってマスクを適切にセットする。スカラレジスタは只一
つのデータエレメントを含むように定義されるので、ス
カラ演算(即ち、目的レジスタがスカラである)はエレ
メントマスクによって影響を受けない。
【0203】ベクトルプログラミングに余裕度を与える
ために、大部分のMSP命令は3形態のベクトルとスカ
ラ演算を支援する。それらは次のようである: 1.ベクトル=ベクトルopベクトル 2.ベクトル=ベクトルopスカラ 3.スカラ=スカラopスカラ スカラレジスタがBオペランドとして特定されているケ
ース2の場合、スカラレジスタで単一エレメントはベク
トルAオベランド内に多数のエレメントをマッチングさ
せるのに要求されるだけ多く複製される。複製されたエ
レメントは特定されたスカラオペランドでエレメントを
同じ値をもつ。スカラオペランドはスカラレジスタ或い
は命令から即値オペランド(immedoate operand)の形態
になることができる。即値オベランドの場合にもし特定
されたデータタイプが即値フィールドサイズの有用なも
のよりさらに大きいデータサイズを使用する場合、適当
なサイン−拡張が加えられる。
【0204】多くのマルチメディア応用ではソース、中
間及び最終結果の精密性に特別な注意が要求される。し
かも、整数マルチプライ(integer multiply)命令は2ベ
クトルレジスタに記憶され得る“2倍精密”中間結果を
生成する。
【0205】MSPアーキテクチャは現在8,9,1
6,及び32ビットエレメントに対して2の補数整数フ
ォーマットと32ビットエレメントに対してIEEE7
54単一精密フォーマットを支援する。オーバフローは
特定されたデータタイプによって表現され得る一番ポジ
ティブ或いは一番ネガティブ値以上の結果となるように
定義される。オーバフローが発生する時、目的レジスタ
に記録された値は有効番号でない。アンダーフローは単
に浮動小数点演算についてのみ定義される。
【0206】もし、その他の状態でなければ、全ての浮
動小数点演算はビット(VCSR<RMODE)で特定
された4つのラウンディングモードのうち一つを使用す
る。若干の命令はゼロ(ラウンドイブン)ラウンディン
グモードからラウンドアウェイ(round away)として知ら
れたものを使用する。
【0207】飽和(Saturation)は多くのマルチメディア
応用で重要な機能である。MSPアーキテクチャは全て
の4整数及び浮動小数点演算で飽和を支援する。レジス
タVCSRでビットISATは整数飽和モードを特定す
る。また、速いIEEEモードと周知された浮動小数点
飽和モードはVCSRでFSATビットに特定される。
飽和モードがイネーブルされる時、一番ポジティブ或い
は一番ネガティブ値以上になる結果はそれぞれ一番ポジ
ティブ或いは一番ネガティブ値にセットされる。オーバ
フローはこの場合に発生することができなく、オーバフ
ロービットはセットされることができない。
【0208】表33は欠陥のある命令を実行する前に検
出されて報告される精密な例外(Precise Exception)に
対するリストを示す。
【0209】
【表49】
【0210】表34は欠陥のある命令よりプログラム順
序において後の方に存在するある番号の命令を実行した
後、検出されて報告される不精密な例外(Imprecise Exc
eption)に対するリストを示す。
【0211】
【表50】
【0212】〔別添E〕ベクトルプロセッサに対する命
令セットは表35に示すように11個の分類を含む。
【0213】
【表51】
【0214】
【表52】
【0215】表36はフローコントロール(Flow Contro
l)命令に対するリストを示す。
【0216】
【表53】
【0217】論理(Logical)分類はブール(Boolean)デ
ータタイプを支援し、エレメントマスクによって影響を
受ける。表37は論理(logic)命令リストである。
【0218】
【表54】
【0219】シフト/ローテート(Shift/Rotate)分類命
令はint8,int9,int16及びint32デ
ータタイプ(フロートデータタイプでない)を演算し、
エレメントマスクによって影響を受ける。表38はシフ
ト/ローテート分類命令リストである。
【0220】
【表55】
【0221】算術(Arithmetic)分類命令は一般にint
8,int9,int16,int32,及びフローデ
ータタイプを支援し、エレメントマスクによって影響を
受ける。支援されないデータタイプに対する特別な制限
に対しては次の各命令の詳細な説明を参照されたい。V
CMPV命令はそれがエレメントマスクを演算するの
で、エレメントマスクによって影響を受けない。表39
は算術演算命令リストである。
【0222】
【表56】
【0223】MPEG命令はMPEG符号化及び復号化
に特に適した命令分類であるが、多様な方式で用いられ
ることができる。MPEG命令はint8,int9,
int16及びint32データタイプを支援し、エレ
メントマスクによって影響を受ける。表40はMPEG
命令リストである。
【0224】
【表57】
【0225】各データタイプ変換(Data Type Conversio
n)命令は特殊なデータタイプを支援し、アーキテクチャ
がレジスタで1以上のデータタイプを支援しないため
に、エレメントマスクによって影響を受けない。表41
はデータタイプ変換命令リストである。
【0226】
【表58】
【0227】インタ−エレメント算術(Inter-element
Arithmetic)分類命令はint8,int9,int1
6,int32及びフローデータタイプを支援する。表
42はインタエレメント算術分類命令リストである。
【0228】
【表59】
【0229】インタエレメントムーブ(Inter-element M
ove)分類命令はバイト、バイト9、ハフワード及びワー
ドデータサイズを支援する。表43はインタエレメント
ムーブ分類命令リストである。
【0230】
【表60】
【0231】ロード/ストア(Load/Store)命令はバイ
ト、ハフワード、及びワードデータサイズに加えて特殊
なバイト9に関連したデータサイズ演算を支援し、エレ
メントマスクによって影響を受けない。表44はロード
/ストア分類命令リストである。
【0232】
【表61】
【0233】大部分のレジスタムーブ(Register Move)
命令はint8,int9,int16,int32及
びフローデータタイプを支援し、エレメントマスクによ
って影響を受けない。但し、VCMOVM命令はエレメ
ントマスクによって影響を受ける。表45はレジスタム
ーブ分類の命令リストである。
【0234】
【表62】
【0235】表46はキャッシュサブシステム130を
制御するキャッシュ演算(Cache Operation)分類の命令
リストである。
【0236】
【表63】
【0237】命令説明命名法 命令セットの説明を単純化するために、別添全体にわた
って特殊な用語が用いられる。例えば、命令オペランド
は他の注釈がない場合、バイト、バイト9、ハフワード
或いはワードサイズの符号付きた2の補数整数である。
単語“レジスタ”は汎用(スカラ或いはベクトル)レジ
スタを指称するのに用いられる。他のタイプのレジスタ
は明らかに説明される。アセンブリ言語構文(syntax)に
おいて、接尾語b,b9,h及びwはデータサイズ(バ
イト、バイト9、ハフワード、及びワード)と整数デー
タタイプ(int8,int9,int16,及びin
t32)の全てを示す。また、命令オペランド、演算、
及びアセンブリ言語構文類の説明に用いられた用語と記
号は次の通りである。
【0238】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によっ
てアドレスされる。
【0239】WORD〔WA〕 EAによってアドレ
スされるメモリのワード。ビット(31:24)がEA
+3によってアドレスされる。
【0240】NumElem 与えられたデータタイ
プに対するエレメントの数を示す。それはVEC32モ
ードでそれぞれバイト、バイト9、ハフワード、或いは
ワードデータサイズに対して32,16,或いは8であ
る。それはVEC64モードでそれぞれバイト、バイト
9、ハフワード、或いはワードデータサイズに対して6
4,32,或いは16である。スカラ演算の場合、Nu
mElemは0である。
【0241】EMASK〔i〕 i番目のエレメント
に対するエレメントマスクを示す。それはそれぞれバイ
ト、バイト9、ハフワード、或いはワードデータサイズ
に対してVGMR0/1,〜VGMR0/1,VGMR
0/1,或いは〜VGMR0/1で1,2,或いは4ビ
ットを示す。スカラ演算の場合、EMASK〔i〕=0
であってもエレメントマスクはセットされたと推定す
る。
【0242】MMASK〔i〕 i番目のエレメント
に対するエレメントマスクを示す。それはそれぞれバイ
ト、バイト9、ハフワード、或いはワードデータサイズ
に対してVMMR0、或いはVMMR1で1,2,或い
は4ビットを示す。
【0243】VCSR ベクトルコントロール
及び状態レジスタ VCSR(x) VCSRで1つのビット或いは複数
のビットを示す。“x”はフィールド名である。
【0244】 VPC ベクトルプロセッサプログラムカウ
ンタ VECSIZE ベクトルレジスタサイズはVEC3
2で32、VEC64モードで64である。
【0245】SPAD スクラッチパッド Cプログラミング構成物は演算のコントロールフローを
説明するのに用いられる。例外は次のように要約され
る。
【0246】 = 代入(assignment) : 接合(consatenation) {x‖y} xとyの間の選択を指示する(論理orではない) sex 特定データサイズに符号−拡張する sex−dp 特定データサイズの2倍精密度で符号−拡張 zex 特定データサイズにゼロ−拡張する zero ゼロ−拡張された(論理)右に移動 左に移動する(ゼロ充てん) trnc7 先行7ビット(ハフワードから)を打ち切る trac1 先行1ビット(バイト9から)を打ち切る % モジュロ演算者 |式| 式の絶対値 / 分割(フロートデータタイプに対して4IEEEラウンディン グモードのうち一つを使用する) // 分割(ゼロラウンディングモードからラウンドアウェイ(round away)を使用する) 飽和 整数データタイプに対してオーバフロー発生の代わりに一番陰 或いは一番陽の値に飽和する。フロートデータタイプに対して 、飽和は陽の無限大、陽のゼロ、陰のゼロ、或いは陰の無限大 に行われることができる。
【0247】一般的な命令フォーマットは図12に表示
されており、下記に説明される。
【0248】REARフォーマットはロード、ストア及
びキャッシュ演算命令によって用いられ、REARフォ
ーマットでフィールドは表47に与えられたように次の
意味をもつ。
【0249】
【表64】
【0250】ビット17:15は予約(Reserved)され、
アーキテクチャで未来の拡張時に交換性を保障するため
にゼロになるべきである。B:DとTTフィールドのあ
る符号化は定義されない。
【0251】プログラマはアーキテクチャがこのような
符号化が用いられる時に予想された結果を指定しないた
めに、前記のような符号化を使用してはいけない。表4
8はVEC32とVEC64モードで支援された(LT
としてTTフィールドで符号化された)スカラロード演
算を示す。
【0252】
【表65】
【0253】表49はビットVCSR(0)がクリアの
時のVEC30モードで支援された(LTとしてTTフ
ィールドで符号化された)ベクトルロード演算を示す。
【0254】
【表66】
【0255】Bビットは現在或いは交替バンクの指示に
用いられる。
【0256】表50はビットVCSR(0)がクリアの
時のVEC64モードで支援された(LTとしてTTフ
ィールドで符号化された)ベクトルロード演算を示す。
【0257】
【表67】
【0258】現在及び交替バンクの概念がVEC64モ
ードでは存在しないので、ビットBは64バイトベクト
ル演算の指示に用いられる。
【0259】表51はVEC32及びVEC64モード
で支援された(LTとしてTTフィールドで符号化され
た)スカラストア演算リストである。
【0260】
【表68】
【0261】表52はビットVCSR(0)がクリアの
時のVEC32モードで支援された(LTとしてフィー
ルドTTで符号化された)ベクトルストア演算リストで
ある。
【0262】
【表69】
【0263】表53はビットVCSR(0)がセットで
ある時のVEC64モードで支援された(LTとしてT
Tフィールドで符号化された)ベクトルストア演算リス
トである。
【0264】
【表70】
【0265】現在及び交替バンクの概念がVEC64モ
ードでは存在しないので、ビットBは64バイトベクト
ル演算の指示に用いられる。
【0266】REAIフォーマットはロード、ストア及
びキャッシュ演算命令によって用いられ、REAIフォ
ーマットでフィールドは表54に与えられたように次の
意味をもつ。
【0267】
【表71】
【0268】REAR及びREAIフォーマットはトラ
ンスファタイプに対して同一の符号化を適用する。符号
化に対する詳しいことはREARフォーマットを参考さ
れたい。
【0269】RRRM5フォーマットは3レジスタ或い
は2レジスタ及び5ビット即値オペランドを提供する。
表55はRRRM5フォーマットに対するフィールドを
定義する。
【0270】
【表72】
【0271】ビットは19:15は予約(RESERVED)さ
れ、アーキテクチャで未来の拡張時に互換性を保障する
ためにゼロになるべきである。
【0272】全てのベクトルレジスタオペランドは他の
状態がない限り、現在バンク(バンク0或いはバンク1
になることができる)を参照する。表56はDC(1:
0)が00,01,或いは10の時、D:S:M符号化
表である。
【0273】
【表73】
【0274】DS(1:0)が11の場合、D:S:M
符号化は次の表57に示す意味をもつ。
【0275】
【表74】
【0276】RRRRフォーマットは4レジスタのオペ
ランドを提供する。
【0277】表58はRRRRフォーマットでフィール
ドを示す。
【0278】
【表75】
【0279】全てのベクトルレジスタオペランドは他の
状態がない限り、現在バンク(バンク0またはバンク1
になることができる)を言及する。
【0280】R1フォーマットは単にロード即値命令に
よって使用される。表59はRIフォーマットでフィー
ルドを示す。
【0281】
【表76】
【0282】F:DS(1:0)フィールドのある符号
化は定義されない。プログラマはこのような符号化が用
いられる時アーキテクチャが予想されたけっかを指定し
ないので、前記のような符号化を使用してはいけない。
Rdにロードされた値は表60に示すようにデータタイ
プによる。
【0283】
【表77】
【0284】CTフォーマットは表61に示すフィール
ドを含む。
【0285】
【表78】
【0286】ブランチ条件はVCSR[GT:EQ:L
T]フィールドを使用する。
【0287】オーバフロー条件はVCSR[S0]ビッ
トを使用し、これはセット状態の時、GT,EQ,及び
LTビットを先行する。VCCSとVCBARRは前述
と異なってCond(2:0)フィールドを解釈する。
詳細な命令説明を参考されたい。
【0288】RRRM9フォーマットは3レジスタ或い
は2レジスタ及び9ビット即値オペランドを指定する。
表62はRRRM9フォーマットのフィールドをを示
す。
【0289】
【表79】
【0290】D:S:M符号化が即値オペランドを指定
しない時、ビット19:15は予約され、未来の互換性
を保障するためにゼロになるべきである。
【0291】全てのベクトルレジスタオペランドは他の
状態にない限り、現在(バンク0或いはバンク1になす
ることができる)ことるを参照する。D:S:M符号化
は即値フィールドから抽出された即値が表63に示すよ
うにDS(1:0)符号化によって左右されることを除
いてはRRRM5フォーマットに対する表56及び57
に示されたことと同一である。
【0292】
【表80】
【0293】即値フォーマットはフロートデータタイプ
では有用でない。
【0294】MSPベクトル命令が次のアルファベット
順で示されている。注釈: 1.命令は他の状態が存在しない限り、エレメントマス
クによって影響を受ける。CTフォーマット命令はエレ
メントマスクによって影響を受けない。ロード,スト
ア,及びキャッシュ命令からなるREARとREAIフ
ォーマット命令もエレメントマスクによって影響を受け
ない。
【0295】2.9ビット即値オペランドはフロートデ
ータタイプには有用でない。
【0296】3.演算(operation)説明で単にベクトル
形式(form)のみ与えられる。スカラ演算の場合はただ一
つ、0番目のエレメントが定義されたと仮定する。
【0297】4.RRRM5とRRRM9フォーマット
の場合、次の表64に示す符号化が整数データタイプ
(b,b9,h,w)に対して使用される。
【0298】
【表81】
【0299】5.RRRM5とRRRM9フォーマット
の場合、次の表65に示した符号化がフロートデータタ
イプに用いられる。
【0300】
【表82】
【0301】6.オーバフローを引き起こす虞のある全
ての命令に対してint8,int9,int6,in
t32最大値或いは最小値の制限値はVCSR(ISA
T)ビットがセットされた時に適用される。従って、浮
動小数点結果はVCSR(ISAT)ビットがセットさ
れた時に−無限大,−ゼロ,+ゼロ,或いは+無限大に
飽和される。
【0302】7.構文的に.nはバイト9データサイズ
を示すために、.b9の代わりに用いられることができ
る。
【0303】8.全ての命令に対して目的レジスタ或い
はベクトルアキュムレータに帰還する浮動小数点結果は
IEEE754単精度フォーマットからなる。浮動小数
点結果はアキュムレータの下位部分に記録され、上位部
分は修正されない。
【0304】VAAS3 加算及び(1,0,1)の加算
【0305】
【表83】
【0306】アセンブラ構文 VAAS3.dt VRd,VRa,VRb VAAS3.dt VRd,VRa,SRb VAAS3.dt SRd,SRa,SRb ここで、dt={b,b9,h,w}
【0307】
【表84】
【0308】説明 ベクトル/スカラレジスタRaの内容はRbに加算され
て中間結果を発生し、その後中間結果にRaの符号が加
算されて得られた最終結果はベクトル/スカラレジスタ
Rdに記憶される。
【0309】 例外 オーバフローVADAC 加算及びアキュムレート
【0310】
【表85】
【0311】アセンブラ構文 VADAC.dt VRc,VRd,VRa,VRb VADAC.dt SRc,SRd,SRa,SRb ここで、dt={b,b9,h,w}。
【0312】
【表86】
【0313】説明 RaとRbはオペランドのそれぞれのエレメントをベク
トルアキュムレータのそれぞれの倍精度エレメントに加
算し、各エレメントの倍精度の和をベクトルアキュムレ
ータと目的レジスタRc,Rdに記憶させる。RaとR
bは指定されたデータタイプを使用するが、VACは適
当な倍精度データタイプ(それぞれint8,int
9,int16,及びint32に対して16,18,
32,及び64ビット)を使用する。それぞれの倍精度
エレメントの上位部分はVACHとRcに記憶される。
もしRc=Rdであれば、Rcの結果は定義されない。
【0314】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ Aop[i] ={VRa[i]‖ SRa}; Bop[i] ={VRb[i]‖ SRb}; VACH[i]:VACL[i] = sex(Aop[i] + Bop[i] + VACH[i]:VACL[i]; Rc[i] = VACH[i] ; Rd[i] = VACL[i] ; }VADACL 加算及びローアキュムレート
【0315】
【表87】
【0316】アセンブラ構文 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}。
【0317】
【表88】
【0318】説明 RaとRb/即値オペランドのそれぞれのエレメントを
ベクトルアキュムレータのそれぞれの拡張された精密度
エレメントに加算し、低い精密度を目的レジスタ(R
d)にリターンさせる。RaとRb/即値は指定された
データタイプを使用するが、VACは適当な倍精度デー
タタイプ(それぞれint8,int9,int16,
及びint32に対して16、18,32,及び64ビ
ット)を使用する。それぞれの拡張された精密度エレメ
ントの上位部分はVACHに記憶される。
【0319】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖ SRb‖ sex(IMM<8:0>)}; VACH[i]:VACL[i] = sex(Ra[i] + Bop[i] + VACH[i]:VACL[i]; Rd[i] = VACL[i] ; }VADD 加算
【0320】
【表89】
【0321】アセンブラ構文 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}。
【0322】
【表90】
【0323】説明 RaとRb/即値オペランドを加算し、その和を目的レ
ジスタRdにリターンさせる。
【0324】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖ SRb‖ sex(IMM<8:0>)}; Rd[i] = Ra[i] + Bop[i] ; } 例外 オーバフロー,浮動小数点無効オペランドVADDH その隣接セルエレメント加算
【0325】
【表91】
【0326】アセンブラ構文 VADDH.dt VRd,VRa,VRb VADDH.dt VRd,VRa,SRb ここで、dt={b,b9,h,w}。
【0327】
【表92】
【0328】
【表93】
【0329】 演算 for(i = 0;i < NumElem - 1 ; i++) { Rd[i] = Ra[i] + Ra[i+1] ; } Rd[NumElem-1] = Ra[NumElem-1]+{VPb[0]‖SRb }; 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0330】VAND AND
【0331】
【表94】
【0332】アセンブラ構文 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が同
一演算を指定することに留意されたい。
【0333】
【表95】
【0334】説明 RaとRb/即値オペランドを論理的にANDし、その
結果を目的レジスタRdにリターンさせる。
【0335】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖ SRb‖ sex(IMM<8:0>)}; Rd[i]<k> = Ra[i]<k> & Bop[i]<k> , k = for all bits in element i ; } 例外 無しVANDC 補数AND
【0336】
【表96】
【0337】アセンブラ構文 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が同
一の演算を指定することに留意されたい。
【0338】
【表97】
【0339】説明 Ra及びRb/即値オペランドの補数を論理的にADN
し、その結果を目的レジスタRdにリターンさせる。
【0340】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖ SRb‖ sex(IMM<8:0>)}; Rd[i]<k> = Ra[i]<k> & -Bop[i]<k>, k = for all bits in element i ; } 例外 無しVASA 算術アキュムレータ移動
【0341】
【表98】
【0342】アセンブラ構文 VASAL.dt VASAR.dt ここで、dt={b,b9,h,w}であり、Rは左或
いは右側の回転方向を示す。
【0343】
【表99】
【0344】説明 ベクトルアキュムレータレジスタのそれぞれのデータエ
レメントは右側からゼロ充てん(zerofill)で1ビット位
置だけ左に移動されるか(もしR=0の場合)或いは符
号−拡張で1ビット位置だけ左に移動される(もしR=
1の場合)。この結果はベクトルアキュムレータに記憶
される。
【0345】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ if(R = 1) VACOH[i]:VACOL[i] = VACOH[i]:VACOL[i] sign>> 1 ; else VACOH[i]:VACOL[i] = VACOH[i]:VACOL[i] << 1 ; } 例外 オーバフローVASL 算術左への移動
【0346】
【表100】
【0347】アセンブラ構文 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}。
【0348】
【表101】
【0349】説明 ベクトル/スカラレジスタRaのそれぞれのデータエレ
メントは右側からゼロ充てんでスカラレジスタRb或い
はIMMフィールドに与えられた移動量だけ左に移動さ
れ、その結果はベクトル/スカラレジスタRdに記憶さ
れる。オーバフローを発生するそれらエレメントに対し
てその結果はそれらの符号によって最大陽或いは陰の値
に飽和する。移動量は符号のない整数となるように定義
される。
【0350】 演算 shift_amount ={SRb % 32‖IMM<4:0>}; for(i = 0 ; i < NumElem && EMASK[i] ; i++){ Rd[i] = saturate(Ra[i] << shift_amount; } 例外 なし プログラミング注意 移動量はSRb或いはIMM(4:0)から5ビット番
号で得られる点に注意されたい。バイト、バイト9、ハ
フワードデータタイプに対してプログラマはデータサイ
ズのビット数より小さいか同一の移動量を正確に指定す
る義務がある。もし移動量が指定されたデータサイズよ
り大きい場合、エレメントはゼロ充てんされる。
【0351】VASR 算術右への移動
【0352】
【表102】
【0353】アセンブラ構文 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}。
【0354】
【表103】
【0355】説明 ベクトル/スカラレジスタRaのそれぞれのデータエレ
メントは最上位ビット位置で符号−拡張されてスカラレ
ジスタRb或いはIMMフィールドの最下位ビットに与
えられた移動量だけ右に算術的に移動され、その結果は
ベクトル/スカラレジスタRdに記憶される。移動量は
符号のない整数となるように定義される。
【0356】 演算 shift_amount ={SRb % 32‖IMM<4:0>}; for(i = 0 ; i < NumElem && EMASK[i] ; i++){ Rd[i] = Ra[i] sign >> shift_amount) ; } 例外 無し プログラミング注意 移動量がSRb或いはIMM(4:0)から5ビット番
号で得られることに注意されたい。バイト、バイト9、
ハフワードデータタイプに対してプログラマはデータサ
イズのビット数より小さいか同一の移動量を正確に指定
する義務がある。もし移動量が指定されたデータサイズ
より大きい場合、エレメントは符号ビットで充てんされ
る。
【0357】VASS3 加算及び(−1,
0,1)の符号減算
【0358】
【表104】
【0359】アセンブラ構文 VASS3.dt VRd,VRa,VRb VASS3.dt VRd,VRa,SRb VASS3.dt SRd,SRa,SRb ここで、dt={b,b9,h,w}。
【0360】
【表105】
【0361】説明 ベクトル/スカラレジスタRaのRbに加算されて中間
結果を生成し、その後中間結果からRaの符号が減算さ
れて得られた最終結果はベクトル/スカラレジスタRd
に記憶される。
【0362】 演算 for(i = 0;i < NumElem && EMASK[i];i++){ if(Ra[i] > 0) extsgn3 = 1 ; else if(Ra[i] < 0) extsgn3 = -1 ; else extsgn3 = 0 ; Rd[i] = Ra[i] + Rb[i] - extsgn3 ; } 例外 オーバフローVASUB 減算の絶対値
【0363】
【表106】
【0364】アセンブラ構文 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}。
【0365】
【表107】
【0366】説明 ベクトル/スカラレジスタRb或いはIMMフィールド
の内容はベクトル/スカラレジスタRaの内容から減算
されてその絶対値がベクトル/スカラレジスタRdに記
憶される。
【0367】 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 もし減算器の結果が最大陰数であれば、オーバフローは
絶対値演算後に発生される。もし飽和モードがイネーブ
ルされる場合ならば、絶対値演算の結果は最大陽数にな
る。
【0368】VAVG 2エレメント平均
【0369】
【表108】
【0370】アセンブラ構文 VAVG.dt VRd,VRa,VRb VAVG.dt VRd,VRa,SRb VAVG.dt SRd,SRa,SRb ここで、dt={b,b9,h,w,f}であり、整数
データタイプに対する“打切り”四捨五入モードを指定
するためにVAVGTを使用する。
【0371】
【表109】
【0372】説明 ベクトル/スカラレジスタRaの内容はベクトル/スカ
ラレジスタRbの内容に加算されて中間結果を生成し、
その後中間結果は2で割られ、最終結果はベクトル/ス
カラレジスタRdに記憶される。整数データタイプに対
してT=1の場合、四捨五入モードが打ち切られ、T=
0の場合、ゼロから切り捨てがなされる(デフォール
ト)。フロートデータタイプの場合、四捨五入モードは
VCSR(RMODE)に指定される。
【0373】 例外 無しVAVGH 2隣接エレメント平均
【0374】
【表110】
【0375】アセンブラ構文 VAVGH.dt VRd,VRa,VRb VAVGH.dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}であり、整数
データタイプに対する“打切り”四捨五入モードを指定
するためにVAVGHTを使用する。
【0376】
【表111】
【0377】
【表112】
【0378】 演算 for(i = 0;i < NumElem - 1 ; i++) { Rd[i] = (Ra[i] + Ra[i+1])// 2 ; } Rd[NumElem-1] = (Ra[NumElem-1] +{VRb[0]‖SRb })// 2 ; 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0379】VAVGQ 4重平均
【0380】
【表113】
【0381】アセンブラ構文 VAVGQ.dt VRd,VRa,VRb ここで、dt={b,b9,h,w}であり、整数デー
タタイプに対する“打切り”四捨五入モードを指定する
ためにVAVGQTを使用する。
【0382】
【表114】
【0383】
【表115】
【0384】 演算 for(i = 0;i < NumElem - 1 ; i++) { Rd[i] = (Ra[i] + Rb[i] + (Ra[i+1] + Rb[i+1])// 4; } 例外 無しVCACHE キャッシュ演算
【0385】
【表116】
【0386】アセンブラ構文 VCACHE.fc SRb,SRi VCACHE.fc SRb,#IMM VCACHE.fc SRb+,SRi VCACHE.fc SRb+,#IMM ここで、fc={0,1}。
【0387】
【表117】
【0388】演算 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0389】VCAND 補数加算
【0390】
【表118】
【0391】アセンブラ構文 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が同一の演算を指定することに留意されたい。
【0392】
【表119】
【0393】説明 RaとRb/即値オペランドの補数を論理的にAND
し、その結果は目的レジスタRdにリターンさせる。
【0394】 演算 for(i = 0; i < NumElem && EMASK[i]; i++) { Bop[i] = {VRb[i]‖SRb ‖sex(IMM<8:0>) }; Rd[i]<k> = -Ra[i]<k> & Bop[i]<k>, k = for all bits in element i; } 例外 無しVCBARR 条件付バリヤ
【0395】
【表120】
【0396】アセンブラ構文 VCBARR.cond ここで、cond={0,−7}、各条件は後から記号
で与えられる。
【0397】
【表121】
【0398】演算 (Cond=真)の間、全ての後続命令は停止させる。
【0399】例外 無し プログラミング注意 この命令は命令実行の直列化を施行するためにソフトウ
ェアに提供される。この命令は不正密例外の正確な報告
を行うのに用いられる。例えば、もしこの命令が例外を
生じさせる恐れのある算術命令の直後に用いられる場
合、例外はこの命令を番地指定するプログラムカウンタ
に報告される。
【0400】VCBR 条件付ブランチ
【0401】
【表122】
【0402】アセンブラ構文 VCBR.cond #Offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0403】説明 Condが真であれば、ブランチする。これは遅延した
ブランチでない。
【0404】 例外 命令アドレス無効VCBRI 条件付間接ブランチ
【0405】
【表123】
【0406】アセンブラ構文 VCBRI.cond SRb ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0407】説明 Condが真であれば、ブランチする。これは遅延した
ブランチでない。
【0408】 例外 命令アドレス無効VCCS 条件付文脈切換
【0409】
【表124】
【0410】アセンブラ構文 VCCS #Offset 説明 もしVIMSK(cse)が真の場合、文脈切換サブル
ーチンにジャンプする。これは遅延したブランチでな
い。もし、VIMSK(cse)が真の場合、VPC+
4(リターンアドレス)がリターンアドレススタックに
セーブされる。もしそうでなければ、実行はVPC+4
で続けられる。
【0411】 例外 アドレススタックオーバフローリターンVCHGCR 制御レジスタ変更
【0412】
【表125】
【0413】アセンブラ構文 VCHGCR Mode
【0414】
【表126】
【0415】演算 例外 無し プログラミング注意 この命令はハードウェアがVMOV命令をもって機能し
たものよりさらに効率的な方式でVCSRで制御ビット
を変更するために提供される。
【0416】VCINT 条件付ARM7イン
タラプト
【0417】
【表127】
【0418】アセンブラ構文 VCINT.cond #CODE ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0419】説明 もしCondが真であれば、実行を停止し、イネーブル
された場合にARM7をインタラプトする。
【0420】 演算 If((Cond=VCSR[SO,GT,EQ,LT]) |(Cond==un)) { VISRC<vip> = 1; VIINS = [VCINT.cond #ICODE instruction]; VEPC = VPC; if(VIMSK<vie>==1)signal ARM7 interrupt; VP STATE=VP IDLE; } else VPC = VPC+4; 例外 VCINTインタラプトVCJOIN ARM7タスクを有する条件付結
【0421】
【表128】
【0422】アセンブラ構文 VCJOIN.cond #Offsset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0423】説明 もしCondが真であれば、実行を停止し、イネーブル
された場合にARM7をインタラプトする。
【0424】 演算 If((Cond=VCSR[SO,GT,EQ,LT]) |(Cond=un)){ VISRC<vjp> = - 1; VIINS = [VCJOIN.cond #Offset instruction]; VEPC = VPC; if(VIMSK<vje>==1)signal ARM7 interrupt; VP STATE = VP IDLE; } else VPC = VPC+4; 例外 VCJOINインタラプトVCJSR サブルーチンに対する条件付ジャ
ンプ
【0425】
【表129】
【0426】アセンブラ構文 VCJSR.cond #Offsset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0427】説明 もしCondが真であれば、サブルーチンにジャンプす
る。これは遅延したブランチでない。
【0428】もしCondが真であれば、VPC+4
(リターンアドレス)がリターンアドレススタックにセ
ーブされる。もしそうでなければ、実行はVPC+4で
続けられる。
【0429】 演算 If((Cond==VCSR[SO,GT,EQ,LT])|(Cond==un)) { if(VSP<4>>15) { VISRC<RASO> = 1; signal ARM7 with RASO exception; VP STATE = VP IDLE; }else{ RSTACK[VSP<3:0>] = VPC+4; VSP<4:0> = VSP<4:0>+1; VPC = VPC+sex(Offset<22:0> * 4); } } else VPC = VPC+4; 例外 アドレススタックオーバフローリターンVCJSRI サブルーチンに対する条件付間接
ジャンプ
【0430】
【表130】
【0431】アセンブラ構文 VCJSRI.cond SRb ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0432】説明 もしCondが真であれば、サブルーチンに間接ジャン
プする。これは遅延したブランチでない。
【0433】もしCondが真であれば、VPC+4
(リターンアドレス)がリターンアドレススタックにセ
ーブされる。もしそうでなければ、実行はVPC+4で
続けられる。
【0434】 演算 If((Cond==VCSR[SO,GT,EQ,LT])|(Cond=un)){ if(VSP<4:9>15){ VISRC<RASO> = 1; signal ARM7 with RASO exception; VP STATE = VP IDLE; }else{ RSTACK[VSP<3:0>] = VPC+4; VSP<4:0> = VSP<4:0>+1; VPC = SRb<31:2>:b'OO; } }else VPC = VPC+4; 例外 アドレススタックオーバフローリターンVCMOV 条件付ムーブ
【0435】
【表131】
【0436】アセンブラ構文 VCMOV.dt Rd,Rb,cond VCMOV.dt Rd,#IMM,cond ここで、dt={b,b9,h,w,f}、cond=
{un,lt,eq,le,gt,ne,ge,o
v}、.fと.wは.fデータタイプが9ビット即値オ
ペランドによって支援されないことを除いては同一の演
算を指定する。
【0437】
【表132】
【0438】
【表133】
【0439】 演算 If((Cond=VCSR[SOV,GT,EQ,LT])|(Cond==un)) for(i=0;i<NumElem;i++) Rd[i] =={Rb[i] ‖SRb ‖sex(IMM<8:0>) }; 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けず、−
VCMOVMはエレメントマスクによって影響を受け
る。ベクトルアキュムレータで拡張された浮動小数点精
密表現は8エレメントに対する全ての576ビットを使
用する。従って、アキュムレータを含むベクトルレジス
タムーブは.b9データサイズを指定すべきである。
【0440】VCMOVM エレメントマスクを
有する条件付ムーブ
【0441】
【表134】
【0442】アセンブラ構文 VCMOVM.dt Rd,Rb,cond VCMOVM.dt Rd,#IMM,cond ここで、dt={b,b9,h,w,f}、cond=
{un,lt,eq,le,gt,ne,ge,o
v}、.fと.wは.fデータタイプが9ビット即値オ
ペランドによって支援されないことを除いては同一の演
算を指定する。
【0443】
【表135】
【0444】
【表136】
【0445】 演算 If((Cond=VCSR[SO,GT,EQ,LT]) |(Cond=un)) for(i=0;i < NumElem; && MMASK[i];i++) Rd[i] = {Rb[i] ‖SRb ‖sex(IMM<8:0>) }; 例外 無し プログラミング注意 この命令はVMMRエレメントマスクによって影響を受
け、−VCMOVはエレメントマスクによって影響を受
けない。ベクトルアキュムレータで拡張された浮動小数
点精密表現は8エレメントに対する全ての576ビット
を使用する。従って、アキュムレータを含むベクトルレ
ジスタムーブは.b9データサイズを指定すべきであ
る。
【0446】VCMPV 比較及びマスクセッ
【0447】
【表137】
【0448】アセンブラ構文 VCMPV.dt VRd,VRb,cond.mas
k VCMPV.dt VRd,SRb,cond.mas
k ここで、dt={b,b9,h,w,f}、cond=
{un,lt,eq,le,gt,ne,ge,o
v}、mask={VGMR,VMMR}、もしマスク
が指定されなければ、VGMRは仮想である。
【0449】
【表138】
【0450】説明 ベクトルレジスタVRa,VRbの内容は減算演算(V
Ra[i]−VRb[i]を実行することによりエレメント
方式で比較され、VGMR(もしK=0)或いはVMM
R(もしK=1)レジスタで対応するビット(#i)は
もし比較の結果がVCMPV命令のCondフィールド
と符合する場合にセットされる。例えば、Condフィ
ールドがLTより小さい場合、VGMR[i](またはV
MMR[i])はVRa[i]<VRb[i]の時にセットさ
れる。
【0451】 演算 for(i=0;i < NumElem ; i++){ Bop[i] ={Rb[i] ‖SRb ‖sex(IMM<8:0>) }; relationship[i] =Ra[i] ? Bop[i]; if(k=1) MMASK[i]=(relationship[i]==Cond) ? True:False; else EMASK[i]=(relationship[i]==Cond) ? True:False; 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0452】VCNTLZ 先行ゼロカウント
【0453】
【表139】
【0454】アセンブラ構文 VCNTLZ.dt VRd,VRb VCNTLZ.dt SRd,SRb ここで、dt={b,b9,h,w}。
【0455】
【表140】
【0456】説明 Rbの各エレメントに対して先行ゼロの数をカウントし
て、Rdにカウントをリターンする。
【0457】 演算 for(i=0;i < NumElem && EMASK[i];i++) { Rd[i] = number of leading zeroes (Rb[i]); } 例外 無し プログラミング注意 エレメントの全てのビットがゼロの場合、その結果はエ
レメントサイズ(それぞれバイト、バイト9、ハフワー
ド、或いはワードに対して8,9,16,或いは32)
と同一である。先行ゼロのカウントはエレメント位置の
インデックスと逆関係をもつ(もしVCMPR命令の次
に用いられる場合)。エレメント位置を変換するために
与えられたデータタイプに対するNumElemからV
CNTLZの結果を減算する。
【0458】VCOR 補数OR
【0459】
【表141】
【0460】アセンブラ構文 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が同一の演算を指定することに留意されたい。
【0461】
【表142】
【0462】説明 RaとRb/即値オペランドの補数を論理的にORし、
その結果を目的レジスタRdにリターンさせる。
【0463】 演算 for(i=0;i < NumElem && EMASK[i];i++) { Bop[i] = {VRb[i]‖SRb ‖sex(IMM<8:0>) }; Rd[i]<k> = -Ra[i]<k> |Bop[i]<k>,k = for all bits in element; } 例外 無しVCRSR サブルーチンからの条件付リター
【0464】
【表143】
【0465】アセンブラ構文 VCRSR.cond ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0466】説明 もしCondが真であれば、サブルーチンにリターンす
る。これは遅延したブランチでない。
【0467】もしCondが真であれば、リターンアド
レススタックにセーブされたリターンアドレスから実行
が続けられる。もしそうでなければ、実行はVPC+4
で続けられる。
【0468】 演算 If((Cond==VCSR[SO,GT,EQ,LT])|(Cond=un)){ if(VSP<4:0> == 0) { VISRC<RASU> = 1; signal ARM7 with RASU exception; VP STATE = VP IDLE; }else{ VSP<4:0> = VSP<4:0> -1; VPC = RSTACK[VSP<3:0>]; VPC<1:0> = b'00; } } else VPC = VPC+4; 例外 命令アドレス無効、アドレススタックオーバフローリタ
ーン。
【0469】VCVTB9 バイト9データタイ
プ変換
【0470】
【表144】
【0471】アセンブラ構文 VCVTB9.md VRd,VRb VCVTB9.md SRd,SRb ここで、md={bb9,b9h,hb9}
【0472】
【表145】
【0473】説明 Rbの各エレメントはバイトからバイト9(bb9)
へ、バイト9からハフワード(b9h)へ、或いはハフ
ワードからバイト9(hb9)へ変換する。
【0474】 演算 if(md<1:0> = 0){ //bb9 for byte to byte 9 conversion VRd = VRb; VRd<9i+8> = VRb<9i+7>, I = 0 to 31(or 63 in VEC64 mode)} else if(md<1:0>==2){ //b9h for byte9 to halfword conversion VRd = VRb ; VRd<18i+16:18i+9>=VRb<18i+8>,i=0 to 15(or 31 in VEC64 mode)} else if(md<1:0> = 3) { //hb9 for halfword to byte9 conversion VRd<18i+8>=VRb<18i+9>,i=0 to 15(or 31 in VEC64 mode) else VRd = undefined; 例外 無し プログラミング注意 b9hはモードを有するこのような命令を使用する前に
プログラマはシャフル(shuffle)演算をもつベクトルレ
ジスタにエレメントの減少した数を調整することが要求
される。hb9モードを有するこのような命令を使用し
た後、プログラマはアンシャフル演算をもつ目的ベクト
ルレジスタにエレメントの増加した数を調整することが
要求される。この命令はエレメントマスクによって影響
を受けない。
【0475】VCVTFF 浮動小数点の固定小数点への変換
【0476】
【表146】
【0477】アセンブラ構文 VCVTFF VRd,VRa,SRb VCVTFF VRd,VRa,#IMM VCVTFF SRd,SRa,SRb VCVTFF SRd,SRa,#IMM
【0478】
【表147】
【0479】説明 ベクトル/スカラレジスタRaの内容はYの幅がRb
(モジュロ32)或いはIMMフィールドによって指定
され、Xの幅が(32−Yの幅)に定義される場合、3
2ビット浮動小数点からフォーマット(X,Y)の固定
小数点実数に変換される。
【0480】 演算 Y size ={SRb % 32 ‖ IMM<4.0> }; for(i=0;i<NumElem;i++){ Rd[i] = convert to < 32-Y size.Y size>format(Ra[i]); } 例外 オーバフロー プログラミング注意 この命令は単にワードデータサイズのみを支援する。こ
の命令はアーキテクチャがレジスタ内に多重データタイ
プを支援しないために、エレメントマスクを使用しな
い。この命令は整数データタイプに対してゼロ四捨五入
モードから切り捨てを使用する。
【0481】VCVTIF 整数の浮動小数
点への変換
【0482】
【表148】
【0483】アセンブラ構文 VCVTIF VRd,VRb VCVTIF VRd,SRb VCVTIF SRd,SRa
【0484】
【表149】
【0485】説明 ベクトル/スカラレジスタRbの内容はint32から
フロートデータタイプに変換され、その結果はベクトル
/スカラレジスタRdに記憶される。
【0486】 演算 for(i=0; i<NumElem : i++) { Rd[i] = convert to floating point format(Rb[i]); } 例外 無し プログラミング注意 この命令は単にワードデータサイズのみを支援する。こ
の命令はアーキテクチャがレジスタ内に多重データタイ
プを支援しないために、エレメントマスクを使用しな
い。
【0487】VD1CBR VCR1減少及び条
件付ブランチ
【0488】
【表150】
【0489】アセンブラ構文 VD1CBR.cond #Offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0490】説明 VCR1を減少させ、もしCondが真であればブラン
チする。これは遅延したブランチではない。
【0491】 演算 VCR1 = VCR1 - 1; If((VCR1 > 0) & ((Cond = VCSR[SO,GT,EQ,LT])|(Cond == un))) VPC = VPC+sex(Offset<22:0>* 4); else VPC = VPC+4; 例外 命令アドレス無効 プログラミング注意 VCR1はブランチ条件がチェックされる前に減少され
る。VCR1が0の時、この命令を実行することはルー
プカウント232−1に効果的にセットする。
【0492】VD2CBR VCR2減少及び条
件付ブランチ
【0493】
【表151】
【0494】アセンブラ構文 VD2CBR.cond #Offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0495】説明 VCR2を減少させ、もしCondが真であればブラン
チする。これは遅延したブランチではない。
【0496】 演算 VCR2 = VCR2 - 1; If((VCR2 > 0) & ((Cond = VCSR[SO,GT,EQ,LT])|(Cond = un))) VPC = VPC+sex(Offset<22:0>* 4); else VPC = VPC+4; 例外 命令アドレス無効 プログラミング注意 VCR2はブランチ条件がチェックされる前に減少され
る。VCR2が0の時、この命令を実行することはルー
プカウント232−1に効果的にセットする。
【0497】VD3CBR VCR3減少及び条
件付ブランチ
【0498】
【表152】
【0499】アセンブラ構文 VD3CBR,cond #Offset ここで、cond={un,lt,eq,le,gt,
ne,ge,ov}。
【0500】説明 VCR3を減少させ、もしCondが真であればブラン
チする。これは遅延したブランチではない。
【0501】 演算 VCR3 = VCR3 - 1; If((VCR3 > 0) & ((Cond = VCSR[SO,GT,EQ,LT])|(Cond = un))) VPC = VPC+sex(Offset<22:0>* 4); else VPC = VPC+4; 例外 命令アドレス無効 プログラミング注意 VCR3はブランチ条件がチェックされる前に減少され
る。VCR3が0の時、この命令を実行することはルー
プカウント232−1に効果的にセットする。
【0502】VDIV2N 2nによる分割
【0503】
【表153】
【0504】アセンブラ構文 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}
【0505】
【表154】
【0506】説明 ベクトル/スカラレジスタRaの内容はnがスカラレジ
スタ(Rb或いはIMM)の陽の整数である場合、2n
によって分割され、その最終結果はベクトル/スカラレ
ジスタRdに記憶される。この命令は四捨五入モードで
として切捨て(ゼロを向かって四捨五入)を使用する。
【0507】 例外 無し プログラミング注意 NがSRb或いはIMM(4:0)から5ビット数で得
られる点に留意されたい。バイト、バイト9、ハフワー
ドデータタイプの場合、プログラマはデータサイズで精
度が低いか同一のNの値を正確に指定する責任がある。
もしそれが指定されたデータサイズの精度よりさらに大
きければ、エレメントは符号ビットで充てんされる。こ
の命令は四捨五入モードとしてゼロを向かって四捨五入
を使用する。
【0508】VDIV2N.F 2nフロートによる分割
【0509】
【表155】
【0510】アセンブラ構文 VDIV2N.f VRd,VRa,VRb VDIV2N.f VRd,VRa,#IMM VDIV2N.f SRd,SRa,SRb VDIV2N.f SRd,SRa,#IMM
【0511】
【表156】
【0512】説明 ベクトル/スカラレジスタRaの内容はnがスカラレジ
スタ(Rb或いはIMM)の陽の整数の場合、2nによ
って分割され、その最終結果はベクトル/スカラレジス
タRdに記憶される。
【0513】 例外 無し プログラミング注意 NがSRb或いはIMM(4:0)から5ビット数で得
られる点に留意されたい。
【0514】VDIVI 分割初期化−不完全
【0515】
【表157】
【0516】アセンブラ構文 VDIVI.ds VRb VDIVI.ds SRb ここで、ds={b,b9,h,w}。
【0517】
【表158】
【0518】説明 非復原符号付き整数除算の初期化段階を実行する。被除
数はアキュムレータで倍精度符号付き整数である。もし
被除数が単精度の場合、それは倍精度で符号拡張されて
VACOH及びVACOLに記憶されるべきである。除
数はRbで単精度符号付き整数である。
【0519】被除数の符号(sign)が除数の符号と同一で
あれば、Rbはアキュムレータの上位から減算され、そ
うでなければ、Rbはアキュムレータの上位に加算され
る。
【0520】 例外 無し プログラミング注意 プログラマは分割ステップ前にオーバフロー或いはゼロ
による除算の場合を検出ことが要求される。
【0521】VIDVS 分割ステップ−不完
【0522】
【表159】
【0523】アセンブラ構文 VDIVS.ds VRb VDIVS.ds SRb ここで、ds={b,b9,h,w}。
【0524】
【表160】
【0525】説明 被復原符号付き除算の一つの反復ステップを行う。この
命令はデータサイズの多数倍(即ち、int8データタ
イプに対して8倍、int9に対して9倍、int16
に対して16倍、そしてint32データタイプに対し
て32倍)として実行されるべきである。VDIVI命
令はアキュムレータで初期部分の残りを生成するための
除算ステップ前に一度使用されるべきである。除数はR
bで単精度符号付き整数である。一応、商ビットはステ
ップごとに抽出されてアキュムレータの最下位ビットに
シフトされる。もし部分残りの符号がRbの除数の符号
と同一であれば、Rbはアキュムレータの上位から減算
される。もし同一でなければ、Rbはアキュムレータの
上位に加算される。商ビットはもしアキュムレータで結
果的な部分残り(加算或いは減算)の符号が除数の符号
と同一であれば、1である。そうでなければ、商ビット
はゼロ(0)である。アキュムレータは商ビットが充て
んされた状態で1ビット位置だけ左にシフトされる。除
算ステップの結論として、残りはアキュムレータの上位
に、商はアキュムレータの下位に記録される。商は1の
補数形態である。
【0526】 演算VESL 1だけエレメントを左にシフトする
【0527】
【表161】
【0528】アセンブラ構文 VESL.dt SRc,VRd,VRa,SRb ここで、dt={b,b9,h,w,f}、.wと.f
が同一演算を指定することに留意されたい。
【0529】
【表162】
【0530】説明 1位置だけ左にベクトルレジスタRaのエレメントをシ
フトし、スカラレジスタRbから充てんする。シフトさ
れた一番左側のエレメントはスカラレジスタRcにリタ
ーンされ、残りのエレメントはベクトルレジスタRdに
リターンされる。
【0531】
【表163】
【0532】 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0533】VESR 1だけエレメントを
右にシフトする
【0534】
【表164】
【0535】アセンブラ構文 VESR.dt SRc,VRd,VRa,SRb ここで、dt={b,b9,h,w,f}、.wと.f
が同一演算を指定することに留意されたい。
【0536】
【表165】
【0537】説明 1位置だけ右にベクトルレジスタRaのエレメントをシ
フトし、スカラレジスタRbから充てんする。シフトさ
れた一番右側のエレメントはスカラレジスタRcにリタ
ーンされ、残りのエレメントはベクトルレジスタRdに
リターンされる。
【0538】
【表166】
【0539】 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0540】VEXTRT 1エレメント抽出
【0541】
【表167】
【0542】アセンブラ構文 VEXTRT.dt SRd,VRa,SRb VEXTRT.dt SRd,VRa,#IMM ここで、dt={b,b9,h,w,f}、.wと.f
が同一演算を指定することに留意されたい。
【0543】
【表168】
【0544】説明 インデックスがスカラレジスタRb或いはIMMフィー
ルドによって指定されるRaベクトルレジスタからエレ
メントを抽出してスカラレジスタRdに記憶させる。
【0545】演算 index32 = {SRb % 32 ‖ IMM<4:0> }; index64 = {SRb % 64 ‖ IMM<5:0> }; index = (VCSR<vec64>) ? index64 : index32; SRd = VRa[index]; 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0546】VEXTSNG2 (1,−1)の符号
抽出
【0547】
【表169】
【0548】アセンブラ構文 VEXTSNG2.dt VRd,VRa VEXTSNG2.dt SRd,SRa ここで、dt={b,b9,h,w}。
【0549】
【表170】
【0550】説明 ベクトル/スカラレジスタRaの内容の符号値はエレメ
ントのように計算されて、その結果はベクトル/スカラ
レジスタRdに記憶される。
【0551】 演算 for(i=0; i<NumElem && EMASK[i]; i++){ Rd[i] = (Ra[i]<0) ?-1: 1; } 例外 無しVEXTSNG3 (1,0,−1)の符号抽出
【0552】
【表171】
【0553】アセンブラ構文 VEXTSNG3.dt VRd,VRa VEXTSNG3.dt SRd,SRa ここで、dt={b,b9,h,w}。
【0554】
【表172】
【0555】説明 ベクトル/スカラレジスタRaの内容の符号値はエレメ
ントのように計算されて、その結果はベクトル/スカラ
レジスタRdに記憶される。
【0556】 演算 for(i=0; i<NumElem && EMASK[i]; i++){ if(Ra[i] > 0) Rd[i]=1; else if(Ra[i] < 0) Rd[i]=-1; else Rd[i]=0; } 例外 無しVINSRT 1エレメント挿入
【0557】
【表173】
【0558】アセンブラ構文 VINSRT.dt VRd,SRa,SRb VINSRT.dt SRd,SRa,#IMM ここで、dt={b,b9,h,w,f}、.wと.f
が同一の演算を指定する点に留意されたい。
【0559】
【表174】
【0560】説明 スカラレジスタRaのエレメントをスカラレジスタRb
或いはIMMフィールドによって指定されたインデック
スにあるベクトルレジスタRdへ挿入する。
【0561】演算 index32 = {SRb % 32 ‖ IMM<4:0> }; index64 = {SRb % 64 ‖ IMM<5:0> }; index = (VCSR<vec64>) ? index64 : index32; VRd[index]=SRa; 例外 無し プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0562】VL ロード
【0563】
【表175】
【0564】アセンブラ構文 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}、.wと.fは同一の演算が指定され、.64
とVRAdは共に指定され得ない点に留意されたい。キ
ャッシュオフロードのためにVLOFFを使用する。
【0565】説明 現在或いは交替バンク或いはスカラレジスタにベクトル
レジスタをロードする。
【0566】演算 EA= SRb + {SRi ‖ sex(IMM<7:0>)); if(A==1)SRb =EA; Rd = see table below;
【0567】
【表176】
【0568】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0569】VLCB 循環バッファからロード
【0570】
【表177】
【0571】アセンブラ構文 VLCB.lt Rd,SRb,SRi VLCB.lt Rd,SRb,#IMM VLCB.lt Rd,SRb+,SRi VLCB.lt Rd,SRb+,#IMM ここで、lt={b,bz9,ds9,h,w,4,
8,16,32,64}、Rd={VRd,VRAd,
SRd}。.bと.ds9は同一の演算が指定され、.
64とVRAdは共に指定され得ない点に注意された
い。キャッシュオフロードのためにVLCBOFFを使
用する。
【0572】説明 SRb+1 に存在するBEGINポインタとSRb+2 に存
するENDポインタで指された循環バッファからベクト
ルレジスタまたはスカラレジスタをロードする。
【0573】もし、アドレス更新演算はもちろん、ロー
ド前にENDアドレスより大きければ有効アドレスが調
整される。また、循環バッファバウンドはそれぞれ.h
及び.wスカラレジスタについてハーフワード及びワー
ド境界上で整列されるべきである。
【0574】
【表178】
【0575】例外 無効データアドレス、整列されないアクセス プログラミング注意 この命令はエレメントマスクにより影響されない。
【0576】プログラマは下記条件を満たさなければ予
想通り作動できない。
【0577】 BEGIN<EA<2*ENDーBEGIN すなわち、EAーEND<ENGーBEGINは勿論、
EA>BEGINVLD ダブルロード
【0578】
【表179】
【0579】アセンブラ構文 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は一緒に指定され得ない点に留意された
い。キャッシュオフロードのためにVLDOFFを使用
する。
【0580】説明 現在或いは交替バンク或いは2スカラレジスタに2ベク
トルレジスタをロードする。
【0581】
【表180】
【0582】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0583】VLI 即値ロード
【0584】
【表181】
【0585】アセンブラ構文 VLI.dt VRd.#IMM VLI.dt SRd.#IMM ここで、dt={b、b9、h、w、f}。
【0586】説明 即値をスカラまたはベクトルレジスタへロードする。
【0587】スカラレジスタロードの場合、バイト、バ
イト9、ハーフワードまたはワードはデータ型によりロ
ードされる。バイト、バイト9及びハーフワードデータ
型の場合、影響されないバイト(バイト9)は修正され
ない。
【0588】演算 Rd=以下の表を参照する:
【0589】
【表182】
【0590】例外 無しVLQ 四重ロード
【0591】
【表183】
【0592】アセンブラ構文 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は共に指定され得ない点に留意された
い。キャッシュオフロードのためにVLQOFFを使用
する。
【0593】説明 現在或いは交替バンク或いは4スカラレジスタに4ベク
トルレジスタをロードする。
【0594】 演算 EA= SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1)SR b = EA;; Rd :Rd+1 :Rd+2 :Rd+3 = see table below;
【0595】
【表184】
【0596】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0597】VLR 逆へのロード
【0598】
【表185】
【0599】アセンブラ構文 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を使用する。
【0600】説明 逆エレメント順序でベクトルレジスタをロードする。こ
の命令はスカラ目的レジスタを支援しない。
【0601】
【表186】
【0602】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0603】VLSL 論理左への移動
【0604】
【表187】
【0605】アセンブラ構文 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,}。
【0606】
【表188】
【0607】説明 ベクトル/スカラレジスタRaのそれぞれのエレメント
は最下位ビットLSBの位置にゼロ充てんによってスカ
ラレジスタRb或いはIMMフィールドに与えられた移
動量だけ左に論理的にビット−移動され、その結果はベ
クトル/スカラレジスタRdに記憶される。
【0608】 例外 無し プログラミング注意 移動量がSRb或いはIMM(4:0)から5ビット番
号で得られる点に注意されたい。バイト、バイト9、ハ
フワードデータタイプに対してプログラマはデータサイ
ズのビット数より小さいか同一の移動量を正確に指定す
る義務がある。もし移動量が指定されたデータサイズよ
りさらに大きければ、エレメントはゼロ充てんされる。
【0609】VLSR 論理右への移動
【0610】
【表189】
【0611】アセンブラ構文 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,}。
【0612】
【表190】
【0613】説明 ベクトル/スカラレジスタRaのそれぞれのエレメント
は最上位ビットMSBの位置にゼロ充てんでスカラレジ
スタRb或いはIMMフィールドに与えられた移動量だ
け右に論理的にビット−移動され、その結果はベクトル
/スカラレジスタRdに記憶される。
【0614】 例外 無し プログラミング注意 移動量がSRb或いはIMM(4:0)から5ビット番
号で得られる点に注意されたい。バイト、バイト9、ハ
フワードデータタイプに対してプログラマはデータサイ
ズのビット数より小さいか同一の移動量を正確に指定す
る義務がある。もし移動量が指定されたデータサイズよ
りさらに大きければ、エレメントはゼロで充てんされ
る。
【0615】VLWS ストライドにロード
する
【0616】
【表191】
【0617】アセンブラ構文 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,64},Rd=
{VRd,VRAd}、.64とVRAdは共に指定さ
れ得ない点に留意されたい。キャッシュオフロードのた
めにVLWSOFFを使用する。
【0618】説明 有効アドレスから始めてストライド制御レジスタ(Strid
e Control register)としてスカラレジスタSRb+1
を使用してメモリからベクトルレジスタVRdに32バ
イトがロードされる。LTは各ブロックに対するロード
のために連続したバイトの番号とブロックサイズを指定
する。SRb+1は2連続ブロックの始まりを分離する
番号とストライドを指定する。ストライドはブロックサ
イズと同一か或いはさらに大きいべきである。EAは整
列されたデータサイズでなければならない。ストライド
とブロックサイズはデータサイズの多数倍になるべきで
ある。
【0619】 演算 EA=SRb + {SRi ‖sex(IMM<7:0>)}; if(A=1) SRb =EA ; Block_size={4‖8‖16‖32}; stride=SRb+1<31:0>; for(i=0;i<VECSIZE/Block _size;i++) for(j=0;j<Block _size;j++) VRd[i* Block _size+j]<8:0>=sex BYTE[EA+i * Stride+j]; 例外 データアドレス、非整列アクセス無効VMAC 乗算及びアキュムレート
【0620】
【表192】
【0621】アセンブラ構文 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}。
【0622】
【表193】
【0623】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をベクトルアキュムレータの各倍精度エレメントに加算
して、ベクトルアキュムレータに各エレメントの倍精度
の和を記憶させる。 RaとRbは指定されたデータタ
イプを使用し、一方VACは適宜な倍精度データタイプ
を使用する(それぞれint8,int16,及びin
t32に対して16,32,及び64ビット)。各倍精
度エレメントの上位部分はVACHに記憶される。
【0624】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0625】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Aop[i]={VRa[i]‖SRa }; Bop[i]={VRb[i]‖SRb }; if(dt==float)VACL[i]=Aop[i] * Bop[i]+VACL[i]; else VACH[i]:VACL[i]=Aop[i] * Bop[i]+VACH[i]:VACL[i]; 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0626】VMACF 乗算及び小数部ア
キュムレート
【0627】
【表194】
【0628】アセンブラ構文 VMACF.dt VRa,VRb VMACF.dt VRa,SRb VMACF.dt VRa,#IMM VMACF.dt SRa,SRb VMACF.dt SRa,#IMM ここで、dt={b,h,w,}。
【0629】
【表195】
【0630】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果を1ビット左にシフト
させ、シフトさせた中間結果の各倍精度エレメントをベ
クトルアキュムレータの各倍精度エレメントに加算し
て、ベクトルアキュムレータに各エレメントの倍精度の
和を記憶させる。 VRaとRbは指定されたデータタ
イプを使用し、一方VACは適宜な倍精度データタイプ
を使用する(それぞれint8,int16,及びin
t32に対して16,32,及び64ビット)。各倍精
度エレメントの上位部分はVACHに記憶される。
【0631】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; VACH[i]:VACL[i]=((VRa[i]* Bop[i])<<1)+VACH[i]:VACL[i]; } 例外 オーバフロー、 プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0632】VMACL 乗算及びローアキ
ュムレート
【0633】
【表196】
【0634】アセンブラ構文 VMACL.dt VRa,VRb VMACL.dt VRa,SRb VMACL.dt VRa,#IMM VMACL.dt SRa,SRb VMACL.dt SRa,#IMM ここで、dt={b,h,w,f}。
【0635】
【表197】
【0636】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をベクトルアキュムレータの各倍精度エレメントに加算
して、ベクトルアキュムレータに各エレメントの倍精度
の和を記憶させ、目的レジスタVRdに下位部分をリタ
ーンさせる。
【0637】RaとRbは指定されたデータタイプを使
用し、一方VACは適宜な倍精度データタイプを使用す
る(それぞれint8,int16,及びint32に
対して16,32,及び64ビット)。各倍精度エレメ
ントの上位部分はVACHに記憶される。
【0638】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0639】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb }; if(dt==float)VACL[i]=VRa[i] * Bop[i]+VACL[i]; else VACH[i]:VACL[i]=VRa[i] * Bop[i]+VACH[i]:VACL[i]; VRd[i]=VACL[i]; 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0640】VMAD 乗算及び加算
【0641】
【表198】
【0642】アセンブラ構文 VMAD.dt VRc,VRd,VRa,VRb VMAD.dt SRc,SRd,SRa,SRb ここで、dt={b,h,w}。
【0643】
【表199】
【0644】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をRcの各エレメントに加算して、目的レジスタ(Rd
+1:Rd)に各エレメントの倍精度の和を記憶させ
る。
【0645】 演算 for(i=0:i < NumElem && EMASK[i];i++){ Aop[i]={VRa[i]‖SRa }; Bop[i]={VRb[i]‖SRb }; Cop[i]={VRc[i]‖SRc }; Rd+1[i]:Rd[i]=Aop[i]* Bop[i]+sex_dp(Cop[i]) ; } 例外 無しVMADL 乗算及びロー加算
【0646】
【表200】
【0647】アセンブラ構文 VMADL.dt VRc,VRd,VRa,VRb VMADL.dt SRc,SRd,SRa,SRb ここで、dt={b,h,w,f}。
【0648】
【表201】
【0649】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をRcの各エレメントに加算して、目的レジスタRdに
各エレメントの下位部分倍精度の和を記憶させる。
【0650】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0651】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Aop[i]={VRa[i]‖SRa }; Bop[i]={VRb[i]‖SRb }; Cop[i]={VRc[i]‖SRc }; if(dt==float)Lo[i]=Aop[i] * Bop[i]+ Cop[i]; else Hi[i]:Lo[i]=Aop[i]* Bop[i]+sex_dp(Cop[i]); Rd[i]=Lo[i]; } 例外 オーバフロー、浮動小数点無効オペランド。
【0652】VMAS 乗算及びアキュムレ
ータからの減算
【0653】
【表202】
【0654】アセンブラ構文 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}。
【0655】
【表203】
【0656】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をベクトルアキュムレータの各倍精度エレメントから減
算して、ベクトルアキュムレータに各エレメントの倍精
度の和を記憶させる。
【0657】RaとRbは指定されたデータタイプを使
用し、一方VACは適宜な倍精度データタイプを使用す
る(それぞれint8,int16,及びint32に
対して16,32,及び64ビット)。各倍精度エレメ
ントの上位部分はVACHに記憶される。
【0658】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0659】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb }; if(dt==float)VACL[i]=VACL[i]-VRa[i] * Bop[i]; else VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i] * Bop[i]; } 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0660】VMASF 乗算及びアキュム
レータ小数部からの減算
【0661】
【表204】
【0662】アセンブラ構文 VMASF.dt VRa,VRb VMASF.dt VRa,SRb VMASF.dt VRa,#IMM VMASF.dt SRa,SRb VMASF.dt SRa,#IMM ここで、dt={b,h,w}。
【0663】
【表205】
【0664】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、倍精度中間結果を1ビットだけ
左にシフトし、シフトされた中間結果の各倍精度エレメ
ントをベクトルアキュムレータの各倍精度エレメントか
ら減算して、ベクトルアキュムレータに各エレメントの
倍精度の和を記憶させる。
【0665】RaとRbは指定されたデータタイプを使
用し、一方VACは適宜な倍精度データタイプを使用す
る(それぞれint8,int16,及びint32に
対して16,32,及び64ビット)。各倍精度エレメ
ントの上位部分はVACHに記憶される。
【0666】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i]* Bop[i]; } 例外 オーバフロー プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0667】VMASL 乗算及びアキュム
レータローからの減算
【0668】
【表206】
【0669】アセンブラ構文 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}。
【0670】
【表207】
【0671】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、中間結果の各倍精度エレメント
をベクトルアキュムレータの各倍精度エレメントから減
算して、ベクトルアキュムレータに各エレメントの倍精
度の和を記憶させ、目的レジスタVRdに下位部分をリ
ターンする。
【0672】RaとRbは指定されたデータタイプを使
用し、一方VACは適宜な倍精度データタイプを使用す
る(それぞれint8,int16,及びint32に
対して16,32,及び64ビット)。各倍精度エレメ
ントの上位部分はVACHに記憶される。
【0673】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0674】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb }; if(dt==float)VACL[i]=VACL[i]-VRA[i] * Bop[i]; else VACH[i]:VACL[i]=VACH[i]:VACL[i]-VRa[i] * Bop[i]; VRd[i]=VACL[i]; } 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0675】VMAXE 双方式最大及び交換
【0676】
【表208】
【0677】アセンブラ構文 VMAXE.dt VRd,VRb ここで、dt={b,b9,h,w,f}。
【0678】
【表209】
【0679】説明 VRaとVRbは同一でなければならない。VRaがV
Rbと相違する時、その結果は定義されない。
【0680】ベクトルレジスタRbの各偶数/奇数デー
タエレメントは対で比較され、各データエレメント対の
うちより大きい値がベクトルレジスタRdの偶数位置に
記憶され、各データエレメント対のうちより小さい値が
奇数位置に記憶される。
【0681】 演算 for(i=0;i < NumElem && EMASK[i]:i=i+2){ VRd[i]=(VRb[i]>VRb[i+1])?VRb[i]:VRb[i+1]; VRd[i+1]=(VRb[i]>VRb[i+1])?VRb[i+1]:VRb[i]; } 例外 無しVMOV ムーブ
【0682】
【表210】
【0683】アセンブラ構文 VMOV.dt Rd,Rb ここで、dt={b,b9,h,w,f}であり、Rd
とRbは構造的に指定されたレジスタ名で示される。
【0684】
【表211】
【0685】
【表212】
【0686】
【表213】
【0687】演算 Rd=Rb 例外 VCSR或いはVISRCに例外状態ビットをセットす
ることは対応する例外を生じさせる。
【0688】プログラミング注意 この命令はエレメントマスクによって影響を受けない。
交替バンク概念がVEC64モードには存在しないの
で、この命令はVEC64モードで交替バンクレジスタ
に対する移動に使用できないことに注意されたい。
【0689】VMUL 乗算
【0690】
【表214】
【0691】アセンブラ構文 VMUL.dt VRc,VRd,VRa,VRb VMUL.dt SRc,SRd,SRa,SRb ここで、dt={b,h,w}。
【0692】
【表215】
【0693】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度の結果を生成し、目的レジスタRc:Rdに各エレ
メントの倍精度の和をリターンさせる。
【0694】RaとRbは指定されたデータタイプを使
用し、一方Rc:Rdは適宜な倍精度データタイプを使
用する(それぞれint8,int16,及びint3
2に対して16,32,及び64ビット)、各倍精度エ
レメントの上位部分はRcに記憶される。
【0695】 例外 無し プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。また、この命令
は拡張された結果が支援されたデータタイプでないの
で、フロートデータタイプを支援しない。
【0696】VMULA アキュムレータ乗算
【0697】
【表216】
【0698】アセンブラ構文 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}。
【0699】
【表217】
【0700】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、その結果をアキュムレータに記
録させる。
【0701】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0702】 例外 無し プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0703】VMULAF アキュムレータ小数部乗算
【0704】
【表218】
【0705】アセンブラ構文 VMULAF.dt VRa,VRb VMULAF.dt VRa,SRb VMULAF.dt VRa,#IMM VMULAF.dt SRa,SRb VMULAF.dt SRa,#IMM ここで、dt={b,h,w}。
【0706】
【表219】
【0707】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、倍精度中間結果を1ビットだけ
左にシフトして、その結果をアキュムレータに記録させ
る。
【0708】 演算 for(i=0;i < NumElem && EMASK[i]:i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; VACH[i]:VACL[i]=(VRa[i] * Bop[i])<<1; } 例外 無し プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0709】VMULF 小数部乗算
【0710】
【表220】
【0711】アセンブラ構文 VMULF.dt VRa,VRb VMULF.dt VRa,SRb VMULF.dt VRa,#IMM VMULF.dt SRa,SRb VMULF.dt SRa,#IMM ここで、dt={b,h,w}。
【0712】
【表221】
【0713】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、倍精度中間結果を1ビットだけ
左にシフトして、その結果の上位部分を目的レジスタ
(VRd+1)にリターンし、その結果の下位部分を目
的レジスタVRdにリターンさせる。VRdは偶数番号
のレジスタでなければならない。
【0714】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; Hi[i]:Lo[i]=(VRa[i] * Bop[i])<<1; VRd+1[i]=Hi[i]; VRd[i]=Lo[i]; } 例外 無し プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0715】VMULFR 小数部乗算及び四捨
五入
【0716】
【表222】
【0717】アセンブラ構文 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}。
【0718】
【表223】
【0719】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、倍精度中間結果を1ビットだけ
左にシフトして、シフトされた中間結果を上位部分に対
して四捨五入し、上位部分を目的レジスタ(VRd)に
リターンさせる。
【0720】 演算 for(i=0;i < NumElem && EMASK[i]:i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; Hi[i]:Lo[i]=(VRa[i] * Bop[i])<<1; if(Lo[i]<msb>==1)Hi[i]=Hi[i]+1; VRd[i]=Hi[i]; } 例外 無し プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0721】VMULL ロー乗算
【0722】
【表224】
【0723】アセンブラ構文 VMULL.dt VRd,VRa,VRb VMULL.dt VRd,VRa,SRb VMULL.dt VRd,VRa,#IMM VMULL.dt VRd,SRa,SRb VMULL.dt VRd,SRa,#IMM ここで、dt={b,h,w,f}。
【0724】
【表225】
【0725】説明 Raの各エレメントをRbの各エレメントと乗算して倍
精度中間結果を生成し、その結果の下位部分を目的レジ
スタVRdにリターンする。
【0726】フロートデータタイプに対して全てのオペ
ランドと結果は単精度である。
【0727】 例外 オーバフロー、浮動小数点無効オペランド プログラミング注意 この命令はint9データタイプを支援せず、その代わ
りint16データタイプを使用する。
【0728】VNAND NAND
【0729】
【表226】
【0730】アセンブラ構文 VNAND.dt VRd,VRa,VRb VNAND.dt VRd,VRa,SRb VNAND.dt VRd,VRa,#IMM VNAND.dt VRd,SRa,SRb VNAND.dt VRd,SRa,#IMM ここで、dt={b,h,w,f}、.wと.fが同一
の演算を指定することに留意されたい。
【0731】
【表227】
【0732】説明 Raにある各エレメントの各ビットとRb/即値オペラ
ンドにある対応するビットを論理的にNANDし、その
結果をRdにリターンさせる。
【0733】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; Rd[i](k)=-(Ra[i]<k> & Bop[i]<k>,for k=all bits in element; } 例外 無しVNOR NOR
【0734】
【表228】
【0735】アセンブラ構文 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が同
一の演算を指定することに留意されたい。
【0736】
【表229】
【0737】説明 Raにある各エレメントの各ビットとRb/即値オペラ
ンドにある対応するビットを論理的にNORし、その結
果をRdにリターンさせる。
【0738】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; Rd[i](k)=-(Ra[i]<k> 1 Bop[i]<k>,for k=all bits in element ; } 例外 無しVOR OR
【0739】
【表230】
【0740】アセンブラ構文 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が同
一の演算を指定することに留意されたい。
【0741】
【表231】
【0742】説明 Raにある各エレメントの各ビットとRb/即値オペラ
ンドにある対応するビットを論理的にORし、その結果
をRdにリターンさせる。
【0743】 演算 for(i=0;i < NumElem && EMASK[i];i++){ Bop[i]={VRb[i]‖SRb ‖sex(IMM<8:0>)}; Rd[i]<k>=-(Ra[i]<k> 1 Bop[i]<k>,for k=all bits in element ; } 例外 無しVORC 補数OR
【0744】
【表232】
【0745】アセンブラ構文 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が同
一の演算を指定することに留意されたい。
【0746】
【表233】
【0747】説明 Raにある各エレメントの各ビットとRb/即値オペラ
ンドにある対応するビットの補数を論理的にORし、そ
の結果をRdにリターンさせる。
【0748】 演算 for(i=0:i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖SRb ‖sex(IMM<8.0>) }; Rd[i] <k> = Ra[i]<k>1−Bop[i]<k>.f
or k=all bits in element i: } 例外 無しVPFTCH 事前取出し
【0749】
【表234】
【0750】アセンブラ構文 VPFTCH.dt SRb,SRi VPFTCH.dt SRb,#IMM VPFTCH.dt SRb+,SRi VPFTCH.dt SRb+,#IMM ここで、ln={1,2,4,8}。
【0751】説明 有効アドレスから始める多数のベクトルデータキャッシ
ュラインを予め取り出す。キャッシュラインの数は次の
ように指定される: LN(1:0)=00:1つの64バイトキャッシュラ
インが予め取り出され。る LN(1:0)=01:2つの64バイトキャッシュラ
インが予め取り出される。
【0752】LN(1:0)=10:4つの64バイト
キャッシュラインが予め取り出される。
【0753】LN(1:0)=11:8つの64バイト
キャッシュラインが予め取り出される。
【0754】もし有効キャッシュラインが64バイトバ
ウンダリにない場合、それは64バイトバウンダリに整
列されるように先に打ち切られる。
【0755】演算 例外 データアドレス例外無効 プログラミング注意 EA(31:0)はローカルメモリのバイトアドレスを
示す。
【0756】VPFTCHSP 臨時パッドへの事前
取出し
【0757】
【表235】
【0758】アセンブラ構文 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とV
PFTCHSPは同一の演算コードをもつ 説明 メモリから臨時パッドに多数の64バイトブロックを伝
送する。有効アドレスはメモリに開始アドレスを提供
し、SRpは臨時パッドに開始アドレスを提供する。6
4バイトブロックの数は次のように指定される。
【0759】LN(1:0)=00:1つの64バイト
ブロックが伝送される。
【0760】LN(1:0)=01:2つの64バイト
ブロックが伝送される。
【0761】LN(1:0)=10:4つの64バイト
ブロックが伝送される。
【0762】LN(1:0)=11:8つの64バイト
ブロックが伝送される。
【0763】もし有効キャッシュラインが64バイトバ
ウンダリになければ、それは64バイトバウンダリに整
列されるように先に打ち切られる。もしSRpの臨時パ
ッドポインタアドレスが64バイトバウンダリになけれ
ば、それはまた64バイトバウンダリに整列されるよう
に先に打ち切られる。整列された臨時パッドポインタア
ドレスは伝送されたバイト数だけ増分される。
【0764】 例外 データアドレス例外無効VROL 左への回転
【0765】
【表236】
【0766】アセンブラ構文 VROL.dt VRd,VRa,SRb VROL.dt VRd,VRa,#IMM VROL.dt VRd,SRa,SRb VROL.dt VRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0767】
【表237】
【0768】説明 ベクトル/スカラレジスタRaの各データエレメントは
スカラレジスタRb或いはIMMフィールドに与えられ
たビット量だけ左に回転され、その結果はベクトル/ス
カラレジスタRdに記憶される。
【0769】 例外 なし プログラミング注意 回転量はSRb或いはIMM(4:0)から5ビット番
号で得られる点に注意されたい。バイト、バイト9、ハ
フワードデータタイプに対してプログラマはデータサイ
ズのビット数より小さいか同一の回転量を正確に指定す
る義務がある。もし回転量が指定されたデータサイズよ
りさらい大きければ、結果は定義されない。nだけ左に
回転することはElemSize−nだけ右に回転する
のと等しく、ここでElemSizeは与えられたデー
タサイズのビットの番号を示す。
【0770】VROR 右への回転
【0771】
【表238】
【0772】アセンブラ構文 VROR.dt VRd,VRa,SRb VROR.dt VRd,VRa,#IMM VROR.dt VRd,SRa,SRb VROR.dt VRd,SRa,#IMM ここで、dt={b,b9,h,w}。
【0773】
【表239】
【0774】説明 ベクトル/スカラレジスタRaの各データエレメントは
スカラレジスタRb或いはIMMフィールドに与えられ
たビット量だけ右に回転され、その結果はベクトル/ス
カラレジスタRdに記憶される。
【0775】 例外 なし プログラミング注意 回転量はSRb或いはIMM(4:0)から5ビット番
号で得られる点に注意されたい。バイト、バイト9、ハ
フワードデータタイプに対してプログラマはデータサイ
ズのビット数より小さいか同一の回転量を正確に指定す
る義務がある。もし回転量が指定されたデータサイズよ
りさらい大きければ、結果は定義されない。nだけ右に
回転することはElemSize−nだけ左に回転する
のと等しく、ここでElemSizeは与えられたデー
タサイズのビットの番号を示す。
【0776】VROUND 浮動小数点を整数に四捨五入する
【0777】
【表240】
【0778】アセンブラ構文 VROUND.rm VRd,VRb VROUND.rm SRd,SRb ここで、rm={ninf,zero,near,pi
nf}。
【0779】
【表241】
【0780】説明 浮動小数点データフォーマットでベクトル/スカラレジ
スタRbの内容は一番近い32ビット整数(ワード)に
四捨五入され、その結果はベクトル/スカラレジスタR
dに記憶される。四捨五入モードはRMに定義される。
【0781】
【表242】
【0782】 例外 無し プログラミング注意 この命令はエレメントマスクに影響を受けない。
【0783】VSATL 下限境界への飽和
【0784】
【表243】
【0785】アセンブラ構文 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ビット即値で支援されないことに留意された
い。
【0786】
【表244】
【0787】説明 ベクトル/スカラレジスタRaの各データエレメントは
ベクトル/スカラレジスタRb或いはIMMフィールド
にあるそれの対応する下限値に対してチェックされる。
もしデータエレメントの値が下限値よりさらに小さけれ
ば、それは下限値と同一に設定され、最終結果はベクト
ル/スカラレジスタRdに記憶される。
【0788】 例外 無しVSATU 上限境界への飽和
【0789】
【表245】
【0790】アセンブラ構文 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ビット即値で支援されないことに留意された
い。
【0791】
【表246】
【0792】 説明ベクトル/スカラレジスタRaの各データエレメン
トはベクトル/スカラレジスタRb或いはIMMフィー
ルドにあるそれの対応する上限値に対してチェックされ
る。もしデータエレメントの値が上限値よりさらに小さ
ければ、それは上限値と同一に設定され、最終結果はベ
クトル/スカラレジスタRdに記憶される。
【0793】 例外 無しVSHFL シャフル(shuffle)
【0794】
【表247】
【0795】アセンブラ構文 VSHFL.dt VRc,VRd,VRa,VRb VSHFL.dt VRc,VRd,VRa,SRb ここで、dt={b,b9,h,w}、.wと.fが同
一の演算を指定することに留意されたい。
【0796】
【表248】
【0797】説明 ベクトルレジスタRaの内容は下記に示すようにRbと
混ぜられて(shuffle)、その結果はベクトルレジスタR
c:Rdに記憶される。
【0798】
【表249】
【0799】演算 例外 無し プログラミング注意 この命令はエレメントアスクを使用しない。
【0800】VSHFLH ハイシャフル
【0801】
【表250】
【0802】アセンブラ構文 VSHFLH.dt VRd,VRa,VRb VSHFLH.dt VRd,VRa,SRb ここで、dt={b,b9,h,w}、.wと.fが同
一の演算を指定することに留意されたい。
【0803】
【表251】
【0804】説明 ベクトルレジスタRaの内容は下記に示すようにRbと
混ぜられて(shuffle)、その結果の上位部分はベクトル
レジスタRdに記憶される。
【0805】
【表252】
【0806】演算 例外 無し プログラミング注意 この命令はエレメントマスクを使用しない。
【0807】VSHFLL ローシャフル
【0808】
【表253】
【0809】アセンブラ構文 VSHFLL.dt VRd,VRa,VRb VSHFLL.dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}、.wと.f
が同一の演算を指定することに留意されたい。
【0810】
【表254】
【0811】説明 ベクトルレジスタRaの内容は下記に示すようにRbと
混ぜられて(shuffle)、その結果の下位部分はベクトル
レジスタRdに記憶される。
【0812】
【表255】
【0813】演算 例外 無し プログラミング注意 この命令はエレメントマスクを使用しない。
【0814】VST 記憶
【0815】
【表256】
【0816】アセンブラ構文 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,SR
s}、.bと.b9tは同一の演算が指定され、.64
とVRAsは共に指定され得ない点に留意されたい。キ
ャッシュオフ記憶のためにVSTOFFを使用する。
【0817】説明 ベクトルまたはスカラレジスタを記憶する。
【0818】演算 EA= SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1)SRb =EA; MEM[EA] = see table belo
w;
【0819】
【表257】
【0820】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0821】VSTCB 円形バッファによる
記憶
【0822】
【表258】
【0823】アセンブラ構文 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,SR
s}、.bと.b9tは同一の演算が指定され、.64
とVRAdは共に指定され得ない点に留意されたい。キ
ャッシュオフロードのためにVSTCBOFFを使用す
る。
【0824】説明 SRb+1でBEGINポインタ、SRb+2でEND
ポインタによって境界になった円形バッファからベクト
ルまたはスカラレジスタを記憶する。
【0825】有効アドレスはもしそれが記憶のみならず
アドレスアップデート演算以前のENDアドレスよりさ
らに大きければ、調整される。さらに円形バッファ境界
はそれぞれ.hと.wスカラロードに対してハフワード
及びワード境界に整列されるべきである。
【0826】演算 EA =SRb + {SRi ‖ sex(IMM<7:0>)}; BEGIN = SRb+1; END = SRb+2; cbsize = END - BEGIN; if(EA > END)EA = BEGIN+(E
A − END); if(A==1)SR= EA; MEM[EA] = see table belo
w;
【0827】
【表259】
【0828】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
プログラマはこの命令が案の通りに動作するように次の
条件を保障すべきである: BEGIN<EA<2* END−BEGIN 即ち、EA>BEGIN及びEA−END<END−B
EGINVSTD ダブル記憶
【0829】
【表260】
【0830】アセンブラ構文 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,SR
s}、.bと.b9tは同一の演算が指定され、.64
とVRAsは共に指定され得ない点に留意されたい。キ
ャッシュオフ記憶のためにVSTDOFFを使用する。
【0831】説明 現在或いは交替バンク或いは2スカラレジスタから2ベ
クトルレジスタを記憶する。
【0832】演算 EA =SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1)SR= EA; MEM[EA] = see table belo
w;
【0833】
【表261】
【0834】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0835】VSTQ 4重記憶
【0836】
【表262】
【0837】アセンブラ構文 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,SR
s}、.bと.b9tは同一の演算が指定され、.64
とVRAsは共に指定され得ない点に留意されたい。キ
ャッシュオフ記憶のためにVSTQOFFを使用する。
【0838】説明 現在或いは交替バンク或いは4スカラレジスタから4ベ
クトルレジスタを記憶する。
【0839】演算 EA =SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1)SR= EA; MEM[EA] = see table belo
w;
【0840】
【表263】
【0841】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0842】VSTR 逆順記憶
【0843】
【表264】
【0844】アセンブラ構文 VSTR.st Rs,SRb,SRi VSTR.st Rs,SRb,#IMM VSTR.st RS,SRb+,SRi VSTR.st Rs,SRb+,#IMM ここで、st={b,b9t,h,w,4,8,16,
32,64},Rs={VRs,VRAs,SR
s}、.64とVRAdは一緒に指定され得ない点に留
意されたい。キャッシュオフ記憶のためにVSTROF
Fを使用する。
【0845】説明 逆エレメント順序でベクトルレジスタを記憶する。この
命令はスカラデータソースレジスタを支援しない。
【0846】演算 EA =SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1)SRb = EA; MEM[EA] = see table below;
【0847】
【表265】
【0848】例外 データアドレス、非整列アクセス無効 プログラミング注意 この命令はエレメントマスクによって影響を受けない。
【0849】VSTWS ストライド記憶
【0850】
【表266】
【0851】アセンブラ構文 VSTWS.st Rs,SRb,SRi VSTWS.st Rs,SRb,#IMM VSTWS.st RS,SRb+,SRi VSTWS.st Rs,SRb+,#IMM ここで、st={4,8,16,32},Rs={VR
s,VRAs}、.64モードは支援されず、その代わ
りVSTを使用することに留意されたい。キャッシュオ
フ記憶のためにVSTWSOFFを使用する。
【0852】説明 有効アドレスから始めてストライド制御レジスタ(Strid
e Control Register)としてスカラレジスタSRb+1
を使用してベクトルレジスタVRsからメモリに32バ
イトが記憶される。
【0853】STは各ブロックから記憶のために連続し
たバイトの番号とブロックサイズを指定する。SRb+
1は2連続ブロックの始まりを分離するバイトの番号と
ストライドを指定する。
【0854】ストライドはブロックサイズと同一か或い
は大きくなければならない。EAは整列されたデータサ
イズでなければならない。ストライドとブロックサイズ
はデータサイズの多数倍になるべきである。
【0855】 演算 EA= SRb + {SRi ‖ sex(IMM<7:0>)}; if(A==1) SR b =EA; Block size= {4 ‖ 8 ‖ 16 ‖ 32 }; Stride = SRb+1<31:0>; for(i=0;j < VECSIZE/Block size;i++) for(j=0;j < Block size;j++) BYTE{EA+i* Stride+j] = VRs [i* Block size+j]<7:0>; 例外 データアドレス、非整列アクセス無効VSUB 減算
【0856】
【表267】
【0857】アセンブラ構文 VSUB.st VRd,VRa,VRb VSUB.st VRd,VRa,SRb VSUB.st VRd,VRa,#IMM VSUB.st SRd,SRa,SRb VSUB.st SRd,SRa,#IMM ここで、st={b,b9t,h,w,f}
【0858】
【表268】
【0859】説明 ベクトル/スカラレジスタRbの内容はベクトル/スカ
ラレジスタRaの内容から減算され、その結果はベクト
ル/スカラレジスタRdに記憶される。
【0860】 例外 オーバフロー、浮動小数点無効オペランドVSUBS 減算及びセット
【0861】
【表269】
【0862】アセンブラ構文 VSUBS.dt SRd,SRa,SRb VSUBS.dt SRd,SRa,#IMM ここで、dt={b,b9,h,w,f}。
【0863】
【表270】
【0864】説明 SRbはSRaから減算され、その結果はSRdに記憶
され、VCSRにVFLAGビットがセットされる。
【0865】演算 Bop = {SRb ‖ sex(IMM<8:0>)}; SRd = SRa - Bop; VCSR<lt,eq,gt> = status(SRa - Bop); 例外 オーバフロー、浮動小数点無効オペランドVUNSHFL アンシャッフル
【0866】
【表271】
【0867】アセンブラ構文 VUNSHFL.dt VRc,VRd,VRa,VR
b VUNSHFL.dt VRc,VRd,VRa,SR
b ここで,dt={b、b9、h、w、f}。.wと.f
は同一な演算を指定することに注意する。
【0868】
【表272】
【0869】説明 ベクトルレジスタVRbの内容が次に示した通りベクト
ルレジスタVRc:VRdにRbとアンシャッフルされ
る。
【0870】
【表273】
【0871】演算 例外 無し。
【0872】プログラミング注意 この命令はエレメントマスクを使用しない。
【0873】VUNSHFLH ハイアンシャフ
【0874】
【表274】
【0875】アセンブラ構文 VUNSHFLH.dt VRd,VRa,VRb VUNSHFLH.dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}、.wと.f
が同一の演算を指定することに留意されたい。
【0876】
【表275】
【0877】説明 ベクトルレジスタRaの内容は下記に示すようにRbと
アンシャフル(unshuffle) され、その結果の上位部分は
ベクトルレジスタRdにリターンされる。
【0878】
【表276】
【0879】演算 例外 無し プログラミング注意 この命令はエレメントマスクを使用しない。
【0880】VUNSHFLL ローアンシャフル
【0881】
【表277】
【0882】アセンブラ構文 VUNSHFLL.dt VRd,VRa,VRb VUNSHFLL.dt VRd,VRa,SRb ここで、dt={b,b9,h,w,f}、.wと.f
が同一の演算を指定することに留意されたい。
【0883】
【表278】
【0884】説明 ベクトルレジスタRaの内容は下記に示すようにRbと
アンシャフル(unshuffle) され、その結果の上位部分は
ベクトルレジスタRdにリターンされる。
【0885】
【表279】
【0886】演算 例外 無し プログラミング注意 この命令はエレメントマスクを使用しない。
【0887】VWBACK 再記録
【0888】
【表280】
【0889】アセンブラ構文 VWBACK.ln SRb,SRi VWBACK.ln SRb,#IMM VWBACK.ln SRb+,SRi VWBACK.ln SRb+,#IMM ここで、ln={1,2,4,8}。
【0890】説明 ベクトルデータキャッシュでEAによってインデックス
が指定されたキャッシュライン(EAとタグが一致する
ものと反対)はそれが修正されたデータを含む場合、メ
モリにアップデートされる。もし1以上のキャッシュラ
インが指定される場合、次の順次的なキャッシュライン
はそれらが修正されたデータを含む場合、メモリにアッ
プデートされる。キャッシュラインの数は次のように指
定される: LN(1:0)=00:1つの64バイトキャッシュラ
インが記録される。
【0891】LN(1:0)=01:2つの64バイト
キャッシュラインが記録される。
【0892】LN(1:0)=10:4つの64バイト
キャッシュラインが記録される。
【0893】LN(1:0)=11:8つの64バイト
キャッシュラインが記録される。
【0894】もし有効アドレスが64バイトバウンダリ
になければ、それは64バイトバウンダリに整列される
ように先に打ち切られる。
【0895】演算 例外 データアドレス例外無効 プログラミング注意 EA(31:0)はローカルメモリのバイトアドレスを
示す。
【0896】VWBACKSP 臨時パッドからの再
記録
【0897】
【表281】
【0898】アセンブラ構文 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とV
WBACKSPは同一の演算コードを使用する。
【0899】説明 臨時パッドからメモリに多数の64バイトブロックを伝
送する。有効アドレスはメモリに開始アドレスを提供
し、SRpは臨時パッドに開始アドレスを提供する。6
4バイトブロックの数は次のように指定される: LN(1:0)=00:1つの64バイトブロックが記
録される。
【0900】LN(1:0)=01:2つの64バイト
ブロックが記録される。
【0901】LN(1:0)=10:4つの64バイト
ブロックが記録される。
【0902】LN(1:0)=11:8つの64バイト
ブロックが記録される、もし有効アドレスが64バイト
バウンダリになければ、それは64バイトバウンダリに
整列されるように先に打ち切られる。もしSRpの臨時
パッドポインタアドレスが64バイトバウンダリになけ
れば、またそれは64バイトバウンダリに整列されるよ
うに先に打ち切られる。整列された臨時パッドポインタ
アドレスは伝送されたバイトの数だけ増分される。
【0903】 例外 データアドレス例外無効VXNOR XNOR(排他的NOR)
【0904】
【表282】
【0905】アセンブラ構文 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,f}。
【0906】
【表283】
【0907】説明 ベクトル/スカラレジスタRaの内容はベクトル/スカ
ラレジスタRbの内容に論理的にXNORされ、その結
果はベクトル/スカラレジスタRdに記憶される。
【0908】 演算 for(i=0:i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖SRb ‖sex(IMM<8.0>) }; Rd[i]<K>=-(Ra[i]<k> ^Bop[i]<k>,for k =all bits in element i; } 例外 無しVXOR XOR(排他的OR)
【0909】
【表284】
【0910】アセンブラ構文 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}。
【0911】
【表285】
【0912】説明 ベクトル/スカラレジスタRaの内容はベクトル/スカ
ラレジスタRbの内容に論理的にXORされ、その結果
はベクトル/スカラレジスタRdに記憶される。
【0913】 演算 for(i=0:i < NumElem && EMASK[i];i++){ Bop[i] ={VRb[i]‖SRb ‖sex(IMM<8:0>) }; Rd[i]<k>=Ra[i]<k> ^Bop[i]<k>),for k =all bits in element i; } 例外 無しVXORALL 全てのエレメントXOR(排他的
OR)
【0914】
【表286】
【0915】アセンブラ構文 VXORALL.dt SRd,VRb ここで、dt={b,b9,h,w,f}、.bと.b
9は同一の演算を示す
【0916】
【表287】
【0917】説明 VRbで各エレメントの最下位ビットは共にXORさ
れ、1ビット結果はSRdの最下位ビットにリターンさ
れる。この命令はエレメントマスクによって影響を受け
ない。
【0918】演算 例外 無し
【図面の簡単な説明】
【図1】本発明の実施の形態によるマルチメディア信号
プロセッサのブロック図。
【図2】図1に示すマルチメディア信号プロセッサのベ
クトルプロセッサのブロック図。
【図3】図2に示すベクトルプロセッサにおける命令取
出しユニットのブロック図。
【図4】図2に示すベクトルプロセッサにおける命令取
出しユニットのブロック図。
【図5】図2に示すベクトルプロセッサにおけるレジス
タ対レジスタ命令に対するステージ実行パイプラインを
示した段階図。
【図6】図2に示すベクトルプロセッサにおけるロード
命令の実行のための実行パイプラインを示した段階図。
【図7】図2に示すベクトルプロセッサにおける格納命
令語の実行のための実行パイプラインを示した段階図。
【図8】図2に示すベクトルプロセッサにおける実行デ
ータパスのブロック図。
【図9】図8に示す実行データパスにおけるレジスタフ
ァイルのブロック図。
【図10】図8に示す実行データパスにおける並列処理
論理ユニットのブロック図。
【図11】図2に示すベクトルプロセッサにおけるロー
ド/記憶ユニットのブロック図。
【図12】本発明の実施の形態によるベクトルプロセッ
サの命令セットのフォーマット図。
【符号の説明】
100 マルチメディアプロセッサ 105 プロセッシングコア 110 主プロセッサ 115 拡張レジスタ 120 ベクトルプロセッサ 130 キャッシュサブレジスタ 140 システムバス 142 システムタイマ 144 全二重UART 146 ビットストリームプロセッサ 148 インタラプトコントローラ 150 システムバス 152 デバイスインタフェース 154 DMAコントローラ 156 ローカルバスコントローラ 158 メモリコントローラ 160,190 SRAM 162,192 命令キャッシュ 164,194 データキャッシュ 170 ROM 180 キャッシュコントロール 210 命令取出しユニット(IFU) 220 デコーダ 230 スケジューラ 240 実行データパス 250 ロード/記憶ユニット(LSU) 610 レジスタファイル
フロントページの続き (72)発明者 リ トロン ギュエン アメリカ合衆国 カリフォルニア州 95030 モンテセレノ ダニエルプレイス 15095 (72)発明者 ロニー サー ドン ウォン アメリカ合衆国 カリフォルニア州 94086 サニーベイル ラークスパー ア ベニュー 946

Claims (9)

    【特許請求の範囲】
  1. 【請求項1】 プロセッサにおいて、 単一スカラ値を格納するように適応されたスカラレジス
    タと、 多数のデータエレメントを格納するように適応されたベ
    クトルレジスタと、 前記スカラレジスタ及び前記ベクトルレジスタに結合さ
    れたプロセッシング回路とを備え、 単一命令に応答して前記プロセッシング回路はそれぞれ
    の演算が前記ベクトルレジスタからのデータエレメント
    のうち1つのエレメントと前記スカラレジスタからのス
    カラ値を結合する演算を並列に行うことを特徴とするプ
    ロセッサ。
  2. 【請求項2】 命令を実行するプロセッシング回路の演
    算方法において、 ベクトル値の成分を形成するレジスタデータエレメント
    から読み出す段階と、 ベクトル結果を生成するためにスカラ値を前記それぞれ
    のデータエレメントと結合する並列演算を行う段階とを
    含むことを特徴とするプロセッシング回路演算方法。
  3. 【請求項3】 前記並列遂行段階はベクトルデータ結果
    を生成するために前記それぞれのデータエレメントによ
    り前記スカラ値を乗算することを特徴とする請求項2に
    記載のプロセッシング回路演算方法。
  4. 【請求項4】 前記並列遂行段階はベクトルデータ結果
    を生成するために前記データエレメントのそれぞれに前
    記スカラ値を加算することを特徴とする請求項2に記載
    のプロセッシング回路演算方法。
  5. 【請求項5】 前記データエレメントと結合するために
    第2レジスタから前記スカラ値を読み出す段階をさらに
    含み、前記第2レジスタは単一スカラ値を格納するよう
    に適応されていることを特徴とする請求項2に記載のプ
    ロセッシング回路演算方法。
  6. 【請求項6】 前記データエレメントと結合するために
    前記スカラ値を前記命令から抽出する段階をさらに含む
    ことを特徴とする請求項2に記載のプロセッシング回路
    演算方法。
  7. 【請求項7】 プロセッサの演算方法において、 それぞれのスカラレジスタが単一スカラ値を格納するよ
    うに適応されており、それぞれのベクトルレジスタがベ
    クトル成分を形成する多数のデータエレメントを格納す
    るように適応されており、プロセッサ内にスカラレジス
    タとベクトルレジスタを供する段階と、 他のスカラレジスタに割り当てられたレジスタ番号とは
    区別されるレジスタ番号をそれぞれのスカラレジスタに
    割り当てる段階と、 前記ベクトルレジスタに割り当てられた少なくとも一部
    のレジスタ番号が前記スカラレジスタに割り当てられた
    レジスタ番号と同様であり、他のベクトルレジスタに割
    り当てられたレジスタ番号とは区別されるレジスタ番号
    をそれぞれのベクトルレジスタに割り当てる段階と、 スカラレジスタを識別するレジスタ番号である第1オペ
    ランドとベクトルレジスタを識別するレジスタ番号であ
    る第2オペランドを含む命令を形成する段階と、 前記第1オペランドにより識別された前記スカラレジス
    タと前記第2オペランドにより識別された前記ベクトル
    レジスタ内のデータエレメントとの間にデータを移動さ
    せ命令を実行する段階とを含むことを特徴とするプロセ
    ッサ演算方法。
  8. 【請求項8】 前記形成された命令はベクトル内のデー
    タエレメントを識別する第3オペランドをさらに含み、
    前記第1オペランドにより識別された前記スカラレジス
    タと前記第2オペランドにより識別された前記ベクトル
    レジスタ内の前記第3オペランドにより識別された前記
    データエレメントとの間にデータを移動させ命令を実行
    する段階を含むことを特徴とする請求項7に記載のプロ
    セッサ演算方法。
  9. 【請求項9】 前記形成された命令は第2スカラレジス
    タを識別する第3オペランドをさらに含み、前記第1オ
    ペランドにより識別された前記スカラレジスタと前記第
    2オペランドにより識別され前記第2スカラレジスタに
    格納された値により識別される前記ベクトルレジスタに
    存するデータエレメントとの間にデータを移動させ命令
    を実行する段階を含むことを特徴とする請求項7に記載
    のプロセッサ演算方法。
JP9222417A 1996-08-19 1997-08-19 スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理 Pending JPH10143494A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US69958596A 1996-08-19 1996-08-19
US08/699585 1996-08-19

Publications (1)

Publication Number Publication Date
JPH10143494A true JPH10143494A (ja) 1998-05-29

Family

ID=24809983

Family Applications (1)

Application Number Title Priority Date Filing Date
JP9222417A Pending JPH10143494A (ja) 1996-08-19 1997-08-19 スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理

Country Status (6)

Country Link
JP (1) JPH10143494A (ja)
KR (1) KR100267089B1 (ja)
CN (1) CN1152300C (ja)
DE (1) DE19735349B4 (ja)
FR (1) FR2752629B1 (ja)
TW (1) TW346595B (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111095242A (zh) * 2017-07-24 2020-05-01 特斯拉公司 向量计算单元
KR20220003666A (ko) * 2017-04-03 2022-01-10 구글 엘엘씨 벡터 감소 프로세서
CN114461277A (zh) * 2021-12-29 2022-05-10 广西电网有限责任公司电力科学研究院 一种电力专用dsp指令集的设计及应用方法
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
US12216610B2 (en) 2017-07-24 2025-02-04 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103002276B (zh) * 2011-03-31 2017-10-03 Vixs系统公司 多格式视频解码器及解码方法
CN104126169B (zh) * 2011-12-22 2018-11-09 英特尔公司 用于在两个向量寄存器的相应打包数据元素之间执行绝对差计算的系统、装置和方法
US9792115B2 (en) * 2011-12-23 2017-10-17 Intel Corporation Super multiply add (super MADD) instructions with three scalar terms
CN102750133B (zh) * 2012-06-20 2014-07-30 中国电子科技集团公司第五十八研究所 支持simd的32位三发射的数字信号处理器
KR102179385B1 (ko) 2013-11-29 2020-11-16 삼성전자주식회사 명령어를 실행하는 방법 및 프로세서, 명령어를 부호화하는 방법 및 장치 및 기록매체
GB2543303B (en) * 2015-10-14 2017-12-27 Advanced Risc Mach Ltd Vector data transfer instruction
CN114116513B (zh) * 2021-12-03 2022-07-29 中国人民解放军战略支援部队信息工程大学 多指令集架构向risc-v指令集架构的寄存器映射方法及装置
CN114638351A (zh) * 2022-03-21 2022-06-17 Oppo广东移动通信有限公司 一种处理方法、npu及电子设备

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5081573A (en) * 1984-12-03 1992-01-14 Floating Point Systems, Inc. Parallel processing system
US5001662A (en) * 1989-04-28 1991-03-19 Apple Computer, Inc. Method and apparatus for multi-gauge computation
JPH04336378A (ja) * 1991-05-14 1992-11-24 Nec Corp 情報処理装置
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
EP0681236B1 (en) * 1994-05-05 2000-11-22 Conexant Systems, Inc. Space vector data path

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20220003666A (ko) * 2017-04-03 2022-01-10 구글 엘엘씨 벡터 감소 프로세서
CN111095242A (zh) * 2017-07-24 2020-05-01 特斯拉公司 向量计算单元
US11893393B2 (en) 2017-07-24 2024-02-06 Tesla, Inc. Computational array microprocessor system with hardware arbiter managing memory requests
CN111095242B (zh) * 2017-07-24 2024-03-22 特斯拉公司 向量计算单元
US12086097B2 (en) 2017-07-24 2024-09-10 Tesla, Inc. Vector computational unit
US12216610B2 (en) 2017-07-24 2025-02-04 Tesla, Inc. Computational array microprocessor system using non-consecutive data formatting
CN114461277A (zh) * 2021-12-29 2022-05-10 广西电网有限责任公司电力科学研究院 一种电力专用dsp指令集的设计及应用方法
CN114461277B (zh) * 2021-12-29 2025-02-25 广西电网有限责任公司电力科学研究院 一种电力专用dsp指令集的设计及应用方法

Also Published As

Publication number Publication date
CN1152300C (zh) 2004-06-02
DE19735349A1 (de) 1998-04-02
DE19735349B4 (de) 2006-12-14
KR100267089B1 (ko) 2000-11-01
TW346595B (en) 1998-12-01
KR19980018065A (ko) 1998-06-05
FR2752629B1 (fr) 2005-08-26
CN1188275A (zh) 1998-07-22
FR2752629A1 (fr) 1998-02-27

Similar Documents

Publication Publication Date Title
JPH10134036A (ja) マルチメディア信号プロセッサの単一命令多重データ処理
KR100236527B1 (ko) 벡터 레지스터의 복수 뱅크를 사용한 단일 명령복수 데이터 처 리
EP0927393B1 (en) Digital signal processing integrated circuit architecture
JP2835103B2 (ja) 命令指定方法及び命令実行方式
JP3983394B2 (ja) 幾何学処理プロセッサ
US5901301A (en) Data processor and method of processing data
EP0901071B1 (en) Methods for interfacing a processor to a coprocessor
US7487338B2 (en) Data processor for modifying and executing operation of instruction code according to the indication of other instruction code
US11500631B2 (en) Method and apparatus for implied bit handling in floating point multiplication
JP2581236B2 (ja) データ処理装置
JPH0766324B2 (ja) データ処理装置
GB2317465A (en) Data processing apparatus registers
JPH10143494A (ja) スカラ/ベクトル演算の組み合わせられた単一命令複数データ処理
US5958000A (en) Two-bit booth multiplier with reduced data path width
JPH10232821A (ja) データ処理装置
KR100267092B1 (ko) 멀티미디어신호프로세서의단일명령다중데이터처리
EP0927390B1 (en) Processing of conditional select and move instructions
US6925548B2 (en) Data processor assigning the same operation code to multiple operations
KR20000048529A (ko) 데이터 처리장치의 레지스터 제어
US6275925B1 (en) Program execution method and program execution device
US20070143579A1 (en) Integrated data processor
JPH1115660A (ja) マイクロプロセッサ
JP4382076B2 (ja) データ処理装置
EP0186668A1 (en) Three word instruction pipeline
KR20000048530A (ko) 데이터 처리장치 레지스터