cen64/rsp/pipeline.h
Derek "Turtle" Roe c4afd44ed7 See long description
Replaced all references to simulation with emulation
Updated copyright year
Updated .gitignore to reduce chances of random files being uploaded to
the repo
Added .gitattributes to normalize all text files, and to ignore binary
files (which includes the logo and the NEC PDF)
2015-07-03 08:18:16 -04:00

104 lines
1.9 KiB
C

//
// rsp/pipeline.h: RSP processor pipeline.
//
// CEN64: Cycle-Accurate Nintendo 64 Emulator.
// Copyright (C) 2015, Tyler J. Stachecki.
//
// This file is subject to the terms and conditions defined in
// 'LICENSE', which is part of this source code package.
//
#ifndef __rsp_pipeline_h__
#define __rsp_pipeline_h__
#include "common.h"
#include "rsp/decoder.h"
#include "rsp/cp2.h"
#include "rsp/rsp.h"
struct rsp;
enum rsp_mem_request_type {
RSP_MEM_REQUEST_NONE,
RSP_MEM_REQUEST_INT_MEM,
RSP_MEM_REQUEST_VECTOR,
RSP_MEM_REQUEST_FOURTH,
RSP_MEM_REQUEST_HALF,
RSP_MEM_REQUEST_PACK,
RSP_MEM_REQUEST_QUAD,
RSP_MEM_REQUEST_REST,
RSP_MEM_REQUEST_UPACK
};
struct rsp_int_mem_packet {
uint32_t data;
uint32_t rdqm;
uint32_t wdqm;
unsigned rshift;
};
struct rsp_vect_mem_packet {
union aligned_rsp_1vect_t vdqm;
void (*vldst_func)(struct rsp *rsp, uint32_t addr, unsigned element,
uint16_t *regp, rsp_vect_t reg, rsp_vect_t dqm);
unsigned element;
unsigned dest;
};
union rsp_mem_packet {
struct rsp_int_mem_packet p_int;
struct rsp_vect_mem_packet p_vect;
};
struct rsp_mem_request {
uint32_t addr;
enum rsp_mem_request_type type;
union rsp_mem_packet packet;
};
struct rsp_latch {
uint32_t pc;
};
struct rsp_result {
uint32_t result;
unsigned dest;
};
struct rsp_ifrd_latch {
struct rsp_latch common;
struct rsp_opcode opcode;
uint32_t pc, iw;
};
struct rsp_rdex_latch {
struct rsp_latch common;
struct rsp_opcode opcode;
uint32_t iw;
};
struct rsp_exdf_latch {
struct rsp_latch common;
struct rsp_result result;
struct rsp_mem_request request;
};
struct rsp_dfwb_latch {
struct rsp_latch common;
struct rsp_result result;
};
struct rsp_pipeline {
struct rsp_dfwb_latch dfwb_latch;
struct rsp_exdf_latch exdf_latch;
struct rsp_rdex_latch rdex_latch;
struct rsp_ifrd_latch ifrd_latch;
};
cen64_cold void rsp_pipeline_init(struct rsp_pipeline *pipeline);
#endif