summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets/PPC.h
diff options
context:
space:
mode:
authorStrahinja Petrovic <strahinja.petrovic@rt-rk.com>2019-04-02 11:00:09 +0000
committerStrahinja Petrovic <strahinja.petrovic@rt-rk.com>2019-04-02 11:00:09 +0000
commit4f839ac1883afd6009f0062ccbcf85b799fd036b (patch)
treefde25afe8a15da611afb5faf7b87db049a6c6400 /clang/lib/Basic/Targets/PPC.h
parent64bd87ad4bbdd6ef5199bd0baf7ae5e9988370ea (diff)
downloadbcm5719-llvm-4f839ac1883afd6009f0062ccbcf85b799fd036b.tar.gz
bcm5719-llvm-4f839ac1883afd6009f0062ccbcf85b799fd036b.zip
[PowerPC] Fix issue with inline asm - soft float mode
This patch prevents floating point register constraints in soft float mode. Differential Revision: https://reviews.llvm.org/D59310 llvm-svn: 357466
Diffstat (limited to 'clang/lib/Basic/Targets/PPC.h')
-rw-r--r--clang/lib/Basic/Targets/PPC.h10
1 files changed, 9 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h
index ace7eb35e76..7049020a911 100644
--- a/clang/lib/Basic/Targets/PPC.h
+++ b/clang/lib/Basic/Targets/PPC.h
@@ -53,6 +53,7 @@ class LLVM_LIBRARY_VISIBILITY PPCTargetInfo : public TargetInfo {
static const char *const GCCRegNames[];
static const TargetInfo::GCCRegAlias GCCRegAliases[];
std::string CPU;
+ enum PPCFloatABI { HardFloat, SoftFloat } FloatABI;
// Target cpu features.
bool HasAltivec = false;
@@ -183,8 +184,11 @@ public:
return false;
case 'O': // Zero
break;
- case 'b': // Base register
case 'f': // Floating point register
+ // Don't use floating point registers on soft float ABI.
+ if (FloatABI == SoftFloat)
+ return false;
+ case 'b': // Base register
Info.setAllowsRegister();
break;
// FIXME: The following are added to allow parsing.
@@ -192,6 +196,10 @@ public:
// Also, is more specific checking needed? I.e. specific registers?
case 'd': // Floating point register (containing 64-bit value)
case 'v': // Altivec vector register
+ // Don't use floating point and altivec vector registers
+ // on soft float ABI
+ if (FloatABI == SoftFloat)
+ return false;
Info.setAllowsRegister();
break;
case 'w':
OpenPOWER on IntegriCloud