1 /* Automatically generated code; do not modify directly. */
9 const unsigned char *ip
;
13 t0_parse7E_unsigned(const unsigned char **p
)
22 x
= (x
<< 7) | (uint32_t)(y
& 0x7F);
30 t0_parse7E_signed(const unsigned char **p
)
35 neg
= ((**p
) >> 6) & 1;
41 x
= (x
<< 7) | (uint32_t)(y
& 0x7F);
44 return -(int32_t)~x
- 1;
52 #define T0_VBYTE(x, n) (unsigned char)((((uint32_t)(x) >> (n)) & 0x7F) | 0x80)
53 #define T0_FBYTE(x, n) (unsigned char)(((uint32_t)(x) >> (n)) & 0x7F)
54 #define T0_SBYTE(x) (unsigned char)((((uint32_t)(x) >> 28) + 0xF8) ^ 0xF8)
55 #define T0_INT1(x) T0_FBYTE(x, 0)
56 #define T0_INT2(x) T0_VBYTE(x, 7), T0_FBYTE(x, 0)
57 #define T0_INT3(x) T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
58 #define T0_INT4(x) T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
59 #define T0_INT5(x) T0_SBYTE(x), T0_VBYTE(x, 21), T0_VBYTE(x, 14), T0_VBYTE(x, 7), T0_FBYTE(x, 0)
61 /* static const unsigned char t0_datablock[]; */
64 void br_pem_decoder_init_main(void *t0ctx
);
66 void br_pem_decoder_run(void *t0ctx
);
72 #define CTX ((br_pem_decoder_context *)(void *)((unsigned char *)t0ctx - offsetof(br_pem_decoder_context, cpu)))
74 /* see bearssl_pem.h */
76 br_pem_decoder_init(br_pem_decoder_context
*ctx
)
78 memset(ctx
, 0, sizeof *ctx
);
79 ctx
->cpu
.dp
= &ctx
->dp_stack
[0];
80 ctx
->cpu
.rp
= &ctx
->rp_stack
[0];
81 br_pem_decoder_init_main(&ctx
->cpu
);
82 br_pem_decoder_run(&ctx
->cpu
);
85 /* see bearssl_pem.h */
87 br_pem_decoder_push(br_pem_decoder_context
*ctx
,
88 const void *data
, size_t len
)
95 br_pem_decoder_run(&ctx
->cpu
);
96 return len
- ctx
->hlen
;
99 /* see bearssl_pem.h */
101 br_pem_decoder_event(br_pem_decoder_context
*ctx
)
112 static const unsigned char t0_datablock
[] = {
113 0x00, 0x2D, 0x2D, 0x2D, 0x2D, 0x2D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x20,
114 0x00, 0x2D, 0x2D, 0x2D, 0x2D, 0x45, 0x4E, 0x44, 0x20, 0x00
117 static const unsigned char t0_codeblock
[] = {
118 0x00, 0x01, 0x00, 0x09, 0x00, 0x00, 0x01, 0x01, 0x07, 0x00, 0x00, 0x01,
119 0x01, 0x08, 0x00, 0x00, 0x13, 0x13, 0x00, 0x00, 0x01,
120 T0_INT2(offsetof(br_pem_decoder_context
, event
)), 0x00, 0x00, 0x01,
121 T0_INT2(offsetof(br_pem_decoder_context
, name
)), 0x00, 0x00, 0x05,
122 0x14, 0x2C, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x03, 0x13, 0x04, 0x76, 0x01,
123 0x2D, 0x0C, 0x06, 0x05, 0x2E, 0x01, 0x03, 0x2D, 0x00, 0x01, 0x0D, 0x27,
124 0x05, 0x04, 0x01, 0x03, 0x2D, 0x00, 0x15, 0x2E, 0x01, 0x02, 0x2D, 0x00,
125 0x01, 0x01, 0x7F, 0x03, 0x00, 0x25, 0x01, 0x00, 0x18, 0x0D, 0x06, 0x03,
126 0x13, 0x04, 0x3C, 0x01, 0x7F, 0x18, 0x0D, 0x06, 0x13, 0x13, 0x02, 0x00,
127 0x05, 0x06, 0x2E, 0x01, 0x03, 0x2D, 0x04, 0x03, 0x01, 0x7F, 0x23, 0x01,
128 0x00, 0x00, 0x04, 0x23, 0x01, 0x01, 0x18, 0x0D, 0x06, 0x09, 0x13, 0x01,
129 0x00, 0x23, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x02, 0x18, 0x0D, 0x06,
130 0x06, 0x13, 0x01, 0x7F, 0x00, 0x04, 0x08, 0x13, 0x01, 0x03, 0x2D, 0x01,
131 0x00, 0x00, 0x13, 0x01, 0x00, 0x03, 0x00, 0x04, 0xFF, 0x33, 0x01, 0x2C,
132 0x14, 0x01, 0x2D, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x7F, 0x00, 0x14, 0x31,
133 0x06, 0x02, 0x13, 0x29, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x04, 0x13, 0x01,
134 0x02, 0x00, 0x16, 0x14, 0x1D, 0x06, 0x05, 0x13, 0x2E, 0x01, 0x03, 0x00,
135 0x03, 0x00, 0x29, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x03,
136 0x00, 0x16, 0x14, 0x1D, 0x06, 0x05, 0x13, 0x2E, 0x01, 0x03, 0x00, 0x02,
137 0x00, 0x01, 0x06, 0x0A, 0x07, 0x03, 0x00, 0x29, 0x14, 0x01, 0x0A, 0x0D,
138 0x06, 0x04, 0x13, 0x01, 0x03, 0x00, 0x14, 0x01, 0x3D, 0x0D, 0x06, 0x2E,
139 0x13, 0x29, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x03, 0x00,
140 0x2F, 0x05, 0x04, 0x13, 0x01, 0x03, 0x00, 0x01, 0x3D, 0x0C, 0x06, 0x03,
141 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x0F, 0x10, 0x06, 0x03, 0x01, 0x03,
142 0x00, 0x02, 0x00, 0x01, 0x04, 0x0F, 0x1C, 0x01, 0x01, 0x00, 0x16, 0x14,
143 0x1D, 0x06, 0x05, 0x13, 0x2E, 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x06,
144 0x0A, 0x07, 0x03, 0x00, 0x29, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x04, 0x13,
145 0x01, 0x03, 0x00, 0x14, 0x01, 0x3D, 0x0D, 0x06, 0x20, 0x13, 0x2F, 0x05,
146 0x03, 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x03, 0x10, 0x06, 0x03, 0x01,
147 0x03, 0x00, 0x02, 0x00, 0x01, 0x0A, 0x0F, 0x1C, 0x02, 0x00, 0x01, 0x02,
148 0x0F, 0x1C, 0x01, 0x01, 0x00, 0x16, 0x14, 0x1D, 0x06, 0x05, 0x13, 0x2E,
149 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x06, 0x0A, 0x07, 0x03, 0x00, 0x02,
150 0x00, 0x01, 0x10, 0x0F, 0x1C, 0x02, 0x00, 0x01, 0x08, 0x0F, 0x1C, 0x02,
151 0x00, 0x1C, 0x01, 0x00, 0x00, 0x00, 0x28, 0x01, 0x01, 0x2D, 0x24, 0x06,
152 0x02, 0x04, 0x7B, 0x04, 0x75, 0x00, 0x14, 0x12, 0x2A, 0x14, 0x05, 0x04,
153 0x20, 0x01, 0x7F, 0x00, 0x2C, 0x2A, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x05,
154 0x13, 0x20, 0x01, 0x00, 0x00, 0x0D, 0x05, 0x05, 0x13, 0x2E, 0x01, 0x00,
155 0x00, 0x1E, 0x04, 0x5E, 0x00, 0x01, 0x01, 0x27, 0x06, 0x0B, 0x22, 0x01,
156 0x80, 0x7F, 0x2B, 0x14, 0x06, 0x02, 0x30, 0x00, 0x13, 0x04, 0x6E, 0x00,
157 0x2C, 0x14, 0x31, 0x05, 0x01, 0x00, 0x13, 0x04, 0x77, 0x00, 0x14, 0x14,
158 0x01, 0x80, 0x61, 0x0E, 0x1B, 0x01, 0x80, 0x7A, 0x0B, 0x10, 0x06, 0x03,
159 0x01, 0x20, 0x08, 0x00, 0x01, 0x14, 0x03, 0x00, 0x1B, 0x18, 0x05, 0x05,
160 0x20, 0x2E, 0x01, 0x00, 0x00, 0x2C, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x06,
161 0x20, 0x02, 0x00, 0x1B, 0x08, 0x00, 0x14, 0x01, 0x0D, 0x0D, 0x06, 0x03,
162 0x13, 0x04, 0x03, 0x2A, 0x18, 0x1A, 0x1E, 0x1B, 0x1F, 0x1B, 0x04, 0x59,
163 0x00, 0x19, 0x14, 0x1D, 0x05, 0x01, 0x00, 0x13, 0x11, 0x04, 0x76, 0x00,
164 0x21, 0x1A, 0x11, 0x00, 0x00, 0x2C, 0x01, 0x0A, 0x0C, 0x06, 0x02, 0x04,
165 0x78, 0x00, 0x01, 0x01, 0x7F, 0x03, 0x00, 0x2C, 0x14, 0x01, 0x0A, 0x0C,
166 0x06, 0x09, 0x31, 0x05, 0x04, 0x01, 0x00, 0x03, 0x00, 0x04, 0x70, 0x13,
167 0x02, 0x00, 0x00, 0x00, 0x14, 0x06, 0x14, 0x1F, 0x14, 0x22, 0x07, 0x17,
168 0x01, 0x2D, 0x0C, 0x06, 0x08, 0x22, 0x07, 0x1E, 0x01, 0x00, 0x1B, 0x1A,
169 0x00, 0x04, 0x69, 0x22, 0x1A, 0x00, 0x00, 0x14, 0x01, 0x0A, 0x0C, 0x1B,
170 0x01, 0x20, 0x0B, 0x10, 0x00
173 static const uint16_t t0_caddr
[] = {
197 #define T0_INTERPRETED 29
199 #define T0_ENTER(ip, rp, slot) do { \
200 const unsigned char *t0_newip; \
202 t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
203 t0_lnum = t0_parse7E_unsigned(&t0_newip); \
205 *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
209 #define T0_DEFENTRY(name, slot) \
213 t0_context *t0ctx = ctx; \
214 t0ctx->ip = &t0_codeblock[0]; \
215 T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
218 T0_DEFENTRY(br_pem_decoder_init_main
, 38)
220 #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
223 br_pem_decoder_run(void *t0ctx
)
226 const unsigned char *ip
;
228 #define T0_LOCAL(x) (*(rp - 2 - (x)))
229 #define T0_POP() (*-- dp)
230 #define T0_POPi() (*(int32_t *)(-- dp))
231 #define T0_PEEK(x) (*(dp - 1 - (x)))
232 #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
233 #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
234 #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
235 #define T0_RPOP() (*-- rp)
236 #define T0_RPOPi() (*(int32_t *)(-- rp))
237 #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
238 #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
239 #define T0_ROLL(x) do { \
240 size_t t0len = (size_t)(x); \
241 uint32_t t0tmp = *(dp - 1 - t0len); \
242 memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
245 #define T0_SWAP() do { \
246 uint32_t t0tmp = *(dp - 2); \
247 *(dp - 2) = *(dp - 1); \
250 #define T0_ROT() do { \
251 uint32_t t0tmp = *(dp - 3); \
252 *(dp - 3) = *(dp - 2); \
253 *(dp - 2) = *(dp - 1); \
256 #define T0_NROT() do { \
257 uint32_t t0tmp = *(dp - 1); \
258 *(dp - 1) = *(dp - 2); \
259 *(dp - 2) = *(dp - 3); \
262 #define T0_PICK(x) do { \
263 uint32_t t0depth = (x); \
264 T0_PUSH(T0_PEEK(t0depth)); \
266 #define T0_CO() do { \
269 #define T0_RET() goto t0_next
271 dp
= ((t0_context
*)t0ctx
)->dp
;
272 rp
= ((t0_context
*)t0ctx
)->rp
;
273 ip
= ((t0_context
*)t0ctx
)->ip
;
280 if (t0x
< T0_INTERPRETED
) {
292 ip
= &t0_codeblock
[t0x
];
294 case 1: /* literal constant */
295 T0_PUSHi(t0_parse7E_signed(&ip
));
297 case 2: /* read local */
298 T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip
)));
300 case 3: /* write local */
301 T0_LOCAL(t0_parse7E_unsigned(&ip
)) = T0_POP();
304 t0off
= t0_parse7E_signed(&ip
);
307 case 5: /* jump if */
308 t0off
= t0_parse7E_signed(&ip
);
313 case 6: /* jump if not */
314 t0off
= t0_parse7E_signed(&ip
);
322 uint32_t b
= T0_POP();
323 uint32_t a
= T0_POP();
331 uint32_t b
= T0_POP();
332 uint32_t a
= T0_POP();
340 int32_t b
= T0_POPi();
341 int32_t a
= T0_POPi();
342 T0_PUSH(-(uint32_t)(a
< b
));
349 int c
= (int)T0_POPi();
350 uint32_t x
= T0_POP();
358 int32_t b
= T0_POPi();
359 int32_t a
= T0_POPi();
360 T0_PUSH(-(uint32_t)(a
<= b
));
367 uint32_t b
= T0_POP();
368 uint32_t a
= T0_POP();
369 T0_PUSH(-(uint32_t)(a
!= b
));
376 uint32_t b
= T0_POP();
377 uint32_t a
= T0_POP();
378 T0_PUSH(-(uint32_t)(a
== b
));
385 int32_t b
= T0_POPi();
386 int32_t a
= T0_POPi();
387 T0_PUSH(-(uint32_t)(a
>= b
));
394 int c
= (int)T0_POPi();
395 int32_t x
= T0_POPi();
403 uint32_t b
= T0_POP();
404 uint32_t a
= T0_POP();
417 size_t addr
= T0_POP();
418 T0_PUSH(t0_datablock
[addr
]);
437 CTX
->dest(CTX
->dest_ctx
, CTX
->buf
, CTX
->ptr
);
447 uint32_t c
= T0_POP();
453 z
= ((p
+ 2) & -LT(p
, 26))
454 | ((q
+ 28) & -LT(q
, 26))
455 | ((r
+ 54) & -LT(r
, 10))
456 | (64 & -EQ(c
, 0x2B))
457 | (65 & -EQ(c
, 0x2F))
459 T0_PUSHi((int32_t)z
- 2);
466 size_t addr
= T0_POP();
467 T0_PUSH(*((unsigned char *)CTX
+ addr
));
480 T0_PUSH(*CTX
->hbuf
++);
491 size_t addr
= T0_POP();
492 unsigned x
= T0_POP();
493 *((unsigned char *)CTX
+ addr
) = x
;
505 unsigned char x
= (unsigned char)T0_POP();
506 CTX
->buf
[CTX
->ptr
++] = x
;
507 if (CTX
->ptr
== sizeof CTX
->buf
) {
509 CTX
->dest(CTX
->dest_ctx
, CTX
->buf
, sizeof CTX
->buf
);
519 T0_ENTER(ip
, rp
, t0x
);
523 ((t0_context
*)t0ctx
)->dp
= dp
;
524 ((t0_context
*)t0ctx
)->rp
= rp
;
525 ((t0_context
*)t0ctx
)->ip
= ip
;