commit-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

hurd-l4/libl4 ChangeLog ia32/l4/bits/math.h l4/...


From: Marcus Brinkmann
Subject: hurd-l4/libl4 ChangeLog ia32/l4/bits/math.h l4/...
Date: Wed, 17 Sep 2003 10:22:23 -0400

CVSROOT:        /cvsroot/hurd
Module name:    hurd-l4
Branch:         
Changes by:     Marcus Brinkmann <address@hidden>       03/09/17 10:22:23

Modified files:
        libl4          : ChangeLog 
        libl4/ia32/l4/bits: math.h 
        libl4/l4       : math.h space.h 

Log message:
        2003-09-17  Marcus Brinkmann  <address@hidden>
        
        * l4/math.h (__l4_msb): Rename to ...
        (l4_msg): ... this.  Return 1 more, so the least significant bit
        is 1 (to match ffs() behaviour).  Call __l4_msb(), not
        __l4_msb_().
        (l4_lsb): New function.
        * ia32/l4/bits/math.h (__l4_msb_): Rename to ...
        (__l4_msb): ... this.  Add one to result.
        (__l4_lsb): New function.
        * l4/space.h (l4_fpage): Subtract one from MSB.  Check that size
        is not zero before using MSB.

CVSWeb URLs:
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ChangeLog.diff?tr1=1.6&tr2=1.7&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/ia32/l4/bits/math.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/math.h.diff?tr1=1.1&tr2=1.2&r1=text&r2=text
http://savannah.gnu.org/cgi-bin/viewcvs/hurd/hurd-l4/libl4/l4/space.h.diff?tr1=1.3&tr2=1.4&r1=text&r2=text

Patches:
Index: hurd-l4/libl4/ChangeLog
diff -u hurd-l4/libl4/ChangeLog:1.6 hurd-l4/libl4/ChangeLog:1.7
--- hurd-l4/libl4/ChangeLog:1.6 Mon Sep  8 14:46:52 2003
+++ hurd-l4/libl4/ChangeLog     Wed Sep 17 10:22:23 2003
@@ -1,3 +1,16 @@
+2003-09-17  Marcus Brinkmann  <address@hidden>
+
+       * l4/math.h (__l4_msb): Rename to ...
+       (l4_msg): ... this.  Return 1 more, so the least significant bit
+       is 1 (to match ffs() behaviour).  Call __l4_msb(), not
+       __l4_msb_().
+       (l4_lsb): New function.
+       * ia32/l4/bits/math.h (__l4_msb_): Rename to ...
+       (__l4_msb): ... this.  Add one to result.
+       (__l4_lsb): New function.
+       * l4/space.h (l4_fpage): Subtract one from MSB.  Check that size
+       is not zero before using MSB.
+
 2003-09-08  Marcus Brinkmann  <address@hidden>
 
        * l4/space.h (l4_is_nil_fpage): New function.
Index: hurd-l4/libl4/ia32/l4/bits/math.h
diff -u hurd-l4/libl4/ia32/l4/bits/math.h:1.1 
hurd-l4/libl4/ia32/l4/bits/math.h:1.2
--- hurd-l4/libl4/ia32/l4/bits/math.h:1.1       Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/ia32/l4/bits/math.h   Wed Sep 17 10:22:23 2003
@@ -11,8 +11,9 @@
 _L4_EXTERN_INLINE l4_word_t
 __l4_msb_ (l4_word_t data) __attribute__((__const__));
 
+/* Calculate the MSB set in DATA.  DATA is not 0.  */
 _L4_EXTERN_INLINE l4_word_t
-__l4_msb_ (l4_word_t data)
+__l4_msb (l4_word_t data)
 {
   l4_word_t msb;
 
@@ -20,5 +21,19 @@
           : [msb] "=r" (msb)
           : [data] "rm" (data));
 
-  return msb;
+  return msb + 1;
+}
+
+
+/* Calculate the LSB set in DATA.  DATA is not 0.  */
+_L4_EXTERN_INLINE l4_word_t
+__l4_lsb (l4_word_t data)
+{
+  l4_word_t lsb;
+
+  __asm__ ("bsf %[data], %[lsb]"
+          : [lsb] "=r" (lsb)
+          : [data] "rm" (data));
+
+  return lsb + 1;
 }
Index: hurd-l4/libl4/l4/math.h
diff -u hurd-l4/libl4/l4/math.h:1.1 hurd-l4/libl4/l4/math.h:1.2
--- hurd-l4/libl4/l4/math.h:1.1 Sat Jul 26 13:26:09 2003
+++ hurd-l4/libl4/l4/math.h     Wed Sep 17 10:22:23 2003
@@ -15,40 +15,79 @@
 _L4_EXTERN_INLINE l4_word_t
 __l4_msb (l4_word_t data) __attribute__((__const__));
 
+/* Return 0 if DATA is 0, or the bit number of the most significant
+   bit set in DATA.  The least significant bit is 1, the most
+   significant bit 32 resp. 64.  */
 _L4_EXTERN_INLINE l4_word_t
-__l4_msb (l4_word_t data)
+l4_msb (l4_word_t data)
 {
   if (__builtin_constant_p (data))
     {
-#define __L4_MSB_TRY(b) else if (data < (1 << (b + 1))) return (b)
+#define __L4_MSB_TRY(b) else if (data < (1 << (b))) return (b)
 #define __L4_MSB_IS(b) else return (b)
 
       if (!data)
-       /* Undefined.  */
        return 0;
-      __L4_MSB_TRY(0); __L4_MSB_TRY(1); __L4_MSB_TRY(2); __L4_MSB_TRY(3);
-      __L4_MSB_TRY(4); __L4_MSB_TRY(5); __L4_MSB_TRY(6); __L4_MSB_TRY(7);
-      __L4_MSB_TRY(8); __L4_MSB_TRY(9); __L4_MSB_TRY(10); __L4_MSB_TRY(11);
-      __L4_MSB_TRY(12); __L4_MSB_TRY(13); __L4_MSB_TRY(14); __L4_MSB_TRY(15);
-      __L4_MSB_TRY(16); __L4_MSB_TRY(17); __L4_MSB_TRY(18); __L4_MSB_TRY(19);
-      __L4_MSB_TRY(20); __L4_MSB_TRY(21); __L4_MSB_TRY(22); __L4_MSB_TRY(23);
-      __L4_MSB_TRY(24); __L4_MSB_TRY(25); __L4_MSB_TRY(26); __L4_MSB_TRY(27);
-      __L4_MSB_TRY(28); __L4_MSB_TRY(29); __L4_MSB_TRY(30);
+      __L4_MSB_TRY(1); __L4_MSB_TRY(2); __L4_MSB_TRY(3); __L4_MSB_TRY(4);
+      __L4_MSB_TRY(5); __L4_MSB_TRY(6); __L4_MSB_TRY(7); __L4_MSB_TRY(8);
+      __L4_MSB_TRY(9); __L4_MSB_TRY(10); __L4_MSB_TRY(11); __L4_MSB_TRY(12);
+      __L4_MSB_TRY(13); __L4_MSB_TRY(14); __L4_MSB_TRY(15); __L4_MSB_TRY(16);
+      __L4_MSB_TRY(17); __L4_MSB_TRY(18); __L4_MSB_TRY(19); __L4_MSB_TRY(20);
+      __L4_MSB_TRY(21); __L4_MSB_TRY(22); __L4_MSB_TRY(23); __L4_MSB_TRY(24);
+      __L4_MSB_TRY(25); __L4_MSB_TRY(26); __L4_MSB_TRY(27); __L4_MSB_TRY(28);
+      __L4_MSB_TRY(29); __L4_MSB_TRY(30); __L4_MSB_TRY(31);
 #if L4_WORDSIZE == L4_WORDSIZE_32
-      __L4_MSB_IS(31);
+      __L4_MSB_IS(32);
 #else
-      __L4_MSB_TRY(31); __L4_MSB_TRY(32); __L4_MSB_TRY(33); __L4_MSB_TRY(34);
-      __L4_MSB_TRY(35); __L4_MSB_TRY(36); __L4_MSB_TRY(37); __L4_MSB_TRY(38);
-      __L4_MSB_TRY(39); __L4_MSB_TRY(40); __L4_MSB_TRY(41); __L4_MSB_TRY(42);
-      __L4_MSB_TRY(43); __L4_MSB_TRY(44); __L4_MSB_TRY(45); __L4_MSB_TRY(46);
-      __L4_MSB_TRY(47); __L4_MSB_TRY(48); __L4_MSB_TRY(49); __L4_MSB_TRY(50);
-      __L4_MSB_TRY(51); __L4_MSB_TRY(52); __L4_MSB_TRY(53); __L4_MSB_TRY(54);
-      __L4_MSB_TRY(55); __L4_MSB_TRY(56); __L4_MSB_TRY(57); __L4_MSB_TRY(58);
-      __L4_MSB_TRY(59); __L4_MSB_TRY(60); __L4_MSB_TRY(61); __L4_MSB_TRY(62);
-      __L4_MSB_IS(63);
+      __L4_MSB_TRY(32); __L4_MSB_TRY(33); __L4_MSB_TRY(34); __L4_MSB_TRY(35);
+      __L4_MSB_TRY(36); __L4_MSB_TRY(37); __L4_MSB_TRY(38); __L4_MSB_TRY(39);
+      __L4_MSB_TRY(40); __L4_MSB_TRY(41); __L4_MSB_TRY(42); __L4_MSB_TRY(43);
+      __L4_MSB_TRY(44); __L4_MSB_TRY(45); __L4_MSB_TRY(46); __L4_MSB_TRY(47);
+      __L4_MSB_TRY(48); __L4_MSB_TRY(49); __L4_MSB_TRY(50); __L4_MSB_TRY(51);
+      __L4_MSB_TRY(52); __L4_MSB_TRY(53); __L4_MSB_TRY(54); __L4_MSB_TRY(55);
+      __L4_MSB_TRY(56); __L4_MSB_TRY(57); __L4_MSB_TRY(58); __L4_MSB_TRY(59);
+      __L4_MSB_TRY(60); __L4_MSB_TRY(61); __L4_MSB_TRY(62); __L4_MSB_TRY(63);
+      __L4_MSB_IS(64)
 #endif
     }
-  return __l4_msb_ (data);
+  return data ? __l4_msb (data) : 0;
 }
+
+
+/* Return 0 if DATA is 0, or the bit number of the least significant
+   bit set in DATA.  The least significant bit is 1, the most
+   significant bit 32 resp. 64.  */
+_L4_EXTERN_INLINE l4_word_t
+l4_lsb (l4_word_t data)
+{
+  if (__builtin_constant_p (data))
+    {
+#define __L4_LSB_TRY(b) else if (data >= (1 << (b - 1))) return (b)
+#define __L4_LSB_IS(b) else return (b)
+
+      if (!data)
+       return 0;
+#if L4_WORDSIZE == L4_WORDSIZE_64
+      __L4_LSB_TRY(64); __L4_LSB_TRY(63); __L4_LSB_TRY(62); __L4_LSB_TRY(61);
+      __L4_LSB_TRY(60); __L4_LSB_TRY(59); __L4_LSB_TRY(58); __L4_LSB_TRY(57);
+      __L4_LSB_TRY(56); __L4_LSB_TRY(55); __L4_LSB_TRY(54); __L4_LSB_TRY(53);
+      __L4_LSB_TRY(52); __L4_LSB_TRY(51); __L4_LSB_TRY(50); __L4_LSB_TRY(49);
+      __L4_LSB_TRY(48); __L4_LSB_TRY(47); __L4_LSB_TRY(46); __L4_LSB_TRY(45);
+      __L4_LSB_TRY(44); __L4_LSB_TRY(43); __L4_LSB_TRY(42); __L4_LSB_TRY(41);
+      __L4_LSB_TRY(40); __L4_LSB_TRY(39); __L4_LSB_TRY(38); __L4_LSB_TRY(37);
+      __L4_LSB_TRY(36); __L4_LSB_TRY(35); __L4_LSB_TRY(34); __L4_LSB_TRY(33);
+#endif
+      __L4_LSB_TRY(32); __L4_LSB_TRY(31); __L4_LSB_TRY(30); __L4_LSB_TRY(29);
+      __L4_LSB_TRY(28); __L4_LSB_TRY(27); __L4_LSB_TRY(26); __L4_LSB_TRY(25);
+      __L4_LSB_TRY(24); __L4_LSB_TRY(23); __L4_LSB_TRY(22); __L4_LSB_TRY(11);
+      __L4_LSB_TRY(20); __L4_LSB_TRY(19); __L4_LSB_TRY(18); __L4_LSB_TRY(17);
+      __L4_LSB_TRY(16); __L4_LSB_TRY(15); __L4_LSB_TRY(14); __L4_LSB_TRY(13);
+      __L4_LSB_TRY(12); __L4_LSB_TRY(11); __L4_LSB_TRY(10); __L4_LSB_TRY(9);
+      __L4_LSB_TRY(8); __L4_LSB_TRY(7); __L4_LSB_TRY(6); __L4_LSB_TRY(5);
+      __L4_LSB_TRY(4); __L4_LSB_TRY(3); __L4_LSB_TRY(2); __L4_LSB_IS(1);
+    }
+  return data ? __l4_lsb (data) : 0;
+}
+
 
 #endif /* l4/math.h */
Index: hurd-l4/libl4/l4/space.h
diff -u hurd-l4/libl4/l4/space.h:1.3 hurd-l4/libl4/l4/space.h:1.4
--- hurd-l4/libl4/l4/space.h:1.3        Mon Sep  8 14:46:52 2003
+++ hurd-l4/libl4/l4/space.h    Wed Sep 17 10:22:23 2003
@@ -36,10 +36,10 @@
 l4_fpage (l4_word_t base, int size)
 {
   l4_fpage_t fpage;
-  l4_word_t msb = __l4_msb (size);
+  l4_word_t msb = l4_msb (size) - 1;
 
   fpage.base = base >> 10;
-  fpage.log2_size = (1 << msb) == size ? msb : msb + 1;
+  fpage.log2_size = size ? ((1 << msb) == size ? msb : msb + 1) : 0;
   fpage.rights = l4_no_access;
 
   return fpage;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]