summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/dri/i965/brw_draw_upload.c2
-rw-r--r--src/mesa/main/imports.c21
-rw-r--r--src/mesa/main/imports.h3
3 files changed, 25 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_draw_upload.c b/src/mesa/drivers/dri/i965/brw_draw_upload.c
index 57ee294f0c..08741ad90f 100644
--- a/src/mesa/drivers/dri/i965/brw_draw_upload.c
+++ b/src/mesa/drivers/dri/i965/brw_draw_upload.c
@@ -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);
diff --git a/src/mesa/main/imports.c b/src/mesa/main/imports.c
index 996839a20e..ad77373075 100644
--- a/src/mesa/main/imports.c
+++ b/src/mesa/main/imports.c
@@ -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.
diff --git a/src/mesa/main/imports.h b/src/mesa/main/imports.h
index 19a9478f76..d9885dbeec 100644
--- a/src/mesa/main/imports.h
+++ b/src/mesa/main/imports.h
@@ -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);