hc
2024-03-22 ac5f19e89dcbd5c7428fcc78a0d407c887564466
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
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _SPARC64_HEAD_H
#define _SPARC64_HEAD_H
 
#include <asm/pstate.h>
 
   /* wrpr    %g0, val, %gl */
#define SET_GL(val)    \
   .word    0xa1902000 | val
 
   /* rdpr %gl, %gN */
#define GET_GL_GLOBAL(N)    \
   .word    0x81540000 | (N << 25)
 
#define KERNBASE    0x400000
 
#define    PTREGS_OFF    (STACK_BIAS + STACKFRAME_SZ)
 
#define    RTRAP_PSTATE        (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_IE)
#define    RTRAP_PSTATE_IRQOFF    (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV)
#define RTRAP_PSTATE_AG_IRQOFF    (PSTATE_TSO|PSTATE_PEF|PSTATE_PRIV|PSTATE_AG)
 
#define __CHEETAH_ID    0x003e0014
#define __JALAPENO_ID    0x003e0016
#define __SERRANO_ID    0x003e0022
 
#define CHEETAH_MANUF        0x003e
#define CHEETAH_IMPL        0x0014 /* Ultra-III   */
#define CHEETAH_PLUS_IMPL    0x0015 /* Ultra-III+  */
#define JALAPENO_IMPL        0x0016 /* Ultra-IIIi  */
#define JAGUAR_IMPL        0x0018 /* Ultra-IV    */
#define PANTHER_IMPL        0x0019 /* Ultra-IV+   */
#define SERRANO_IMPL        0x0022 /* Ultra-IIIi+ */
 
#define BRANCH_IF_SUN4V(tmp1,label)        \
   sethi    %hi(is_sun4v), %tmp1;        \
   lduw    [%tmp1 + %lo(is_sun4v)], %tmp1; \
   brnz,pn    %tmp1, label;            \
    nop
 
#define BRANCH_IF_CHEETAH_BASE(tmp1,tmp2,label)    \
   rdpr    %ver, %tmp1;            \
   sethi    %hi(__CHEETAH_ID), %tmp2;    \
   srlx    %tmp1, 32, %tmp1;        \
   or    %tmp2, %lo(__CHEETAH_ID), %tmp2;\
   cmp    %tmp1, %tmp2;            \
   be,pn    %icc, label;            \
    nop;
 
#define BRANCH_IF_JALAPENO(tmp1,tmp2,label)    \
   rdpr    %ver, %tmp1;            \
   sethi    %hi(__JALAPENO_ID), %tmp2;    \
   srlx    %tmp1, 32, %tmp1;        \
   or    %tmp2, %lo(__JALAPENO_ID), %tmp2;\
   cmp    %tmp1, %tmp2;            \
   be,pn    %icc, label;            \
    nop;
 
#define BRANCH_IF_CHEETAH_PLUS_OR_FOLLOWON(tmp1,tmp2,label)    \
   rdpr    %ver, %tmp1;            \
   srlx    %tmp1, (32 + 16), %tmp2;    \
   cmp    %tmp2, CHEETAH_MANUF;        \
   bne,pt    %xcc, 99f;            \
    sllx    %tmp1, 16, %tmp1;        \
   srlx    %tmp1, (32 + 16), %tmp2;    \
   cmp    %tmp2, CHEETAH_PLUS_IMPL;    \
   bgeu,pt    %xcc, label;            \
99:     nop;
 
#define BRANCH_IF_ANY_CHEETAH(tmp1,tmp2,label)    \
   rdpr    %ver, %tmp1;            \
   srlx    %tmp1, (32 + 16), %tmp2;    \
   cmp    %tmp2, CHEETAH_MANUF;        \
   bne,pt    %xcc, 99f;            \
    sllx    %tmp1, 16, %tmp1;        \
   srlx    %tmp1, (32 + 16), %tmp2;    \
   cmp    %tmp2, CHEETAH_IMPL;        \
   bgeu,pt    %xcc, label;            \
99:     nop;
 
#endif /* !(_SPARC64_HEAD_H) */