1 /* -*- buffer-read-only: t -*-
2  *
3  *      Copyright (c) 1996-1999 Malcolm Beattie
4  *
5  *      You may distribute under the terms of either the GNU General Public
6  *      License or the Artistic License, as specified in the README file.
7  *
8  */
9 /*
10  * This file is autogenerated from bytecode.pl. Changes made here will be lost.
11  */
12 
13 #define PERL_NO_GET_CONTEXT
14 #include "EXTERN.h"
15 #include "perl.h"
16 #define NO_XSLOCKS
17 #include "XSUB.h"
18 
19 #include "byterun.h"
20 #include "bytecode.h"
21 
22 
23 static const int optype_size[] = {
24     sizeof(OP),
25     sizeof(UNOP),
26     sizeof(BINOP),
27     sizeof(LOGOP),
28     sizeof(LISTOP),
29     sizeof(PMOP),
30     sizeof(SVOP),
31     sizeof(PADOP),
32     sizeof(PVOP),
33     sizeof(LOOP),
34     sizeof(COP)
35 };
36 
37 void *
bset_obj_store(pTHX_ struct byteloader_state * bstate,void * obj,I32 ix)38 bset_obj_store(pTHX_ struct byteloader_state *bstate, void *obj, I32 ix)
39 {
40     if (ix > bstate->bs_obj_list_fill) {
41 	Renew(bstate->bs_obj_list, ix + 32, void*);
42 	bstate->bs_obj_list_fill = ix + 31;
43     }
44     bstate->bs_obj_list[ix] = obj;
45     return obj;
46 }
47 
48 int
byterun(pTHX_ register struct byteloader_state * bstate)49 byterun(pTHX_ register struct byteloader_state *bstate)
50 {
51     register int insn;
52     U32 ix;
53     SV *specialsv_list[6];
54 
55     BYTECODE_HEADER_CHECK;	/* croak if incorrect platform */
56     Newx(bstate->bs_obj_list, 32, void*); /* set op objlist */
57     bstate->bs_obj_list_fill = 31;
58     bstate->bs_obj_list[0] = NULL; /* first is always Null */
59     bstate->bs_ix = 1;
60 
61     specialsv_list[0] = Nullsv;
62     specialsv_list[1] = &PL_sv_undef;
63     specialsv_list[2] = &PL_sv_yes;
64     specialsv_list[3] = &PL_sv_no;
65     specialsv_list[4] = pWARN_ALL;
66     specialsv_list[5] = pWARN_NONE;
67 
68     while ((insn = BGET_FGETC()) != EOF) {
69 	switch (insn) {
70 	  case INSN_COMMENT:		/* 35 */
71 	    {
72 		comment_t arg;
73 		BGET_comment_t(arg);
74 		arg = arg;
75 		break;
76 	    }
77 	  case INSN_NOP:		/* 10 */
78 	    {
79 		break;
80 	    }
81 	  case INSN_RET:		/* 0 */
82 	    {
83 		BSET_ret(none);
84 		break;
85 	    }
86 	  case INSN_LDSV:		/* 1 */
87 	    {
88 		svindex arg;
89 		BGET_svindex(arg);
90 		bstate->bs_sv = arg;
91 		break;
92 	    }
93 	  case INSN_LDOP:		/* 2 */
94 	    {
95 		opindex arg;
96 		BGET_opindex(arg);
97 		PL_op = arg;
98 		break;
99 	    }
100 	  case INSN_STSV:		/* 3 */
101 	    {
102 		U32 arg;
103 		BGET_U32(arg);
104 		BSET_OBJ_STORE(bstate->bs_sv, arg);
105 		break;
106 	    }
107 	  case INSN_STOP:		/* 4 */
108 	    {
109 		U32 arg;
110 		BGET_U32(arg);
111 		BSET_OBJ_STORE(PL_op, arg);
112 		break;
113 	    }
114 	  case INSN_STPV:		/* 5 */
115 	    {
116 		U32 arg;
117 		BGET_U32(arg);
118 		BSET_stpv(bstate->bs_pv.xpv_pv, arg);
119 		break;
120 	    }
121 	  case INSN_LDSPECSV:		/* 6 */
122 	    {
123 		U8 arg;
124 		BGET_U8(arg);
125 		BSET_ldspecsv(bstate->bs_sv, arg);
126 		break;
127 	    }
128 	  case INSN_LDSPECSVX:		/* 7 */
129 	    {
130 		U8 arg;
131 		BGET_U8(arg);
132 		BSET_ldspecsvx(bstate->bs_sv, arg);
133 		break;
134 	    }
135 	  case INSN_NEWSV:		/* 8 */
136 	    {
137 		U8 arg;
138 		BGET_U8(arg);
139 		BSET_newsv(bstate->bs_sv, arg);
140 		break;
141 	    }
142 	  case INSN_NEWSVX:		/* 9 */
143 	    {
144 		U32 arg;
145 		BGET_U32(arg);
146 		BSET_newsvx(bstate->bs_sv, arg);
147 		break;
148 	    }
149 	  case INSN_NEWOP:		/* 11 */
150 	    {
151 		U8 arg;
152 		BGET_U8(arg);
153 		BSET_newop(PL_op, arg);
154 		break;
155 	    }
156 	  case INSN_NEWOPX:		/* 12 */
157 	    {
158 		U16 arg;
159 		BGET_U16(arg);
160 		BSET_newopx(PL_op, arg);
161 		break;
162 	    }
163 	  case INSN_NEWOPN:		/* 13 */
164 	    {
165 		U8 arg;
166 		BGET_U8(arg);
167 		BSET_newopn(PL_op, arg);
168 		break;
169 	    }
170 	  case INSN_NEWPV:		/* 14 */
171 	    {
172 		PV arg;
173 		BGET_PV(arg);
174 		break;
175 	    }
176 	  case INSN_PV_CUR:		/* 15 */
177 	    {
178 		STRLEN arg;
179 		BGET_PADOFFSET(arg);
180 		bstate->bs_pv.xpv_cur = arg;
181 		break;
182 	    }
183 	  case INSN_PV_FREE:		/* 16 */
184 	    {
185 		BSET_pv_free(bstate->bs_pv);
186 		break;
187 	    }
188 	  case INSN_SV_UPGRADE:		/* 17 */
189 	    {
190 		U8 arg;
191 		BGET_U8(arg);
192 		BSET_sv_upgrade(bstate->bs_sv, arg);
193 		break;
194 	    }
195 	  case INSN_SV_REFCNT:		/* 18 */
196 	    {
197 		U32 arg;
198 		BGET_U32(arg);
199 		SvREFCNT(bstate->bs_sv) = arg;
200 		break;
201 	    }
202 	  case INSN_SV_REFCNT_ADD:		/* 19 */
203 	    {
204 		I32 arg;
205 		BGET_I32(arg);
206 		BSET_sv_refcnt_add(SvREFCNT(bstate->bs_sv), arg);
207 		break;
208 	    }
209 	  case INSN_SV_FLAGS:		/* 20 */
210 	    {
211 		U32 arg;
212 		BGET_U32(arg);
213 		SvFLAGS(bstate->bs_sv) = arg;
214 		break;
215 	    }
216 	  case INSN_XRV:		/* 21 */
217 	    {
218 		svindex arg;
219 		BGET_svindex(arg);
220 		BSET_xrv(bstate->bs_sv, arg);
221 		break;
222 	    }
223 	  case INSN_XPV:		/* 22 */
224 	    {
225 		BSET_xpv(bstate->bs_sv);
226 		break;
227 	    }
228 	  case INSN_XPV_CUR:		/* 23 */
229 	    {
230 		STRLEN arg;
231 		BGET_PADOFFSET(arg);
232 		BSET_xpv_cur(bstate->bs_sv, arg);
233 		break;
234 	    }
235 	  case INSN_XPV_LEN:		/* 24 */
236 	    {
237 		STRLEN arg;
238 		BGET_PADOFFSET(arg);
239 		BSET_xpv_len(bstate->bs_sv, arg);
240 		break;
241 	    }
242 	  case INSN_XIV:		/* 25 */
243 	    {
244 		IV arg;
245 		BGET_IV(arg);
246 		BSET_xiv(bstate->bs_sv, arg);
247 		break;
248 	    }
249 	  case INSN_XNV:		/* 26 */
250 	    {
251 		NV arg;
252 		BGET_NV(arg);
253 		BSET_xnv(bstate->bs_sv, arg);
254 		break;
255 	    }
256 	  case INSN_XLV_TARGOFF:		/* 27 */
257 	    {
258 		STRLEN arg;
259 		BGET_PADOFFSET(arg);
260 		LvTARGOFF(bstate->bs_sv) = arg;
261 		break;
262 	    }
263 	  case INSN_XLV_TARGLEN:		/* 28 */
264 	    {
265 		STRLEN arg;
266 		BGET_PADOFFSET(arg);
267 		LvTARGLEN(bstate->bs_sv) = arg;
268 		break;
269 	    }
270 	  case INSN_XLV_TARG:		/* 29 */
271 	    {
272 		svindex arg;
273 		BGET_svindex(arg);
274 		LvTARG(bstate->bs_sv) = arg;
275 		break;
276 	    }
277 	  case INSN_XLV_TYPE:		/* 30 */
278 	    {
279 		char arg;
280 		BGET_U8(arg);
281 		LvTYPE(bstate->bs_sv) = arg;
282 		break;
283 	    }
284 	  case INSN_XBM_USEFUL:		/* 31 */
285 	    {
286 		I32 arg;
287 		BGET_I32(arg);
288 		BmUSEFUL(bstate->bs_sv) = arg;
289 		break;
290 	    }
291 	  case INSN_XBM_PREVIOUS:		/* 32 */
292 	    {
293 		U16 arg;
294 		BGET_U16(arg);
295 		BmPREVIOUS(bstate->bs_sv) = arg;
296 		break;
297 	    }
298 	  case INSN_XBM_RARE:		/* 33 */
299 	    {
300 		U8 arg;
301 		BGET_U8(arg);
302 		BmRARE(bstate->bs_sv) = arg;
303 		break;
304 	    }
305 	  case INSN_XFM_LINES:		/* 34 */
306 	    {
307 		IV arg;
308 		BGET_IV(arg);
309 		FmLINES(bstate->bs_sv) = arg;
310 		break;
311 	    }
312 	  case INSN_XIO_LINES:		/* 36 */
313 	    {
314 		IV arg;
315 		BGET_IV(arg);
316 		IoLINES(bstate->bs_sv) = arg;
317 		break;
318 	    }
319 	  case INSN_XIO_PAGE:		/* 37 */
320 	    {
321 		IV arg;
322 		BGET_IV(arg);
323 		IoPAGE(bstate->bs_sv) = arg;
324 		break;
325 	    }
326 	  case INSN_XIO_PAGE_LEN:		/* 38 */
327 	    {
328 		IV arg;
329 		BGET_IV(arg);
330 		IoPAGE_LEN(bstate->bs_sv) = arg;
331 		break;
332 	    }
333 	  case INSN_XIO_LINES_LEFT:		/* 39 */
334 	    {
335 		IV arg;
336 		BGET_IV(arg);
337 		IoLINES_LEFT(bstate->bs_sv) = arg;
338 		break;
339 	    }
340 	  case INSN_XIO_TOP_NAME:		/* 40 */
341 	    {
342 		pvindex arg;
343 		BGET_pvindex(arg);
344 		IoTOP_NAME(bstate->bs_sv) = arg;
345 		break;
346 	    }
347 	  case INSN_XIO_TOP_GV:		/* 41 */
348 	    {
349 		svindex arg;
350 		BGET_svindex(arg);
351 		*(SV**)&IoTOP_GV(bstate->bs_sv) = arg;
352 		break;
353 	    }
354 	  case INSN_XIO_FMT_NAME:		/* 42 */
355 	    {
356 		pvindex arg;
357 		BGET_pvindex(arg);
358 		IoFMT_NAME(bstate->bs_sv) = arg;
359 		break;
360 	    }
361 	  case INSN_XIO_FMT_GV:		/* 43 */
362 	    {
363 		svindex arg;
364 		BGET_svindex(arg);
365 		*(SV**)&IoFMT_GV(bstate->bs_sv) = arg;
366 		break;
367 	    }
368 	  case INSN_XIO_BOTTOM_NAME:		/* 44 */
369 	    {
370 		pvindex arg;
371 		BGET_pvindex(arg);
372 		IoBOTTOM_NAME(bstate->bs_sv) = arg;
373 		break;
374 	    }
375 	  case INSN_XIO_BOTTOM_GV:		/* 45 */
376 	    {
377 		svindex arg;
378 		BGET_svindex(arg);
379 		*(SV**)&IoBOTTOM_GV(bstate->bs_sv) = arg;
380 		break;
381 	    }
382 	  case INSN_XIO_SUBPROCESS:		/* 46 */
383 	    {
384 		short arg;
385 		BGET_U16(arg);
386 		IoSUBPROCESS(bstate->bs_sv) = arg;
387 		break;
388 	    }
389 	  case INSN_XIO_TYPE:		/* 47 */
390 	    {
391 		char arg;
392 		BGET_U8(arg);
393 		IoTYPE(bstate->bs_sv) = arg;
394 		break;
395 	    }
396 	  case INSN_XIO_FLAGS:		/* 48 */
397 	    {
398 		char arg;
399 		BGET_U8(arg);
400 		IoFLAGS(bstate->bs_sv) = arg;
401 		break;
402 	    }
403 	  case INSN_XCV_XSUBANY:		/* 49 */
404 	    {
405 		svindex arg;
406 		BGET_svindex(arg);
407 		*(SV**)&CvXSUBANY(bstate->bs_sv).any_ptr = arg;
408 		break;
409 	    }
410 	  case INSN_XCV_STASH:		/* 50 */
411 	    {
412 		svindex arg;
413 		BGET_svindex(arg);
414 		*(SV**)&CvSTASH(bstate->bs_sv) = arg;
415 		break;
416 	    }
417 	  case INSN_XCV_START:		/* 51 */
418 	    {
419 		opindex arg;
420 		BGET_opindex(arg);
421 		CvSTART(bstate->bs_sv) = arg;
422 		break;
423 	    }
424 	  case INSN_XCV_ROOT:		/* 52 */
425 	    {
426 		opindex arg;
427 		BGET_opindex(arg);
428 		CvROOT(bstate->bs_sv) = arg;
429 		break;
430 	    }
431 	  case INSN_XCV_GV:		/* 53 */
432 	    {
433 		svindex arg;
434 		BGET_svindex(arg);
435 		*(SV**)&CvGV(bstate->bs_sv) = arg;
436 		break;
437 	    }
438 	  case INSN_XCV_FILE:		/* 54 */
439 	    {
440 		pvindex arg;
441 		BGET_pvindex(arg);
442 		CvFILE(bstate->bs_sv) = arg;
443 		break;
444 	    }
445 	  case INSN_XCV_DEPTH:		/* 55 */
446 	    {
447 		long arg;
448 		BGET_long(arg);
449 		CvDEPTH(bstate->bs_sv) = arg;
450 		break;
451 	    }
452 	  case INSN_XCV_PADLIST:		/* 56 */
453 	    {
454 		svindex arg;
455 		BGET_svindex(arg);
456 		*(SV**)&CvPADLIST(bstate->bs_sv) = arg;
457 		break;
458 	    }
459 	  case INSN_XCV_OUTSIDE:		/* 57 */
460 	    {
461 		svindex arg;
462 		BGET_svindex(arg);
463 		*(SV**)&CvOUTSIDE(bstate->bs_sv) = arg;
464 		break;
465 	    }
466 	  case INSN_XCV_OUTSIDE_SEQ:		/* 58 */
467 	    {
468 		U32 arg;
469 		BGET_U32(arg);
470 		CvOUTSIDE_SEQ(bstate->bs_sv) = arg;
471 		break;
472 	    }
473 	  case INSN_XCV_FLAGS:		/* 59 */
474 	    {
475 		U16 arg;
476 		BGET_U16(arg);
477 		CvFLAGS(bstate->bs_sv) = arg;
478 		break;
479 	    }
480 	  case INSN_AV_EXTEND:		/* 60 */
481 	    {
482 		SSize_t arg;
483 		BGET_PADOFFSET(arg);
484 		BSET_av_extend(bstate->bs_sv, arg);
485 		break;
486 	    }
487 	  case INSN_AV_PUSHX:		/* 61 */
488 	    {
489 		svindex arg;
490 		BGET_svindex(arg);
491 		BSET_av_pushx(bstate->bs_sv, arg);
492 		break;
493 	    }
494 	  case INSN_AV_PUSH:		/* 62 */
495 	    {
496 		svindex arg;
497 		BGET_svindex(arg);
498 		BSET_av_push(bstate->bs_sv, arg);
499 		break;
500 	    }
501 	  case INSN_XAV_FILL:		/* 63 */
502 	    {
503 		SSize_t arg;
504 		BGET_PADOFFSET(arg);
505 		AvFILLp(bstate->bs_sv) = arg;
506 		break;
507 	    }
508 	  case INSN_XAV_MAX:		/* 64 */
509 	    {
510 		SSize_t arg;
511 		BGET_PADOFFSET(arg);
512 		AvMAX(bstate->bs_sv) = arg;
513 		break;
514 	    }
515 	  case INSN_XAV_FLAGS:		/* 65 */
516 	    {
517 		U8 arg;
518 		BGET_U8(arg);
519 		AvFLAGS(bstate->bs_sv) = arg;
520 		break;
521 	    }
522 	  case INSN_XHV_RITER:		/* 66 */
523 	    {
524 		I32 arg;
525 		BGET_I32(arg);
526 		HvRITER(bstate->bs_sv) = arg;
527 		break;
528 	    }
529 	  case INSN_XHV_NAME:		/* 67 */
530 	    {
531 		pvindex arg;
532 		BGET_pvindex(arg);
533 		BSET_xhv_name(bstate->bs_sv, arg);
534 		break;
535 	    }
536 	  case INSN_XHV_PMROOT:		/* 68 */
537 	    {
538 		opindex arg;
539 		BGET_opindex(arg);
540 		*(OP**)&HvPMROOT(bstate->bs_sv) = arg;
541 		break;
542 	    }
543 	  case INSN_HV_STORE:		/* 69 */
544 	    {
545 		svindex arg;
546 		BGET_svindex(arg);
547 		BSET_hv_store(bstate->bs_sv, arg);
548 		break;
549 	    }
550 	  case INSN_SV_MAGIC:		/* 70 */
551 	    {
552 		char arg;
553 		BGET_U8(arg);
554 		BSET_sv_magic(bstate->bs_sv, arg);
555 		break;
556 	    }
557 	  case INSN_MG_OBJ:		/* 71 */
558 	    {
559 		svindex arg;
560 		BGET_svindex(arg);
561 		SvMAGIC(bstate->bs_sv)->mg_obj = arg;
562 		break;
563 	    }
564 	  case INSN_MG_PRIVATE:		/* 72 */
565 	    {
566 		U16 arg;
567 		BGET_U16(arg);
568 		SvMAGIC(bstate->bs_sv)->mg_private = arg;
569 		break;
570 	    }
571 	  case INSN_MG_FLAGS:		/* 73 */
572 	    {
573 		U8 arg;
574 		BGET_U8(arg);
575 		SvMAGIC(bstate->bs_sv)->mg_flags = arg;
576 		break;
577 	    }
578 	  case INSN_MG_NAME:		/* 74 */
579 	    {
580 		pvcontents arg;
581 		BGET_pvcontents(arg);
582 		BSET_mg_name(SvMAGIC(bstate->bs_sv), arg);
583 		break;
584 	    }
585 	  case INSN_MG_NAMEX:		/* 75 */
586 	    {
587 		svindex arg;
588 		BGET_svindex(arg);
589 		BSET_mg_namex(SvMAGIC(bstate->bs_sv), arg);
590 		break;
591 	    }
592 	  case INSN_XMG_STASH:		/* 76 */
593 	    {
594 		svindex arg;
595 		BGET_svindex(arg);
596 		BSET_xmg_stash(bstate->bs_sv, arg);
597 		break;
598 	    }
599 	  case INSN_GV_FETCHPV:		/* 77 */
600 	    {
601 		strconst arg;
602 		BGET_strconst(arg);
603 		BSET_gv_fetchpv(bstate->bs_sv, arg);
604 		break;
605 	    }
606 	  case INSN_GV_FETCHPVX:		/* 78 */
607 	    {
608 		strconst arg;
609 		BGET_strconst(arg);
610 		BSET_gv_fetchpvx(bstate->bs_sv, arg);
611 		break;
612 	    }
613 	  case INSN_GV_STASHPV:		/* 79 */
614 	    {
615 		strconst arg;
616 		BGET_strconst(arg);
617 		BSET_gv_stashpv(bstate->bs_sv, arg);
618 		break;
619 	    }
620 	  case INSN_GV_STASHPVX:		/* 80 */
621 	    {
622 		strconst arg;
623 		BGET_strconst(arg);
624 		BSET_gv_stashpvx(bstate->bs_sv, arg);
625 		break;
626 	    }
627 	  case INSN_GP_SV:		/* 81 */
628 	    {
629 		svindex arg;
630 		BGET_svindex(arg);
631 		GvSV(bstate->bs_sv) = arg;
632 		break;
633 	    }
634 	  case INSN_GP_REFCNT:		/* 82 */
635 	    {
636 		U32 arg;
637 		BGET_U32(arg);
638 		GvREFCNT(bstate->bs_sv) = arg;
639 		break;
640 	    }
641 	  case INSN_GP_REFCNT_ADD:		/* 83 */
642 	    {
643 		I32 arg;
644 		BGET_I32(arg);
645 		BSET_gp_refcnt_add(GvREFCNT(bstate->bs_sv), arg);
646 		break;
647 	    }
648 	  case INSN_GP_AV:		/* 84 */
649 	    {
650 		svindex arg;
651 		BGET_svindex(arg);
652 		*(SV**)&GvAV(bstate->bs_sv) = arg;
653 		break;
654 	    }
655 	  case INSN_GP_HV:		/* 85 */
656 	    {
657 		svindex arg;
658 		BGET_svindex(arg);
659 		*(SV**)&GvHV(bstate->bs_sv) = arg;
660 		break;
661 	    }
662 	  case INSN_GP_CV:		/* 86 */
663 	    {
664 		svindex arg;
665 		BGET_svindex(arg);
666 		*(SV**)&GvCV(bstate->bs_sv) = arg;
667 		break;
668 	    }
669 	  case INSN_GP_FILE:		/* 87 */
670 	    {
671 		pvindex arg;
672 		BGET_pvindex(arg);
673 		GvFILE(bstate->bs_sv) = arg;
674 		break;
675 	    }
676 	  case INSN_GP_IO:		/* 88 */
677 	    {
678 		svindex arg;
679 		BGET_svindex(arg);
680 		*(SV**)&GvIOp(bstate->bs_sv) = arg;
681 		break;
682 	    }
683 	  case INSN_GP_FORM:		/* 89 */
684 	    {
685 		svindex arg;
686 		BGET_svindex(arg);
687 		*(SV**)&GvFORM(bstate->bs_sv) = arg;
688 		break;
689 	    }
690 	  case INSN_GP_CVGEN:		/* 90 */
691 	    {
692 		U32 arg;
693 		BGET_U32(arg);
694 		GvCVGEN(bstate->bs_sv) = arg;
695 		break;
696 	    }
697 	  case INSN_GP_LINE:		/* 91 */
698 	    {
699 		line_t arg;
700 		BGET_U32(arg);
701 		GvLINE(bstate->bs_sv) = arg;
702 		break;
703 	    }
704 	  case INSN_GP_SHARE:		/* 92 */
705 	    {
706 		svindex arg;
707 		BGET_svindex(arg);
708 		BSET_gp_share(bstate->bs_sv, arg);
709 		break;
710 	    }
711 	  case INSN_XGV_FLAGS:		/* 93 */
712 	    {
713 		U8 arg;
714 		BGET_U8(arg);
715 		GvFLAGS(bstate->bs_sv) = arg;
716 		break;
717 	    }
718 	  case INSN_OP_NEXT:		/* 94 */
719 	    {
720 		opindex arg;
721 		BGET_opindex(arg);
722 		PL_op->op_next = arg;
723 		break;
724 	    }
725 	  case INSN_OP_SIBLING:		/* 95 */
726 	    {
727 		opindex arg;
728 		BGET_opindex(arg);
729 		PL_op->op_sibling = arg;
730 		break;
731 	    }
732 	  case INSN_OP_PPADDR:		/* 96 */
733 	    {
734 		strconst arg;
735 		BGET_strconst(arg);
736 		BSET_op_ppaddr(PL_op->op_ppaddr, arg);
737 		break;
738 	    }
739 	  case INSN_OP_TARG:		/* 97 */
740 	    {
741 		PADOFFSET arg;
742 		BGET_PADOFFSET(arg);
743 		PL_op->op_targ = arg;
744 		break;
745 	    }
746 	  case INSN_OP_TYPE:		/* 98 */
747 	    {
748 		OPCODE arg;
749 		BGET_U16(arg);
750 		BSET_op_type(PL_op, arg);
751 		break;
752 	    }
753 	  case INSN_OP_SEQ:		/* 99 */
754 	    {
755 		U16 arg;
756 		BGET_U16(arg);
757 		PL_op->op_seq = arg;
758 		break;
759 	    }
760 	  case INSN_OP_FLAGS:		/* 100 */
761 	    {
762 		U8 arg;
763 		BGET_U8(arg);
764 		PL_op->op_flags = arg;
765 		break;
766 	    }
767 	  case INSN_OP_PRIVATE:		/* 101 */
768 	    {
769 		U8 arg;
770 		BGET_U8(arg);
771 		PL_op->op_private = arg;
772 		break;
773 	    }
774 	  case INSN_OP_FIRST:		/* 102 */
775 	    {
776 		opindex arg;
777 		BGET_opindex(arg);
778 		cUNOP->op_first = arg;
779 		break;
780 	    }
781 	  case INSN_OP_LAST:		/* 103 */
782 	    {
783 		opindex arg;
784 		BGET_opindex(arg);
785 		cBINOP->op_last = arg;
786 		break;
787 	    }
788 	  case INSN_OP_OTHER:		/* 104 */
789 	    {
790 		opindex arg;
791 		BGET_opindex(arg);
792 		cLOGOP->op_other = arg;
793 		break;
794 	    }
795 	  case INSN_OP_PMREPLROOT:		/* 105 */
796 	    {
797 		opindex arg;
798 		BGET_opindex(arg);
799 		cPMOP->op_pmreplroot = arg;
800 		break;
801 	    }
802 	  case INSN_OP_PMREPLSTART:		/* 106 */
803 	    {
804 		opindex arg;
805 		BGET_opindex(arg);
806 		cPMOP->op_pmreplstart = arg;
807 		break;
808 	    }
809 	  case INSN_OP_PMNEXT:		/* 107 */
810 	    {
811 		opindex arg;
812 		BGET_opindex(arg);
813 		*(OP**)&cPMOP->op_pmnext = arg;
814 		break;
815 	    }
816 #ifdef USE_ITHREADS
817 	  case INSN_OP_PMSTASHPV:		/* 108 */
818 	    {
819 		pvindex arg;
820 		BGET_pvindex(arg);
821 		BSET_op_pmstashpv(cPMOP, arg);
822 		break;
823 	    }
824 	  case INSN_OP_PMREPLROOTPO:		/* 109 */
825 	    {
826 		PADOFFSET arg;
827 		BGET_PADOFFSET(arg);
828 		cPMOP->op_pmreplroot = (OP*)arg;
829 		break;
830 	    }
831 #else
832 	  case INSN_OP_PMSTASH:		/* 110 */
833 	    {
834 		svindex arg;
835 		BGET_svindex(arg);
836 		*(SV**)&cPMOP->op_pmstash = arg;
837 		break;
838 	    }
839 	  case INSN_OP_PMREPLROOTGV:		/* 111 */
840 	    {
841 		svindex arg;
842 		BGET_svindex(arg);
843 		*(SV**)&cPMOP->op_pmreplroot = arg;
844 		break;
845 	    }
846 #endif
847 	  case INSN_PREGCOMP:		/* 112 */
848 	    {
849 		pvcontents arg;
850 		BGET_pvcontents(arg);
851 		BSET_pregcomp(PL_op, arg);
852 		break;
853 	    }
854 	  case INSN_OP_PMFLAGS:		/* 113 */
855 	    {
856 		U16 arg;
857 		BGET_U16(arg);
858 		cPMOP->op_pmflags = arg;
859 		break;
860 	    }
861 	  case INSN_OP_PMPERMFLAGS:		/* 114 */
862 	    {
863 		U16 arg;
864 		BGET_U16(arg);
865 		cPMOP->op_pmpermflags = arg;
866 		break;
867 	    }
868 	  case INSN_OP_PMDYNFLAGS:		/* 115 */
869 	    {
870 		U8 arg;
871 		BGET_U8(arg);
872 		cPMOP->op_pmdynflags = arg;
873 		break;
874 	    }
875 	  case INSN_OP_SV:		/* 116 */
876 	    {
877 		svindex arg;
878 		BGET_svindex(arg);
879 		cSVOP->op_sv = arg;
880 		break;
881 	    }
882 	  case INSN_OP_PADIX:		/* 117 */
883 	    {
884 		PADOFFSET arg;
885 		BGET_PADOFFSET(arg);
886 		cPADOP->op_padix = arg;
887 		break;
888 	    }
889 	  case INSN_OP_PV:		/* 118 */
890 	    {
891 		pvcontents arg;
892 		BGET_pvcontents(arg);
893 		cPVOP->op_pv = arg;
894 		break;
895 	    }
896 	  case INSN_OP_PV_TR:		/* 119 */
897 	    {
898 		op_tr_array arg;
899 		BGET_op_tr_array(arg);
900 		cPVOP->op_pv = arg;
901 		break;
902 	    }
903 	  case INSN_OP_REDOOP:		/* 120 */
904 	    {
905 		opindex arg;
906 		BGET_opindex(arg);
907 		cLOOP->op_redoop = arg;
908 		break;
909 	    }
910 	  case INSN_OP_NEXTOP:		/* 121 */
911 	    {
912 		opindex arg;
913 		BGET_opindex(arg);
914 		cLOOP->op_nextop = arg;
915 		break;
916 	    }
917 	  case INSN_OP_LASTOP:		/* 122 */
918 	    {
919 		opindex arg;
920 		BGET_opindex(arg);
921 		cLOOP->op_lastop = arg;
922 		break;
923 	    }
924 	  case INSN_COP_LABEL:		/* 123 */
925 	    {
926 		pvindex arg;
927 		BGET_pvindex(arg);
928 		cCOP->cop_label = arg;
929 		break;
930 	    }
931 #ifdef USE_ITHREADS
932 	  case INSN_COP_STASHPV:		/* 124 */
933 	    {
934 		pvindex arg;
935 		BGET_pvindex(arg);
936 		BSET_cop_stashpv(cCOP, arg);
937 		break;
938 	    }
939 	  case INSN_COP_FILE:		/* 125 */
940 	    {
941 		pvindex arg;
942 		BGET_pvindex(arg);
943 		BSET_cop_file(cCOP, arg);
944 		break;
945 	    }
946 #else
947 	  case INSN_COP_STASH:		/* 126 */
948 	    {
949 		svindex arg;
950 		BGET_svindex(arg);
951 		BSET_cop_stash(cCOP, arg);
952 		break;
953 	    }
954 	  case INSN_COP_FILEGV:		/* 127 */
955 	    {
956 		svindex arg;
957 		BGET_svindex(arg);
958 		BSET_cop_filegv(cCOP, arg);
959 		break;
960 	    }
961 #endif
962 	  case INSN_COP_SEQ:		/* 128 */
963 	    {
964 		U32 arg;
965 		BGET_U32(arg);
966 		cCOP->cop_seq = arg;
967 		break;
968 	    }
969 	  case INSN_COP_ARYBASE:		/* 129 */
970 	    {
971 		I32 arg;
972 		BGET_I32(arg);
973 		cCOP->cop_arybase = arg;
974 		break;
975 	    }
976 	  case INSN_COP_LINE:		/* 130 */
977 	    {
978 		line_t arg;
979 		BGET_U32(arg);
980 		cCOP->cop_line = arg;
981 		break;
982 	    }
983 	  case INSN_COP_IO:		/* 131 */
984 	    {
985 		svindex arg;
986 		BGET_svindex(arg);
987 		cCOP->cop_io = arg;
988 		break;
989 	    }
990 	  case INSN_COP_WARNINGS:		/* 132 */
991 	    {
992 		svindex arg;
993 		BGET_svindex(arg);
994 		cCOP->cop_warnings = arg;
995 		break;
996 	    }
997 	  case INSN_MAIN_START:		/* 133 */
998 	    {
999 		opindex arg;
1000 		BGET_opindex(arg);
1001 		PL_main_start = arg;
1002 		break;
1003 	    }
1004 	  case INSN_MAIN_ROOT:		/* 134 */
1005 	    {
1006 		opindex arg;
1007 		BGET_opindex(arg);
1008 		PL_main_root = arg;
1009 		break;
1010 	    }
1011 	  case INSN_MAIN_CV:		/* 135 */
1012 	    {
1013 		svindex arg;
1014 		BGET_svindex(arg);
1015 		*(SV**)&PL_main_cv = arg;
1016 		break;
1017 	    }
1018 	  case INSN_CURPAD:		/* 136 */
1019 	    {
1020 		svindex arg;
1021 		BGET_svindex(arg);
1022 		BSET_curpad(PL_curpad, arg);
1023 		break;
1024 	    }
1025 	  case INSN_PUSH_BEGIN:		/* 137 */
1026 	    {
1027 		svindex arg;
1028 		BGET_svindex(arg);
1029 		BSET_push_begin(PL_beginav, arg);
1030 		break;
1031 	    }
1032 	  case INSN_PUSH_INIT:		/* 138 */
1033 	    {
1034 		svindex arg;
1035 		BGET_svindex(arg);
1036 		BSET_push_init(PL_initav, arg);
1037 		break;
1038 	    }
1039 	  case INSN_PUSH_END:		/* 139 */
1040 	    {
1041 		svindex arg;
1042 		BGET_svindex(arg);
1043 		BSET_push_end(PL_endav, arg);
1044 		break;
1045 	    }
1046 	  case INSN_CURSTASH:		/* 140 */
1047 	    {
1048 		svindex arg;
1049 		BGET_svindex(arg);
1050 		*(SV**)&PL_curstash = arg;
1051 		break;
1052 	    }
1053 	  case INSN_DEFSTASH:		/* 141 */
1054 	    {
1055 		svindex arg;
1056 		BGET_svindex(arg);
1057 		*(SV**)&PL_defstash = arg;
1058 		break;
1059 	    }
1060 	  case INSN_DATA:		/* 142 */
1061 	    {
1062 		U8 arg;
1063 		BGET_U8(arg);
1064 		BSET_data(none, arg);
1065 		break;
1066 	    }
1067 	  case INSN_INCAV:		/* 143 */
1068 	    {
1069 		svindex arg;
1070 		BGET_svindex(arg);
1071 		*(SV**)&GvAV(PL_incgv) = arg;
1072 		break;
1073 	    }
1074 	  case INSN_LOAD_GLOB:		/* 144 */
1075 	    {
1076 		svindex arg;
1077 		BGET_svindex(arg);
1078 		BSET_load_glob(none, arg);
1079 		break;
1080 	    }
1081 #ifdef USE_ITHREADS
1082 	  case INSN_REGEX_PADAV:		/* 145 */
1083 	    {
1084 		svindex arg;
1085 		BGET_svindex(arg);
1086 		*(SV**)&PL_regex_padav = arg;
1087 		break;
1088 	    }
1089 #endif
1090 	  case INSN_DOWARN:		/* 146 */
1091 	    {
1092 		U8 arg;
1093 		BGET_U8(arg);
1094 		PL_dowarn = arg;
1095 		break;
1096 	    }
1097 	  case INSN_COMPPAD_NAME:		/* 147 */
1098 	    {
1099 		svindex arg;
1100 		BGET_svindex(arg);
1101 		*(SV**)&PL_comppad_name = arg;
1102 		break;
1103 	    }
1104 	  case INSN_XGV_STASH:		/* 148 */
1105 	    {
1106 		svindex arg;
1107 		BGET_svindex(arg);
1108 		*(SV**)&GvSTASH(bstate->bs_sv) = arg;
1109 		break;
1110 	    }
1111 	  case INSN_SIGNAL:		/* 149 */
1112 	    {
1113 		strconst arg;
1114 		BGET_strconst(arg);
1115 		BSET_signal(bstate->bs_sv, arg);
1116 		break;
1117 	    }
1118 	  case INSN_FORMFEED:		/* 150 */
1119 	    {
1120 		svindex arg;
1121 		BGET_svindex(arg);
1122 		PL_formfeed = arg;
1123 		break;
1124 	    }
1125 	  default:
1126 	    Perl_croak(aTHX_ "Illegal bytecode instruction %d\n", insn);
1127 	    /* NOTREACHED */
1128 	}
1129     }
1130     return 0;
1131 }
1132 
1133 /* ex: set ro: */
1134