… | |
… | |
21 | typedef unsigned long tval; |
21 | typedef unsigned long tval; |
22 | typedef unsigned long long stamp64; |
22 | typedef unsigned long long stamp64; |
23 | |
23 | |
24 | extern inline tval stamp(void) |
24 | extern inline tval stamp(void) |
25 | { |
25 | { |
26 | tval tsc; |
26 | tval tsc; long dummy; |
27 | asm volatile("rdtsc" : "=a" (tsc) : : "edx"); |
27 | asm volatile("cpuid; rdtsc" : "=a" (tsc), "=d" (dummy) : "a" (0) : "ebx", "ecx"); |
28 | return tsc; |
28 | return tsc; |
29 | } |
29 | } |
30 | |
30 | |
31 | extern inline tval measure(tval t) |
31 | extern inline tval measure(tval t) |
32 | { |
32 | { |
33 | tval tsc; |
33 | tval tsc; long dummy; |
34 | asm volatile("rdtsc" : "=a" (tsc) : : "edx"); |
34 | asm volatile("cpuid; rdtsc" : "=a" (tsc), "=d" (dummy) : "a" (0) : "ebx", "ecx"); |
35 | if (tsc>t) |
35 | if (tsc>t) |
36 | return tsc-t; |
36 | return tsc-t; |
37 | else |
37 | else |
38 | return t-tsc; |
38 | return t-tsc; |
39 | } |
39 | } |
… | |
… | |
43 | } |
43 | } |
44 | |
44 | |
45 | #define DSIZE 17318440 |
45 | #define DSIZE 17318440 |
46 | //#define DSIZE 32768 |
46 | //#define DSIZE 32768 |
47 | |
47 | |
48 | #include "lzf_c_slow.c" |
48 | #include "lzf_c_best.c" |
49 | |
49 | |
50 | unsigned char data[DSIZE], data2[DSIZE*2], data3[DSIZE*2]; |
50 | unsigned char data[DSIZE], data2[DSIZE*2], data3[DSIZE*2]; |
51 | |
51 | |
52 | int main(void) |
52 | int main(void) |
53 | { |
53 | { |
… | |
… | |
84 | //read (p[0], &buf, 4); |
84 | //read (p[0], &buf, 4); |
85 | //stat ("/etc/passwd", &sbuf); |
85 | //stat ("/etc/passwd", &sbuf); |
86 | //struct timeval tv; gettimeofday (&tv, 0); |
86 | //struct timeval tv; gettimeofday (&tv, 0); |
87 | //void *x = mmap (0, 16384, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE,-1,0); |
87 | //void *x = mmap (0, 16384, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_PRIVATE,-1,0); |
88 | |
88 | |
89 | l = lzf_compress_slow (data, DSIZE, data2, DSIZE*2); |
89 | l = lzf_compress_best (data, DSIZE, data2, DSIZE*2); |
90 | //for (k = 0; k < l; ++k) |
90 | //for (k = 0; k < l; ++k) |
91 | //printf ("1 %2d: %02x\n", k, data2[k]); |
91 | //printf ("1 %2d: %02x\n", k, data2[k]); |
92 | assert(l); |
92 | assert(l); |
93 | |
93 | |
94 | j = lzf_decompress (data2, l, data3, DSIZE*2); |
94 | j = lzf_decompress (data2, l, data3, DSIZE*2); |