
SPARC(Scalable Processor ARChitecture)は、Sun Microsystemsが開発したRISC(Reduced Instruction Set Computer )命令セットアーキテクチャです。その設計は、1980年代初頭に開発された実験的なBerkeley RISCシステムに強く影響を受けています。1986年に開発され、1987年にリリースされたSPARCは、初期の商用RISCシステムの中で最も成功したものの1つであり、その成功を受けて、1980年代から1990年代にかけて多くのベンダーが同様のRISC設計を導入しました。Sunを買収したOracle Corporationは、 2017年にSPARCの開発を終了しました。
1980年代半ばまでに、コンピュータ業界ではRISCが従来のCISCアーキテクチャよりもはるかに優れた価格性能比を持っているという認識が定着した。ワークステーションベンダーのSun Microsystemsは、Motorola 68000シリーズのプロセッサからRISCへできるだけ早く移行することを決定した。[ 3 ]
オリジナルの32ビットアーキテクチャ(SPARC V7)の最初の実装は、サン・マイクロシステムズのSun-4コンピュータワークステーションおよびサーバーシステムで使用され、モトローラ68000シリーズをベースとした以前のSun-3システムを置き換えました。SPARC V8では、1992年にリリースされたSuperSPARCシリーズプロセッサの一部として、いくつかの改良が加えられました。1993年にリリースされたSPARC V9は64ビットアーキテクチャを導入し、1995年にサン・マイクロシステムズのUltraSPARCプロセッサで初めてリリースされました。その後、SPARCプロセッサは、サン・マイクロシステムズ、ソルボーン・コンピュータ、富士通などが製造した対称型マルチプロセッシング(SMP)および非均一メモリアクセス(CC-NUMA)サーバーで使用されました。
1989年にSPARC Internationalという業界団体に設計が引き渡され、それ以来、そのアーキテクチャは加盟団体によって開発されてきました。SPARC Internationalは、SPARCアーキテクチャのライセンス供与と普及、SPARC商標(SPARC自体も所有)の管理、適合性試験の提供も担当しています。SPARC Internationalは、SPARCアーキテクチャを拡張してより大きなエコシステムを構築することを目的として設立されました。SPARCは、 Atmel、Bipolar Integrated Technology、Cypress Semiconductor、富士通、松下電器産業、Texas Instrumentsなど、複数のメーカーにライセンス供与されています。SPARC Internationalのおかげで、SPARCは完全にオープンで、非独占的かつロイヤリティフリーとなっています。
2024年現在、最新の商用ハイエンドSPARCプロセッサは、富士通のSPARC64 XII(2017年9月にSPARC M12サーバー向けに発表)と、オラクルのSPARC M8( 2017年9月にハイエンドサーバー向けに発表)である。
2017年9月1日、2016年11月にOracle Labsで始まった一連のレイオフの後、OracleはM8の完成をもってSPARC設計を終了した。テキサス州オースティンのプロセッサコア開発グループの大部分が解雇され、カリフォルニア州サンタクララとマサチューセッツ州バーリントンのチームも同様に解雇された。[ 4 ] [ 5 ]
富士通は、2020~2022年に富士通の旧型SPARC M12サーバーの「強化版」を1つリリースした後(以前は2021年に予定されていた)、2029年にUNIXサーバーの販売を終了し、その1年後にメインフレームの販売を終了し、2034年にサポートを終了することで、「顧客の近代化を促進する」としている(すでに自社製のARMベースのCPUの生産に移行している)。[ 6 ]
SPARCアーキテクチャは、カリフォルニア大学バークレー校のBerkeley RISC IおよびII 、IBM 801など、初期のRISC設計から大きな影響を受けています。これらの初期のRISC設計は、機能やオペコードをできるだけ少なくし、クロックサイクルあたりほぼ1命令の速度で命令を実行することを目指した、ミニマリスト的なものでした。そのため、乗算や除算などの命令がないなど、多くの点でMIPSアーキテクチャと類似していました。この初期のRISCムーブメントの影響を受けたSPARCのもう1つの特徴は、分岐遅延スロットです。
SPARC プロセッサは通常、最大 160 個の汎用レジスタを備えています。「Oracle SPARC Architecture 2015」仕様によると、「実装には 72 ~ 640 個の汎用 64 ビット レジスタが含まれる場合があります」。[ 7 ]任意の時点で、そのうち 32 個だけがソフトウェアからすぐにアクセスできます 。8 個はグローバル レジスタのセット (そのうちの 1 つであるg0はゼロに固定されているため、レジスタとして使用できるのは 7 つだけです) であり、残りの 24 個はレジスタスタックからのものです。これらの 24 個のレジスタはレジスタ ウィンドウと呼ばれるものを形成し、関数呼び出し/戻り時に、このウィンドウはレジスタ スタックを上下に移動します。各ウィンドウには 8 つのローカル レジスタがあり、隣接する各ウィンドウと 8 つのレジスタを共有します。共有レジスタは関数パラメータの受け渡しと戻り値に使用され、ローカル レジスタは関数呼び出し間でローカル値を保持するために使用されます。
SPARCの「スケーラブル」とは、SPARC仕様によって、組み込みプロセッサから大規模サーバープロセッサまで、すべて同じコア(非特権)命令セットを共有しながら実装を拡張できるという事実に由来します。拡張可能なアーキテクチャパラメータの1つは、実装するレジスタウィンドウの数です。仕様では3~32個のウィンドウを実装できるため、実装では、コールスタックの効率を最大化するために32個すべてを実装するか、設計のコストと複雑さを軽減するために3個だけを実装するか、またはその間の数を実装するかを選択できます。同様のレジスタファイル機能を備えた他のアーキテクチャには、 Intel i960、IA-64、およびAMD 29000があります。
アーキテクチャは何度か改訂されてきました。バージョン 8 ではハードウェア乗算と除算機能が追加されました。[ 8 ] [ 9 ] 1994 年に公開されたバージョン 9 SPARC 仕様には64 ビット(アドレス指定とデータ) が追加されました。[ 10 ]
SPARC バージョン 8 では、浮動小数点レジスタ ファイルには 16 個の倍精度レジスタがあります。それぞれを 2 つの単精度レジスタとして使用できるため、合計 32 個の単精度レジスタが提供されます。奇数と偶数の倍精度レジスタのペアを4 倍精度レジスタとして使用できるため、8 つの 4 倍精度レジスタが使用可能になります。SPARC バージョン 9 では、さらに 16 個の倍精度レジスタが追加されました (これらも 8 つの 4 倍精度レジスタとしてアクセスできます) が、これらの追加レジスタは単精度レジスタとしてアクセスできません。2024 年現在、ハードウェアで 4 倍精度演算を実装している SPARC CPU はありません。[ 11 ]
タグ付き加算および減算命令は、値に対して加算および減算を実行し、両方のオペランドの下位2ビットが0であることを確認し、そうでない場合はオーバーフローを報告します。これは、タグ付き整数形式を使用する可能性のあるML、Lisp 、および同様の言語のランタイムの実装に役立ちます。
32ビットSPARC V8アーキテクチャのエンディアンは、完全にビッグエンディアンです。64ビットSPARC V9アーキテクチャはビッグエンディアン命令を使用しますが、データへのアクセスはビッグエンディアンまたはリトルエンディアンのどちらのバイト順でも可能で、これはアプリケーション命令(ロード/ストア)レベルまたはメモリページレベル(MMU設定経由)で選択できます。後者は、PCIバス上のデバイスなど、本来リトルエンディアンであるデバイスからデータにアクセスする場合によく使用されます。
v7 → v8 → v9 (64ビット) → JPS1 → JPS2 (マルチコア) → UA2005 ( sun4v ) → UA2007 → OSA2011 → OSA2015 → OSA2017
アーキテクチャはこれまでに3回大きく改訂されています。最初に公開されたのは、1986年に発表された32ビットSPARCバージョン7(V7)です。SPARCアーキテクチャ定義を拡張したSPARCバージョン8(V8)は1990年にリリースされました。V7とV8の主な違いは、整数乗算および除算命令の追加と、80ビットの「拡張精度」浮動小数点演算から128ビットの「4倍精度」演算へのアップグレードでした。SPARC V8は、32ビットマイクロプロセッサアーキテクチャのIEEE規格であるIEEE Standard 1754-1994の基礎となりました。
SPARCバージョン9(V9)は、64ビットSPARCアーキテクチャであり、1993年にSPARC Internationalによってリリースされました。これは、Amdahl Corporation、富士通、ICL、LSI Logic、松下電器産業、フィリップス、ロス・テクノロジー、サン・マイクロシステムズ、テキサス・インスツルメンツからなるSPARCアーキテクチャ委員会によって開発されました。新しい仕様は常に、SPARC V9レベル1仕様に準拠しています。
2002年、富士通とサン・マイクロシステムズは、両社のCPUで同一に実装されるプロセッサ機能(「共通性」)を記述したSPARC Joint Programming Specification 1(JPS1)をリリースしました。JPS1に準拠した最初のCPUは、サン・マイクロシステムズのUltraSPARC IIIと富士通のSPARC64 Vでした。JPS1でカバーされていない機能については、各プロセッサごとに「実装補足資料」に記載されています。
2003年末、マルチコアCPUをサポートするために、 Joint Programming Specification 2(JPS2)がリリースされた。JPS2に準拠した最初のCPUは、サン・マイクロシステムズのUltraSPARC IVと富士通のSPARC64 VIであった。
2006年初頭、サン・マイクロシステムズは拡張アーキテクチャ仕様であるUltraSPARC Architecture 2005(UA2005)をリリースしました。これには、SPARC V9の非特権部分と特権部分の大部分だけでなく、UltraSPARC III、IV、IV+のプロセッサ世代を通じて開発されたすべてのアーキテクチャ拡張機能、およびUltraSPARC T1実装から始まるチップマルチスレッディングテクノロジー(CMT)拡張機能も含まれています。
2007年、サン・マイクロシステムズは更新された仕様であるUltraSPARC Architecture 2007(UA2007)をリリースし、UltraSPARC T2の実装はこの仕様に準拠した。
2007年12月、SunはOpenSPARCプロジェクトを通じてUltraSPARC T2プロセッサのRTLも公開した。[ 12 ]また、GNU General Public License v2の下でリリースされた。[ 13 ] OpenSPARC T2は8コア、16パイプライン、64スレッドである。
2012年8月、Oracle Corporationは、リファレンスの全体的な更新に加えて、VIS 3命令セット拡張機能とハイパー特権モードを2007年の仕様に追加した新しい仕様、 Oracle SPARC Architecture 2011 (OSA2011)を公開しました。[ 14 ]
2015 年 10 月、Oracle は、新しいOracle SPARC Architecture 2015 (OSA2015) 仕様に基づく最初のプロセッサである SPARC M7 をリリースしました。[ 7 ] [ 15 ] この改訂版には、VIS 4 命令セット拡張、ハードウェア支援暗号化、シリコンセキュアメモリ (SSM) が含まれています。[ 16 ]
2017年9月、オラクルは、新しいOracle SPARC Architecture 2017(OSA2017)仕様に基づいた最初のプロセッサであるSPARC M8をリリースした。
SPARCアーキテクチャは、1987年の最初のSPARC V7実装からSun UltraSPARCアーキテクチャの実装に至るまで、継続的なアプリケーションバイナリ互換性を提供してきた。
SPARCの様々な実装の中でも、Sun社のSuperSPARCとUltraSPARC-Iは非常に人気が高く、SPEC CPU95およびCPU2000ベンチマークの基準システムとして使用されました。296MHzの UltraSPARC-IIは、SPEC CPU2006ベンチマークの基準システムです。
SPARCはロードストアアーキテクチャ(レジスタレジスタアーキテクチャとも呼ばれる)であり、メモリへのアクセスに使用されるロード/ストア命令を除き、すべての命令はRISC設計原則に従ってレジスタ上で動作します。
SPARCプロセッサは、整数ロード、ストア、および算術演算を実行する整数演算ユニット(IU)を備えています。[ 17 ] : 9 [ 10 ] : 15–16 また、浮動小数点演算を実行する浮動小数点演算ユニット(FPU)を含む場合があり[ 17 ] : 9 [ 10 ] : 15–16、SPARC V8では、コプロセッサ固有の演算を実行するコプロセッサ(CP)を含む場合があります。アーキテクチャでは、ロードおよびストア演算以外に、コプロセッサがどのような機能を実行するかは規定されていません。[ 17 ] : 9
SPARCアーキテクチャは、レジスタウィンドウが重複する方式を採用しています。任意の時点で、32個の汎用レジスタが使用可能です。ハードウェア内のカレントウィンドウポインタ(CWP)変数は、現在のレジスタセットを指します。レジスタファイルの合計サイズはアーキテクチャに含まれていないため、技術の進歩に伴ってレジスタを追加できます。CWPは5ビットでPSRレジスタの一部であるため、SPARC V7およびV8では最大32個のウィンドウまで使用可能です。
SPARC V7 および V8 では、CWP は通常、SAVE 命令によってデクリメントされ (プロシージャ呼び出し中に新しいスタック フレームを開いてレジスタ ウィンドウを切り替えるために SAVE 命令で使用)、RESTORE 命令によってインクリメントされます (プロシージャから戻る前に呼び出しに戻ります)。トラップ イベント (割り込み、例外、または TRAP 命令) および RETT 命令 (トラップからの復帰) もCWP を変更します。SPARC V9 では、CWP レジスタは RESTORE 命令中にデクリメントされ、SAVE 命令中にインクリメントされます。これは、SPARC V8 の PSR.CWP の動作とは逆です。この変更は、非特権命令には影響しません。
SPARCレジスタは上の図に示されています。
また、乗算ステップ、整数乗算、整数除算命令で使用される、ウィンドウ処理されていないYレジスタも存在する。[ 17 ]: 32
FPUを搭載したSPARC V8プロセッサは、32個の32ビット浮動小数点レジスタを備えており、各レジスタには単精度IEEE 754浮動小数点数が1つ格納できます。偶数と奇数の浮動小数点レジスタのペアには倍精度IEEE 754浮動小数点数が1つ格納でき、4つの浮動小数点レジスタの4つを揃えたグループには4倍精度IEEE 754浮動小数点数が1つ格納できます。[ 17 ] : 10
FPUを搭載したSPARC V9プロセッサには以下が含まれる:[ 10 ]: 36~40
レジスタは64個の32ビットレジスタのセットとして構成されており、最初の32個は32ビット浮動小数点レジスタとして使用され、64個すべてのレジスタの偶数と奇数のペアは64ビット浮動小数点レジスタとして使用され、4つの浮動小数点レジスタの4つ一組のグループは128ビット浮動小数点レジスタとして使用されます。
浮動小数点レジスタはウィンドウ処理されておらず、すべてグローバルレジスタである。[ 10 ]: 36-40
SPARC 命令はすべて 32 ビットのワード全体を占有し、ワード境界から始まります。最初の 2 ビットで区別される 4 つのフォーマットが使用されます。すべての算術命令と論理命令には、2 つのソース オペランドと 1 つのデスティネーション オペランドがあります。[ 18 ] RD は「デスティネーション レジスタ」であり、演算の出力が格納されます。SPARC 命令の大部分には少なくともこのレジスタがあるため、命令フォーマットの「先頭」近くに配置されます。RS1 と RS2 は「ソース レジスタ」であり、存在する場合と存在しない場合があり、定数に置き換えられる場合もあります。
ロード命令とストア命令は、アドレスの値を表す 2 つのオペランドと、読み書きするレジスタを表す 1 つのオペランドを持つ 3 つのオペランド形式です。アドレスは、2 つのアドレス オペランドを加算して生成されます。2 番目のアドレス オペランドは定数またはレジスタです。ロード命令は、アドレスの値を取得し、3 番目のオペランドで指定されたレジスタに格納します。一方、ストア命令は、1 番目のオペランドで指定されたレジスタの値を取得し、アドレスに格納します。これをより明確にするために、アセンブラ言語では、コンマ区切りのリストを使用する代わりに、プラス記号で区切られた角括弧を使用してアドレス オペランドを示します。例: [ 18 ]
ld [%L1+%L2],%L3 !アドレス%L1+%L2にある32ビット値をロードし、その値を%L3に格納します ld [%L1+8],%L2 !%L1+8 の値を %L2 にロードします ld [%L1],%L2 !上記と同様だがオフセットなし、これは+%G0と同じである。 st %L1,[%I2] !%L1 の値を %I2 に格納されている場所に格納します st %G0,[%I1+8] !%I1+8 のメモリをクリアします
16 ビットまたは 8 ビットの整数データや文字列内の 8 ビット バイトなど、32 ビット以外のデータが広く使用されているため、16 ビットのハーフワードや 8 ビット バイトをロードおよびストアする命令と、32 ビット ワードをロードする命令があります。ロード中、これらの命令は指定された場所にあるバイトまたはハーフワードのみを読み取り、ターゲット レジスタの残りの部分をゼロで埋めるか (符号なしロード)、バイトまたはハーフワードの最上位ビットの値で埋めます (符号付きロード)。ストア中、これらの命令はレジスタの上位ビットを破棄し、下位ビットのみをストアします。浮動小数点演算に使用される倍精度値をロードする命令もあり、指定されたレジスタと「次の」レジスタから 8 バイトを読み書きします。したがって、ロード先が L1 の場合、L1 と L2 が設定されます。 32ビットSPARCの汎用レジスタのロードおよびストア命令の完全なリストはLD、、、ST(LDUB符号なしバイト)、LDSB(符号付きバイト)、LDUH(符号なしハーフワード)、LDSH(符号付きハーフワード)、LDD(ロードダブル)、STB(ストアバイト)、STH(ストアハーフワード)、STD(ストアダブル)です。[ 18 ]
SPARC V9 では、レジスタは 64 ビットであり、 とLD名前が変更された命令はLDUW、レジスタの上位 32 ビットをクリアし、32 ビットの値を下位 32 ビットにロードします。また、STと名前が変更された命令はSTW、レジスタの上位 32 ビットを破棄し、下位 32 ビットのみを格納します。新しいLDSW命令は、レジスタの上位ビットをワードの最上位ビットの値に設定し、32 ビットの値を下位ビットにロードします。新しいLDX命令は、64 ビットの値をレジスタにロードし、STX命令はレジスタの 64 ビットすべてを格納します。
LDF、、LDDFおよび命令はLDQF、メモリから単精度、倍精度、または四倍精度の値を浮動小数点レジスタにロードします。STF、、、STDFおよびSTQF命令は、単精度、倍精度、または四倍精度の浮動小数点レジスタをメモリに格納します。
メモリバリア命令MEMBARは、相互に関連する2つの目的を果たします。それは、メモリ参照間の順序制約を明確にし、メモリ参照の完了を明示的に制御できるようにすることです。たとえば、MEMBAR命令より前に出現するストアのすべての効果は、MEMBARに続くロードが実行される前に、すべてのプロセッサから見えるようにする必要があります。[ 19 ]
算術命令と論理命令も3オペランド形式を使用し、最初の2つがオペランド、最後のオペランドが結果を格納する場所になります。中央のオペランドはレジスタまたは13ビット符号付き整数定数にすることができ、他のオペランドはレジスタです。レジスタオペランドはいずれもG0を指すことができ、結果をG0に指定すると、テストに使用できる結果が破棄されます。例:[ 18 ]
add %L1,%L2,%L3 !%L1と%L2の値を加算し、結果を%L3に格納します %L1,1,%L1 を追加 !%L1 をインクリメント %G0、%G0、%L4 を追加します。!%L4 の値をすべてクリアします。
数学命令のリストはADD、、、、、、および否定バージョン、、、、です。 SPARC 設計の特異な点の 1 つは、ほとんどの算術命令がペアになっており、一方のバージョンはステータス レジスタの NZVC 条件コード ビットを設定し、もう一方のバージョンは設定しないという点です。SUBデフォルトでは、コードは設定されません。これは、コンパイラが遅延スロットを埋めようとする際に命令を移動できるようにするためです。条件コードを設定したい場合は、命令に を追加することで示されます。 [ 18 ]ANDORXORANDNORNXNORcc
subcc %L1,10,%G0 !%L1 と 10 を比較し、結果を無視するが、フラグを設定する
加算と減算には、演算でキャリービットを設定するかどうかを示す別の修飾子Xもあります。
addx %L1,100,%L1 !%L1 の値に 100 を加算し、繰り上がりを追跡します
SPARC V7 には乗算命令や除算命令はありませんが、MULSCC乗算の 1 ステップを実行する命令があります。この命令は 1 ビットをテストし、条件付きで被乗数を積に加算します。これは、MULSCCRISC の理念に従って が 1 クロック サイクルで完了できるためです。SPARC V8 ではUMUL、(符号なし乗算) SMUL、(符号付き乗算)、UDIV(符号なし除算)、SDIV(符号付き除算) 命令が追加され、条件コードを更新しないバージョンと更新するバージョンの両方があります。 MULSCC乗算命令では、Y レジスタを使用して積の上位 32 ビットを保持します。除算命令では、RDYY レジスタを使用して被除数の上位 32 ビットを保持します。命令は、Y レジスタの値を汎用レジスタに読み取りますWRY。命令は、汎用レジスタの値を Y レジスタに書き込みます。[ 17 ] : 32 SPARC V9ではMULX、2つの64ビット値を乗算して64ビットの結果を生成する、SDIVX64ビット符号付き被除数を64ビット符号付き除数で除算して64ビット符号付き商を生成する、および64ビット符号なしUDIVX被除数を64ビット符号なし除数で除算して64ビット符号付き商を生成する命令が追加されました。これらの命令はいずれもYレジスタを使用しません。[ 10 ] : 199
条件分岐は、IBM System/360アーキテクチャとその後継アーキテクチャ、およびx86アーキテクチャなど、多くの命令セットに見られるように、ステータスレジスタ内の条件コードをテストします。つまり、テストと分岐は通常2つの命令で実行されます。最初の命令は条件コードを設定するALU命令で、次に分岐命令がそれらのフラグのいずれかを調べます。SPARCには専用のテスト命令はありません。テストは、宛先を%G0に設定した通常のALU命令を使用して実行されます。たとえば、レジスタが値10を保持しているかどうかをテストし、それを処理するコードに分岐するには、次のようにします。
subcc %L1,10,%G0 !%L1から10を減算し、%L1が10の場合はゼロフラグを設定します WASEQUAL である!ゼロフラグが設定されている場合は、WASEQUAL とマークされたアドレスに分岐する。
条件分岐命令では、iccまたはfccフィールドでテストする条件を指定します。22 ビットの変位フィールドは、ターゲットのアドレスを現在の PC を基準としてワード単位で表したもので、条件分岐は最大 8 メガバイトまで前後に移動できます。ANNUL (A) ビットは、一部の遅延スロットを削除するために使用されます。条件分岐で 0 の場合、遅延スロットは通常どおり実行されます。1 の場合、遅延スロットは分岐が実行された場合にのみ実行されます。分岐が実行されなかった場合、条件分岐の次の命令はスキップされます。
条件分岐には、BA(常に分岐、実質的にはjmp)、BN(決して分岐しない)、BE(等しい)、BNE(等しくない)、BL(より小さい)、BLE(以下)、(BLEU以下、符号なし)、(より大きい)、BG(以上)、BGE(以上、符号なし)、BGU(正)、BPOS(負)、 (キャリーBNEGクリア)、BCC(BCSキャリーセット)、(BVCオーバーフロークリア)、BVS(オーバーフローセット)など、さまざまな種類があります。[ 17 ] : 119–120
FPUとCPは、整数条件コードとは別個、かつ互いにも異なる条件コードのセットを持っています。これらの条件コードをテストするために、2つの追加の分岐命令セットが定義されました。上記のリストにある分岐命令の先頭にFを追加すると、FPUの条件コードに対するテストが実行されます[ 17 ] : 121-122。一方、SPARC V8では、Cを追加すると、それ以外は未定義のCPのフラグがテストされます[ 17 ] : 123-124 。
(サブルーチンへのジャンプ)命令CALLは、30ビットのプログラムカウンタ(相対ワードオフセット)を使用します。ターゲットアドレスはバイトではなくワードの開始位置を指定するため、4ギガバイトのアドレス空間内の任意のアドレスに到達するには30ビットだけで十分です。[ 18 ] CALL命令は、出力レジスタO7としても知られるレジスタR15にリターンアドレスを格納します。
(ジャンプおよびリンク)命令JMPLは3つのオペランドを持つ命令で、2つのオペランドはターゲットアドレスの値を表し、1つのオペランドは戻りアドレスを格納するレジスタを表します。アドレスは、2つのアドレスオペランドを加算して32ビットのアドレスを生成することによって作成されます。2番目のアドレスオペランドは定数またはレジスタのいずれかです。
命令オペコードが 32 ビット命令ワードのいくつかのビットを占有するため、単一の命令を使用して 32 ビット定数をロードする方法はありません。これは、アドレスがレジスタを介して操作され、レジスタが 32 ビットであるため重要です。これを容易にするために、特殊目的SETHI命令は、22 ビット即値オペランドを任意の指定レジスタの上位 22 ビットにコピーし、下位 10 ビットをそれぞれ 0 に設定します。一般的には、SETHI の後に、値の下位 10 ビットのみがセットされる or 命令が続きます。これを容易にするために、アセンブラには%hi(X)and%lo(X)マクロが含まれています。例: [ 18 ]
sethi %hi(0x89ABCDEF),%L1 !L1の上位22ビットを設定します または %L1,%lo(0x89ABCDEF),%L1 !L1の下位10ビットをOR演算で設定します
hi マクロと lo マクロは実行時ではなくアセンブリ時に実行されるため、パフォーマンスに影響はなく、L1 が 2 つの無関係な値ではなく単一の値に設定されていることがより明確になります。これをさらに容易にするために、アセンブラにはset、これら 2 つの操作を 1 行で実行する「合成命令」も含まれています。
0x89ABCDEF,% L1 を設定します
値が13ビットより大きい場合は上記の2つの命令が出力され、そうでない場合はld値を含む単一の命令が出力されます。[ 18 ]
前述のように、SPARCアセンブラは一般的なコーディング作業を容易にするために「合成命令」を使用します。その他の例としては、(他にもありますが)次のものがあります。[ 18 ]
Intelは80386の唯一の製造元であったため、非常に高価になり、業界は単一供給元によるCPUに警戒するようになった。1987年にSunがSPARCを発表した際、同社は複数の供給元から入手可能になると表明した。富士通が最初のSPARCベンダーであり、サイプレス・セミコンダクターが2番目のライセンシーであった。1989年2月現在、 SPARC CPUは利用可能であり、テキサス・インスツルメンツのFPUも同様であった。[ 20 ]以下の組織はSPARCアーキテクチャのライセンスを取得している。
注記:
SPARCマシンは一般的にSunのSunOS、Solaris、JavaOS、または派生版のillumosやOpenIndianaを含むOpenSolarisを使用してきたが、NeXTSTEP、RTEMS、FreeBSD、OpenBSD、NetBSD、Linuxなどの他のオペレーティングシステムも使用されてきた。
1993年、インターグラフはWindows NTをSPARCアーキテクチャに移植すると発表したが[ 48 ]、後に中止された。
2015年10月、Oracleは「Linux for SPARCリファレンスプラットフォーム」を発表した。[ 49 ]
SPARCアーキテクチャの完全オープンソース実装は複数存在する。
SPARCアーキテクチャ向けの完全オープンソースのシミュレータも存在する。
富士通は、HPC(高性能計算)負荷向けに、HPC-ACE(High Performance Computing – Arithmetic Computational Extensions)と呼ばれる新しい命令拡張セットを備えた専用のSPARC64 fxプロセッサを開発しています。
富士通のKコンピュータは、 2011年6月と2011年11月のTOP500リストで1位にランクインしました。8コアを持つ88,128個のSPARC64 VIIIfx CPUを組み合わせ、合計705,024コアとなり、当時のTOP500の他のどのシステムよりもほぼ2倍の数でした。Kコンピュータは、リストの次の5つのシステムを合わせたものよりも強力で、どのスーパーコンピュータシステムよりも最高のパフォーマンス対電力比を持っていました。[ 50 ]また、 2011年6月のGreen500リストでは、824.56 MFLOPS/Wのスコアで6位にランクインしました。 [ 51 ] 2012年11月のTOP500 リリースでは、Kコンピュータは3位にランクインし、上位3つの中で圧倒的に多くの電力を使用しました。[ 52 ]対応するGreen500リリースでは85位に ランクインしました。[ 53 ]最新のHPCプロセッサであるIXfxとXIfxは、最近のPRIMEHPC FX10およびFX100スーパーコンピュータに搭載されました。
Tianhe-2 ( 2014年11月時点でTOP500第1位[ 54 ] ) には、中国で開発されたGalaxy FT-1500 OpenSPARCベースのプロセッサを搭載したノードが多数あります。しかし、これらのプロセッサはLINPACKスコアには貢献していません。[ 55 ] [ 56 ]
IMPL. DEP. #2-V8: Oracle SPARC Architecture の実装には、72 ~ 640 個の汎用 64 ビット R レジスタが含まれる場合があります。これは、レジスタを MAXPGL + 1 セットのグローバル R レジスタと、レジスタ ウィンドウと呼ばれるそれぞれ 16 個のレジスタからなる N_REG_WINDOWS セットの循環スタックにグループ化することに対応します。存在するレジスタ ウィンドウの数 (N_REG_WINDOWS) は実装に依存し、3 ~ 32 (両端を含む) の範囲内です。
ただし、ハードウェアが浮動小数点命令を正常に完了しない状況が 4 つあります。...
命令がハードウェアによって実装されていない (たとえば、
... SPARC FPU 上の 4 倍精度命令)。