[EMAIL PROTECTED] wrote on 28.04.2008 13:11:39:

> I am trying to look at assembler code, and representing it as C code.
> 
> For ia32, x86 platforms,
> assembler like the following
> 
> ADD eax,ebx;
> JO integer_overflow_detected;
> 
> How would I represent this in C?
> 
> Kind Regards
> 
> James

It would be something like this:

#define MSB (type)  ((1<<((sizeof(type)*8)-1))
typedef unsigned int myscalar;
...
{
  myscalar a,b,savea;
  ...
  savea = a;
  a+=b;
  if ( ((savea & MSB(myscalar)) & ((b & MSB(myscalar)) & ~(a & 
MSB(myscalar)))) ||
    ( ~(savea & MSB(myscalar)) & ~(b&MSB(myscalar)) & (a&MSB(myscalar))))
     /* overflow */
  ...
}

For signed integers you can ease this as follow

  savea = a;
  a+=b;
  if ( (savea<0 && b<0 && a>=0)) ||
    (savea>=0 && b>=0 && a<0))
     /* overflow */

Regards,
 i.A. Kai Tietz

|  (\_/)  This is Bunny. Copy and paste Bunny
| (='.'=) into your signature to help him gain
| (")_(") world domination.

Reply via email to