Home | History | Annotate | Download | only in dist

Lines Matching refs:Or

15 # MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
16 # INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS
24 # BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY LOSS)
25 # ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.
32 # in any modified and/or redistributed versions, and that such modified
34 # No licenses are granted by implication, estoppel or otherwise under any
35 # patents or trademarks of Motorola, Inc.
598 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
599 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
623 # exception is enabled or disabled in the FPCR. For the disabled case, #
626 # then stored in either the FP regfile, data regfile, or memory. #
683 btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic?
693 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
727 # traps are enabled or disabled.
838 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
839 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
863 # exception is enabled or disabled in the FPCR. For the disabled case, #
866 # then stored in either the FP regfile, data regfile, or memory. #
921 btst &0x5,1+EXC_CMDREG(%a6) # is op monadic or dyadic?
936 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
1035 # But, whether bogus or not, if inexact is enabled AND it occurred,
1113 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
1114 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
1150 # Two main instruction types can enter here: (1) DENORM or UNNORM #
1151 # unimplemented data types. These can be either opclass 0,2 or 3 #
1153 # also of opclasses 0,2, or 3. #
1174 # _fpsp_done() or through _real_trace() if a Trace exception is pending #
1178 # _real_unfl(), or _real_ovfl() as appropriate. PACKED opclass 3 #
1223 btst &0x5,EXC_SR(%a6) # user or supervisor mode?
1229 # if the exception is an opclass zero or two unimplemented data type
1270 # precision format if the src format was single or double and the
1271 # source data type was an INF, NAN, DENORM, or UNNORM
1275 # we don't know whether the src operand or the dst operand (or both) is the
1276 # UNNORM or DENORM. call the function that tags the operand type. if the
1277 # input is an UNNORM, then convert it to a NORM, DENORM, or ZERO.
1282 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
1291 btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic?
1302 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
1339 cmpi.b %d0,&0x38 # is instr fcmp or ftst?
1366 # save the result in the proper fp reg (unless the op is fcmp or ftst);
1385 # * this is the case where we must call _real_inex() now or else
1409 bsr.l funimp_skew # skew sgl or dbl inputs
1436 # or double precision denorm, inf, or nan, the operand needs to be
1466 or.w %d0,LOCAL_EX(%a0) # insert new exponent
1498 or.w %d0,LOCAL_EX(%a0) # insert new exponent
1524 # the src can ONLY be a DENORM or an UNNORM! so, don't make any big subroutine
1567 # on extended precision opclass three instructions using pre-decrement or
1742 mov.l %a0,%usp # to or not...
1767 # frame or it will get overwritten when the exc stack frame is shifted "down".
1836 btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic?
1847 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
1884 cmpi.b %d0,&0x38 # is instr fcmp or ftst?
1892 btst &0x5,EXC_SR(%a6) # user or supervisor?
1944 # save the result in the proper fp reg (unless the op is fcmp or ftst);
1963 # * this is the case where we must call _real_inex() now or else
1973 cmpi.b %d0,&0x6 # is exception INEX? (6 or 7)
1989 btst &0x5,EXC_SR(%a6) # user or supervisor?
2092 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
2123 btst &0x5,EXC_SR(%a6) # user or supervisor?
2307 # have to make sure that for single or double source operands that the
2384 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
2385 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
2412 # (1) FP Instructions using extended precision or packed immediate #
2415 # (3) The "fmovm.l" instruction w/ 2 or 3 control registers. #
2425 # FPU before exiting. In either the enabled or disabled cases, we #
2514 btst &0xa,%d0 # is src fmt x or p?
2538 # The packed operand is an INF or a NAN if the exponent field is all ones.
2540 cmpi.w %d0,&0x7fff # INF or NAN?
2541 beq.b iea_op_setsrc # operand is an INF or NAN
2571 btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic?
2589 # the operation is fsincos, ftst, or fcmp. only fcmp is dyadic
2619 # OPERR : all reg-reg or mem-reg operations that can normally operr
2632 # now, we save the result, unless, of course, the operation was ftst or fcmp.
2680 # or underflow that was disabled, then we have to force an overflow or
2746 btst &14,%d0 # ctrl or data reg
2751 btst &0x5,EXC_SR(%a6) # user or supervisor mode
2983 # the instruction is a fmovm.l with 2 or 3 registers.
3043 btst &0x5,(%sp) # user or supervisor mode?
3105 # operr result out to memory or data register file as it should. #
3141 # this would be the case for opclass two operations with a source infinity or
3142 # denorm operand in the sgl or dbl format. NANs also become skewed, but can't
3166 # operand and save the appropriate minimum or maximum integer value
3180 # the operand is either an infinity or a QNAN.
3276 # _calc_ea_fout() - fix An if <ea> is -() or ()+; also get <ea> #
3295 # SNAN result out to memory or data register file as it should. #
3303 # if the effective addressing mode was -() or ()+, then the address #
3337 # this would be the case for opclass two operations with a source infinity or
3338 # denorm operand in the sgl or dbl format. NANs also become skewed and must be
3364 # operand and save the appropriate minimum or maximum integer value
3443 or.l %d1,%d0 # create sgl SNAN
3458 or.l %d1,%d0 # create sgl SNAN
3472 or.l %d1,FP_SCR0_EX(%a6) # create dbl hi
3479 or.l %d1,FP_SCR0_HI(%a6) # create dbl lo
3490 # for extended precision, if the addressing mode is pre-decrement or
3572 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
3573 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
3597 # inexact result out to memory or data register file as it should. #
3665 btst &0x5,1+EXC_CMDREG(%a6) # is operation monadic or dyadic?
3678 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
3801 # in the sgl or dbl format.
3843 # appropriate "callout" (for "disabled" and "Line F") or to the #
3943 # load_fop() - load src/dst ops from memory and/or FP regfile #
3944 # store_fpreg() - store opclass 0 or 2 result to FP regfile #
3981 # exceptional or non-exceptional cases, we must check to see if the #
3997 # In any of the above scenarios, if a _mem_read() or _mem_write() #
4071 btst &22,%d0 # type 0 or 1 ?
4097 or.b STAG(%a6),%d1 # insert src optag bits
4143 btst &0x5,EXC_SR(%a6) # supervisor or user mode?
4214 # or underflow that was disabled, then we have to force an overflow or
4215 # underflow frame. the eventual overflow or underflow handler will see that
4218 # a disabled overflow or underflow has also happened.
4347 # I am assuming here that an "fs<cc>.b -(An)" or "fs<cc>.b (An)+" instruction
4395 # The ftrap<cc>, fs<cc>, or fdb<cc> is to take an enabled bsun. we must convert
5001 btst &0x5,(%sp) # user or supervisor mode?
5021 # fp0 = sin(X) or cos(X) #
5038 # 2. If |X| >= 15Pi or |X| < 2**(-40), go to 7. #
5041 # k = N mod 4, so in particular, k = 0,1,2,or 3. #
5066 # 1. If |X| >= 15Pi or |X| < 2**(-40), go to 6. #
5069 # k = N mod 4, so in particular, k = 0,1,2,or 3. #
5074 # j1 exclusive or with the l.s.b. of k. #
5141 #--SAVE FPCR, FP1. CHECK IF |X| IS TOO SMALL OR LARGE
5182 #--GET N+ADJN AND SEE IF SIN(R) OR COS(R) IS NEEDED
5184 add.l ADJN(%a6),%d1 # SEE IF D0 IS ODD OR EVEN
5274 or.l &0x3F800000,%d1 # D0 IS SGN IN SINGLE
5306 # SINe: Big OR Small?
5308 #--IF |X| < 2**(-40), RETURN X OR 1.
5318 # here, the operation may underflow iff the precision is sgl or dbl.
5496 or.l &0x3F800000,%d1
5605 or.b &0x80,FP_SCR0_EX(%a6) # positive arg
5606 or.b &0x80,FP_SCR1_EX(%a6)
5658 or.l &0x5F000000,%d2 # d2 = SIGN(INARG)*2**63 IN SGL
5740 # 1. If |X| >= 15Pi or |X| < 2**(-40), go to 6. #
5743 # k = N mod 2, so in particular, k = 0 or 1. #
5992 #--IF |X| < 2**(-40), RETURN X OR 1.
6036 or.b &0x80,FP_SCR0_EX(%a6) # positive arg
6037 or.b &0x80,FP_SCR1_EX(%a6)
6089 or.l &0x5F000000,%d2 # d2 = SIGN(INARG)*2**63 IN SGL
6169 # Step 1. If |X| >= 16 or |X| < 1/16, go to Step 5. #
6172 # Note that k = -4, -3,..., or 3. #
6397 or.l &0x04000000,XFRAC(%a6) # SET 6-TH BIT TO 1
6425 or.l %d1,ATANF(%a6) # ATANF IS NOW SIGN(F)*ATAN(|F|)
6460 #--FP0 IS X AND |X| <= 1/16 OR |X| >= 16.
6684 or.l &0x3F800000,%d1 # +-1 IN SGL FORMAT
6774 #--|X| = 1, ACOS(X) = 0 OR PI
6775 tst.b (%a0) # is X positive or negative?
6807 # fp0 = exp(X) or exp(X)-1 #
6853 # or 63. #
6937 # Hence, exp(X) may overflow or underflow or neither. #
6941 # or underflow. The inexact exception is not generated in #
6978 # Notes: Exp(X) will surely overflow or underflow, depending on #
6982 # inexact together with either overflow or underflow. #
7010 # or 63. #
7361 tst.b (%a0) # is X positive or negative?
7458 or.w &0x8000,%d1 # signed/expo. of -2^(-M)
7626 # fp0 = exponent(X) or mantissa(X) #
7871 or.l &0x3F000000,%d1
7889 or.l &0x7FFB0000,%d1
7931 # 1. If |X| >= (5/2) log2 or |X| <= 2**(-40), go to 3. #
7938 # 3. (|X| <= 2**(-40) or |X| >= (5/2) log2). If |X| < 1, #
8043 or.l &0x3F800000,%d1 # SGN
8061 or.l &0x3F800000,%d1
8086 # fp0 = log(X) or log(1+X) #
8375 or.l &0x01000000,FFRAC(%a6) # GET F: ATTACH A 1 AT THE EIGHTH BIT
8542 or.l %d7,%d4 # (D3,D4,D5) normalized
8575 ble.w LP1NEG0 # LOG OF ZERO OR -VE
8580 #--IF 1+Z > 3/2 OR 1+Z < 1/2, THEN X, WHICH IS ROUNDING 1+Z,
8611 or.l &0x01000000,FFRAC(%a6) # F OBTAINED
8733 or.l &0x3F000000,%d1 # SIGN(X)*HALF
8771 # fp0 = log_10(X) or log_2(X) #
8935 # fp0 = 2**X or 10**X #
9191 or.l &0x00800001,%d1
9293 #--EXP(X) = 2^M*2^(J/64) + 2^M*2^(J/64)*(EXP(R)-1) - (1 OR 0)
9315 or.l &0x00800001,%d1
9472 # Precision is single or double
9477 # exponents out of range for single or double DO NOT cause underflow
9478 # or overflow.
9575 # >= 2^14, an overflow or underflow is returned. #
9660 # the src will force the dst to a DENORM value or worse. so, let's
9717 # The input operands X and Y can be either normalized or #
9721 # fp0 = FREM(X,Y) or FMOD(X,Y) #
9727 # signQ := signX EOR signY. Record whether MOD or REM #
9838 or.l %d7,%d4 # (D3,D4,D5) normalized
9883 or.l %d7,%d1 # (D0,D1,D2) normalized
9983 or.l %d7,%d1 # (D0,D1,D2) normalized
10054 or.l %d6,%d3 # sign and bits of Q
10058 # or.l %d3,%d6
10171 # - we only return the EXOP here if either underflow or #
10199 # result precision is single or double
10202 tst.b LOCAL_EX(%a0) # is denorm pos or neg?
10210 andi.b &0x0a,%d0 # is UNFL or INEX enabled?
10229 or.w %d0,FP_SCR0_EX(%a6) # insert new exponent
10249 tst.b (%a0) # is result pos or neg?
10352 # routine may have caused an underflow or overflow. #
10390 # an underflow or overflow exception occurred.
10409 or.l %d0,USER_FPSR(%a6)
10431 or.b %d1,%d0 # concat {sgn,mode,prec}
10557 # szr_inf(): Return +ZERO for a negative src operand or #
10567 # sopr_inf(): Return +INF for a positive src operand or #
10578 # setoxm1i(): Return minus one for a negative src operand or #
10953 or.l %d0,USER_FPSR(%a6) # store status
10978 or.l %d0,USER_FPSR(%a6) # store status
11593 or.b STAG(%a6),%d1 # combine src tags
11642 or.l %d1,USER_FPSR(%a6) # save INEX2,N
11652 or.w %d2,%d1 # concat old sign,new exp
11664 # - if overflow or inexact is enabled, we need a multiply result rounded to
11666 # result. if the original operation was single or double, we have to do another
11682 or.l %d1,USER_FPSR(%a6) # save INEX2,N
11686 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
11689 andi.b &0x13,%d1 # is OVFL or INEX enabled?
11698 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
11705 # with an extra -0x6000. if the precision is single or double, we need to
11711 bne.b fmul_ovfl_ena_sd # it's sgl or dbl
11724 or.w %d2,%d1 # concat old sign,new exp
11760 or.l %d1,USER_FPSR(%a6) # save INEX2,N
11775 # - if overflow or inexact is enabled, we need a multiply result rounded to
11777 # result. if the original operation was single or double, we have to do another
11798 or.l %d1,USER_FPSR(%a6) # save INEX2,N
11801 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
11810 or.b %d0,FPSR_CC(%a6) # unf_res2 may have set 'Z'
11822 bne.b fmul_unfl_ena_sd # no, sgl or dbl
11844 or.w %d2,%d1 # concat old sign,new exp
11871 or.l %d1,USER_FPSR(%a6) # save INEX2,N
11880 # we don't know if the result was an underflow that rounded up to a 2 or
11979 mov.b SRC_EX(%a0),%d0 # exclusive or the signs
12003 mov.b SRC_EX(%a0),%d0 # exclusive or the signs
12020 mov.b SRC_EX(%a0),%d0 # exclusive or the signs
12054 # or ovf_res() to return the default result. Also return EXOP if #
12083 bne.w fin_not_ext # no, so go handle dbl or sgl
12087 # or overflow because of rounding to the correct precision. so...
12103 bne.w fin_not_ext # no, so go handle dbl or sgl
12131 or.w %d1,%d0 # concat new exo,old sign
12137 # operand is to be rounded to single or double precision
12159 # operand will NOT overflow or underflow when moved into the fp reg file
12170 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12180 or.w %d1,%d2 # concat old sign,new exponent
12212 # if underflow or inexact is enabled, then go calculate the EXOP first.
12215 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
12222 or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z'
12227 # operand will underflow AND underflow or inexact is enabled.
12242 or.w %d1,%d2 # concat old sign,new exp
12260 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12263 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
12266 andi.b &0x13,%d1 # is OVFL or INEX enabled?
12278 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
12296 or.w %d2,%d1
12314 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12411 or.b STAG(%a6),%d1 # combine src tags
12456 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12466 or.w %d2,%d1 # concat old sign,new exp
12494 or.l %d0,USER_FPSR(%a6) # save INEX,N
12506 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
12509 andi.b &0x13,%d1 # is OVFL or INEX enabled?
12517 or.b %d0,FPSR_CC(%a6) # set INF if applicable
12524 bne.b fdiv_ovfl_ena_sd # no, do sgl or dbl
12537 or.w %d2,%d1 # concat old sign,new exp
12568 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12571 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
12580 or.b %d0,FPSR_CC(%a6) # 'Z' may have been set
12592 bne.b fdiv_unfl_ena_sd # no, sgl or dbl
12612 or.w %d2,%d1 # concat old sign,new exp
12639 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12649 # or a normalized number that rounded down to a 1. so, redo the entire
12745 mov.b DST_EX(%a1),%d1 # or of input signs.
12777 # The destination was an INF w/ an In Range or ZERO source, the result is
12856 bne.w fneg_not_ext # no; go handle sgl or dbl
12860 # or overflow because of rounding to the correct precision. so...
12880 bne.b fneg_not_ext # no; go handle sgl or dbl
12911 or.w %d1,%d0 # concat old sign, new exponent
12917 # operand is either single or double
12939 # operand will NOT overflow or underflow when moved in to the fp reg file
12950 or.l %d1,USER_FPSR(%a6) # save INEX2,N
12960 or.w %d1,%d2 # concat old sign,new exp
12992 # if underflow or inexact is enabled, go calculate EXOP first.
12995 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
13002 or.b %d0,FPSR_CC(%a6) # unf_res may have set 'Z'
13022 or.w %d2,%d1 # concat new sign,new exp
13040 or.l %d1,USER_FPSR(%a6) # save INEX2,N
13043 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
13046 andi.b &0x13,%d1 # is OVFL or INEX enabled?
13058 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
13076 or.w %d2,%d1 # concat sign,exp
13094 or.l %d1,USER_FPSR(%a6) # save INEX2,N
13231 # norms. Denorms are so low that the answer will either be a zero or a #
13256 or.l %d0,USER_FPSR(%a6) # set exception bits
13277 # for DENORMs, the result will be either (+/-)ZERO or (+/-)1.
13279 # so, we could either set these manually or force the DENORM
13337 # norms. Denorms are so low that the answer will either be a zero or a #
13358 or.l %d0,USER_FPSR(%a6) # set exception bits
13381 # so, we could either set these manually or force the DENORM
13449 # exponent would take an exception. If so, use unf_res() or ovf_res() #
13479 or dbl
13483 # or overflow because of rounding to the correct precision. so...
13529 or.w %d1,%d0 # concat old sign, new exponent
13535 # operand is either single or double
13557 # operand will NOT overflow or underflow when moved in to the fp reg file
13568 or.l %d1,USER_FPSR(%a6) # save INEX2,N
13578 or.w %d1,%d2 # concat old sign,new exp
13608 # if underflow or inexact is enabled, go calculate EXOP first.
13610 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
13617 or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode
13637 or.w %d2,%d1 # concat new sign,new exp
13655 or.l %d1,USER_FPSR(%a6) # save INEX2,N
13658 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
13661 andi.b &0x13,%d1 # is OVFL or INEX enabled?
13673 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
13691 or.w %d2,%d1 # concat sign,exp
13709 or.l %d1,USER_FPSR(%a6) # save INEX2,N
13770 or.b STAG(%a6),%d1
13851 # 'N' bit for a negative QNAN or SNAN input so we must squelch it here.
13865 # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one
13869 # (1) signs are (+) and the DENORM is the dst or
13974 or.b STAG(%a6),%d1
14013 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14023 or.w %d2,%d1 # concat old sign,new exp
14040 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14045 or.l &ovfl_inx_mask, USER_FPSR(%a6) # set ovfl/aovfl/ainex
14048 andi.b &0x13,%d1 # is OVFL or INEX enabled?
14057 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
14072 or.w %d2,%d1 # concat old sign,new exp
14089 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14111 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14114 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
14123 or.b %d0,FPSR_CC(%a6) # 'Z' bit may have been set
14149 or.w %d2,%d1 # concat old sign,new exp
14166 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14175 # we don't know if the result was an underflow that rounded up to a 2 or
14315 or.b STAG(%a6),%d1 # combine src tags
14360 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14370 or.w %d2,%d1 # concat old sign,new exp
14387 or.l %d1,USER_FPSR(%a6) # save INEX,N
14398 or.w &ovfl_inx_mask,2+USER_FPSR(%a6) # set ovfl/aovfl/ainex
14401 andi.b &0x13,%d1 # is OVFL or INEX enabled?
14410 or.b %d0,FPSR_CC(%a6) # set INF if applicable
14425 or.w %d2,%d1 # concat old sign,new exp
14444 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14447 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
14456 or.b %d0,FPSR_CC(%a6) # 'Z' bit may have been set
14482 or.w %d2,%d1 # concat old sign, new exp
14502 or.l %d1,USER_FPSR(%a6) # save INEX2,N
14512 # or a normalized number that rounded down to a 1. so, redo the entire
14662 or.b STAG(%a6),%d1 # combine src tags
14683 or.l %d1,USER_FPSR(%a6) # save exc and ccode bits
14708 or.w %d2,%d1 # concat sign,new exp
14731 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
14734 andi.b &0x13,%d1 # is OVFL or INEX enabled?
14743 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
14751 bne.b fadd_ovfl_ena_sd # no; prec = sgl or dbl
14758 or.w %d2,%d1 # concat sign,new exp
14794 or.l %d1,USER_FPSR(%a6) # save INEX,N
14797 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
14806 or.b %d0,FPSR_CC(%a6) # 'Z' bit may have been set
14816 bne.b fadd_unfl_ena_sd # no; sgl or dbl
14835 or.w %d2,%d1 # concat sign,new exp
14873 # rounded "up" or a normalized number rounded "down".
14875 # seeing if the new result is smaller or equal to the current result.
14975 # the signs are the same. so determine whether they are positive or negative
14977 tst.b %d0 # are ZEROes positive or negative?
14985 # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP.
15003 # one operand is a ZERO and the other is a DENORM or NORM. scale
15004 # the DENORM or NORM and jump to the regular fadd routine.
15031 mov.b SRC_EX(%a0),%d0 # exclusive or the signs
15115 or.b STAG(%a6),%d1 # combine src tags
15136 or.l %d1,USER_FPSR(%a6) # save exc and ccode bits
15161 or.w %d2,%d1 # insert new exponent
15184 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
15187 andi.b &0x13,%d1 # is OVFL or INEX enabled?
15196 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
15211 or.w %d2,%d1 # concat sign,exp
15247 or.l %d1,USER_FPSR(%a6)
15250 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
15259 or.b %d0,FPSR_CC(%a6) # 'Z' may have been set
15288 or.w %d2,%d1 # concat sgn,exp
15326 # rounded "up" or a normalized number rounded "down".
15328 # seeing if the new result is smaller or equal to the current result.
15437 # - therefore, we return +ZERO if the rounding mode is RN,RZ, or RP
15455 # one operand is a ZERO and the other is a DENORM or a NORM.
15456 # scale the DENORM or NORM and jump to the regular fsub routine.
15483 mov.b SRC_EX(%a0),%d0 # exclusive or the signs
15568 bne.b fsqrt_not_ext # no; go handle sgl or dbl
15576 or.l %d1,USER_FPSR(%a6) # set N,INEX
15585 bne.b fsqrt_not_ext # no; go handle sgl or dbl
15596 # operand is either single or double
15620 # operand will NOT overflow or underflow when moved in to the fp reg file
15631 or.l %d1,USER_FPSR(%a6) # save INEX2,N
15641 or.w %d1,%d2 # concat old sign,new exp
15666 # the exponent is 3fff or 3ffe. if it's 3ffe, then it's a safe number
15686 or.l %d1,USER_FPSR(%a6) # save INEX2,N
15688 # if underflow or inexact is enabled, go calculate EXOP first.
15690 andi.b &0x0b,%d1 # is UNFL or INEX enabled?
15699 or.b %d0,FPSR_CC(%a6) # set possible 'Z' ccode
15719 or.w %d2,%d1 # concat new sign,new exp
15737 or.l %d1,USER_FPSR(%a6) # save INEX2,N
15740 or.l &ovfl_inx_mask,USER_FPSR(%a6) # set ovfl/aovfl/ainex
15743 andi.b &0x13,%d1 # is OVFL or INEX enabled?
15755 or.b %d0,FPSR_CC(%a6) # set INF,N if applicable
15773 or.w %d2,%d1 # concat sign,exp
15794 or.l %d1,USER_FPSR(%a6) # save INEX2,N
15826 tst.b SRC_EX(%a0) # is ZERO positive or negative?
15838 tst.b SRC_EX(%a0) # is INF positive or negative?
15867 # DST exponent was scaled by. If the SRC exponent is greater or equal, #
15918 or.w %d1,%d0 # concat {sgn,new exp}
15954 or.w %d1,%d0 # concat {sgn,new exp}
16000 or.w &0x3fff,%d0 # insert new operand's exponent(=0)
16056 btst &0x0,%d1 # is exp even or odd?
16078 btst &0x0,%d0 # is exp even or odd?
16127 or.w &0x3fff,%d0 # insert new operand's exponent(=0)
16196 or.l &nan_mask+aiop_mask+snan_mask, USER_FPSR(%a6)
16202 or.l &nan_mask, USER_FPSR(%a6)
16206 or.l &nan_mask+aiop_mask+snan_mask, USER_FPSR(%a6)
16214 or.l &aiop_mask+snan_mask, USER_FPSR(%a6)
16216 or.l &nan_mask, USER_FPSR(%a6)
16220 or.l &neg_mask, USER_FPSR(%a6)
16249 or.l &nan_mask+operr_mask+aiop_mask, USER_FPSR(%a6)
16277 # or false. #
16412 # greater than or equal:
16417 fbge.w fdbcc_ge_yes # greater than or equal?
16435 # not (greater than or equal):
16440 fbnge.w fdbcc_nge_yes # not (greater than or equal)?
16488 # less than or equal:
16493 fble.w fdbcc_le_yes # less than or equal?
16511 # not (less than or equal):
16516 fbnle.w fdbcc_nle_yes # not (less than or equal)?
16529 # greater or less than:
16534 fbgl.w fdbcc_gl_yes # greater or less than?
16546 # not (greater or less than):
16551 fbngl.w fdbcc_ngl_yes # not (greater or less than)?
16564 # greater, less, or equal:
16569 fbgle.w fdbcc_gle_yes # greater, less, or equal?
16579 # not (greater, less, or equal):
16584 fbngle.w fdbcc_ngle_yes # not (greater, less, or equal)?
16714 # unordered or less or equal:
16719 fbule.w fdbcc_ule_yes # unordered or less or equal?
16726 # ordered greater than or equal:
16731 fboge.w fdbcc_oge_yes # ordered greater than or equal?
16738 # unordered or less than:
16743 fbult.w fdbcc_ult_yes # unordered or less than?
16762 # unordered or greater or equal:
16767 fbuge.w fdbcc_uge_yes # unordered or greater than?
16774 # ordered less than or equal:
16779 fbole.w fdbcc_ole_yes # ordered greater or less than?
16786 # unordered or greater than:
16791 fbugt.w fdbcc_ugt_yes # unordered or greater than?
16798 # ordered greater or less than:
16803 fbogl.w fdbcc_ogl_yes # ordered greater or less than?
16810 # unordered or equal:
16815 fbueq.w fdbcc_ueq_yes # unordered or equal?
16906 # or false. #
17033 # greater than or equal:
17038 fbge.w ftrapcc_ge_yes # greater than or equal?
17056 # not (greater than or equal):
17061 fbnge.w ftrapcc_nge_yes # not (greater than or equal)?
17106 # less than or equal:
17111 fble.w ftrapcc_le_yes # less than or equal?
17129 # not (less than or equal):
17134 fbnle.w ftrapcc_nle_yes # not (less than or equal)?
17146 # greater or less than:
17151 fbgl.w ftrapcc_trap # greater or less than?
17162 # not (greater or less than):
17167 fbngl.w ftrapcc_ngl_yes # not (greater or less than)?
17179 # greater, less, or equal:
17184 fbgle.w ftrapcc_trap # greater, less, or equal?
17192 # not (greater, less, or equal):
17197 fbngle.w ftrapcc_ngle_yes # not (greater, less, or equal)?
17326 # unordered or less or equal:
17331 fbule.w ftrapcc_trap # unordered or less or equal?
17336 # ordered greater than or equal:
17341 fboge.w ftrapcc_trap # ordered greater than or equal?
17346 # unordered or less than:
17351 fbult.w ftrapcc_trap # unordered or less than?
17366 # unordered or greater or equal:
17371 fbuge.w ftrapcc_trap # unordered or greater than?
17376 # ordered less than or equal:
17381 fbole.w ftrapcc_trap # ordered greater or less than?
17386 # unordered or greater than:
17391 fbugt.w ftrapcc_trap # unordered or greater than?
17396 # ordered greater or less than:
17401 fbogl.w ftrapcc_trap # ordered greater or less than?
17406 # unordered or equal:
17411 fbueq.w ftrapcc_trap # unordered or equal?
17478 # or false. #
17483 # the result is stored to the data register file or memory #
17612 # greater than or equal:
17617 fbge.w fscc_ge_yes # greater than or equal?
17632 # not (greater than or equal):
17637 fbnge.w fscc_nge_yes # not (greater than or equal)?
17683 # less than or equal:
17688 fble.w fscc_le_yes # less than or equal?
17703 # not (less than or equal):
17708 fbnle.w fscc_nle_yes # not (less than or equal)?
17720 # greater or less than:
17725 fbgl.w fscc_gl_yes # greater or less than?
17737 # not (greater or less than):
17742 fbngl.w fscc_ngl_yes # not (greater or less than)?
17754 # greater, less, or equal:
17759 fbgle.w fscc_gle_yes # greater, less, or equal?
17769 # not (greater, less, or equal):
17774 fbngle.w fscc_ngle_yes # not (greater, less, or equal)?
17900 # unordered or less or equal:
17905 fbule.w fscc_ule_yes # unordered or less or equal?
17914 # ordered greater than or equal:
17919 fboge.w fscc_oge_yes # ordered greater than or equal?
17928 # unordered or less than:
17933 fbult.w fscc_ult_yes # unordered or less than?
17956 # unordered or greater or equal:
17961 fbuge.w fscc_uge_yes # unordered or greater than?
17970 # ordered less than or equal:
17975 fbole.w fscc_ole_yes # ordered greater or less than?
17984 # unordered or greater than:
17989 fbugt.w fscc_ugt_yes # unordered or greater than?
17998 # ordered greater or less than:
18003 fbogl.w fscc_ogl_yes # ordered greater or less than?
18012 # unordered or equal:
18017 fbueq.w fscc_ueq_yes # unordered or equal?
18068 # file or in memory.
18089 # if the addressing mode is post-increment or pre-decrement,
18213 # (1): postincrement or control addressing mode #
18249 btst &0x5,EXC_EXTWORD(%a6) # is it a move in or out?
18256 btst &0x4,EXC_EXTWORD(%a6) # control or predecrement?
18266 btst &0x5,EXC_SR(%a6) # user or supervisor mode?
18484 # or control bit string.
18928 btst &0xb,%d2 # is it word or long?
19024 btst &0xb,%d2 # is index word or long?
19068 btst &0xb,%d5 # is index word or long?
19149 btst &0x2,%d5 # pre or post indexing?
19387 or.w %d1,%d0 # concat mode,reg
19421 cmpi.b %d0,&0xc # is opsize ext or packed?
19573 # unnorm_fix() - convert normalized number to denorm or zero #
19598 # convert it to a DENORM or a ZERO. #
19602 # If the source operand is byte,word,long, or single, it may be #
19708 clr.b STAG(%a6) # either NORM or ZERO
19730 # LONG: can be either NORM or ZERO...
19743 # WORD: can be either NORM or ZERO...
19756 # BYTE: can be either NORM or ZERO...
19769 # SGL: can be either NORM, DENORM, ZERO, INF, QNAN or SNAN but not UNNORM
19798 # if the ea is -() or ()+, need to know # of bytes. #
19799 # (2) read it in from either user or supervisor space #
19807 clr.b STAG(%a6) # either NORM or ZERO
19993 or.w %d1, FP_SRC_EX(%a6) # {sgn,exp}
20079 or.w %d1, FP_SRC_EX(%a6) # {sgn,exp}
20159 # fout(): move from fp register to memory or data register #
20181 # fp0 : intermediate underflow or overflow result if #
20182 # OVFL/UNFL occurred for a sgl or dbl operand #
20188 # it's b,w,l,s,d,x, or p in size. b,w,l can be stored to either a data #
20189 # register or memory. The algorithm uses a standard "fmove" to create #
20192 # For sgl or dbl precision, overflow or underflow can occur. If #
20199 # word or a data register. The <ea> must be fixed as w/ extended #
20230 # is either a DENORM or a NORM.
20244 or.w %d1,2+USER_FPSR(%a6) # save new exc,accrued bits
20276 # is either a DENORM or a NORM.
20290 or.w %d1,2+USER_FPSR(%a6) # save new exc,accrued bits
20322 # is either a DENORM or a NORM.
20336 or.w %d1,2+USER_FPSR(%a6) # save new exc,accrued bits
20369 # is either a DENORM or a NORM.
20390 # in the pre-decrement case from supervisor mode or else we'll corrupt
20409 andi.b &0x0a,%d0 # is UNFL or INEX enabled?
20431 or.w %d0,FP_SCR0_EX(%a6) # insert new exponent
20449 # would cause either an underflow or overflow. these cases are handled
20477 or.w %d1,2+USER_FPSR(%a6) # set possible inex2/ainex
20546 andi.b &0x0a,%d1 # is UNFL or INEX enabled?
20596 andi.b &0x0a,%d1 # is UNFL or INEX enabled?
20687 # would cause either an underflow or overflow. these cases are handled
20715 or.w %d0,2+USER_FPSR(%a6) # set possible inex2/ainex
20767 andi.b &0x0a,%d1 # is UNFL or INEX enabled?
20807 andi.b &0x0a,%d1 # is UNFL or INEX enabled?
20893 or.l %d1,%d0 # put these bits in ms word of double
20902 or.l %d0,%d1 # put them in double result
20959 or.l %d1,%d0 # put these bits in ms word of single
20971 btst &0x4,EXC_CMDREG(%a6) # static or dynamic?
21629 # value in d0. The FP number can be DENORM or SNAN so we have to be #
21833 or.b %d2, 3+FTEMP_LO2(%a6)
21883 # subtle step here; or in the g,r,s at the bottom of FTEMP_LO to minimize
21887 or.b %d2, 3+FTEMP_LO2(%a6)
22065 or.w &inx2a_mask, 2+USER_FPSR(%a6) # set inex2/ainex
22232 bne.b ext_grs_not_ext # no; go handle sgl or dbl
22265 and.l &0x0000003f, %d2 # s bit is the or of all other
22290 and.l &0x000001ff, %d2 # s bit is the or-ing of all
22340 or.l %d3, %d0 # create hi(man)
22369 # unnorm_fix(): - changes an UNNORM to one of NORM, DENORM, or ZERO #
22382 # d0 = optype tag - is corrected to one of NORM, DENORM, or ZERO #
22383 # a0 = input operand has been converted to a norm, denorm, or #
22419 or.w %d0, %d1 # {sgn,new exp}
22693 # d0.b = result FPSR_cc which caller may or may not want to save #
22867 or.b %d0,%d1 # concat the two
22875 or.b %d0, %d1 # insert rnd mode
22877 or.b %d0, %d1 # insert rnd prec
22956 # frame w/ maybe a correction factor if the <ea> is -(an) or (an)+. #
22959 # If the packed operand is a ZERO,NAN, or INF, convert it to #
22979 # The packed operand is an INF or a NAN if the exponent field is all ones.
22981 cmpi.w %d0,&0x7fff # INF or NAN?
22983 rts # operand is an INF or NAN
23055 # Clean up and return. Check if the final mul or div was inexact. #
23128 or.l &0x40000000,%d4 # set SE in d4,
23129 or.l &0x40000000,(%a0) # and in working bcd
23224 # of 27 or less are exact, there is no need to use this routine to
23243 # and do append (+) or strip (-) zeros accordingly.
23279 or.l &0x40000000,%d4 # and set SE in d4
23280 or.l &0x40000000,(%a0) # and in memory
23418 or.l &0x40000000,(%a0) # and set SE bit
23475 # the input may be either normalized, unnormalized, or #
23487 # input. If input is unnormalized or denormalized, #
23508 # if it is a positive number, or the number of digits #
23534 # A10. Or in INEX. #
23536 # compensated for by 'or-ing' in the INEX2 flag to #
23549 # or less than LEN -1 digits, adjust ILOG and repeat from #
23735 # a positive number, or the number of digits after the
23778 or.l &opaop_mask,USER_FPSR(%a6) # set OPERR & AIOP in USER_FPSR
23816 # d2: x/0 or 24 for A9
23820 # d6: ILOG/ILOG or k if ((k<=0)&(ILOG<k))
23919 # d2: 0 or 24/unchanged
23969 or.w %d3,(%sp) # insert new exponent
24000 # A10. Or in INEX.
24002 # for by 'or-ing' in the INEX2 flag to the lsb of Y.
24026 or.l &1,8(%a2) # or in 1 to lsb of mantissa
24075 or.l &0x80000000,(%a0) # if neg, use -Y
24087 or.w %d0,FPSR_EXCEPT(%a6)
24090 ## or.w %d0,FPSR_EXCEPT(%a6)
24104 # or less than LEN -1 digits, adjust ILOG and repeat from
24318 fbeq.w den_zero # if zero, use k-factor or 4933
24368 or.l &opaop_mask,USER_FPSR(%a6) # set OPERR & AIOP in USER_FPSR
24544 or.l %d6,%d2 # or in msbs from d3 into d2
24713 btst &0x5,(%sp) # supervisor or user mode?
24722 # if the effective addressing mode was predecrement or postincrement,
24780 cmpi.b EXC_VOFF(%a6),&0x30 # move in or out?
24783 btst &0x5,EXC_SR(%a6) # user or supervisor?