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:
parent
9ea317f17d
commit
cd9d54165b
4 changed files with 9 additions and 9 deletions
|
@ -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)
|
||||
|
||||
|
|
|
@ -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];
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue