MCPcopy Create free account
hub / github.com/DaedalusX64/daedalus / CPU_UpdateTrace

Function CPU_UpdateTrace

Source/Core/Dynamo.cpp:379–408  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

377//
378//*****************************************************************************
379void CPU_UpdateTrace( u32 address, OpCode op_code, bool branch_delay_slot, bool branch_taken )
380{
381 #ifdef DAEDALUS_PROFILE
382 DAEDALUS_PROFILE( "CPU_UpdateTrace" );
383 #endif
384 #ifdef DAEDALUS_ENABLE_ASSERTS
385 DAEDALUS_ASSERT_Q( (gCPUState.Delay == EXEC_DELAY) == branch_delay_slot );
386 #endif
387
388
389#ifdef DAEDALUS_DEBUG_DYNAREC
390 CFragment * p_address_fragment( gFragmentCache.LookupFragment( address ) );
391#else
392 CFragment * p_address_fragment( gFragmentCache.LookupFragmentQ( address ) );
393#endif
394 if( gTraceRecorder.UpdateTrace( address, branch_delay_slot, branch_taken, op_code, p_address_fragment ) == CTraceRecorder::UTS_CREATE_FRAGMENT )
395 {
396 CPU_CreateAndAddFragment();
397 #ifdef DAEDALUS_ENABLE_ASSERTS
398 DAEDALUS_ASSERT( !gTraceRecorder.IsTraceActive(), "Why is a trace still active?" );
399 #endif
400 CPU_SelectCore();
401 }
402 #ifdef DAEDALUS_ENABLE_ASSERTS
403 else
404 {
405 DAEDALUS_ASSERT( gTraceRecorder.IsTraceActive(), "The trace should still be enabled" );
406 }
407 #endif
408}
409
410//*****************************************************************************
411//

Callers 1

CPU_EXECUTE_OPFunction · 0.85

Calls 6

CPU_CreateAndAddFragmentFunction · 0.85
CPU_SelectCoreFunction · 0.85
LookupFragmentMethod · 0.80
LookupFragmentQMethod · 0.80
UpdateTraceMethod · 0.80
IsTraceActiveMethod · 0.80

Tested by

no test coverage detected