リスト46 リスト47 リスト48 リスト49


〔リスト46〕ANSI C準拠のコードの例(test73.c)
	#include <stdio.h>
	int keisan (int x);
	int keisan1 (int x);
	int main(void)
	{
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 return;
	}
	int keisan(int x)
	{
	 return x * x;
	}
	int keisan1(int x)
	{
	 return x * x;
	}


〔リスト47〕test73.cから生成されたアセンブラ(test73.s)
	 .file "test73.c"
	 .version "01.01"
	gcc2_compiled.:
	.globl __cyg_profile_func_enter
	.globl __cyg_profile_func_exit
	.section .rodata
	.LC0:
	 .string "%d"
	.text
	 .align 4
	.globl main
	 .type  main,@function
	main:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $20,%esp
	 pushl %ebx
	 movl 4(%ebp),%eax
	 addl $-8,%esp
	 pushl %eax
	 pushl $main
	 call __cyg_profile_func_enter
	 addl $16,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 movl 4(%ebp),%eax
	 addl $32,%esp
	 addl $-8,%esp
	 pushl %eax
	 pushl $main
	 call __cyg_profile_func_exit
	 movl %ebx,%eax
	 movl -24(%ebp),%ebx
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe1:
	 .size  main,.Lfe1-main
	 .align 4
	.globl keisan
	 .type  keisan,@function
	keisan:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $20,%esp
	 pushl %ebx
	 movl 8(%ebp),%ebx
	 movl 4(%ebp),%eax
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan
	 call __cyg_profile_func_enter
	 imull %ebx,%ebx
	 movl 4(%ebp),%eax
	 addl $16,%esp
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan
	 call __cyg_profile_func_exit
	 movl %ebx,%eax
	 movl -24(%ebp),%ebx
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe2:
	 .size  keisan,.Lfe2-keisan
	 .align 4
	.globl keisan1
	 .type  keisan1,@function
	keisan1:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $20,%esp
	 pushl %ebx
	 movl 8(%ebp),%ebx
	 movl 4(%ebp),%eax
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan1
	 call __cyg_profile_func_enter
	 imull %ebx,%ebx
	 movl 4(%ebp),%eax
	 addl $16,%esp
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan1
	 call __cyg_profile_func_exit
	 movl %ebx,%eax
	 movl -24(%ebp),%ebx
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe3:
	 .size  keisan1,.Lfe3-keisan1
	 .ident "GCC: (GNU) 2.95.3 20010315 (release)"


〔リスト48〕const属性を使用した例(test74.c)
	#include <stdio.h>
	int keisan (int x) __attribute__ ((no_instrument_function));
	int keisan1 (int x);
	int main(void)
	{
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 printf("%d",keisan1(10));
	 return;
	}
	int keisan(int x)
	{
	 return x * x;
	}
	int keisan1(int x)
	{
	 return x * x;
	}


〔リスト49〕test74.cから生成されたアセンブラ(test74.s)
	 .file "test74.c"
	 .version "01.01"
	gcc2_compiled.:
	.globl __cyg_profile_func_enter
	.globl __cyg_profile_func_exit
	.section .rodata
	.LC0:
	 .string "%d"
	.text
	 .align 4
	.globl main
	 .type  main,@function
	main:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $20,%esp
	 pushl %ebx
	 movl 4(%ebp),%eax
	 addl $-8,%esp
	 pushl %eax
	 pushl $main
	 call __cyg_profile_func_enter
	 addl $16,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 addl $32,%esp
	 addl $-8,%esp
	 addl $-12,%esp
	 pushl $10
	 call keisan1
	 pushl %eax
	 pushl $.LC0
	 call printf
	 movl 4(%ebp),%eax
	 addl $32,%esp
	 addl $-8,%esp
	 pushl %eax
	 pushl $main
	 call __cyg_profile_func_exit
	 movl %ebx,%eax
	 movl -24(%ebp),%ebx
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe1:
	 .size  main,.Lfe1-main
	 .align 4
	.globl keisan
	 .type  keisan,@function
	keisan:
	 pushl %ebp
	 movl %esp,%ebp
	 movl 8(%ebp),%eax
	 imull %eax,%eax
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe2:
	 .size  keisan,.Lfe2-keisan
	 .align 4
	.globl keisan1
	 .type  keisan1,@function
	keisan1:
	 pushl %ebp
	 movl %esp,%ebp
	 subl $20,%esp
	 pushl %ebx
	 movl 8(%ebp),%ebx
	 movl 4(%ebp),%eax
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan1
	 call __cyg_profile_func_enter
	 imull %ebx,%ebx
	 movl 4(%ebp),%eax
	 addl $16,%esp
	 addl $-8,%esp
	 pushl %eax
	 pushl $keisan1
	 call __cyg_profile_func_exit
	 movl %ebx,%eax
	 movl -24(%ebp),%ebx
	 movl %ebp,%esp
	 popl %ebp
	 ret
	.Lfe3:
	 .size  keisan1,.Lfe3-keisan1
	 .ident "GCC: (GNU) 2.95.3 20010315 (release)"