powerpc下——
在powerpc下,有——
static inline int in_8(const volatile unsigned char *address)
{
int ret;
__asm__ __volatile__("lbz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_8(volatile unsigned char *address,int value)
{
__asm__ __volatile__("stb%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline unsigned in_le16(const volatile unsigned short *address)
{
unsigned ret;
__asm__ __volatile__("lhbrx %0,0,%1;twi 0,%0,0;isync":"=r"(ret):"r"(address),"m"(*address));
return ret;
}
static inline unsigned in_be16(const volatile unsigned short *address)
{
unsigned ret;
__asm__ __volatile__("lhz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_le16(volatile unsigned short *address,int value)
{
__asm__ __volatile__("sthbrx %1,0,%2;sync":"=m"(*address):"r"(value),"r"(address));
}
static inline void out_be16(volatile unsigned short *address,int value)
{
__asm__ __volatile__("sth%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline unsigned in_le32(const volatile unsigned *address)
{
unsigned ret;
__asm__ __volatile__("lwbrx %0,0,%1;twi 0,%0,0;isync":"=r"(ret):"r"(address),"m"(*address));
return ret;
}
static inline unsigned in_be32(const volatile unsigned *address)
{
unsigned ret;
__asm__ __volatile__("lwz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_le32(volatile unsigned *address,int value)
{
__asm__ __volatile__("stwbrx %1,0,%2;sync":"=m"(*address):"r"(value),"r"(address));
}
static inline void out_be32(volatile unsigned *address,int value)
{
__asm__ __volatile__("stw%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline void sync()
{
__asm__ __volatile__("sync":::"memory");
}
static inline void eieio()
{
__asm__ __volatile__("eieio":::"memory");
}
static inline void barrier()
{
__asm__ __volatile__("":::"memory");
}
/////////////////分割线//////////////////////////////////////////
在评论区给出arm与arm64的
在powerpc下,有——
static inline int in_8(const volatile unsigned char *address)
{
int ret;
__asm__ __volatile__("lbz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_8(volatile unsigned char *address,int value)
{
__asm__ __volatile__("stb%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline unsigned in_le16(const volatile unsigned short *address)
{
unsigned ret;
__asm__ __volatile__("lhbrx %0,0,%1;twi 0,%0,0;isync":"=r"(ret):"r"(address),"m"(*address));
return ret;
}
static inline unsigned in_be16(const volatile unsigned short *address)
{
unsigned ret;
__asm__ __volatile__("lhz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_le16(volatile unsigned short *address,int value)
{
__asm__ __volatile__("sthbrx %1,0,%2;sync":"=m"(*address):"r"(value),"r"(address));
}
static inline void out_be16(volatile unsigned short *address,int value)
{
__asm__ __volatile__("sth%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline unsigned in_le32(const volatile unsigned *address)
{
unsigned ret;
__asm__ __volatile__("lwbrx %0,0,%1;twi 0,%0,0;isync":"=r"(ret):"r"(address),"m"(*address));
return ret;
}
static inline unsigned in_be32(const volatile unsigned *address)
{
unsigned ret;
__asm__ __volatile__("lwz%U1%X1 %0,%1;twi 0,%0,0;isync":"=r"(ret):"m"(*address));
return ret;
}
static inline void out_le32(volatile unsigned *address,int value)
{
__asm__ __volatile__("stwbrx %1,0,%2;sync":"=m"(*address):"r"(value),"r"(address));
}
static inline void out_be32(volatile unsigned *address,int value)
{
__asm__ __volatile__("stw%U0%X0 %1,%0;sync":"=m"(*address):"r"(value));
}
static inline void sync()
{
__asm__ __volatile__("sync":::"memory");
}
static inline void eieio()
{
__asm__ __volatile__("eieio":::"memory");
}
static inline void barrier()
{
__asm__ __volatile__("":::"memory");
}
/////////////////分割线//////////////////////////////////////////
在评论区给出arm与arm64的

