mirror of
https://github.com/nArnoSNES/tcc-65816.git
synced 2024-09-29 08:58:24 +00:00
48 lines
1.0 KiB
C
48 lines
1.0 KiB
C
|
/* Duff's device is legal C; test to make sure the compiler
|
||
|
doesn't complain about it.
|
||
|
|
||
|
Jason Thorpe <thorpej@wasabisystems.com>
|
||
|
Derived from Tom Duff's original usenet message about the device. */
|
||
|
|
||
|
/* { dg-do run } */
|
||
|
/* { dg-options "-O2" } */
|
||
|
|
||
|
extern void abort (void);
|
||
|
extern void exit (int);
|
||
|
|
||
|
typedef __SIZE_TYPE__ size_t;
|
||
|
extern int memcmp (const void *, const void *, size_t);
|
||
|
|
||
|
void
|
||
|
duffcpy (char *dst, const char *src, unsigned long size)
|
||
|
{
|
||
|
unsigned long n = (size + 7) / 8;
|
||
|
|
||
|
switch (size % 8)
|
||
|
{
|
||
|
case 0: do { *dst++ = *src++;
|
||
|
case 7: *dst++ = *src++;
|
||
|
case 6: *dst++ = *src++;
|
||
|
case 5: *dst++ = *src++;
|
||
|
case 4: *dst++ = *src++;
|
||
|
case 3: *dst++ = *src++;
|
||
|
case 2: *dst++ = *src++;
|
||
|
case 1: *dst++ = *src++;
|
||
|
} while (--n > 0);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
const char testpat[] = "The quick brown fox jumped over the lazy dog.";
|
||
|
|
||
|
int
|
||
|
main()
|
||
|
{
|
||
|
char buf[64];
|
||
|
|
||
|
duffcpy (buf, testpat, sizeof (testpat));
|
||
|
if (memcmp (buf, testpat, sizeof (testpat)) != 0)
|
||
|
abort ();
|
||
|
|
||
|
exit (0);
|
||
|
}
|