source: trunk/symbol_table/marker_strms.hpp @ 1963

Last change on this file since 1963 was 1963, checked in by ksherdy, 7 years ago

Moved hash_test.cpp.

File size: 6.1 KB
Line 
1#ifndef MARKERS_TEMPLATE_HPP
2#define MARKERS_TEMPLATE_HPP
3#include "../lib/bitblock.hpp"
4#include "../lib/carryQ.hpp"
5
6// GENERATED
7  struct Markers {
8  BitBlock spans;
9  BitBlock starts;
10  BitBlock ends;
11};
12
13  struct Generate_markers {
14  Generate_markers() { 
15 }
16  IDISA_INLINE void do_block(Markers & markers) {
17
18
19
20        markers.starts = simd_andc(markers.spans, carryQ.BitBlock_advance_ci_co(markers.spans, 0));
21        markers.ends = simd_andc(carryQ.BitBlock_advance_ci_co(markers.spans, 1), markers.spans);
22        carryQ.CarryQ_Adjust(2);
23  }
24  void do_final_block(Markers & markers, BitBlock EOF_mask) {
25
26
27
28        markers.starts = simd_andc(markers.spans, carryQ.BitBlock_advance_ci_co(markers.spans, 0));
29        markers.ends = simd_andc(carryQ.BitBlock_advance_ci_co(markers.spans, 1), markers.spans);
30  }
31  void do_segment(Markers markers[], int segment_blocks) {
32  int i;
33  for (i = 0; i < segment_blocks; i++)
34    do_block(markers[i]);
35  }
36  CarryArray<2> carryQ;
37  };
38
39  struct Classify_markers {
40 
41  IDISA_INLINE void do_block(Basis_bits & basis_bits, Markers & markers) {
42                BitBlock temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10;
43                BitBlock temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18;
44                BitBlock temp19, temp20, temp21, temp22, temp23, temp24, temp25, temp26;
45                BitBlock temp27, temp28, temp29, temp30, temp31, temp32, temp33, temp34;
46
47
48        temp1 = simd_or(basis_bits.bit_0, basis_bits.bit_1);
49        temp2 = simd_andc(basis_bits.bit_2, basis_bits.bit_3);
50        temp3 = simd_andc(temp2, temp1);
51        temp4 = simd_and(basis_bits.bit_4, basis_bits.bit_5);
52        temp5 = simd_andc(basis_bits.bit_7, basis_bits.bit_6);
53        temp6 = simd_and(temp4, temp5);
54        temp7 = simd_and(temp3, temp6);
55        temp8 = simd_andc(basis_bits.bit_1, basis_bits.bit_0);
56        temp9 = simd_andc(basis_bits.bit_3, basis_bits.bit_2);
57        temp10 = simd_and(temp8, temp9);
58        temp11 = simd_and(basis_bits.bit_6, basis_bits.bit_7);
59        temp12 = simd_and(temp4, temp11);
60        temp13 = simd_and(temp10, temp12);
61        temp14 = simd_or(temp7, temp13);
62        temp15 = simd_andc(basis_bits.bit_6, basis_bits.bit_7);
63        temp16 = simd_and(temp4, temp15);
64        temp17 = simd_and(temp3, temp16);
65        temp18 = simd_or(temp14, temp17);
66        temp19 = simd_and(basis_bits.bit_2, basis_bits.bit_3);
67        temp20 = simd_andc(temp19, temp1);
68        temp21 = simd_or(basis_bits.bit_5, temp11);
69        temp22 = simd_and(basis_bits.bit_4, temp21);
70        temp23 = simd_andc(temp20, temp22);
71        temp24 = simd_or(temp18, temp23);
72        temp25 = simd_andc(temp8, basis_bits.bit_2);
73        temp26 = simd_not(temp22);
74        temp27 = simd_or(basis_bits.bit_4, basis_bits.bit_5);
75        temp28 = simd_or(basis_bits.bit_6, basis_bits.bit_7);
76        temp29 = simd_or(temp27, temp28);
77        temp30 = simd_or(simd_and(basis_bits.bit_3, temp26), simd_andc(temp29, basis_bits.bit_3));
78        temp31 = simd_and(temp25, temp30);
79        temp32 = simd_or(temp24, temp31);
80        temp33 = simd_and(temp8, basis_bits.bit_2);
81        temp34 = simd_and(temp33, temp30);
82        markers.spans = simd_or(temp32, temp34);
83  }
84  void do_final_block(Basis_bits & basis_bits, Markers & markers, BitBlock EOF_mask) {
85                BitBlock temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10;
86                BitBlock temp11, temp12, temp13, temp14, temp15, temp16, temp17, temp18;
87                BitBlock temp19, temp20, temp21, temp22, temp23, temp24, temp25, temp26;
88                BitBlock temp27, temp28, temp29, temp30, temp31, temp32, temp33, temp34;
89
90
91        temp1 = simd_or(basis_bits.bit_0, basis_bits.bit_1);
92        temp2 = simd_andc(basis_bits.bit_2, basis_bits.bit_3);
93        temp3 = simd_andc(temp2, temp1);
94        temp4 = simd_and(basis_bits.bit_4, basis_bits.bit_5);
95        temp5 = simd_andc(basis_bits.bit_7, basis_bits.bit_6);
96        temp6 = simd_and(temp4, temp5);
97        temp7 = simd_and(temp3, temp6);
98        temp8 = simd_andc(basis_bits.bit_1, basis_bits.bit_0);
99        temp9 = simd_andc(basis_bits.bit_3, basis_bits.bit_2);
100        temp10 = simd_and(temp8, temp9);
101        temp11 = simd_and(basis_bits.bit_6, basis_bits.bit_7);
102        temp12 = simd_and(temp4, temp11);
103        temp13 = simd_and(temp10, temp12);
104        temp14 = simd_or(temp7, temp13);
105        temp15 = simd_andc(basis_bits.bit_6, basis_bits.bit_7);
106        temp16 = simd_and(temp4, temp15);
107        temp17 = simd_and(temp3, temp16);
108        temp18 = simd_or(temp14, temp17);
109        temp19 = simd_and(basis_bits.bit_2, basis_bits.bit_3);
110        temp20 = simd_andc(temp19, temp1);
111        temp21 = simd_or(basis_bits.bit_5, temp11);
112        temp22 = simd_and(basis_bits.bit_4, temp21);
113        temp23 = simd_andc(temp20, temp22);
114        temp24 = simd_or(temp18, temp23);
115        temp25 = simd_andc(temp8, basis_bits.bit_2);
116        temp26 = simd_not(temp22);
117        temp27 = simd_or(basis_bits.bit_4, basis_bits.bit_5);
118        temp28 = simd_or(basis_bits.bit_6, basis_bits.bit_7);
119        temp29 = simd_or(temp27, temp28);
120        temp30 = simd_or(simd_and(basis_bits.bit_3, temp26), simd_andc(temp29, basis_bits.bit_3));
121        temp31 = simd_and(temp25, temp30);
122        temp32 = simd_or(temp24, temp31);
123        temp33 = simd_and(temp8, basis_bits.bit_2);
124        temp34 = simd_and(temp33, temp30);
125        markers.spans = simd_or(temp32, temp34);
126  }
127  void do_segment(Basis_bits basis_bits[], Markers markers[], int segment_blocks) {
128  int i;
129  for (i = 0; i < segment_blocks; i++)
130    do_block(basis_bits[i], markers[i]);
131  }
132 
133  };
134
135
136// GENERATED
137  Generate_markers generate_markers;
138  Classify_markers classify_markers;
139
140
141static IDISA_ALWAYS_INLINE void markers_do_block(Basis_bits & basis_bits, Markers & markers) {//BitBlock & starts, BitBlock & ends) {
142        // GENERATED
143       
144  classify_markers.do_block(basis_bits, markers);
145  generate_markers.do_block(markers);
146}
147
148static IDISA_ALWAYS_INLINE void markers_do_final_block(Basis_bits & basis_bits, Markers & markers, BitBlock & EOF_mask) { //  BitBlock & starts, BitBlock & ends, BitBlock & EOF_mask) {
149        // GENERATED
150       
151  classify_markers.do_final_block(basis_bits, markers, EOF_mask);
152  generate_markers.do_final_block(markers, EOF_mask);
153}
154
155#endif // MARKERS_TEMPLATE_HPP
Note: See TracBrowser for help on using the repository browser.