To jest (AFAIK) konkretne pytanie w ciągu this general topic.Jak mogę wykonać podział 64-bitowy za pomocą 32-bitowej instrukcji dzielenia?
Oto sytuacja:
mam wbudowany system (konsola do gier wideo) w oparciu o 32-bitowy mikrokontroler RISC (wariant NEC V810). Chcę napisać bibliotekę matematyki o ustalonym punkcie. Przeczytałem this article, ale towarzyszący mu kod źródłowy jest zapisany w 386 zestawie, więc nie można go bezpośrednio używać ani łatwo modyfikować.
Urządzenie V810 ma wbudowaną liczbę całkowitą/dzielenie, ale chcę użyć formatu 18.14 wymienionego w powyższym artykule. Wymaga to podzielenia 64-bitowego int przez 32-bitowy int, a V810 wykonuje tylko (podpisany lub niepodpisany) podział 32-bitowy/32-bitowy (który wytwarza 32-bitowy iloraz i 32-bitową resztę).
Moje pytanie brzmi: w jaki sposób mogę zasymulować 64-bitowy/32-bitowy podział na 32-bitowy/32-bitowy (aby umożliwić wcześniejsze przesunięcie dywidendy)? Lub, aby spojrzeć na problem z innej strony, jaki jest najlepszy sposób na podzielenie stałego punktu 18.14 przez inny za pomocą standardowych 32-bitowych operacji arytmetyczno-logicznych? ("najlepszy" oznacza najszybszy, najmniejszy lub oba).
Algebra, (V810) montaż i pseudokodowanie są w porządku. Będę dzwonił do kodu z C.
Z góry dziękuję!
EDYCJA: Jakoś mi brakowało this question ... Jednak nadal będzie potrzebował jakiejś modyfikacji, aby być super wydajnym (musi być szybszy niż div zmiennoprzecinkowy dostarczony przez v810, chociaż może już być .. .), więc zapraszam do wykonania mojej pracy za mnie w zamian za punkty reputacji;) (i oczywiście w mojej bibliotece).
[Podział 64/32-bitowy na procesor z dzieleniem 32/16-bitowym] (https://stackoverflow.com/q/ 4771823/995714) –