mirror of
https://github.com/n64dev/cen64.git
synced 2025-04-02 10:31:54 -04:00
39 lines
978 B
C
39 lines
978 B
C
//
|
|
// arch/x86_64/tlb/tlb.h: Translation lookaside buffer.
|
|
//
|
|
// 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 __arch_tlb_h__
|
|
#define __arch_tlb_h__
|
|
#include "common.h"
|
|
#include <emmintrin.h>
|
|
|
|
union aligned_tlb_data {
|
|
__m128i __align[8];
|
|
uint32_t data[32];
|
|
};
|
|
|
|
struct cen64_tlb {
|
|
union aligned_tlb_data page_mask;
|
|
union aligned_tlb_data vpn2;
|
|
uint8_t global[32];
|
|
uint8_t asid[32];
|
|
uint8_t valid[32];
|
|
};
|
|
|
|
cen64_cold void tlb_init(struct cen64_tlb *tlb);
|
|
|
|
cen64_hot unsigned tlb_probe(const struct cen64_tlb *tlb, uint64_t vpn2,
|
|
uint8_t vasid, unsigned *index);
|
|
|
|
int tlb_read(const struct cen64_tlb *tlb, unsigned index, uint64_t *entry_hi);
|
|
int tlb_write(struct cen64_tlb *tlb, unsigned index, uint64_t entry_hi,
|
|
uint64_t entry_lo_0, uint64_t entry_lo_1, uint32_t page_mask);
|
|
|
|
#endif
|
|
|