mirror of
https://github.com/Zenithsiz/ftmemsim-valgrind.git
synced 2026-02-03 18:13:01 +00:00
114 lines
4.0 KiB
C
114 lines
4.0 KiB
C
/*--------------------------------------------------------------------*/
|
|
/*--- Callgrind ---*/
|
|
/*--- events.h ---*/
|
|
/*--- (C) 2004-2005, Josef Weidendorfer ---*/
|
|
/*--------------------------------------------------------------------*/
|
|
|
|
|
|
/* Abstractions for 64-bit cost lists (events.h) */
|
|
|
|
#ifndef CG_EVENTS
|
|
#define CG_EVENTS
|
|
|
|
#include "pub_tool_basics.h"
|
|
|
|
#define CLG_(str) VGAPPEND(vgCallgrind_,str)
|
|
|
|
/* An event type */
|
|
typedef struct _EventType EventType;
|
|
struct _EventType {
|
|
Char* name;
|
|
Char* description;
|
|
Int id;
|
|
};
|
|
|
|
EventType* CLG_(register_eventtype)(Char*);
|
|
EventType* CLG_(get_eventtype)(Char*);
|
|
EventType* CLG_(get_eventtype_byindex)(Int id);
|
|
|
|
/* An event set is a ordered list of event types, which comes down
|
|
* to some description for ordered lists of costs.
|
|
* Often, costs of 2 event types are related, e.g. one is always smaller
|
|
* than the other. This is useful to speed up arithmetics on cost lists:
|
|
* Each event type in the set has a <nextTop>. All indexes before are
|
|
* promised to hold smaller values than the current.
|
|
*/
|
|
typedef struct _EventSetEntry EventSetEntry;
|
|
struct _EventSetEntry {
|
|
EventType* type;
|
|
Int nextTop;
|
|
};
|
|
typedef struct _EventSet EventSet;
|
|
struct _EventSet {
|
|
Char* name;
|
|
Int size;
|
|
Int capacity;
|
|
EventSetEntry e[0];
|
|
};
|
|
|
|
|
|
/* Some events out of an event set.
|
|
* Used to print out part of an EventSet, or in another order.
|
|
*/
|
|
typedef struct _EventMapping EventMapping;
|
|
struct _EventMapping {
|
|
EventSet* set;
|
|
Int size;
|
|
Int capacity;
|
|
Int index[0];
|
|
};
|
|
|
|
|
|
/* Allocate space for an event set */
|
|
EventSet* CLG_(get_eventset)(Char* n, Int capacity);
|
|
/* Incorporate a event type into a set, get start offset */
|
|
Int CLG_(add_eventtype)(EventSet* dst, EventType*);
|
|
/* Incorporate event types into a set, with ... < second < first */
|
|
Int CLG_(add_dep_event2)(EventSet* dst, EventType* e1, EventType* e2);
|
|
Int CLG_(add_dep_event3)(EventSet* dst,
|
|
EventType* e1, EventType* e2, EventType* e3);
|
|
Int CLG_(add_dep_event4)(EventSet* dst,
|
|
EventType* e1, EventType* e2, EventType* e3,
|
|
EventType* e4);
|
|
/* Incorporate one event set into another, get start offset */
|
|
Int CLG_(add_eventset)(EventSet* dst, EventSet* src);
|
|
/* Returns number of characters written */
|
|
Int CLG_(sprint_eventset)(Char* buf, EventSet*);
|
|
/* Allocate cost array for an event set */
|
|
ULong* CLG_(get_eventset_cost)(EventSet*);
|
|
|
|
/* Operations on costs. A cost pointer of 0 means zero cost.
|
|
* Functions ending in _lz allocate costs lazy if needed
|
|
*/
|
|
/* Set costs according full capacity of event set to 0 */
|
|
void CLG_(init_cost)(EventSet*,ULong*);
|
|
/* This always allocates counter and sets them to 0 */
|
|
void CLG_(init_cost_lz)(EventSet*,ULong**);
|
|
/* Set costs of an event set to zero */
|
|
void CLG_(zero_cost)(EventSet*,ULong*);
|
|
Bool CLG_(is_zero_cost)(EventSet*,ULong*);
|
|
Bool CLG_(is_equal_cost)(EventSet*,ULong*,ULong*);
|
|
void CLG_(copy_cost)(EventSet*,ULong* dst, ULong* src);
|
|
void CLG_(copy_cost_lz)(EventSet*,ULong** pdst, ULong* src);
|
|
void CLG_(add_cost)(EventSet*,ULong* dst, ULong* src);
|
|
void CLG_(add_cost_lz)(EventSet*,ULong** pdst, ULong* src);
|
|
/* Adds src to dst and zeros src. Returns false if nothing changed */
|
|
Bool CLG_(add_and_zero_cost)(EventSet*,ULong* dst, ULong* src);
|
|
Bool CLG_(add_and_zero_cost_lz)(EventSet*,ULong** pdst, ULong* src);
|
|
/* Adds difference of new and old to to dst, and set old to new.
|
|
* Returns false if nothing changed */
|
|
Bool CLG_(add_diff_cost)(EventSet*,ULong* dst, ULong* old, ULong* new);
|
|
Bool CLG_(add_diff_cost_lz)(EventSet*,ULong** pdst, ULong* old, ULong* new);
|
|
/* Returns number of characters written */
|
|
Int CLG_(sprint_cost)(Char* buf, EventSet*, ULong*);
|
|
|
|
/* Allocate space for an event mapping */
|
|
EventMapping* CLG_(get_eventmapping)(EventSet*);
|
|
void CLG_(append_event)(EventMapping*, Char*);
|
|
/* Returns number of characters written */
|
|
Int CLG_(sprint_eventmapping)(Char* buf, EventMapping*);
|
|
/* Returns number of characters written */
|
|
Int CLG_(sprint_mappingcost)(Char* buf, EventMapping*, ULong*);
|
|
|
|
#endif /* CG_EVENTS */
|