Undo a change made in r140254.
[oota-llvm.git] / lib / Target / Alpha / README.txt
index 2d1909a42c57e60fdffe74ed85aeb2d3d9694e70..cc170e3130305e26ee6d7ee86d9fd7db68e15d70 100644 (file)
@@ -1,33 +1,42 @@
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-Fix Ordered/Unordered FP stuff
-
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-improve bytezap opertunities
-ulong %foo(ulong %y) {
-entry:
-        %tmp = and ulong %y,  65535
-        %tmp2 = shr ulong %tmp,  ubyte 3
-        ret ulong %tmp2
-}
-
-
-compiles to a 3 instruction sequence without instcombine
-        zapnot $16,3,$0
-        srl $0,3,$0
-        ret $31,($26),1
-After instcombine you get
-ulong %foo(ulong %y) {
-entry:
-        %tmp = shr ulong %y, ubyte 3            ; <ulong> [#uses=1]
-        %tmp2 = and ulong %tmp, 8191            ; <ulong> [#uses=1]
-        ret ulong %tmp2
-}
-
-which compiles to
-        lda $0,8191($31)
-        srl $16,3,$1
-        and $1,$0,$0
-        ret $31,($26),1
+***
 
+add gcc builtins for alpha instructions
+
+
+***
+
+custom expand byteswap into nifty 
+extract/insert/mask byte/word/longword/quadword low/high
+sequences
+
+***
+
+see if any of the extract/insert/mask operations can be added
+
+***
+
+match more interesting things for cmovlbc cmovlbs (move if low bit clear/set)
+
+***
+
+lower srem and urem
+
+remq(i,j):  i - (j * divq(i,j)) if j != 0
+remqu(i,j): i - (j * divqu(i,j)) if j != 0
+reml(i,j):  i - (j * divl(i,j)) if j != 0
+remlu(i,j): i - (j * divlu(i,j)) if j != 0
+
+***
+
+add crazy vector instructions (MVI):
+
+(MIN|MAX)(U|S)(B8|W4) min and max, signed and unsigned, byte and word
+PKWB, UNPKBW pack/unpack word to byte
+PKLB UNPKBL pack/unpack long to byte
+PERR pixel error (sum across bytes of bytewise abs(i8v8 a - i8v8 b))
+
+cmpbytes bytewise cmpeq of i8v8 a and i8v8 b (not part of MVI extensions)
+
+this has some good examples for other operations that can be synthesised well 
+from these rather meager vector ops (such as saturating add).
+http://www.alphalinux.org/docs/MVI-full.html