2 * Author......: Jens Steube <jens.steube@gmail.com>
6 #pragma GCC diagnostic ignored "-Wunused-parameter"
7 #pragma GCC diagnostic ignored "-Wunused-variable"
8 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
9 #pragma GCC diagnostic ignored "-Wunused-function"
11 #include <rp_kernel_on_cpu.h>
13 static uint32_t generate_cmask (uint32_t buf
)
15 const uint32_t rmask
= ((buf
& 0x40404040) >> 1)
16 & ~((buf
& 0x80808080) >> 2);
18 const uint32_t hmask
= (buf
& 0x1f1f1f1f) + 0x05050505;
19 const uint32_t lmask
= (buf
& 0x1f1f1f1f) + 0x1f1f1f1f;
21 return rmask
& ~hmask
& lmask
;
24 static void truncate_right (uint32_t w0
[4], uint32_t w1
[4], const uint len
)
26 const uint tmp
= (1 << ((len
% 4) * 8)) - 1;
77 static void truncate_left (uint32_t w0
[4], uint32_t w1
[4], const uint len
)
79 const uint tmp
= ~((1 << ((len
% 4) * 8)) - 1);
130 static void lshift_block (const uint32_t in0
[4], const uint32_t in1
[4], uint32_t out0
[4], uint32_t out1
[4])
132 out0
[0] = in0
[0] >> 8 | in0
[1] << 24;
133 out0
[1] = in0
[1] >> 8 | in0
[2] << 24;
134 out0
[2] = in0
[2] >> 8 | in0
[3] << 24;
135 out0
[3] = in0
[3] >> 8 | in1
[0] << 24;
136 out1
[0] = in1
[0] >> 8 | in1
[1] << 24;
137 out1
[1] = in1
[1] >> 8 | in1
[2] << 24;
138 out1
[2] = in1
[2] >> 8 | in1
[3] << 24;
139 out1
[3] = in1
[3] >> 8;
142 static void rshift_block (const uint32_t in0
[4], const uint32_t in1
[4], uint32_t out0
[4], uint32_t out1
[4])
144 out1
[3] = in1
[3] << 8 | in1
[2] >> 24;
145 out1
[2] = in1
[2] << 8 | in1
[1] >> 24;
146 out1
[1] = in1
[1] << 8 | in1
[0] >> 24;
147 out1
[0] = in1
[0] << 8 | in0
[3] >> 24;
148 out0
[3] = in0
[3] << 8 | in0
[2] >> 24;
149 out0
[2] = in0
[2] << 8 | in0
[1] >> 24;
150 out0
[1] = in0
[1] << 8 | in0
[0] >> 24;
151 out0
[0] = in0
[0] << 8;
154 static void rshift_block_N (const uint32_t in0
[4], const uint32_t in1
[4], uint32_t out0
[4], uint32_t out1
[4], const uint num
)
158 case 0: out1
[3] = in1
[3];
167 case 1: out1
[3] = in1
[3] << 8 | in1
[2] >> 24;
168 out1
[2] = in1
[2] << 8 | in1
[1] >> 24;
169 out1
[1] = in1
[1] << 8 | in1
[0] >> 24;
170 out1
[0] = in1
[0] << 8 | in0
[3] >> 24;
171 out0
[3] = in0
[3] << 8 | in0
[2] >> 24;
172 out0
[2] = in0
[2] << 8 | in0
[1] >> 24;
173 out0
[1] = in0
[1] << 8 | in0
[0] >> 24;
174 out0
[0] = in0
[0] << 8;
176 case 2: out1
[3] = in1
[3] << 16 | in1
[2] >> 16;
177 out1
[2] = in1
[2] << 16 | in1
[1] >> 16;
178 out1
[1] = in1
[1] << 16 | in1
[0] >> 16;
179 out1
[0] = in1
[0] << 16 | in0
[3] >> 16;
180 out0
[3] = in0
[3] << 16 | in0
[2] >> 16;
181 out0
[2] = in0
[2] << 16 | in0
[1] >> 16;
182 out0
[1] = in0
[1] << 16 | in0
[0] >> 16;
183 out0
[0] = in0
[0] << 16;
185 case 3: out1
[3] = in1
[3] << 24 | in1
[2] >> 8;
186 out1
[2] = in1
[2] << 24 | in1
[1] >> 8;
187 out1
[1] = in1
[1] << 24 | in1
[0] >> 8;
188 out1
[0] = in1
[0] << 24 | in0
[3] >> 8;
189 out0
[3] = in0
[3] << 24 | in0
[2] >> 8;
190 out0
[2] = in0
[2] << 24 | in0
[1] >> 8;
191 out0
[1] = in0
[1] << 24 | in0
[0] >> 8;
192 out0
[0] = in0
[0] << 24;
194 case 4: out1
[3] = in1
[2];
203 case 5: out1
[3] = in1
[2] << 8 | in1
[1] >> 24;
204 out1
[2] = in1
[1] << 8 | in1
[0] >> 24;
205 out1
[1] = in1
[0] << 8 | in0
[3] >> 24;
206 out1
[0] = in0
[3] << 8 | in0
[2] >> 24;
207 out0
[3] = in0
[2] << 8 | in0
[1] >> 24;
208 out0
[2] = in0
[1] << 8 | in0
[0] >> 24;
209 out0
[1] = in0
[0] << 8;
212 case 6: out1
[3] = in1
[2] << 16 | in1
[1] >> 16;
213 out1
[2] = in1
[1] << 16 | in1
[0] >> 16;
214 out1
[1] = in1
[0] << 16 | in0
[3] >> 16;
215 out1
[0] = in0
[3] << 16 | in0
[2] >> 16;
216 out0
[3] = in0
[2] << 16 | in0
[1] >> 16;
217 out0
[2] = in0
[1] << 16 | in0
[0] >> 16;
218 out0
[1] = in0
[0] << 16;
221 case 7: out1
[3] = in1
[2] << 24 | in1
[1] >> 8;
222 out1
[2] = in1
[1] << 24 | in1
[0] >> 8;
223 out1
[1] = in1
[0] << 24 | in0
[3] >> 8;
224 out1
[0] = in0
[3] << 24 | in0
[2] >> 8;
225 out0
[3] = in0
[2] << 24 | in0
[1] >> 8;
226 out0
[2] = in0
[1] << 24 | in0
[0] >> 8;
227 out0
[1] = in0
[0] << 24;
230 case 8: out1
[3] = in1
[1];
239 case 9: out1
[3] = in1
[1] << 8 | in1
[0] >> 24;
240 out1
[2] = in1
[0] << 8 | in0
[3] >> 24;
241 out1
[1] = in0
[3] << 8 | in0
[2] >> 24;
242 out1
[0] = in0
[2] << 8 | in0
[1] >> 24;
243 out0
[3] = in0
[1] << 8 | in0
[0] >> 24;
244 out0
[2] = in0
[0] << 8;
248 case 10: out1
[3] = in1
[1] << 16 | in1
[0] >> 16;
249 out1
[2] = in1
[0] << 16 | in0
[3] >> 16;
250 out1
[1] = in0
[3] << 16 | in0
[2] >> 16;
251 out1
[0] = in0
[2] << 16 | in0
[1] >> 16;
252 out0
[3] = in0
[1] << 16 | in0
[0] >> 16;
253 out0
[2] = in0
[0] << 16;
257 case 11: out1
[3] = in1
[1] << 24 | in1
[0] >> 8;
258 out1
[2] = in1
[0] << 24 | in0
[3] >> 8;
259 out1
[1] = in0
[3] << 24 | in0
[2] >> 8;
260 out1
[0] = in0
[2] << 24 | in0
[1] >> 8;
261 out0
[3] = in0
[1] << 24 | in0
[0] >> 8;
262 out0
[2] = in0
[0] << 24;
266 case 12: out1
[3] = in1
[0];
275 case 13: out1
[3] = in1
[0] << 8 | in0
[3] >> 24;
276 out1
[2] = in0
[3] << 8 | in0
[2] >> 24;
277 out1
[1] = in0
[2] << 8 | in0
[1] >> 24;
278 out1
[0] = in0
[1] << 8 | in0
[0] >> 24;
279 out0
[3] = in0
[0] << 8;
284 case 14: out1
[3] = in1
[0] << 16 | in0
[3] >> 16;
285 out1
[2] = in0
[3] << 16 | in0
[2] >> 16;
286 out1
[1] = in0
[2] << 16 | in0
[1] >> 16;
287 out1
[0] = in0
[1] << 16 | in0
[0] >> 16;
288 out0
[3] = in0
[0] << 16;
293 case 15: out1
[3] = in1
[0] << 24 | in0
[3] >> 8;
294 out1
[2] = in0
[3] << 24 | in0
[2] >> 8;
295 out1
[1] = in0
[2] << 24 | in0
[1] >> 8;
296 out1
[0] = in0
[1] << 24 | in0
[0] >> 8;
297 out0
[3] = in0
[0] << 24;
302 case 16: out1
[3] = in0
[3];
311 case 17: out1
[3] = in0
[3] << 8 | in0
[2] >> 24;
312 out1
[2] = in0
[2] << 8 | in0
[1] >> 24;
313 out1
[1] = in0
[1] << 8 | in0
[0] >> 24;
314 out1
[0] = in0
[0] << 8;
320 case 18: out1
[3] = in0
[3] << 16 | in0
[2] >> 16;
321 out1
[2] = in0
[2] << 16 | in0
[1] >> 16;
322 out1
[1] = in0
[1] << 16 | in0
[0] >> 16;
323 out1
[0] = in0
[0] << 16;
329 case 19: out1
[3] = in0
[3] << 24 | in0
[2] >> 8;
330 out1
[2] = in0
[2] << 24 | in0
[1] >> 8;
331 out1
[1] = in0
[1] << 24 | in0
[0] >> 8;
332 out1
[0] = in0
[0] << 24;
338 case 20: out1
[3] = in0
[2];
347 case 21: out1
[3] = in0
[2] << 8 | in0
[1] >> 24;
348 out1
[2] = in0
[1] << 8 | in0
[0] >> 24;
349 out1
[1] = in0
[0] << 8;
356 case 22: out1
[3] = in0
[2] << 16 | in0
[1] >> 16;
357 out1
[2] = in0
[1] << 16 | in0
[0] >> 16;
358 out1
[1] = in0
[0] << 16;
365 case 23: out1
[3] = in0
[2] << 24 | in0
[1] >> 8;
366 out1
[2] = in0
[1] << 24 | in0
[0] >> 8;
367 out1
[1] = in0
[0] << 24;
374 case 24: out1
[3] = in0
[1];
383 case 25: out1
[3] = in0
[1] << 8 | in0
[0] >> 24;
384 out1
[2] = in0
[0] << 8;
392 case 26: out1
[3] = in0
[1] << 16 | in0
[0] >> 16;
393 out1
[2] = in0
[0] << 16;
401 case 27: out1
[3] = in0
[1] << 24 | in0
[0] >> 8;
402 out1
[2] = in0
[0] << 24;
410 case 28: out1
[3] = in0
[0];
419 case 29: out1
[3] = in0
[0] << 8;
428 case 30: out1
[3] = in0
[0] << 16;
437 case 31: out1
[3] = in0
[0] << 24;
449 static void lshift_block_N (const uint32_t in0
[4], const uint32_t in1
[4], uint32_t out0
[4], uint32_t out1
[4], const uint num
)
453 case 0: out0
[0] = in0
[0];
462 case 1: out0
[0] = in0
[0] >> 8 | in0
[1] << 24;
463 out0
[1] = in0
[1] >> 8 | in0
[2] << 24;
464 out0
[2] = in0
[2] >> 8 | in0
[3] << 24;
465 out0
[3] = in0
[3] >> 8 | in1
[0] << 24;
466 out1
[0] = in1
[0] >> 8 | in1
[1] << 24;
467 out1
[1] = in1
[1] >> 8 | in1
[2] << 24;
468 out1
[2] = in1
[2] >> 8 | in1
[3] << 24;
469 out1
[3] = in1
[3] >> 8;
471 case 2: out0
[0] = in0
[0] >> 16 | in0
[1] << 16;
472 out0
[1] = in0
[1] >> 16 | in0
[2] << 16;
473 out0
[2] = in0
[2] >> 16 | in0
[3] << 16;
474 out0
[3] = in0
[3] >> 16 | in1
[0] << 16;
475 out1
[0] = in1
[0] >> 16 | in1
[1] << 16;
476 out1
[1] = in1
[1] >> 16 | in1
[2] << 16;
477 out1
[2] = in1
[2] >> 16 | in1
[3] << 16;
478 out1
[3] = in1
[3] >> 16;
480 case 3: out0
[0] = in0
[0] >> 24 | in0
[1] << 8;
481 out0
[1] = in0
[1] >> 24 | in0
[2] << 8;
482 out0
[2] = in0
[2] >> 24 | in0
[3] << 8;
483 out0
[3] = in0
[3] >> 24 | in1
[0] << 8;
484 out1
[0] = in1
[0] >> 24 | in1
[1] << 8;
485 out1
[1] = in1
[1] >> 24 | in1
[2] << 8;
486 out1
[2] = in1
[2] >> 24 | in1
[3] << 8;
487 out1
[3] = in1
[3] >> 24;
489 case 4: out0
[0] = in0
[1];
498 case 5: out0
[0] = in0
[1] >> 8 | in0
[2] << 24;
499 out0
[1] = in0
[2] >> 8 | in0
[3] << 24;
500 out0
[2] = in0
[3] >> 8 | in1
[0] << 24;
501 out0
[3] = in1
[0] >> 8 | in1
[1] << 24;
502 out1
[0] = in1
[1] >> 8 | in1
[2] << 24;
503 out1
[1] = in1
[2] >> 8 | in1
[3] << 24;
504 out1
[2] = in1
[3] >> 8;
507 case 6: out0
[0] = in0
[1] >> 16 | in0
[2] << 16;
508 out0
[1] = in0
[2] >> 16 | in0
[3] << 16;
509 out0
[2] = in0
[3] >> 16 | in1
[0] << 16;
510 out0
[3] = in1
[0] >> 16 | in1
[1] << 16;
511 out1
[0] = in1
[1] >> 16 | in1
[2] << 16;
512 out1
[1] = in1
[2] >> 16 | in1
[3] << 16;
513 out1
[2] = in1
[3] >> 16;
516 case 7: out0
[0] = in0
[1] >> 24 | in0
[2] << 8;
517 out0
[1] = in0
[2] >> 24 | in0
[3] << 8;
518 out0
[2] = in0
[3] >> 24 | in1
[0] << 8;
519 out0
[3] = in1
[0] >> 24 | in1
[1] << 8;
520 out1
[0] = in1
[1] >> 24 | in1
[2] << 8;
521 out1
[1] = in1
[2] >> 24 | in1
[3] << 8;
522 out1
[2] = in1
[3] >> 24;
525 case 8: out0
[0] = in0
[2];
534 case 9: out0
[0] = in0
[2] >> 8 | in0
[3] << 24;
535 out0
[1] = in0
[3] >> 8 | in1
[0] << 24;
536 out0
[2] = in1
[0] >> 8 | in1
[1] << 24;
537 out0
[3] = in1
[1] >> 8 | in1
[2] << 24;
538 out1
[0] = in1
[2] >> 8 | in1
[3] << 24;
539 out1
[1] = in1
[3] >> 8;
543 case 10: out0
[0] = in0
[2] >> 16 | in0
[3] << 16;
544 out0
[1] = in0
[3] >> 16 | in1
[0] << 16;
545 out0
[2] = in1
[0] >> 16 | in1
[1] << 16;
546 out0
[3] = in1
[1] >> 16 | in1
[2] << 16;
547 out1
[0] = in1
[2] >> 16 | in1
[3] << 16;
548 out1
[1] = in1
[3] >> 16;
552 case 11: out0
[0] = in0
[2] >> 24 | in0
[3] << 8;
553 out0
[1] = in0
[3] >> 24 | in1
[0] << 8;
554 out0
[2] = in1
[0] >> 24 | in1
[1] << 8;
555 out0
[3] = in1
[1] >> 24 | in1
[2] << 8;
556 out1
[0] = in1
[2] >> 24 | in1
[3] << 8;
557 out1
[1] = in1
[3] >> 24;
561 case 12: out0
[0] = in0
[3];
571 out0
[0] = in0
[3] >> 8 | in1
[0] << 24;
572 out0
[1] = in1
[0] >> 8 | in1
[1] << 24;
573 out0
[2] = in1
[1] >> 8 | in1
[2] << 24;
574 out0
[3] = in1
[2] >> 8 | in1
[3] << 24;
575 out1
[0] = in1
[3] >> 8;
580 case 14: out0
[0] = in0
[3] >> 16 | in1
[0] << 16;
581 out0
[1] = in1
[0] >> 16 | in1
[1] << 16;
582 out0
[2] = in1
[1] >> 16 | in1
[2] << 16;
583 out0
[3] = in1
[2] >> 16 | in1
[3] << 16;
584 out1
[0] = in1
[3] >> 16;
589 case 15: out0
[0] = in0
[3] >> 24 | in1
[0] << 8;
590 out0
[1] = in1
[0] >> 24 | in1
[1] << 8;
591 out0
[2] = in1
[1] >> 24 | in1
[2] << 8;
592 out0
[3] = in1
[2] >> 24 | in1
[3] << 8;
593 out1
[0] = in1
[3] >> 24;
598 case 16: out0
[0] = in1
[0];
607 case 17: out0
[0] = in1
[0] >> 8 | in1
[1] << 24;
608 out0
[1] = in1
[1] >> 8 | in1
[2] << 24;
609 out0
[2] = in1
[2] >> 8 | in1
[3] << 24;
610 out0
[3] = in1
[3] >> 8;
616 case 18: out0
[0] = in1
[0] >> 16 | in1
[1] << 16;
617 out0
[1] = in1
[1] >> 16 | in1
[2] << 16;
618 out0
[2] = in1
[2] >> 16 | in1
[3] << 16;
619 out0
[3] = in1
[3] >> 16;
625 case 19: out0
[0] = in1
[0] >> 24 | in1
[1] << 8;
626 out0
[1] = in1
[1] >> 24 | in1
[2] << 8;
627 out0
[2] = in1
[2] >> 24 | in1
[3] << 8;
628 out0
[3] = in1
[3] >> 24;
634 case 20: out0
[0] = in1
[1];
643 case 21: out0
[0] = in1
[1] >> 8 | in1
[2] << 24;
644 out0
[1] = in1
[2] >> 8 | in1
[3] << 24;
645 out0
[2] = in1
[3] >> 8;
652 case 22: out0
[0] = in1
[1] >> 16 | in1
[2] << 16;
653 out0
[1] = in1
[2] >> 16 | in1
[3] << 16;
654 out0
[2] = in1
[3] >> 16;
661 case 23: out0
[0] = in1
[1] >> 24 | in1
[2] << 8;
662 out0
[1] = in1
[2] >> 24 | in1
[3] << 8;
663 out0
[2] = in1
[3] >> 24;
670 case 24: out0
[0] = in1
[2];
679 case 25: out0
[0] = in1
[2] >> 8 | in1
[3] << 24;
680 out0
[1] = in1
[3] >> 8;
688 case 26: out0
[0] = in1
[2] >> 16 | in1
[3] << 16;
689 out0
[1] = in1
[3] >> 16;
697 case 27: out0
[0] = in1
[2] >> 24 | in1
[3] << 8;
698 out0
[1] = in1
[3] >> 24;
706 case 28: out0
[0] = in1
[3];
715 case 29: out0
[0] = in1
[3] >> 8;
724 case 30: out0
[0] = in1
[3] >> 16;
733 case 31: out0
[0] = in1
[3] >> 24;
745 static void append_block1 (const uint offset
, uint32_t dst0
[4], uint32_t dst1
[4], const uint32_t src_r0
)
751 case 0: tmp
[0] = src_r0
;
754 case 1: tmp
[0] = src_r0
<< 8;
755 tmp
[1] = src_r0
>> 24;
757 case 2: tmp
[0] = src_r0
<< 16;
758 tmp
[1] = src_r0
>> 16;
760 case 3: tmp
[0] = src_r0
<< 24;
761 tmp
[1] = src_r0
>> 8;
767 case 0: dst0
[0] |= tmp
[0];
770 case 1: dst0
[1] |= tmp
[0];
773 case 2: dst0
[2] |= tmp
[0];
776 case 3: dst0
[3] |= tmp
[0];
779 case 4: dst1
[0] |= tmp
[0];
782 case 5: dst1
[1] |= tmp
[0];
785 case 6: dst1
[2] |= tmp
[0];
788 case 7: dst1
[3] |= tmp
[0];
793 static void append_block8 (const uint offset
, uint32_t dst0
[4], uint32_t dst1
[4], const uint32_t src_l0
[4], const uint32_t src_l1
[4], const uint32_t src_r0
[4], const uint32_t src_r1
[4])
809 dst0
[0] = src_l0
[0] | src_r0
[0] << 8;
810 dst0
[1] = src_r0
[0] >> 24 | src_r0
[1] << 8;
811 dst0
[2] = src_r0
[1] >> 24 | src_r0
[2] << 8;
812 dst0
[3] = src_r0
[2] >> 24 | src_r0
[3] << 8;
813 dst1
[0] = src_r0
[3] >> 24 | src_r1
[0] << 8;
814 dst1
[1] = src_r1
[0] >> 24 | src_r1
[1] << 8;
815 dst1
[2] = src_r1
[1] >> 24 | src_r1
[2] << 8;
816 dst1
[3] = src_r1
[2] >> 24 | src_r1
[3] << 8;
820 dst0
[0] = src_l0
[0] | src_r0
[0] << 16;
821 dst0
[1] = src_r0
[0] >> 16 | src_r0
[1] << 16;
822 dst0
[2] = src_r0
[1] >> 16 | src_r0
[2] << 16;
823 dst0
[3] = src_r0
[2] >> 16 | src_r0
[3] << 16;
824 dst1
[0] = src_r0
[3] >> 16 | src_r1
[0] << 16;
825 dst1
[1] = src_r1
[0] >> 16 | src_r1
[1] << 16;
826 dst1
[2] = src_r1
[1] >> 16 | src_r1
[2] << 16;
827 dst1
[3] = src_r1
[2] >> 16 | src_r1
[3] << 16;
831 dst0
[0] = src_l0
[0] | src_r0
[0] << 24;
832 dst0
[1] = src_r0
[0] >> 8 | src_r0
[1] << 24;
833 dst0
[2] = src_r0
[1] >> 8 | src_r0
[2] << 24;
834 dst0
[3] = src_r0
[2] >> 8 | src_r0
[3] << 24;
835 dst1
[0] = src_r0
[3] >> 8 | src_r1
[0] << 24;
836 dst1
[1] = src_r1
[0] >> 8 | src_r1
[1] << 24;
837 dst1
[2] = src_r1
[1] >> 8 | src_r1
[2] << 24;
838 dst1
[3] = src_r1
[2] >> 8 | src_r1
[3] << 24;
852 dst0
[1] = src_l0
[1] | src_r0
[0] << 8;
853 dst0
[2] = src_r0
[0] >> 24 | src_r0
[1] << 8;
854 dst0
[3] = src_r0
[1] >> 24 | src_r0
[2] << 8;
855 dst1
[0] = src_r0
[2] >> 24 | src_r0
[3] << 8;
856 dst1
[1] = src_r0
[3] >> 24 | src_r1
[0] << 8;
857 dst1
[2] = src_r1
[0] >> 24 | src_r1
[1] << 8;
858 dst1
[3] = src_r1
[1] >> 24 | src_r1
[2] << 8;
862 dst0
[1] = src_l0
[1] | src_r0
[0] << 16;
863 dst0
[2] = src_r0
[0] >> 16 | src_r0
[1] << 16;
864 dst0
[3] = src_r0
[1] >> 16 | src_r0
[2] << 16;
865 dst1
[0] = src_r0
[2] >> 16 | src_r0
[3] << 16;
866 dst1
[1] = src_r0
[3] >> 16 | src_r1
[0] << 16;
867 dst1
[2] = src_r1
[0] >> 16 | src_r1
[1] << 16;
868 dst1
[3] = src_r1
[1] >> 16 | src_r1
[2] << 16;
872 dst0
[1] = src_l0
[1] | src_r0
[0] << 24;
873 dst0
[2] = src_r0
[0] >> 8 | src_r0
[1] << 24;
874 dst0
[3] = src_r0
[1] >> 8 | src_r0
[2] << 24;
875 dst1
[0] = src_r0
[2] >> 8 | src_r0
[3] << 24;
876 dst1
[1] = src_r0
[3] >> 8 | src_r1
[0] << 24;
877 dst1
[2] = src_r1
[0] >> 8 | src_r1
[1] << 24;
878 dst1
[3] = src_r1
[1] >> 8 | src_r1
[2] << 24;
891 dst0
[2] = src_l0
[2] | src_r0
[0] << 8;
892 dst0
[3] = src_r0
[0] >> 24 | src_r0
[1] << 8;
893 dst1
[0] = src_r0
[1] >> 24 | src_r0
[2] << 8;
894 dst1
[1] = src_r0
[2] >> 24 | src_r0
[3] << 8;
895 dst1
[2] = src_r0
[3] >> 24 | src_r1
[0] << 8;
896 dst1
[3] = src_r1
[0] >> 24 | src_r1
[1] << 8;
900 dst0
[2] = src_l0
[2] | src_r0
[0] << 16;
901 dst0
[3] = src_r0
[0] >> 16 | src_r0
[1] << 16;
902 dst1
[0] = src_r0
[1] >> 16 | src_r0
[2] << 16;
903 dst1
[1] = src_r0
[2] >> 16 | src_r0
[3] << 16;
904 dst1
[2] = src_r0
[3] >> 16 | src_r1
[0] << 16;
905 dst1
[3] = src_r1
[0] >> 16 | src_r1
[1] << 16;
909 dst0
[2] = src_l0
[2] | src_r0
[0] << 24;
910 dst0
[3] = src_r0
[0] >> 8 | src_r0
[1] << 24;
911 dst1
[0] = src_r0
[1] >> 8 | src_r0
[2] << 24;
912 dst1
[1] = src_r0
[2] >> 8 | src_r0
[3] << 24;
913 dst1
[2] = src_r0
[3] >> 8 | src_r1
[0] << 24;
914 dst1
[3] = src_r1
[0] >> 8 | src_r1
[1] << 24;
926 dst0
[3] = src_l0
[3] | src_r0
[0] << 8;
927 dst1
[0] = src_r0
[0] >> 24 | src_r0
[1] << 8;
928 dst1
[1] = src_r0
[1] >> 24 | src_r0
[2] << 8;
929 dst1
[2] = src_r0
[2] >> 24 | src_r0
[3] << 8;
930 dst1
[3] = src_r0
[3] >> 24 | src_r1
[0] << 8;
934 dst0
[3] = src_l0
[3] | src_r0
[0] << 16;
935 dst1
[0] = src_r0
[0] >> 16 | src_r0
[1] << 16;
936 dst1
[1] = src_r0
[1] >> 16 | src_r0
[2] << 16;
937 dst1
[2] = src_r0
[2] >> 16 | src_r0
[3] << 16;
938 dst1
[3] = src_r0
[3] >> 16 | src_r1
[0] << 16;
942 dst0
[3] = src_l0
[3] | src_r0
[0] << 24;
943 dst1
[0] = src_r0
[0] >> 8 | src_r0
[1] << 24;
944 dst1
[1] = src_r0
[1] >> 8 | src_r0
[2] << 24;
945 dst1
[2] = src_r0
[2] >> 8 | src_r0
[3] << 24;
946 dst1
[3] = src_r0
[3] >> 8 | src_r1
[0] << 24;
957 dst1
[0] = src_l1
[0] | src_r0
[0] << 8;
958 dst1
[1] = src_r0
[0] >> 24 | src_r0
[1] << 8;
959 dst1
[2] = src_r0
[1] >> 24 | src_r0
[2] << 8;
960 dst1
[3] = src_r0
[2] >> 24 | src_r0
[3] << 8;
964 dst1
[0] = src_l1
[0] | src_r0
[0] << 16;
965 dst1
[1] = src_r0
[0] >> 16 | src_r0
[1] << 16;
966 dst1
[2] = src_r0
[1] >> 16 | src_r0
[2] << 16;
967 dst1
[3] = src_r0
[2] >> 16 | src_r0
[3] << 16;
971 dst1
[0] = src_l1
[0] | src_r0
[0] << 24;
972 dst1
[1] = src_r0
[0] >> 8 | src_r0
[1] << 24;
973 dst1
[2] = src_r0
[1] >> 8 | src_r0
[2] << 24;
974 dst1
[3] = src_r0
[2] >> 8 | src_r0
[3] << 24;
984 dst1
[1] = src_l1
[1] | src_r0
[0] << 8;
985 dst1
[2] = src_r0
[0] >> 24 | src_r0
[1] << 8;
986 dst1
[3] = src_r0
[1] >> 24 | src_r0
[2] << 8;
990 dst1
[1] = src_l1
[1] | src_r0
[0] << 16;
991 dst1
[2] = src_r0
[0] >> 16 | src_r0
[1] << 16;
992 dst1
[3] = src_r0
[1] >> 16 | src_r0
[2] << 16;
996 dst1
[1] = src_l1
[1] | src_r0
[0] << 24;
997 dst1
[2] = src_r0
[0] >> 8 | src_r0
[1] << 24;
998 dst1
[3] = src_r0
[1] >> 8 | src_r0
[2] << 24;
1002 dst1
[2] = src_r0
[0];
1003 dst1
[3] = src_r0
[1];
1007 dst1
[2] = src_l1
[2] | src_r0
[0] << 8;
1008 dst1
[3] = src_r0
[0] >> 24 | src_r0
[1] << 8;
1012 dst1
[2] = src_l1
[2] | src_r0
[0] << 16;
1013 dst1
[3] = src_r0
[0] >> 16 | src_r0
[1] << 16;
1017 dst1
[2] = src_l1
[2] | src_r0
[0] << 24;
1018 dst1
[3] = src_r0
[0] >> 8 | src_r0
[1] << 24;
1022 dst1
[3] = src_r0
[0];
1026 dst1
[3] = src_l1
[3] | src_r0
[0] << 8;
1030 dst1
[3] = src_l1
[3] | src_r0
[0] << 16;
1034 dst1
[3] = src_l1
[3] | src_r0
[0] << 24;
1039 static void reverse_block (uint32_t in0
[4], uint32_t in1
[4], uint32_t out0
[4], uint32_t out1
[4], const uint len
)
1041 rshift_block_N (in0
, in1
, out0
, out1
, 32 - len
);
1055 out0
[0] = swap_workaround (tib40
[0]);
1056 out0
[1] = swap_workaround (tib40
[1]);
1057 out0
[2] = swap_workaround (tib40
[2]);
1058 out0
[3] = swap_workaround (tib40
[3]);
1059 out1
[0] = swap_workaround (tib41
[0]);
1060 out1
[1] = swap_workaround (tib41
[1]);
1061 out1
[2] = swap_workaround (tib41
[2]);
1062 out1
[3] = swap_workaround (tib41
[3]);
1065 static uint
rule_op_mangle_lrest (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1067 buf0
[0] |= (generate_cmask (buf0
[0]));
1068 buf0
[1] |= (generate_cmask (buf0
[1]));
1069 buf0
[2] |= (generate_cmask (buf0
[2]));
1070 buf0
[3] |= (generate_cmask (buf0
[3]));
1071 buf1
[0] |= (generate_cmask (buf1
[0]));
1072 buf1
[1] |= (generate_cmask (buf1
[1]));
1073 buf1
[2] |= (generate_cmask (buf1
[2]));
1074 buf1
[3] |= (generate_cmask (buf1
[3]));
1079 static uint
rule_op_mangle_urest (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1081 buf0
[0] &= ~(generate_cmask (buf0
[0]));
1082 buf0
[1] &= ~(generate_cmask (buf0
[1]));
1083 buf0
[2] &= ~(generate_cmask (buf0
[2]));
1084 buf0
[3] &= ~(generate_cmask (buf0
[3]));
1085 buf1
[0] &= ~(generate_cmask (buf1
[0]));
1086 buf1
[1] &= ~(generate_cmask (buf1
[1]));
1087 buf1
[2] &= ~(generate_cmask (buf1
[2]));
1088 buf1
[3] &= ~(generate_cmask (buf1
[3]));
1093 static uint
rule_op_mangle_lrest_ufirst (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1095 rule_op_mangle_lrest (p0
, p1
, buf0
, buf1
, in_len
);
1097 buf0
[0] &= ~(0x00000020 & generate_cmask (buf0
[0]));
1102 static uint
rule_op_mangle_urest_lfirst (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1104 rule_op_mangle_urest (p0
, p1
, buf0
, buf1
, in_len
);
1106 buf0
[0] |= (0x00000020 & generate_cmask (buf0
[0]));
1111 static uint
rule_op_mangle_trest (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1113 buf0
[0] ^= (generate_cmask (buf0
[0]));
1114 buf0
[1] ^= (generate_cmask (buf0
[1]));
1115 buf0
[2] ^= (generate_cmask (buf0
[2]));
1116 buf0
[3] ^= (generate_cmask (buf0
[3]));
1117 buf1
[0] ^= (generate_cmask (buf1
[0]));
1118 buf1
[1] ^= (generate_cmask (buf1
[1]));
1119 buf1
[2] ^= (generate_cmask (buf1
[2]));
1120 buf1
[3] ^= (generate_cmask (buf1
[3]));
1125 static uint
rule_op_mangle_toggle_at (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1127 if (p0
>= in_len
) return (in_len
);
1129 const uint tmp
= 0x20u
<< ((p0
& 3) * 8);
1133 case 0: buf0
[0] ^= (tmp
& generate_cmask (buf0
[0])); break;
1134 case 1: buf0
[1] ^= (tmp
& generate_cmask (buf0
[1])); break;
1135 case 2: buf0
[2] ^= (tmp
& generate_cmask (buf0
[2])); break;
1136 case 3: buf0
[3] ^= (tmp
& generate_cmask (buf0
[3])); break;
1137 case 4: buf1
[0] ^= (tmp
& generate_cmask (buf1
[0])); break;
1138 case 5: buf1
[1] ^= (tmp
& generate_cmask (buf1
[1])); break;
1139 case 6: buf1
[2] ^= (tmp
& generate_cmask (buf1
[2])); break;
1140 case 7: buf1
[3] ^= (tmp
& generate_cmask (buf1
[3])); break;
1146 static uint
rule_op_mangle_reverse (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1148 reverse_block (buf0
, buf1
, buf0
, buf1
, in_len
);
1153 static uint
rule_op_mangle_dupeword (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1155 if ((in_len
+ in_len
) >= 32) return (in_len
);
1157 uint out_len
= in_len
;
1171 append_block8 (out_len
, buf0
, buf1
, buf0
, buf1
, tib40
, tib41
);
1178 static uint
rule_op_mangle_dupeword_times (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1180 if (((in_len
* p0
) + in_len
) >= 32) return (in_len
);
1182 uint out_len
= in_len
;
1196 for (uint i
= 0; i
< p0
; i
++)
1198 append_block8 (out_len
, buf0
, buf1
, buf0
, buf1
, tib40
, tib41
);
1206 static uint
rule_op_mangle_reflect (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1208 if ((in_len
+ in_len
) >= 32) return (in_len
);
1210 uint out_len
= in_len
;
1215 reverse_block (buf0
, buf1
, tib40
, tib41
, out_len
);
1217 append_block8 (out_len
, buf0
, buf1
, buf0
, buf1
, tib40
, tib41
);
1224 static uint
rule_op_mangle_append (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1226 if ((in_len
+ 1) >= 32) return (in_len
);
1228 uint out_len
= in_len
;
1230 append_block1 (out_len
, buf0
, buf1
, p0
);
1237 static uint
rule_op_mangle_prepend (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1239 if ((in_len
+ 1) >= 32) return (in_len
);
1241 uint out_len
= in_len
;
1243 rshift_block (buf0
, buf1
, buf0
, buf1
);
1245 buf0
[0] = buf0
[0] | p0
;
1252 static uint
rule_op_mangle_rotate_left (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1254 if (in_len
== 0) return (in_len
);
1256 const uint in_len1
= in_len
- 1;
1258 const uint sh
= (in_len1
& 3) * 8;
1260 const uint32_t tmp
= (buf0
[0] & 0xff) << sh
;
1262 lshift_block (buf0
, buf1
, buf0
, buf1
);
1264 switch (in_len1
/ 4)
1266 case 0: buf0
[0] |= tmp
; break;
1267 case 1: buf0
[1] |= tmp
; break;
1268 case 2: buf0
[2] |= tmp
; break;
1269 case 3: buf0
[3] |= tmp
; break;
1270 case 4: buf1
[0] |= tmp
; break;
1271 case 5: buf1
[1] |= tmp
; break;
1272 case 6: buf1
[2] |= tmp
; break;
1273 case 7: buf1
[3] |= tmp
; break;
1279 static uint
rule_op_mangle_rotate_right (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1281 if (in_len
== 0) return (in_len
);
1283 const uint in_len1
= in_len
- 1;
1285 const uint sh
= (in_len1
& 3) * 8;
1289 switch (in_len1
/ 4)
1291 case 0: tmp
= (buf0
[0] >> sh
) & 0xff; break;
1292 case 1: tmp
= (buf0
[1] >> sh
) & 0xff; break;
1293 case 2: tmp
= (buf0
[2] >> sh
) & 0xff; break;
1294 case 3: tmp
= (buf0
[3] >> sh
) & 0xff; break;
1295 case 4: tmp
= (buf1
[0] >> sh
) & 0xff; break;
1296 case 5: tmp
= (buf1
[1] >> sh
) & 0xff; break;
1297 case 6: tmp
= (buf1
[2] >> sh
) & 0xff; break;
1298 case 7: tmp
= (buf1
[3] >> sh
) & 0xff; break;
1301 rshift_block (buf0
, buf1
, buf0
, buf1
);
1305 truncate_right (buf0
, buf1
, in_len
);
1310 static uint
rule_op_mangle_delete_first (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1312 if (in_len
== 0) return (in_len
);
1314 const uint in_len1
= in_len
- 1;
1316 lshift_block (buf0
, buf1
, buf0
, buf1
);
1321 static uint
rule_op_mangle_delete_last (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1323 if (in_len
== 0) return (in_len
);
1325 const uint in_len1
= in_len
- 1;
1327 const uint tmp
= (1 << ((in_len1
& 3) * 8)) - 1;
1329 switch (in_len1
/ 4)
1331 case 0: buf0
[0] &= tmp
; break;
1332 case 1: buf0
[1] &= tmp
; break;
1333 case 2: buf0
[2] &= tmp
; break;
1334 case 3: buf0
[3] &= tmp
; break;
1335 case 4: buf1
[0] &= tmp
; break;
1336 case 5: buf1
[1] &= tmp
; break;
1337 case 6: buf1
[2] &= tmp
; break;
1338 case 7: buf1
[3] &= tmp
; break;
1344 static uint
rule_op_mangle_delete_at (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1346 if (p0
>= in_len
) return (in_len
);
1348 uint out_len
= in_len
;
1353 lshift_block (buf0
, buf1
, tib40
, tib41
);
1355 const uint ml
= (1 << ((p0
& 3) * 8)) - 1;
1356 const uint mr
= ~ml
;
1360 case 0: buf0
[0] = (buf0
[0] & ml
)
1370 case 1: buf0
[1] = (buf0
[1] & ml
)
1379 case 2: buf0
[2] = (buf0
[2] & ml
)
1387 case 3: buf0
[3] = (buf0
[3] & ml
)
1394 case 4: buf1
[0] = (buf1
[0] & ml
)
1400 case 5: buf1
[1] = (buf1
[1] & ml
)
1405 case 6: buf1
[2] = (buf1
[2] & ml
)
1409 case 7: buf1
[3] = (buf1
[3] & ml
)
1419 static uint
rule_op_mangle_extract (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1421 if (p0
>= in_len
) return (in_len
);
1423 if ((p0
+ p1
) > in_len
) return (in_len
);
1427 lshift_block_N (buf0
, buf1
, buf0
, buf1
, p0
);
1429 truncate_right (buf0
, buf1
, out_len
);
1434 static uint
rule_op_mangle_omit (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1436 if (p0
>= in_len
) return (in_len
);
1438 if ((p0
+ p1
) > in_len
) return (in_len
);
1440 uint out_len
= in_len
;
1454 lshift_block_N (buf0
, buf1
, tib40
, tib41
, p1
);
1456 const uint ml
= (1 << ((p0
& 3) * 8)) - 1;
1457 const uint mr
= ~ml
;
1461 case 0: buf0
[0] = (buf0
[0] & ml
)
1471 case 1: buf0
[1] = (buf0
[1] & ml
)
1480 case 2: buf0
[2] = (buf0
[2] & ml
)
1488 case 3: buf0
[3] = (buf0
[3] & ml
)
1495 case 4: buf1
[0] = (buf1
[0] & ml
)
1501 case 5: buf1
[1] = (buf1
[1] & ml
)
1506 case 6: buf1
[2] = (buf1
[2] & ml
)
1510 case 7: buf1
[3] = (buf1
[3] & ml
)
1520 static uint
rule_op_mangle_insert (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1522 if (p0
> in_len
) return (in_len
);
1524 if ((in_len
+ 1) >= 32) return (in_len
);
1526 uint out_len
= in_len
;
1531 rshift_block (buf0
, buf1
, tib40
, tib41
);
1533 const uint p1n
= p1
<< ((p0
& 3) * 8);
1535 const uint ml
= (1 << ((p0
& 3) * 8)) - 1;
1537 const uint mr
= 0xffffff00 << ((p0
& 3) * 8);
1541 case 0: buf0
[0] = (buf0
[0] & ml
) | p1n
| (tib40
[0] & mr
);
1550 case 1: buf0
[1] = (buf0
[1] & ml
) | p1n
| (tib40
[1] & mr
);
1558 case 2: buf0
[2] = (buf0
[2] & ml
) | p1n
| (tib40
[2] & mr
);
1565 case 3: buf0
[3] = (buf0
[3] & ml
) | p1n
| (tib40
[3] & mr
);
1571 case 4: buf1
[0] = (buf1
[0] & ml
) | p1n
| (tib41
[0] & mr
);
1576 case 5: buf1
[1] = (buf1
[1] & ml
) | p1n
| (tib41
[1] & mr
);
1580 case 6: buf1
[2] = (buf1
[2] & ml
) | p1n
| (tib41
[2] & mr
);
1583 case 7: buf1
[3] = (buf1
[3] & ml
) | p1n
| (tib41
[3] & mr
);
1592 static uint
rule_op_mangle_overstrike (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1594 if (p0
>= in_len
) return (in_len
);
1596 const uint p1n
= p1
<< ((p0
& 3) * 8);
1598 const uint m
= ~(0xffu
<< ((p0
& 3) * 8));
1602 case 0: buf0
[0] = (buf0
[0] & m
) | p1n
; break;
1603 case 1: buf0
[1] = (buf0
[1] & m
) | p1n
; break;
1604 case 2: buf0
[2] = (buf0
[2] & m
) | p1n
; break;
1605 case 3: buf0
[3] = (buf0
[3] & m
) | p1n
; break;
1606 case 4: buf1
[0] = (buf1
[0] & m
) | p1n
; break;
1607 case 5: buf1
[1] = (buf1
[1] & m
) | p1n
; break;
1608 case 6: buf1
[2] = (buf1
[2] & m
) | p1n
; break;
1609 case 7: buf1
[3] = (buf1
[3] & m
) | p1n
; break;
1615 static uint
rule_op_mangle_truncate_at (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1617 if (p0
>= in_len
) return (in_len
);
1619 truncate_right (buf0
, buf1
, p0
);
1624 static uint
rule_op_mangle_replace (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1626 for (uint i
= 0; i
< in_len
; i
++)
1630 case 0: if (((buf0
[0] >> 0) & 0xFF) == p0
) buf0
[0] = (buf0
[0] & 0xFFFFFF00) | p1
<< 0; break;
1631 case 1: if (((buf0
[0] >> 8) & 0xFF) == p0
) buf0
[0] = (buf0
[0] & 0xFFFF00FF) | p1
<< 8; break;
1632 case 2: if (((buf0
[0] >> 16) & 0xFF) == p0
) buf0
[0] = (buf0
[0] & 0xFF00FFFF) | p1
<< 16; break;
1633 case 3: if (((buf0
[0] >> 24) & 0xFF) == p0
) buf0
[0] = (buf0
[0] & 0x00FFFFFF) | p1
<< 24; break;
1634 case 4: if (((buf0
[1] >> 0) & 0xFF) == p0
) buf0
[1] = (buf0
[1] & 0xFFFFFF00) | p1
<< 0; break;
1635 case 5: if (((buf0
[1] >> 8) & 0xFF) == p0
) buf0
[1] = (buf0
[1] & 0xFFFF00FF) | p1
<< 8; break;
1636 case 6: if (((buf0
[1] >> 16) & 0xFF) == p0
) buf0
[1] = (buf0
[1] & 0xFF00FFFF) | p1
<< 16; break;
1637 case 7: if (((buf0
[1] >> 24) & 0xFF) == p0
) buf0
[1] = (buf0
[1] & 0x00FFFFFF) | p1
<< 24; break;
1638 case 8: if (((buf0
[2] >> 0) & 0xFF) == p0
) buf0
[2] = (buf0
[2] & 0xFFFFFF00) | p1
<< 0; break;
1639 case 9: if (((buf0
[2] >> 8) & 0xFF) == p0
) buf0
[2] = (buf0
[2] & 0xFFFF00FF) | p1
<< 8; break;
1640 case 10: if (((buf0
[2] >> 16) & 0xFF) == p0
) buf0
[2] = (buf0
[2] & 0xFF00FFFF) | p1
<< 16; break;
1641 case 11: if (((buf0
[2] >> 24) & 0xFF) == p0
) buf0
[2] = (buf0
[2] & 0x00FFFFFF) | p1
<< 24; break;
1642 case 12: if (((buf0
[3] >> 0) & 0xFF) == p0
) buf0
[3] = (buf0
[3] & 0xFFFFFF00) | p1
<< 0; break;
1643 case 13: if (((buf0
[3] >> 8) & 0xFF) == p0
) buf0
[3] = (buf0
[3] & 0xFFFF00FF) | p1
<< 8; break;
1644 case 14: if (((buf0
[3] >> 16) & 0xFF) == p0
) buf0
[3] = (buf0
[3] & 0xFF00FFFF) | p1
<< 16; break;
1645 case 15: if (((buf0
[3] >> 24) & 0xFF) == p0
) buf0
[3] = (buf0
[3] & 0x00FFFFFF) | p1
<< 24; break;
1646 case 16: if (((buf1
[0] >> 0) & 0xFF) == p0
) buf1
[0] = (buf1
[0] & 0xFFFFFF00) | p1
<< 0; break;
1647 case 17: if (((buf1
[0] >> 8) & 0xFF) == p0
) buf1
[0] = (buf1
[0] & 0xFFFF00FF) | p1
<< 8; break;
1648 case 18: if (((buf1
[0] >> 16) & 0xFF) == p0
) buf1
[0] = (buf1
[0] & 0xFF00FFFF) | p1
<< 16; break;
1649 case 19: if (((buf1
[0] >> 24) & 0xFF) == p0
) buf1
[0] = (buf1
[0] & 0x00FFFFFF) | p1
<< 24; break;
1650 case 20: if (((buf1
[1] >> 0) & 0xFF) == p0
) buf1
[1] = (buf1
[1] & 0xFFFFFF00) | p1
<< 0; break;
1651 case 21: if (((buf1
[1] >> 8) & 0xFF) == p0
) buf1
[1] = (buf1
[1] & 0xFFFF00FF) | p1
<< 8; break;
1652 case 22: if (((buf1
[1] >> 16) & 0xFF) == p0
) buf1
[1] = (buf1
[1] & 0xFF00FFFF) | p1
<< 16; break;
1653 case 23: if (((buf1
[1] >> 24) & 0xFF) == p0
) buf1
[1] = (buf1
[1] & 0x00FFFFFF) | p1
<< 24; break;
1654 case 24: if (((buf1
[2] >> 0) & 0xFF) == p0
) buf1
[2] = (buf1
[2] & 0xFFFFFF00) | p1
<< 0; break;
1655 case 25: if (((buf1
[2] >> 8) & 0xFF) == p0
) buf1
[2] = (buf1
[2] & 0xFFFF00FF) | p1
<< 8; break;
1656 case 26: if (((buf1
[2] >> 16) & 0xFF) == p0
) buf1
[2] = (buf1
[2] & 0xFF00FFFF) | p1
<< 16; break;
1657 case 27: if (((buf1
[2] >> 24) & 0xFF) == p0
) buf1
[2] = (buf1
[2] & 0x00FFFFFF) | p1
<< 24; break;
1658 case 28: if (((buf1
[3] >> 0) & 0xFF) == p0
) buf1
[3] = (buf1
[3] & 0xFFFFFF00) | p1
<< 0; break;
1659 case 29: if (((buf1
[3] >> 8) & 0xFF) == p0
) buf1
[3] = (buf1
[3] & 0xFFFF00FF) | p1
<< 8; break;
1660 case 30: if (((buf1
[3] >> 16) & 0xFF) == p0
) buf1
[3] = (buf1
[3] & 0xFF00FFFF) | p1
<< 16; break;
1661 case 31: if (((buf1
[3] >> 24) & 0xFF) == p0
) buf1
[3] = (buf1
[3] & 0x00FFFFFF) | p1
<< 24; break;
1668 static uint
rule_op_mangle_purgechar (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1674 static uint
rule_op_mangle_togglecase_rec (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1680 static uint
rule_op_mangle_dupechar_first (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1682 if ( in_len
== 0) return (in_len
);
1683 if ((in_len
+ p0
) >= 32) return (in_len
);
1685 uint out_len
= in_len
;
1687 const uint32_t tmp
= buf0
[0] & 0xFF;
1689 rshift_block_N (buf0
, buf1
, buf0
, buf1
, p0
);
1693 case 1: buf0
[0] |= tmp
<< 0;
1695 case 2: buf0
[0] |= tmp
<< 0 | tmp
<< 8;
1697 case 3: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1699 case 4: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1701 case 5: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1702 buf0
[1] |= tmp
<< 0;
1704 case 6: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1705 buf0
[1] |= tmp
<< 0 | tmp
<< 8;
1707 case 7: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1708 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1710 case 8: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1711 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1713 case 9: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1714 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1715 buf0
[2] |= tmp
<< 0;
1717 case 10: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1718 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1719 buf0
[2] |= tmp
<< 0 | tmp
<< 8;
1721 case 11: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1722 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1723 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1725 case 12: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1726 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1727 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1729 case 13: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1730 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1731 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1732 buf0
[3] |= tmp
<< 0;
1734 case 14: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1735 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1736 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1737 buf0
[3] |= tmp
<< 0 | tmp
<< 8;
1739 case 15: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1740 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1741 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1742 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1744 case 16: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1745 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1746 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1747 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1749 case 17: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1750 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1751 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1752 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1753 buf1
[0] |= tmp
<< 0;
1755 case 18: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1756 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1757 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1758 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1759 buf1
[0] |= tmp
<< 0 | tmp
<< 8;
1761 case 19: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1762 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1763 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1764 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1765 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1767 case 20: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1768 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1769 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1770 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1771 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1773 case 21: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1774 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1775 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1776 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1777 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1778 buf1
[1] |= tmp
<< 0;
1780 case 22: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1781 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1782 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1783 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1784 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1785 buf1
[1] |= tmp
<< 0 | tmp
<< 8;
1787 case 23: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1788 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1789 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1790 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1791 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1792 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1794 case 24: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1795 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1796 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1797 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1798 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1799 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1801 case 25: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1802 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1803 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1804 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1805 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1806 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1807 buf1
[2] |= tmp
<< 0;
1809 case 26: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1810 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1811 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1812 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1813 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1814 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1815 buf1
[2] |= tmp
<< 0 | tmp
<< 8;
1817 case 27: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1818 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1819 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1820 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1821 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1822 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1823 buf1
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1825 case 28: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1826 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1827 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1828 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1829 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1830 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1831 buf1
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1833 case 29: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1834 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1835 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1836 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1837 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1838 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1839 buf1
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1840 buf1
[3] |= tmp
<< 0;
1842 case 30: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1843 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1844 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1845 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1846 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1847 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1848 buf1
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1849 buf1
[3] |= tmp
<< 0 | tmp
<< 8;
1851 case 31: buf0
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1852 buf0
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1853 buf0
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1854 buf0
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1855 buf1
[0] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1856 buf1
[1] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1857 buf1
[2] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16 | tmp
<< 24;
1858 buf1
[3] |= tmp
<< 0 | tmp
<< 8 | tmp
<< 16;
1867 static uint
rule_op_mangle_dupechar_last (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1869 if ( in_len
== 0) return (in_len
);
1870 if ((in_len
+ p0
) >= 32) return (in_len
);
1872 const uint in_len1
= in_len
- 1;
1874 const uint sh
= (in_len1
& 3) * 8;
1878 switch (in_len1
/ 4)
1880 case 0: tmp
= (buf0
[0] >> sh
) & 0xff; break;
1881 case 1: tmp
= (buf0
[1] >> sh
) & 0xff; break;
1882 case 2: tmp
= (buf0
[2] >> sh
) & 0xff; break;
1883 case 3: tmp
= (buf0
[3] >> sh
) & 0xff; break;
1884 case 4: tmp
= (buf1
[0] >> sh
) & 0xff; break;
1885 case 5: tmp
= (buf1
[1] >> sh
) & 0xff; break;
1886 case 6: tmp
= (buf1
[2] >> sh
) & 0xff; break;
1887 case 7: tmp
= (buf1
[3] >> sh
) & 0xff; break;
1890 uint out_len
= in_len
;
1892 for (uint i
= 0; i
< p0
; i
++)
1894 append_block1 (out_len
, buf0
, buf1
, tmp
);
1902 static uint
rule_op_mangle_dupechar_all (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1904 if ( in_len
== 0) return (in_len
);
1905 if ((in_len
+ in_len
) >= 32) return (in_len
);
1907 uint out_len
= in_len
;
1912 tib40
[0] = ((buf0
[0] & 0x000000FF) << 0) | ((buf0
[0] & 0x0000FF00) << 8);
1913 tib40
[1] = ((buf0
[0] & 0x00FF0000) >> 16) | ((buf0
[0] & 0xFF000000) >> 8);
1914 tib40
[2] = ((buf0
[1] & 0x000000FF) << 0) | ((buf0
[1] & 0x0000FF00) << 8);
1915 tib40
[3] = ((buf0
[1] & 0x00FF0000) >> 16) | ((buf0
[1] & 0xFF000000) >> 8);
1916 tib41
[0] = ((buf0
[2] & 0x000000FF) << 0) | ((buf0
[2] & 0x0000FF00) << 8);
1917 tib41
[1] = ((buf0
[2] & 0x00FF0000) >> 16) | ((buf0
[2] & 0xFF000000) >> 8);
1918 tib41
[2] = ((buf0
[3] & 0x000000FF) << 0) | ((buf0
[3] & 0x0000FF00) << 8);
1919 tib41
[3] = ((buf0
[3] & 0x00FF0000) >> 16) | ((buf0
[3] & 0xFF000000) >> 8);
1921 buf0
[0] = tib40
[0] | (tib40
[0] << 8);
1922 buf0
[1] = tib40
[1] | (tib40
[1] << 8);
1923 buf0
[2] = tib40
[2] | (tib40
[2] << 8);
1924 buf0
[3] = tib40
[3] | (tib40
[3] << 8);
1925 buf1
[0] = tib41
[0] | (tib41
[0] << 8);
1926 buf1
[1] = tib41
[1] | (tib41
[1] << 8);
1927 buf1
[2] = tib41
[2] | (tib41
[2] << 8);
1928 buf1
[3] = tib41
[3] | (tib41
[3] << 8);
1930 out_len
= out_len
+ out_len
;
1935 static uint
rule_op_mangle_switch_first (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1937 if (in_len
< 2) return (in_len
);
1939 buf0
[0] = (buf0
[0] & 0xFFFF0000) | ((buf0
[0] << 8) & 0x0000FF00) | ((buf0
[0] >> 8) & 0x000000FF);
1944 static uint
rule_op_mangle_switch_last (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
1946 if (in_len
< 2) return (in_len
);
1950 case 2: buf0
[0] = ((buf0
[0] << 8) & 0x0000FF00) | ((buf0
[0] >> 8) & 0x000000FF);
1952 case 3: buf0
[0] = (buf0
[0] & 0x000000FF) | ((buf0
[0] << 8) & 0x00FF0000) | ((buf0
[0] >> 8) & 0x0000FF00);
1954 case 4: buf0
[0] = (buf0
[0] & 0x0000FFFF) | ((buf0
[0] << 8) & 0xFF000000) | ((buf0
[0] >> 8) & 0x00FF0000);
1956 case 5: buf0
[1] = (buf0
[0] & 0xFF000000) | buf0
[1];
1957 buf0
[0] = (buf0
[0] & 0x00FFFFFF) | (buf0
[1] << 24);
1958 buf0
[1] = (buf0
[1] >> 24);
1960 case 6: buf0
[1] = ((buf0
[1] << 8) & 0x0000FF00) | ((buf0
[1] >> 8) & 0x000000FF);
1962 case 7: buf0
[1] = (buf0
[1] & 0x000000FF) | ((buf0
[1] << 8) & 0x00FF0000) | ((buf0
[1] >> 8) & 0x0000FF00);
1964 case 8: buf0
[1] = (buf0
[1] & 0x0000FFFF) | ((buf0
[1] << 8) & 0xFF000000) | ((buf0
[1] >> 8) & 0x00FF0000);
1966 case 9: buf0
[2] = (buf0
[1] & 0xFF000000) | buf0
[2];
1967 buf0
[1] = (buf0
[1] & 0x00FFFFFF) | (buf0
[2] << 24);
1968 buf0
[2] = (buf0
[2] >> 24);
1970 case 10: buf0
[2] = ((buf0
[2] << 8) & 0x0000FF00) | ((buf0
[2] >> 8) & 0x000000FF);
1972 case 11: buf0
[2] = (buf0
[2] & 0x000000FF) | ((buf0
[2] << 8) & 0x00FF0000) | ((buf0
[2] >> 8) & 0x0000FF00);
1974 case 12: buf0
[2] = (buf0
[2] & 0x0000FFFF) | ((buf0
[2] << 8) & 0xFF000000) | ((buf0
[2] >> 8) & 0x00FF0000);
1976 case 13: buf0
[3] = (buf0
[2] & 0xFF000000) | buf0
[3];
1977 buf0
[2] = (buf0
[2] & 0x00FFFFFF) | (buf0
[3] << 24);
1978 buf0
[3] = (buf0
[3] >> 24);
1980 case 14: buf0
[3] = ((buf0
[3] << 8) & 0x0000FF00) | ((buf0
[3] >> 8) & 0x000000FF);
1982 case 15: buf0
[3] = (buf0
[3] & 0x000000FF) | ((buf0
[3] << 8) & 0x00FF0000) | ((buf0
[3] >> 8) & 0x0000FF00);
1984 case 16: buf0
[3] = (buf0
[3] & 0x0000FFFF) | ((buf0
[3] << 8) & 0xFF000000) | ((buf0
[3] >> 8) & 0x00FF0000);
1986 case 17: buf1
[0] = (buf0
[3] & 0xFF000000) | buf1
[0];
1987 buf0
[3] = (buf0
[3] & 0x00FFFFFF) | (buf1
[0] << 24);
1988 buf1
[0] = (buf1
[0] >> 24);
1990 case 18: buf1
[0] = ((buf1
[0] << 8) & 0x0000FF00) | ((buf1
[0] >> 8) & 0x000000FF);
1992 case 19: buf1
[0] = (buf1
[0] & 0x000000FF) | ((buf1
[0] << 8) & 0x00FF0000) | ((buf1
[0] >> 8) & 0x0000FF00);
1994 case 20: buf1
[0] = (buf1
[0] & 0x0000FFFF) | ((buf1
[0] << 8) & 0xFF000000) | ((buf1
[0] >> 8) & 0x00FF0000);
1996 case 21: buf1
[1] = (buf1
[0] & 0xFF000000) | buf1
[1];
1997 buf1
[0] = (buf1
[0] & 0x00FFFFFF) | (buf1
[1] << 24);
1998 buf1
[1] = (buf1
[1] >> 24);
2000 case 22: buf1
[1] = ((buf1
[1] << 8) & 0x0000FF00) | ((buf1
[1] >> 8) & 0x000000FF);
2002 case 23: buf1
[1] = (buf1
[1] & 0x000000FF) | ((buf1
[1] << 8) & 0x00FF0000) | ((buf1
[1] >> 8) & 0x0000FF00);
2004 case 24: buf1
[1] = (buf1
[1] & 0x0000FFFF) | ((buf1
[1] << 8) & 0xFF000000) | ((buf1
[1] >> 8) & 0x00FF0000);
2006 case 25: buf1
[2] = (buf1
[1] & 0xFF000000) | buf1
[2];
2007 buf1
[1] = (buf1
[1] & 0x00FFFFFF) | (buf1
[2] << 24);
2008 buf1
[2] = (buf1
[2] >> 24);
2010 case 26: buf1
[2] = ((buf1
[2] << 8) & 0x0000FF00) | ((buf1
[2] >> 8) & 0x000000FF);
2012 case 27: buf1
[2] = (buf1
[2] & 0x000000FF) | ((buf1
[2] << 8) & 0x00FF0000) | ((buf1
[2] >> 8) & 0x0000FF00);
2014 case 28: buf1
[2] = (buf1
[2] & 0x0000FFFF) | ((buf1
[2] << 8) & 0xFF000000) | ((buf1
[2] >> 8) & 0x00FF0000);
2016 case 29: buf1
[3] = (buf1
[2] & 0xFF000000) | buf1
[3];
2017 buf1
[2] = (buf1
[2] & 0x00FFFFFF) | (buf1
[3] << 24);
2018 buf1
[3] = (buf1
[3] >> 24);
2020 case 30: buf1
[3] = ((buf1
[3] << 8) & 0x0000FF00) | ((buf1
[3] >> 8) & 0x000000FF);
2022 case 31: buf1
[3] = (buf1
[3] & 0x000000FF) | ((buf1
[3] << 8) & 0x00FF0000) | ((buf1
[3] >> 8) & 0x0000FF00);
2029 static uint
rule_op_mangle_switch_at (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2031 if (p0
>= in_len
) return (in_len
);
2032 if (p1
>= in_len
) return (in_len
);
2039 case 0: tmp0
= (buf0
[0] >> 0) & 0xFF;
2041 case 1: tmp0
= (buf0
[0] >> 8) & 0xFF;
2043 case 2: tmp0
= (buf0
[0] >> 16) & 0xFF;
2045 case 3: tmp0
= (buf0
[0] >> 24) & 0xFF;
2047 case 4: tmp0
= (buf0
[1] >> 0) & 0xFF;
2049 case 5: tmp0
= (buf0
[1] >> 8) & 0xFF;
2051 case 6: tmp0
= (buf0
[1] >> 16) & 0xFF;
2053 case 7: tmp0
= (buf0
[1] >> 24) & 0xFF;
2055 case 8: tmp0
= (buf0
[2] >> 0) & 0xFF;
2057 case 9: tmp0
= (buf0
[2] >> 8) & 0xFF;
2059 case 10: tmp0
= (buf0
[2] >> 16) & 0xFF;
2061 case 11: tmp0
= (buf0
[2] >> 24) & 0xFF;
2063 case 12: tmp0
= (buf0
[3] >> 0) & 0xFF;
2065 case 13: tmp0
= (buf0
[3] >> 8) & 0xFF;
2067 case 14: tmp0
= (buf0
[3] >> 16) & 0xFF;
2069 case 15: tmp0
= (buf0
[3] >> 24) & 0xFF;
2071 case 16: tmp0
= (buf1
[0] >> 0) & 0xFF;
2073 case 17: tmp0
= (buf1
[0] >> 8) & 0xFF;
2075 case 18: tmp0
= (buf1
[0] >> 16) & 0xFF;
2077 case 19: tmp0
= (buf1
[0] >> 24) & 0xFF;
2079 case 20: tmp0
= (buf1
[1] >> 0) & 0xFF;
2081 case 21: tmp0
= (buf1
[1] >> 8) & 0xFF;
2083 case 22: tmp0
= (buf1
[1] >> 16) & 0xFF;
2085 case 23: tmp0
= (buf1
[1] >> 24) & 0xFF;
2087 case 24: tmp0
= (buf1
[2] >> 0) & 0xFF;
2089 case 25: tmp0
= (buf1
[2] >> 8) & 0xFF;
2091 case 26: tmp0
= (buf1
[2] >> 16) & 0xFF;
2093 case 27: tmp0
= (buf1
[2] >> 24) & 0xFF;
2095 case 28: tmp0
= (buf1
[3] >> 0) & 0xFF;
2097 case 29: tmp0
= (buf1
[3] >> 8) & 0xFF;
2099 case 30: tmp0
= (buf1
[3] >> 16) & 0xFF;
2101 case 31: tmp0
= (buf1
[3] >> 24) & 0xFF;
2107 case 0: tmp1
= (buf0
[0] >> 0) & 0xff;
2108 buf0
[0] = (buf0
[0] & 0xffffff00) | tmp0
<< 0;
2110 case 1: tmp1
= (buf0
[0] >> 8) & 0xff;
2111 buf0
[0] = (buf0
[0] & 0xffff00ff) | tmp0
<< 8;
2113 case 2: tmp1
= (buf0
[0] >> 16) & 0xff;
2114 buf0
[0] = (buf0
[0] & 0xff00ffff) | tmp0
<< 16;
2116 case 3: tmp1
= (buf0
[0] >> 24) & 0xff;
2117 buf0
[0] = (buf0
[0] & 0x00ffffff) | tmp0
<< 24;
2119 case 4: tmp1
= (buf0
[1] >> 0) & 0xff;
2120 buf0
[1] = (buf0
[1] & 0xffffff00) | tmp0
<< 0;
2122 case 5: tmp1
= (buf0
[1] >> 8) & 0xff;
2123 buf0
[1] = (buf0
[1] & 0xffff00ff) | tmp0
<< 8;
2125 case 6: tmp1
= (buf0
[1] >> 16) & 0xff;
2126 buf0
[1] = (buf0
[1] & 0xff00ffff) | tmp0
<< 16;
2128 case 7: tmp1
= (buf0
[1] >> 24) & 0xff;
2129 buf0
[1] = (buf0
[1] & 0x00ffffff) | tmp0
<< 24;
2131 case 8: tmp1
= (buf0
[2] >> 0) & 0xff;
2132 buf0
[2] = (buf0
[2] & 0xffffff00) | tmp0
<< 0;
2134 case 9: tmp1
= (buf0
[2] >> 8) & 0xff;
2135 buf0
[2] = (buf0
[2] & 0xffff00ff) | tmp0
<< 8;
2137 case 10: tmp1
= (buf0
[2] >> 16) & 0xff;
2138 buf0
[2] = (buf0
[2] & 0xff00ffff) | tmp0
<< 16;
2140 case 11: tmp1
= (buf0
[2] >> 24) & 0xff;
2141 buf0
[2] = (buf0
[2] & 0x00ffffff) | tmp0
<< 24;
2143 case 12: tmp1
= (buf0
[3] >> 0) & 0xff;
2144 buf0
[3] = (buf0
[3] & 0xffffff00) | tmp0
<< 0;
2146 case 13: tmp1
= (buf0
[3] >> 8) & 0xff;
2147 buf0
[3] = (buf0
[3] & 0xffff00ff) | tmp0
<< 8;
2149 case 14: tmp1
= (buf0
[3] >> 16) & 0xff;
2150 buf0
[3] = (buf0
[3] & 0xff00ffff) | tmp0
<< 16;
2152 case 15: tmp1
= (buf0
[3] >> 24) & 0xff;
2153 buf0
[3] = (buf0
[3] & 0x00ffffff) | tmp0
<< 24;
2155 case 16: tmp1
= (buf1
[0] >> 0) & 0xff;
2156 buf1
[0] = (buf1
[0] & 0xffffff00) | tmp0
<< 0;
2158 case 17: tmp1
= (buf1
[0] >> 8) & 0xff;
2159 buf1
[0] = (buf1
[0] & 0xffff00ff) | tmp0
<< 8;
2161 case 18: tmp1
= (buf1
[0] >> 16) & 0xff;
2162 buf1
[0] = (buf1
[0] & 0xff00ffff) | tmp0
<< 16;
2164 case 19: tmp1
= (buf1
[0] >> 24) & 0xff;
2165 buf1
[0] = (buf1
[0] & 0x00ffffff) | tmp0
<< 24;
2167 case 20: tmp1
= (buf1
[1] >> 0) & 0xff;
2168 buf1
[1] = (buf1
[1] & 0xffffff00) | tmp0
<< 0;
2170 case 21: tmp1
= (buf1
[1] >> 8) & 0xff;
2171 buf1
[1] = (buf1
[1] & 0xffff00ff) | tmp0
<< 8;
2173 case 22: tmp1
= (buf1
[1] >> 16) & 0xff;
2174 buf1
[1] = (buf1
[1] & 0xff00ffff) | tmp0
<< 16;
2176 case 23: tmp1
= (buf1
[1] >> 24) & 0xff;
2177 buf1
[1] = (buf1
[1] & 0x00ffffff) | tmp0
<< 24;
2179 case 24: tmp1
= (buf1
[2] >> 0) & 0xff;
2180 buf1
[2] = (buf1
[2] & 0xffffff00) | tmp0
<< 0;
2182 case 25: tmp1
= (buf1
[2] >> 8) & 0xff;
2183 buf1
[2] = (buf1
[2] & 0xffff00ff) | tmp0
<< 8;
2185 case 26: tmp1
= (buf1
[2] >> 16) & 0xff;
2186 buf1
[2] = (buf1
[2] & 0xff00ffff) | tmp0
<< 16;
2188 case 27: tmp1
= (buf1
[2] >> 24) & 0xff;
2189 buf1
[2] = (buf1
[2] & 0x00ffffff) | tmp0
<< 24;
2191 case 28: tmp1
= (buf1
[3] >> 0) & 0xff;
2192 buf1
[3] = (buf1
[3] & 0xffffff00) | tmp0
<< 0;
2194 case 29: tmp1
= (buf1
[3] >> 8) & 0xff;
2195 buf1
[3] = (buf1
[3] & 0xffff00ff) | tmp0
<< 8;
2197 case 30: tmp1
= (buf1
[3] >> 16) & 0xff;
2198 buf1
[3] = (buf1
[3] & 0xff00ffff) | tmp0
<< 16;
2200 case 31: tmp1
= (buf1
[3] >> 24) & 0xff;
2201 buf1
[3] = (buf1
[3] & 0x00ffffff) | tmp0
<< 24;
2207 case 0: buf0
[0] = (buf0
[0] & 0xffffff00) | tmp1
<< 0;
2209 case 1: buf0
[0] = (buf0
[0] & 0xffff00ff) | tmp1
<< 8;
2211 case 2: buf0
[0] = (buf0
[0] & 0xff00ffff) | tmp1
<< 16;
2213 case 3: buf0
[0] = (buf0
[0] & 0x00ffffff) | tmp1
<< 24;
2215 case 4: buf0
[1] = (buf0
[1] & 0xffffff00) | tmp1
<< 0;
2217 case 5: buf0
[1] = (buf0
[1] & 0xffff00ff) | tmp1
<< 8;
2219 case 6: buf0
[1] = (buf0
[1] & 0xff00ffff) | tmp1
<< 16;
2221 case 7: buf0
[1] = (buf0
[1] & 0x00ffffff) | tmp1
<< 24;
2223 case 8: buf0
[2] = (buf0
[2] & 0xffffff00) | tmp1
<< 0;
2225 case 9: buf0
[2] = (buf0
[2] & 0xffff00ff) | tmp1
<< 8;
2227 case 10: buf0
[2] = (buf0
[2] & 0xff00ffff) | tmp1
<< 16;
2229 case 11: buf0
[2] = (buf0
[2] & 0x00ffffff) | tmp1
<< 24;
2231 case 12: buf0
[3] = (buf0
[3] & 0xffffff00) | tmp1
<< 0;
2233 case 13: buf0
[3] = (buf0
[3] & 0xffff00ff) | tmp1
<< 8;
2235 case 14: buf0
[3] = (buf0
[3] & 0xff00ffff) | tmp1
<< 16;
2237 case 15: buf0
[3] = (buf0
[3] & 0x00ffffff) | tmp1
<< 24;
2239 case 16: buf1
[0] = (buf1
[0] & 0xffffff00) | tmp1
<< 0;
2241 case 17: buf1
[0] = (buf1
[0] & 0xffff00ff) | tmp1
<< 8;
2243 case 18: buf1
[0] = (buf1
[0] & 0xff00ffff) | tmp1
<< 16;
2245 case 19: buf1
[0] = (buf1
[0] & 0x00ffffff) | tmp1
<< 24;
2247 case 20: buf1
[1] = (buf1
[1] & 0xffffff00) | tmp1
<< 0;
2249 case 21: buf1
[1] = (buf1
[1] & 0xffff00ff) | tmp1
<< 8;
2251 case 22: buf1
[1] = (buf1
[1] & 0xff00ffff) | tmp1
<< 16;
2253 case 23: buf1
[1] = (buf1
[1] & 0x00ffffff) | tmp1
<< 24;
2255 case 24: buf1
[2] = (buf1
[2] & 0xffffff00) | tmp1
<< 0;
2257 case 25: buf1
[2] = (buf1
[2] & 0xffff00ff) | tmp1
<< 8;
2259 case 26: buf1
[2] = (buf1
[2] & 0xff00ffff) | tmp1
<< 16;
2261 case 27: buf1
[2] = (buf1
[2] & 0x00ffffff) | tmp1
<< 24;
2263 case 28: buf1
[3] = (buf1
[3] & 0xffffff00) | tmp1
<< 0;
2265 case 29: buf1
[3] = (buf1
[3] & 0xffff00ff) | tmp1
<< 8;
2267 case 30: buf1
[3] = (buf1
[3] & 0xff00ffff) | tmp1
<< 16;
2269 case 31: buf1
[3] = (buf1
[3] & 0x00ffffff) | tmp1
<< 24;
2276 static uint
rule_op_mangle_chr_shiftl (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2278 if (p0
>= in_len
) return (in_len
);
2280 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2281 const uint ml
= ~mr
;
2285 case 0: buf0
[0] = (buf0
[0] & ml
) | (((buf0
[0] & mr
) << 1) & mr
); break;
2286 case 1: buf0
[1] = (buf0
[1] & ml
) | (((buf0
[1] & mr
) << 1) & mr
); break;
2287 case 2: buf0
[2] = (buf0
[2] & ml
) | (((buf0
[2] & mr
) << 1) & mr
); break;
2288 case 3: buf0
[3] = (buf0
[3] & ml
) | (((buf0
[3] & mr
) << 1) & mr
); break;
2289 case 4: buf1
[0] = (buf1
[0] & ml
) | (((buf1
[0] & mr
) << 1) & mr
); break;
2290 case 5: buf1
[1] = (buf1
[1] & ml
) | (((buf1
[1] & mr
) << 1) & mr
); break;
2291 case 6: buf1
[2] = (buf1
[2] & ml
) | (((buf1
[2] & mr
) << 1) & mr
); break;
2292 case 7: buf1
[3] = (buf1
[3] & ml
) | (((buf1
[3] & mr
) << 1) & mr
); break;
2298 static uint
rule_op_mangle_chr_shiftr (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2300 if (p0
>= in_len
) return (in_len
);
2302 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2303 const uint ml
= ~mr
;
2307 case 0: buf0
[0] = (buf0
[0] & ml
) | (((buf0
[0] & mr
) >> 1) & mr
); break;
2308 case 1: buf0
[1] = (buf0
[1] & ml
) | (((buf0
[1] & mr
) >> 1) & mr
); break;
2309 case 2: buf0
[2] = (buf0
[2] & ml
) | (((buf0
[2] & mr
) >> 1) & mr
); break;
2310 case 3: buf0
[3] = (buf0
[3] & ml
) | (((buf0
[3] & mr
) >> 1) & mr
); break;
2311 case 4: buf1
[0] = (buf1
[0] & ml
) | (((buf1
[0] & mr
) >> 1) & mr
); break;
2312 case 5: buf1
[1] = (buf1
[1] & ml
) | (((buf1
[1] & mr
) >> 1) & mr
); break;
2313 case 6: buf1
[2] = (buf1
[2] & ml
) | (((buf1
[2] & mr
) >> 1) & mr
); break;
2314 case 7: buf1
[3] = (buf1
[3] & ml
) | (((buf1
[3] & mr
) >> 1) & mr
); break;
2320 static uint
rule_op_mangle_chr_incr (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2322 if (p0
>= in_len
) return (in_len
);
2324 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2325 const uint ml
= ~mr
;
2327 const uint n
= 0x01010101 & mr
;
2331 case 0: buf0
[0] = (buf0
[0] & ml
) | (((buf0
[0] & mr
) + n
) & mr
); break;
2332 case 1: buf0
[1] = (buf0
[1] & ml
) | (((buf0
[1] & mr
) + n
) & mr
); break;
2333 case 2: buf0
[2] = (buf0
[2] & ml
) | (((buf0
[2] & mr
) + n
) & mr
); break;
2334 case 3: buf0
[3] = (buf0
[3] & ml
) | (((buf0
[3] & mr
) + n
) & mr
); break;
2335 case 4: buf1
[0] = (buf1
[0] & ml
) | (((buf1
[0] & mr
) + n
) & mr
); break;
2336 case 5: buf1
[1] = (buf1
[1] & ml
) | (((buf1
[1] & mr
) + n
) & mr
); break;
2337 case 6: buf1
[2] = (buf1
[2] & ml
) | (((buf1
[2] & mr
) + n
) & mr
); break;
2338 case 7: buf1
[3] = (buf1
[3] & ml
) | (((buf1
[3] & mr
) + n
) & mr
); break;
2344 static uint
rule_op_mangle_chr_decr (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2346 if (p0
>= in_len
) return (in_len
);
2348 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2349 const uint ml
= ~mr
;
2351 const uint n
= 0x01010101 & mr
;
2355 case 0: buf0
[0] = (buf0
[0] & ml
) | (((buf0
[0] & mr
) - n
) & mr
); break;
2356 case 1: buf0
[1] = (buf0
[1] & ml
) | (((buf0
[1] & mr
) - n
) & mr
); break;
2357 case 2: buf0
[2] = (buf0
[2] & ml
) | (((buf0
[2] & mr
) - n
) & mr
); break;
2358 case 3: buf0
[3] = (buf0
[3] & ml
) | (((buf0
[3] & mr
) - n
) & mr
); break;
2359 case 4: buf1
[0] = (buf1
[0] & ml
) | (((buf1
[0] & mr
) - n
) & mr
); break;
2360 case 5: buf1
[1] = (buf1
[1] & ml
) | (((buf1
[1] & mr
) - n
) & mr
); break;
2361 case 6: buf1
[2] = (buf1
[2] & ml
) | (((buf1
[2] & mr
) - n
) & mr
); break;
2362 case 7: buf1
[3] = (buf1
[3] & ml
) | (((buf1
[3] & mr
) - n
) & mr
); break;
2368 static uint
rule_op_mangle_replace_np1 (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2370 if ((p0
+ 1) >= in_len
) return (in_len
);
2375 lshift_block (buf0
, buf1
, tib40
, tib41
);
2377 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2378 const uint ml
= ~mr
;
2382 case 0: buf0
[0] = (buf0
[0] & ml
) | (tib40
[0] & mr
); break;
2383 case 1: buf0
[1] = (buf0
[1] & ml
) | (tib40
[1] & mr
); break;
2384 case 2: buf0
[2] = (buf0
[2] & ml
) | (tib40
[2] & mr
); break;
2385 case 3: buf0
[3] = (buf0
[3] & ml
) | (tib40
[3] & mr
); break;
2386 case 4: buf1
[0] = (buf1
[0] & ml
) | (tib41
[0] & mr
); break;
2387 case 5: buf1
[1] = (buf1
[1] & ml
) | (tib41
[1] & mr
); break;
2388 case 6: buf1
[2] = (buf1
[2] & ml
) | (tib41
[2] & mr
); break;
2389 case 7: buf1
[3] = (buf1
[3] & ml
) | (tib41
[3] & mr
); break;
2395 static uint
rule_op_mangle_replace_nm1 (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2397 if (p0
== 0) return (in_len
);
2399 if (p0
>= in_len
) return (in_len
);
2404 rshift_block (buf0
, buf1
, tib40
, tib41
);
2406 const uint mr
= 0xffu
<< ((p0
& 3) * 8);
2407 const uint ml
= ~mr
;
2411 case 0: buf0
[0] = (buf0
[0] & ml
) | (tib40
[0] & mr
); break;
2412 case 1: buf0
[1] = (buf0
[1] & ml
) | (tib40
[1] & mr
); break;
2413 case 2: buf0
[2] = (buf0
[2] & ml
) | (tib40
[2] & mr
); break;
2414 case 3: buf0
[3] = (buf0
[3] & ml
) | (tib40
[3] & mr
); break;
2415 case 4: buf1
[0] = (buf1
[0] & ml
) | (tib41
[0] & mr
); break;
2416 case 5: buf1
[1] = (buf1
[1] & ml
) | (tib41
[1] & mr
); break;
2417 case 6: buf1
[2] = (buf1
[2] & ml
) | (tib41
[2] & mr
); break;
2418 case 7: buf1
[3] = (buf1
[3] & ml
) | (tib41
[3] & mr
); break;
2424 static uint
rule_op_mangle_dupeblock_first (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2426 if (p0
> in_len
) return (in_len
);
2428 if ((in_len
+ p0
) >= 32) return (in_len
);
2430 uint out_len
= in_len
;
2444 truncate_right (tib40
, tib41
, p0
);
2446 rshift_block_N (buf0
, buf1
, buf0
, buf1
, p0
);
2448 buf0
[0] |= tib40
[0];
2449 buf0
[1] |= tib40
[1];
2450 buf0
[2] |= tib40
[2];
2451 buf0
[3] |= tib40
[3];
2452 buf1
[0] |= tib41
[0];
2453 buf1
[1] |= tib41
[1];
2454 buf1
[2] |= tib41
[2];
2455 buf1
[3] |= tib41
[3];
2462 static uint
rule_op_mangle_dupeblock_last (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2464 if (p0
> in_len
) return (in_len
);
2466 if ((in_len
+ p0
) >= 32) return (in_len
);
2468 uint out_len
= in_len
;
2473 rshift_block_N (buf0
, buf1
, tib40
, tib41
, p0
);
2475 truncate_left (tib40
, tib41
, out_len
);
2477 buf0
[0] |= tib40
[0];
2478 buf0
[1] |= tib40
[1];
2479 buf0
[2] |= tib40
[2];
2480 buf0
[3] |= tib40
[3];
2481 buf1
[0] |= tib41
[0];
2482 buf1
[1] |= tib41
[1];
2483 buf1
[2] |= tib41
[2];
2484 buf1
[3] |= tib41
[3];
2491 static uint
rule_op_mangle_title (const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2493 buf0
[0] |= (generate_cmask (buf0
[0]));
2494 buf0
[1] |= (generate_cmask (buf0
[1]));
2495 buf0
[2] |= (generate_cmask (buf0
[2]));
2496 buf0
[3] |= (generate_cmask (buf0
[3]));
2497 buf1
[0] |= (generate_cmask (buf1
[0]));
2498 buf1
[1] |= (generate_cmask (buf1
[1]));
2499 buf1
[2] |= (generate_cmask (buf1
[2]));
2500 buf1
[3] |= (generate_cmask (buf1
[3]));
2502 buf0
[0] &= ~(0x00000020 & generate_cmask (buf0
[0]));
2504 for (uint i
= 0; i
< in_len
; i
++)
2511 case 0: tmp0
= (buf0
[0] >> 0) & 0xFF;
2512 tmp1
= ~(0x00002000 & generate_cmask (buf0
[0])); break;
2513 case 1: tmp0
= (buf0
[0] >> 8) & 0xFF;
2514 tmp1
= ~(0x00200000 & generate_cmask (buf0
[0])); break;
2515 case 2: tmp0
= (buf0
[0] >> 16) & 0xFF;
2516 tmp1
= ~(0x20000000 & generate_cmask (buf0
[0])); break;
2517 case 3: tmp0
= (buf0
[0] >> 24) & 0xFF;
2518 tmp1
= ~(0x00000020 & generate_cmask (buf0
[1])); break;
2519 case 4: tmp0
= (buf0
[1] >> 0) & 0xFF;
2520 tmp1
= ~(0x00002000 & generate_cmask (buf0
[1])); break;
2521 case 5: tmp0
= (buf0
[1] >> 8) & 0xFF;
2522 tmp1
= ~(0x00200000 & generate_cmask (buf0
[1])); break;
2523 case 6: tmp0
= (buf0
[1] >> 16) & 0xFF;
2524 tmp1
= ~(0x20000000 & generate_cmask (buf0
[1])); break;
2525 case 7: tmp0
= (buf0
[1] >> 24) & 0xFF;
2526 tmp1
= ~(0x00000020 & generate_cmask (buf0
[2])); break;
2527 case 8: tmp0
= (buf0
[2] >> 0) & 0xFF;
2528 tmp1
= ~(0x00002000 & generate_cmask (buf0
[2])); break;
2529 case 9: tmp0
= (buf0
[2] >> 8) & 0xFF;
2530 tmp1
= ~(0x00200000 & generate_cmask (buf0
[2])); break;
2531 case 10: tmp0
= (buf0
[2] >> 16) & 0xFF;
2532 tmp1
= ~(0x20000000 & generate_cmask (buf0
[2])); break;
2533 case 11: tmp0
= (buf0
[2] >> 24) & 0xFF;
2534 tmp1
= ~(0x00000020 & generate_cmask (buf0
[3])); break;
2535 case 12: tmp0
= (buf0
[3] >> 0) & 0xFF;
2536 tmp1
= ~(0x00002000 & generate_cmask (buf0
[3])); break;
2537 case 13: tmp0
= (buf0
[3] >> 8) & 0xFF;
2538 tmp1
= ~(0x00200000 & generate_cmask (buf0
[3])); break;
2539 case 14: tmp0
= (buf0
[3] >> 16) & 0xFF;
2540 tmp1
= ~(0x20000000 & generate_cmask (buf0
[3])); break;
2541 case 15: tmp0
= (buf0
[3] >> 24) & 0xFF;
2542 tmp1
= ~(0x00000020 & generate_cmask (buf1
[0])); break;
2543 case 16: tmp0
= (buf1
[0] >> 0) & 0xFF;
2544 tmp1
= ~(0x00002000 & generate_cmask (buf1
[0])); break;
2545 case 17: tmp0
= (buf1
[0] >> 8) & 0xFF;
2546 tmp1
= ~(0x00200000 & generate_cmask (buf1
[0])); break;
2547 case 18: tmp0
= (buf1
[0] >> 16) & 0xFF;
2548 tmp1
= ~(0x20000000 & generate_cmask (buf1
[0])); break;
2549 case 19: tmp0
= (buf1
[0] >> 24) & 0xFF;
2550 tmp1
= ~(0x00000020 & generate_cmask (buf1
[1])); break;
2551 case 20: tmp0
= (buf1
[1] >> 0) & 0xFF;
2552 tmp1
= ~(0x00002000 & generate_cmask (buf1
[1])); break;
2553 case 21: tmp0
= (buf1
[1] >> 8) & 0xFF;
2554 tmp1
= ~(0x00200000 & generate_cmask (buf1
[1])); break;
2555 case 22: tmp0
= (buf1
[1] >> 16) & 0xFF;
2556 tmp1
= ~(0x20000000 & generate_cmask (buf1
[1])); break;
2557 case 23: tmp0
= (buf1
[1] >> 24) & 0xFF;
2558 tmp1
= ~(0x00000020 & generate_cmask (buf1
[2])); break;
2559 case 24: tmp0
= (buf1
[2] >> 0) & 0xFF;
2560 tmp1
= ~(0x00002000 & generate_cmask (buf1
[2])); break;
2561 case 25: tmp0
= (buf1
[2] >> 8) & 0xFF;
2562 tmp1
= ~(0x00200000 & generate_cmask (buf1
[2])); break;
2563 case 26: tmp0
= (buf1
[2] >> 16) & 0xFF;
2564 tmp1
= ~(0x20000000 & generate_cmask (buf1
[2])); break;
2565 case 27: tmp0
= (buf1
[2] >> 24) & 0xFF;
2566 tmp1
= ~(0x00000020 & generate_cmask (buf1
[3])); break;
2567 case 28: tmp0
= (buf1
[3] >> 0) & 0xFF;
2568 tmp1
= ~(0x00002000 & generate_cmask (buf1
[3])); break;
2569 case 29: tmp0
= (buf1
[3] >> 8) & 0xFF;
2570 tmp1
= ~(0x00200000 & generate_cmask (buf1
[3])); break;
2571 case 30: tmp0
= (buf1
[3] >> 16) & 0xFF;
2572 tmp1
= ~(0x20000000 & generate_cmask (buf1
[3])); break;
2577 if (tmp0
== ' ') buf0
[0] &= tmp1
;
2581 if (tmp0
== ' ') buf0
[1] &= tmp1
;
2585 if (tmp0
== ' ') buf0
[2] &= tmp1
;
2589 if (tmp0
== ' ') buf0
[3] &= tmp1
;
2593 if (tmp0
== ' ') buf1
[0] &= tmp1
;
2597 if (tmp0
== ' ') buf1
[1] &= tmp1
;
2601 if (tmp0
== ' ') buf1
[2] &= tmp1
;
2605 if (tmp0
== ' ') buf1
[3] &= tmp1
;
2612 uint
apply_rule (const uint name
, const uint p0
, const uint p1
, uint32_t buf0
[4], uint32_t buf1
[4], const uint in_len
)
2614 uint out_len
= in_len
;
2618 case RULE_OP_MANGLE_LREST
: out_len
= rule_op_mangle_lrest (p0
, p1
, buf0
, buf1
, out_len
); break;
2619 case RULE_OP_MANGLE_UREST
: out_len
= rule_op_mangle_urest (p0
, p1
, buf0
, buf1
, out_len
); break;
2620 case RULE_OP_MANGLE_LREST_UFIRST
: out_len
= rule_op_mangle_lrest_ufirst (p0
, p1
, buf0
, buf1
, out_len
); break;
2621 case RULE_OP_MANGLE_UREST_LFIRST
: out_len
= rule_op_mangle_urest_lfirst (p0
, p1
, buf0
, buf1
, out_len
); break;
2622 case RULE_OP_MANGLE_TREST
: out_len
= rule_op_mangle_trest (p0
, p1
, buf0
, buf1
, out_len
); break;
2623 case RULE_OP_MANGLE_TOGGLE_AT
: out_len
= rule_op_mangle_toggle_at (p0
, p1
, buf0
, buf1
, out_len
); break;
2624 case RULE_OP_MANGLE_REVERSE
: out_len
= rule_op_mangle_reverse (p0
, p1
, buf0
, buf1
, out_len
); break;
2625 case RULE_OP_MANGLE_DUPEWORD
: out_len
= rule_op_mangle_dupeword (p0
, p1
, buf0
, buf1
, out_len
); break;
2626 case RULE_OP_MANGLE_DUPEWORD_TIMES
: out_len
= rule_op_mangle_dupeword_times (p0
, p1
, buf0
, buf1
, out_len
); break;
2627 case RULE_OP_MANGLE_REFLECT
: out_len
= rule_op_mangle_reflect (p0
, p1
, buf0
, buf1
, out_len
); break;
2628 case RULE_OP_MANGLE_APPEND
: out_len
= rule_op_mangle_append (p0
, p1
, buf0
, buf1
, out_len
); break;
2629 case RULE_OP_MANGLE_PREPEND
: out_len
= rule_op_mangle_prepend (p0
, p1
, buf0
, buf1
, out_len
); break;
2630 case RULE_OP_MANGLE_ROTATE_LEFT
: out_len
= rule_op_mangle_rotate_left (p0
, p1
, buf0
, buf1
, out_len
); break;
2631 case RULE_OP_MANGLE_ROTATE_RIGHT
: out_len
= rule_op_mangle_rotate_right (p0
, p1
, buf0
, buf1
, out_len
); break;
2632 case RULE_OP_MANGLE_DELETE_FIRST
: out_len
= rule_op_mangle_delete_first (p0
, p1
, buf0
, buf1
, out_len
); break;
2633 case RULE_OP_MANGLE_DELETE_LAST
: out_len
= rule_op_mangle_delete_last (p0
, p1
, buf0
, buf1
, out_len
); break;
2634 case RULE_OP_MANGLE_DELETE_AT
: out_len
= rule_op_mangle_delete_at (p0
, p1
, buf0
, buf1
, out_len
); break;
2635 case RULE_OP_MANGLE_EXTRACT
: out_len
= rule_op_mangle_extract (p0
, p1
, buf0
, buf1
, out_len
); break;
2636 case RULE_OP_MANGLE_OMIT
: out_len
= rule_op_mangle_omit (p0
, p1
, buf0
, buf1
, out_len
); break;
2637 case RULE_OP_MANGLE_INSERT
: out_len
= rule_op_mangle_insert (p0
, p1
, buf0
, buf1
, out_len
); break;
2638 case RULE_OP_MANGLE_OVERSTRIKE
: out_len
= rule_op_mangle_overstrike (p0
, p1
, buf0
, buf1
, out_len
); break;
2639 case RULE_OP_MANGLE_TRUNCATE_AT
: out_len
= rule_op_mangle_truncate_at (p0
, p1
, buf0
, buf1
, out_len
); break;
2640 case RULE_OP_MANGLE_REPLACE
: out_len
= rule_op_mangle_replace (p0
, p1
, buf0
, buf1
, out_len
); break;
2641 //case RULE_OP_MANGLE_PURGECHAR: out_len = rule_op_mangle_purgechar (p0, p1, buf0, buf1, out_len); break;
2642 //case RULE_OP_MANGLE_TOGGLECASE_REC: out_len = rule_op_mangle_togglecase_rec (p0, p1, buf0, buf1, out_len); break;
2643 case RULE_OP_MANGLE_DUPECHAR_FIRST
: out_len
= rule_op_mangle_dupechar_first (p0
, p1
, buf0
, buf1
, out_len
); break;
2644 case RULE_OP_MANGLE_DUPECHAR_LAST
: out_len
= rule_op_mangle_dupechar_last (p0
, p1
, buf0
, buf1
, out_len
); break;
2645 case RULE_OP_MANGLE_DUPECHAR_ALL
: out_len
= rule_op_mangle_dupechar_all (p0
, p1
, buf0
, buf1
, out_len
); break;
2646 case RULE_OP_MANGLE_SWITCH_FIRST
: out_len
= rule_op_mangle_switch_first (p0
, p1
, buf0
, buf1
, out_len
); break;
2647 case RULE_OP_MANGLE_SWITCH_LAST
: out_len
= rule_op_mangle_switch_last (p0
, p1
, buf0
, buf1
, out_len
); break;
2648 case RULE_OP_MANGLE_SWITCH_AT
: out_len
= rule_op_mangle_switch_at (p0
, p1
, buf0
, buf1
, out_len
); break;
2649 case RULE_OP_MANGLE_CHR_SHIFTL
: out_len
= rule_op_mangle_chr_shiftl (p0
, p1
, buf0
, buf1
, out_len
); break;
2650 case RULE_OP_MANGLE_CHR_SHIFTR
: out_len
= rule_op_mangle_chr_shiftr (p0
, p1
, buf0
, buf1
, out_len
); break;
2651 case RULE_OP_MANGLE_CHR_INCR
: out_len
= rule_op_mangle_chr_incr (p0
, p1
, buf0
, buf1
, out_len
); break;
2652 case RULE_OP_MANGLE_CHR_DECR
: out_len
= rule_op_mangle_chr_decr (p0
, p1
, buf0
, buf1
, out_len
); break;
2653 case RULE_OP_MANGLE_REPLACE_NP1
: out_len
= rule_op_mangle_replace_np1 (p0
, p1
, buf0
, buf1
, out_len
); break;
2654 case RULE_OP_MANGLE_REPLACE_NM1
: out_len
= rule_op_mangle_replace_nm1 (p0
, p1
, buf0
, buf1
, out_len
); break;
2655 case RULE_OP_MANGLE_DUPEBLOCK_FIRST
: out_len
= rule_op_mangle_dupeblock_first (p0
, p1
, buf0
, buf1
, out_len
); break;
2656 case RULE_OP_MANGLE_DUPEBLOCK_LAST
: out_len
= rule_op_mangle_dupeblock_last (p0
, p1
, buf0
, buf1
, out_len
); break;
2657 case RULE_OP_MANGLE_TITLE
: out_len
= rule_op_mangle_title (p0
, p1
, buf0
, buf1
, out_len
); break;
2663 uint
apply_rules (uint
*cmds
, uint32_t buf0
[4], uint32_t buf1
[4], const uint len
)
2667 for (; *cmds
; cmds
++)
2669 const uint name
= (*cmds
>> 0) & 0xff;
2670 const uint p0
= (*cmds
>> 8) & 0xff;
2671 const uint p1
= (*cmds
>> 16) & 0xff;
2673 out_len
= apply_rule (name
, p0
, p1
, buf0
, buf1
, out_len
);