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 195