11

の命令(整数除算、および)を発行するように指示gccするにはどうすればよいですか?idivudivsdivarm 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-a15idiv

$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 にそれらを発行するように指示するよりクリーンな方法があるはずですが、どうすればよいでしょうか?

4

1 に答える 1