OpenCores
URL https://opencores.org/ocsvn/mips_enhanced/mips_enhanced/trunk

Subversion Repositories mips_enhanced

[/] [mips_enhanced/] [trunk/] [grlib-gpl-1.0.19-b3188/] [software/] [leon3/] [grfpu_ops.S] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 dimamali
/**********************************************************************/
2
/*  This file is a part of the GRFPU IP core testbench                */
3
/*  Copyright (C) 2004  Gaisler Research AB                           */
4
/*  ALL RIGHTS RESERVED                                               */
5
/*                                                                    */
6
/**********************************************************************/
7
 
8
/* #include "leon" */
9
 
10
 
11
!  %i0  : operand 1
12
!  %i1  : operand 1
13
!  %i2  : result
14
!  %o0  : 0 - OK, 1 - error
15
 
16
        .text
17
        .align 4
18
        .global grfpu_fdivs, grfpu_fdivd, grfpu_sqrtd, grfpu_ttrap
19
        .global divident, divromtst
20
        .global grfpu_faddd
21
        .global grfpu_fmuld
22
        .global grfpu_fstoi, grfpu_fdtoi, grfpu_fitos, grfpu_fitod
23
        .global grfpu_fstod, grfpu_fdtos
24
        .global grfpu_fnegs, grfpu_fmovs, grfpu_fabss
25
        .global grfpu_fcmpd, grfpu_fcmped, grfpu_fcmps, grfpu_fcmpes
26
        .global grfpu_fsubd, grfpu_fadds, grfpu_fsubs, grfpu_fmuls
27
        .global grfpu_fdivs, grfpu_fsqrts, initfpreg
28
        .global grfpc_dpdep_tst, grfpc_spdep_tst, grfpc_spdpdep_tst
29
        .global get_tbr, fptrap
30
 
31
 
32
grfpu_faddd:
33
        ldd     [%o0], %f0
34
        ldd     [%o1], %f2
35
        faddd   %f0, %f2, %f4
36
        retl
37
        std     %f4, [%o2]
38
 
39
 
40
grfpu_fmuld:
41
        ldd     [%o0], %f0
42
        ldd     [%o1], %f2
43
        fmuld   %f0, %f2, %f4
44
        retl
45
        std     %f4, [%o2]
46
 
47
 
48
grfpu_fdivd:
49
        ldd  [%o0], %f0
50
        ldd  [%o1], %f2
51
        fdivd %f0, %f2, %f4
52
        std  %f4, [%o2]
53
        retl
54
        nop
55
 
56
grfpu_sqrtd:
57
        ldd [%o0], %f0
58
        fsqrtd %f0, %f2
59
        std %f2, [%o1]
60
        retl
61
        nop
62
 
63
grfpu_ttrap:
64
        nop; nop; nop; nop; nop; nop; nop; nop;
65
        nop; nop; nop; nop; nop; nop; nop; nop;
66
        nop; nop; nop; nop; nop; nop; nop; nop;
67
        nop; nop; nop; nop; nop; nop; nop; nop;
68
        fmovs %f0, %f0
69
        retl
70
        nop
71
 
72
divident:
73
        ldd  [%o0], %f0
74
        retl
75
        nop
76
 
77
divromtst:
78
        ldd     [%o0], %f2
79
        fdivd   %f0, %f2, %f4
80
        std     %f4, [%o1]
81
        retl
82
        nop
83
 
84
 
85
grfpu_fitod:
86
        set     dw, %o1
87
        st      %o0, [%o1]
88
        ld      [%o1], %f0
89
        fitod   %f0, %f2
90
        std     %f2, [%o1]
91
        retl
92
        ldd     [%o1], %o0
93
 
94
grfpu_fitos:
95
        set     dw, %o1
96
        st      %o0, [%o1]
97
        ld      [%o1], %f0
98
        fitos   %f0, %f2
99
        st      %f2, [%o1]
100
        retl
101
        ld      [%o1], %o0
102
 
103
grfpu_fdtoi:
104
        set     dw, %o2
105
        std     %o0, [%o2]
106
        ldd     [%o2], %f0
107
        fdtoi   %f0, %f2
108
        st      %f2, [%o2]
109
        retl
110
        ld      [%o2], %o0
111
 
112
grfpu_fstoi:
113
        set     dw, %o2
114
        st      %o0, [%o2]
115
        ld      [%o2], %f0
116
        fstoi   %f0, %f2
117
        st      %f2, [%o2]
118
        retl
119
        ld      [%o2], %o0
120
 
121
grfpu_fstod:
122
        set     dw, %o2
123
        st      %o0, [%o2]
124
        ld      [%o2], %f0
125
        fstod   %f0, %f0
126
        std     %f0, [%o2]
127
        retl
128
        ldd     [%o2], %o0
129
 
130
grfpu_fdtos:
131
        set     dw, %o2
132
        std     %o0, [%o2]
133
        ldd     [%o2], %f0
134
        fdtos   %f0, %f0
135
        st      %f0, [%o2]
136
        retl
137
        ld      [%o2], %o0
138
 
139
grfpu_fmovs:
140
        set     dw, %o2
141
        st      %o0, [%o2]
142
        ld      [%o2], %f5
143
        fmovs   %f5, %f6
144
        st      %f6, [%o2]
145
        retl
146
        ld      [%o2], %o0
147
 
148
 
149
grfpu_fnegs:
150
        set     dw, %o2
151
        st      %o0, [%o2]
152
        ld      [%o2], %f5
153
        fnegs   %f5, %f6
154
        st      %f6, [%o2]
155
        retl
156
        ld      [%o2], %o0
157
 
158
grfpu_fabss:
159
        set     dw, %o2
160
        st      %o0, [%o2]
161
        ld      [%o2], %f5
162
        fabss   %f5, %f6
163
        st      %f6, [%o2]
164
        retl
165
        ld      [%o2], %o0
166
 
167
grfpu_fcmpd:
168
        set     dw, %o4
169
        std     %o0, [%o4]
170
        std     %o2, [%o4+8]
171
        ldd     [%o4], %f0
172
        ldd     [%o4+8], %f2
173
        fcmpd   %f0, %f2
174
        nop
175
        fbe,a   cmpd_end
176
        mov     0, %o0
177
        fbl,a   cmpd_end
178
        mov     1, %o0
179
        fbg,a   cmpd_end
180
        mov     2, %o0
181
        fbu,a   cmpd_end
182
        mov     3, %o0
183
        ta      0x0     !error
184
cmpd_end:
185
        retl
186
        nop
187
 
188
 
189
grfpu_fcmped:
190
        set     dw, %o4
191
        std     %o0, [%o4]
192
        std     %o2, [%o4+8]
193
        ldd     [%o4], %f0
194
        ldd     [%o4+8], %f2
195
        fcmped  %f0, %f2
196
        nop
197
        fbe,a   cmpd_end
198
        mov     0, %o0
199
        fbl,a   cmpd_end
200
        mov     1, %o0
201
        fbg,a   cmpd_end
202
        mov     2, %o0
203
        fbu,a   cmpd_end
204
        mov     3, %o0
205
        ta      0x0     !error
206
 
207
 
208
grfpu_fcmps:
209
        set     dw, %o4
210
        st      %o0, [%o4]
211
        st      %o1, [%o4+8]
212
        ld      [%o4], %f0
213
        ld      [%o4+8], %f1
214
        fcmps   %f0, %f1
215
        nop
216
        fbe,a   cmpd_end
217
        mov     0, %o0
218
        fbl,a   cmpd_end
219
        mov     1, %o0
220
        fbg,a   cmpd_end
221
        mov     2, %o0
222
        fbu,a   cmpd_end
223
        mov     3, %o0
224
        ta      0x0     !error
225
 
226
grfpu_fcmpes:
227
        set     dw, %o4
228
        st      %o0, [%o4]
229
        st      %o1, [%o4+8]
230
        ld      [%o4], %f0
231
        ld      [%o4+8], %f1
232
        fcmpes  %f0, %f1
233
        nop
234
        fbe,a   cmpd_end
235
        mov     0, %o0
236
        fbl,a   cmpd_end
237
        mov     1, %o0
238
        fbg,a   cmpd_end
239
        mov     2, %o0
240
        fbu,a   cmpd_end
241
        mov     3, %o0
242
        ta      0x0     !error
243
 
244
grfpu_fsubd:
245
        set     dw, %o4
246
        std     %o0, [%o4]
247
        std     %o2, [%o4+8]
248
        ldd     [%o4], %f0
249
        ldd     [%o4+8], %f2
250
        fsubd   %f0, %f2, %f4
251
        std     %f4, [%o4]
252
        retl
253
        ldd     [%o4], %o0
254
 
255
grfpu_fadds:
256
        set     dw, %o4
257
        st      %o0, [%o4]
258
        st      %o1, [%o4+8]
259
        ld      [%o4], %f0
260
        ld      [%o4+8], %f1
261
        fadds   %f0, %f1, %f2
262
        st      %f2, [%o4]
263
        retl
264
        ld      [%o4], %o0
265
 
266
grfpu_fsubs:
267
        set     dw, %o4
268
        st      %o0, [%o4]
269
        st      %o1, [%o4+8]
270
        ld      [%o4], %f0
271
        ld      [%o4+8], %f1
272
        fsubs   %f0, %f1, %f2
273
        st      %f2, [%o4]
274
        retl
275
        ld      [%o4], %o0
276
 
277
grfpu_fmuls:
278
        set     dw, %o4
279
        st      %o0, [%o4]
280
        st      %o1, [%o4+8]
281
        ld      [%o4], %f0
282
        ld      [%o4+8], %f1
283
        fmuls   %f0, %f1, %f2
284
        st      %f2, [%o4]
285
        retl
286
        ld      [%o4], %o0
287
 
288
grfpu_fdivs:
289
        set     dw, %o4
290
        st      %o0, [%o4]
291
        st      %o1, [%o4+8]
292
        ld      [%o4], %f0
293
        ld      [%o4+8], %f1
294
        fdivs   %f0, %f1, %f2
295
        st      %f2, [%o4]
296
        retl
297
        ld      [%o4], %o0
298
 
299
grfpu_fsqrts:
300
        set     dw, %o4
301
        st      %o0, [%o4]
302
        ld      [%o4], %f0
303
        fsqrts  %f0, %f1
304
        st      %f1, [%o4]
305
        retl
306
        ld      [%o4], %o0
307
 
308
grfpc_dpdep_tst:
309
        set     dpbuf, %o1
310
        ldd     [%o1+8], %f2
311
        ldd     [%o1], %f0
312
        faddd   %f0, %f0, %f4   ! 1 + 1 = 2
313
        fsubd   %f4, %f2, %f8   ! 2 - 3 = -1
314
        fdivd   %f8, %f4, %f10  ! -1 / 2 = -0.5
315
        fmuld   %f10, %f2, %f10 ! -0.5 * 3 = -1.5
316
        retl
317
        std     %f10, [%o0]
318
 
319
grfpc_spdep_tst:
320
        set     spbuf, %o1
321
        ld      [%o1], %f0
322
        ld      [%o1+4], %f1
323
        fadds   %f0, %f0, %f2   ! 1 + 1 = 2
324
        fsubs   %f2, %f1, %f3   ! 2 - 3 = -1
325
        fdivs   %f3, %f2, %f4   ! -1 / 2 = -0.5
326
        fmuls   %f4, %f1, %f4   ! -0.5 * 3 = -1.5
327
        retl
328
        st      %f4, [%o0]
329
 
330
grfpc_spdpdep_tst:
331
        set     dpbuf, %o1
332
        set     spbuf, %o2
333
        ld      [%o2], %f0
334
        ldd     [%o1+16], %f2
335
        fadds   %f0, %f0, %f1   ! 1 + 1 = 2
336
        fsubd   %f2, %f0, %f4   !
337
        fdivs   %f4, %f1, %f5   !
338
        fmuld   %f4, %f2, %f6   !
339
        fmuls   %f5, %f6, %f7
340
        fsqrtd  %f6, %f8
341
        retl
342
        std     %f8, [%o0]
343
 
344
initfpreg:
345
        set zbuf, %o0
346
        ldd [%o0], %f0
347
        ldd [%o0], %f2
348
        ldd [%o0], %f4
349
        ldd [%o0], %f6
350
        ldd [%o0], %f8
351
        ldd [%o0], %f10
352
        ldd [%o0], %f12
353
        ldd [%o0], %f14
354
        ldd [%o0], %f16
355
        ldd [%o0], %f18
356
        ldd [%o0], %f20
357
        ldd [%o0], %f22
358
        ldd [%o0], %f24
359
        ldd [%o0], %f26
360
        ldd [%o0], %f28
361
        ldd [%o0], %f30
362
        retl
363
        nop
364
 
365
fptrap:
366
        set     fsr1, %l4
367
 
368
        set     tfsr, %l3
369
        st      %fsr, [%l3]
370
        ld      [%l3], %l3
371
        srl     %l3, 14, %l0
372
        and     %l0, 7, %l0
373
        subcc   %l0, 2, %l0     ! %l0 = 0 if unfFPop trap, 1 otherwise
374
        set     0, %l7          ! %l7 = nr of instr. in FQ
375
        !be     _skip
376
        !nop
377
        set     grfpufq-8, %l6
378
1:
379
        add     %l7, 1, %l7
380
        add     %l6, 8, %l6
381
        std     %fq, [%l6]
382
        st      %fsr, [%l4]
383
        ld      [%l4], %l5
384
        srl     %l5, 13, %l5
385
        andcc   %l5, 1, %l5
386
        bne     1b
387
        nop
388
        !std    %fq, [%l3]
389
        !jmpl   %l2, %g0
390
        !rett   %l2 + 4
391
        !subcc  %l0, %g0, %g0
392
        !be     _skip
393
        !nop
394
 
395
        addcc   %g0, %l0, %g0
396
        be      _skip
397
        set     0xf07fffff, %l5
398
        and     %l3, %l5, %l3
399
        st      %l3, [%l4]
400
        ld      [%l4], %fsr      ! disable exceptions
401
        set     grfpufq+4, %l5
402
        set     fpreex, %l6
403
2:      dec     %l7
404
        ld      [%l5], %l0
405
        st      %l0, [%l6]
406
        flush
407
        nop; nop; nop; nop; nop;
408
        nop; nop; nop; nop; nop;
409
        nop; nop; nop; nop; nop;
410
        nop; nop; nop; nop; nop;
411
fpreex: .word 0
412
        subcc   %l7, %g0, %g0
413
        bne     2b
414
        add     %l5, 8, %l5
415
        st      %fsr, [%l4]
416
        ld      [%l4], %l3
417
        set     0x0f000000, %l5
418
        or      %l3, %l5, %l3
419
        st      %l3, [%l4]
420
        ld      [%l4], %fsr     ! enable exceptions
421
        jmpl    %l1, %g0
422
        rett    %l2
423
        nop
424
_skip:
425
        jmpl    %l2, %g0
426
        rett    %l2 + 4
427
        nop
428
        nop
429
 
430
get_tbr:
431
        retl
432
        mov %tbr, %o0
433
 
434
        .data
435
        .align 8
436
        .global tfsr, grfpufq
437
dw:     .word 0
438
        .word 0
439
        .word 0
440
        .word 0
441
 
442
zbuf:   .word 0
443
        .word 0
444
 
445
dpbuf:  .word 0x3ff00000
446
        .word 0x00000000
447
        .word 0x40080000
448
        .word 0x00000000
449
        .word 0x3ff00000
450
        .word 0x40000000
451
        .word 0x0
452
        .word 0x0
453
spbuf:  .word 0x3f800000
454
        .word 0x40400000
455
        .word 0x0
456
        .word 0x0
457
 
458
tfsr:   .word 0
459
        .word 0
460
grfpufq:
461
        .word 0
462
        .word 0
463
        .word 0
464
        .word 0
465
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.