Skip to content

Commit cd9d541

Browse files
authored
[RISC-V] Fix floating point (#88311)
* [RISC-V] Fix: passing struct in regs * Fix a typo in CallDescrWorkerInternal * [RISC-V] Update floating points
1 parent 9ea317f commit cd9d541

File tree

4 files changed

+9
-9
lines changed

4 files changed

+9
-9
lines changed

src/coreclr/vm/argdestination.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ class ArgDestination
2929
LIMITED_METHOD_CONTRACT;
3030
#if defined(UNIX_AMD64_ABI)
3131
_ASSERTE((argLocDescForStructInRegs != NULL) || (offset != TransitionBlock::StructInRegsOffset));
32-
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64)
32+
#elif defined(TARGET_ARM64) || defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
3333
// This assert is not interesting on arm64/loongarch64. argLocDescForStructInRegs could be
3434
// initialized if the args are being enregistered.
3535
#else
@@ -83,7 +83,7 @@ class ArgDestination
8383
#endif // !DACCESS_COMPILE
8484
#endif // defined(TARGET_ARM64)
8585

86-
#if defined(TARGET_LOONGARCH64)
86+
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
8787
bool IsStructPassedInRegs()
8888
{
8989
return m_argLocDescForStructInRegs != NULL;
@@ -174,7 +174,7 @@ class ArgDestination
174174
int argOfs = TransitionBlock::GetOffsetOfArgumentRegisters() + m_argLocDescForStructInRegs->m_idxGenReg * 8;
175175
return dac_cast<PTR_VOID>(dac_cast<TADDR>(m_base) + argOfs);
176176
}
177-
#endif // defined(TARGET_LOONGARCH64)
177+
#endif // defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
178178

179179
#if defined(UNIX_AMD64_ABI)
180180

src/coreclr/vm/callhelpers.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -459,19 +459,19 @@ void MethodDescCallSite::CallTargetWorker(const ARG_SLOT *pArguments, ARG_SLOT *
459459
argDest.CopyStructToRegisters(pSrc, th.AsMethodTable()->GetNumInstanceFieldBytes(), 0);
460460
}
461461
else
462-
#elif defined(TARGET_LOONGARCH64)
462+
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
463463
if (argDest.IsStructPassedInRegs())
464464
{
465465
argDest.CopyStructToRegisters(pSrc, stackSize, 0);
466466
}
467467
else
468-
#endif // TARGET_LOONGARCH64
468+
#endif // TARGET_LOONGARCH64 || TARGET_RISCV64
469469
{
470470
PVOID pDest = argDest.GetDestinationAddress();
471471

472472
switch (stackSize)
473473
{
474-
#if defined(TARGET_LOONGARCH64)
474+
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
475475
case 1:
476476
if (m_argIt.GetArgType() == ELEMENT_TYPE_U1 || m_argIt.GetArgType() == ELEMENT_TYPE_BOOLEAN)
477477
*((INT64*)pDest) = (UINT8)pArguments[arg];

src/coreclr/vm/object.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ void STDCALL CopyValueClassArgUnchecked(ArgDestination *argDest, void* src, Meth
392392
return;
393393
}
394394

395-
#elif defined(TARGET_LOONGARCH64)
395+
#elif defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
396396

397397
if (argDest->IsStructPassedInRegs())
398398
{
@@ -425,7 +425,7 @@ void InitValueClassArg(ArgDestination *argDest, MethodTable *pMT)
425425

426426
#endif
427427

428-
#if defined(TARGET_LOONGARCH64)
428+
#if defined(TARGET_LOONGARCH64) || defined(TARGET_RISCV64)
429429
if (argDest->IsStructPassedInRegs())
430430
{
431431
*(UINT64*)(argDest->GetStructGenRegDestinationAddress()) = 0;

src/coreclr/vm/riscv64/calldescrworkerriscv64.S

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ LOCAL_LABEL(NotCorrectReturn):
124124
EMIT_BREAKPOINT // Unreachable
125125

126126
LOCAL_LABEL(FloatReturn):
127-
fsw f0, CallDescrData__returnValue(s1)
127+
fsw fa0, CallDescrData__returnValue(s1)
128128
j LOCAL_LABEL(ReturnDone)
129129

130130
LOCAL_LABEL(DoubleReturn):

0 commit comments

Comments
 (0)