Seems to me the loop has been unrolled a bit to increase performance.

From: android-porting@googlegroups.com 
[mailto:android-porting@googlegroups.com] On Behalf Of Victor Surfer
Sent: Tuesday, June 19, 2012 9:21 PM
To: android-porting@googlegroups.com
Subject: [android-porting] Why memcmp is like this in bionic?

Hello,
I found memcmp.c in bionic is like this:

 30 int memcmp(const void *s1, const void *s2, size_t n)
 31 {
 32     const unsigned char*  p1   = s1;
 33     const unsigned char*  end1 = p1 + n;
 34     const unsigned char*  p2   = s2;
 35     int                   d = 0;
 36
 37     for (;;) {
 38         if (d || p1 >= end1) break;
 39         d = (int)*p1++ - (int)*p2++;
 40
 41         if (d || p1 >= end1) break;
 42         d = (int)*p1++ - (int)*p2++;
 43
 44         if (d || p1 >= end1) break;
 45         d = (int)*p1++ - (int)*p2++;
 46
 47         if (d || p1 >= end1) break;
 48         d = (int)*p1++ - (int)*p2++;
 49     }
 50     return d;
 51 }


In the for loop, the same logic repeats 4 times, why? Can it no repeat?

Thx,
Victor

--
unsubscribe: 
android-porting+unsubscr...@googlegroups.com<mailto:android-porting+unsubscr...@googlegroups.com>
website: http://groups.google.com/group/android-porting

ATTENTION: This e-mail contains confidential and/or privileged information. If 
you are not the intended recipient (or have received this e-mail in error) 
please notify the sender immediately and delete this message and any 
attachments immediately. Any unauthorized copying, disclosure or distribution 
of the material in this e-mail is strictly forbidden.

-- 
unsubscribe: android-porting+unsubscr...@googlegroups.com
website: http://groups.google.com/group/android-porting

Reply via email to