Xref: utzoo comp.lang.c++:2136 comp.lang.c:14403 comp.lang.forth:682 comp.lang.fortran:1549 comp.lang.misc:2218 comp.arch:7376 Path: utzoo!utgpu!watmath!clyde!att!osu-cis!tut.cis.ohio-state.edu!rutgers!joyce!sri-unix!quintus!ok From: ok@quintus.uucp (Richard A. O'Keefe) Newsgroups: comp.lang.c++,comp.lang.c,comp.lang.forth,comp.lang.fortran,comp.lang.misc,comp.arch Subject: Re: Assembly or .... Message-ID: <771@quintus.UUCP> Date: 30 Nov 88 08:24:58 GMT References: <1388@aucs.UUCP> <729@convex.UUCP> <1961@crete.cs.glasgow.ac.uk> <8993@smoke.BRL.MIL> <1032@l.cc.purdue.edu> <21390@apple.Apple.COM> Sender: news@quintus.UUCP Reply-To: ok@quintus.UUCP (Richard A. O'Keefe) Organization: Quintus Computer Systems, Inc. Lines: 32 In article <21390@apple.Apple.COM> desnoyer@Apple.COM (Peter Desnoyers) writes: >In article <1032@l.cc.purdue.edu> cik@l.cc.purdue.edu (Herman Rubin) writes: >>For example, suppose we want to >>divide a by b, obtaining an integer result i and a remainder c. I know >>of no machine with this instruction, and this is not that unusual an >>instruction to demand. > >I can't think of a machine that doesn't. Note that Rubin was careful to identify *i* as integer, but NOT the other variables! Consider, for example, Burroughs Extended Algol, where x DIV y was defined to be SIGN(x/y)*ENTIER(ABS(x/y)) and x MOD y was defined to be x - (x DIV y)*y These definitions make perfect sense for any real x, y for which x/y is defined. And Burroughs Algol did in fact extend the definitions to real and double precision x and y as well as integers. But the B6700 did not have any instructions with two results that I can recall (discounting SWAP), so it only meets part of Rubin's requirements. In fact, if we define SIGN(x) = if x = 0 then 0 else x/ABS(x), you can extend DIV and MOD to the complex numbers as well, not that it's quite as useful... As for machines which lack an *integer* divide with those properties, the VAX has an EDIV instruction, but it is awkward to set up. The 4.1BSD C compiler would generate the equivalent of x-(x/y)*y for x%y. For those with SPARCs, a look at the code generated for x%y might be illuminating.