| 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 |