| version 1.3, 2002/07/14 15:24:44 |
version 1.4, 2002/07/15 18:31:26 |
|
|
| |
|
| char *strcpymmx(void *dest, const void *src) |
char *strcpymmx(void *dest, const void *src) |
| { |
{ |
| return (char *) memcpymmx(dest, src, strlen(src)); |
int len = strlen(src); |
| |
char *ret = memcpymmx(dest, src, len); |
| |
ret[len] = '\0'; |
| |
return ret; |
| } |
} |
| char *strncpymmx(void *dest, const void *src, size_t n) |
char *strncpymmx(void *dest, const void *src, size_t n) |
| { |
{ |
| return (char *) memcpymmx(dest, src, n); |
char *ret = memcpymmx(dest, src, n); |
| |
ret[n] = '\0'; |
| |
return ret; |
| } |
} |
| |
<<<<<<< strmmx.c |
| |
|
| |
int align(const int n) |
| |
======= |
| |
|
| static int align(const int n) |
static int align(const int n) |
| |
>>>>>>> 1.3 |
| { |
{ |
| return ((n >> 3) + (n % 8 != 0)) << 3; |
return ((n >> 3) + (n % 8 != 0)) << 3; |
| } |
} |
| Line 24 void *memcpymmx(void *dest, const void * |
|
| Line 34 void *memcpymmx(void *dest, const void * |
|
| { |
{ |
| if ((n % 8) != 0) |
if ((n % 8) != 0) |
| n = align(n); |
n = align(n); |
| n /= 8; |
n = n >> 3; |
| __asm__ __volatile__("1:\n\t" |
__asm__ __volatile__("1:\n\t" |
| "movq (%%eax),%%mm0\n\t" |
"movq (%%eax),%%mm0\n\t" |
| "movq %%mm0,(%%ebx)\n\t" |
"movq %%mm0,(%%ebx)\n\t" |
| Line 38 void *memcpymmx(void *dest, const void * |
|
| Line 48 void *memcpymmx(void *dest, const void * |
|
| void *memsetmmx(void *s, int c, size_t n) |
void *memsetmmx(void *s, int c, size_t n) |
| { |
{ |
| char set[8]; |
char set[8]; |
| int i; |
set[0] = set[1] = set[2] = set[3] = set[4] = set[5] = set[6] = set[7] = c; |
| for (i = 0; i <= 7; i++) |
|
| set[i] = c; |
|
| if ((n % 8) != 0) |
if ((n % 8) != 0) |
| n = align(n); |
n = align(n); |
| n /= 8; |
n = n >> 3; |
| __asm__ __volatile__("movq (%%ebx),%%mm0\n\t" |
__asm__ __volatile__("movq (%%ebx),%%mm0\n\t" |
| "1:\n\t" |
"1:\n\t" |
| "movq %%mm0,(%%eax)\n\t" |
"movq %%mm0,(%%eax)\n\t" |
| Line 58 int memcmpmmx(const void *s1, const void |
|
| Line 66 int memcmpmmx(const void *s1, const void |
|
| { |
{ |
| if ((n % 8) != 0) |
if ((n % 8) != 0) |
| n = align(n); |
n = align(n); |
| n /= 8; |
n = n >> 3; |
| __asm__ __volatile__("1:\n\t" |
__asm__ __volatile__("1:\n\t" |
| "movq (%%eax),%%mm0\n\t" |
"movq (%%eax),%%mm0\n\t" |
| "movq (%%ebx),%%mm1\n\t" |
"movq (%%ebx),%%mm1\n\t" |
| Line 92 int main(int argc, char *argv[]) |
|
| Line 100 int main(int argc, char *argv[]) |
|
| bsize = atoi(argv[1]); |
bsize = atoi(argv[1]); |
| pole1 = (char *) malloc(bsize); |
pole1 = (char *) malloc(bsize); |
| pole2 = (char *) malloc(bsize); |
pole2 = (char *) malloc(bsize); |
| n = atoi(argv[2]) / atoi(bzize); |
n = atoi(argv[2]) / bsize; |
| memsetmmx(pole1, 'A', bsize); |
memsetmmx(pole1, 'A', bsize); |
| for (i = 0; i <= n; i++) |
for (i = 0; i <= n; i++) |
| memcpymmx(pole2, pole1, bsize); |
memcpymmx(pole2, pole1, bsize); |