linux/arch/ia64/include/asm/native/inst.h
<<
>>
Prefs
   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