mirror of
https://github.com/ldc-developers/ldc.git
synced 2025-05-05 01:20:51 +03:00

The generic ABI works well with PPC64 except for LLVM PR 14779. (http://llvm.org/bugs/show_bug.cgi?id=14779) The new ABI infrastucture is based on the UnknownTargetABI. The PPC64 specific parts coming soon.
59 lines
No EOL
1.5 KiB
C++
59 lines
No EOL
1.5 KiB
C++
//===-- abi-x86-64.cpp ----------------------------------------------------===//
|
||
//
|
||
// LDC – the LLVM D compiler
|
||
//
|
||
// This file is distributed under the BSD-style LDC license. See the LICENSE
|
||
// file for details.
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
//
|
||
// The PowerOpen 64bit ABI can be found here:
|
||
// http://refspecs.linuxfoundation.org/ELF/ppc64/PPC-elf64abi-1.9.html
|
||
//
|
||
//===----------------------------------------------------------------------===//
|
||
|
||
#include "gen/abi.h"
|
||
#include "gen/irstate.h"
|
||
#include "gen/tollvm.h"
|
||
#include "gen/llvmhelpers.h"
|
||
#include "gen/dvalue.h"
|
||
|
||
struct PPC64TargetABI : TargetABI {
|
||
|
||
void newFunctionType(TypeFunction* tf)
|
||
{
|
||
}
|
||
|
||
bool returnInArg(TypeFunction* tf)
|
||
{
|
||
#if DMDV2
|
||
if (tf->isref)
|
||
return false;
|
||
#endif
|
||
// Return structs and static arrays on the stack. The latter is needed
|
||
// because otherwise LLVM tries to actually return the array in a number
|
||
// of physical registers, which leads, depending on the target, to
|
||
// either horrendous codegen or backend crashes.
|
||
Type* rt = tf->next->toBasetype();
|
||
return (rt->ty == Tstruct || rt->ty == Tsarray);
|
||
}
|
||
|
||
bool passByVal(Type* t)
|
||
{
|
||
return t->toBasetype()->ty == Tstruct;
|
||
}
|
||
|
||
void doneWithFunctionType()
|
||
{
|
||
}
|
||
|
||
void rewriteFunctionType(TypeFunction* tf)
|
||
{
|
||
}
|
||
};
|
||
|
||
// The public getter for abi.cpp
|
||
TargetABI* getPPC64TargetABI()
|
||
{
|
||
return new PPC64TargetABI();
|
||
} |