\r
\r
#ifndef _ASM_MISC_C\r
+typedef struct\r
+{\r
+ int b0;\r
+ int b1;\r
+ int b2;\r
+ int b3;\r
+ int b4;\r
+ int b5;\r
+ int b6;\r
+ int b7;\r
+} intblock;\r
+\r
PICO_INTERNAL_ASM void memcpy16(unsigned short *dest, unsigned short *src, int count)\r
{\r
+ if ((((int)dest | (int)src) & 3) == 0)\r
+ {\r
+ if (count >= 32) {\r
+ memcpy32((int *)dest, (int *)src, count/2);\r
+ count&=1;\r
+ } else {\r
+ for (; count >= 2; count -= 2, dest+=2, src+=2)\r
+ *(int *)dest = *(int *)src;\r
+ }\r
+ }\r
while (count--)\r
*dest++ = *src++;\r
}\r
\r
PICO_INTERNAL_ASM void memcpy32(int *dest, int *src, int count)\r
{\r
+ intblock *bd = (intblock *) dest, *bs = (intblock *) src;\r
+\r
+ for (; count >= sizeof(*bd)/4; count -= sizeof(*bd)/4)\r
+ *bd++ = *bs++;\r
+\r
+ dest = (int *)bd; src = (int *)bs;\r
while (count--)\r
*dest++ = *src++;\r
}\r
\r
PICO_INTERNAL_ASM void memset32(int *dest, int c, int count)\r
{\r
+ for (; count >= 8; count -= 8, dest += 8)\r
+ dest[0] = dest[1] = dest[2] = dest[3] =\r
+ dest[4] = dest[5] = dest[6] = dest[7] = c;\r
+\r
while (count--)\r
*dest++ = c;\r
}\r