summaryrefslogtreecommitdiff
path: root/lib/Target/PowerPC/README.txt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-09-10 21:43:18 +0000
committerChris Lattner <sabre@nondot.org>2007-09-10 21:43:18 +0000
commitbf8ae84a21011a7263c2a4183fdfd8e5755765a1 (patch)
treec3afb5a8cee68d395e2cc00a629c71b27cc65a7f /lib/Target/PowerPC/README.txt
parent61c5ff460b18b970aa651115c4ac78dfc0d602d7 (diff)
downloadllvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.gz
llvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.bz2
llvm-bf8ae84a21011a7263c2a4183fdfd8e5755765a1.tar.xz
Add some notes about better flag handling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@41808 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/PowerPC/README.txt')
-rw-r--r--lib/Target/PowerPC/README.txt30
1 files changed, 29 insertions, 1 deletions
diff --git a/lib/Target/PowerPC/README.txt b/lib/Target/PowerPC/README.txt
index 10ee323954..077bc2555d 100644
--- a/lib/Target/PowerPC/README.txt
+++ b/lib/Target/PowerPC/README.txt
@@ -677,5 +677,33 @@ LBB1_1: ;bb
cmplwi cr0, r6, 33920
bne cr0, LBB1_1
-===-------------------------------------------------------------------------===
+//===---------------------------------------------------------------------===//
+
+This:
+ #include <algorithm>
+ inline std::pair<unsigned, bool> full_add(unsigned a, unsigned b)
+ { return std::make_pair(a + b, a + b < a); }
+ bool no_overflow(unsigned a, unsigned b)
+ { return !full_add(a, b).second; }
+
+Should compile to:
+
+__Z11no_overflowjj:
+ add r4,r3,r4
+ subfc r3,r3,r4
+ li r3,0
+ adde r3,r3,r3
+ blr
+
+(or better) not:
+
+__Z11no_overflowjj:
+ add r2, r4, r3
+ cmplw cr7, r2, r3
+ mfcr r2
+ rlwinm r2, r2, 29, 31, 31
+ xori r3, r2, 1
+ blr
+
+//===---------------------------------------------------------------------===//