#pragma once
#include <stdio.h>
#include <cassert>
#include <stdint.h>
#define SIGN_EXTEND64(x) ((((int64_t)(x)) << 32) >> 32)
extern "C" __device__ __noinline__ uint64_t
gen_mref_addr(uint32_t ra_high, int is_ra64, uint32_t ra_low, int ra_stride,
uint32_t ru_high, int is_ru64, uint32_t ru_low, int32_t imm,
uint32_t mref_idx ) {
int64_t base_addr = 0;
if (is_ra64) {
base_addr +=
(((uint64_t)ra_high) << 32) | ((uint64_t)ra_low * ra_stride);
} else {
base_addr += SIGN_EXTEND64(ra_low * ra_stride);
}
if (is_ru64) {
base_addr += (((uint64_t)ru_high) << 32) | ((uint64_t)ru_low);
} else {
base_addr += SIGN_EXTEND64(ru_low);
}
uint64_t addr = base_addr + imm;
#if 0#endif
return addr;
}
__global__ void load_module_nvbit_kernel(int var) {
printf("");
if (var) {
int tmp = gen_mref_addr(var, var, var, var, var, var, var, var, var);
printf("%d\n", tmp);
}
}
extern "C" void __nvbit_start();
extern "C" void nvbit_at_context_init_hook() {
__nvbit_start();
load_module_nvbit_kernel<<<1, 1>>>(0);
cudaDeviceSynchronize();
assert(cudaGetLastError() == cudaSuccess);
}