Skip to content

Commit 0d188d2

Browse files
committed
Non-SIMD example
1 parent fe19db8 commit 0d188d2

File tree

2 files changed

+313
-1
lines changed

2 files changed

+313
-1
lines changed

cbits/main.c

+51-1
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,16 @@
44
#include <stdio.h>
55
#include <string.h>
66

7-
87
int hw_simd_json_sm_main(
98
int argc,
109
char **argv);
1110

11+
int hw_simd_json_sm_match_slow_main(
12+
int argc,
13+
char **argv);
14+
15+
extern uint32_t hw_json_transition_table[][4];
16+
1217
int main(
1318
int argc,
1419
char **argv) {
@@ -21,6 +26,8 @@ int main(
2126
hw_json_simd_main_spliced(argc - 1, argv + 1);
2227
} else if (strcmp(argv[1], "sm") == 0) {
2328
hw_simd_json_sm_main(argc - 1, argv + 1);
29+
} else if (strcmp(argv[1], "sm-match-slow") == 0) {
30+
hw_simd_json_sm_match_slow_main(argc - 1, argv + 1);
2431
} else {
2532
fprintf(stderr, "Unrecognised command: %s\n", argv[1]);
2633
exit(1);
@@ -162,3 +169,46 @@ int hw_simd_json_sm_main(
162169

163170
return 0;
164171
}
172+
173+
int hw_simd_json_sm_match_slow_main(
174+
int argc,
175+
char **argv) {
176+
if (argc != 2) {
177+
fprintf(stderr, "./a.out <input-file>\n");
178+
exit(1);
179+
}
180+
181+
char *in_filename = argv[1];
182+
183+
FILE *in = fopen(in_filename, "r");
184+
185+
if (!in) {
186+
fprintf(stderr, "Failed to open input file %s\n", in_filename);
187+
exit(1);
188+
}
189+
190+
uint8_t buffer[W8_BUFFER_SIZE];
191+
192+
uint32_t state = 0;
193+
194+
while (1) {
195+
size_t bytes_read = fread(buffer, 1, W8_BUFFER_SIZE, in);
196+
197+
for (size_t i = 0; i < bytes_read; ++i) {
198+
uint8_t b = buffer[i];
199+
state = hw_json_transition_table[b][state];
200+
}
201+
202+
if (bytes_read == 0) {
203+
if (feof(in)) {
204+
break;
205+
}
206+
}
207+
}
208+
209+
fprintf(stderr, "Final state %u\n", state);
210+
211+
fclose(in);
212+
213+
return 0;
214+
}

cbits/transition-table.c

+262
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,262 @@
1+
#include "intrinsics.h"
2+
3+
#include <stdint.h>
4+
5+
uint32_t hw_json_transition_table[][4] =
6+
{ { 0x00, 0x01, 0x01, 0x00 }
7+
, { 0x00, 0x01, 0x01, 0x00 }
8+
, { 0x00, 0x01, 0x01, 0x00 }
9+
, { 0x00, 0x01, 0x01, 0x00 }
10+
, { 0x00, 0x01, 0x01, 0x00 }
11+
, { 0x00, 0x01, 0x01, 0x00 }
12+
, { 0x00, 0x01, 0x01, 0x00 }
13+
, { 0x00, 0x01, 0x01, 0x00 }
14+
, { 0x00, 0x01, 0x01, 0x00 }
15+
, { 0x00, 0x01, 0x01, 0x00 }
16+
, { 0x00, 0x01, 0x01, 0x00 }
17+
, { 0x00, 0x01, 0x01, 0x00 }
18+
, { 0x00, 0x01, 0x01, 0x00 }
19+
, { 0x00, 0x01, 0x01, 0x00 }
20+
, { 0x00, 0x01, 0x01, 0x00 }
21+
, { 0x00, 0x01, 0x01, 0x00 }
22+
, { 0x00, 0x01, 0x01, 0x00 }
23+
, { 0x00, 0x01, 0x01, 0x00 }
24+
, { 0x00, 0x01, 0x01, 0x00 }
25+
, { 0x00, 0x01, 0x01, 0x00 }
26+
, { 0x00, 0x01, 0x01, 0x00 }
27+
, { 0x00, 0x01, 0x01, 0x00 }
28+
, { 0x00, 0x01, 0x01, 0x00 }
29+
, { 0x00, 0x01, 0x01, 0x00 }
30+
, { 0x00, 0x01, 0x01, 0x00 }
31+
, { 0x00, 0x01, 0x01, 0x00 }
32+
, { 0x00, 0x01, 0x01, 0x00 }
33+
, { 0x00, 0x01, 0x01, 0x00 }
34+
, { 0x00, 0x01, 0x01, 0x00 }
35+
, { 0x00, 0x01, 0x01, 0x00 }
36+
, { 0x00, 0x01, 0x01, 0x00 }
37+
, { 0x00, 0x01, 0x01, 0x00 }
38+
, { 0x00, 0x01, 0x01, 0x00 }
39+
, { 0x00, 0x01, 0x01, 0x00 }
40+
, { 0x01, 0x00, 0x01, 0x00 }
41+
, { 0x00, 0x01, 0x01, 0x00 }
42+
, { 0x00, 0x01, 0x01, 0x00 }
43+
, { 0x00, 0x01, 0x01, 0x00 }
44+
, { 0x00, 0x01, 0x01, 0x00 }
45+
, { 0x00, 0x01, 0x01, 0x00 }
46+
, { 0x00, 0x01, 0x01, 0x00 }
47+
, { 0x00, 0x01, 0x01, 0x00 }
48+
, { 0x00, 0x01, 0x01, 0x00 }
49+
, { 0x03, 0x01, 0x01, 0x03 }
50+
, { 0x00, 0x01, 0x01, 0x00 }
51+
, { 0x03, 0x01, 0x01, 0x03 }
52+
, { 0x03, 0x01, 0x01, 0x03 }
53+
, { 0x00, 0x01, 0x01, 0x00 }
54+
, { 0x03, 0x01, 0x01, 0x03 }
55+
, { 0x03, 0x01, 0x01, 0x03 }
56+
, { 0x03, 0x01, 0x01, 0x03 }
57+
, { 0x03, 0x01, 0x01, 0x03 }
58+
, { 0x03, 0x01, 0x01, 0x03 }
59+
, { 0x03, 0x01, 0x01, 0x03 }
60+
, { 0x03, 0x01, 0x01, 0x03 }
61+
, { 0x03, 0x01, 0x01, 0x03 }
62+
, { 0x03, 0x01, 0x01, 0x03 }
63+
, { 0x03, 0x01, 0x01, 0x03 }
64+
, { 0x00, 0x01, 0x01, 0x00 }
65+
, { 0x00, 0x01, 0x01, 0x00 }
66+
, { 0x00, 0x01, 0x01, 0x00 }
67+
, { 0x00, 0x01, 0x01, 0x00 }
68+
, { 0x00, 0x01, 0x01, 0x00 }
69+
, { 0x00, 0x01, 0x01, 0x00 }
70+
, { 0x00, 0x01, 0x01, 0x00 }
71+
, { 0x03, 0x01, 0x01, 0x03 }
72+
, { 0x03, 0x01, 0x01, 0x03 }
73+
, { 0x03, 0x01, 0x01, 0x03 }
74+
, { 0x03, 0x01, 0x01, 0x03 }
75+
, { 0x03, 0x01, 0x01, 0x03 }
76+
, { 0x03, 0x01, 0x01, 0x03 }
77+
, { 0x03, 0x01, 0x01, 0x03 }
78+
, { 0x03, 0x01, 0x01, 0x03 }
79+
, { 0x03, 0x01, 0x01, 0x03 }
80+
, { 0x03, 0x01, 0x01, 0x03 }
81+
, { 0x03, 0x01, 0x01, 0x03 }
82+
, { 0x03, 0x01, 0x01, 0x03 }
83+
, { 0x03, 0x01, 0x01, 0x03 }
84+
, { 0x03, 0x01, 0x01, 0x03 }
85+
, { 0x03, 0x01, 0x01, 0x03 }
86+
, { 0x03, 0x01, 0x01, 0x03 }
87+
, { 0x03, 0x01, 0x01, 0x03 }
88+
, { 0x03, 0x01, 0x01, 0x03 }
89+
, { 0x03, 0x01, 0x01, 0x03 }
90+
, { 0x03, 0x01, 0x01, 0x03 }
91+
, { 0x03, 0x01, 0x01, 0x03 }
92+
, { 0x03, 0x01, 0x01, 0x03 }
93+
, { 0x03, 0x01, 0x01, 0x03 }
94+
, { 0x03, 0x01, 0x01, 0x03 }
95+
, { 0x03, 0x01, 0x01, 0x03 }
96+
, { 0x03, 0x01, 0x01, 0x03 }
97+
, { 0x00, 0x01, 0x01, 0x00 }
98+
, { 0x00, 0x02, 0x01, 0x00 }
99+
, { 0x00, 0x01, 0x01, 0x00 }
100+
, { 0x00, 0x01, 0x01, 0x00 }
101+
, { 0x00, 0x01, 0x01, 0x00 }
102+
, { 0x00, 0x01, 0x01, 0x00 }
103+
, { 0x03, 0x01, 0x01, 0x03 }
104+
, { 0x03, 0x01, 0x01, 0x03 }
105+
, { 0x03, 0x01, 0x01, 0x03 }
106+
, { 0x03, 0x01, 0x01, 0x03 }
107+
, { 0x03, 0x01, 0x01, 0x03 }
108+
, { 0x03, 0x01, 0x01, 0x03 }
109+
, { 0x03, 0x01, 0x01, 0x03 }
110+
, { 0x03, 0x01, 0x01, 0x03 }
111+
, { 0x03, 0x01, 0x01, 0x03 }
112+
, { 0x03, 0x01, 0x01, 0x03 }
113+
, { 0x03, 0x01, 0x01, 0x03 }
114+
, { 0x03, 0x01, 0x01, 0x03 }
115+
, { 0x03, 0x01, 0x01, 0x03 }
116+
, { 0x03, 0x01, 0x01, 0x03 }
117+
, { 0x03, 0x01, 0x01, 0x03 }
118+
, { 0x03, 0x01, 0x01, 0x03 }
119+
, { 0x03, 0x01, 0x01, 0x03 }
120+
, { 0x03, 0x01, 0x01, 0x03 }
121+
, { 0x03, 0x01, 0x01, 0x03 }
122+
, { 0x03, 0x01, 0x01, 0x03 }
123+
, { 0x03, 0x01, 0x01, 0x03 }
124+
, { 0x03, 0x01, 0x01, 0x03 }
125+
, { 0x03, 0x01, 0x01, 0x03 }
126+
, { 0x03, 0x01, 0x01, 0x03 }
127+
, { 0x03, 0x01, 0x01, 0x03 }
128+
, { 0x03, 0x01, 0x01, 0x03 }
129+
, { 0x00, 0x01, 0x01, 0x00 }
130+
, { 0x00, 0x01, 0x01, 0x00 }
131+
, { 0x00, 0x01, 0x01, 0x00 }
132+
, { 0x00, 0x01, 0x01, 0x00 }
133+
, { 0x00, 0x01, 0x01, 0x00 }
134+
, { 0x00, 0x01, 0x01, 0x00 }
135+
, { 0x00, 0x01, 0x01, 0x00 }
136+
, { 0x00, 0x01, 0x01, 0x00 }
137+
, { 0x00, 0x01, 0x01, 0x00 }
138+
, { 0x00, 0x01, 0x01, 0x00 }
139+
, { 0x00, 0x01, 0x01, 0x00 }
140+
, { 0x00, 0x01, 0x01, 0x00 }
141+
, { 0x00, 0x01, 0x01, 0x00 }
142+
, { 0x00, 0x01, 0x01, 0x00 }
143+
, { 0x00, 0x01, 0x01, 0x00 }
144+
, { 0x00, 0x01, 0x01, 0x00 }
145+
, { 0x00, 0x01, 0x01, 0x00 }
146+
, { 0x00, 0x01, 0x01, 0x00 }
147+
, { 0x00, 0x01, 0x01, 0x00 }
148+
, { 0x00, 0x01, 0x01, 0x00 }
149+
, { 0x00, 0x01, 0x01, 0x00 }
150+
, { 0x00, 0x01, 0x01, 0x00 }
151+
, { 0x00, 0x01, 0x01, 0x00 }
152+
, { 0x00, 0x01, 0x01, 0x00 }
153+
, { 0x00, 0x01, 0x01, 0x00 }
154+
, { 0x00, 0x01, 0x01, 0x00 }
155+
, { 0x00, 0x01, 0x01, 0x00 }
156+
, { 0x00, 0x01, 0x01, 0x00 }
157+
, { 0x00, 0x01, 0x01, 0x00 }
158+
, { 0x00, 0x01, 0x01, 0x00 }
159+
, { 0x00, 0x01, 0x01, 0x00 }
160+
, { 0x00, 0x01, 0x01, 0x00 }
161+
, { 0x00, 0x01, 0x01, 0x00 }
162+
, { 0x00, 0x01, 0x01, 0x00 }
163+
, { 0x00, 0x01, 0x01, 0x00 }
164+
, { 0x00, 0x01, 0x01, 0x00 }
165+
, { 0x00, 0x01, 0x01, 0x00 }
166+
, { 0x00, 0x01, 0x01, 0x00 }
167+
, { 0x00, 0x01, 0x01, 0x00 }
168+
, { 0x00, 0x01, 0x01, 0x00 }
169+
, { 0x00, 0x01, 0x01, 0x00 }
170+
, { 0x00, 0x01, 0x01, 0x00 }
171+
, { 0x00, 0x01, 0x01, 0x00 }
172+
, { 0x00, 0x01, 0x01, 0x00 }
173+
, { 0x00, 0x01, 0x01, 0x00 }
174+
, { 0x00, 0x01, 0x01, 0x00 }
175+
, { 0x00, 0x01, 0x01, 0x00 }
176+
, { 0x00, 0x01, 0x01, 0x00 }
177+
, { 0x00, 0x01, 0x01, 0x00 }
178+
, { 0x00, 0x01, 0x01, 0x00 }
179+
, { 0x00, 0x01, 0x01, 0x00 }
180+
, { 0x00, 0x01, 0x01, 0x00 }
181+
, { 0x00, 0x01, 0x01, 0x00 }
182+
, { 0x00, 0x01, 0x01, 0x00 }
183+
, { 0x00, 0x01, 0x01, 0x00 }
184+
, { 0x00, 0x01, 0x01, 0x00 }
185+
, { 0x00, 0x01, 0x01, 0x00 }
186+
, { 0x00, 0x01, 0x01, 0x00 }
187+
, { 0x00, 0x01, 0x01, 0x00 }
188+
, { 0x00, 0x01, 0x01, 0x00 }
189+
, { 0x00, 0x01, 0x01, 0x00 }
190+
, { 0x00, 0x01, 0x01, 0x00 }
191+
, { 0x00, 0x01, 0x01, 0x00 }
192+
, { 0x00, 0x01, 0x01, 0x00 }
193+
, { 0x00, 0x01, 0x01, 0x00 }
194+
, { 0x00, 0x01, 0x01, 0x00 }
195+
, { 0x00, 0x01, 0x01, 0x00 }
196+
, { 0x00, 0x01, 0x01, 0x00 }
197+
, { 0x00, 0x01, 0x01, 0x00 }
198+
, { 0x00, 0x01, 0x01, 0x00 }
199+
, { 0x00, 0x01, 0x01, 0x00 }
200+
, { 0x00, 0x01, 0x01, 0x00 }
201+
, { 0x00, 0x01, 0x01, 0x00 }
202+
, { 0x00, 0x01, 0x01, 0x00 }
203+
, { 0x00, 0x01, 0x01, 0x00 }
204+
, { 0x00, 0x01, 0x01, 0x00 }
205+
, { 0x00, 0x01, 0x01, 0x00 }
206+
, { 0x00, 0x01, 0x01, 0x00 }
207+
, { 0x00, 0x01, 0x01, 0x00 }
208+
, { 0x00, 0x01, 0x01, 0x00 }
209+
, { 0x00, 0x01, 0x01, 0x00 }
210+
, { 0x00, 0x01, 0x01, 0x00 }
211+
, { 0x00, 0x01, 0x01, 0x00 }
212+
, { 0x00, 0x01, 0x01, 0x00 }
213+
, { 0x00, 0x01, 0x01, 0x00 }
214+
, { 0x00, 0x01, 0x01, 0x00 }
215+
, { 0x00, 0x01, 0x01, 0x00 }
216+
, { 0x00, 0x01, 0x01, 0x00 }
217+
, { 0x00, 0x01, 0x01, 0x00 }
218+
, { 0x00, 0x01, 0x01, 0x00 }
219+
, { 0x00, 0x01, 0x01, 0x00 }
220+
, { 0x00, 0x01, 0x01, 0x00 }
221+
, { 0x00, 0x01, 0x01, 0x00 }
222+
, { 0x00, 0x01, 0x01, 0x00 }
223+
, { 0x00, 0x01, 0x01, 0x00 }
224+
, { 0x00, 0x01, 0x01, 0x00 }
225+
, { 0x00, 0x01, 0x01, 0x00 }
226+
, { 0x00, 0x01, 0x01, 0x00 }
227+
, { 0x00, 0x01, 0x01, 0x00 }
228+
, { 0x00, 0x01, 0x01, 0x00 }
229+
, { 0x00, 0x01, 0x01, 0x00 }
230+
, { 0x00, 0x01, 0x01, 0x00 }
231+
, { 0x00, 0x01, 0x01, 0x00 }
232+
, { 0x00, 0x01, 0x01, 0x00 }
233+
, { 0x00, 0x01, 0x01, 0x00 }
234+
, { 0x00, 0x01, 0x01, 0x00 }
235+
, { 0x00, 0x01, 0x01, 0x00 }
236+
, { 0x00, 0x01, 0x01, 0x00 }
237+
, { 0x00, 0x01, 0x01, 0x00 }
238+
, { 0x00, 0x01, 0x01, 0x00 }
239+
, { 0x00, 0x01, 0x01, 0x00 }
240+
, { 0x00, 0x01, 0x01, 0x00 }
241+
, { 0x00, 0x01, 0x01, 0x00 }
242+
, { 0x00, 0x01, 0x01, 0x00 }
243+
, { 0x00, 0x01, 0x01, 0x00 }
244+
, { 0x00, 0x01, 0x01, 0x00 }
245+
, { 0x00, 0x01, 0x01, 0x00 }
246+
, { 0x00, 0x01, 0x01, 0x00 }
247+
, { 0x00, 0x01, 0x01, 0x00 }
248+
, { 0x00, 0x01, 0x01, 0x00 }
249+
, { 0x00, 0x01, 0x01, 0x00 }
250+
, { 0x00, 0x01, 0x01, 0x00 }
251+
, { 0x00, 0x01, 0x01, 0x00 }
252+
, { 0x00, 0x01, 0x01, 0x00 }
253+
, { 0x00, 0x01, 0x01, 0x00 }
254+
, { 0x00, 0x01, 0x01, 0x00 }
255+
, { 0x00, 0x01, 0x01, 0x00 }
256+
, { 0x00, 0x01, 0x01, 0x00 }
257+
, { 0x00, 0x01, 0x01, 0x00 }
258+
, { 0x00, 0x01, 0x01, 0x00 }
259+
, { 0x00, 0x01, 0x01, 0x00 }
260+
, { 0x00, 0x01, 0x01, 0x00 }
261+
, { 0x00, 0x01, 0x01, 0x00 }
262+
};

0 commit comments

Comments
 (0)