Dies ist (AFAIK) eine spezifische Frage innerhalb this general topic.Wie kann ich eine 64-Bit-Division mit einer 32-Bit-Divisionsanweisung durchführen?
Hier ist die Situation:
Ich habe ein Embedded-System (eine Videospielkonsole), basierend auf einem 32-Bit-RISC-Mikrocontroller (eine Variante von NEC V810). Ich möchte eine Festkomma-Mathematikbibliothek schreiben. Ich lese this article, aber der begleitende Quellcode ist in 386 Assembly geschrieben, so dass es weder direkt verwendbar noch leicht modifizierbar ist.
Der V810 hat eingebaute Ganzzahl Multiplizieren/Dividieren, aber ich möchte das 18.14 Format verwenden, das im obigen Artikel erwähnt wird. Dies erfordert das Unterteilen eines 64-Bit-Int durch einen 32-Bit-Int, und der V810 macht nur (32-Bit/32-Bit-Division mit Vorzeichen oder Vorzeichen) (was einen 32-Bit-Quotienten und einen 32-Bit-Rest erzeugt).
Also meine Frage ist: Wie simuliere ich eine 64-Bit/32-Bit-Division mit einer 32-Bit/32-Bit-Division (um die Vorverschiebung der Dividende zu ermöglichen)? Oder, um das Problem von einem anderen Weg aus zu betrachten, was ist der beste Weg, um einen 18,14-Fixpunkt durch einen anderen unter Verwendung von 32-Bit-Arithmetik/Logik-Standardoperationen zu teilen? ("am besten" bedeutet am schnellsten, am kleinsten oder an beiden).
Algebra, (V810) Assembly und Pseudo-Code sind alle in Ordnung. Ich werde den Code von C anrufen.
Vielen Dank im Voraus!
EDIT: Irgendwie habe ich verpasst this question ... Allerdings wird es noch einige Änderungen benötigen, um super-effizient zu sein (es muss schneller sein als das Floating-Point div von der v810 zur Verfügung gestellt, obwohl es bereits sein kann .. .), also fühlen Sie sich frei, meine Arbeit für mich im Austausch für Reputationspunkte zu machen;) (und Kredit in meiner Bibliotheksdokumentation natürlich).
[64/32-Bit-Division auf einem Prozessor mit 32/16-Bit-Division] (https://stackoverflow.com/q/ 4771823/995714) –