Print this page
patch bitmap

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/intel/asm/bitmap.h
          +++ new/usr/src/uts/intel/asm/bitmap.h
↓ open down ↓ 28 lines elided ↑ open up ↑
  29   29  
  30   30  #include <sys/ccompile.h>
  31   31  #include <sys/types.h>
  32   32  
  33   33  #ifdef  __cplusplus
  34   34  extern "C" {
  35   35  #endif
  36   36  
  37   37  #if !defined(__lint) && defined(__GNUC__)
  38   38  
       39 +#if defined(__amd64)
       40 +#define __SUF   "q"
       41 +#elif defined(__i386)
       42 +#define __SUF   "l"
       43 +#else
       44 +#error "port me"
       45 +#endif
       46 +
  39   47  extern __GNU_INLINE int
  40   48  highbit(ulong_t i)
  41   49  {
  42      -        long __value = -1l;
       50 +        long value = -1l;
  43   51  
  44      -#if defined(__amd64)
  45      -        __asm__(
  46      -            "bsrq       %1,%0"
  47      -            : "+r" (__value)
  48      -            : "r" (i)
  49      -            : "cc");
  50      -#elif defined(__i386)
  51   52          __asm__(
  52      -            "bsrl       %1,%0"
  53      -            : "+r" (__value)
       53 +            "bsr" __SUF " %1,%0"
       54 +            : "+r" (value)
  54   55              : "r" (i)
  55   56              : "cc");
  56      -#else
  57      -#error  "port me"
  58      -#endif
  59      -        return ((int)(__value + 1));
       57 +
       58 +        return ((int)(value + 1));
  60   59  }
  61   60  
  62   61  extern __GNU_INLINE int
  63   62  lowbit(ulong_t i)
  64   63  {
  65      -        long __value = -1l;
       64 +        long value = -1l;
  66   65  
  67      -#if defined(__amd64)
  68      -        __asm__(
  69      -            "bsfq       %1,%0"
  70      -            : "+r" (__value)
  71      -            : "r" (i)
  72      -            : "cc");
  73      -#elif defined(__i386)
  74   66          __asm__(
  75      -            "bsfl       %1,%0"
  76      -            : "+r" (__value)
       67 +            "bsf" __SUF " %1,%0"
       68 +            : "+r" (value)
  77   69              : "r" (i)
  78   70              : "cc");
  79      -#else
  80      -#error  "port me"
  81      -#endif
  82      -        return ((int)(__value + 1));
       71 +
       72 +        return ((int)(value + 1));
  83   73  }
  84   74  
  85   75  extern __GNU_INLINE uint_t
  86   76  atomic_btr32(uint32_t *memory, uint_t bitnum)
  87   77  {
  88      -        uint8_t __value;
       78 +        uint8_t value;
  89   79  
  90      -#if defined(__amd64)
  91      -        __asm__ __volatile__(
  92      -            "lock;"
  93      -            "btrl %2, (%0);"
  94      -            "setc %1"
  95      -            : "+r" (memory), "+r" (__value)
  96      -            : "ir" (bitnum)
  97      -            : "cc");
  98      -#elif defined(__i386)
  99   80          __asm__ __volatile__(
 100   81              "lock;"
 101      -            "btrl %2, (%0);"
       82 +            "btrl %2,%0;"
 102   83              "setc %1"
 103      -            : "+r" (memory), "=r" (__value)
       84 +            : "+m" (*memory), "=r" (value)
 104   85              : "ir" (bitnum)
 105   86              : "cc");
 106      -#else
 107      -#error  "port me"
 108      -#endif
 109      -        return ((uint_t)__value);
       87 +
       88 +        return ((uint_t)value);
 110   89  }
       90 +
       91 +#undef __SUF
 111   92  
 112   93  #endif  /* !__lint && __GNUC__ */
 113   94  
 114   95  #ifdef  __cplusplus
 115   96  }
 116   97  #endif
 117   98  
 118   99  #endif  /* _ASM_BITMAP_H */
    
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX