summaryrefslogtreecommitdiff
path: root/instruction.h
blob: 2e10ed66710a207a1eebb6bfd321d79b5d10450b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#ifndef INSTRUCTION_H
#define INSTRUCTION_H

#include <stdint.h>

typedef struct {
	unsigned int op: 6;
	unsigned int rs: 5;
	unsigned int rt: 5;
	unsigned int rd: 5;
	unsigned int shamt: 5;
	unsigned int func: 6;
} rtype_t;

typedef struct {
	unsigned int op: 6;
	unsigned int rs: 5;
	unsigned int rt: 5;
	unsigned int imm: 16;
} itype_t;

typedef struct {
	unsigned int op: 6;
	unsigned int addr: 26;
} jtype_t;

typedef enum { NOP, RTYPE, ITYPE, JTYPE } type_t;

typedef struct {
	type_t type;
	union {
		rtype_t r;
		jtype_t j;
		itype_t i;
		uint32_t value;
	};
} inst_t;

void InstFetch(inst_t *inst);
void InstExec(const inst_t inst);

#endif