summaryrefslogtreecommitdiffstats
path: root/clang/lib/Basic/Targets.cpp
diff options
context:
space:
mode:
authorAkira Hatanaka <ahatanaka@apple.com>2014-07-18 23:30:30 +0000
committerAkira Hatanaka <ahatanaka@apple.com>2014-07-18 23:30:30 +0000
commit88ef728f2e36434618f1999e7999a5e751aca672 (patch)
tree8469dc97e5818856239b5de4d2bcceb41cbf0101 /clang/lib/Basic/Targets.cpp
parent3ee2af7d1c0decb43729d239b5c6c0052b5308b7 (diff)
downloadbcm5719-llvm-88ef728f2e36434618f1999e7999a5e751aca672.tar.gz
bcm5719-llvm-88ef728f2e36434618f1999e7999a5e751aca672.zip
[X86 inline-asm] Error out on inline-asm constraint "=f".
<rdar://problem/17476689> llvm-svn: 213428
Diffstat (limited to 'clang/lib/Basic/Targets.cpp')
-rw-r--r--clang/lib/Basic/Targets.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/clang/lib/Basic/Targets.cpp b/clang/lib/Basic/Targets.cpp
index 49e94442abd..fe72fe1e19a 100644
--- a/clang/lib/Basic/Targets.cpp
+++ b/clang/lib/Basic/Targets.cpp
@@ -2927,6 +2927,13 @@ X86TargetInfo::validateAsmConstraint(const char *&Name,
case 'm': // any MMX register, when inter-unit moves enabled.
break; // falls through to setAllowsRegister.
}
+ case 'f': // any x87 floating point stack register.
+ // Constraint 'f' cannot be used for output operands.
+ if (Info.ConstraintStr[0] == '=')
+ return false;
+
+ Info.setAllowsRegister();
+ return true;
case 'a': // eax.
case 'b': // ebx.
case 'c': // ecx.
@@ -2934,7 +2941,6 @@ X86TargetInfo::validateAsmConstraint(const char *&Name,
case 'S': // esi.
case 'D': // edi.
case 'A': // edx:eax.
- case 'f': // any x87 floating point stack register.
case 't': // top of floating point stack.
case 'u': // second from top of floating point stack.
case 'q': // Any register accessible as [r]l: a, b, c, and d.
OpenPOWER on IntegriCloud