Related articles |
---|
[10 earlier articles] |
Re: Multiple return values danwang@dynamic.CS.Princeton.EDU (1997-04-20) |
Re: Multiple return values smcadams@sprynet.com (steve mcadams) (1997-04-20) |
Re: Multiple return values tiggr@es.ele.tue.nl (1997-04-20) |
Re: Multiple return values hrubin@stat.purdue.edu (1997-04-20) |
Re: Multiple return values fjh@mundook.cs.mu.OZ.AU (1997-04-22) |
Re: Multiple return values roy@earthlight.co.nz (1997-04-22) |
Re: Multiple return values Robert.Harley@inria.fr (1997-04-22) |
Re: Multiple return values jashley@eecs.ukans.edu (Mike Ashley) (1997-04-22) |
Re: Multiple return values burley@tweedledumb.cygnus.com (Craig Burley) (1997-04-22) |
Re: Multiple return values albaugh@agames.com (1997-04-22) |
Re: Multiple return values tiggr@es.ele.tue.nl (1997-04-30) |
Re: Multiple return values jch@hazel.pwd.hp.com (John Haxby) (1997-05-04) |
Re: Multiple return values jan@digicomp.com (Jan Galkowski) (1997-05-04) |
[13 later articles] |
From: | Robert.Harley@inria.fr (Robert Harley) |
Newsgroups: | comp.compilers,comp.lang.misc |
Date: | 22 Apr 1997 21:12:26 -0400 |
Organization: | I.N.R.I.A Rocquencourt |
References: | 97-04-091 97-04-109 97-04-138 |
Keywords: | design |
hrubin@stat.purdue.edu (Herman Rubin) writes:
>[...]
>A good example of something which is quite easy in hardware but
>difficult in software, and which is now often not available on
>computers, is
>
> (exp, mant) =UP. float;
>
>This would be the unpacking operation. [...]
Difficult? Not available? What about something like:
unsigned u;
int exp, mant;
union { unsigned u; float f; } uf;
uf.f = f; u = uf.u;
exp = (int)(u>>23 & 255U)-127;
mant = (int)(u &~ 0xFF000000U | 0x800000U);
if (u>>31) mant = -mant;
?
Sticking to the topic of the thread, wrap this up in:
typedef struct { int exp, mant; } pair;
static pair unpack(float f) {
pair p;
[...as above...]
p.exp = exp; p.mant = mant;
return p;
} /* end unpack */
GCC will optimise this just fine.
-- Rob.
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.