2008-05-19 22:13:36 +09:00
/******************************************************************************
2008-08-01 10:13:32 -07:00
* arch / ia64 / include / asm / native / inst . h
2008-05-19 22:13:36 +09:00
*
* 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
*
*/
2008-05-19 22:13:37 +09:00
# define DO_SAVE_MIN IA64_NATIVE_DO_SAVE_MIN
2008-05-27 15:08:01 -07:00
# 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
2009-03-04 21:05:34 +09:00
# define paravirt_fsyscall_table ia64_native_fsyscall_table
# define paravirt_fsys_bubble_down ia64_native_fsys_bubble_down
2008-05-19 22:13:36 +09:00
# ifdef CONFIG_PARAVIRT_GUEST_ASM_CLOBBER_CHECK
# define PARAVIRT_POISON 0xdeadbeefbaadf00d
# define CLOBBER(clob) \
; ; \
movl clob = PARAVIRT_POISON ; \
; ;
2008-10-17 11:17:43 +09:00
# define CLOBBER_PRED(pred_clob) \
; ; \
cmp . eq pred_clob , p0 = r0 , r0 \
; ;
2008-05-19 22:13:36 +09:00
# else
2008-10-17 11:17:43 +09:00
# define CLOBBER(clob) /* nothing */
# define CLOBBER_PRED(pred_clob) /* nothing */
2008-05-19 22:13:36 +09:00
# 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 )
2009-03-04 21:05:38 +09:00
# define MOV_FROM_ITC(pred, pred_clob, reg, clob) \
( pred ) mov reg = ar . itc \
CLOBBER ( clob ) \
CLOBBER_PRED ( pred_clob )
2008-05-19 22:13:36 +09:00
# 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 \
2008-10-17 11:17:43 +09:00
CLOBBER ( clob ) \
CLOBBER_PRED ( pred_clob )
2008-05-19 22:13:36 +09:00
# 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
2009-03-04 21:05:45 +09:00
# define RSM_PSR_BE_I(clob0, clob1) \
rsm psr . be | psr . i \
CLOBBER ( clob0 ) \
CLOBBER ( clob1 )
2008-05-19 22:13:36 +09:00
# 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