Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[NativeAOT-LLVM] Merge may24 #2591

Merged
merged 715 commits into from
May 31, 2024
Merged

Conversation

yowl
Copy link
Contributor

@yowl yowl commented May 22, 2024

This PR merges to 301604e

  • Some #ifdef BACKGROUND_GC in gc.cpp upstreamable.
  • Adds a WasmClassifier
  • Remove use of REG_R0/REG_F0 to REG_STK to avoid asserts arising from the classifier.
  • #if out the assert(dscStackOffset == expected.GetStackOffset()); assert as "stack" offsets not aligned. If aligned we hit another assert as per the comment.
  • Reorder REG_STK and REG_LLVM to avoid an assert
  • A workaround for mono's use of emsdk_env.cmd where we have emsdk_env.bat , didn't look to see why mono has a different extension.
  • comment out macos debug build: upstream issue.

stephentoub and others added 30 commits May 6, 2024 13:20
Today with a pattern like `ab*c`, IndexOfAnyExcept('b') will be used to skip past the `b`s. But if that pattern is changed to `ab{0, 1000}c`, we'll end up manually iterating, as the current specialization only handles unbounded loops. This adds the minor improvements necessary to also enable using IndexOf for bounded loops.
…, dotnet/sdk, dotnet/xharness (#101843)

* Update dependencies from https://github.com/dotnet/xharness build 20240502.1

Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit
 From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1

* Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1

Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData
 From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1

* Update dependencies from https://github.com/dotnet/xharness build 20240502.1

Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit
 From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1

* Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1

Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData
 From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1

* Update dependencies from https://github.com/dotnet/xharness build 20240502.1

Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit
 From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1

* Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1

Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData
 From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1

* Update dependencies from https://github.com/dotnet/xharness build 20240502.1

Microsoft.DotNet.XHarness.CLI , Microsoft.DotNet.XHarness.TestRunners.Common , Microsoft.DotNet.XHarness.TestRunners.Xunit
 From Version 9.0.0-prerelease.24229.1 -> To Version 9.0.0-prerelease.24252.1

* Update dependencies from https://github.com/dotnet/runtime-assets build 20240502.1

Microsoft.DotNet.CilStrip.Sources , System.ComponentModel.TypeConverter.TestData , System.Data.Common.TestData , System.Drawing.Common.TestData , System.Formats.Tar.TestData , System.IO.Compression.TestData , System.IO.Packaging.TestData , System.Net.TestData , System.Private.Runtime.UnicodeData , System.Runtime.Numerics.TestData , System.Runtime.TimeZoneData , System.Security.Cryptography.X509Certificates.TestData , System.Text.RegularExpressions.TestData , System.Windows.Extensions.TestData
 From Version 9.0.0-beta.24229.1 -> To Version 9.0.0-beta.24252.1

* Update dependencies from https://github.com/dotnet/runtime build 20240506.1

Microsoft.DotNet.ILCompiler , Microsoft.NET.Sdk.IL , Microsoft.NETCore.App.Runtime.win-x64 , Microsoft.NETCore.ILAsm , runtime.native.System.IO.Ports , System.Reflection.Metadata , System.Reflection.MetadataLoadContext , System.Text.Json , Microsoft.SourceBuild.Intermediate.runtime.linux-x64
 From Version 9.0.0-preview.4.24229.1 -> To Version 9.0.0-preview.5.24256.1

* Update dependencies from https://github.com/dotnet/sdk build 20240506.1

Microsoft.SourceBuild.Intermediate.sdk , Microsoft.DotNet.ApiCompat.Task
 From Version 9.0.100-preview.5.24227.1 -> To Version 9.0.100-preview.5.24256.1

---------

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…1870)

* Add handling of delay free

* refactor lsra code

* remove the change that is in separate PR

* jit format
…rd (#101577)

When a COM interface method is defined with the new keyword, we should avoid creating a new shadowing method on the derived interface, and remove the new keyword when creating implementations of methods. This change tracks whether a method was declared with the new keyword. If it was, we search all the inherited methods for one with the same name and signature. If found, we mark that method as "HiddenOnDerivedInterface". The hidden method may not be found if the method hides a non-COM method. When generating methods, we only generate new shadowing method declarations for inherited methods that aren't already hidden, and we don't generate any stubs for inherited hidden methods. The diff for the generated code for the new test interfaces is shown below.

---------

Co-authored-by: Aaron Robinson <[email protected]>
Recreates the Process() loop in MarkStep with node that depends on a new copy of itself when the loop needs to be rerun. Within the loop, the new Method and Type nodes are added to the dependency framework analyzer as roots when MarkMethod and MarkType are called, which leads to the OnMarked methods to be called, which forwards to the ProcessType/Method method in MarkStep. The dependency analyzer doesn't do anything interesting yet. In a follow-up I'll move dependencies from the MarkX and ProcessX methods to the DependencyNode types.

Makes ILCompiler.DependencyAnalysisFramework output path independent of target architecture. Removes TargetArchitecture and TargetOS from ILLink.Tasks project references.

---------

Co-authored-by: vitek-karas <[email protected]>
* Add the missing else

* Max, MaxAcross, MaxNumber, MaxNumberAcross, Min, MinAcross, MinNumber, MinNumberAcross

* Map APIs to instruction

* Add test cases

* Remove the space

* fix the test case

* Add handling of delay free

* fix some errors

* wip: morph optimization

* Track TYP_MASK for arm64

* Enable mov predicate registers

* jit format
* allow async interruptions on safepoints

* ARM64 TODO

* report GC ref/byref returns at partially interruptible callsites

* enable on all platforms

* tweak

* fix after rebasing

* do not record tailcalls

* IsInterruptibleSafePoint

* update gccover

* turn on new behavior on a gcinfo version

* tailcalls tweak

* do not report unused returns

* CORINFO_HELP_FAIL_FAST  should not be a safepoint

* treat tailcalls as emitNoGChelper

* versioning tweak

* enable in CoreCLR (not just for GC stress scenarios)

* fix x86 build

* other architectures

* added a knob DOTNET_InterruptibleCallSites

* moved DOTNET_InterruptibleCallSites check to the code manager

* JIT_StackProbe should not be a safepoint (stack is not cleaned yet)

* Hooked up GCInfo version to R2R file version

* formatting

* GCStress support for RISC architectures

* Update src/coreclr/inc/gcinfo.h

Co-authored-by: Jan Kotas <[email protected]>

* make InterruptibleSafePointsEnabled static

* fix linux-x86 build.

* ARM32 actually can`t return 2 GC references, so can filter out R1 early

* revert unnecessary change

* Update src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/Amd64/GcInfo.cs

Co-authored-by: Filip Navara <[email protected]>

* removed GCINFO_VERSION cons from GcInfo.cs

* Use RBM_INTRET/RBM_INTRET_1

* Update src/coreclr/tools/aot/ILCompiler.Reflection.ReadyToRun/Amd64/GcInfo.cs

Co-authored-by: Jan Kotas <[email protected]>

* do not skip safe points twice (stress failure)

* revert unnecessary change in gccover.

* fix after rebase

* make sure to check `idIsNoGC` on all codepaths in `emitOutputInstr`

* make CORINFO_HELP_CHECK_OBJ a no-gc helper (because we can)

* mark a test that tests WaitForPendingFinalizers as GCStressIncompatible

* NOP

* these helpers should not form GC safe points

* require that the new block has BBF_HAS_LABEL

* Apply suggestions from code review

Co-authored-by: Jakob Botsch Nielsen <[email protected]>

* updated JITEEVersionIdentifier GUID

---------

Co-authored-by: Jan Kotas <[email protected]>
Co-authored-by: Filip Navara <[email protected]>
Co-authored-by: Jakob Botsch Nielsen <[email protected]>
…, SVE_ET_3A, SVE_EU_3A into SVE_AA_3A (#101785)

* Merging SVE_AE_3A, SVE_AN_3A, SVE_EP_3A, SVE_ER_3A, SVE_ET_3A, SVE_EU_3A into SVE_AA_3A

* Feedback

* Fix build

* Fix build
Incorporate "stress" profile counts even if we're not optimizing.
Scale after synthesis, not before.

Fixes #101901.
* Use REG_INDIRECT_CALL_TARGET_REG for indirect calls on arm64

* Added a comment about NativeAOT dependency at the place wehre we exclude LR from availableIntRegs
We don't support dynamically switching arch/GC anymore with modern dotnet.
* Integrate static web asset endpoints
---------

Co-authored-by: Marek Fišera <[email protected]>
…ext setup (#101318)

Remove unnecessary indirect use of managed wcslen from AppContext setup since it pulls in vector dependencies and we already know the length of each string
* remove pragma warning that was required when the code was linked by the tools

* move the files
We only have one app domain now. The `Thread` constructor was always just initializing its member variable to the current domain.
- Remove `Thread::m_pDomain/GetDomain`
- Remove `AppDomain` parameter on `DebuggerPatchSkip` and checking for mismatch (always the current domain, no mismatch)
When I've made a change to optimize the collided exception handling by
copying the stack frame iterator state, I've somehow missed adding two
callee saved registers, x27 and x28 to a list of callee saved registers
and that caused them to not to be copied during the state copying.

It has caused failures in one of the coreclr tests when running with
specific JIT stress settings.

Close #100476
The biarch image is currently unused in our ci builds.

Use of the biarch image was added in
dotnet/runtime#91019 but the job that
used it was disabled for arm64 in
dotnet/runtime#92057. dotnet/runtime#90427
tracks adding back the arm64 jobs.

The arm64 fullaot job was added in
dotnet/runtime#55362 which explains:

> We don't ship any products using FullAOT on Linux x64/arm64, but this
compilation mode is used for iOS, FullAOT-related issues that affect iOS are
likely to be caught by FullAOT on Linux x64/arm64, and it is a lot easier to
build, develop, and debug on desktop OSes.

If the arm64 job is enabled again in the future, it should be
made to use a new entry in `pipeline-with-resources.yml`, instead
of modifying the image used for all other linux_arm64 jobs.

Fixes dotnet/runtime#101707
…nals build 20240506.2 (#101978)

Microsoft.SourceBuild.Intermediate.source-build-externals
 From Version 9.0.0-alpha.1.24229.1 -> To Version 9.0.0-alpha.1.24256.2

Co-authored-by: dotnet-maestro[bot] <dotnet-maestro[bot]@users.noreply.github.com>
…(#101340)

Rewrite `lvaAssignVirtualFrameOffsetsToArgs` to make use of the ABI
information that was already computed as part of ABI classification in
the frontend.
… (#100309)" (#101995)

(commit 765ca4e)

Revert workaround but leave test in place.
@yowl
Copy link
Contributor Author

yowl commented May 24, 2024

cc @dotnet/nativeaot-llvm - should go green from here.

@yowl yowl marked this pull request as ready for review May 24, 2024 22:23
@@ -18431,6 +18431,7 @@ bool gc_heap::should_retry_other_heap (int gen_number, size_t size)
}
}

#ifdef BACKGROUND_GC

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should go upstream (probably the declarations should be ifdefed out too).

src/coreclr/jit/abi.h Outdated Show resolved Hide resolved
src/coreclr/jit/jitconfigvalues.h Outdated Show resolved Hide resolved
@@ -396,7 +396,7 @@ bool Llvm::helperCallMayPhysicallyThrow(CorInfoHelpFunc helperFunc) const
{ FUNC(CORINFO_HELP_ASSIGN_BYREF) }, // Not used on WASM.

// Not used in NativeAOT (or at all in some cases).
{ FUNC(CORINFO_HELP_ASSIGN_STRUCT) },
{ FUNC(CORINFO_HELP_BULK_WRITEBARRIER) },

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This one should go to the above group now with // Not used on WASM.. We could start using it too.

REGDEF(STK_CANDIDATE_UNCONDITIONAL, 3, 0x08, "SS_UNCONDITIONAL")
REGDEF(STK_CANDIDATE_TENTATIVE, 4, 0x10, "SS_TENTATIVE")
REGDEF(STK_CANDIDATE_COMMITED, 5, 0x20, "SS_COMMITED")
REGDEF(STK, 6, 0x40, "SS")
REGDEF(LLVM, 6, 0x40, "LLVM")

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

REG_STK should be the last register:

; target.h

// Each register list in register.h must declare REG_STK as the last value.

Comment on lines 40 to 43
byte[] nullTerminated = new byte[inputArray.Length + 1];
inputArray.CopyTo(nullTerminated, 0);
Span<byte> nullTerminated = new Span<byte>(new byte[inputArray.Length + 1]);
inputArray.CopyTo(nullTerminated);
nullTerminated[inputArray.Length] = 0;
return nullTerminated;
return nullTerminated.ToArray();

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will allocate two arrays, while only one is needed.

@@ -63,7 +63,7 @@ private static byte[] AppendNullByte(byte[] inputArray)
node.AppendMangledName(_this._compilation.NameMangler, sb);

sb.Append("\0");
return (byte*)_this.GetPin(sb.UnderlyingArray);
return (byte*)_this.GetPin(sb.AsSpan().ToArray());

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will double the allocations on this path, which is not great. It would be better to re-expose UnderlyingArray instead.

Comment on lines +1892 to +1893
// LLVM: staock offsets are not aligned in the classifier, if they are then this passes and
// assert(segment.Offset + segment.Size <= lvaLclExactSize(lclNum)) below fails.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why does the second assert fail?

Copy link
Contributor Author

@yowl yowl May 28, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good question, I can change the classifier to

    if (type == TYP_STRUCT)
    {
        structPassingKind wbPassStruct;
        type = comp->m_llvm->GetArgTypeForStructWasm(structLayout->GetClassHandle(), &wbPassStruct);
    }

    assert(type != TYP_STRUCT);

    unsigned typeSize = genTypeSize(type);

    ABIPassingSegment segment = ABIPassingSegment::OnStack(m_stackArgSize, 0, typeSize);
    m_stackArgSize += AlignUp(typeSize, TARGET_POINTER_SIZE);

    return ABIPassingInformation::FromSegment(comp, segment);

But that doesn't match the values passed to SetStackOffset
For example, when the first arg is not a "user arg", e.g. lvaInitThisPtr, then we dont set the stack offset, as its assumed to be allocRegArg(TYP_INT) I suppose. Maybe this is where I've gone wrong in attempting to remove the use of the registers and I should look for another solution?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There is an assumption in the compiler that this is always passed in a register. The new classifier can accommodate this assumption like so:

if (wellKnownParam == WellKnownArg::ThisPointer)
{
    // Produce a register segment (by bringing back R0).
}

We can delete this later - when the old classification is phased out.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, this is solved with that. For TYP_STRUCT and implicit by refs I dont see how these 2 uses of the size are working:

Here the size is used as is, ignoring byref structs, and the value used to set the stack offset.

https://github.com/dotnet/runtime/blob/3eb94d1a816f941dd66f01e62c1af25c108014bc/src/coreclr/jit/lclvars.cpp#L696

However here

https://github.com/dotnet/runtime/blob/main/src/coreclr/jit/lclvars.cpp#L1904

the segment is checked against the size adusted for storing byrefs as pointers. How do we handle this to both pass this assert and the one that checks the classifer offsets with the stack offsets ?

Copy link

@SingleAccretion SingleAccretion May 29, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We would need to modify eeGetArgSize to harmonize these. But at this point I agree that commenting out the assert is simpler.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, I left the this code in but can take it out as you say.

Comment on lines 7548 to 7560
#if defined(TARGET_WASM)
// TODO-LLVM: Revisit when SIMD is enabled.
// We want the fallback LIR expansions for these.
switch(intrinsicName)
{
case NI_System_Math_MultiplyAddEstimate:
case NI_System_Math_ReciprocalEstimate:
case NI_System_Math_ReciprocalSqrtEstimate:
return false;
default:
break;
}
#endif //TARGET_WASM

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have done some time thinking about this, and looking at dotnet/runtime#102098, and I think the better fix for this issue is to augment IsTargetIntrinsic to return true for these intrinsics.

return nullptr from impEstimateIntrinsic requires a corresponding ifdef in CoreLib, see https://github.com/dotnet/runtime/pull/102098/files#r1597779222. We have the sqrt intrinsic, so ReciprocalSqrtEstimate is expandable inline for WASM, and others have trivial expansions.

The actual CQ item here is to enable the better CQ for these intrinsic by actually exploiting the non-determinism, but it's a bit hard because LLVM doesn't have the same notion of intrinsics deterministic on "process granularity".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Changed Math to

        public static double ReciprocalSqrtEstimate(double d)
        {
#if MONO || TARGET_RISCV64 || TARGET_LOONGARCH64 || TARGET_WASM
            return 1.0 / Sqrt(d);
#else
            return ReciprocalSqrtEstimate(d);
#endif
        }

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why was it needed? It doesn't look expected to me.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Its not needed, but I thought that' what you refered to in "requires a corresponding ...". I will revert it

@@ -44,12 +44,12 @@
#define FEATURE_EH_CALLFINALLY_THUNKS 1 // Generate call-to-finally code in "thunks" in the enclosing EH region, protected by "cloned finally" clauses.
#define CSE_CONSTS 1 // Enable if we want to CSE constants

#define RBM_ALLFLOAT RBM_F0
#define RBM_ALLFLOAT REG_STK

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If we are deleting fake registers, it would be better to replace them with REG_NA instead of REG_STK.

REG_STK is the half-way point between real and fake registers itself :).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, reverted basically. I added

  #define RBM_R0                   REG_NA
  #define RBM_F0                   REG_NA
  #define REG_F0                   REG_NA

Maybe I should just collapse the uses of RBM/REG_F0 ?

yowl and others added 3 commits May 27, 2024 22:44
yowl added 2 commits May 29, 2024 12:47
IsTargetIntrinsic true for estimate MethodS
Special handling for `this` in classifier, although could remove that
Move CORINFO_HELP_BULK_WRITEBARRIER
reinstate order of LLVM ARGs
Use REG_NA inplace of REG_A/F
resinstate UnderlyingArray
Comment on lines 8283 to 8284
reg = REG_STK;
regMask = RBM_STK;

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
reg = REG_STK;
regMask = RBM_STK;
reg = REG_NA;
regMask = REG_NA;

If that runs into asserts, R0 will need to be physically brought back.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Have brought it back, just didn't seem to be a great idea, at least not in this PR.

Comment on lines 1713 to 1718
#ifdef TARGET_WASM
else if (i == info.compThisArg)
{
wellKnownArg = WellKnownArg::ThisPointer;
}
#endif //TARGET_WASM

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#ifdef TARGET_WASM
else if (i == info.compThisArg)
{
wellKnownArg = WellKnownArg::ThisPointer;
}
#endif //TARGET_WASM

No longer needed now that we've decided on silencing out the assert.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, wasn't sure if it was "correct". Now removed.

Comment on lines +20 to +21
const regNumber intArgRegs[] = { REG_STK };
const regNumber fltArgRegs[] = { REG_STK };

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const regNumber intArgRegs[] = { REG_STK };
const regNumber fltArgRegs[] = { REG_STK };
const regNumber intArgRegs[] = { REG_NA };
const regNumber fltArgRegs[] = { REG_NA };

Comment on lines 47 to 49
#define RBM_R0 REG_NA
#define RBM_F0 REG_NA
#define REG_F0 REG_NA

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RBM_<...> is a register mask, i. e. 1 << REG_<...>. So the right "nothing" value for it is zero, i. e. RBM_NONE.

Suggested change
#define RBM_R0 REG_NA
#define RBM_F0 REG_NA
#define REG_F0 REG_NA
#define RBM_R0 RBM_NONE
#define RBM_F0 RBM_NONE
#define REG_F0 REG_NA

#define RBM_F0 REG_NA
#define REG_F0 REG_NA

#define RBM_ALLFLOAT REG_F0

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
#define RBM_ALLFLOAT REG_F0
#define RBM_ALLFLOAT RBM_F0

Comment on lines 86 to 93
#define REG_PINVOKE_COOKIE_PARAM REG_R0
#define REG_PINVOKE_COOKIE_PARAM RBM_R0

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

There are a number of cases where REG_ values have been changed to be defined as RBM_R0, which are masks. They should be changed back to register values (REG_NA if that works, brought back R0/F0 otherwise).

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reinstated R0

@yowl
Copy link
Contributor Author

yowl commented May 30, 2024

I'm assuming the git hub failure is an infrastructure problem and this is actually green.

Copy link

@SingleAccretion SingleAccretion left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM, thank you!

@jkotas
Copy link
Member

jkotas commented May 30, 2024

I'm assuming the git hub failure is an infrastructure problem and this is actually green.

Looking into it

@jkotas jkotas closed this May 30, 2024
@jkotas jkotas reopened this May 30, 2024
Copy link

1 file(s) have code issues.

File Issues
.github/policies/resourceManagement.yml Exception during deserialization. Failed to create an instance of type 'GitOps.PullRequestIssueManagement.Core.Primitives.Data.Frequencies.SearchFrequency'.. Cannot dynamically create an instance of type 'GitOps.PullRequestIssueManagement.Core.Primitives.Data.Frequencies.SearchFrequency'. Reason: Cannot create an abstract class.

Total execution time: 0.01 seconds

@jkotas jkotas merged commit fa92686 into dotnet:feature/NativeAOT-LLVM May 31, 2024
11 checks passed
@jkotas
Copy link
Member

jkotas commented May 31, 2024

Thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.