Hifitest.c
Jump to navigation
Jump to search
#include <stdio.h>
#include <time.h>
#include <xtensa/tie/xt_hifi2.h>
#define INC 1
main(int argc, char **argv)
{
int inc;
int inc2;
register ae_p24x2s p24_cnt;
register ae_p24x2s p24_inc;
register ae_p24x2s p24_pid;
int cnt;
int cnt2;
int pid;
int pid2;
volatile int i, j, k, l;
time_t time0 = time(NULL);
time_t time1 = time(NULL);
restart:
cnt = 0;
cnt2 = 0;
inc = INC;
pid = getpid();
p24_cnt = AE_ZEROP48();
p24_inc = AE_MOVPA24(inc);
p24_pid = AE_MOVPA24(pid);
while (1)
{
int errors = 0;
if ((cnt & 0xffffff) == 0) {
time0 = time1;
time1 = time(NULL);
printf("cnt:0x%x, pid:%d; Eatting cpu; time:%ld\n", cnt, pid, (time1 - time0));
for(i = 0; i<1000; i++) {
for(j = 0; j < 1000; j++) {
for(k = 0; k < 10; k++) {
l++;
}
}
}
time0 = time1;
time1 = time(NULL);
printf("cnt:0x%x, pid:%d; Eating Tie; time:%ld\n", cnt, pid, (time1 - time0));
}
cnt = (cnt + inc) & 0xffffff;
p24_cnt = AE_ADDP24(p24_cnt, p24_inc);
cnt2 = AE_MOVAP24S_L(p24_cnt) & 0xffffff;
pid2 = AE_MOVAP24S_L(p24_pid) & 0xffffff;
inc2 = AE_MOVAP24S_L(p24_inc) & 0xffffff;
if (cnt2 != cnt)
{
swapon("/tmp/cmt2", 0);
printf("Error: cnt2:0x%x != cnt:0x%x\n", cnt2, cnt);
errors++;
}
if (inc2 != inc)
{
swapon("/tmp/inc2", 0);
printf("Error: inc2:%d != inc:%d\n", cnt2, cnt);
errors++;
}
if ( pid2 != pid)
{
swapon("/tmp/pid2", 0);
printf("Error: pid2:%d != pid:%d\n", pid2, pid);
errors++;
}
if (errors) {
printf("for...\n");
for(i=0; i < 0x3FFFF; i++)
j++;
printf("sleep 10\n");
sleep(10);
printf("for...\n");
for(i=0; i < 0x3FFFF; i++)
j++;
printf("restart\n");
goto restart;
}
}
}