(32 ビット被除数 << 32) / 32 ビット除数を使用して 64 × 32 の符号なし除算を行う特別なケースのマシン命令 udiv があると仮定すると、以下を使用して完全な 64 × 32 除算を行うことができます。
// assume: a / b guaranteed not to overflow
a = 64bit dividend, a.h & a.l are hi & lo 32bits respectively
b = 32bit divisor
q1 = udive(a.h, b) // (a.h << 32) / b
r1 = -(q1 * b) // remainder of the above, shortcut since a.h & 0xffffffff == 0
q2 = a.l / b // a.l / b using regular unsigned division
r2 = a.l - (q2 * b) // remainder of the above
q = q1 + q2
r = r1 + r2
// r < r2, r overflowed and is >32bits, implies r > b since b is 32bits
// r >= b, quotient too small by 1, adjust
if (r < r2) or (r >= b)
q = q + 1
return q
しかし、署名されたケースは私に問題を与えています。udiv の署名付きバージョンを実行する同等の sdive 命令を想定すると、残りの部分などを処理する方法がわかりません。