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

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [include/] [asm-sparc64/] [visasm.h] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1276 phoenix
/* $Id: visasm.h,v 1.1.1.1 2004-04-15 03:00:53 phoenix Exp $ */
2
#ifndef _SPARC64_VISASM_H
3
#define _SPARC64_VISASM_H
4
 
5
/* visasm.h:  FPU saving macros for VIS routines
6
 *
7
 * Copyright (C) 1998 Jakub Jelinek (jj@ultra.linux.cz)
8
 */
9
 
10
#include <asm/pstate.h>
11
#include <asm/ptrace.h>
12
 
13
#define AOFF_task_fpregs        (((ASIZ_task) + (64 - 1)) & ~(64 - 1))
14
 
15
/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc */
16
 
17
#define VISEntry                                        \
18
        rd              %fprs, %o5;                     \
19
        andcc           %o5, (FPRS_FEF|FPRS_DU), %g0;   \
20
        be,pt           %icc, 297f;                     \
21
         sethi          %hi(297f), %g7;                 \
22
        sethi           %hi(VISenter), %g1;             \
23
        jmpl            %g1 + %lo(VISenter), %g0;       \
24
         or             %g7, %lo(297f), %g7;            \
25
297:    wr              %g0, FPRS_FEF, %fprs;           \
26
 
27
#define VISExit                                         \
28
        wr              %g0, 0, %fprs;
29
 
30
/* Clobbers %o5, %g1, %g2, %g3, %g7, %icc, %xcc.
31
 * Must preserve %o5 between VISEntryHalf and VISExitHalf */
32
 
33
#define VISEntryHalf                                    \
34
        rd              %fprs, %o5;                     \
35
        andcc           %o5, FPRS_FEF, %g0;             \
36
        be,pt           %icc, 297f;                     \
37
         sethi          %hi(298f), %g7;                 \
38
        sethi           %hi(VISenterhalf), %g1;         \
39
        jmpl            %g1 + %lo(VISenterhalf), %g0;   \
40
         or             %g7, %lo(298f), %g7;            \
41
        clr             %o5;                            \
42
297:    wr              %o5, FPRS_FEF, %fprs;           \
43
298:
44
 
45
#define VISExitHalf                                     \
46
        wr              %o5, 0, %fprs;
47
 
48
#ifndef __ASSEMBLY__    
49
extern __inline__ void save_and_clear_fpu(void) {
50
        __asm__ __volatile__ (
51
"               rd %%fprs, %%o5\n"
52
"               andcc %%o5, %0, %%g0\n"
53
"               be,pt %%icc, 299f\n"
54
"                sethi %%hi(298f), %%g7\n"
55
"               sethi %%hi(VISenter), %%g1\n"
56
"               jmpl %%g1 + %%lo(VISenter), %%g0\n"
57
"                or %%g7, %%lo(298f), %%g7\n"
58
"       298:    wr %%g0, 0, %%fprs\n"
59
"       299:\n"
60
"               " : : "i" (FPRS_FEF|FPRS_DU) :
61
                "o5", "g1", "g2", "g3", "g7", "cc");
62
}
63
#endif
64
 
65
#endif /* _SPARC64_ASI_H */

powered by: WebSVN 2.1.0

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