mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-14 10:48:36 +12:00
Reservation implemented
Some SPU bugs fixed; sys_spu_thread_get_exit_status sys_spu_thread_group_destroy
This commit is contained in:
parent
cfe154d916
commit
6c606be09f
16 changed files with 272 additions and 148 deletions
|
@ -1,6 +1,48 @@
|
|||
#pragma once
|
||||
#include "Emu/Memory/MemoryBlock.h"
|
||||
#include "Emu/CPU/CPUDecoder.h"
|
||||
#include "Utilities/SMutex.h"
|
||||
|
||||
struct reservation_struct
|
||||
{
|
||||
SMutex mutex; // mutex for updating reservation_owner and data
|
||||
u32 owner; // id of thread that got reservation
|
||||
u32 addr;
|
||||
u32 size;
|
||||
union
|
||||
{
|
||||
u32 data32[32];
|
||||
u64 data64[16];
|
||||
};
|
||||
|
||||
__forceinline void clear()
|
||||
{
|
||||
owner = 0;
|
||||
}
|
||||
|
||||
__forceinline bool compare128(u8* pointer)
|
||||
{
|
||||
return
|
||||
data64[0] == *(u64*)(pointer + 0) &&
|
||||
data64[1] == *(u64*)(pointer + 8) &&
|
||||
data64[2] == *(u64*)(pointer + 16) &&
|
||||
data64[3] == *(u64*)(pointer + 24) &&
|
||||
data64[4] == *(u64*)(pointer + 32) &&
|
||||
data64[5] == *(u64*)(pointer + 40) &&
|
||||
data64[6] == *(u64*)(pointer + 48) &&
|
||||
data64[7] == *(u64*)(pointer + 56) &&
|
||||
data64[8] == *(u64*)(pointer + 64) &&
|
||||
data64[9] == *(u64*)(pointer + 72) &&
|
||||
data64[10] == *(u64*)(pointer + 80) &&
|
||||
data64[11] == *(u64*)(pointer + 88) &&
|
||||
data64[12] == *(u64*)(pointer + 96) &&
|
||||
data64[13] == *(u64*)(pointer + 104) &&
|
||||
data64[14] == *(u64*)(pointer + 112) &&
|
||||
data64[15] == *(u64*)(pointer + 120);
|
||||
}
|
||||
};
|
||||
|
||||
extern reservation_struct reservation;
|
||||
|
||||
enum CPUThreadType
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue