Watson1978
2/17/2013 - 3:32 PM

char_to_short.c

#include <stdlib.h>
#include <stdio.h>

void
copy_unrolling(const char* src, short* dst, int n)
{
    int i = n;
    while ((i - 4) >= 0) {
	*dst++ = *src++; *dst++ = *src++;
	*dst++ = *src++; *dst++ = *src++;
	i -=  4;
    }
    while(i--) {
	*dst++ = *src++;
    }
}

void
copy(const char* src, short* dst, int n)
{
    while(n--) {
	*dst++ = *src++;
    }
}

void
make_data(char* src, int n)
{
    for (int i = 0; i < n; i++) {
	src[i] = i;
    }
}

int main(void)
{
    char  src[100000];
    short dst[100000];

    make_data(src, 100000);

    for (int i = 0; i < 10000; i++) {
	//copy(src, dst, 100000);
	copy_unrolling(src, dst, 100000);
    }
}