~ubuntu-branches/ubuntu/trusty/musl/trusty-proposed

« back to all changes in this revision

Viewing changes to src/fenv/powerpc/fenv.s

  • Committer: Package Import Robot
  • Author(s): Kevin Bortis
  • Date: 2013-09-20 20:54:14 UTC
  • Revision ID: package-import@ubuntu.com-20130920205414-5b61trtmma18w58o
Tags: upstream-0.9.13
ImportĀ upstreamĀ versionĀ 0.9.13

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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