From f618466c25d43f3bae9e40920273bf77de1e1149 Mon Sep 17 00:00:00 2001 From: leochanj105 Date: Mon, 19 Oct 2020 23:09:30 -0400 Subject: initial sd-vbs initial sd-vbs add sd-vbs sd-vbs --- SD-VBS/common/c/timingUtils.h | 99 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 SD-VBS/common/c/timingUtils.h (limited to 'SD-VBS/common/c/timingUtils.h') diff --git a/SD-VBS/common/c/timingUtils.h b/SD-VBS/common/c/timingUtils.h new file mode 100644 index 0000000..818728f --- /dev/null +++ b/SD-VBS/common/c/timingUtils.h @@ -0,0 +1,99 @@ +#ifdef GCC +#define magic_timing_begin(cycleLo, cycleHi) {\ + asm volatile( "rdtsc": "=a" (cycleLo), "=d" (cycleHi)); \ +}\ + +#define magic_timing_end(cycleLo, cycleHi) {\ + unsigned tempCycleLo, tempCycleHi; \ + asm volatile( "rdtsc": "=a" (tempCycleLo), "=d" (tempCycleHi)); \ + cycleLo = tempCycleLo-cycleLo;\ + cycleHi = tempCycleHi - cycleHi;\ +}\ + + + +#define magic_timing_report(cycleLo, cycleHi) {\ + printf("Timing report: %d %d\n", cycleLo, cycleHi); \ +}\ + + + + +#endif + +#ifdef METRO + +#define magic_timing_begin(cycleLo, cycleHi) {\ + asm volatile( "mfsr $8, CYCLE_LO\n\t" \ + "mfsr $9, CYCLE_HI\n\t" \ + "addu %0, $8, $0\n\t" \ + "addu %1, $9, $0\n\t" \ + :"=r" (cycleLo), "=r" (cycleHi) \ + : \ + :"$8", "$9"\ + );\ +} + +#define magic_timing_end(cycleLo, cycleHi) {\ + asm volatile( \ + "mfsr $8, CYCLE_LO\n\t" \ + "mfsr $9, CYCLE_HI\n\t" \ + "subu %0, $8, %0\n\t" \ + "subu %1, $9, %1\n\t" \ + :"=r" (cycleLo), "=r" (cycleHi) \ + : \ + :"$8", "$9"\ + ); \ +} + +#define magic_timing_report(cycleLo, cycleHi) {\ + asm volatile( "addu $8, %0, $0\n\t" \ + "mtsr PASS $8\n\t" \ + "mtsr PASS $9\n\t" \ + : \ + :"r" (cycleLo), "r" (cycleHi) \ + : "$8", "$9" \ + );\ +} + +//#define metro_magic_timing_report(cycleLo, cycleHi) {\ +// asm volatile( "nop\n\t");\ +//} + +#endif + +#ifdef BTL + +#include "/u/kvs/raw/rawlib/archlib/include/raw.h" + +#define magic_timing_begin(cycleLo, cycleHi) {\ + raw_magic_timing_report_begin();\ +} + +#define magic_timing_end(cycleLo, cycleHi) {\ + raw_magic_timing_report_end(); \ +} + +#define magic_timing_report(cycleLo, cycleHi) {\ + raw_magic_timing_report_print(); \ +} + + +// +//void metro_magic_timing_begin(int cycleLo, int cycleHi) +//{ +// raw_magic_timing_report_begin(); +//} +// +//void metro_magic_timing_end(int cycleLo, int cycleHi) +//{ +// raw_magic_timing_report_end(); +//} +// +//void metro_magic_timing_report(int cycleLo, int cycleHi) +//{ +// raw_magic_timing_report_print(); +// return; +//} + +#endif -- cgit v1.2.2