Changes

1,174 bytes added ,  08:43, 23 August 2015
Add "Floating-Point Behavior" section
Line 762: Line 762:  
|  c0-c95
 
|  c0-c95
 
|  Vector uniform registers.
 
|  Vector uniform registers.
 +
|}
 +
 +
== Floating-Point Behavior ==
 +
 +
The PICA200 is not IEEE-compliant. It has positive and negative infinities and NaN, but does not seem to have negative 0. Several instructions also have behavior that differs from the IEEE functions. Here are the results from some tests done on hardware:
 +
 +
{| class="wikitable" border="1"
 +
|-
 +
!  Computation
 +
!  Result
 +
!  Notes
 +
|-
 +
|  inf/NaN * 0
 +
|  0
 +
|  Including inside MUL, MAD, DP4, etc.
 +
|-
 +
|  +inf - +inf
 +
|  NaN
 +
|  Indicates +inf is real inf, not FLT_MAX
 +
|-
 +
|  rsq(rcp(-inf))
 +
|  +inf
 +
|  Indicates that there isn't -0.0.
 +
 +
|- style="border-top: double"
 +
|  rcp(0)
 +
|  +inf
 +
 +
|-
 +
|  rcp(+inf)
 +
|  0
 +
 +
|-
 +
|  rcp(NaN)
 +
|  NaN
 +
 +
 +
|- style="border-top: double"
 +
|  rsq(-0)
 +
|  +inf
 +
 +
|-
 +
|  rsq(-2)
 +
|  NaN
 +
 +
|-
 +
|  rsq(+inf)
 +
|  0
 +
 +
|-
 +
|  rsq(-inf)
 +
|  NaN
 +
 +
|-
 +
|  rsq(NaN)
 +
|  NaN
 +
 +
 +
|- style="border-top: double"
 +
|  max(0, +inf)
 +
|  +inf
 +
 +
|-
 +
|  max(0, -inf)
 +
|  -inf
 +
 +
|-
 +
|  max(0, NaN)
 +
|  NaN
 +
 +
|-
 +
|  max(NaN, 0)
 +
|  0
 +
 +
|-
 +
|  max(-inf, +inf)
 +
|  +inf
 +
 +
 +
|- style="border-top: double"
 +
|  min(0, +inf)
 +
|  0
 +
 +
|-
 +
|  min(0, -inf)
 +
|  -inf
 +
 +
|-
 +
|  min(0, NaN)
 +
|  NaN
 +
 +
|-
 +
|  min(NaN, 0)
 +
|  0
 +
 +
|-
 +
|  min(-inf, +inf)
 +
|  -inf
 +
 
|}
 
|}
110

edits