From: lkcl Date: Tue, 19 Apr 2022 17:44:25 +0000 (+0100) Subject: (no commit message) X-Git-Tag: opf_rfc_ls005_v1~2689 X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d4c057b7d7ecac5e2d3636f37a6d5ae568ace441;p=libreriscv.git --- diff --git a/openpower/sv/biginteger.mdwn b/openpower/sv/biginteger.mdwn index 17920f89a..63645c0e7 100644 --- a/openpower/sv/biginteger.mdwn +++ b/openpower/sv/biginteger.mdwn @@ -95,9 +95,16 @@ as noted by Intel in their notes on mulx, RA*RB+RC+RD cannot overflow, so does not require setting an additional CA flag. +Normally, in a Scalar ISA, the use of a register as both a source +and destination like this would create costly Dependency Hazards, so +such an instruction would never be proposed. However: it turns out +that, just as with repeated chained application of `addeo`, macro-op +fusion may be internally applied to a sequence of these strange multiply +operations. Such a trick works equally as well in Scalar-only. + ## Divide -The simplest implementation of big-int divide is the standard textbook +The simplest implementation of big-int divide is the standard schoolbook "Long Division", set with RADIX 64 instead of Base 10. Donald Knuth's Algorithm D performs estimates which, if wrong, are compensated for afterwards. Essentially however there are three phases: