adds dynamic cycle estimation

This commit is contained in:
2023-10-25 17:13:52 +02:00
parent b7478965ab
commit b86d7a517d
4 changed files with 685 additions and 53 deletions

View File

@ -40,24 +40,20 @@
#include <string>
#include <unordered_map>
#include <vector>
#include <functional>
namespace iss {
namespace plugin {
class cycle_estimate: public vm_plugin {
BEGIN_BF_DECL(instr_desc, uint32_t)
BF_FIELD(taken, 24, 8)
BF_FIELD(not_taken, 16, 8)
BF_FIELD(is_branch, 8, 8)
BF_FIELD(size, 0, 8)
instr_desc(uint32_t size, uint32_t taken, uint32_t not_taken, bool branch): instr_desc() {
this->size=size;
this->taken=taken;
this->not_taken=not_taken;
this->is_branch=branch;
}
END_BF_DECL();
struct instr_desc {
size_t size;
bool is_branch;
unsigned not_taken;
unsigned taken;
std::function<unsigned(uint64_t)> f;
};
public:
cycle_estimate() = delete;
@ -76,13 +72,15 @@ public:
bool registration(const char *const version, vm_if &arch) override;
sync_type get_sync() override { return POST_SYNC; };
sync_type get_sync() override { return ALL_SYNC; };
void callback(instr_info_t instr_info) override;
private:
iss::instrumentation_if *instr_if;
iss::instrumentation_if *instr_if{nullptr};
uint32_t* reg_base_ptr {nullptr};
std::vector<instr_desc> delays;
unsigned current_delay{0};
struct pair_hash {
size_t operator()(const std::pair<uint64_t, uint64_t> &p) const {
std::hash<uint64_t> hash;