diff options
author | George Rimar <grimar@accesssoftek.com> | 2016-04-25 08:14:41 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2016-04-25 08:14:41 +0000 |
commit | ab9390664ff9a70def8ca3efb24fa2aca1874c7a (patch) | |
tree | 7b7f914f5b04ff97d269b90af003b78ab796a61b /lld/ELF/LinkerScript.cpp | |
parent | 1a4f89ab0a0e1c673c9b905a27dc75f9a043bc9a (diff) | |
download | bcm5719-llvm-ab9390664ff9a70def8ca3efb24fa2aca1874c7a.tar.gz bcm5719-llvm-ab9390664ff9a70def8ca3efb24fa2aca1874c7a.zip |
[ELF] - Implemented comparsion operators for linkerscript.
Patch adds support of <,>,!=,==,>=,<= operators.
Differential revision: http://reviews.llvm.org/D19419
llvm-svn: 267382
Diffstat (limited to 'lld/ELF/LinkerScript.cpp')
-rw-r--r-- | lld/ELF/LinkerScript.cpp | 32 |
1 files changed, 25 insertions, 7 deletions
diff --git a/lld/ELF/LinkerScript.cpp b/lld/ELF/LinkerScript.cpp index cabd82fe1bb..4156f08dfd8 100644 --- a/lld/ELF/LinkerScript.cpp +++ b/lld/ELF/LinkerScript.cpp @@ -63,9 +63,15 @@ private: static int precedence(StringRef Op) { return StringSwitch<int>(Op) .Case("*", 4) - .Case("/", 3) - .Case("+", 2) - .Case("-", 2) + .Case("/", 4) + .Case("+", 3) + .Case("-", 3) + .Case("<", 2) + .Case(">", 2) + .Case(">=", 2) + .Case("<=", 2) + .Case("==", 2) + .Case("!=", 2) .Case("&", 1) .Default(-1); } @@ -115,10 +121,6 @@ uint64_t ExprParser::parseTernary(uint64_t Cond) { } uint64_t ExprParser::apply(StringRef Op, uint64_t L, uint64_t R) { - if (Op == "+") - return L + R; - if (Op == "-") - return L - R; if (Op == "*") return L * R; if (Op == "/") { @@ -128,6 +130,22 @@ uint64_t ExprParser::apply(StringRef Op, uint64_t L, uint64_t R) { } return L / R; } + if (Op == "+") + return L + R; + if (Op == "-") + return L - R; + if (Op == "<") + return L < R; + if (Op == ">") + return L > R; + if (Op == ">=") + return L >= R; + if (Op == "<=") + return L <= R; + if (Op == "==") + return L == R; + if (Op == "!=") + return L != R; if (Op == "&") return L & R; llvm_unreachable("invalid operator"); |