diff options
author | Regina König | 2021-04-21 01:57:47 +0200 |
---|---|---|
committer | Regina König | 2021-04-21 01:57:47 +0200 |
commit | 2567b0b1334ca24099ddbaa693abf9447ce83e32 (patch) | |
tree | 49547272bbc100c58900b44bc664edc3b8488543 | |
parent | Adjust clk computation (diff) | |
download | memtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.tar.gz memtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.tar.xz memtest86-2567b0b1334ca24099ddbaa693abf9447ce83e32.zip |
Try modified version for cpuspeed which gives the correct result
-rw-r--r-- | efi_memtest/memtest86+/efi/init.c | 44 |
1 files changed, 23 insertions, 21 deletions
diff --git a/efi_memtest/memtest86+/efi/init.c b/efi_memtest/memtest86+/efi/init.c index 6434b5a..2756838 100644 --- a/efi_memtest/memtest86+/efi/init.c +++ b/efi_memtest/memtest86+/efi/init.c @@ -1211,8 +1211,8 @@ static int cpuspeed(void) } int loops; - // TODO int stlow, sthigh; ulong or int? - // TODO ulong end_low, end_high; + int stlow, sthigh; // TODO ulong or int? + int end_low, end_high; // TODO ulong or int? if (cpu_id.fid.bits.rdtsc == 0 ) { return(-1); @@ -1226,20 +1226,6 @@ static int cpuspeed(void) asm __volatile__ ("rdtsc":"=a" (stlow),"=d" (sthigh)); - if (logflag) { - char log[28] = "stlow = "; - int length = 8; - int_to_charr(stlow, log, &length); - print_log(log, length); - } - - if (logflag) { - char log[29] = "sthigh = "; - int length = 9; - int_to_charr(stlow, log, &length); - print_log(log, length); - } - loops = 0; do { loops++; @@ -1254,20 +1240,34 @@ static int cpuspeed(void) :"=a" (end_low), "=d" (end_high) );*/ - /* asm __volatile__ ( + /*asm __volatile__ ( "rdtsc\n\t" \ - "subq %0, %%rax\n\t" \ - "sbbq %1, %%rdx\n\t" \ + "subl %0, %%eax\n\t" \ + "sbbl %1, %%edx\n\t" \ :"=a" (end_low), "=d" (end_high) :"r" (stlow), "r" (sthigh) );*/ - asm __volatile__ ( - "rdtsc\n\t" // TODO remove + asm __volatile__ ( + "rdtsc" :"=a" (end_low), "=d" (end_high) ); if (logflag) { + char log[28] = "stlow = "; + int length = 8; + int_to_charr(stlow, log, &length); + print_log(log, length); + } + + if (logflag) { + char log[29] = "sthigh = "; + int length = 9; + int_to_charr(sthigh, log, &length); + print_log(log, length); + } + + if (logflag) { char log[30] = "end_low = "; int length = 10; int_to_charr(end_low, log, &length); @@ -1281,6 +1281,8 @@ static int cpuspeed(void) print_log(log, length); } + end_low -= stlow; // TODO remember the carry flag + /* Make sure we have a credible result */ if (loops < 4 || end_low < 50000) { return(-1); |