-
Notifications
You must be signed in to change notification settings - Fork 17
/
maths.s
284 lines (263 loc) · 4.25 KB
/
maths.s
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
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
#
# Copyright (c) 2014 Jason L. Wright ([email protected])
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
# INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE.
#
# basic assembly math routines for DARPA Cyber Grand Challenge
.macro ENTER base
.global \base, \base\()f, \base\()l
.type \base, @function
.type \base\()f, @function
.type \base\()l, @function
.endm
.macro END base
.size \base, . - \base
.size \base\()f, . - \base\()f
.size \base\()l, . - \base\()l
.endm
ENTER sin
sinl: fldt 4(%esp)
jmp 1f
sinf: flds 4(%esp)
jmp 1f
sin:
fldl 4(%esp)
1: fsin
fnstsw %ax
sahf
jp 2f
ret
2: call twopi_rem
fsin
ret
END sin
ENTER cos
cosl: fldt 4(%esp)
jmp 1f
cosf: flds 4(%esp)
jmp 1f
cos: fldl 4(%esp)
1: fcos
fnstsw %ax
sahf
jp 2f
ret
2: call twopi_rem
fcos
ret
END cos
ENTER tan
tanl: fldt 4(%esp)
jmp 1f
tanf: flds 4(%esp)
jmp 1f
tan: fldl 4(%esp)
1: fptan
fnstsw %ax
sahf
jp 2f
fstp %st(0)
ret
2: call twopi_rem
fptan
fstp %st(0)
ret
END tan
.type twopi_rem, @function
twopi_rem:
fldpi
fadd %st(0)
fxch %st(1)
1: fprem
fnstsw %ax
sahf
jp 1b
fstp %st(1)
ret
.size twopi_rem, . - twopi_rem
ENTER remainder
remainderl:
fldt 16(%esp)
fldt 4(%esp)
jmp 1f
remainderf:
flds 8(%esp)
flds 4(%esp)
jmp 1f
remainder:
fldl 12(%esp)
fldl 4(%esp)
1: fprem1
fstsw %ax
sahf
jp 1b
fstp %st(1)
ret
END remainder
ENTER log
logl: fldt 4(%esp)
jmp 1f
logf: flds 4(%esp)
jmp 1f
log: fldl 4(%esp)
1: fldln2
fxch %st(1)
fyl2x
ret
END log
ENTER log10
log10l: fldt 4(%esp)
jmp 1f
log10f: flds 4(%esp)
jmp 1f
log10: fldl 4(%esp)
1: fldlg2
fxch %st(1)
fyl2x
ret
END log10
ENTER significand
significandl:
fldt 4(%esp)
jmp 1f
significandf:
flds 4(%esp)
jmp 1f
significand:
fldl 4(%esp)
1: fxtract
fstp %st(1)
ret
END significand
ENTER scalbn
ENTER scalbln
scalbnl:
scalblnl:
fildl 16(%esp)
fldt 4(%esp)
jmp 1f
scalbnf:
scalblnf:
fildl 8(%esp)
flds 4(%esp)
jmp 1f
scalbn:
scalbln:
fildl 12(%esp)
fldl 4(%esp)
1: fscale
fstp %st(1)
ret
END scalbn
END scalbln
ENTER rint
rintl: fldt 4(%esp)
jmp 1f
rintf: flds 4(%esp)
jmp 1f
rint: fldl 4(%esp)
1: frndint
ret
END rint
ENTER sqrt
sqrtl: fldt 4(%esp)
jmp 1f
sqrtf: flds 4(%esp)
jmp 1f
sqrt: fldl 4(%esp)
1: fsqrt
ret
END sqrt
ENTER fabs
fabsl: fldt 4(%esp)
jmp 1f
fabsf: flds 4(%esp)
jmp 1f
fabs: fldl 4(%esp)
1: fabs
ret
END fabs
ENTER atan2
atan2l: fldt 4(%esp)
fldt 16(%esp)
jmp 1f
atan2f: flds 4(%esp)
flds 8(%esp)
jmp 1f
atan2: fldl 4(%esp)
fldl 12(%esp)
1: fpatan
ret
END atan2
ENTER log2
log2l: fldt 4(%esp)
jmp 1f
log2f: flds 4(%esp)
jmp 1f
log2: fldl 4(%esp)
1: fld1
fxch
fyl2x
ret
END log2
ENTER exp2
.type exp2x, @function
exp2l: fldt 4(%esp)
jmp exp2x
exp2f: flds 4(%esp)
jmp exp2x
exp2: fldl 4(%esp)
exp2x: fld %st(0)
frndint
fsubr %st,%st(1)
fxch
f2xm1
fld1
faddp
fscale
fstp %st(1)
ret
END exp2
.size exp2x, . - exp2x
ENTER pow
powl: fldt 16(%esp)
fldt 4(%esp)
jmp 1f
powf: flds 8(%esp)
flds 4(%esp)
jmp 1f
pow: fldl 12(%esp)
fldl 4(%esp)
1: fyl2x
jmp exp2x
END pow
ENTER exp
expl: fldt 4(%esp)
jmp 1f
expf: flds 4(%esp)
jmp 1f
exp: fldl 4(%esp)
1: fldl2e
fmulp
jmp exp2x
END exp