SPARC アセンブラと x86 アセンブラは、マシンコードの観点や擬似オペランドの観点で動作が大きく異なっています。したがって、GNU アセンブラ (gas) と、Oracle Developer Studio アセンブラおよび Oracle Solaris アセンブラとの間の互換性の問題は、異なるプラットフォームでは違った問題になります。
Oracle Solaris (SPARC および x86) とともに出荷されるアセンブラと、Oracle Developer Studio (SPARC および x86) とともに出荷されるアセンブラを生成するのに同じソースコードが使用されるため、Oracle Developer Studio アセンブラまたは Oracle Solaris アセンブラのいずれかを処理するときは、類似した互換性の問題が想定されます。
Oracle Developer Studio アセンブラおよび Oracle Solaris アセンブラと、GCC アセンブラとの間で切り替えるときに、x86 アセンブラに関する次の問題に注意してください。
gcc は命令コードの接尾辞をしばしば推測できますが、Oracle Developer Studio は、これを明示的に指定することを求めます。明示的に指定すれば、両方を満たすことができます。たとえば、「mov」を「movw」に、「shr」を「shrw」に変更します。
「#」は、gcc アセンブラファイル内ではコメントを導入していますが、Oracle Developer Studio アセンブラファイル内では前処理ディレクティブを導入することが以前から予期されてきました。
詳細については、x86 アセンブリ言語のリファレンスマニュアルを参照してください
正式な SPARC アセンブリ形式は、SPARC アセンブリ言語のリファレンスマニュアルに定義されています。
.section ディレクティブは SPARC アセンブラでは異なる引数を取ります。属性フラグは、GNU アセンブラ (gas) のような文字列の代わりに、明示的なトークンを使用して定義されます。たとえば、gas の場合、.section ディレクティブは次のように表示されます。
.section .init,"aw"
Oracle Developer Studio アセンブラまたは Oracle Solaris SPARC アセンブラを使用すると、ディレクティブは次のように表示されます。
.section ".init",#alloc,#write
.symver 擬似オペランドは、GNU 互換性のために SPARC アセンブラでサポートされています。
.uleb128 および .sleb128 の擬似オペランドはサポートされています。
詳細は、次のリソースを参照してください。
現在の SPARC 命令セットの説明: http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/sparc-processor-2516655.html
SPARC ABI のドキュメント: http://sparc.org/technical-documents/