r300g: Clean up bitcounting function.
authorCorbin Simpson <MostAwesomeDude@gmail.com>
Fri, 20 Nov 2009 22:10:59 +0000 (14:10 -0800)
committerCorbin Simpson <MostAwesomeDude@gmail.com>
Fri, 20 Nov 2009 22:10:59 +0000 (14:10 -0800)
I didn't see this in u_math; surely somebody else has this wheel
reinvented elsewhere.

src/gallium/drivers/r300/r300_emit.c

index 4cd5074379f654d70aa41aa02219ccb89a1c143d..c50c989f01abadf4840f7af891bf9093c52dbb52 100644 (file)
@@ -690,14 +690,19 @@ void r300_emit_vertex_format_state(struct r300_context* r300)
     END_CS;
 }
 
-/* XXX This should probably go to util ... */
+/* XXX This should go to util ... */
 /* Return the number of bits set in the given number. */
 static unsigned bitcount(unsigned n)
 {
-    unsigned bits;
-    for (bits = 0; n > 0; n = n >> 1) {
-        bits += n & 1;
+    unsigned bits = 0;
+
+    while (n) {
+        if (n & 1) {
+            bits++;
+        }
+        n >>= 1;
     }
+
     return bits;
 }
 
@@ -714,7 +719,7 @@ void r300_emit_vertex_program_code(struct r300_context* r300,
     int temp_count = MAX2(code->num_temporaries, 1);
     int pvs_num_slots = MIN3(vtx_mem_size / input_count,
                              vtx_mem_size / output_count, 10);
-    int pvs_num_controllers = MIN2(6, vtx_mem_size / temp_count);
+    int pvs_num_controllers = MIN2(vtx_mem_size / temp_count, 6);
 
     CS_LOCALS(r300);