summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/Sparc/Sparc.h
diff options
context:
space:
mode:
authorVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-11-24 20:23:25 +0000
committerVenkatraman Govindaraju <venkatra@cs.wisc.edu>2013-11-24 20:23:25 +0000
commit1116868a0da41326eca5ecf8c9c7eb655effcac2 (patch)
tree5980d14c68e627659d6a33098f01cb0736db2095 /llvm/lib/Target/Sparc/Sparc.h
parent9c338504e587cbdba54c3ab279d553d7eec81265 (diff)
downloadbcm5719-llvm-1116868a0da41326eca5ecf8c9c7eb655effcac2.tar.gz
bcm5719-llvm-1116868a0da41326eca5ecf8c9c7eb655effcac2.zip
[Sparc] Emit large negative adjustments to SP/FP with sethi+xor instead of sethi+or. This generates correct code for both sparc32 and sparc64.
llvm-svn: 195576
Diffstat (limited to 'llvm/lib/Target/Sparc/Sparc.h')
-rw-r--r--llvm/lib/Target/Sparc/Sparc.h17
1 files changed, 17 insertions, 0 deletions
diff --git a/llvm/lib/Target/Sparc/Sparc.h b/llvm/lib/Target/Sparc/Sparc.h
index f2d632e54c0..f44b60420d0 100644
--- a/llvm/lib/Target/Sparc/Sparc.h
+++ b/llvm/lib/Target/Sparc/Sparc.h
@@ -105,5 +105,22 @@ namespace llvm {
}
llvm_unreachable("Invalid cond code");
}
+
+ inline static unsigned HI22(int64_t imm) {
+ return (unsigned)((imm >> 10) & ((1 << 22)-1));
+ }
+
+ inline static unsigned LO10(int64_t imm) {
+ return (unsigned)(imm & 0x3FF);
+ }
+
+ inline static unsigned HIX22(int64_t imm) {
+ return HI22(~imm);
+ }
+
+ inline static unsigned LOX10(int64_t imm) {
+ return ~LO10(~imm);
+ }
+
} // end namespace llvm
#endif
OpenPOWER on IntegriCloud