Add _mesa_ffsll() for compatibility on OSes without ffsll(), and use it.
authorEric Anholt <eric@anholt.net>
Sun, 21 Jan 2007 02:06:38 +0000 (18:06 -0800)
committerEric Anholt <eric@anholt.net>
Fri, 26 Jan 2007 22:18:24 +0000 (14:18 -0800)
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/main/imports.c
src/mesa/main/imports.h

index 57ee294f0cf699b735cab9f2ace1be279f70165d..08741ad90f6b19307e306245cd469b726495a38e 100644 (file)
@@ -414,7 +414,7 @@ GLboolean brw_upload_vertices( struct brw_context *brw,
     */
    
    while (tmp) {
-      GLuint i = ffsll(tmp)-1;
+      GLuint i = _mesa_ffsll(tmp)-1;
       struct brw_vertex_element *input = &brw->vb.inputs[i];
 
       tmp &= ~((GLuint64EXT)1<<i);
index 996839a20e99173e3ce0be353c2ef4a06bc082aa..ad77373075bd85603bc93ed0c25a3b1b066cd0dc 100644 (file)
@@ -574,6 +574,27 @@ _mesa_ffs(int i)
 #endif
 }
 
+int
+_mesa_ffsll(long long val)
+{
+#ifdef ffsll
+       return ffsll(val);
+#else
+       int bit;
+
+       assert(sizeof(val) == 8);
+
+       bit = ffs(val);
+       if (bit != 0)
+               return bit;
+
+       bit = ffs(val >> 32);
+       if (bit != 0)
+               return 32 + bit;
+
+       return 0;
+#endif
+}
 
 /**
  * Return number of bits set in given GLuint.
index 19a9478f76af5434e759f468d03079114f581d21..d9885dbeec45ee232ac2d8f81f1a3f8fc0c0aaf6 100644 (file)
@@ -688,6 +688,9 @@ _mesa_pow(double x, double y);
 extern int
 _mesa_ffs(int i);
 
+extern int
+_mesa_ffsll(long long i);
+
 extern unsigned int
 _mesa_bitcount(unsigned int n);