[Top][All Lists]
[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;
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- hurd-l4/libl4 ChangeLog ia32/l4/bits/math.h l4/...,
Marcus Brinkmann <=