x86: Tag some intrinsics with __pure2

Some C wrappers for x86 instructions do not touch global memory and only act
on their arguments; they can be marked __pure2, aka __const__.  Without this
annotation, Clang 3.9.1 is not intelligent enough on its own to grok that
these functions are __const__.

Submitted by:	Anton Rang <anton.rang AT isilon.com>
Sponsored by:	Dell EMC Isilon
This commit is contained in:
cem 2017-08-03 22:28:30 +00:00
parent fdc90dc18a
commit d4a7946bbd
2 changed files with 15 additions and 15 deletions

View File

@ -63,7 +63,7 @@ breakpoint(void)
__asm __volatile("int $3");
}
static __inline u_int
static __inline __pure2 u_int
bsfl(u_int mask)
{
u_int result;
@ -72,7 +72,7 @@ bsfl(u_int mask)
return (result);
}
static __inline u_long
static __inline __pure2 u_long
bsfq(u_long mask)
{
u_long result;
@ -81,7 +81,7 @@ bsfq(u_long mask)
return (result);
}
static __inline u_int
static __inline __pure2 u_int
bsrl(u_int mask)
{
u_int result;
@ -90,7 +90,7 @@ bsrl(u_int mask)
return (result);
}
static __inline u_long
static __inline __pure2 u_long
bsrq(u_long mask)
{
u_long result;
@ -155,7 +155,7 @@ enable_intr(void)
#define HAVE_INLINE_FFSL
static __inline int
static __inline __pure2 int
ffsl(long mask)
{
return (mask == 0 ? mask : (int)bsfq((u_long)mask) + 1);
@ -163,7 +163,7 @@ ffsl(long mask)
#define HAVE_INLINE_FFSLL
static __inline int
static __inline __pure2 int
ffsll(long long mask)
{
return (ffsl((long)mask));
@ -171,7 +171,7 @@ ffsll(long long mask)
#define HAVE_INLINE_FLS
static __inline int
static __inline __pure2 int
fls(int mask)
{
return (mask == 0 ? mask : (int)bsrl((u_int)mask) + 1);
@ -179,7 +179,7 @@ fls(int mask)
#define HAVE_INLINE_FLSL
static __inline int
static __inline __pure2 int
flsl(long mask)
{
return (mask == 0 ? mask : (int)bsrq((u_long)mask) + 1);
@ -187,7 +187,7 @@ flsl(long mask)
#define HAVE_INLINE_FLSLL
static __inline int
static __inline __pure2 int
flsll(long long mask)
{
return (flsl((long)mask));

View File

@ -60,7 +60,7 @@ breakpoint(void)
__asm __volatile("int $3");
}
static __inline u_int
static __inline __pure2 u_int
bsfl(u_int mask)
{
u_int result;
@ -69,7 +69,7 @@ bsfl(u_int mask)
return (result);
}
static __inline u_int
static __inline __pure2 u_int
bsrl(u_int mask)
{
u_int result;
@ -169,7 +169,7 @@ sfence(void)
#define HAVE_INLINE_FFS
static __inline int
static __inline __pure2 int
ffs(int mask)
{
/*
@ -183,7 +183,7 @@ ffs(int mask)
#define HAVE_INLINE_FFSL
static __inline int
static __inline __pure2 int
ffsl(long mask)
{
return (ffs((int)mask));
@ -191,7 +191,7 @@ ffsl(long mask)
#define HAVE_INLINE_FLS
static __inline int
static __inline __pure2 int
fls(int mask)
{
return (mask == 0 ? mask : (int)bsrl((u_int)mask) + 1);
@ -199,7 +199,7 @@ fls(int mask)
#define HAVE_INLINE_FLSL
static __inline int
static __inline __pure2 int
flsl(long mask)
{
return (fls((int)mask));