gcc -S とすると、 アセンブリー言語のソース・プログラム (拡張子は .s) が出力される。 これを読むと、どういう機械語命令に変換されているのかが分かる。 場合によっては自分で書き換えて最適化することもできる。
| サンプル・プログラム wa.c |
/*
* wa.c
*/
#include <stdio.h>
int main()
{
double a, b, c;
printf("two numbers:");
scanf("%lf%lf", &a, &b);
c = a + b;
printf("sum=%g\n", c);
return 0;
}
|
| サンプル・プログラム wa.s |
.file "wa.c"
gcc2_compiled.:
.section ".rodata"
.align 8
.LLC0:
.asciz "two numbers:"
.align 8
.LLC1:
.asciz "%lf%lf"
.align 8
.LLC2:
.asciz "sum=%g\n"
.section ".text"
.align 4
.global main
.type main,#function
.proc 04
main:
!#PROLOGUE# 0
save %sp, -128, %sp
!#PROLOGUE# 1
sethi %hi(.LLC0), %o0
call printf, 0
or %o0, %lo(.LLC0), %o0
sethi %hi(.LLC1), %o0
or %o0, %lo(.LLC1), %o0
add %fp, -24, %o1
call scanf, 0
add %fp, -32, %o2
ldd [%fp-24], %f4
ldd [%fp-32], %f2
faddd %f4, %f2, %f4
sethi %hi(.LLC2), %o0
or %o0, %lo(.LLC2), %o0
std %f4, [%fp-16]
ldd [%fp-16], %o4
mov %o4, %o1
call printf, 0
mov %o5, %o2
ret
restore %g0, 0, %o0
.LLfe1:
.size main,.LLfe1-main
.ident "GCC: (GNU) 2.95.2 19991024 (release)"
|
| wa.s のアセンブル&リンクにも gcc が使える |
|
oyabun% gcc -o wa wa.s
oyabun% ls wa wa* oyabun% ./wa (以下普通に実行できる -- 省略) |