mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-29 22:50:47 +00:00
Add ABI information to ARM subtarget.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34245 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
cf8270a994
commit
3630e78db9
@ -26,8 +26,9 @@ ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
|
||||
, HasVFP2(false)
|
||||
, UseThumbBacktraces(false)
|
||||
, IsR9Reserved(false)
|
||||
, stackAlignment(8)
|
||||
, TargetType(isELF) { // Default to ELF unless otherwise specified.
|
||||
, stackAlignment(4)
|
||||
, TargetType(isELF) // Default to ELF unless otherwise specified.
|
||||
, TargetABI(ARM_ABI_APCS) {
|
||||
|
||||
// Determine default and user specified characteristics
|
||||
std::string CPU = "generic";
|
||||
@ -49,9 +50,14 @@ ARMSubtarget::ARMSubtarget(const Module &M, const std::string &FS)
|
||||
#endif
|
||||
}
|
||||
|
||||
if (TT.find("eabi") != std::string::npos)
|
||||
TargetABI = ARM_ABI_AAPCS;
|
||||
|
||||
if (isAAPCS_ABI())
|
||||
stackAlignment = 8;
|
||||
|
||||
if (isTargetDarwin()) {
|
||||
UseThumbBacktraces = true;
|
||||
IsR9Reserved = true;
|
||||
stackAlignment = 4;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,7 +42,7 @@ protected:
|
||||
|
||||
/// IsR9Reserved - True if R9 is a not available as general purpose register.
|
||||
bool IsR9Reserved;
|
||||
|
||||
|
||||
/// stackAlignment - The minimum alignment known to hold of the stack frame on
|
||||
/// entry to the function and which must be maintained by every function.
|
||||
unsigned stackAlignment;
|
||||
@ -52,6 +52,11 @@ protected:
|
||||
isELF, isDarwin
|
||||
} TargetType;
|
||||
|
||||
enum {
|
||||
ARM_ABI_APCS,
|
||||
ARM_ABI_AAPCS // ARM EABI
|
||||
} TargetABI;
|
||||
|
||||
/// This constructor initializes the data members to match that
|
||||
/// of the specified module.
|
||||
///
|
||||
@ -71,6 +76,9 @@ protected:
|
||||
bool isTargetDarwin() const { return TargetType == isDarwin; }
|
||||
bool isTargetELF() const { return TargetType == isELF; }
|
||||
|
||||
bool isAPCS_ABI() const { return TargetABI == ARM_ABI_APCS; }
|
||||
bool isAAPCS_ABI() const { return TargetABI == ARM_ABI_AAPCS; }
|
||||
|
||||
bool isThumb() const { return IsThumb; }
|
||||
|
||||
bool useThumbBacktraces() const { return UseThumbBacktraces; }
|
||||
|
@ -34,13 +34,15 @@ namespace {
|
||||
///
|
||||
ARMTargetMachine::ARMTargetMachine(const Module &M, const std::string &FS)
|
||||
: Subtarget(M, FS),
|
||||
DataLayout(Subtarget.isTargetDarwin() ?
|
||||
DataLayout(Subtarget.isAPCS_ABI() ?
|
||||
//APCS ABI
|
||||
(Subtarget.isThumb() ?
|
||||
std::string("e-p:32:32-d:32:32-l:32:32-s:16:32-b:8:32-B:8:32-A:32") :
|
||||
std::string("e-p:32:32-d:32:32-l:32:32")) :
|
||||
//AAPCS ABI
|
||||
(Subtarget.isThumb() ?
|
||||
std::string("e-p:32:32-d:32:64-l:64:64-s:16:32-b:8:32-B:8:32-A:32") :
|
||||
std::string("e-p:32:32-d:32:64-l:64:64"))),
|
||||
std::string("e-p:32:32-d:64:64-l:64:64-s:16:32-b:8:32-B:8:32-A:32") :
|
||||
std::string("e-p:32:32-d:64:64-l:64:64"))),
|
||||
InstrInfo(Subtarget),
|
||||
FrameInfo(Subtarget) {}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
; RUN: llvm-as < %s | llc -march=arm &&
|
||||
; RUN: llvm-as < %s | llc -mtriple=arm-linux | grep "mov r0, r2" | wc -l | grep 1 &&
|
||||
; RUN: llvm-as < %s | llc -mtriple=arm-linux-gnueabi | grep "mov r0, r2" | wc -l | grep 1 &&
|
||||
; RUN: llvm-as < %s | llc -mtriple=arm-apple-darwin | grep "mov r0, r1" | wc -l | grep 1
|
||||
|
||||
define i32 @f(i32 %a, i64 %b) {
|
||||
|
Loading…
Reference in New Issue
Block a user