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 *)((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, 0x24, 0x01, 0x00, 0x17, 0x0D, 0x06, 0x03,
126 0x13, 0x04, 0x3C, 0x01, 0x7F, 0x17, 0x0D, 0x06, 0x13, 0x13, 0x02, 0x00,
127 0x05, 0x06, 0x2E, 0x01, 0x03, 0x2D, 0x04, 0x03, 0x01, 0x7F, 0x22, 0x01,
128 0x00, 0x00, 0x04, 0x23, 0x01, 0x01, 0x17, 0x0D, 0x06, 0x09, 0x13, 0x01,
129 0x00, 0x22, 0x01, 0x00, 0x00, 0x04, 0x14, 0x01, 0x02, 0x17, 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, 0x25, 0x14, 0x1C, 0x06, 0x05, 0x13, 0x2E, 0x01, 0x03, 0x00,
135 0x03, 0x00, 0x29, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x03,
136 0x00, 0x25, 0x14, 0x1C, 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, 0x1B, 0x01, 0x01, 0x00, 0x25, 0x14,
143 0x1C, 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, 0x1B, 0x02, 0x00, 0x01, 0x02,
148 0x0F, 0x1B, 0x01, 0x01, 0x00, 0x25, 0x14, 0x1C, 0x06, 0x05, 0x13, 0x2E,
149 0x01, 0x03, 0x00, 0x02, 0x00, 0x01, 0x06, 0x0A, 0x07, 0x03, 0x00, 0x02,
150 0x00, 0x01, 0x10, 0x0F, 0x1B, 0x02, 0x00, 0x01, 0x08, 0x0F, 0x1B, 0x02,
151 0x00, 0x1B, 0x01, 0x00, 0x00, 0x00, 0x14, 0x14, 0x01, 0x80, 0x41, 0x0E,
152 0x1A, 0x01, 0x80, 0x5A, 0x0B, 0x10, 0x06, 0x05, 0x01, 0x80, 0x41, 0x08,
153 0x00, 0x14, 0x14, 0x01, 0x80, 0x61, 0x0E, 0x1A, 0x01, 0x80, 0x7A, 0x0B,
154 0x10, 0x06, 0x05, 0x01, 0x80, 0x47, 0x08, 0x00, 0x14, 0x14, 0x01, 0x30,
155 0x0E, 0x1A, 0x01, 0x39, 0x0B, 0x10, 0x06, 0x04, 0x01, 0x04, 0x07, 0x00,
156 0x14, 0x01, 0x2B, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x3E, 0x00, 0x14, 0x01,
157 0x2F, 0x0D, 0x06, 0x04, 0x13, 0x01, 0x3F, 0x00, 0x01, 0x3D, 0x0C, 0x1E,
158 0x00, 0x00, 0x28, 0x01, 0x01, 0x2D, 0x23, 0x06, 0x02, 0x04, 0x7B, 0x04,
159 0x75, 0x00, 0x14, 0x12, 0x2A, 0x14, 0x05, 0x04, 0x1F, 0x01, 0x7F, 0x00,
160 0x2C, 0x2A, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x05, 0x13, 0x1F, 0x01, 0x00,
161 0x00, 0x0D, 0x05, 0x05, 0x13, 0x2E, 0x01, 0x00, 0x00, 0x1D, 0x04, 0x5E,
162 0x00, 0x01, 0x01, 0x27, 0x06, 0x0B, 0x21, 0x01, 0x80, 0x7F, 0x2B, 0x14,
163 0x06, 0x02, 0x30, 0x00, 0x13, 0x04, 0x6E, 0x00, 0x2C, 0x14, 0x31, 0x05,
164 0x01, 0x00, 0x13, 0x04, 0x77, 0x00, 0x14, 0x14, 0x01, 0x80, 0x61, 0x0E,
165 0x1A, 0x01, 0x80, 0x7A, 0x0B, 0x10, 0x06, 0x03, 0x01, 0x20, 0x08, 0x00,
166 0x01, 0x14, 0x03, 0x00, 0x1A, 0x17, 0x05, 0x05, 0x1F, 0x2E, 0x01, 0x00,
167 0x00, 0x2C, 0x14, 0x01, 0x0A, 0x0D, 0x06, 0x06, 0x1F, 0x02, 0x00, 0x1A,
168 0x08, 0x00, 0x14, 0x01, 0x0D, 0x0D, 0x06, 0x03, 0x13, 0x04, 0x03, 0x2A,
169 0x17, 0x19, 0x1D, 0x1A, 0x1E, 0x1A, 0x04, 0x59, 0x00, 0x18, 0x14, 0x1C,
170 0x05, 0x01, 0x00, 0x13, 0x11, 0x04, 0x76, 0x00, 0x20, 0x19, 0x11, 0x00,
171 0x00, 0x2C, 0x01, 0x0A, 0x0C, 0x06, 0x02, 0x04, 0x78, 0x00, 0x01, 0x01,
172 0x7F, 0x03, 0x00, 0x2C, 0x14, 0x01, 0x0A, 0x0C, 0x06, 0x09, 0x31, 0x05,
173 0x04, 0x01, 0x00, 0x03, 0x00, 0x04, 0x70, 0x13, 0x02, 0x00, 0x00, 0x00,
174 0x14, 0x06, 0x14, 0x1E, 0x14, 0x21, 0x07, 0x16, 0x01, 0x2D, 0x0C, 0x06,
175 0x08, 0x21, 0x07, 0x1D, 0x01, 0x00, 0x1A, 0x19, 0x00, 0x04, 0x69, 0x21,
176 0x19, 0x00, 0x00, 0x14, 0x01, 0x0A, 0x0C, 0x1A, 0x01, 0x20, 0x0B, 0x10,
180 static const uint16_t t0_caddr
[] = {
205 #define T0_INTERPRETED 28
207 #define T0_ENTER(ip, rp, slot) do { \
208 const unsigned char *t0_newip; \
210 t0_newip = &t0_codeblock[t0_caddr[(slot) - T0_INTERPRETED]]; \
211 t0_lnum = t0_parse7E_unsigned(&t0_newip); \
213 *((rp) ++) = (uint32_t)((ip) - &t0_codeblock[0]) + (t0_lnum << 16); \
217 #define T0_DEFENTRY(name, slot) \
221 t0_context *t0ctx = ctx; \
222 t0ctx->ip = &t0_codeblock[0]; \
223 T0_ENTER(t0ctx->ip, t0ctx->rp, slot); \
226 T0_DEFENTRY(br_pem_decoder_init_main
, 38)
228 #define T0_NEXT(t0ipp) (*(*(t0ipp)) ++)
231 br_pem_decoder_run(void *t0ctx
)
234 const unsigned char *ip
;
236 #define T0_LOCAL(x) (*(rp - 2 - (x)))
237 #define T0_POP() (*-- dp)
238 #define T0_POPi() (*(int32_t *)(-- dp))
239 #define T0_PEEK(x) (*(dp - 1 - (x)))
240 #define T0_PEEKi(x) (*(int32_t *)(dp - 1 - (x)))
241 #define T0_PUSH(v) do { *dp = (v); dp ++; } while (0)
242 #define T0_PUSHi(v) do { *(int32_t *)dp = (v); dp ++; } while (0)
243 #define T0_RPOP() (*-- rp)
244 #define T0_RPOPi() (*(int32_t *)(-- rp))
245 #define T0_RPUSH(v) do { *rp = (v); rp ++; } while (0)
246 #define T0_RPUSHi(v) do { *(int32_t *)rp = (v); rp ++; } while (0)
247 #define T0_ROLL(x) do { \
248 size_t t0len = (size_t)(x); \
249 uint32_t t0tmp = *(dp - 1 - t0len); \
250 memmove(dp - t0len - 1, dp - t0len, t0len * sizeof *dp); \
253 #define T0_SWAP() do { \
254 uint32_t t0tmp = *(dp - 2); \
255 *(dp - 2) = *(dp - 1); \
258 #define T0_ROT() do { \
259 uint32_t t0tmp = *(dp - 3); \
260 *(dp - 3) = *(dp - 2); \
261 *(dp - 2) = *(dp - 1); \
264 #define T0_NROT() do { \
265 uint32_t t0tmp = *(dp - 1); \
266 *(dp - 1) = *(dp - 2); \
267 *(dp - 2) = *(dp - 3); \
270 #define T0_PICK(x) do { \
271 uint32_t t0depth = (x); \
272 T0_PUSH(T0_PEEK(t0depth)); \
274 #define T0_CO() do { \
277 #define T0_RET() goto t0_next
279 dp
= ((t0_context
*)t0ctx
)->dp
;
280 rp
= ((t0_context
*)t0ctx
)->rp
;
281 ip
= ((t0_context
*)t0ctx
)->ip
;
288 if (t0x
< T0_INTERPRETED
) {
300 ip
= &t0_codeblock
[t0x
];
302 case 1: /* literal constant */
303 T0_PUSHi(t0_parse7E_signed(&ip
));
305 case 2: /* read local */
306 T0_PUSH(T0_LOCAL(t0_parse7E_unsigned(&ip
)));
308 case 3: /* write local */
309 T0_LOCAL(t0_parse7E_unsigned(&ip
)) = T0_POP();
312 t0off
= t0_parse7E_signed(&ip
);
315 case 5: /* jump if */
316 t0off
= t0_parse7E_signed(&ip
);
321 case 6: /* jump if not */
322 t0off
= t0_parse7E_signed(&ip
);
330 uint32_t b
= T0_POP();
331 uint32_t a
= T0_POP();
339 uint32_t b
= T0_POP();
340 uint32_t a
= T0_POP();
348 int32_t b
= T0_POPi();
349 int32_t a
= T0_POPi();
350 T0_PUSH(-(uint32_t)(a
< b
));
357 int c
= (int)T0_POPi();
358 uint32_t x
= T0_POP();
366 int32_t b
= T0_POPi();
367 int32_t a
= T0_POPi();
368 T0_PUSH(-(uint32_t)(a
<= b
));
375 uint32_t b
= T0_POP();
376 uint32_t a
= T0_POP();
377 T0_PUSH(-(uint32_t)(a
!= b
));
384 uint32_t b
= T0_POP();
385 uint32_t a
= T0_POP();
386 T0_PUSH(-(uint32_t)(a
== b
));
393 int32_t b
= T0_POPi();
394 int32_t a
= T0_POPi();
395 T0_PUSH(-(uint32_t)(a
>= b
));
402 int c
= (int)T0_POPi();
403 int32_t x
= T0_POPi();
411 uint32_t b
= T0_POP();
412 uint32_t a
= T0_POP();
425 size_t addr
= T0_POP();
426 T0_PUSH(t0_datablock
[addr
]);
444 CTX
->dest(CTX
->dest_ctx
, CTX
->buf
, CTX
->ptr
);
453 size_t addr
= T0_POP();
454 T0_PUSH(*((unsigned char *)CTX
+ addr
));
467 T0_PUSH(*CTX
->hbuf
++);
478 size_t addr
= T0_POP();
479 unsigned x
= T0_POP();
480 *((unsigned char *)CTX
+ addr
) = x
;
492 unsigned char x
= (unsigned char)T0_POP();
493 CTX
->buf
[CTX
->ptr
++] = x
;
494 if (CTX
->ptr
== sizeof CTX
->buf
) {
496 CTX
->dest(CTX
->dest_ctx
, CTX
->buf
, sizeof CTX
->buf
);
506 T0_ENTER(ip
, rp
, t0x
);
510 ((t0_context
*)t0ctx
)->dp
= dp
;
511 ((t0_context
*)t0ctx
)->rp
= rp
;
512 ((t0_context
*)t0ctx
)->ip
= ip
;