#include <stdio.h> #include<stdlib.h> #include<unistd.h> union stcke { unsigned long buffer[2]; struct reader { char pad; unsigned long long time; int time2; short program; } __attribute__ ((packed)) reader; }; int stcke(unsigned long *addr) { int cc; asm volatile ( "stcke %0\n" "ipm %1\n" "srl %1, 28\n" :"+Q" (*addr), "=d"(cc)::"cc"); return cc; } unsigned long clockticks_in_msec(unsigned long b, unsigned long a) { return (b -a ) / 4096000UL; } int main() { union stcke start, end; int cc; cc = stcke(start.buffer); if (cc) printf("cc != 0!\n"); sleep(1); cc = stcke(end.buffer); if (cc) printf("cc != 0!\n"); unsigned long c = clockticks_in_msec(end.reader.time, start.reader.time); if (c >= 1000 && c < 1500) printf("OK.....Testcase passed\n"); else printf("FAILED.....Testcase failed\n"); return 0; }