summaryrefslogtreecommitdiff
path: root/sreals.s
blob: 2489b00d1992120322e0872af5ffb6a3ee4611f8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
#define SP_G5

#ifdef SP_G5
# define sp %g5
#else
# define sp %g7
#endif

	.global	r_to_i_real
	.global	entier_real
	.global	acos_real
	.global	pow_real
	.global	cos_real
	.global	exp_real
	.global	asin_real
	.global	atan_real
	.global	log10_real
	.global	tan_real
	.global	ln_real
	.global	sin_real
	
!
!	REALS
!

exp_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@exp
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

ln_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@log
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

log10_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@log10
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

pow_real:
	std	%f2,[%fp-8]
	ld	[%fp-8],%o0
	ld	[%fp-4],%o1
	std	%f0,[%fp-8]
	ld	[%fp-8],%o2
	call	@pow
	ld	[%fp-4],%o3
	ld	[sp],%o7
	retl
	inc	4,sp

sin_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@sin
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

cos_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@cos
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

tan_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@tan
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp
	
acos_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@acos
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

asin_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@asin
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp

atan_real:
	std	%f0,[%fp-8]
	ld	[%fp-8],%o0
	call	@atan
	ld	[%fp-4],%o1
	ld	[sp],%o7
	retl
	inc	4,sp
	
entier_real:
	sethi	%hi d_0,%o0
	ldd	[%o0+%lo d_0],%f2
	fdtoi	%f0,%f4
	ld	[sp],%o7
	st	%f4,[%fp-4]
	fcmpd	%f0,%f2
	ld	[%fp-4],%l0
	fbge	entier_real_2
	nop
	fitod	%f4,%f2
	fcmpd	%f0,%f2
	nop
	fbne,a	entier_real_2
	dec	%l0
entier_real_2:
	retl
	inc	4,sp

	.data
	.align	8
d_0:	.double	0r0.0
d_0_5:	.double	0r0.5
	.text

r_to_i_real:
	sethi	%hi d_0,%o0
	ldd	[%o0+%lo d_0],%f2
	sethi	%hi d_0_5,%o0
	fcmpd	%f0,%f2
	ldd	[%o0+%lo d_0_5],%f4
	nop
	fbge,a	r_to_i_real_2
	faddd	%f0,%f4,%f0
	fsubd	%f0,%f4,%f0
r_to_i_real_2:
	fdtoi	%f0,%f2
	st	%f2,[%fp-4]
	ld	[sp],%o7
	ld	[%fp-4],%l0
	retl
	inc	4,sp