[Oberon] DIV and MOD
Patrik Reali
reali at acm.org
Thu Aug 7 21:55:17 CEST 2003
Hi Jacques,
I'm not sure, as this happened quite a long time ago.
I can only find a log entry on 01.08.02: "Better code pattern for DIV", but
the diff of the code shows that this behavious was already in the compiler:
http://www.oberon.ethz.ch/cgi-bin/cvsweb.cgi/OP2/OPL.Mod.diff?r1=1.35&r2=1.3
6
I remember a few complaints that the compiler did not behave as requested
by the language report for negative values. Maybe this is the fix for that?
The JGE/DEC code is in the compiler at least from June 2000 (when I started
archiving the sources with CVS). Obviously it takes time for the code to
flow
in all ports.
-Patrik
> Hi
>
> I recently noticed that the compiler (at least the 2.3.8 Linux version for
> Intel) now attempts to compensate for fractions when performing signed
> integer division, adjusting the result returned by the CPU. This requires
> a minimum of three additional instructions and can create problems when
> routines are written in assembler since the result will deviate in some
cases
> from what Oberon says the answer should be. Does anyone know what the
> reasoning behind this change was?
>
> Previously, something like x DIV y (with x, y: LONGINT) would result in
>
> MOV EAX, x[EBP]
> CDQ
> IDIV y[EBP]
>
> but now, the compiler generates
>
> MOV EAX, x[EBP]
> CDQ
> IDIV y[EBP]
> CMP EDX, 0
> JGE done
> DEC EAX
> done:
>
> Regards
> Jacques Eloff
> --
> Oberon at inf.ethz.ch mailing list for ETH Oberon and related systems
> http://www.lists.inf.ethz.ch/mailman/listinfo/oberon
>
>
More information about the Oberon
mailing list