www.pudn.com > vxworks0108.rar > asm.h
#ifndef _PPC_H
#define _PPC_H
#define S8 char
#define U8 unsigned char
#define U16 unsigned short
#define U32 unsigned int
#define U64 long double
/*
#define SYNC __asm __volatile("sync")
#define ISYNC __asm __volatile("isync")
#define EIEIO __asm __volatile("eieio")
#define NOP __asm __volatile("nop")
#define EIEIO_SYNC __asm __volatile("eieio; sync")
*/
/* Macros for doing byte swapping loads and stores */
#define LWBRX(dest, addr) __asm __volatile("lwbrx %0,0,%1"\
: "=r"(dest) : "r"(addr))
#define LHBRX(dest, addr) __asm __volatile("lhbrx %0,0,%1"\
: "=r"(dest) : "r"(addr))
#define STWBRX(value, dest) __asm __volatile("stwbrx %0,0,%1"\
: : "r"(value), "r"(dest))
#define STHBRX(value, dest) __asm __volatile("sthbrx %0,0,%1"\
: : "r"(value), "r"(dest))
/* Macros for doing direct loads and stores */
#define LBZ(dest, addr) __asm __volatile("lbz %0,0(%1)"\
: "=r"(dest) : "r"(addr))
#define LHZ(dest, addr) __asm __volatile("lhz %0,0(%1)"\
: "=r"(dest) : "r"(addr))
#define LWZ(dest, addr) __asm __volatile("lwz %0,0(%1)"\
: "=r"(dest) : "r"(addr))
#define STB(value, dest) __asm __volatile("stb %0,0(%1)"\
: : "r"(value), "r"(dest))
#define STH(value, dest) __asm __volatile("sth %0,0(%1)"\
: : "r"(value), "r"(dest))
#define STW(value, dest) __asm __volatile("stw %0,0(%1)"\
: : "r"(value), "r"(dest))
/* Macros to access DEC reg -- Supervisor mode only*/
#define GET_DEC_REG(dest) __asm __volatile("mfdec %0"\
: "=r"(dest) : )
#define SET_DEC_REG(value) __asm __volatile("mtdec %0"\
: : "r"(value))
/* Macros to access TB reg -- Must be in supervisor mode to set */
#define GET_TBL_REG(dest) __asm __volatile("mftb %0"\
: "=r"(dest) : )
#define GET_TBU_REG(dest) __asm __volatile("mftbu %0"\
: "=r"(dest) : )
#define SET_TBL_REG(value) __asm __volatile("mttb %0"\
: : "r"(value))
#define SET_TBU_REG(value) __asm __volatile("mttbu %0"\
: : "r"(value))
/* Count number of leading zeros of a 32 bit value */
#define CNTLZW(result, data) __asm __volatile("cntlzw %0, %1"\
: "=r" (result) : "r" (data))
/* Store Regs in memory */
#define STMW(reg, addr) __asm __volatile("stmw %0,0(%1)"\
: : "r"(reg), "r"(addr))
/* Access MSR Register -- Supervisor mode only */
#define MFMSR(dest) __asm __volatile("mfmsr %0"\
: "=r"(dest) : )
#define MTMSR(value) __asm __volatile("mtmsr %0"\
: : "r"(value))
#define ENABLE_EXTERNAL_INTR(msr_reg) MFMSR(msr_reg); \
MTMSR((msr_reg | 0x8000))
#define DISABLE_EXTERNAL_INTR(msr_reg) MFMSR(msr_reg); \
MTMSR((msr_reg & 0xFFFF7FFF))
/* Access HID1 Register -- Supervisor mode only */
#define GETHID1(dest) __asm __volatile("mfspr %0, 1009"\
: "=r"(dest) : )
#define GETSRR0(dest) __asm __volatile("mfspr %0, 26"\
: "=r"(dest) : )
#define GETSRR1(dest) __asm __volatile("mfspr %0, 27"\
: "=r"(dest) : )
#define GETLR(dest) __asm __volatile("mfspr %0, 8"\
: "=r"(dest) : )
#endif