This preview shows page 1. Sign up to view the full content.
Unformatted text preview: not occur. Table 337. FPREM1 Results
ST(1)
  F * F or 0 0 +0 F or +0 * NaN 0 * ** * * ** * NaN +0 * ** * * ** * NaN +F * F or 0 0 +0 F or +0 * NaN + * ST(0) 0 +0 ST(0) * NaN NaN NaN NaN NaN NaN NaN NaN NaN * ST(0) 0 +0 ST(0) * NaN ST(0) F 0 +0 +F + NaN NOTES: F Means finite floatingpoint value. * Indicates floatingpoint invalidarithmeticoperand (#IA) exception. ** Indicates floatingpoint zerodivide (#Z) exception. When the result is 0, its sign is the same as that of the dividend. When the modulus is , the result is equal to the value in ST(0). 3360 Vol. 2 INSTRUCTION SET REFERENCE, AM The FPREM1 instruction computes the remainder specified in IEEE Standard 754. This instruction operates differently from the FPREM instruction in the way that it rounds the quotient of ST(0) divided by ST(1) to an integer (see the "Operation" section below). Like the FPREM instruction, FPREM1 computes the remainder through iterative subtraction, but can reduce the exponent of ST(0) by no more than 63 in one execution of the instruction. If the instruction succeeds in producing a remainder that is less than one half the modulus, the operation is complete and the C2 flag in the FPU status word is cleared. Otherwise, C2 is set, and the result in ST(0) is called the partial remainder. The exponent of the partial remainder will be less than the exponent of the original dividend by at least 32. Software can reexecute the instruction (using the partial remainder in ST(0) as the dividend) until C2 is cleared. (Note that while executing such a remaindercomputation loop, a higherpriority interrupting routine that needs the FPU can force a context switch inbetween the instructions in the loop.) An important use of the FPREM1 instruction is to reduce the arguments of periodic functions. When reduction is complete, the instruction stores the three leastsignificant bits of the quotient in the C3, C1, and C0 flags of the FPU status word. This information is important in argument reduction for the tangent function (using a modulus of /4), because it locates the original angle in the correct one of eight sectors of the unit circle. This instruction's operation is the same in non64bit modes and 64bit mode. Operation
D exponent(ST(0)) exponent(ST(1)); IF D < 64 THEN Q Integer(RoundTowardNearestInteger(ST(0) / ST(1))); ST(0) ST(0) (ST(1) Q); C2 0; C0, C3, C1 LeastSignificantBits(Q); (* Q2, Q1, Q0 *) ELSE C2 1; N An implementationdependent number between 32 and 63; QQ Integer(TruncateTowardZero((ST(0) / ST(1)) / 2(D  N))); ST(0) ST(0) (ST(1) QQ 2(D  N)); FI; FPU Flags Affected
C0 C1 Set to bit 2 (Q2) of the quotient. Set to 0 if stack underflow occurred; otherwise, set to least significant bit of quotient (Q0). Vol. 2 3361 INSTRUCTION SET REFERENCE, AM C2 C3 Set to 0 if reduction complete; set to 1 if incomplete. Set to bit 1 (Q1) of the quotient. FloatingPoint Exceptions
#IS #IA #D #U Stack underflow occurred. Source operand is an SNaN va...
View
Full
Document
This note was uploaded on 10/01/2013 for the course CPE 103 taught by Professor Watlins during the Winter '11 term at Mississippi State.
 Winter '11
 Watlins

Click to edit the document details