text: /*
   * BK Id: SCCS/s.privinst.h 1.5 05/17/01 18:14:23 cort
   */
  /*
   * Copyright (C) 1996 Paul Mackerras.
   */
  #include <linux/config.h>
  
  #define GETREG(reg)		\
      static inline int get_ ## reg (void)	\
  	{ int ret; asm volatile ("mf" #reg " %0" : "=r" (ret) :); return ret; }
  
  #define SETREG(reg)		\
      static inline void set_ ## reg (int val)	\
  	{ asm volatile ("mt" #reg " %0" : : "r" (val)); }
  
  GETREG(msr)
  SETREG(msr)
  GETREG(cr)
  
  #define GSETSPR(n, name)	\
      static inline int get_ ## name (void) \
  	{ int ret; asm volatile ("mfspr %0," #n : "=r" (ret) : ); return ret; } \
      static inline void set_ ## name (int val) \
  	{ asm volatile ("mtspr " #n ",%0" : : "r" (val)); }
  
  GSETSPR(0, mq)
  GSETSPR(1, xer)
  GSETSPR(4, rtcu)
  GSETSPR(5, rtcl)
  GSETSPR(8, lr)
  GSETSPR(9, ctr)
  GSETSPR(18, dsisr)
  GSETSPR(19, dar)
  GSETSPR(22, dec)
  GSETSPR(25, sdr1)
  GSETSPR(26, srr0)
  GSETSPR(27, srr1)
  GSETSPR(272, sprg0)
  GSETSPR(273, sprg1)
  GSETSPR(274, sprg2)
  GSETSPR(275, sprg3)
  GSETSPR(282, ear)
  GSETSPR(287, pvr)
  #ifndef CONFIG_8xx
  GSETSPR(528, bat0u)
  GSETSPR(529, bat0l)
  GSETSPR(530, bat1u)
  GSETSPR(531, bat1l)
  GSETSPR(532, bat2u)
  GSETSPR(533, bat2l)
  GSETSPR(534, bat3u)
  GSETSPR(535, bat3l)
  GSETSPR(1008, hid0)
  GSETSPR(1009, hid1)
  GSETSPR(1010, iabr)
  GSETSPR(1013, dabr)
  GSETSPR(1023, pir)
  #else
  GSETSPR(144, cmpa)
  GSETSPR(145, cmpb)
  GSETSPR(146, cmpc)
  GSETSPR(147, cmpd)
  GSETSPR(158, ictrl)
  #endif
  
  static inline int get_sr(int n)
  {
      int ret;
  
      asm (" mfsrin %0,%1" : "=r" (ret) : "r" (n << 28));
      return ret;
  }
  
  static inline void set_sr(int n, int val)
  {
      asm ("mtsrin %0,%1" : : "r" (val), "r" (n << 28));
  }
  
  static inline void store_inst(void *p)
  {
      asm volatile ("dcbst 0,%0; sync; icbi 0,%0; isync" : : "r" (p));
  }
  
  static inline void cflush(void *p)
  {
      asm volatile ("dcbf 0,%0; icbi 0,%0" : : "r" (p));
  }
  
  static inline void cinval(void *p)
  {
      asm volatile ("dcbi 0,%0; icbi 0,%0" : : "r" (p));
  }
  
  