#include
#include
#include
void* memorycopy (void *des, const void *src, size_t count)
{
size_t n = (count + 7) / 8;
char* destination = (char *) des;
char* source = (char *) src;
switch (count % 8)
{
case 0: do{ *destination++ = *source++;
case 7: *destination++ = *source++;
case 6: *destination++ = *source++;
case 5: *destination++ = *source++;
case 4: *destination++ = *source++;
case 3: *destination++ = *source++;
case 2: *destination++ = *source++;
case 1: *destination++ = *source++;
} while (--n > 0);
}
return des;
}
void tworegistervarswap (int *x, int *y)
{
if (x != y)
{
*x = *x ^ *y;
*y = *x ^ *y;
*x = *x ^ *y;
}
}
int bigintegeraverage (int x, int y)
{
return (x & y) + ((x ^ y) >> 1);
}
int main (void)
{
char *testArray = "This is a test.";
char buffer[50];
int x = 10;
int y = 20;
int m = 2000000000;
int n = 1000000000;
printf ("\nmemorycopy test before: %s", testArray);
memorycopy (buffer, testArray, strlen(testArray) + 1);
printf ("\nmemorycopy test after: %s", buffer);
printf ("\n");
printf ("\ntworegistervarswap test before: %d %d", x, y);
tworegistervarswap (&x, &y);
printf ("\ntworegistervarswap test after: %d %d", x, y);
printf ("\n");
printf ("\nbigintegeraverage regular code test: %d ", (m + n) / 2);
printf ("\nbigintegeraverage function test: %d", bigintegeraverage (m, n) );
printf ("\n");
return 0;
}