Logo Search packages:      
Sourcecode: linux version File versions  Download package

inst.h

/******************************************************************************
 * arch/ia64/include/asm/native/inst.h
 *
 * Copyright (c) 2008 Isaku Yamahata <yamahata at valinux co jp>
 *                    VA Linux Systems Japan K.K.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */

#define DO_SAVE_MIN           IA64_NATIVE_DO_SAVE_MIN

#define __paravirt_switch_to              ia64_native_switch_to
#define __paravirt_leave_syscall          ia64_native_leave_syscall
#define __paravirt_work_processed_syscall ia64_native_work_processed_syscall
#define __paravirt_leave_kernel                 ia64_native_leave_kernel
#define __paravirt_pending_syscall_end          ia64_work_pending_syscall_end
#define __paravirt_work_processed_syscall_target \
                                    ia64_work_processed_syscall

#define paravirt_fsyscall_table                 ia64_native_fsyscall_table
#define paravirt_fsys_bubble_down         ia64_native_fsys_bubble_down

#ifdef CONFIG_PARAVIRT_GUEST_ASM_CLOBBER_CHECK
# define PARAVIRT_POISON      0xdeadbeefbaadf00d
# define CLOBBER(clob)                    \
      ;;                            \
      movl clob = PARAVIRT_POISON;        \
      ;;
# define CLOBBER_PRED(pred_clob)          \
      ;;                            \
      cmp.eq pred_clob, p0 = r0, r0       \
      ;;
#else
# define CLOBBER(clob)              /* nothing */
# define CLOBBER_PRED(pred_clob)    /* nothing */
#endif

#define MOV_FROM_IFA(reg)     \
      mov reg = cr.ifa

#define MOV_FROM_ITIR(reg)    \
      mov reg = cr.itir

#define MOV_FROM_ISR(reg)     \
      mov reg = cr.isr

#define MOV_FROM_IHA(reg)     \
      mov reg = cr.iha

#define MOV_FROM_IPSR(pred, reg)    \
(pred)      mov reg = cr.ipsr

#define MOV_FROM_IIM(reg)     \
      mov reg = cr.iim

#define MOV_FROM_IIP(reg)     \
      mov reg = cr.iip

#define MOV_FROM_IVR(reg, clob)     \
      mov reg = cr.ivr  \
      CLOBBER(clob)

#define MOV_FROM_PSR(pred, reg, clob)     \
(pred)      mov reg = psr                 \
      CLOBBER(clob)

#define MOV_FROM_ITC(pred, pred_clob, reg, clob)      \
(pred)      mov reg = ar.itc                    \
      CLOBBER(clob)                             \
      CLOBBER_PRED(pred_clob)

#define MOV_TO_IFA(reg, clob) \
      mov cr.ifa = reg  \
      CLOBBER(clob)

#define MOV_TO_ITIR(pred, reg, clob)      \
(pred)      mov cr.itir = reg       \
      CLOBBER(clob)

#define MOV_TO_IHA(pred, reg, clob) \
(pred)      mov cr.iha = reg        \
      CLOBBER(clob)

#define MOV_TO_IPSR(pred, reg, clob)            \
(pred)      mov cr.ipsr = reg             \
      CLOBBER(clob)

#define MOV_TO_IFS(pred, reg, clob) \
(pred)      mov cr.ifs = reg        \
      CLOBBER(clob)

#define MOV_TO_IIP(reg, clob) \
      mov cr.iip = reg  \
      CLOBBER(clob)

#define MOV_TO_KR(kr, reg, clob0, clob1)  \
      mov IA64_KR(kr) = reg               \
      CLOBBER(clob0)                      \
      CLOBBER(clob1)

#define ITC_I(pred, reg, clob)      \
(pred)      itc.i reg         \
      CLOBBER(clob)

#define ITC_D(pred, reg, clob)      \
(pred)      itc.d reg         \
      CLOBBER(clob)

#define ITC_I_AND_D(pred_i, pred_d, reg, clob)  \
(pred_i) itc.i reg;                       \
(pred_d) itc.d reg                        \
      CLOBBER(clob)

#define THASH(pred, reg0, reg1, clob)           \
(pred)      thash reg0 = reg1             \
      CLOBBER(clob)

#define SSM_PSR_IC_AND_DEFAULT_BITS_AND_SRLZ_I(clob0, clob1)            \
      ssm psr.ic | PSR_DEFAULT_BITS                         \
      CLOBBER(clob0)                                        \
      CLOBBER(clob1)                                        \
      ;;                                              \
      srlz.i /* guarantee that interruption collectin is on */    \
      ;;

#define SSM_PSR_IC_AND_SRLZ_D(clob0, clob1)     \
      ssm psr.ic                    \
      CLOBBER(clob0)                      \
      CLOBBER(clob1)                      \
      ;;                            \
      srlz.d

#define RSM_PSR_IC(clob)      \
      rsm psr.ic        \
      CLOBBER(clob)

#define SSM_PSR_I(pred, pred_clob, clob)  \
(pred)      ssm psr.i                     \
      CLOBBER(clob)                       \
      CLOBBER_PRED(pred_clob)

#define RSM_PSR_I(pred, clob0, clob1)     \
(pred)      rsm psr.i               \
      CLOBBER(clob0)                \
      CLOBBER(clob1)

#define RSM_PSR_I_IC(clob0, clob1, clob2) \
      rsm psr.i | psr.ic                  \
      CLOBBER(clob0)                      \
      CLOBBER(clob1)                      \
      CLOBBER(clob2)

#define RSM_PSR_DT            \
      rsm psr.dt

#define RSM_PSR_BE_I(clob0, clob1)  \
      rsm psr.be | psr.i            \
      CLOBBER(clob0)                \
      CLOBBER(clob1)

#define SSM_PSR_DT_AND_SRLZ_I \
      ssm psr.dt        \
      ;;                \
      srlz.i

#define BSW_0(clob0, clob1, clob2)  \
      bsw.0                   \
      CLOBBER(clob0)                \
      CLOBBER(clob1)                \
      CLOBBER(clob2)

#define BSW_1(clob0, clob1)   \
      bsw.1             \
      CLOBBER(clob0)          \
      CLOBBER(clob1)

#define COVER     \
      cover

#define RFI \
      rfi

Generated by  Doxygen 1.6.0   Back to index