1 /* { dg-do compile } */
2 /* { dg-skip-if "do not override -mfloat-abi" { *-*-* } { "-mfloat-abi=*" } {"-mfloat-abi=soft" } } */
3 /* { dg-options "-mthumb -O2 -mfloat-abi=soft -w" } */
4 /* { dg-skip-if "" { ! { arm_thumb1_ok || arm_thumb2_ok } } } */
13 enum { no_op
, duplicate
, pop_failure_jump
, dummy_failure_jump
};
17 } byte_fail_stack_elt_t
;
19 typedef struct { unsigned avail
; } byte_fail_stack_type
;
22 byte_fail_stack_elt_t word
;
24 unsigned match_null_string_p
: 2;
25 unsigned is_active
: 1;
26 unsigned ever_matched_something
: 1;
28 } byte_register_info_type
;
36 byte_re_match_2_internal_size2(const int p2
, int p3
, const int p4
) {
40 byte_fail_stack_type o
;
41 byte_fail_stack_elt_t
*q
;
42 unsigned int s
= (unsigned int)h
;
44 char **v
, *w
, **x
, **y
, **t1
;
45 byte_register_info_type
*z
, *t2
= __builtin_alloca(s
);
46 x
= __builtin_alloca(s
);
47 y
= __builtin_alloca(s
);
48 z
= __builtin_alloca(sizeof(byte_register_info_type
));
49 k
= p4
+ byte_re_match_2_internal_size2
;
66 switch (*h
->buffer
++) {
70 y
[*h
->buffer
] = z
[*h
->buffer
].bits
.match_null_string_p
? w
== &a
?: w
: w
;
74 while (r
&& z
[r
].bits
.is_active
)
82 case dummy_failure_jump
:
85 if (z
[*h
->buffer
].bits
.ever_matched_something
) {
87 z
[*h
->buffer
].bits
.ever_matched_something
= r
= *h
->buffer
;
88 for (; r
+ *(h
->buffer
+ 1); r
++) {
101 case pop_failure_jump
:
103 t2
[c
].word
= q
[o
.avail
];
105 q
= t4
= __builtin_allocamemcpy(t4
?: (p
<<= 1));
112 for (; t5
>= t
; t5
--)
113 v
[t5
] = q
[--o
.avail
].pointer
;
115 case pop_failure_jump
: