Skip to content

Commit b8cac6b

Browse files
committed
Non-SIMD example
1 parent fb228d3 commit b8cac6b

File tree

4 files changed

+319
-5
lines changed

4 files changed

+319
-5
lines changed

.github/workflows/haskell.yml

+5-3
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,13 @@ jobs:
1717
strategy:
1818
fail-fast: false
1919
matrix:
20-
ghc: ["9.8.1", "9.6.3", "9.4.8", "9.2.8", "9.0.2", "8.10.7"]
21-
os: [ubuntu-latest, macOS-latest, windows-latest]
20+
ghc: ["9.8.2", "9.6.6"]
21+
os: [ubuntu-latest]
2222
exclude:
23+
- os: macos-latest
24+
ghc: "9.8.2"
2325
- os: windows-latest
24-
ghc: "9.4.2"
26+
ghc: "9.8.2"
2527

2628
env:
2729
# Modify this value to "invalidate" the cabal cache.

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);
@@ -164,3 +171,46 @@ int hw_simd_json_sm_main(
164171

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

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+
};

hw-json-simd.cabal

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ copyright: 2018-2021 John Ky
1313
license: BSD-3-Clause
1414
license-file: LICENSE
1515
build-type: Simple
16-
tested-with: GHC == 9.4.2, GHC == 9.2.4, GHC == 9.0.2, GHC == 8.10.7, GHC == 8.8.4, GHC == 8.6.5
16+
tested-with: GHC == 9.8.2, GHC == 9.6.6
1717
extra-source-files: cbits/debug.h
1818
cbits/simd.h
1919
cbits/intrinsics.h

0 commit comments

Comments
 (0)