summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/PowerPC/AsmParser
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2013-06-26 13:49:53 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2013-06-26 13:49:53 +0000
commit5a02a02b411de878c031be9262ceee80fd582eb6 (patch)
treef1146160cdb860bcd64e4b959d95821031db2b90 /llvm/lib/Target/PowerPC/AsmParser
parente6151cf586354e16edd64956e2714295e06c4928 (diff)
downloadbcm5719-llvm-5a02a02b411de878c031be9262ceee80fd582eb6.tar.gz
bcm5719-llvm-5a02a02b411de878c031be9262ceee80fd582eb6.zip
[PowerPC] Accept 17-bit signed immediates for addis
The assembler currently strictly verifies that immediates for s16imm operands are in range (-32768 ... 32767). This matches the behaviour of the GNU assembler, with one exception: gas allows, as a special case, operands in an extended range (-65536 .. 65535) for the addis instruction only (and its extended mnemonic lis). The main reason for this seems to be to allow using unsigned 16-bit operands for lis, e.g. like lis %r1, 0xfedc. Since this has been supported by gas for a long time, and assembler source code seen "in the wild" actually exploits this feature, this patch adds equivalent support to LLVM for compatibility reasons. llvm-svn: 184946
Diffstat (limited to 'llvm/lib/Target/PowerPC/AsmParser')
-rw-r--r--llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
index 2310bb391d5..cbe13217f75 100644
--- a/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
+++ b/llvm/lib/Target/PowerPC/AsmParser/PPCAsmParser.cpp
@@ -267,6 +267,8 @@ public:
bool isS16ImmX4() const { return Kind == Expression ||
(Kind == Immediate && isInt<16>(getImm()) &&
(getImm() & 3) == 0); }
+ bool isS17Imm() const { return Kind == Expression ||
+ (Kind == Immediate && isInt<17>(getImm())); }
bool isDirectBr() const { return Kind == Expression ||
(Kind == Immediate && isInt<26>(getImm()) &&
(getImm() & 3) == 0); }
OpenPOWER on IntegriCloud