mirror of
https://github.com/cc65/cc65.git
synced 2024-12-28 22:30:12 +00:00
Added Duff's Device to tests.
This commit is contained in:
parent
3bd3fd8749
commit
c4823c6fd4
76
test/val/duffs-device.c
Normal file
76
test/val/duffs-device.c
Normal file
@ -0,0 +1,76 @@
|
||||
/*
|
||||
!!DESCRIPTION!! Implementation of Duff's device (loop unrolling).
|
||||
!!ORIGIN!!
|
||||
!!LICENCE!! GPL, read COPYING.GPL
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define ASIZE (100)
|
||||
|
||||
unsigned char success=0;
|
||||
unsigned char failures=0;
|
||||
unsigned char dummy=0;
|
||||
|
||||
#ifdef SUPPORT_BIT_TYPES
|
||||
bit bit0 = 0;
|
||||
#endif
|
||||
|
||||
void done()
|
||||
{
|
||||
dummy++;
|
||||
}
|
||||
|
||||
int acmp(char* a, char* b, int count)
|
||||
{
|
||||
int i;
|
||||
|
||||
for(i = 0; i < count; i++) {
|
||||
if(a[i] != b[i]) {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
void duffit (char* to, char* from, int count)
|
||||
{
|
||||
int n = (count + 7) / 8;
|
||||
|
||||
switch(count % 8) {
|
||||
case 0: do { *to++ = *from++;
|
||||
case 7: *to++ = *from++;
|
||||
case 6: *to++ = *from++;
|
||||
case 5: *to++ = *from++;
|
||||
case 4: *to++ = *from++;
|
||||
case 3: *to++ = *from++;
|
||||
case 2: *to++ = *from++;
|
||||
case 1: *to++ = *from++;
|
||||
} while(--n > 0);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void)
|
||||
{
|
||||
char a[ASIZE] = {1};
|
||||
char b[ASIZE] = {2};
|
||||
|
||||
/* a and b should be different */
|
||||
if(!acmp(a, b, ASIZE)) {
|
||||
failures++;
|
||||
}
|
||||
|
||||
duffit(a, b, ASIZE);
|
||||
|
||||
/* a and b should be the same */
|
||||
if(acmp(a, b, ASIZE)) {
|
||||
failures++;
|
||||
}
|
||||
|
||||
success=failures;
|
||||
done();
|
||||
printf("failures: %d\n",failures);
|
||||
|
||||
return failures;
|
||||
}
|
Loading…
Reference in New Issue
Block a user