diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2014-07-18 23:30:30 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2014-07-18 23:30:30 +0000 |
commit | 88ef728f2e36434618f1999e7999a5e751aca672 (patch) | |
tree | 8469dc97e5818856239b5de4d2bcceb41cbf0101 /clang/lib/Basic/Targets.cpp | |
parent | 3ee2af7d1c0decb43729d239b5c6c0052b5308b7 (diff) | |
download | bcm5719-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.cpp | 8 |
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. |