1
0
Fork 0
mirror of https://github.com/VSadov/Satori.git synced 2025-06-10 18:11:04 +09:00

[RISC-V] Fix floating point (#88311)

* [RISC-V] Fix: passing struct in regs

* Fix a typo in CallDescrWorkerInternal

* [RISC-V] Update floating points
This commit is contained in:
Dong-Heon Jung 2023-07-06 13:13:54 +09:00 committed by GitHub
parent 9ea317f17d
commit cd9d54165b
Signed by: github
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 9 additions and 9 deletions

View file

@ -29,7 +29,7 @@ public:
LIMITED_METHOD_CONTRACT;
#if defined(UNIX_AMD64_ABI)
_ASSERTE((argLocDescForStructInRegs != NULL) || (offset != TransitionBlock::StructInRegsOffset));
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
// This assert is not interesting on arm64/loongarch64. argLocDescForStructInRegs could be
// initialized if the args are being enregistered.
#else
@ -83,7 +83,7 @@ public:
#endif // !DACCESS_COMPILE
#endif // defined(TARGET_ARM64)
#if defined(TARGET_LOONGARCH64)
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
bool IsStructPassedInRegs()
{
return m_argLocDescForStructInRegs != NULL;
@ -174,7 +174,7 @@ public:
int argOfs = TransitionBlock::GetOffsetOfArgumentRegisters() + m_argLocDescForStructInRegs->m_idxGenReg * 8;
return dac_cast<PTR_VOID>(dac_cast<TADDR>(m_base) + argOfs);
}
#endif // defined(TARGET_LOONGARCH64)
#endif // defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
#if defined(UNIX_AMD64_ABI)

View file

@ -459,19 +459,19 @@ void MethodDescCallSite::CallTargetWorker(const ARG_SLOT *pArguments, ARG_SLOT *
argDest.CopyStructToRegisters(pSrc, th.AsMethodTable()->GetNumInstanceFieldBytes(), 0);
}
else
#elif defined(TARGET_LOONGARCH64)
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
if (argDest.IsStructPassedInRegs())
{
argDest.CopyStructToRegisters(pSrc, stackSize, 0);
}
else
#endif // TARGET_LOONGARCH64
#endif // TARGET_LOONGARCH64 || TARGET_RISCV64
{
PVOID pDest = argDest.GetDestinationAddress();
switch (stackSize)
{
#if defined(TARGET_LOONGARCH64)
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
case 1:
if (m_argIt.GetArgType() == ELEMENT_TYPE_U1 || m_argIt.GetArgType() == ELEMENT_TYPE_BOOLEAN)
*((INT64*)pDest) = (UINT8)pArguments[arg];

View file

@ -392,7 +392,7 @@ void STDCALL CopyValueClassArgUnchecked(ArgDestination *argDest, void* src, Meth
return;
}
#elif defined(TARGET_LOONGARCH64)
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
if (argDest->IsStructPassedInRegs())
{
@ -425,7 +425,7 @@ void InitValueClassArg(ArgDestination *argDest, MethodTable *pMT)
#endif
#if defined(TARGET_LOONGARCH64)
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
if (argDest->IsStructPassedInRegs())
{
*(UINT64*)(argDest->GetStructGenRegDestinationAddress()) = 0;

View file

@ -124,7 +124,7 @@ LOCAL_LABEL(NotCorrectReturn):
EMIT_BREAKPOINT // Unreachable
LOCAL_LABEL(FloatReturn):
fsw f0, CallDescrData__returnValue(s1)
fsw fa0, CallDescrData__returnValue(s1)
j LOCAL_LABEL(ReturnDone)
LOCAL_LABEL(DoubleReturn):