source: trunk/symtab/marker_strms.hpp @ 3937

Last change on this file since 3937 was 1929, checked in by ksherdy, 8 years ago

Updated identity symbol table.

File size: 4.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  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  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;
44
45
46        temp1 = simd_and(basis_bits.bit_6, basis_bits.bit_7);
47        temp2 = simd_or(basis_bits.bit_5, temp1);
48        temp3 = simd_and(basis_bits.bit_4, temp2);
49        temp4 = simd_not(temp3);
50        temp5 = simd_or(basis_bits.bit_4, basis_bits.bit_5);
51        temp6 = simd_or(basis_bits.bit_6, basis_bits.bit_7);
52        temp7 = simd_or(temp5, temp6);
53        temp8 = simd_or(simd_and(basis_bits.bit_3, temp4), simd_andc(temp7, basis_bits.bit_3));
54        temp9 = simd_andc(basis_bits.bit_1, basis_bits.bit_0);
55        temp10 = simd_and(temp8, temp9);
56        temp11 = simd_or(basis_bits.bit_0, basis_bits.bit_1);
57        temp12 = simd_and(basis_bits.bit_2, basis_bits.bit_3);
58        temp13 = simd_andc(temp12, temp11);
59        temp14 = simd_or(basis_bits.bit_5, basis_bits.bit_6);
60        temp15 = simd_and(basis_bits.bit_4, temp14);
61        temp16 = simd_andc(temp13, temp15);
62        markers.spans = simd_or(temp10, temp16);
63  }
64  void do_final_block(Basis_bits & basis_bits, Markers & markers, BitBlock EOF_mask) {
65                BitBlock temp1, temp2, temp3, temp4, temp5, temp6, temp7, temp8, temp9, temp10;
66                BitBlock temp11, temp12, temp13, temp14, temp15, temp16;
67
68
69        temp1 = simd_and(basis_bits.bit_6, basis_bits.bit_7);
70        temp2 = simd_or(basis_bits.bit_5, temp1);
71        temp3 = simd_and(basis_bits.bit_4, temp2);
72        temp4 = simd_not(temp3);
73        temp5 = simd_or(basis_bits.bit_4, basis_bits.bit_5);
74        temp6 = simd_or(basis_bits.bit_6, basis_bits.bit_7);
75        temp7 = simd_or(temp5, temp6);
76        temp8 = simd_or(simd_and(basis_bits.bit_3, temp4), simd_andc(temp7, basis_bits.bit_3));
77        temp9 = simd_andc(basis_bits.bit_1, basis_bits.bit_0);
78        temp10 = simd_and(temp8, temp9);
79        temp11 = simd_or(basis_bits.bit_0, basis_bits.bit_1);
80        temp12 = simd_and(basis_bits.bit_2, basis_bits.bit_3);
81        temp13 = simd_andc(temp12, temp11);
82        temp14 = simd_or(basis_bits.bit_5, basis_bits.bit_6);
83        temp15 = simd_and(basis_bits.bit_4, temp14);
84        temp16 = simd_andc(temp13, temp15);
85        markers.spans = simd_or(temp10, temp16);
86  }
87  void do_segment(Basis_bits basis_bits[], Markers markers[], int segment_blocks) {
88  int i;
89  for (i = 0; i < segment_blocks; i++)
90    do_block(basis_bits[i], markers[i]);
91  }
92 
93  };
94
95
96// GENERATED
97  Generate_markers generate_markers;
98  Classify_markers classify_markers;
99
100
101static IDISA_ALWAYS_INLINE void markers_do_block(Basis_bits & basis_bits, Markers & markers) {//BitBlock & starts, BitBlock & ends) {
102        // GENERATED
103       
104  classify_markers.do_block(basis_bits, markers);
105  generate_markers.do_block(markers);
106}
107
108static IDISA_ALWAYS_INLINE void markers_do_final_block(Basis_bits & basis_bits, Markers & markers, BitBlock & EOF_mask) { //  BitBlock & starts, BitBlock & ends, BitBlock & EOF_mask) {
109        // GENERATED
110       
111  classify_markers.do_final_block(basis_bits, markers, EOF_mask);
112  generate_markers.do_final_block(markers, EOF_mask);
113}
114
115#endif // MARKERS_TEMPLATE_HPP
Note: See TracBrowser for help on using the repository browser.