1 | 2 | sgetem.sa 3.1 12/10/90 3 | 4 | The entry point sGETEXP returns the ex 5 | of the input argument. The exponent b 6 | and the exponent value is returned as 7 | precision number in fp0. sGETEXPD han 8 | numbers. 9 | 10 | The entry point sGETMAN extracts the m 11 | input argument. The mantissa is conve 12 | extended precision number and returned 13 | range of the result is [1.0 - 2.0). 14 | 15 | 16 | Input: Double-extended number X in th 17 | the floating-point save stack. 18 | 19 | Output: The functions return exp(X) or 20 | 21 | Modified: fp0. 22 | 23 | 24 | Copyright (C) Motorola, Inc. 1 25 | All Rights Reserved 26 | 27 | For details on the license for this fi 28 | file, README, in this same directory. 29 30 |SGETEM idnt 2,1 | Motorola 040 Floating Po 31 32 |section 8 33 34 #include "fpsp.h" 35 36 |xref nrm_set 37 38 | 39 | This entry point is used by the unimplemente 40 | handler. It points a0 to the input operand. 41 | 42 | 43 | 44 | SGETEXP 45 | 46 47 .global sgetexp 48 sgetexp: 49 movew LOCAL_EX(%a0),%d0 |get t 50 bclrl #15,%d0 |clear the sig 51 subw #0x3fff,%d0 |subtract off 52 fmovew %d0,%fp0 |move 53 rts 54 55 .global sgetexpd 56 sgetexpd: 57 bclrb #sign_bit,LOCAL_EX(%a0) 58 bsr nrm_set |normalize (ex 59 movew LOCAL_EX(%a0),%d0 |load 60 subw #0x3fff,%d0 |subtract off 61 fmovew %d0,%fp0 |move 62 rts 63 | 64 | 65 | This entry point is used by the unimplemente 66 | handler. It points a0 to the input operand. 67 | 68 | 69 | 70 | SGETMAN 71 | 72 | 73 | For normalized numbers, leave the mantissa a 74 | with an exponent of +/- $3fff. 75 | 76 .global sgetman 77 sgetman: 78 movel USER_FPCR(%a6),%d0 79 andil #0xffffff00,%d0 |clear roundin 80 fmovel %d0,%fpcr |this 81 movew LOCAL_EX(%a0),%d0 |get t 82 orw #0x7fff,%d0 |clear old exp 83 bclrl #14,%d0 |make it the n 84 movew %d0,LOCAL_EX(%a0) |move 85 fmovex (%a0),%fp0 |put new value 86 rts 87 88 | 89 | For denormalized numbers, shift the mantissa 90 | then load the exponent with +/1 $3fff. 91 | 92 .global sgetmand 93 sgetmand: 94 movel LOCAL_HI(%a0),%d0 |load 95 movel LOCAL_LO(%a0),%d1 |load 96 bsr shft |shift mantiss 97 movel %d0,LOCAL_HI(%a0) |put m 98 movel %d1,LOCAL_LO(%a0) |put l 99 bras sgetman 100 101 | 102 | SHFT 103 | 104 | Shifts the mantissa bits until msbit i 105 | input: 106 | ms mantissa part in d0 107 | ls mantissa part in d1 108 | output: 109 | shifted bits in d0 and d1 110 shft: 111 tstl %d0 |if any bits s 112 bnes upper |then branch 113 | ;else no bits 114 tstl %d1 |test if any b 115 bnes cont |if set then c 116 bras shft_end |else return 117 cont: 118 movel %d3,-(%a7) |save d3 119 exg %d0,%d1 |shift ls mant 120 bfffo %d0{#0:#32},%d3 |find first 1 121 lsll %d3,%d0 |shift first 1 122 movel (%a7)+,%d3 |restore d3 123 bras shft_end 124 upper: 125 126 moveml %d3/%d5/%d6,-(%a7) |save 127 bfffo %d0{#0:#32},%d3 |find first 1 128 lsll %d3,%d0 |shift ms mant 129 movel %d1,%d6 |save ls mant 130 lsll %d3,%d1 |shift ls mant 131 movel #32,%d5 132 subl %d3,%d5 |sub 32 from s 133 lsrl %d5,%d6 |shift off all 134 | ;be shifted in 135 orl %d6,%d0 |shift the ls 136 moveml (%a7)+,%d3/%d5/%d6 |resto 137 shft_end: 138 rts 139 140 |end
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.