Author: hselasky
Date: Wed Dec  3 21:55:44 2014
New Revision: 275468
URL: https://svnweb.freebsd.org/changeset/base/275468

Log:
  Optimise the bit searching loops, by quickly skipping the 16 first set
  bits if all the 16 first bits are set. This way the worst case
  searching time is reduced from 32 to 16 cycles.

Modified:
  head/sys/dev/usb/controller/saf1761_otg.c

Modified: head/sys/dev/usb/controller/saf1761_otg.c
==============================================================================
--- head/sys/dev/usb/controller/saf1761_otg.c   Wed Dec  3 21:48:30 2014        
(r275467)
+++ head/sys/dev/usb/controller/saf1761_otg.c   Wed Dec  3 21:55:44 2014        
(r275468)
@@ -230,7 +230,7 @@ saf1761_host_channel_alloc(struct saf176
                map = sc->sc_host_intr_map |
                    sc->sc_host_intr_busy_map[0] |
                    sc->sc_host_intr_busy_map[1];
-               for (x = 0; x != 32; x++) {
+               for (x = ((map & 0xFFFF) == 0xFFFF) ? 16 : 0; x != 32; x++) {
                        if (map & (1 << x))
                                continue;
                        sc->sc_host_intr_map |= (1 << x);
@@ -242,7 +242,7 @@ saf1761_host_channel_alloc(struct saf176
                map = sc->sc_host_isoc_map |
                    sc->sc_host_isoc_busy_map[0] |
                    sc->sc_host_isoc_busy_map[1];
-               for (x = 0; x != 32; x++) {
+               for (x = ((map & 0xFFFF) == 0xFFFF) ? 16 : 0; x != 32; x++) {
                        if (map & (1 << x))
                                continue;
                        sc->sc_host_isoc_map |= (1 << x);
@@ -254,7 +254,7 @@ saf1761_host_channel_alloc(struct saf176
                map = sc->sc_host_async_map |
                    sc->sc_host_async_busy_map[0] |
                    sc->sc_host_async_busy_map[1];
-               for (x = 0; x != 32; x++) {
+               for (x = ((map & 0xFFFF) == 0xFFFF) ? 16 : 0; x != 32; x++) {
                        if (map & (1 << x))
                                continue;
                        sc->sc_host_async_map |= (1 << x);
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to