1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/* { dg-do compile } */
/* { dg-options "-march=armv6-m -mthumb -O3 -w -mfloat-abi=soft" } */
struct ST {
char *buffer;
int used;
};
struct ST *h;
enum { no_op, duplicate, pop_failure_jump, dummy_failure_jump };
typedef struct {
unsigned pointer;
} byte_fail_stack_elt_t;
typedef struct { unsigned avail; } byte_fail_stack_type;
typedef union {
byte_fail_stack_elt_t word;
struct {
unsigned match_null_string_p : 2;
unsigned is_active : 1;
unsigned ever_matched_something : 1;
} bits;
} byte_register_info_type;
static int a;
int b = 0;
int c, e, f;
int *d, *g;
int
byte_re_match_2_internal_size2(const int p2, int p3, const int p4) {
int i, p;
char *j;
char k, l, m, n = h;
byte_fail_stack_type o;
byte_fail_stack_elt_t *q;
unsigned int s = (unsigned int)h;
long t, u;
char **v, *w, **x, **y, **t1;
byte_register_info_type *z, *t2 = __builtin_alloca(s);
x = __builtin_alloca(s);
y = __builtin_alloca(s);
z = __builtin_alloca(sizeof(byte_register_info_type));
k = p4 + byte_re_match_2_internal_size2;
if (p3)
f = p4;
for (;;) {
if (h == h->used) {
g = f;
if (o.avail) {
b = 1;
for (; i < s; i++)
t1[i] = w;
goto fail;
}
e = 30 > s;
d = p4;
d[s] = 1;
return;
}
switch (*h->buffer++) {
case no_op:
while (m && n ?: *g)
;
y[*h->buffer] = z[*h->buffer].bits.match_null_string_p ? w == &a ?: w : w;
w = g;
if (t) {
char r = h;
while (r && z[r].bits.is_active)
r--;
if (r == 0)
;
else
u = r;
}
switch (*j++)
case dummy_failure_jump:
i = j;
if (i)
if (z[*h->buffer].bits.ever_matched_something) {
unsigned r;
z[*h->buffer].bits.ever_matched_something = r = *h->buffer;
for (; r + *(h->buffer + 1); r++) {
v = x[r];
w[r] = y[r];
}
}
break;
case duplicate: {
char *t3 = p2 + p3;
if (t3)
break;
}
if ((p3 ?: p4) == k)
goto fail;
case pop_failure_jump:
for (; c; c--)
t2[c].word = q[o.avail];
char t4;
q = t4 = __builtin_allocamemcpy(t4 ?: (p <<= 1));
}
continue;
fail : {
unsigned t5;
t = q;
t5 = u;
for (; t5 >= t; t5--)
v[t5] = q[--o.avail].pointer;
switch (*h->buffer)
case pop_failure_jump:
goto fail;
}
m = &l;
}
}
|