00001
00002 #ifndef __CMI_DMEMCPY_128_H__
00003 #define __CMI_DMEMCPY_128_H__
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 inline void *bg_dcopy128 ( void * dest, const void *src, size_t n )
00015 {
00016 const double *f1 = ((const double *) src) - 1;
00017 double *f2 = ((double *) dest) - 1;
00018
00019 size_t size = n >> 7;
00020 size_t remainder = n & 0x7f;
00021
00022 register double r0;
00023 register double r1;
00024 register double r2;
00025 register double r3;
00026 register double r4;
00027 register double r5;
00028 register double r6;
00029 register double r7;
00030
00031 if (size > 0) {
00032 size --;
00033 r0 = *(++f1);
00034 r1 = *(++f1);
00035 r2 = *(++f1);
00036 r3 = *(++f1);
00037 r4 = *(++f1);
00038
00039 while (size -- ) {
00040 *(++ f2) = r0;
00041 r5 = *(++f1);
00042 *(++ f2) = r1;
00043 r6 = *(++f1);
00044 *(++ f2) = r2;
00045 r7 = *(++f1);
00046 *(++ f2) = r3;
00047 r0 = *(++f1);
00048
00049 *(++ f2) = r4;
00050 r1 = *(++f1);
00051 *(++ f2) = r5;
00052 r2 = *(++f1);
00053 *(++ f2) = r6;
00054 r3 = *(++f1);
00055 *(++ f2) = r7;
00056 r4 = *(++f1);
00057
00058 *(++ f2) = r0;
00059 r5 = *(++f1);
00060 *(++ f2) = r1;
00061 r6 = *(++f1);
00062 *(++ f2) = r2;
00063 r7 = *(++f1);
00064
00065 *(++ f2) = r3;
00066 r0 = *(++f1);
00067 *(++ f2) = r4;
00068 r1 = *(++f1);
00069 *(++ f2) = r5;
00070 r2 = *(++f1);
00071 *(++ f2) = r6;
00072 r3 = *(++f1);
00073 *(++ f2) = r7;
00074 r4 = *(++f1);
00075 }
00076
00077 *(++ f2) = r0;
00078 r5 = *(++f1);
00079 *(++ f2) = r1;
00080 r6 = *(++f1);
00081 *(++ f2) = r2;
00082 r7 = *(++f1);
00083 *(++ f2) = r3;
00084 r0 = *(++f1);
00085
00086 *(++ f2) = r4;
00087 r1 = *(++f1);
00088 *(++ f2) = r5;
00089 r2 = *(++f1);
00090 *(++ f2) = r6;
00091 r3 = *(++f1);
00092 *(++ f2) = r7;
00093 r4 = *(++f1);
00094
00095 *(++ f2) = r0;
00096 r5 = *(++f1);
00097 *(++ f2) = r1;
00098 r6 = *(++f1);
00099 *(++ f2) = r2;
00100 r7 = *(++f1);
00101
00102 *(++ f2) = r3;
00103 *(++ f2) = r4;
00104 *(++ f2) = r5;
00105 *(++ f2) = r6;
00106 *(++ f2) = r7;
00107 }
00108
00109 if (remainder)
00110 return bg_wcopy (f2+1, f1+1, remainder);
00111
00112 return f2+1;
00113 }
00114
00115 #endif