OLD | NEW |
(Empty) | |
| 1 .global feclearexcept |
| 2 .type feclearexcept,@function |
| 3 feclearexcept: |
| 4 andis. 3,3,0x3e00 |
| 5 # if (r3 & FE_INVALID) r3 |= all_invalid_flags |
| 6 andis. 0,3,0x2000 |
| 7 stwu 1,-16(1) |
| 8 beq- 0,1f |
| 9 oris 3,3,0x01f8 |
| 10 ori 3,3,0x0700 |
| 11 1: |
| 12 # note: fpscr contains various fpu status and control |
| 13 # flags and we dont check if r3 may alter other flags |
| 14 # than the exception related ones |
| 15 # fpscr &= ~r3 |
| 16 mffs 0 |
| 17 stfd 0,8(1) |
| 18 lwz 9,12(1) |
| 19 andc 9,9,3 |
| 20 stw 9,12(1) |
| 21 lfd 0,8(1) |
| 22 mtfsf 255,0 |
| 23 |
| 24 # return 0 |
| 25 li 3,0 |
| 26 addi 1,1,16 |
| 27 blr |
| 28 |
| 29 .global feraiseexcept |
| 30 .type feraiseexcept,@function |
| 31 feraiseexcept: |
| 32 andis. 3,3,0x3e00 |
| 33 # if (r3 & FE_INVALID) r3 |= software_invalid_flag |
| 34 andis. 0,3,0x2000 |
| 35 stwu 1,-16(1) |
| 36 beq- 0,1f |
| 37 ori 3,3,0x0400 |
| 38 1: |
| 39 # fpscr |= r3 |
| 40 mffs 0 |
| 41 stfd 0,8(1) |
| 42 lwz 9,12(1) |
| 43 or 9,9,3 |
| 44 stw 9,12(1) |
| 45 lfd 0,8(1) |
| 46 mtfsf 255,0 |
| 47 |
| 48 # return 0 |
| 49 li 3,0 |
| 50 addi 1,1,16 |
| 51 blr |
| 52 |
| 53 .global fetestexcept |
| 54 .type fetestexcept,@function |
| 55 fetestexcept: |
| 56 andis. 3,3,0x3e00 |
| 57 # return r3 & fpscr |
| 58 stwu 1,-16(1) |
| 59 mffs 0 |
| 60 stfd 0,8(1) |
| 61 lwz 9,12(1) |
| 62 addi 1,1,16 |
| 63 and 3,3,9 |
| 64 blr |
| 65 |
| 66 .global fegetround |
| 67 .type fegetround,@function |
| 68 fegetround: |
| 69 # return fpscr & 3 |
| 70 stwu 1,-16(1) |
| 71 mffs 0 |
| 72 stfd 0,8(1) |
| 73 lwz 3,12(1) |
| 74 addi 1,1,16 |
| 75 clrlwi 3,3,30 |
| 76 blr |
| 77 |
| 78 .global __fesetround |
| 79 .type __fesetround,@function |
| 80 __fesetround: |
| 81 # note: invalid input is not checked, r3 < 4 must hold |
| 82 # fpscr = (fpscr & -4U) | r3 |
| 83 stwu 1,-16(1) |
| 84 mffs 0 |
| 85 stfd 0,8(1) |
| 86 lwz 9,12(1) |
| 87 clrrwi 9,9,2 |
| 88 or 9,9,3 |
| 89 stw 9,12(1) |
| 90 lfd 0,8(1) |
| 91 mtfsf 255,0 |
| 92 |
| 93 # return 0 |
| 94 li 3,0 |
| 95 addi 1,1,16 |
| 96 blr |
| 97 |
| 98 .global fegetenv |
| 99 .type fegetenv,@function |
| 100 fegetenv: |
| 101 # *r3 = fpscr |
| 102 mffs 0 |
| 103 stfd 0,0(3) |
| 104 # return 0 |
| 105 li 3,0 |
| 106 blr |
| 107 |
| 108 .global fesetenv |
| 109 .type fesetenv,@function |
| 110 fesetenv: |
| 111 cmpwi 3, -1 |
| 112 bne 1f |
| 113 mflr 4 |
| 114 bl 2f |
| 115 .zero 8 |
| 116 2: mflr 3 |
| 117 mtlr 4 |
| 118 1: # fpscr = *r3 |
| 119 lfd 0,0(3) |
| 120 mtfsf 255,0 |
| 121 # return 0 |
| 122 li 3,0 |
| 123 blr |
OLD | NEW |