Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, October 16, 2026

Diff for libplaton/platon/str/strmmx.c between version 1.3 and 1.4

version 1.3, 2002/07/14 15:24:44 version 1.4, 2002/07/15 18:31:26
Line 8 
Line 8 
   
 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);

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.4

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top