Related articles |
---|
Subtraction + comparison in one asm instruction? vincent+news@vinc17.org (Vincent Lefevre) (2002-08-10) |
Re: Subtraction + comparison in one asm instruction? Peter-Lawrence.Montgomery@cwi.nl (Peter L. Montgomery) (2002-08-14) |
Re: Subtraction + comparison in one asm instruction? iddw@hotmail.com (Dave Hansen) (2002-08-14) |
Re: Subtraction + comparison in one asm instruction? walter@bytecraft.com (Walter Banks) (2002-08-23) |
Re: Subtraction + comparison in one asm instruction? vincent+news@vinc17.org (Vincent Lefevre) (2002-08-23) |
Re: Subtraction + comparison in one asm instruction? gdr@soliton.integrable-solutions.net (Gabriel Dos Reis) (2002-09-03) |
Re: Subtraction + comparison in one asm instruction? vincent+news@vinc17.org (Vincent Lefevre) (2002-09-08) |
Re: Subtraction + comparison in one asm instruction? gdr@integrable-solutions.net (Gabriel Dos Reis) (2002-09-12) |
Re: Subtraction + comparison in one asm instruction? vbdis@aol.com (VBDis) (2002-09-12) |
Re: Subtraction + comparison in one asm instruction? gdr@integrable-solutions.net (Gabriel Dos Reis) (2002-09-12) |
Re: Subtraction + comparison in one asm instruction? vincent+news@vinc17.org (Vincent Lefevre) (2002-09-12) |
[8 later articles] |
From: | "Vincent Lefevre" <vincent+news@vinc17.org> |
Newsgroups: | comp.compilers |
Date: | 23 Aug 2002 11:03:47 -0400 |
Organization: | a training zoo |
References: | 02-08-033 02-08-044 |
Keywords: | architecture |
Posted-Date: | 23 Aug 2002 11:03:47 EDT |
In article 02-08-044,
Peter L. Montgomery <Peter-Lawrence.Montgomery@cwi.nl> wrote:
> /*
> Be careful while implementing this optimization.
> While trying to do the modular multiplication (a * b) mod p,
> where a, b, p are close to the machine word size,
> I have experienced bad code for the following sequence,
> using one Fortran and one C compiler:
> Assume we have a 32-bit machine.
> */
> unsigned int a, b, p, q;
> signed int rem;
> (initialize a, b, p, with 0 <= a,b < p < 2^31);
> q = (estimate of a*b/p)
> rem = a*b - q*p;
> if (rem < 0) rem += p;
> return (unsigned)rem;
OK, but this is not the same code. Here you have a conversion
unsigned -> signed, and if the value is not representable in a
signed int, the result is implementation-defined, and depending
on what the implementation decides, you can have several
behaviours.
In my code, if c - 1 is not representable, this is an undefined
behaviour. Thus the compiler could choose to do anything in this
case and the optimization would be valid (if there are problems
with some codes, the compiler could still provide switches to
disable the optimization for such broken codes).
Vincent Lefèvre.
Return to the
comp.compilers page.
Search the
comp.compilers archives again.