-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-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 accross bytes of bytewise abs(i8v8 a - i8v8 b))
+
+cmpbytes bytewise cmpeq of i8v8 a and i8v8 b (not part of MVI extentions)
+
+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