Files
Compsys-2021-Assignments/A5/ip_reg.c
Nikolaj 281b65339c A5
2021-12-16 14:04:17 +01:00

49 lines
1.1 KiB
C

/*
Implementation of x86prime 16 registers
*/
#include "ip_reg.h"
#include "support.h"
#include "trace_read.h"
#include <stdio.h>
#include <stdlib.h>
struct ip_register {
trace_p tracer;
val data;
};
ip_reg_p ip_reg_create() {
ip_reg_p ip_reg = (ip_reg_p) malloc(sizeof(struct ip_register));
ip_reg->data = from_int(0);
ip_reg->tracer = 0;
return ip_reg;
}
void ip_reg_destroy(ip_reg_p ip_reg) {
if (ip_reg->tracer) {
if (!trace_all_matched(ip_reg->tracer))
error("Parts of trace for instruction pointer writes was not matched");
trace_reader_destroy(ip_reg->tracer);
}
free(ip_reg);
}
void ip_reg_tracefile(ip_reg_p ip_reg, const char *filename) {
ip_reg->tracer = trace_reader_create('P', filename);
}
val ip_read(ip_reg_p ip_reg) {
return ip_reg->data;
}
void ip_write(ip_reg_p ip_reg, val value, bool wr_enable) {
if (wr_enable) {
if (trace_match_next(ip_reg->tracer, from_int(0), value))
ip_reg->data = value;
else
error("Trace mismatch on write to instruction pointer");
}
}