Lines Matching refs:ZERO
436 set ZERO, 0x01 # operand type for STAG/DTAG
447 set z_bit, 0x2 # zero result
458 set dz_bit, 2 # divide by zero
473 set z_mask, 0x04000000 # zero bit mask (lw)
478 set z_bmask, 0x04 # zero bit mask (byte)
493 set adz_mask, 0x00000010 # accrued divide by zero
533 set rz_mode, 0x1 # round-to-zero
599 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
693 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
712 andi.l &0x00ff01ff,USER_FPSR(%a6) # zero all but accured field
714 fmov.l &0x0,%fpcr # zero current control regs
798 and.l &0xffff00ff,USER_FPSR(%a6) # zero all but accured field
800 fmov.l &0x0,%fpcr # zero current control regs
839 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
936 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
957 fmov.l &0x0,%fpcr # zero current control regs
1072 and.l &0xffff00ff,USER_FPSR(%a6) # zero all but accured field
1074 fmov.l &0x0,%fpcr # zero current control regs
1114 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
1229 # if the exception is an opclass zero or two unimplemented data type
1263 # so, since the emulation routines re-create them anyways, zero exception field
1264 andi.l &0x00ff00ff,USER_FPSR(%a6) # zero exception field
1266 fmov.l &0x0,%fpcr # zero current control regs
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
1302 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
1459 beq.b fso_zero # it's a skewed zero
1490 tst.l LOCAL_LO(%a0) # is it a zero?
1517 # so, since the emulation routines re-create them anyways, zero exception field.
1519 and.l &0xffff00ff,USER_FPSR(%a6) # zero exception field
1521 fmov.l &0x0,%fpcr # zero current control regs
1819 # so, since the emulation routines re-create them anyways, zero exception field
1820 andi.l &0x0ff00ff,USER_FPSR(%a6) # zero exception field
1822 fmov.l &0x0,%fpcr # zero current control regs
1847 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
2076 # so, since the emulation routines re-create them anyways, zero exception field.
2078 and.l &0xffff00ff,USER_FPSR(%a6) # zero exception field
2080 fmov.l &0x0,%fpcr # zero current control regs
2092 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
2385 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
2543 # The packed operand is a zero if the mantissa is all zero, else it's
2547 bne.b iea_op_gp_not_spec # not a zero
2548 tst.l FP_SRC_HI(%a6) # is lw 2 zero?
2549 bne.b iea_op_gp_not_spec # not a zero
2550 tst.l FP_SRC_LO(%a6) # is lw 3 zero?
2551 beq.b iea_op_setsrc # operand is a ZERO
2566 bsr.l unnorm_fix # yes; convert to NORM/DENORM/ZERO
2585 bsr.l unnorm_fix # yes; convert to NORM/DENORM/ZERO
3100 # for opclass zero and two instruction taking this exception, the #
3290 # for opclass zero and two instructions taking this exception, the #
3573 # unnorm_fix() - change UNNORM operands to NORM or ZERO #
3591 # for opclass zero and two instruction taking this exception, the #
3644 # Here, we zero the ccode and exception byte field since we're going to
3649 andi.l &0x00ff01ff,USER_FPSR(%a6) # zero all but accured field
3651 fmov.l &0x0,%fpcr # zero current control regs
3678 bsr.l unnorm_fix # yes; convert to NORM,DENORM,or ZERO
3739 andi.l &0xffff00ff,USER_FPSR(%a6) # zero exception field
3800 # this would be the case for opclass two operations with a source zero
3846 # non-zero <ea> field. These may get flagged as "Line F" but should #
3866 # if the F-Line instruction is an "fmovecr" w/ a non-zero <ea>. if
3887 # it's an fmovecr w/ a non-zero <ea> that has entered through
4487 short tbl_trans - tbl_trans # $01-1 fint zero
4496 short src_zero - tbl_trans # $02-1 fsinh zero
4505 short tbl_trans - tbl_trans # $03-1 fintrz zero
4514 short tbl_trans - tbl_trans # $04-1 fsqrt zero
4532 short src_zero - tbl_trans # $06-1 flognp1 zero
4550 short src_zero - tbl_trans # $08-1 fetoxm1 zero
4559 short src_zero - tbl_trans # $09-1 ftanh zero
4568 short src_zero - tbl_trans # $0a-1 fatan zero
4586 short src_zero - tbl_trans # $0c-1 fasin zero
4595 short src_zero - tbl_trans # $0d-1 fatanh zero
4604 short src_zero - tbl_trans # $0e-1 fsin zero
4613 short src_zero - tbl_trans # $0f-1 ftan zero
4622 short ld_pone - tbl_trans # $10-1 fetox zero
4631 short ld_pone - tbl_trans # $11-1 ftwotox zero
4640 short ld_pone - tbl_trans # $12-1 ftentox zero
4658 short t_dz2 - tbl_trans # $14-1 flogn zero
4667 short t_dz2 - tbl_trans # $15-1 flog10 zero
4676 short t_dz2 - tbl_trans # $16-1 flog2 zero
4694 short tbl_trans - tbl_trans # $18-1 fabs zero
4703 short ld_pone - tbl_trans # $19-1 fcosh zero
4712 short tbl_trans - tbl_trans # $1a-1 fneg zero
4730 short ld_ppi2 - tbl_trans # $1c-1 facos zero
4739 short ld_pone - tbl_trans # $1d-1 fcos zero
4748 short src_zero - tbl_trans # $1e-1 fgetexp zero
4757 short src_zero - tbl_trans # $1f-1 fgetman zero
4766 short tbl_trans - tbl_trans # $20-1 fdiv zero
4775 short smod_szero - tbl_trans # $21-1 fmod zero
4784 short tbl_trans - tbl_trans # $22-1 fadd zero
4793 short tbl_trans - tbl_trans # $23-1 fmul zero
4802 short tbl_trans - tbl_trans # $24-1 fsgldiv zero
4811 short srem_szero - tbl_trans # $25-1 frem zero
4820 short sscale_szero - tbl_trans # $26-1 fscale zero
4829 short tbl_trans - tbl_trans # $27-1 fsglmul zero
4838 short tbl_trans - tbl_trans # $28-1 fsub zero
4910 short ssincosz - tbl_trans # $30-1 fsincos zero
4919 short ssincosz - tbl_trans # $31-1 fsincos zero
4928 short ssincosz - tbl_trans # $32-1 fsincos zero
4937 short ssincosz - tbl_trans # $33-1 fsincos zero
4946 short ssincosz - tbl_trans # $34-1 fsincos zero
4955 short ssincosz - tbl_trans # $35-1 fsincos zero
4964 short ssincosz - tbl_trans # $36-1 fsincos zero
4973 short ssincosz - tbl_trans # $37-1 fsincos zero
6355 #--ENTRY POINT FOR ATAN(X), HERE X IS FINITE, NON-ZERO, AND NOT NAN'S
6787 bra ld_pzero # answer is positive zero
6921 # zero. The reason for such a special form is that T-1, #
6950 # Notes: For non-zero X, the inexact exception will always be #
7049 # zero. The reason for such a special form is that T-1, #
7217 #--entry point for EXP(X), here X is finite, non-zero, and not NaN's
7380 #--entry point for EXPM1(X), here X is finite, non-zero, non-NaN
8143 zero:
8327 #--ENTRY POINT FOR LOG(X) FOR X FINITE, NON-ZERO, NOT NAN'S
8334 #--A FINITE, NON-ZERO, NORMALIZED NUMBER.
8502 #----Note that this code assumes the denormalized input is NON-ZERO.
8555 #--ENTRY POINT FOR LOG(1+X) FOR X FINITE, NON-ZERO, NOT NAN'S
8575 ble.w LP1NEG0 # LOG OF ZERO OR -VE
8647 fmov.s zero(%pc),%fp1 # FP1 IS K = 0
8661 fmov.s zero(%pc),%fp0
8704 # divide-by-zero by #
8856 fbeq.l ld_pzero # return an EXACT zero
9099 #--ENTRY POINT FOR 2**(X), HERE X IS FINITE, NON-ZERO, AND NOT NAN'S
9196 #--ENTRY POINT FOR 10**(X), HERE X IS FINITE, NON-ZERO, AND NOT NAN'S
9348 tst.b %d1 # if zero, offset is to pi
9351 ble.b z_val # if in this range, return zero
9355 ble.b z_val # if in this range, return zero
9360 bra.l ld_pzero # return a zero
9598 cmpi.w %d0,&0x3fff # is src ~ ZERO?
9648 clr.l -(%sp) # insert zero low mantissa
9650 clr.l -(%sp) # make zero exponent
9656 clr.l -(%sp) # insert zero high mantissa
9657 clr.l -(%sp) # make zero exponent
10238 # In such a case, the EXOP equals zero. #
10450 long 0x00000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10451 long 0x00000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10452 long 0x00000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10455 long 0x3f810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10456 long 0x3f810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10457 long 0x3f810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10460 long 0x3c010000, 0x00000000, 0x00000000, 0x0 # ZERO;dbl
10462 long 0x3c010000, 0x00000000, 0x00000000, 0x0 # ZERO;dbl
10470 long 0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10471 long 0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10473 long 0x80000000, 0x00000000, 0x00000000, 0x0 # ZERO;ext
10475 long 0xbf810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10476 long 0xbf810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10478 long 0xbf810000, 0x00000000, 0x00000000, 0x0 # ZERO;sgl
10480 long 0xbc010000, 0x00000000, 0x00000000, 0x0 # ZERO;dbl
10481 long 0xbc010000, 0x00000000, 0x00000000, 0x0 # ZERO;dbl
10483 long 0xbc010000, 0x00000000, 0x00000000, 0x0 # ZERO;dbl
10488 # src_zero(): Return signed zero according to sign of src operand. #
10493 bmi.b ld_mzero # if neg, load neg zero
10496 # ld_pzero(): return a positive zero.
10504 # ld_mzero(): return a negative zero.
10512 # dst_zero(): Return signed zero according to sign of dst operand. #
10517 bmi.b ld_mzero # if neg, load neg zero
10518 bra.b ld_pzero # load positive zero
10557 # szr_inf(): Return +ZERO for a negative src operand or #
10648 # ssincosz(): When the src operand is ZERO, store a one in the
10649 # cosine register and return a ZERO in fp0 w/ the same sign
10756 cmpi.b %d1,&ZERO
10770 cmpi.b %d1,&ZERO
10784 cmpi.b %d1,&ZERO
10837 cmpi.b %d1,&ZERO
10851 cmpi.b %d1,&ZERO
10865 cmpi.b %d1,&ZERO
10882 cmpi.b %d1,&ZERO
10896 cmpi.b %d1,&ZERO
11009 cmpi.b %d1,&ZERO
11023 cmpi.b %d1,&ZERO
11037 cmpi.b %d1,&ZERO
11051 cmpi.b %d1,&ZERO
11065 cmpi.b %d1,&ZERO
11079 cmpi.b %d1,&ZERO
11093 cmpi.b %d1,&ZERO
11107 cmpi.b %d1,&ZERO
11121 cmpi.b %d1,&ZERO
11135 cmpi.b %d1,&ZERO
11149 cmpi.b %d1,&ZERO
11163 cmpi.b %d1,&ZERO
11177 cmpi.b %d1,&ZERO
11191 cmpi.b %d1,&ZERO
11205 cmpi.b %d1,&ZERO
11219 cmpi.b %d1,&ZERO
11233 cmpi.b %d1,&ZERO
11247 cmpi.b %d1,&ZERO
11261 cmpi.b %d1,&ZERO
11275 cmpi.b %d1,&ZERO
11289 cmpi.b %d1,&ZERO
11303 cmpi.b %d1,&ZERO
11317 cmpi.b %d1,&ZERO
11331 cmpi.b %d1,&ZERO
11537 # scale_to_zero_src() - scale src exponent to zero #
11538 # scale_to_zero_dst() - scale dst exponent to zero #
11785 # for fun, let's use only extended precision, round to zero. then, let
11914 short fmul_zero - tbl_fmul_op # NORM x ZERO
11922 short fmul_zero - tbl_fmul_op # ZERO x NORM
11923 short fmul_zero - tbl_fmul_op # ZERO x ZERO
11924 short fmul_res_operr - tbl_fmul_op # ZERO x INF
11925 short fmul_res_qnan - tbl_fmul_op # ZERO x QNAN
11926 short fmul_zero - tbl_fmul_op # ZERO x DENORM
11927 short fmul_res_snan - tbl_fmul_op # ZERO x SNAN
11932 short fmul_res_operr - tbl_fmul_op # INF x ZERO
11941 short fmul_res_qnan - tbl_fmul_op # QNAN x ZERO
11950 short fmul_zero - tbl_fmul_op # NORM x ZERO
11959 short fmul_res_snan - tbl_fmul_op # SNAN x ZERO
11975 # Multiply: (Zero x Zero) || (Zero x norm) || (Zero x denorm)
11982 bpl.b fmul_zero_p # result ZERO is pos.
11984 fmov.s &0x80000000,%fp0 # load -ZERO
11988 fmov.s &0x00000000,%fp0 # load +ZERO
12034 # scale_to_zero_src() - scale src exponent to zero #
12337 # do the fmove in; at this point, only possible ops are ZERO and INF.
12339 # prec:mode should be zero at this point but it won't affect answer anyways.
12354 # scale_to_zero_src() - scale src exponent to zero #
12355 # scale_to_zero_dst() - scale dst exponent to zero #
12682 short fdiv_inf_load - tbl_fdiv_op # NORM / ZERO
12690 short fdiv_zero_load - tbl_fdiv_op # ZERO / NORM
12691 short fdiv_res_operr - tbl_fdiv_op # ZERO / ZERO
12692 short fdiv_zero_load - tbl_fdiv_op # ZERO / INF
12693 short fdiv_res_qnan - tbl_fdiv_op # ZERO / QNAN
12694 short fdiv_zero_load - tbl_fdiv_op # ZERO / DENORM
12695 short fdiv_res_snan - tbl_fdiv_op # ZERO / SNAN
12700 short fdiv_inf_dst - tbl_fdiv_op # INF / ZERO
12709 short fdiv_res_qnan - tbl_fdiv_op # QNAN / ZERO
12718 short fdiv_inf_load - tbl_fdiv_op # DENORM / ZERO
12727 short fdiv_res_snan - tbl_fdiv_op # SNAN / ZERO
12748 fmov.s &0x80000000,%fp0 # load a -ZERO
12752 fmov.s &0x00000000,%fp0 # load a +ZERO
12757 # The destination was In Range and the source was a ZERO. The result,
12777 # The destination was an INF w/ an In Range or ZERO source, the result is
13117 # do the fneg; at this point, only possible ops are ZERO and INF.
13119 # prec:mode should be zero at this point but it won't affect answer anyways.
13166 cmpi.b %d1,&ZERO # weed out ZERO
13200 # Zero:
13231 # norms. Denorms are so low that the answer will either be a zero or a #
13264 cmpi.b %d1,&ZERO # weed out ZERO
13277 # for DENORMs, the result will be either (+/-)ZERO or (+/-)1.
13284 mov.w SRC_EX(%a0),FP_SCR0_EX(%a6) # copy sign, zero exp
13290 # Zero:
13293 tst.b SRC_EX(%a0) # is ZERO negative?
13296 fmov.s &0x00000000,%fp0 # return +ZERO in fp0
13300 fmov.s &0x80000000,%fp0 # return -ZERO in fp0
13337 # norms. Denorms are so low that the answer will either be a zero or a #
13366 cmpi.b %d1,&ZERO # weed out ZERO
13379 # for DENORMs, the result will be (+/-)ZERO.
13386 mov.w SRC_EX(%a0),FP_SCR0_EX(%a6) # copy sign, zero exp
13392 # Zero:
13395 tst.b SRC_EX(%a0) # is ZERO negative?
13398 fmov.s &0x00000000,%fp0 # return +ZERO in fp0
13402 fmov.s &0x80000000,%fp0 # return -ZERO in fp0
13447 # scale the operand such that the exponent is zero. Perform an "fabs" #
13797 short fcmp_norm - tbl_fcmp_op # NORM - ZERO
13805 short fcmp_norm - tbl_fcmp_op # ZERO - NORM
13806 short fcmp_norm - tbl_fcmp_op # ZERO - ZERO
13807 short fcmp_norm - tbl_fcmp_op # ZERO - INF
13808 short fcmp_res_qnan - tbl_fcmp_op # ZERO - QNAN
13809 short fcmp_dnrm_s - tbl_fcmp_op # ZERO - DENORM
13810 short fcmp_res_snan - tbl_fcmp_op # ZERO - SNAN
13815 short fcmp_norm - tbl_fcmp_op # INF - ZERO
13824 short fcmp_res_qnan - tbl_fcmp_op # QNAN - ZERO
13833 short fcmp_dnrm_d - tbl_fcmp_op # DENORM - ZERO
13842 short fcmp_res_snan - tbl_fcmp_op # SNAN - ZERO
13865 # If you have a DENORM and an INF or ZERO, just force the DENORM's j-bit to a one
13939 # scale_to_zero_src() - scale src exponent to zero #
13940 # scale_to_zero_dst() - scale dst exponent to zero #
14209 short fsglmul_zero - tbl_fsglmul_op # NORM x ZERO
14217 short fsglmul_zero - tbl_fsglmul_op # ZERO x NORM
14218 short fsglmul_zero - tbl_fsglmul_op # ZERO x ZERO
14219 short fsglmul_res_operr - tbl_fsglmul_op # ZERO x INF
14220 short fsglmul_res_qnan - tbl_fsglmul_op # ZERO x QNAN
14221 short fsglmul_zero - tbl_fsglmul_op # ZERO x DENORM
14222 short fsglmul_res_snan - tbl_fsglmul_op # ZERO x SNAN
14227 short fsglmul_res_operr - tbl_fsglmul_op # INF x ZERO
14236 short fsglmul_res_qnan - tbl_fsglmul_op # QNAN x ZERO
14245 short fsglmul_zero - tbl_fsglmul_op # NORM x ZERO
14254 short fsglmul_res_snan - tbl_fsglmul_op # SNAN x ZERO
14280 # scale_to_zero_src() - scale src exponent to zero #
14281 # scale_to_zero_dst() - scale dst exponent to zero #
14544 short fsgldiv_inf_load - tbl_fsgldiv_op # NORM / ZERO
14552 short fsgldiv_zero_load - tbl_fsgldiv_op # ZERO / NORM
14553 short fsgldiv_res_operr - tbl_fsgldiv_op # ZERO / ZERO
14554 short fsgldiv_zero_load - tbl_fsgldiv_op # ZERO / INF
14555 short fsgldiv_res_qnan - tbl_fsgldiv_op # ZERO / QNAN
14556 short fsgldiv_zero_load - tbl_fsgldiv_op # ZERO / DENORM
14557 short fsgldiv_res_snan - tbl_fsgldiv_op # ZERO / SNAN
14562 short fsgldiv_inf_dst - tbl_fsgldiv_op # INF / ZERO
14571 short fsgldiv_res_qnan - tbl_fsgldiv_op # QNAN / ZERO
14580 short fsgldiv_inf_load - tbl_fsgldiv_op # DENORM / ZERO
14589 short fsgldiv_res_snan - tbl_fsgldiv_op # SNAN / ZERO
14623 # scale_to_zero_src() - set src operand exponent equal to zero #
14624 # scale_to_zero_dst() - set dst operand exponent equal to zero #
14685 fbeq.w fadd_zero_exit # if result is zero, end now
14717 # fmov.s &0x00000000,%fp0 # return zero in fp0
14870 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
14908 short fadd_zero_src - tbl_fadd_op # NORM + ZERO
14916 short fadd_zero_dst - tbl_fadd_op # ZERO + NORM
14917 short fadd_zero_2 - tbl_fadd_op # ZERO + ZERO
14918 short fadd_inf_src - tbl_fadd_op # ZERO + INF
14920 short fadd_zero_dst - tbl_fadd_op # ZERO + DENORM
14926 short fadd_inf_dst - tbl_fadd_op # INF + ZERO
14935 short fadd_res_qnan - tbl_fadd_op # QNAN + ZERO
14944 short fadd_zero_src - tbl_fadd_op # DENORM + ZERO
14953 short fadd_res_snan - tbl_fadd_op # SNAN + ZERO
14973 bmi.w fadd_zero_2_chk_rm # weed out (-ZERO)+(+ZERO)
14976 # and return the appropriately signed zero.
14979 fmov.s &0x00000000,%fp0 # return +ZERO
14985 # - therefore, we return +ZERO if the rounding modes are RN,RZ, or RP.
14986 # - -ZERO is returned in the case of RM.
14993 fmov.s &0x00000000,%fp0 # return +ZERO
14998 fmov.s &0x80000000,%fp0 # return -ZERO
15003 # one operand is a ZERO and the other is a DENORM or NORM. scale
15040 # operands are INF and one of {ZERO, INF, DENORM, NORM}
15050 # operands are INF and one of {ZERO, INF, DENORM, NORM}
15076 # scale_to_zero_src() - set src operand exponent equal to zero #
15077 # scale_to_zero_dst() - set dst operand exponent equal to zero #
15138 fbeq.w fsub_zero_exit # if result zero, end now
15170 # fmov.s &0x00000000,%fp0 # return zero in fp0
15323 # 0x8000000000000000 and this mantissa is the result of rounding non-zero
15361 short fsub_zero_src - tbl_fsub_op # NORM - ZERO
15369 short fsub_zero_dst - tbl_fsub_op # ZERO - NORM
15370 short fsub_zero_2 - tbl_fsub_op # ZERO - ZERO
15371 short fsub_inf_src - tbl_fsub_op # ZERO - INF
15373 short fsub_zero_dst - tbl_fsub_op # ZERO - DENORM
15379 short fsub_inf_dst - tbl_fsub_op # INF - ZERO
15388 short fsub_res_qnan - tbl_fsub_op # QNAN - ZERO
15397 short fsub_zero_src - tbl_fsub_op # DENORM - ZERO
15406 short fsub_res_snan - tbl_fsub_op # SNAN - ZERO
15428 # the signs are opposite, so, return a ZERO w/ the sign of the dst ZERO
15431 fmov.s &0x00000000,%fp0 # no; return +ZERO
15437 # - therefore, we return +ZERO if the rounding mode is RN,RZ, or RP
15438 # - -ZERO is returned in the case of RM.
15445 fmov.s &0x00000000,%fp0 # no; return +ZERO
15450 fmov.s &0x80000000,%fp0 # return -ZERO
15455 # one operand is a ZERO and the other is a DENORM or a NORM.
15811 cmpi.b %d1,&ZERO # weed out ZERO
15826 tst.b SRC_EX(%a0) # is ZERO positive or negative?
15829 fmov.s &0x00000000,%fp0 # return +ZERO
15833 fmov.s &0x80000000,%fp0 # return -ZERO
15925 andi.w &0x8000,FP_SCR0_EX(%a6) # zero src exponent
15961 andi.w &0x8000,FP_SCR1_EX(%a6) # zero dst exponent
16242 # Multiply: (Infinity x Zero) #
16243 # Divide : (Zero / Zero) || (Infinity / Infinity) #
18219 # If the data register holds a zero, then the #
18244 # if the bit string is a zero, then the operation is a no-op
19573 # unnorm_fix() - convert normalized number to denorm or zero #
19595 # FP_SRC(a6) and FP_DST(a6). If the instruction was opclass zero, load #
19598 # convert it to a DENORM or a ZERO. #
19601 # memory. Tag and fix both as above w/ opclass zero instructions. #
19708 clr.b STAG(%a6) # either NORM or ZERO
19730 # LONG: can be either NORM or ZERO...
19736 fbeq.w opd_long_zero # long is a ZERO
19739 mov.b &ZERO, STAG(%a6) # set ZERO optype flag
19743 # WORD: can be either NORM or ZERO...
19749 fbeq.w opd_word_zero # WORD is a ZERO
19752 mov.b &ZERO, STAG(%a6) # set ZERO optype flag
19756 # BYTE: can be either NORM or ZERO...
19762 fbeq.w opd_byte_zero # byte is a ZERO
19765 mov.b &ZERO, STAG(%a6) # set ZERO optype flag
19769 # SGL: can be either NORM, DENORM, ZERO, INF, QNAN or SNAN but not UNNORM
19807 clr.b STAG(%a6) # either NORM or ZERO
19846 fbeq.w load_long_zero # src op is a ZERO
19849 mov.b &ZERO, STAG(%a6) # set optype tag to ZERO
19882 fbeq.w load_word_zero # src op is a ZERO
19885 mov.b &ZERO, STAG(%a6) # set optype tag to ZERO
19918 fbeq.w load_byte_zero # src op is a ZERO
19921 mov.b &ZERO, STAG(%a6) # set optype tag to ZERO
20146 cmpi.b %d0,&UNNORM # is the src op an UNNORM ZERO?
20153 bsr.l unnorm_fix # fix the UNNORM ZERO
20605 # (3) if exp still equals zero, then insert original exponent
20666 clr.l %d0 # pass: zero g,r,s
20816 # (3) if exp still equals zero, then insert original exponent
21007 # add the extra condition that only if the k-factor was zero, too, should
21008 # we zero the exponent
21011 # "mantissa" is all zero which means that the answer is zero. but, the '040
21012 # algorithm allows the exponent to be non-zero. the 881/2 do not. therefore,
21013 # if the mantissa is zero, I will zero the exponent, too.
21014 # the question now is whether the exponents sign bit is allowed to be non-zero
21015 # for a zero, also...
21074 # According to the index value in d1 which can range from zero #
21724 # simply calculate the sticky bit and zero the mantissa. otherwise
21929 # Return a zero mantissa with the sticky bit set
22002 # the entire mantissa is zero.
22010 # the entire mantissa is zero.
22062 tst.l %d0 # are G,R,S zero?
22359 clr.l FTEMP_LO(%a0) # lo(man) is now zero
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 #
22384 # zero; both the exponent and mantissa are changed. #
22397 bfffo FTEMP_LO(%a0){&0:&32}, %d0 # is operand really a zero?
22464 # whole mantissa is zero so this UNNORM is actually a zero
22467 and.w &0x8000, FTEMP_EX(%a0) # force exponent to zero
22469 mov.b &ZERO, %d0 # fix optype tag
22484 # one of: NORM, INF, QNAN, SNAN, DENORM, UNNORM, ZERO #
22489 # If it's an unnormalized zero, alter the operand and force it #
22490 # to be a normal zero. #
22515 mov.b &ZERO, %d0
22521 # must convert to zero.
22527 # it's an "unnormalized zero". let's convert it to an actual zero...
22529 mov.b &ZERO, %d0
22564 # one of: NORM, INF, QNAN, SNAN, DENORM, ZERO #
22592 mov.b &ZERO, %d0
22627 # one of: NORM, INF, QNAN, SNAN, DENORM, ZERO #
22653 mov.b &ZERO, %d0
22746 # the number may have become zero after rounding. set ccodes accordingly.
22749 tst.l FTEMP_HI(%a0) # is value now a zero?
22753 # bset &z_bit, FPSR_CC(%a6) # yes; set zero ccode bit
22754 bset &z_bit, %d0 # yes; set zero ccode bit
22806 # the number may have become zero after rounding. set ccodes accordingly.
22809 tst.l FTEMP_HI(%a0) # is value now a zero?
22813 # bset &z_bit,FPSR_CC(%a6) # yes; set zero ccode bit
22814 bset &z_bit,%d0 # yes; set zero ccode bit
22959 # If the packed operand is a ZERO,NAN, or INF, convert it to #
22985 # The packed operand is a zero if the mantissa is all zero, else it's
22990 bne.b gp_not_spec # not a zero
22991 tst.l FP_SRC_HI(%a6) # is lw 2 zero?
22992 bne.b gp_not_spec # not a zero
22993 tst.l FP_SRC_LO(%a6) # is lw 3 zero?
22994 bne.b gp_not_spec # not a zero
22995 rts # operand is a ZERO
23013 # Expected is a normal bcd (i.e. non-exceptional; all inf, zero, #
23032 # exponent equal to the exponent from A1 and the zero count #
23036 # SM = 0 a non-zero digit in the integer position #
23037 # SM = 1 a non-zero digit in Mant0, lsd of the fraction #
23114 clr.l %d1 # zero d1 for accumulator
23117 bfextu %d4{%d3:&4},%d0 # get the digit and zero extend into d0
23174 bfextu %d4{%d3:&4},%d0 # get the digit and zero extend
23209 # 3. Add one for each zero encountered until a non-zero digit.
23211 # 5. Check if the exp has crossed zero in #3 above; make the exp abs
23216 # 3. Add one for each zero encountered until a non-zero digit.
23218 # 5. Check if the exp has crossed zero in #3 above; clear SE.
23223 # exponent towards zero. Since all pwrten constants with a power
23231 # (*) d1: zero count
23252 clr.l %d1 # zero count reg
23255 bne.b ap_p_fx # if M16 is non-zero, go fix exp
23256 addq.l &1,%d1 # inc zero count
23259 bne.b ap_p_cl # if lw 2 is zero, skip it
23268 bne.b ap_p_fx # if non-zero, go to fix exp
23296 tst.l %d0 # check if d0 is zero
23307 bne.b ap_n_cl # if not zero, check digits
23316 bne.b ap_n_fx # if non-zero, go to exp fix
23344 tst.l %d0 # check if d0 is zero
23424 bcc.b e_next # if zero, skip the mul
23428 tst.l %d0 # check if d0 is zero
23429 bne.b e_loop # not zero, continue shifting
23657 bgt.b pos_exp # if greater than zero, it is a norm
23723 fmov.l &0,%fpsr # zero all of fpsr - nothing needed
23844 clr.w %d5 # set it zero initially
23871 bne.b not_rn # if zero, it is RN
23885 bcc.b e_next2 # if zero, skip the mul
23889 tst.l %d0 # test if ISCALE is zero
23907 # Check d2 for excess 10 exponential value. If not zero,
23973 mov.l &0x3fff0000,-(%sp) # force exp to zero
23981 mov.l &0x3fff0000,-(%sp) # force exp to zero
23984 mov.l &0x3fff0000,-(%sp)# force exp to zero
23994 beq.b A9_con # if zero, continue as normal
24136 bne not_zr # if non-zero, go to second test
24146 bcc.b l_next # if zero, skip the mul
24150 tst.l %d0 # test if LEN is zero
24197 bcc.b z_next # if zero, skip the mul
24201 tst.l %d0 # test if LEN is zero
24249 clr.l 4(%a0) # zero word 2 of FP_RES
24250 clr.l 8(%a0) # zero word 3 of FP_RES
24253 beq.b no_sft # if zero, don't shift
24263 tst.l %d2 # check for mantissa of zero
24265 tst.l %d3 # continue zero check
24266 beq.b zer_m # if zero, go directly to binstr
24268 clr.l %d1 # put zero in d1 for addx
24290 # is non-zero, OPERR is signaled. In all cases, all 4 digits are
24317 ftest.x %fp0 # test for zero
24318 fbeq.w den_zero # if zero, use k-factor or 4933
24332 ftest.x %fp0 # test for zero
24333 fbneq.w not_zero # if zero, force exponent
24345 beq.b x_loop_fin # if zero, skip the shift
24353 clr.l %d1 # put zero in d1 for addx
24366 tst.b %d0 # check if e4 is zero
24367 beq.b A16_st # if zero, skip rest
24498 # A6. Test d7. If zero, the digit formed is the ms digit. If non- #
24499 # zero, it is the ls digit. Put the digit in its place in the #
24503 # A7. Decrement d6 (LEN counter) and repeat the loop until zero. #
24564 tst.w %d7 # if zero, store digit & to loop
24565 beq.b first_d # if non-zero, form byte & write