Subversion Repositories HelenOS

Rev

Rev 1787 | Rev 2071 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1787 Rev 1877
Line 24... Line 24...
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
 */
27
 */
28
 
28
 
29
 /** @addtogroup ia64  
29
/** @addtogroup ia64   
30
 * @{
30
 * @{
31
 */
31
 */
32
/** @file
32
/** @file
33
 *
33
 *
34
 */
34
 */
35
 
35
 
36
#include <fpu_context.h>
36
#include <fpu_context.h>
37
#include <arch/register.h>
37
#include <arch/register.h>
38
#include <print.h>
38
#include <print.h>
39
 
39
 
159
   
155
   
160
}
156
}
161
 
157
 
162
 
-
 
163
void fpu_context_restore(fpu_context_t *fctx)
158
void fpu_context_restore(fpu_context_t *fctx)
164
{
159
{
281
}
273
}
282
 
274
 
283
void fpu_enable(void)
275
void fpu_enable(void)
284
{
276
{
285
        uint64_t a = 0 ;
277
    uint64_t a = 0 ;
286
        asm volatile(
-
 
287
            "rsm %0;;"
-
 
288
            "srlz.i\n"
-
 
289
            "srlz.d;;\n"
-
 
290
            :
-
 
291
            :"i" (PSR_DFH_MASK)
-
 
292
        );
-
 
293
        asm volatile
-
 
294
        (
-
 
295
            "mov %0=ar.fpsr;;\n"
-
 
296
            "or %0=%0,%1;;\n"
-
 
297
            "mov ar.fpsr=%0;;\n"
-
 
298
            : "+r" (a)
-
 
299
            : "r" (0x38)
-
 
300
        );
-
 
301
 
278
 
-
 
279
    asm volatile (
-
 
280
        "rsm %0 ;;"
-
 
281
        "srlz.i\n"
-
 
282
        "srlz.d ;;\n"
-
 
283
        :
-
 
284
        : "i" (PSR_DFH_MASK)
-
 
285
    );
-
 
286
 
-
 
287
    asm volatile (
-
 
288
        "mov %0 = ar.fpsr ;;\n"
-
 
289
        "or %0 = %0,%1 ;;\n"
-
 
290
        "mov ar.fpsr = %0 ;;\n"
-
 
291
        : "+r" (a)
-
 
292
        : "r" (0x38)
-
 
293
    );
302
}
294
}
303
 
295
 
304
void fpu_disable(void)
296
void fpu_disable(void)
305
{
297
{
-
 
298
    uint64_t a = 0 ;
306
 
299
 
307
        uint64_t a = 0 ;
-
 
308
        asm volatile(
300
    asm volatile (
309
            "ssm %0;;\n"
301
        "ssm %0 ;;\n"
310
            "srlz.i\n"
302
        "srlz.i\n"
311
            "srlz.d;;\n"
303
        "srlz.d ;;\n"
312
            :
304
        :
313
            :"i" (PSR_DFH_MASK)
305
        : "i" (PSR_DFH_MASK)
314
        );
306
    );
-
 
307
 
315
        asm volatile
308
    asm volatile (
316
        (
-
 
317
            "mov %0=ar.fpsr;;\n"
309
        "mov %0 = ar.fpsr ;;\n"
318
            "or %0=%0,%1;;\n"
310
        "or %0 = %0,%1 ;;\n"
319
            "mov ar.fpsr=%0;;\n"
311
        "mov ar.fpsr = %0 ;;\n"
320
            : "+r" (a)
312
        : "+r" (a)
321
            : "r" (0x38)
313
        : "r" (0x38)
322
        );
314
    );
323
 
-
 
324
}
315
}
325
 
316
 
326
void fpu_init(void)
317
void fpu_init(void)
327
{
318
{
328
        uint64_t a = 0 ;
319
    uint64_t a = 0 ;
329
        asm volatile
-
 
330
        (
-
 
331
            "mov %0=ar.fpsr;;\n"
-
 
332
            "or %0=%0,%1;;\n"
-
 
333
            "mov ar.fpsr=%0;;\n"
-
 
334
            : "+r" (a)
-
 
335
            : "r" (0x38)
-
 
336
        );
-
 
337
 
-
 
338
        asm volatile(
-
 
339
            "mov f2=f0\n"
-
 
340
            "mov f3=f0\n"
-
 
341
            "mov f4=f0\n"
-
 
342
            "mov f5=f0\n"
-
 
343
            "mov f6=f0\n"
-
 
344
            "mov f7=f0\n"
-
 
345
            "mov f8=f0\n"
-
 
346
            "mov f9=f0\n"
-
 
347
 
-
 
348
            "mov f10=f0\n"
-
 
349
            "mov f11=f0\n"
-
 
350
            "mov f12=f0\n"
-
 
351
            "mov f13=f0\n"
-
 
352
            "mov f14=f0\n"
-
 
353
            "mov f15=f0\n"
-
 
354
            "mov f16=f0\n"
-
 
355
            "mov f17=f0\n"
-
 
356
            "mov f18=f0\n"
-
 
357
            "mov f19=f0\n"
-
 
358
 
-
 
359
            "mov f20=f0\n"
-
 
360
            "mov f21=f0\n"
-
 
361
            "mov f22=f0\n"
-
 
362
            "mov f23=f0\n"
-
 
363
            "mov f24=f0\n"
-
 
364
            "mov f25=f0\n"
-
 
365
            "mov f26=f0\n"
-
 
366
            "mov f27=f0\n"
-
 
367
            "mov f28=f0\n"
-
 
368
            "mov f29=f0\n"
-
 
369
 
-
 
370
            "mov f30=f0\n"
-
 
371
            "mov f31=f0\n"
-
 
372
            "mov f32=f0\n"
-
 
373
            "mov f33=f0\n"
-
 
374
            "mov f34=f0\n"
-
 
375
            "mov f35=f0\n"
-
 
376
            "mov f36=f0\n"
-
 
377
            "mov f37=f0\n"
-
 
378
            "mov f38=f0\n"
-
 
379
            "mov f39=f0\n"
-
 
380
 
-
 
381
            "mov f40=f0\n"
-
 
382
            "mov f41=f0\n"
-
 
383
            "mov f42=f0\n"
-
 
384
            "mov f43=f0\n"
-
 
385
            "mov f44=f0\n"
-
 
386
            "mov f45=f0\n"
-
 
387
            "mov f46=f0\n"
-
 
388
            "mov f47=f0\n"
-
 
389
            "mov f48=f0\n"
-
 
390
            "mov f49=f0\n"
-
 
391
 
-
 
392
            "mov f50=f0\n"
-
 
393
            "mov f51=f0\n"
-
 
394
            "mov f52=f0\n"
-
 
395
            "mov f53=f0\n"
-
 
396
            "mov f54=f0\n"
-
 
397
            "mov f55=f0\n"
-
 
398
            "mov f56=f0\n"
-
 
399
            "mov f57=f0\n"
-
 
400
            "mov f58=f0\n"
-
 
401
            "mov f59=f0\n"
-
 
402
 
-
 
403
            "mov f60=f0\n"
-
 
404
            "mov f61=f0\n"
-
 
405
            "mov f62=f0\n"
-
 
406
            "mov f63=f0\n"
-
 
407
            "mov f64=f0\n"
-
 
408
            "mov f65=f0\n"
-
 
409
            "mov f66=f0\n"
-
 
410
            "mov f67=f0\n"
-
 
411
            "mov f68=f0\n"
-
 
412
            "mov f69=f0\n"
-
 
413
 
-
 
414
            "mov f70=f0\n"
-
 
415
            "mov f71=f0\n"
-
 
416
            "mov f72=f0\n"
-
 
417
            "mov f73=f0\n"
-
 
418
            "mov f74=f0\n"
-
 
419
            "mov f75=f0\n"
-
 
420
            "mov f76=f0\n"
-
 
421
            "mov f77=f0\n"
-
 
422
            "mov f78=f0\n"
-
 
423
            "mov f79=f0\n"
-
 
424
 
-
 
425
            "mov f80=f0\n"
-
 
426
            "mov f81=f0\n"
-
 
427
            "mov f82=f0\n"
-
 
428
            "mov f83=f0\n"
-
 
429
            "mov f84=f0\n"
-
 
430
            "mov f85=f0\n"
-
 
431
            "mov f86=f0\n"
-
 
432
            "mov f87=f0\n"
-
 
433
            "mov f88=f0\n"
-
 
434
            "mov f89=f0\n"
-
 
435
 
-
 
436
            "mov f90=f0\n"
-
 
437
            "mov f91=f0\n"
-
 
438
            "mov f92=f0\n"
-
 
439
            "mov f93=f0\n"
-
 
440
            "mov f94=f0\n"
-
 
441
            "mov f95=f0\n"
-
 
442
            "mov f96=f0\n"
-
 
443
            "mov f97=f0\n"
-
 
444
            "mov f98=f0\n"
-
 
445
            "mov f99=f0\n"
-
 
446
 
-
 
447
            "mov f100=f0\n"
-
 
448
            "mov f101=f0\n"
-
 
449
            "mov f102=f0\n"
-
 
450
            "mov f103=f0\n"
-
 
451
            "mov f104=f0\n"
-
 
452
            "mov f105=f0\n"
-
 
453
            "mov f106=f0\n"
-
 
454
            "mov f107=f0\n"
-
 
455
            "mov f108=f0\n"
-
 
456
            "mov f109=f0\n"
-
 
457
 
-
 
458
            "mov f110=f0\n"
-
 
459
            "mov f111=f0\n"
-
 
460
            "mov f112=f0\n"
-
 
461
            "mov f113=f0\n"
-
 
462
            "mov f114=f0\n"
-
 
463
            "mov f115=f0\n"
-
 
464
            "mov f116=f0\n"
-
 
465
            "mov f117=f0\n"
-
 
466
            "mov f118=f0\n"
-
 
467
            "mov f119=f0\n"
-
 
468
 
-
 
469
            "mov f120=f0\n"
-
 
470
            "mov f121=f0\n"
-
 
471
            "mov f122=f0\n"
-
 
472
            "mov f123=f0\n"
-
 
473
            "mov f124=f0\n"
-
 
474
            "mov f125=f0\n"
-
 
475
            "mov f126=f0\n"
-
 
476
            "mov f127=f0\n"
-
 
477
 
320
 
-
 
321
    asm volatile (
-
 
322
        "mov %0 = ar.fpsr ;;\n"
-
 
323
        "or %0 = %0,%1 ;;\n"
-
 
324
        "mov ar.fpsr = %0 ;;\n"
-
 
325
        : "+r" (a)
-
 
326
        : "r" (0x38)
-
 
327
    );
-
 
328
 
-
 
329
    asm volatile (
-
 
330
        "mov f2 = f0\n"
-
 
331
        "mov f3 = f0\n"
-
 
332
        "mov f4 = f0\n"
-
 
333
        "mov f5 = f0\n"
-
 
334
        "mov f6 = f0\n"
-
 
335
        "mov f7 = f0\n"
-
 
336
        "mov f8 = f0\n"
-
 
337
        "mov f9 = f0\n"
-
 
338
 
-
 
339
        "mov f10 = f0\n"
-
 
340
        "mov f11 = f0\n"
-
 
341
        "mov f12 = f0\n"
-
 
342
        "mov f13 = f0\n"
-
 
343
        "mov f14 = f0\n"
-
 
344
        "mov f15 = f0\n"
-
 
345
        "mov f16 = f0\n"
-
 
346
        "mov f17 = f0\n"
-
 
347
        "mov f18 = f0\n"
-
 
348
        "mov f19 = f0\n"
-
 
349
 
-
 
350
        "mov f20 = f0\n"
-
 
351
        "mov f21 = f0\n"
-
 
352
        "mov f22 = f0\n"
-
 
353
        "mov f23 = f0\n"
-
 
354
        "mov f24 = f0\n"
-
 
355
        "mov f25 = f0\n"
-
 
356
        "mov f26 = f0\n"
-
 
357
        "mov f27 = f0\n"
-
 
358
        "mov f28 = f0\n"
-
 
359
        "mov f29 = f0\n"
-
 
360
 
-
 
361
        "mov f30 = f0\n"
-
 
362
        "mov f31 = f0\n"
-
 
363
        "mov f32 = f0\n"
-
 
364
        "mov f33 = f0\n"
-
 
365
        "mov f34 = f0\n"
-
 
366
        "mov f35 = f0\n"
-
 
367
        "mov f36 = f0\n"
-
 
368
        "mov f37 = f0\n"
-
 
369
        "mov f38 = f0\n"
-
 
370
        "mov f39 = f0\n"
-
 
371
 
-
 
372
        "mov f40 = f0\n"
-
 
373
        "mov f41 = f0\n"
-
 
374
        "mov f42 = f0\n"
-
 
375
        "mov f43 = f0\n"
-
 
376
        "mov f44 = f0\n"
-
 
377
        "mov f45 = f0\n"
-
 
378
        "mov f46 = f0\n"
-
 
379
        "mov f47 = f0\n"
-
 
380
        "mov f48 = f0\n"
-
 
381
        "mov f49 = f0\n"
-
 
382
 
-
 
383
        "mov f50 = f0\n"
-
 
384
        "mov f51 = f0\n"
-
 
385
        "mov f52 = f0\n"
-
 
386
        "mov f53 = f0\n"
-
 
387
        "mov f54 = f0\n"
-
 
388
        "mov f55 = f0\n"
-
 
389
        "mov f56 = f0\n"
-
 
390
        "mov f57 = f0\n"
-
 
391
        "mov f58 = f0\n"
-
 
392
        "mov f59 = f0\n"
-
 
393
 
-
 
394
        "mov f60 = f0\n"
-
 
395
        "mov f61 = f0\n"
-
 
396
        "mov f62 = f0\n"
-
 
397
        "mov f63 = f0\n"
-
 
398
        "mov f64 = f0\n"
-
 
399
        "mov f65 = f0\n"
-
 
400
        "mov f66 = f0\n"
-
 
401
        "mov f67 = f0\n"
-
 
402
        "mov f68 = f0\n"
-
 
403
        "mov f69 = f0\n"
-
 
404
 
-
 
405
        "mov f70 = f0\n"
-
 
406
        "mov f71 = f0\n"
-
 
407
        "mov f72 = f0\n"
-
 
408
        "mov f73 = f0\n"
-
 
409
        "mov f74 = f0\n"
-
 
410
        "mov f75 = f0\n"
-
 
411
        "mov f76 = f0\n"
-
 
412
        "mov f77 = f0\n"
-
 
413
        "mov f78 = f0\n"
-
 
414
        "mov f79 = f0\n"
-
 
415
 
-
 
416
        "mov f80 = f0\n"
-
 
417
        "mov f81 = f0\n"
-
 
418
        "mov f82 = f0\n"
-
 
419
        "mov f83 = f0\n"
-
 
420
        "mov f84 = f0\n"
-
 
421
        "mov f85 = f0\n"
-
 
422
        "mov f86 = f0\n"
-
 
423
        "mov f87 = f0\n"
-
 
424
        "mov f88 = f0\n"
-
 
425
        "mov f89 = f0\n"
-
 
426
 
-
 
427
        "mov f90 = f0\n"
-
 
428
        "mov f91 = f0\n"
-
 
429
        "mov f92 = f0\n"
-
 
430
        "mov f93 = f0\n"
-
 
431
        "mov f94 = f0\n"
-
 
432
        "mov f95 = f0\n"
-
 
433
        "mov f96 = f0\n"
-
 
434
        "mov f97 = f0\n"
-
 
435
        "mov f98 = f0\n"
-
 
436
        "mov f99 = f0\n"
-
 
437
 
-
 
438
        "mov f100 = f0\n"
-
 
439
        "mov f101 = f0\n"
-
 
440
        "mov f102 = f0\n"
-
 
441
        "mov f103 = f0\n"
-
 
442
        "mov f104 = f0\n"
-
 
443
        "mov f105 = f0\n"
-
 
444
        "mov f106 = f0\n"
-
 
445
        "mov f107 = f0\n"
-
 
446
        "mov f108 = f0\n"
-
 
447
        "mov f109 = f0\n"
-
 
448
 
-
 
449
        "mov f110 = f0\n"
-
 
450
        "mov f111 = f0\n"
-
 
451
        "mov f112 = f0\n"
-
 
452
        "mov f113 = f0\n"
-
 
453
        "mov f114 = f0\n"
-
 
454
        "mov f115 = f0\n"
-
 
455
        "mov f116 = f0\n"
-
 
456
        "mov f117 = f0\n"
-
 
457
        "mov f118 = f0\n"
-
 
458
        "mov f119 = f0\n"
-
 
459
 
-
 
460
        "mov f120 = f0\n"
-
 
461
        "mov f121 = f0\n"
-
 
462
        "mov f122 = f0\n"
-
 
463
        "mov f123 = f0\n"
-
 
464
        "mov f124 = f0\n"
-
 
465
        "mov f125 = f0\n"
-
 
466
        "mov f126 = f0\n"
-
 
467
        "mov f127 = f0\n"
478
        );
468
    );
479
 
469
 
480
}
470
}
481
 
471
 
482
 
-
 
483
 /** @}
472
/** @}
484
 */
473
 */
485
 
-