Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / arch / ia64 / include / asm / native / inst.h
1 /******************************************************************************
2  * arch/ia64/include/asm/native/inst.h
3  *
4  * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
5  *                    VA Linux Systems Japan K.K.
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
20  *
21  */
22
23 #define DO_SAVE_MIN             IA64_NATIVE_DO_SAVE_MIN
24
25 #define __paravirt_switch_to                    ia64_native_switch_to
26 #define __paravirt_leave_syscall                ia64_native_leave_syscall
27 #define __paravirt_work_processed_syscall       ia64_native_work_processed_syscall
28 #define __paravirt_leave_kernel                 ia64_native_leave_kernel
29 #define __paravirt_pending_syscall_end          ia64_work_pending_syscall_end
30 #define __paravirt_work_processed_syscall_target \
31                                                 ia64_work_processed_syscall
32
33 #define paravirt_fsyscall_table                 ia64_native_fsyscall_table
34 #define paravirt_fsys_bubble_down               ia64_native_fsys_bubble_down
35
36 #ifdef CONFIG_PARAVIRT_GUEST_ASM_CLOBBER_CHECK
37 # define PARAVIRT_POISON        0xdeadbeefbaadf00d
38 # define CLOBBER(clob)                          \
39         ;;                                      \
40         movl clob = PARAVIRT_POISON;            \
41         ;;
42 # define CLOBBER_PRED(pred_clob)                \
43         ;;                                      \
44         cmp.eq pred_clob, p0 = r0, r0           \
45         ;;
46 #else
47 # define CLOBBER(clob)                  /* nothing */
48 # define CLOBBER_PRED(pred_clob)        /* nothing */
49 #endif
50
51 #define MOV_FROM_IFA(reg)       \
52         mov reg = cr.ifa
53
54 #define MOV_FROM_ITIR(reg)      \
55         mov reg = cr.itir
56
57 #define MOV_FROM_ISR(reg)       \
58         mov reg = cr.isr
59
60 #define MOV_FROM_IHA(reg)       \
61         mov reg = cr.iha
62
63 #define MOV_FROM_IPSR(pred, reg)        \
64 (pred)  mov reg = cr.ipsr
65
66 #define MOV_FROM_IIM(reg)       \
67         mov reg = cr.iim
68
69 #define MOV_FROM_IIP(reg)       \
70         mov reg = cr.iip
71
72 #define MOV_FROM_IVR(reg, clob) \
73         mov reg = cr.ivr        \
74         CLOBBER(clob)
75
76 #define MOV_FROM_PSR(pred, reg, clob)   \
77 (pred)  mov reg = psr                   \
78         CLOBBER(clob)
79
80 #define MOV_FROM_ITC(pred, pred_clob, reg, clob)        \
81 (pred)  mov reg = ar.itc                                \
82         CLOBBER(clob)                                   \
83         CLOBBER_PRED(pred_clob)
84
85 #define MOV_TO_IFA(reg, clob)   \
86         mov cr.ifa = reg        \
87         CLOBBER(clob)
88
89 #define MOV_TO_ITIR(pred, reg, clob)    \
90 (pred)  mov cr.itir = reg               \
91         CLOBBER(clob)
92
93 #define MOV_TO_IHA(pred, reg, clob)     \
94 (pred)  mov cr.iha = reg                \
95         CLOBBER(clob)
96
97 #define MOV_TO_IPSR(pred, reg, clob)            \
98 (pred)  mov cr.ipsr = reg                       \
99         CLOBBER(clob)
100
101 #define MOV_TO_IFS(pred, reg, clob)     \
102 (pred)  mov cr.ifs = reg                \
103         CLOBBER(clob)
104
105 #define MOV_TO_IIP(reg, clob)   \
106         mov cr.iip = reg        \
107         CLOBBER(clob)
108
109 #define MOV_TO_KR(kr, reg, clob0, clob1)        \
110         mov IA64_KR(kr) = reg                   \
111         CLOBBER(clob0)                          \
112         CLOBBER(clob1)
113
114 #define ITC_I(pred, reg, clob)  \
115 (pred)  itc.i reg               \
116         CLOBBER(clob)
117
118 #define ITC_D(pred, reg, clob)  \
119 (pred)  itc.d reg               \
120         CLOBBER(clob)
121
122 #define ITC_I_AND_D(pred_i, pred_d, reg, clob)  \
123 (pred_i) itc.i reg;                             \
124 (pred_d) itc.d reg                              \
125         CLOBBER(clob)
126
127 #define THASH(pred, reg0, reg1, clob)           \
128 (pred)  thash reg0 = reg1                       \
129         CLOBBER(clob)
130
131 #define SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(clob0, clob1)            \
132         ssm psr.ic | PSR_DEFAULT_BITS                                   \
133         CLOBBER(clob0)                                                  \
134         CLOBBER(clob1)                                                  \
135         ;;                                                              \
136         srlz.i /* guarantee that interruption collectin is on */        \
137         ;;
138
139 #define SSM_PSR_IC_AND_SRLZ_D(clob0, clob1)     \
140         ssm psr.ic                              \
141         CLOBBER(clob0)                          \
142         CLOBBER(clob1)                          \
143         ;;                                      \
144         srlz.d
145
146 #define RSM_PSR_IC(clob)        \
147         rsm psr.ic              \
148         CLOBBER(clob)
149
150 #define SSM_PSR_I(pred, pred_clob, clob)        \
151 (pred)  ssm psr.i                               \
152         CLOBBER(clob)                           \
153         CLOBBER_PRED(pred_clob)
154
155 #define RSM_PSR_I(pred, clob0, clob1)   \
156 (pred)  rsm psr.i                       \
157         CLOBBER(clob0)                  \
158         CLOBBER(clob1)
159
160 #define RSM_PSR_I_IC(clob0, clob1, clob2)       \
161         rsm psr.i | psr.ic                      \
162         CLOBBER(clob0)                          \
163         CLOBBER(clob1)                          \
164         CLOBBER(clob2)
165
166 #define RSM_PSR_DT              \
167         rsm psr.dt
168
169 #define RSM_PSR_BE_I(clob0, clob1)      \
170         rsm psr.be | psr.i              \
171         CLOBBER(clob0)                  \
172         CLOBBER(clob1)
173
174 #define SSM_PSR_DT_AND_SRLZ_I   \
175         ssm psr.dt              \
176         ;;                      \
177         srlz.i
178
179 #define BSW_0(clob0, clob1, clob2)      \
180         bsw.0                           \
181         CLOBBER(clob0)                  \
182         CLOBBER(clob1)                  \
183         CLOBBER(clob2)
184
185 #define BSW_1(clob0, clob1)     \
186         bsw.1                   \
187         CLOBBER(clob0)          \
188         CLOBBER(clob1)
189
190 #define COVER   \
191         cover
192
193 #define RFI     \
194         rfi