の命令(整数除算、および)を発行するように指示gcc
するにはどうすればよいですか?idiv
udiv
sdiv
arm application processors
これまでのところ、私が思いつく唯一の方法は-mcpu=cortex-a15
、gcc 4.7 で使用することです。
$cat idiv.c
int test_idiv(int a, int b) {
return a / b;
}
gcc 4.7 ( Android NDK r8eにバンドル)
$gcc -O2 -mcpu=cortex-a15 -c idiv.c
$objdump -S idiv.o
00000000 <test_idiv>:
0: e710f110 sdiv r0, r0, r1
4: e12fff1e bx lr
これでも、横にidiv.c:1:0: warning: switch -mcpu=cortex-a15 conflicts with -march=armv7-a switch [enabled by default]
追加して指示を出さなければ与えてくれます。-march=armv7-a
-mcpu=cortex-a15
idiv
$gcc -O2 -mcpu=cortex-a15 -march=armv7-a -c idiv.c
idiv.c:1:0: warning: switch -mcpu=cortex-a15 conflicts with -march=armv7-a switch [enabled by default]
$objdump -S idiv.o
00000000 <test_idiv>:
0: e92d4008 push {r3, lr}
4: ebfffffe bl 0 <__aeabi_idiv>
8: e8bd8008 pop {r3, pc}
gcc 4.6 (Android NDK r8e にバンドルされています) では、idiv
命令をまったく発行しませんが、組み合わせ-mcpu=cortex-a15
に文句を言うこともありません。-mcpu=cortex-a15 -march=armv7-a
Afaikidiv
は on のオプションarmv7
なので、gcc にそれらを発行するように指示するよりクリーンな方法があるはずですが、どうすればよいでしょうか?