私は特に 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を選択する