[alt.msdos.programmer] Precision control on an 80x87

dmurdoch@watstat.waterloo.edu (Duncan Murdoch) (11/26/89)

I was just looking through the floating point code in a Turbo Pascal program,
and I see that at one point it sets the precision control bits to 01.  My old
8087 manual lists codes
  00 - 24 bits
  01 - (reserved)
  10 - 53 bits
  11 - 64 bits
Does anyone know what setting it to 01 is supposed to do?  Is it something new
on the 287, 387 or 486?

Duncan Murdoch

chasm@attctc.Dallas.TX.US (Charles Marslett) (11/27/89)

In article <912@maytag.waterloo.edu>, dmurdoch@watstat.waterloo.edu (Duncan Murdoch) writes:
>   00 - 24 bits
>   01 - (reserved)
>   10 - 53 bits
>   11 - 64 bits
> Does anyone know what setting it to 01 is supposed to do?  Is it something new
> on the 287, 387 or 486?

I think the 387 (and 486) actually lose the ability to calculate in any but
the 64 bit mode -- the two bits are just a little bit of RAM.  Any one with
technical docs handy to check on that?

> Duncan Murdoch

dmurdoch@watstat.waterloo.edu (Duncan Murdoch) (11/29/89)

>>In article <912@maytag.waterloo.edu>, dmurdoch@watstat.waterloo.edu (me)
>>wrote:
>>>   00 - 24 bits
>>>   01 - (reserved)
>>>   10 - 53 bits
>>>   11 - 64 bits
>>> Does anyone know what setting it to 01 is supposed to do?  Is it something
>>new
>>> on the 287, 387 or 486?

It turns out to be reserved on the 387 and 486 too (thanks to Tom Hill for the
info), and on an 8087 acts just the same as 00, i.e. round to single precision.

I was asking about it because it occurred in the floating point code that 
Turbo Pascal 5.5 uses.  It turned out to be in a part of some code that rounds
two extended operands in registers before a compare, and looks 
suspiciously as though it is really precision 10 (double) mis-coded.  It
doesn't seem to matter to TP though, because I can't think of any time it
would need to do this operation.  Watch out in Turbo C, though.

Duncan Murdoch

P.S.  I've just widened the distribution of this article; don't worry if
you didn't see the original or the discussion that followed it.

peter@guardian.UUCP (peter) (12/02/89)

In article <912@maytag.waterloo.edu> dmurdoch@watstat.waterloo.edu
(Duncan Murdoch) writes:
|
|I was just looking through the floating point code in a Turbo Pascal program,
|and I see that at one point it sets the precision control bits to 01.  My old
|8087 manual lists codes
|  00 - 24 bits
|  01 - (reserved)
|  10 - 53 bits
|  11 - 64 bits
|Does anyone know what setting it to 01 is supposed to do?  Is it something new
|on the 287, 387 or 486?
|
|Duncan Murdoch

I looked through my collection of reference manuals and they all list 01
as reserved.  Here's where I checked:

	80286 and 80287 Programmer's Reference Manual, 210498-005 (1987)
		Figure 1-5, p1-12.  (In the second section of the book!)
	
	80387 Programmer's Reference Manual, 231917-001 (1987)
		Figure 2-3, p2-6.

	i486(tm) Microprocessor, 240440-001 (1989)
		Figure 2.14, p33.  (bound, 175 page "data sheet")

There must be something tricky going on.  <disclaimer.std> applies.
-------------------------------------------------------------------------------
Peter Plamondon, Intel Corp, 5200 NE Elam Young Pkwy, Hillsboro, OR  97124-6497
Internet: peter@langlab1.hf.intel.com                           +1 503-696-5219
UUNET   : uunet!intelhf!langlab1!peter     "I speak for myself, as best I can."
UUCP    : tektronix!psueea!foobar!langlab1.hf.intel.com!peter    
-------------------------------------------------------------------------------