mirror of
https://github.com/mitch030504/Wiicompiled_VR_Frame.git
synced 2026-10-06 01:00:14 +02:00
44 lines
1.8 KiB
C#
44 lines
1.8 KiB
C#
using System.Collections.Generic;
|
|
using Translator.Core.Analysis.Representation;
|
|
using Translator.Core.Analysis.Ssa;
|
|
using Translator.Core.CodeGen;
|
|
using Translator.Core.Ir;
|
|
using Translator.Core.Representation;
|
|
using Xunit;
|
|
|
|
namespace Translator.Tests;
|
|
|
|
public sealed class MkwVrObserverCodeGenTests
|
|
{
|
|
[Fact]
|
|
public void EmitsOnlyWhenProjectConfiguresAnObserver()
|
|
{
|
|
var function = new IrFunction(
|
|
"race_scene_enter",
|
|
"entry",
|
|
new[]
|
|
{
|
|
new IrBasicBlock("entry", new IrInstruction[] { new IrReturn(null) })
|
|
});
|
|
var types = new RepresentationEnvironment(new Dictionary<string, ValueRepresentation>());
|
|
var signature = new FunctionAbiClassification("race_scene_enter", ValueRepresentation.Void);
|
|
var ssa = new SsaTransformer().Convert(function);
|
|
|
|
var observed = new CxxLinearCodeGenerator().EmitWithFacts(
|
|
0x80553C50u, ssa, signature, types,
|
|
entryObserverHeader: "vr/mkw_vr_instrumentation.h",
|
|
entryObserverSymbol: "MkwVRObserveTranslatedFunctionEntry");
|
|
var ordinary = new CxxLinearCodeGenerator().Emit(0x80553C50u, ssa, signature, types);
|
|
|
|
Assert.Contains("#include \"vr/mkw_vr_instrumentation.h\"", observed.Code);
|
|
Assert.Contains(
|
|
"MkwVRObserveTranslatedFunctionEntry(0x80553C50u, static_cast<const CpuContext*>(ctx));",
|
|
observed.Code);
|
|
Assert.True(observed.GuestAbiContract.HasFullSynchronizationFence);
|
|
Assert.Equal(uint.MaxValue, observed.GuestAbiContract.GprReadBeforeWriteMask);
|
|
Assert.Equal(0u, observed.GuestAbiContract.GprPossibleWriteMask);
|
|
Assert.Contains("fence=1", observed.GuestAbiMarker);
|
|
Assert.DoesNotContain("MkwVRObserveTranslatedFunctionEntry", ordinary);
|
|
}
|
|
}
|