aboutsummaryrefslogtreecommitdiff
path: root/sim/mips/sky-pke.h
diff options
context:
space:
mode:
Diffstat (limited to 'sim/mips/sky-pke.h')
-rw-r--r--sim/mips/sky-pke.h24
1 files changed, 21 insertions, 3 deletions
diff --git a/sim/mips/sky-pke.h b/sim/mips/sky-pke.h
index 081b8f1..5955842 100644
--- a/sim/mips/sky-pke.h
+++ b/sim/mips/sky-pke.h
@@ -15,6 +15,16 @@ void pke0_issue(SIM_DESC sd);
void pke1_attach(SIM_DESC sd);
void pke1_issue(SIM_DESC sd);
+/* structs declared below */
+struct pke_fifo;
+struct fifo_quadword;
+
+unsigned_4 pke_fifo_flush(struct pke_fifo*);
+void pke_fifo_reset(struct pke_fifo*);
+struct fifo_quadword* pke_fifo_fit(struct pke_fifo*);
+struct fifo_quadword* pke_fifo_access(struct pke_fifo*, unsigned_4 qwnum);
+void pke_fifo_old(struct pke_fifo*, unsigned_4 qwnum);
+
/* Quadword data type */
@@ -344,7 +354,8 @@ enum wordclass
wc_dma = 'D',
wc_pkecode = 'P',
wc_unknown = '?',
- wc_pkedata = '.'
+ wc_pkedata = '.',
+ wc_gpuiftag = 'g'
};
@@ -361,13 +372,13 @@ struct fifo_quadword
/* quadword FIFO structure for PKE */
-struct pke_fifo
+typedef struct pke_fifo
{
struct fifo_quadword** quadwords; /* pointer to fifo quadwords */
unsigned_4 origin; /* quadword serial number of quadwords[0] */
unsigned_4 length; /* length of quadword pointer array: 0..N */
unsigned_4 next; /* relative index of first unfilled quadword: 0..length-1 */
-};
+} pke_fifo;
#define PKE_FIFO_GROW_SIZE 1000 /* number of quadword pointers to allocate */
#define PKE_FIFO_ARCHEOLOGY 1000 /* number of old quadwords to keep as history */
@@ -394,6 +405,13 @@ struct pke_device
struct pke_fifo fifo; /* array of FIFO quadword pointers */
FILE* fifo_trace_file; /* stdio stream open in append mode, or 0 for no trace */
+ /* FIFO cache -- curry last search pke_pcrel_fifo results */
+ unsigned_4 last_fifo_pc;
+ unsigned_4 last_qw_pc;
+ unsigned_4 last_num;
+ unsigned_4 last_new_fifo_pc;
+ unsigned_4 last_new_qw_pc;
+
/* PC */
int fifo_pc; /* 0 .. (fifo_num_elements-1): quadword index of next instruction */
int qw_pc; /* 0 .. 3: word index of next instruction */