| #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; |
| |
| } |