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"