Nugget
Loading...
Searching...
No Matches
Macros | Functions | Variables
cpu.c File Reference
#include "common/hardware/dma.h"
#include "common/hardware/hwregs.h"
#include "common/syscalls/syscalls.h"
#include "exotic/cester.h"
#include "../cop0/cester-cop0.c"
Include dependency graph for cpu.c:

Macros

#define PCSX_TESTS   0
 
#define CESTER_MAYBE_TEST   CESTER_TEST
 
#define CESTER_NO_SIGNAL
 
#define CESTER_NO_TIME
 
#define EXIT_SUCCESS   0
 
#define EXIT_FAILURE   1
 

Functions

 CESTER_TEST (cpu_quiet, CESTER_TEST(cpu_tests, for(unsigned i=0;i< 200000;i++) __asm__ volatile("");cester_assert_uint_eq(0, s_got40);cester_assert_uint_eq(0, s_got80);)
 
 cester_assert_uint_eq (0x88bbccdd, out)
 
 CESTER_MAYBE_TEST (cpu_LWR_LWL_nodelay, cpu_tests, uint32_t buff[2]={0x11223344, 0x55667788};uint32_t out=cpu_LWR_LWL_nodelay(buff, 0xaabbccdd);cester_assert_uint_eq(0xaabbccdd, out);) CESTER_TEST(cpu_LWR_LWL_delayed
 
 cester_assert_uint_eq (0x88112233, out)
 
 CESTER_TEST (cpu_LWR_LWL_load_different, cpu_tests, uint32_t buff[3]={0x11223344, 0x55667788, 0xaabbccdd};uint32_t out=cpu_LWR_LWL_load_different(buff, 0xeeffeffe);cester_assert_uint_eq(0x88556677, out);) CESTER_TEST(cpu_LW_LWR
 
 cester_assert_uint_eq (0xaa112233, out)
 
 CESTER_TEST (cpu_delayed_load, cpu_tests, uint32_t buff[1]={1};uint32_t out=cpu_delayed_load(buff, 0);cester_assert_uint_eq(0, out);) CESTER_TEST(cpu_delayed_load_cancelled
 
 cester_assert_uint_eq (0, out)
 
 CESTER_MAYBE_TEST (cpu_delayed_load_load, cpu_tests, uint32_t buff[2]={1, 2};uint64_t out=cpu_delayed_load_load(buff, 4);out=((out > > 16)|out) &0xffffffff;cester_assert_uint_eq(0x00020004, out);) CESTER_MAYBE_TEST(cpu_BRANCH_BRANCH_slot
 
 cester_assert_uint_eq (0x189, out)
 
 cester_assert_uint_eq (9, out)
 
 CESTER_MAYBE_TEST (cpu_JUMP_JUMP_slot, cpu_tests, uint32_t out=jumpjump1();cester_assert_uint_eq(0x69, out);out=jumpjump2();cester_assert_uint_eq(21, out);) CESTER_TEST(cpu_DIV_by_zero
 
__asm__ __volatile__ ("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "nop\n" "div $0, $0\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0")
 
 cester_assert_int_eq (0, hi)
 
 cester_assert_int_eq (-1, lo)
 
__asm__ __volatile__ ("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "li $v0, 42\n" ".word 0x0040001a\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0")
 
 cester_assert_int_eq (42, hi)
 
 CESTER_TEST (cpu_DIVU_by_zero, cpu_tests, int32_t hi, lo;__asm__ __volatile__("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "nop\n" "divu $0, $0\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0");cester_assert_int_eq(0, hi);cester_assert_int_eq(-1, lo);__asm__ __volatile__("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "li $v0, 42\n" ".word 0x0040001b\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0");cester_assert_int_eq(42, hi);cester_assert_int_eq(-1, lo);) CESTER_TEST(links
 
 cester_assert_uint_eq (0, r)
 
 cester_assert_uint_ne (0, r)
 

Variables

uint32_t out = cpu_LWR_LWL_half(buff, 0xaabbccdd)
 
 cpu_tests
 
uint32_t buff [2] = {0x11223344, 0x55667788}
 
int32_t hi
 
int32_t lo
 
uint32_t r = linkandload()
 

Macro Definition Documentation

◆ CESTER_MAYBE_TEST

#define CESTER_MAYBE_TEST   CESTER_TEST

◆ CESTER_NO_SIGNAL

#define CESTER_NO_SIGNAL

◆ CESTER_NO_TIME

#define CESTER_NO_TIME

◆ EXIT_FAILURE

#define EXIT_FAILURE   1

◆ EXIT_SUCCESS

#define EXIT_SUCCESS   0

◆ PCSX_TESTS

#define PCSX_TESTS   0

Function Documentation

◆ __volatile__() [1/2]

__asm__ __volatile__ ( "li  $v0,
0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "li  $v0 
)

◆ __volatile__() [2/2]

__asm__ __volatile__ ( "li  $v0,
0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "nop\n" "div  $0 
)

◆ cester_assert_int_eq() [1/3]

cester_assert_int_eq ( 1,
lo   
)

◆ cester_assert_int_eq() [2/3]

cester_assert_int_eq ( ,
hi   
)

◆ cester_assert_int_eq() [3/3]

cester_assert_int_eq ( 42  ,
hi   
)

◆ cester_assert_uint_eq() [1/7]

cester_assert_uint_eq ( ,
out   
)

◆ cester_assert_uint_eq() [2/7]

cester_assert_uint_eq ( ,
r   
)

◆ cester_assert_uint_eq() [3/7]

cester_assert_uint_eq ( 0x189  ,
out   
)

◆ cester_assert_uint_eq() [4/7]

cester_assert_uint_eq ( 0x88112233  ,
out   
)

◆ cester_assert_uint_eq() [5/7]

cester_assert_uint_eq ( 0x88bbccdd  ,
out   
)

◆ cester_assert_uint_eq() [6/7]

cester_assert_uint_eq ( 0xaa112233  ,
out   
)

◆ cester_assert_uint_eq() [7/7]

cester_assert_uint_eq ( ,
out   
)

◆ cester_assert_uint_ne()

cester_assert_uint_ne ( ,
r   
)

◆ CESTER_MAYBE_TEST() [1/3]

CESTER_MAYBE_TEST ( cpu_delayed_load_load  ,
cpu_tests  ,
uint32_t  buff[2] = {1, 2};   uint64_t out = cpu_delayed_load_load(buff, 4); out = ((out >> 16) | out) & 0xffffffff; cester_assert_uint_eq(0x00020004, out); 
)

◆ CESTER_MAYBE_TEST() [2/3]

CESTER_MAYBE_TEST ( cpu_JUMP_JUMP_slot  ,
cpu_tests  ,
uint32_t  out = jumpjump1(); cester_assert_uint_eq(0x69, out); out = jumpjump2(); cester_assert_uint_eq(21, out); 
)

◆ CESTER_MAYBE_TEST() [3/3]

CESTER_MAYBE_TEST ( cpu_LWR_LWL_nodelay  ,
cpu_tests  ,
uint32_t  buff[2] = {0x11223344, 0x55667788};     uint32_t out = cpu_LWR_LWL_nodelay(buff, 0xaabbccdd); cester_assert_uint_eq(0xaabbccdd, out); 
)

◆ CESTER_TEST() [1/4]

CESTER_TEST ( cpu_delayed_load  ,
cpu_tests  ,
uint32_t  buff[1] = {1};     uint32_t out = cpu_delayed_load(buff, 0); cester_assert_uint_eq(0, out); 
)

◆ CESTER_TEST() [2/4]

CESTER_TEST ( cpu_DIVU_by_zero  ,
cpu_tests  ,
int32_t  hi,
lo;__asm__ __volatile__("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "nop\n" "divu $0, $0\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0");cester_assert_int_eq(0, hi);cester_assert_int_eq(-1, lo);__asm__ __volatile__("li $v0, 0x55555555\n" "mthi $v0\n" "mtlo $v0\n" "li $v0, 42\n" ".word 0x0040001b\n" "mfhi %0\n" "mflo %1\n" "nop\n" :"=r"(hi), "=r"(lo) ::"v0");cester_assert_int_eq(42, hi);cester_assert_int_eq(-1, lo);   
)

◆ CESTER_TEST() [3/4]

CESTER_TEST ( cpu_LWR_LWL_load_different  ,
cpu_tests  ,
uint32_t  buff[3] = {0x11223344, 0x55667788, 0xaabbccdd}; uint32_t out = cpu_LWR_LWL_load_different(buff, 0xeeffeffe); cester_assert_uint_eq(0x88556677, out); 
)

◆ CESTER_TEST() [4/4]

CESTER_TEST ( cpu_quiet  ,
CESTER_TEST(  cpu_tests,
for(unsigned i=0;i< 200000;i++) __asm__ volatile("");cester_assert_uint_eq(0, s_got40);cester_assert_uint_eq(0, s_got80);   
)

Variable Documentation

◆ buff

uint32_t buff = {0x11223344, 0x55667788}

◆ cpu_tests

cpu_tests

◆ hi

int32_t hi

◆ lo

int32_t lo

◆ out

char out = cpu_LWR_LWL_half(buff, 0xaabbccdd)

◆ r

r = linkandload()