ARM で整数(符号付きまたは符号なし)の除算を行うにはどうすればいいですか? 質問する

ARM で整数(符号付きまたは符号なし)の除算を行うにはどうすればいいですか? 質問する

私は特に Cortex-A8 と Cortex-A9 に取り組んでいます。一部のアーキテクチャには整数除算が備わっていないことは知っていますが、浮動小数点数に変換し、除算し、整数に変換する以外に、整数除算を実行する最善の方法は何でしょうか? それとも、それが本当に最善の解決策でしょうか?

乾杯!= )

ベストアンサー1

定数値による除算は、次のように 64 ビット乗算と右シフトを実行することですばやく実行されます。

LDR     R3, =0xA151C331
UMULL   R3, R2, R1, R3
MOV     R0, R2,LSR#10

ここで R1 は 1625 で割られます。計算は次のように行われます: 64bitreg(R2:R3) = R1*0xA151C331、結果は上位 32 ビットを 10 右にシフトしたものになります:

R1*0xA151C331/2^(32+10) = R1*0.00061538461545751488 = R1/1624.99999980

次の式から独自の定数を計算できます。

x / N ==  (x*A)/2^(32+n)   -->       A = 2^(32+n)/N

A < 2^32となる最大のnを選択する

おすすめ記事