• ベストアンサー

SPARCアセンブリ言語

以下のC++でかかれたコードをSPARCアセンブリ言語に変換したいのですが、なかなかうまくいきません。 C++ main () { int x, y=0; for(x=2;x<=10;x=x+3) { y=y+(x/3 + 4); } x = x * 3; よろしければSPARCでの書き方を教えて下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • zwi
  • ベストアンサー率56% (730/1282)
回答No.5

変数だけ処理してると最適化で意味の無いコードとして削られちゃんですよね。なので、参考として最適化オプションが有効になるようにCソースを変更してみました。 int main() { void func(int); int x, y=0; for(x=2;x<=30;x=x+3) { y=y+(x/3 + 4); func( y ); } x = x * 3; func( x ); } で、出力されたアセンブルコード。 .file "sparc.c" .global .div .section ".text" .align 4 .global main .type main, #function .proc 04 main: save %sp, -104, %sp mov 2, %i0 mov 0, %l0 mov %i0, %o0 .LL6: call .div, 0 mov 3, %o1 add %o0, 4, %o0 add %l0, %o0, %l0 call func, 0 mov %l0, %o0 add %i0, 3, %i0 cmp %i0, 32 bne .LL6 mov %i0, %o0 call func, 0 restore %g0, 96, %o0 nop .size main, .-main .ident "GCC: (GNU) 4.3.0" 以上です。

その他の回答 (4)

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.4

>MSのVisual StudioでC++のコードをSPARC(ARC)に変換してくれるのでしょうか? >コンパイルした物ではなく、コードが欲しいです。 VisualStudioだと無理ですね。SPARCのアセンブル環境があるならgccぐらい入っているかと思ったんですが?たぶん、無いんですね。 基本的にコンパイラはアセンブラのソースコードを出力するオプションがあります。gccだと-Sですね。 試しにgccでクロスコンパイルしてみましたが、最適化するとコードが出なくなるので最適化していない冗長なコードです。 .file "sparc.c" .global .div .section ".text" .align 4 .global main .type main, #function .proc 04 main: save %sp, -120, %sp st %g0, [%fp-12] mov 2, %g1 st %g1, [%fp-16] b .LL2 nop .LL3: ld [%fp-16], %g1 mov %g1, %o0 mov 3, %o1 call .div, 0 nop mov %o0, %g1 add %g1, 4, %g2 ld [%fp-12], %g1 add %g1, %g2, %g1 st %g1, [%fp-12] ld [%fp-16], %g1 add %g1, 3, %g1 st %g1, [%fp-16] .LL2: ld [%fp-16], %g1 cmp %g1, 10 ble .LL3 nop ld [%fp-16], %g2 mov %g2, %g1 sll %g1, 1, %g1 add %g1, %g2, %g1 st %g1, [%fp-16] restore jmp %o7+8 nop .size main, .-main .ident "GCC: (GNU) 4.3.0"

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

CygwinでSPARCターゲットのgccを使うとか。 バイナリコードじゃなくアセンブリ変換までで止められます。

  • zwi
  • ベストアンサー率56% (730/1282)
回答No.2

アセンブラ化したいんですよね。Cコンパイラでアセンブルコードを出力すれば良い見本が見れます。 でもRISC系のアセンブラコードを自前で書くには熟練しないとコンパイラ出力のコードの性能には勝てないですよ。そもそもコンパイラで最適化しやすいようにアセンブラ時の人間の可読性を無視して生まれたのがRISCですからね。 遅延スロットとかSPARC特有のクセにも要注意。 http://ja.wikipedia.org/wiki/%E5%88%86%E5%B2%90%E9%81%85%E5%BB%B6%E3%82%B9%E3%83%AD%E3%83%83%E3%83%88

Intel_404
質問者

補足

MSのVisual StudioでC++のコードをSPARC(ARC)に変換してくれるのでしょうか? コンパイルした物ではなく、コードが欲しいです。 例えば main () { int x, y=0; for(x=2;x<=10;x=x+3) { y=y+(x/3 + 4); } x = x * 3; の場合、 .begin .org 2048 ld[x], %r1 top: subcc のような感じです・。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

SPARC の C++ コンパイラで処理すればいいのに.

関連するQ&A