1 /*
2 version 20090331
3 Peter Schwabe & Neil Costigan
4 Public domain.
5 */
6 
7 #include <stdio.h>
8 
9 const vector unsigned char select0 = {0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x00, 0x01};
10 const vector unsigned char select1 = {0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x02, 0x03};
11 const vector unsigned char select2 = {0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x04, 0x05};
12 const vector unsigned char select3 = {0x80, 0x80, 0x06, 0x07, 0x80, 0x80, 0x06, 0x07, 0x80, 0x80, 0x06, 0x07, 0x80, 0x80, 0x06, 0x07};
13 
14 const vector unsigned char select4 = {0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x08, 0x09};
15 const vector unsigned char select5 = {0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b};
16 const vector unsigned char select6 = {0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d};
17 const vector unsigned char select7 = {0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f};
18 
19 const vector unsigned char _sel0h = {0x00, 0x01, 0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x00, 0x01, 0x80, 0x80};
20 const vector unsigned char _sel1h = {0x02, 0x03, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80};
21 const vector unsigned char _sel2h = {0x04, 0x05, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80};
22 const vector unsigned char _sel3h = {0x06, 0x07, 0x80, 0x80, 0x06, 0x07, 0x80, 0x80, 0x06, 0x07, 0x80, 0x80, 0x06, 0x07, 0x80, 0x80};
23 
24 const vector unsigned char _sel4h = {0x08, 0x09, 0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x08, 0x09, 0x80, 0x80};
25 const vector unsigned char _sel5h = {0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80};
26 const vector unsigned char _sel6h = {0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80};
27 const vector unsigned char _sel7h = {0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80, 0x0e, 0x0f, 0x80, 0x80};
28 
29 const vector unsigned char selectL = {0x80, 0x80, 0x00, 0x01, 0x80, 0x80, 0x02, 0x03, 0x80, 0x80, 0x04, 0x05, 0x80, 0x80, 0x06, 0x07};
30 const vector unsigned char selectH = {0x80, 0x80, 0x08, 0x09, 0x80, 0x80, 0x0a, 0x0b, 0x80, 0x80, 0x0c, 0x0d, 0x80, 0x80, 0x0e, 0x0f};
31 
32 const vector unsigned char select01 = {0x80, 0x80, 0x80, 0x80, 0x00, 0x01, 0x02, 0x03, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
33 const vector unsigned char select12 = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x04, 0x05, 0x06, 0x07, 0x80, 0x80, 0x80, 0x80};
34 const vector unsigned char select23 = {0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x08, 0x09, 0x0a, 0x0b};
35 const vector unsigned char select30 = {0x0c, 0x0d, 0x0e, 0x0f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
36 
37 const vector unsigned char combine13 = {0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b};
38 const vector unsigned char combine22 = {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
39 const vector unsigned char combine31 = {0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13};
40 
41 const vector unsigned char _shuf0_01 = {0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x013, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
42 const vector unsigned char _shuf0_2 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 0x80, 0x80, 0x80, 0x80};
43 const vector unsigned char _shuf0_3 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x10, 0x11, 0x12, 0x13};
44 
45 const vector unsigned char _shuf1_01 = {0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x017, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
46 const vector unsigned char _shuf1_2 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x14, 0x15, 0x16, 0x17, 0x80, 0x80, 0x80, 0x80};
47 const vector unsigned char _shuf1_3 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x17};
48 
49 const vector unsigned char _shuf2_01 = {0x08, 0x09, 0x0a, 0x0b, 0x18, 0x19, 0x1a, 0x01b, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
50 const vector unsigned char _shuf2_2 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x18, 0x19, 0x1a, 0x1b, 0x80, 0x80, 0x80, 0x80};
51 const vector unsigned char _shuf2_3 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x18, 0x19, 0x1a, 0x1b};
52 
53 const vector unsigned char _shuf3_01 = {0x0c, 0x0d, 0x0e, 0x0f, 0x1c, 0x1d, 0x1e, 0x01f, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80};
54 const vector unsigned char _shuf3_2 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x1c, 0x1d, 0x1e, 0x1f, 0x80, 0x80, 0x80, 0x80};
55 const vector unsigned char _shuf3_3 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x1c, 0x1d, 0x1e, 0x1f};
56 
57 const vector unsigned char _mask13 = {0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x1f, 0xff, 0x00, 0x00, 0x1f, 0xff};
58 const vector unsigned char _mask12 = {0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, 0x0f, 0xff};
59 
60 const vector unsigned char _selw0220 = {0x00, 0x01, 0x02, 0x03, 0x08, 0x09, 0x0a, 0x0b, 0x08, 0x09, 0x0a, 0x0b, 0x00, 0x01, 0x02, 0x03};
61 const vector unsigned char _selw0105 = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x00, 0x01, 0x02, 0x03, 0x14, 0x15, 0x16, 0x17};
62 const vector unsigned char _selw2325 = {0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x08, 0x09, 0x0a, 0x0b, 0x14, 0x15, 0x16, 0x17};
63 const vector unsigned char _selw0433 = {0x00, 0x01, 0x02, 0x03, 0x10, 0x11, 0x12, 0x13, 0x0c, 0x0d, 0x0e, 0x0f, 0x0c, 0x0d, 0x0e, 0x0f};
64 const vector unsigned char _selw261c0 = {0x08, 0x09, 0x0a, 0x0b, 0x18, 0x19, 0x1a, 0x1b, 0x04, 0x05, 0x06, 0x07, 0x80, 0x80, 0x80, 0x80};
65 const vector unsigned char _selw1362 = {0x04, 0x05, 0x06, 0x07, 0x0c, 0x0d, 0x0e, 0x0f, 0x18, 0x19, 0x1a, 0x1b, 0x08, 0x09, 0x0a, 0x0b};
66 const vector unsigned char _selw0342 = {0x00, 0x01, 0x02, 0x03, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, 0x13, 0x08, 0x09, 0x0a, 0x0b};
67 const vector unsigned char _selw3333 = {0x0c, 0x0d, 0x0e, 0x0f, 0x0c, 0x0d, 0x0e, 0x0f, 0x0c, 0x0d, 0x0e, 0x0f, 0x0c, 0x0d, 0x0e, 0x0f};
68 const vector unsigned char _swapendian = {0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08, 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00};
69 
70 const vector unsigned int _2pconsts0= {0x3FDA, 0x7689F434, 0, 0};	       /* {0x3FDA, 0x3FDA * 121666, 0, 0} */
71 const vector unsigned int _2pconsts= {0x3FFE, 0x76CCC97C, 0x1FFE, 0x3B64897C}; /* {0x3FFE, 0x3FFE * 121666, 0x1FFE, 0x1FFE * 121666} */
72 
73 const vector unsigned int _2p_03   = {0x3FDA, 0x3FFE, 0x3FFE, 0x1FFE};
74 const vector unsigned int _2p_47   = {0x3FFE, 0x3FFE, 0x3FFE, 0x1FFE};
75 const vector unsigned int _2p_811  = {0x3FFE, 0x3FFE, 0x3FFE, 0x1FFE};
76 const vector unsigned int _2p_1215 = {0x3FFE, 0x3FFE, 0x3FFE, 0x1FFE};
77 const vector unsigned int _2p_1619 = {0x3FFE, 0x3FFE, 0x3FFE, 0x1FFE};
78 
79 const vector unsigned int _p_lower = {0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff};
80 const vector unsigned int _p_upper = {0xffffffff, 0xffffffff, 0xffffffff, 0xffffffed};
81 const vector unsigned int _nmsbit =   {0x7fffffff, 0xffffffff, 0xffffffff, 0xffffffff};
82 
83 const vector unsigned int _vec19 = {19, 19, 19, 19};
84 
85 const vector unsigned int _shlw0001 = {0, 0, 0, 1};
86 const vector unsigned int _shlw0011 = {0, 0, 1, 1};
87 const vector unsigned int _shlw0111 = {0, 1, 1, 1};
88 
89 const vector unsigned int _shlw1111 = {1, 1, 1, 1};
90 const vector unsigned int _shlw1112 = {1, 1, 1, 2};
91 const vector unsigned int _shlw1122 = {1, 1, 2, 2};
92 const vector unsigned int _shlw1222 = {1, 2, 2, 2};
93 
94 const vector unsigned int _a24vec = {3678535680u, 0, 3678470144u, 0};
95 const vector unsigned int redCoeffMask = {0x1fff, 0x1fff, 0x1fff, 0xfff};
96 const vector unsigned int redCoeffMaskEnd = {0x1fff, 0x1fff, 0x1fff, 0xffffffff};
97 const vector unsigned int redCoeffMaskVeryEnd = {0x1fff, 0x1fff, 0x1fff, 0x1fff};
98 
99 const vector unsigned int _one = {1, 0, 0, 0};
100 
101 const vector unsigned int _try = {0xffffffff, 0xffffffff, 0xffffffff, 0xfff};
102