18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci *
48c2ecf20Sopenharmony_ci * Copyright (C) 2002,2003 Jun Nakajima <jun.nakajima@intel.com>
58c2ecf20Sopenharmony_ci * Copyright (C) 2002,2003 Suresh Siddha <suresh.b.siddha@intel.com>
68c2ecf20Sopenharmony_ci */
78c2ecf20Sopenharmony_ci#ifndef _UAPI_ASM_IA64_GCC_INTRIN_H
88c2ecf20Sopenharmony_ci#define _UAPI_ASM_IA64_GCC_INTRIN_H
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include <linux/types.h>
118c2ecf20Sopenharmony_ci#include <linux/compiler.h>
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_ci/* define this macro to get some asm stmts included in 'c' files */
148c2ecf20Sopenharmony_ci#define ASM_SUPPORTED
158c2ecf20Sopenharmony_ci
168c2ecf20Sopenharmony_ci/* Optimization barrier */
178c2ecf20Sopenharmony_ci/* The "volatile" is due to gcc bugs */
188c2ecf20Sopenharmony_ci#define ia64_barrier()	asm volatile ("":::"memory")
198c2ecf20Sopenharmony_ci
208c2ecf20Sopenharmony_ci#define ia64_stop()	asm volatile (";;"::)
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_ci#define ia64_invala_gr(regnum)	asm volatile ("invala.e r%0" :: "i"(regnum))
238c2ecf20Sopenharmony_ci
248c2ecf20Sopenharmony_ci#define ia64_invala_fr(regnum)	asm volatile ("invala.e f%0" :: "i"(regnum))
258c2ecf20Sopenharmony_ci
268c2ecf20Sopenharmony_ci#define ia64_flushrs() asm volatile ("flushrs;;":::"memory")
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_ci#define ia64_loadrs() asm volatile ("loadrs;;":::"memory")
298c2ecf20Sopenharmony_ci
308c2ecf20Sopenharmony_ciextern void ia64_bad_param_for_setreg (void);
318c2ecf20Sopenharmony_ciextern void ia64_bad_param_for_getreg (void);
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_ci
348c2ecf20Sopenharmony_ci#define ia64_setreg(regnum, val)						\
358c2ecf20Sopenharmony_ci({										\
368c2ecf20Sopenharmony_ci	switch (regnum) {							\
378c2ecf20Sopenharmony_ci	    case _IA64_REG_PSR_L:						\
388c2ecf20Sopenharmony_ci		    asm volatile ("mov psr.l=%0" :: "r"(val) : "memory");	\
398c2ecf20Sopenharmony_ci		    break;							\
408c2ecf20Sopenharmony_ci	    case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC:				\
418c2ecf20Sopenharmony_ci		    asm volatile ("mov ar%0=%1" ::				\
428c2ecf20Sopenharmony_ci		    			  "i" (regnum - _IA64_REG_AR_KR0),	\
438c2ecf20Sopenharmony_ci					  "r"(val): "memory");			\
448c2ecf20Sopenharmony_ci		    break;							\
458c2ecf20Sopenharmony_ci	    case _IA64_REG_CR_DCR ... _IA64_REG_CR_LRR1:			\
468c2ecf20Sopenharmony_ci		    asm volatile ("mov cr%0=%1" ::				\
478c2ecf20Sopenharmony_ci				          "i" (regnum - _IA64_REG_CR_DCR),	\
488c2ecf20Sopenharmony_ci					  "r"(val): "memory" );			\
498c2ecf20Sopenharmony_ci		    break;							\
508c2ecf20Sopenharmony_ci	    case _IA64_REG_SP:							\
518c2ecf20Sopenharmony_ci		    asm volatile ("mov r12=%0" ::				\
528c2ecf20Sopenharmony_ci			    		  "r"(val): "memory");			\
538c2ecf20Sopenharmony_ci		    break;							\
548c2ecf20Sopenharmony_ci	    case _IA64_REG_GP:							\
558c2ecf20Sopenharmony_ci		    asm volatile ("mov gp=%0" :: "r"(val) : "memory");		\
568c2ecf20Sopenharmony_ci		break;								\
578c2ecf20Sopenharmony_ci	    default:								\
588c2ecf20Sopenharmony_ci		    ia64_bad_param_for_setreg();				\
598c2ecf20Sopenharmony_ci		    break;							\
608c2ecf20Sopenharmony_ci	}									\
618c2ecf20Sopenharmony_ci})
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci#define ia64_getreg(regnum)							\
648c2ecf20Sopenharmony_ci({										\
658c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
668c2ecf20Sopenharmony_ci										\
678c2ecf20Sopenharmony_ci	switch (regnum) {							\
688c2ecf20Sopenharmony_ci	case _IA64_REG_GP:							\
698c2ecf20Sopenharmony_ci		asm volatile ("mov %0=gp" : "=r"(ia64_intri_res));		\
708c2ecf20Sopenharmony_ci		break;								\
718c2ecf20Sopenharmony_ci	case _IA64_REG_IP:							\
728c2ecf20Sopenharmony_ci		asm volatile ("mov %0=ip" : "=r"(ia64_intri_res));		\
738c2ecf20Sopenharmony_ci		break;								\
748c2ecf20Sopenharmony_ci	case _IA64_REG_PSR:							\
758c2ecf20Sopenharmony_ci		asm volatile ("mov %0=psr" : "=r"(ia64_intri_res));		\
768c2ecf20Sopenharmony_ci		break;								\
778c2ecf20Sopenharmony_ci	case _IA64_REG_TP:	/* for current() */				\
788c2ecf20Sopenharmony_ci		ia64_intri_res = ia64_r13;					\
798c2ecf20Sopenharmony_ci		break;								\
808c2ecf20Sopenharmony_ci	case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC:				\
818c2ecf20Sopenharmony_ci		asm volatile ("mov %0=ar%1" : "=r" (ia64_intri_res)		\
828c2ecf20Sopenharmony_ci				      : "i"(regnum - _IA64_REG_AR_KR0));	\
838c2ecf20Sopenharmony_ci		break;								\
848c2ecf20Sopenharmony_ci	case _IA64_REG_CR_DCR ... _IA64_REG_CR_LRR1:				\
858c2ecf20Sopenharmony_ci		asm volatile ("mov %0=cr%1" : "=r" (ia64_intri_res)		\
868c2ecf20Sopenharmony_ci				      : "i" (regnum - _IA64_REG_CR_DCR));	\
878c2ecf20Sopenharmony_ci		break;								\
888c2ecf20Sopenharmony_ci	case _IA64_REG_SP:							\
898c2ecf20Sopenharmony_ci		asm volatile ("mov %0=sp" : "=r" (ia64_intri_res));		\
908c2ecf20Sopenharmony_ci		break;								\
918c2ecf20Sopenharmony_ci	default:								\
928c2ecf20Sopenharmony_ci		ia64_bad_param_for_getreg();					\
938c2ecf20Sopenharmony_ci		break;								\
948c2ecf20Sopenharmony_ci	}									\
958c2ecf20Sopenharmony_ci	ia64_intri_res;								\
968c2ecf20Sopenharmony_ci})
978c2ecf20Sopenharmony_ci
988c2ecf20Sopenharmony_ci#define ia64_hint_pause 0
998c2ecf20Sopenharmony_ci
1008c2ecf20Sopenharmony_ci#define ia64_hint(mode)						\
1018c2ecf20Sopenharmony_ci({								\
1028c2ecf20Sopenharmony_ci	switch (mode) {						\
1038c2ecf20Sopenharmony_ci	case ia64_hint_pause:					\
1048c2ecf20Sopenharmony_ci		asm volatile ("hint @pause" ::: "memory");	\
1058c2ecf20Sopenharmony_ci		break;						\
1068c2ecf20Sopenharmony_ci	}							\
1078c2ecf20Sopenharmony_ci})
1088c2ecf20Sopenharmony_ci
1098c2ecf20Sopenharmony_ci
1108c2ecf20Sopenharmony_ci/* Integer values for mux1 instruction */
1118c2ecf20Sopenharmony_ci#define ia64_mux1_brcst 0
1128c2ecf20Sopenharmony_ci#define ia64_mux1_mix   8
1138c2ecf20Sopenharmony_ci#define ia64_mux1_shuf  9
1148c2ecf20Sopenharmony_ci#define ia64_mux1_alt  10
1158c2ecf20Sopenharmony_ci#define ia64_mux1_rev  11
1168c2ecf20Sopenharmony_ci
1178c2ecf20Sopenharmony_ci#define ia64_mux1(x, mode)							\
1188c2ecf20Sopenharmony_ci({										\
1198c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
1208c2ecf20Sopenharmony_ci										\
1218c2ecf20Sopenharmony_ci	switch (mode) {								\
1228c2ecf20Sopenharmony_ci	case ia64_mux1_brcst:							\
1238c2ecf20Sopenharmony_ci		asm ("mux1 %0=%1,@brcst" : "=r" (ia64_intri_res) : "r" (x));	\
1248c2ecf20Sopenharmony_ci		break;								\
1258c2ecf20Sopenharmony_ci	case ia64_mux1_mix:							\
1268c2ecf20Sopenharmony_ci		asm ("mux1 %0=%1,@mix" : "=r" (ia64_intri_res) : "r" (x));	\
1278c2ecf20Sopenharmony_ci		break;								\
1288c2ecf20Sopenharmony_ci	case ia64_mux1_shuf:							\
1298c2ecf20Sopenharmony_ci		asm ("mux1 %0=%1,@shuf" : "=r" (ia64_intri_res) : "r" (x));	\
1308c2ecf20Sopenharmony_ci		break;								\
1318c2ecf20Sopenharmony_ci	case ia64_mux1_alt:							\
1328c2ecf20Sopenharmony_ci		asm ("mux1 %0=%1,@alt" : "=r" (ia64_intri_res) : "r" (x));	\
1338c2ecf20Sopenharmony_ci		break;								\
1348c2ecf20Sopenharmony_ci	case ia64_mux1_rev:							\
1358c2ecf20Sopenharmony_ci		asm ("mux1 %0=%1,@rev" : "=r" (ia64_intri_res) : "r" (x));	\
1368c2ecf20Sopenharmony_ci		break;								\
1378c2ecf20Sopenharmony_ci	}									\
1388c2ecf20Sopenharmony_ci	ia64_intri_res;								\
1398c2ecf20Sopenharmony_ci})
1408c2ecf20Sopenharmony_ci
1418c2ecf20Sopenharmony_ci#if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
1428c2ecf20Sopenharmony_ci# define ia64_popcnt(x)		__builtin_popcountl(x)
1438c2ecf20Sopenharmony_ci#else
1448c2ecf20Sopenharmony_ci# define ia64_popcnt(x)						\
1458c2ecf20Sopenharmony_ci  ({								\
1468c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;					\
1478c2ecf20Sopenharmony_ci	asm ("popcnt %0=%1" : "=r" (ia64_intri_res) : "r" (x));	\
1488c2ecf20Sopenharmony_ci								\
1498c2ecf20Sopenharmony_ci	ia64_intri_res;						\
1508c2ecf20Sopenharmony_ci  })
1518c2ecf20Sopenharmony_ci#endif
1528c2ecf20Sopenharmony_ci
1538c2ecf20Sopenharmony_ci#define ia64_getf_exp(x)					\
1548c2ecf20Sopenharmony_ci({								\
1558c2ecf20Sopenharmony_ci	long ia64_intri_res;					\
1568c2ecf20Sopenharmony_ci								\
1578c2ecf20Sopenharmony_ci	asm ("getf.exp %0=%1" : "=r"(ia64_intri_res) : "f"(x));	\
1588c2ecf20Sopenharmony_ci								\
1598c2ecf20Sopenharmony_ci	ia64_intri_res;						\
1608c2ecf20Sopenharmony_ci})
1618c2ecf20Sopenharmony_ci
1628c2ecf20Sopenharmony_ci#define ia64_shrp(a, b, count)								\
1638c2ecf20Sopenharmony_ci({											\
1648c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
1658c2ecf20Sopenharmony_ci	asm ("shrp %0=%1,%2,%3" : "=r"(ia64_intri_res) : "r"(a), "r"(b), "i"(count));	\
1668c2ecf20Sopenharmony_ci	ia64_intri_res;									\
1678c2ecf20Sopenharmony_ci})
1688c2ecf20Sopenharmony_ci
1698c2ecf20Sopenharmony_ci#define ia64_ldfs(regnum, x)					\
1708c2ecf20Sopenharmony_ci({								\
1718c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);			\
1728c2ecf20Sopenharmony_ci	asm volatile ("ldfs %0=[%1]" :"=f"(__f__): "r"(x));	\
1738c2ecf20Sopenharmony_ci})
1748c2ecf20Sopenharmony_ci
1758c2ecf20Sopenharmony_ci#define ia64_ldfd(regnum, x)					\
1768c2ecf20Sopenharmony_ci({								\
1778c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);			\
1788c2ecf20Sopenharmony_ci	asm volatile ("ldfd %0=[%1]" :"=f"(__f__): "r"(x));	\
1798c2ecf20Sopenharmony_ci})
1808c2ecf20Sopenharmony_ci
1818c2ecf20Sopenharmony_ci#define ia64_ldfe(regnum, x)					\
1828c2ecf20Sopenharmony_ci({								\
1838c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);			\
1848c2ecf20Sopenharmony_ci	asm volatile ("ldfe %0=[%1]" :"=f"(__f__): "r"(x));	\
1858c2ecf20Sopenharmony_ci})
1868c2ecf20Sopenharmony_ci
1878c2ecf20Sopenharmony_ci#define ia64_ldf8(regnum, x)					\
1888c2ecf20Sopenharmony_ci({								\
1898c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);			\
1908c2ecf20Sopenharmony_ci	asm volatile ("ldf8 %0=[%1]" :"=f"(__f__): "r"(x));	\
1918c2ecf20Sopenharmony_ci})
1928c2ecf20Sopenharmony_ci
1938c2ecf20Sopenharmony_ci#define ia64_ldf_fill(regnum, x)				\
1948c2ecf20Sopenharmony_ci({								\
1958c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);			\
1968c2ecf20Sopenharmony_ci	asm volatile ("ldf.fill %0=[%1]" :"=f"(__f__): "r"(x));	\
1978c2ecf20Sopenharmony_ci})
1988c2ecf20Sopenharmony_ci
1998c2ecf20Sopenharmony_ci#define ia64_st4_rel_nta(m, val)					\
2008c2ecf20Sopenharmony_ci({									\
2018c2ecf20Sopenharmony_ci	asm volatile ("st4.rel.nta [%0] = %1\n\t" :: "r"(m), "r"(val));	\
2028c2ecf20Sopenharmony_ci})
2038c2ecf20Sopenharmony_ci
2048c2ecf20Sopenharmony_ci#define ia64_stfs(x, regnum)						\
2058c2ecf20Sopenharmony_ci({									\
2068c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);				\
2078c2ecf20Sopenharmony_ci	asm volatile ("stfs [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\
2088c2ecf20Sopenharmony_ci})
2098c2ecf20Sopenharmony_ci
2108c2ecf20Sopenharmony_ci#define ia64_stfd(x, regnum)						\
2118c2ecf20Sopenharmony_ci({									\
2128c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);				\
2138c2ecf20Sopenharmony_ci	asm volatile ("stfd [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\
2148c2ecf20Sopenharmony_ci})
2158c2ecf20Sopenharmony_ci
2168c2ecf20Sopenharmony_ci#define ia64_stfe(x, regnum)						\
2178c2ecf20Sopenharmony_ci({									\
2188c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);				\
2198c2ecf20Sopenharmony_ci	asm volatile ("stfe [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\
2208c2ecf20Sopenharmony_ci})
2218c2ecf20Sopenharmony_ci
2228c2ecf20Sopenharmony_ci#define ia64_stf8(x, regnum)						\
2238c2ecf20Sopenharmony_ci({									\
2248c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);				\
2258c2ecf20Sopenharmony_ci	asm volatile ("stf8 [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\
2268c2ecf20Sopenharmony_ci})
2278c2ecf20Sopenharmony_ci
2288c2ecf20Sopenharmony_ci#define ia64_stf_spill(x, regnum)						\
2298c2ecf20Sopenharmony_ci({										\
2308c2ecf20Sopenharmony_ci	register double __f__ asm ("f"#regnum);					\
2318c2ecf20Sopenharmony_ci	asm volatile ("stf.spill [%0]=%1" :: "r"(x), "f"(__f__) : "memory");	\
2328c2ecf20Sopenharmony_ci})
2338c2ecf20Sopenharmony_ci
2348c2ecf20Sopenharmony_ci#define ia64_fetchadd4_acq(p, inc)						\
2358c2ecf20Sopenharmony_ci({										\
2368c2ecf20Sopenharmony_ci										\
2378c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
2388c2ecf20Sopenharmony_ci	asm volatile ("fetchadd4.acq %0=[%1],%2"				\
2398c2ecf20Sopenharmony_ci				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\
2408c2ecf20Sopenharmony_ci				: "memory");					\
2418c2ecf20Sopenharmony_ci										\
2428c2ecf20Sopenharmony_ci	ia64_intri_res;								\
2438c2ecf20Sopenharmony_ci})
2448c2ecf20Sopenharmony_ci
2458c2ecf20Sopenharmony_ci#define ia64_fetchadd4_rel(p, inc)						\
2468c2ecf20Sopenharmony_ci({										\
2478c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
2488c2ecf20Sopenharmony_ci	asm volatile ("fetchadd4.rel %0=[%1],%2"				\
2498c2ecf20Sopenharmony_ci				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\
2508c2ecf20Sopenharmony_ci				: "memory");					\
2518c2ecf20Sopenharmony_ci										\
2528c2ecf20Sopenharmony_ci	ia64_intri_res;								\
2538c2ecf20Sopenharmony_ci})
2548c2ecf20Sopenharmony_ci
2558c2ecf20Sopenharmony_ci#define ia64_fetchadd8_acq(p, inc)						\
2568c2ecf20Sopenharmony_ci({										\
2578c2ecf20Sopenharmony_ci										\
2588c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
2598c2ecf20Sopenharmony_ci	asm volatile ("fetchadd8.acq %0=[%1],%2"				\
2608c2ecf20Sopenharmony_ci				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\
2618c2ecf20Sopenharmony_ci				: "memory");					\
2628c2ecf20Sopenharmony_ci										\
2638c2ecf20Sopenharmony_ci	ia64_intri_res;								\
2648c2ecf20Sopenharmony_ci})
2658c2ecf20Sopenharmony_ci
2668c2ecf20Sopenharmony_ci#define ia64_fetchadd8_rel(p, inc)						\
2678c2ecf20Sopenharmony_ci({										\
2688c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
2698c2ecf20Sopenharmony_ci	asm volatile ("fetchadd8.rel %0=[%1],%2"				\
2708c2ecf20Sopenharmony_ci				: "=r"(ia64_intri_res) : "r"(p), "i" (inc)	\
2718c2ecf20Sopenharmony_ci				: "memory");					\
2728c2ecf20Sopenharmony_ci										\
2738c2ecf20Sopenharmony_ci	ia64_intri_res;								\
2748c2ecf20Sopenharmony_ci})
2758c2ecf20Sopenharmony_ci
2768c2ecf20Sopenharmony_ci#define ia64_xchg1(ptr,x)							\
2778c2ecf20Sopenharmony_ci({										\
2788c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;							\
2798c2ecf20Sopenharmony_ci	asm volatile ("xchg1 %0=[%1],%2"					\
2808c2ecf20Sopenharmony_ci		      : "=r" (ia64_intri_res) : "r" (ptr), "r" (x) : "memory");	\
2818c2ecf20Sopenharmony_ci	ia64_intri_res;								\
2828c2ecf20Sopenharmony_ci})
2838c2ecf20Sopenharmony_ci
2848c2ecf20Sopenharmony_ci#define ia64_xchg2(ptr,x)						\
2858c2ecf20Sopenharmony_ci({									\
2868c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;						\
2878c2ecf20Sopenharmony_ci	asm volatile ("xchg2 %0=[%1],%2" : "=r" (ia64_intri_res)	\
2888c2ecf20Sopenharmony_ci		      : "r" (ptr), "r" (x) : "memory");			\
2898c2ecf20Sopenharmony_ci	ia64_intri_res;							\
2908c2ecf20Sopenharmony_ci})
2918c2ecf20Sopenharmony_ci
2928c2ecf20Sopenharmony_ci#define ia64_xchg4(ptr,x)						\
2938c2ecf20Sopenharmony_ci({									\
2948c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;						\
2958c2ecf20Sopenharmony_ci	asm volatile ("xchg4 %0=[%1],%2" : "=r" (ia64_intri_res)	\
2968c2ecf20Sopenharmony_ci		      : "r" (ptr), "r" (x) : "memory");			\
2978c2ecf20Sopenharmony_ci	ia64_intri_res;							\
2988c2ecf20Sopenharmony_ci})
2998c2ecf20Sopenharmony_ci
3008c2ecf20Sopenharmony_ci#define ia64_xchg8(ptr,x)						\
3018c2ecf20Sopenharmony_ci({									\
3028c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;						\
3038c2ecf20Sopenharmony_ci	asm volatile ("xchg8 %0=[%1],%2" : "=r" (ia64_intri_res)	\
3048c2ecf20Sopenharmony_ci		      : "r" (ptr), "r" (x) : "memory");			\
3058c2ecf20Sopenharmony_ci	ia64_intri_res;							\
3068c2ecf20Sopenharmony_ci})
3078c2ecf20Sopenharmony_ci
3088c2ecf20Sopenharmony_ci#define ia64_cmpxchg1_acq(ptr, new, old)						\
3098c2ecf20Sopenharmony_ci({											\
3108c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3118c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3128c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg1.acq %0=[%1],%2,ar.ccv":					\
3138c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3148c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3158c2ecf20Sopenharmony_ci})
3168c2ecf20Sopenharmony_ci
3178c2ecf20Sopenharmony_ci#define ia64_cmpxchg1_rel(ptr, new, old)						\
3188c2ecf20Sopenharmony_ci({											\
3198c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3208c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3218c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg1.rel %0=[%1],%2,ar.ccv":					\
3228c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3238c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3248c2ecf20Sopenharmony_ci})
3258c2ecf20Sopenharmony_ci
3268c2ecf20Sopenharmony_ci#define ia64_cmpxchg2_acq(ptr, new, old)						\
3278c2ecf20Sopenharmony_ci({											\
3288c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3298c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3308c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg2.acq %0=[%1],%2,ar.ccv":					\
3318c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3328c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3338c2ecf20Sopenharmony_ci})
3348c2ecf20Sopenharmony_ci
3358c2ecf20Sopenharmony_ci#define ia64_cmpxchg2_rel(ptr, new, old)						\
3368c2ecf20Sopenharmony_ci({											\
3378c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3388c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3398c2ecf20Sopenharmony_ci											\
3408c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg2.rel %0=[%1],%2,ar.ccv":					\
3418c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3428c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3438c2ecf20Sopenharmony_ci})
3448c2ecf20Sopenharmony_ci
3458c2ecf20Sopenharmony_ci#define ia64_cmpxchg4_acq(ptr, new, old)						\
3468c2ecf20Sopenharmony_ci({											\
3478c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3488c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3498c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg4.acq %0=[%1],%2,ar.ccv":					\
3508c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3518c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3528c2ecf20Sopenharmony_ci})
3538c2ecf20Sopenharmony_ci
3548c2ecf20Sopenharmony_ci#define ia64_cmpxchg4_rel(ptr, new, old)						\
3558c2ecf20Sopenharmony_ci({											\
3568c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3578c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3588c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg4.rel %0=[%1],%2,ar.ccv":					\
3598c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3608c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3618c2ecf20Sopenharmony_ci})
3628c2ecf20Sopenharmony_ci
3638c2ecf20Sopenharmony_ci#define ia64_cmpxchg8_acq(ptr, new, old)						\
3648c2ecf20Sopenharmony_ci({											\
3658c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3668c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3678c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg8.acq %0=[%1],%2,ar.ccv":					\
3688c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3698c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3708c2ecf20Sopenharmony_ci})
3718c2ecf20Sopenharmony_ci
3728c2ecf20Sopenharmony_ci#define ia64_cmpxchg8_rel(ptr, new, old)						\
3738c2ecf20Sopenharmony_ci({											\
3748c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;								\
3758c2ecf20Sopenharmony_ci	asm volatile ("mov ar.ccv=%0;;" :: "rO"(old));					\
3768c2ecf20Sopenharmony_ci											\
3778c2ecf20Sopenharmony_ci	asm volatile ("cmpxchg8.rel %0=[%1],%2,ar.ccv":					\
3788c2ecf20Sopenharmony_ci			      "=r"(ia64_intri_res) : "r"(ptr), "r"(new) : "memory");	\
3798c2ecf20Sopenharmony_ci	ia64_intri_res;									\
3808c2ecf20Sopenharmony_ci})
3818c2ecf20Sopenharmony_ci
3828c2ecf20Sopenharmony_ci#define ia64_mf()	asm volatile ("mf" ::: "memory")
3838c2ecf20Sopenharmony_ci#define ia64_mfa()	asm volatile ("mf.a" ::: "memory")
3848c2ecf20Sopenharmony_ci
3858c2ecf20Sopenharmony_ci#define ia64_invala() asm volatile ("invala" ::: "memory")
3868c2ecf20Sopenharmony_ci
3878c2ecf20Sopenharmony_ci#define ia64_thash(addr)							\
3888c2ecf20Sopenharmony_ci({										\
3898c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
3908c2ecf20Sopenharmony_ci	asm volatile ("thash %0=%1" : "=r"(ia64_intri_res) : "r" (addr));	\
3918c2ecf20Sopenharmony_ci	ia64_intri_res;								\
3928c2ecf20Sopenharmony_ci})
3938c2ecf20Sopenharmony_ci
3948c2ecf20Sopenharmony_ci#define ia64_srlz_i()	asm volatile (";; srlz.i ;;" ::: "memory")
3958c2ecf20Sopenharmony_ci#define ia64_srlz_d()	asm volatile (";; srlz.d" ::: "memory");
3968c2ecf20Sopenharmony_ci
3978c2ecf20Sopenharmony_ci#ifdef HAVE_SERIALIZE_DIRECTIVE
3988c2ecf20Sopenharmony_ci# define ia64_dv_serialize_data()		asm volatile (".serialize.data");
3998c2ecf20Sopenharmony_ci# define ia64_dv_serialize_instruction()	asm volatile (".serialize.instruction");
4008c2ecf20Sopenharmony_ci#else
4018c2ecf20Sopenharmony_ci# define ia64_dv_serialize_data()
4028c2ecf20Sopenharmony_ci# define ia64_dv_serialize_instruction()
4038c2ecf20Sopenharmony_ci#endif
4048c2ecf20Sopenharmony_ci
4058c2ecf20Sopenharmony_ci#define ia64_nop(x)	asm volatile ("nop %0"::"i"(x));
4068c2ecf20Sopenharmony_ci
4078c2ecf20Sopenharmony_ci#define ia64_itci(addr)	asm volatile ("itc.i %0;;" :: "r"(addr) : "memory")
4088c2ecf20Sopenharmony_ci
4098c2ecf20Sopenharmony_ci#define ia64_itcd(addr)	asm volatile ("itc.d %0;;" :: "r"(addr) : "memory")
4108c2ecf20Sopenharmony_ci
4118c2ecf20Sopenharmony_ci
4128c2ecf20Sopenharmony_ci#define ia64_itri(trnum, addr) asm volatile ("itr.i itr[%0]=%1"				\
4138c2ecf20Sopenharmony_ci					     :: "r"(trnum), "r"(addr) : "memory")
4148c2ecf20Sopenharmony_ci
4158c2ecf20Sopenharmony_ci#define ia64_itrd(trnum, addr) asm volatile ("itr.d dtr[%0]=%1"				\
4168c2ecf20Sopenharmony_ci					     :: "r"(trnum), "r"(addr) : "memory")
4178c2ecf20Sopenharmony_ci
4188c2ecf20Sopenharmony_ci#define ia64_tpa(addr)								\
4198c2ecf20Sopenharmony_ci({										\
4208c2ecf20Sopenharmony_ci	unsigned long ia64_pa;							\
4218c2ecf20Sopenharmony_ci	asm volatile ("tpa %0 = %1" : "=r"(ia64_pa) : "r"(addr) : "memory");	\
4228c2ecf20Sopenharmony_ci	ia64_pa;								\
4238c2ecf20Sopenharmony_ci})
4248c2ecf20Sopenharmony_ci
4258c2ecf20Sopenharmony_ci#define __ia64_set_dbr(index, val)						\
4268c2ecf20Sopenharmony_ci	asm volatile ("mov dbr[%0]=%1" :: "r"(index), "r"(val) : "memory")
4278c2ecf20Sopenharmony_ci
4288c2ecf20Sopenharmony_ci#define ia64_set_ibr(index, val)						\
4298c2ecf20Sopenharmony_ci	asm volatile ("mov ibr[%0]=%1" :: "r"(index), "r"(val) : "memory")
4308c2ecf20Sopenharmony_ci
4318c2ecf20Sopenharmony_ci#define ia64_set_pkr(index, val)						\
4328c2ecf20Sopenharmony_ci	asm volatile ("mov pkr[%0]=%1" :: "r"(index), "r"(val) : "memory")
4338c2ecf20Sopenharmony_ci
4348c2ecf20Sopenharmony_ci#define ia64_set_pmc(index, val)						\
4358c2ecf20Sopenharmony_ci	asm volatile ("mov pmc[%0]=%1" :: "r"(index), "r"(val) : "memory")
4368c2ecf20Sopenharmony_ci
4378c2ecf20Sopenharmony_ci#define ia64_set_pmd(index, val)						\
4388c2ecf20Sopenharmony_ci	asm volatile ("mov pmd[%0]=%1" :: "r"(index), "r"(val) : "memory")
4398c2ecf20Sopenharmony_ci
4408c2ecf20Sopenharmony_ci#define ia64_set_rr(index, val)							\
4418c2ecf20Sopenharmony_ci	asm volatile ("mov rr[%0]=%1" :: "r"(index), "r"(val) : "memory");
4428c2ecf20Sopenharmony_ci
4438c2ecf20Sopenharmony_ci#define ia64_get_cpuid(index)								\
4448c2ecf20Sopenharmony_ci({											\
4458c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;							\
4468c2ecf20Sopenharmony_ci	asm volatile ("mov %0=cpuid[%r1]" : "=r"(ia64_intri_res) : "rO"(index));	\
4478c2ecf20Sopenharmony_ci	ia64_intri_res;									\
4488c2ecf20Sopenharmony_ci})
4498c2ecf20Sopenharmony_ci
4508c2ecf20Sopenharmony_ci#define __ia64_get_dbr(index)							\
4518c2ecf20Sopenharmony_ci({										\
4528c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4538c2ecf20Sopenharmony_ci	asm volatile ("mov %0=dbr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\
4548c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4558c2ecf20Sopenharmony_ci})
4568c2ecf20Sopenharmony_ci
4578c2ecf20Sopenharmony_ci#define ia64_get_ibr(index)							\
4588c2ecf20Sopenharmony_ci({										\
4598c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4608c2ecf20Sopenharmony_ci	asm volatile ("mov %0=ibr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\
4618c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4628c2ecf20Sopenharmony_ci})
4638c2ecf20Sopenharmony_ci
4648c2ecf20Sopenharmony_ci#define ia64_get_pkr(index)							\
4658c2ecf20Sopenharmony_ci({										\
4668c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4678c2ecf20Sopenharmony_ci	asm volatile ("mov %0=pkr[%1]" : "=r"(ia64_intri_res) : "r"(index));	\
4688c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4698c2ecf20Sopenharmony_ci})
4708c2ecf20Sopenharmony_ci
4718c2ecf20Sopenharmony_ci#define ia64_get_pmc(index)							\
4728c2ecf20Sopenharmony_ci({										\
4738c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4748c2ecf20Sopenharmony_ci	asm volatile ("mov %0=pmc[%1]" : "=r"(ia64_intri_res) : "r"(index));	\
4758c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4768c2ecf20Sopenharmony_ci})
4778c2ecf20Sopenharmony_ci
4788c2ecf20Sopenharmony_ci
4798c2ecf20Sopenharmony_ci#define ia64_get_pmd(index)							\
4808c2ecf20Sopenharmony_ci({										\
4818c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4828c2ecf20Sopenharmony_ci	asm volatile ("mov %0=pmd[%1]" : "=r"(ia64_intri_res) : "r"(index));	\
4838c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4848c2ecf20Sopenharmony_ci})
4858c2ecf20Sopenharmony_ci
4868c2ecf20Sopenharmony_ci#define ia64_get_rr(index)							\
4878c2ecf20Sopenharmony_ci({										\
4888c2ecf20Sopenharmony_ci	unsigned long ia64_intri_res;						\
4898c2ecf20Sopenharmony_ci	asm volatile ("mov %0=rr[%1]" : "=r"(ia64_intri_res) : "r" (index));	\
4908c2ecf20Sopenharmony_ci	ia64_intri_res;								\
4918c2ecf20Sopenharmony_ci})
4928c2ecf20Sopenharmony_ci
4938c2ecf20Sopenharmony_ci#define ia64_fc(addr)	asm volatile ("fc %0" :: "r"(addr) : "memory")
4948c2ecf20Sopenharmony_ci
4958c2ecf20Sopenharmony_ci
4968c2ecf20Sopenharmony_ci#define ia64_sync_i()	asm volatile (";; sync.i" ::: "memory")
4978c2ecf20Sopenharmony_ci
4988c2ecf20Sopenharmony_ci#define ia64_ssm(mask)	asm volatile ("ssm %0":: "i"((mask)) : "memory")
4998c2ecf20Sopenharmony_ci#define ia64_rsm(mask)	asm volatile ("rsm %0":: "i"((mask)) : "memory")
5008c2ecf20Sopenharmony_ci#define ia64_sum(mask)	asm volatile ("sum %0":: "i"((mask)) : "memory")
5018c2ecf20Sopenharmony_ci#define ia64_rum(mask)	asm volatile ("rum %0":: "i"((mask)) : "memory")
5028c2ecf20Sopenharmony_ci
5038c2ecf20Sopenharmony_ci#define ia64_ptce(addr)	asm volatile ("ptc.e %0" :: "r"(addr))
5048c2ecf20Sopenharmony_ci
5058c2ecf20Sopenharmony_ci#define ia64_ptcga(addr, size)							\
5068c2ecf20Sopenharmony_cido {										\
5078c2ecf20Sopenharmony_ci	asm volatile ("ptc.ga %0,%1" :: "r"(addr), "r"(size) : "memory");	\
5088c2ecf20Sopenharmony_ci	ia64_dv_serialize_data();						\
5098c2ecf20Sopenharmony_ci} while (0)
5108c2ecf20Sopenharmony_ci
5118c2ecf20Sopenharmony_ci#define ia64_ptcl(addr, size)							\
5128c2ecf20Sopenharmony_cido {										\
5138c2ecf20Sopenharmony_ci	asm volatile ("ptc.l %0,%1" :: "r"(addr), "r"(size) : "memory");	\
5148c2ecf20Sopenharmony_ci	ia64_dv_serialize_data();						\
5158c2ecf20Sopenharmony_ci} while (0)
5168c2ecf20Sopenharmony_ci
5178c2ecf20Sopenharmony_ci#define ia64_ptri(addr, size)						\
5188c2ecf20Sopenharmony_ci	asm volatile ("ptr.i %0,%1" :: "r"(addr), "r"(size) : "memory")
5198c2ecf20Sopenharmony_ci
5208c2ecf20Sopenharmony_ci#define ia64_ptrd(addr, size)						\
5218c2ecf20Sopenharmony_ci	asm volatile ("ptr.d %0,%1" :: "r"(addr), "r"(size) : "memory")
5228c2ecf20Sopenharmony_ci
5238c2ecf20Sopenharmony_ci#define ia64_ttag(addr)							\
5248c2ecf20Sopenharmony_ci({									  \
5258c2ecf20Sopenharmony_ci	__u64 ia64_intri_res;						   \
5268c2ecf20Sopenharmony_ci	asm volatile ("ttag %0=%1" : "=r"(ia64_intri_res) : "r" (addr));   \
5278c2ecf20Sopenharmony_ci	ia64_intri_res;							 \
5288c2ecf20Sopenharmony_ci})
5298c2ecf20Sopenharmony_ci
5308c2ecf20Sopenharmony_ci
5318c2ecf20Sopenharmony_ci/* Values for lfhint in ia64_lfetch and ia64_lfetch_fault */
5328c2ecf20Sopenharmony_ci
5338c2ecf20Sopenharmony_ci#define ia64_lfhint_none   0
5348c2ecf20Sopenharmony_ci#define ia64_lfhint_nt1    1
5358c2ecf20Sopenharmony_ci#define ia64_lfhint_nt2    2
5368c2ecf20Sopenharmony_ci#define ia64_lfhint_nta    3
5378c2ecf20Sopenharmony_ci
5388c2ecf20Sopenharmony_ci#define ia64_lfetch(lfhint, y)					\
5398c2ecf20Sopenharmony_ci({								\
5408c2ecf20Sopenharmony_ci        switch (lfhint) {					\
5418c2ecf20Sopenharmony_ci        case ia64_lfhint_none:					\
5428c2ecf20Sopenharmony_ci                asm volatile ("lfetch [%0]" : : "r"(y));	\
5438c2ecf20Sopenharmony_ci                break;						\
5448c2ecf20Sopenharmony_ci        case ia64_lfhint_nt1:					\
5458c2ecf20Sopenharmony_ci                asm volatile ("lfetch.nt1 [%0]" : : "r"(y));	\
5468c2ecf20Sopenharmony_ci                break;						\
5478c2ecf20Sopenharmony_ci        case ia64_lfhint_nt2:					\
5488c2ecf20Sopenharmony_ci                asm volatile ("lfetch.nt2 [%0]" : : "r"(y));	\
5498c2ecf20Sopenharmony_ci                break;						\
5508c2ecf20Sopenharmony_ci        case ia64_lfhint_nta:					\
5518c2ecf20Sopenharmony_ci                asm volatile ("lfetch.nta [%0]" : : "r"(y));	\
5528c2ecf20Sopenharmony_ci                break;						\
5538c2ecf20Sopenharmony_ci        }							\
5548c2ecf20Sopenharmony_ci})
5558c2ecf20Sopenharmony_ci
5568c2ecf20Sopenharmony_ci#define ia64_lfetch_excl(lfhint, y)					\
5578c2ecf20Sopenharmony_ci({									\
5588c2ecf20Sopenharmony_ci        switch (lfhint) {						\
5598c2ecf20Sopenharmony_ci        case ia64_lfhint_none:						\
5608c2ecf20Sopenharmony_ci                asm volatile ("lfetch.excl [%0]" :: "r"(y));		\
5618c2ecf20Sopenharmony_ci                break;							\
5628c2ecf20Sopenharmony_ci        case ia64_lfhint_nt1:						\
5638c2ecf20Sopenharmony_ci                asm volatile ("lfetch.excl.nt1 [%0]" :: "r"(y));	\
5648c2ecf20Sopenharmony_ci                break;							\
5658c2ecf20Sopenharmony_ci        case ia64_lfhint_nt2:						\
5668c2ecf20Sopenharmony_ci                asm volatile ("lfetch.excl.nt2 [%0]" :: "r"(y));	\
5678c2ecf20Sopenharmony_ci                break;							\
5688c2ecf20Sopenharmony_ci        case ia64_lfhint_nta:						\
5698c2ecf20Sopenharmony_ci                asm volatile ("lfetch.excl.nta [%0]" :: "r"(y));	\
5708c2ecf20Sopenharmony_ci                break;							\
5718c2ecf20Sopenharmony_ci        }								\
5728c2ecf20Sopenharmony_ci})
5738c2ecf20Sopenharmony_ci
5748c2ecf20Sopenharmony_ci#define ia64_lfetch_fault(lfhint, y)					\
5758c2ecf20Sopenharmony_ci({									\
5768c2ecf20Sopenharmony_ci        switch (lfhint) {						\
5778c2ecf20Sopenharmony_ci        case ia64_lfhint_none:						\
5788c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault [%0]" : : "r"(y));		\
5798c2ecf20Sopenharmony_ci                break;							\
5808c2ecf20Sopenharmony_ci        case ia64_lfhint_nt1:						\
5818c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.nt1 [%0]" : : "r"(y));	\
5828c2ecf20Sopenharmony_ci                break;							\
5838c2ecf20Sopenharmony_ci        case ia64_lfhint_nt2:						\
5848c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.nt2 [%0]" : : "r"(y));	\
5858c2ecf20Sopenharmony_ci                break;							\
5868c2ecf20Sopenharmony_ci        case ia64_lfhint_nta:						\
5878c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.nta [%0]" : : "r"(y));	\
5888c2ecf20Sopenharmony_ci                break;							\
5898c2ecf20Sopenharmony_ci        }								\
5908c2ecf20Sopenharmony_ci})
5918c2ecf20Sopenharmony_ci
5928c2ecf20Sopenharmony_ci#define ia64_lfetch_fault_excl(lfhint, y)				\
5938c2ecf20Sopenharmony_ci({									\
5948c2ecf20Sopenharmony_ci        switch (lfhint) {						\
5958c2ecf20Sopenharmony_ci        case ia64_lfhint_none:						\
5968c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.excl [%0]" :: "r"(y));	\
5978c2ecf20Sopenharmony_ci                break;							\
5988c2ecf20Sopenharmony_ci        case ia64_lfhint_nt1:						\
5998c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.excl.nt1 [%0]" :: "r"(y));	\
6008c2ecf20Sopenharmony_ci                break;							\
6018c2ecf20Sopenharmony_ci        case ia64_lfhint_nt2:						\
6028c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.excl.nt2 [%0]" :: "r"(y));	\
6038c2ecf20Sopenharmony_ci                break;							\
6048c2ecf20Sopenharmony_ci        case ia64_lfhint_nta:						\
6058c2ecf20Sopenharmony_ci                asm volatile ("lfetch.fault.excl.nta [%0]" :: "r"(y));	\
6068c2ecf20Sopenharmony_ci                break;							\
6078c2ecf20Sopenharmony_ci        }								\
6088c2ecf20Sopenharmony_ci})
6098c2ecf20Sopenharmony_ci
6108c2ecf20Sopenharmony_ci#define ia64_intrin_local_irq_restore(x)			\
6118c2ecf20Sopenharmony_cido {								\
6128c2ecf20Sopenharmony_ci	asm volatile (";;   cmp.ne p6,p7=%0,r0;;"		\
6138c2ecf20Sopenharmony_ci		      "(p6) ssm psr.i;"				\
6148c2ecf20Sopenharmony_ci		      "(p7) rsm psr.i;;"			\
6158c2ecf20Sopenharmony_ci		      "(p6) srlz.d"				\
6168c2ecf20Sopenharmony_ci		      :: "r"((x)) : "p6", "p7", "memory");	\
6178c2ecf20Sopenharmony_ci} while (0)
6188c2ecf20Sopenharmony_ci
6198c2ecf20Sopenharmony_ci#endif /* _UAPI_ASM_IA64_GCC_INTRIN_H */
620