1use crate::term::{self, Allocation, Atom, List, Register, Term, YRegister};
9use crate::{Decode, Encode};
10use beamcode_derive::Opcode;
11
12pub trait Opcode {
13 const CODE: u8;
14}
15
16#[derive(Debug, Clone, Decode, Encode)]
17pub enum Instruction {
18 Allocate(Allocate),
19 AllocateHeap(AllocateHeap),
20 AllocateHeapZero(AllocateHeapZero),
21 AllocateZero(AllocateZero),
22 Apply(Apply),
23 ApplyLast(ApplyLast),
24 Badmatch(Badmatch),
25 Badrecord(Badrecord),
26 Bif0(Bif0),
27 Bif1(Bif1),
28 Bif2(Bif2),
29 BsAdd(BsAdd),
30 BsAppend(BsAppend),
31 BsBitsToBytes(BsBitsToBytes),
33 BsBitsToBytes2(BsBitsToBytes2),
35 BsContextToBinary(BsContextToBinary),
36 BsCreateBin(BsCreateBin),
37 BsFinal(BsFinal),
39 BsFinal2(BsFinal2),
41 BsGetBinary(BsGetBinary),
43 BsGetBinary2(BsGetBinary2),
44 BsGetFloat(BsGetFloat),
46 BsGetFloat2(BsGetFloat2),
47 BsGetInteger(BsGetInteger),
49 BsGetInteger2(BsGetInteger2),
50 BsGetPosition(BsGetPosition),
51 BsGetTail(BsGetTail),
52 BsGetUtf16(BsGetUtf16),
53 BsGetUtf32(BsGetUtf32),
54 BsGetUtf8(BsGetUtf8),
55 BsInit(BsInit),
57 BsInit2(BsInit2),
58 BsInitBits(BsInitBits),
59 BsInitWritable(BsInitWritable),
60 BsMatchString(BsMatchString),
61 BsNeedBuf(BsNeedBuf),
62 BsPrivateAppend(BsPrivateAppend),
63 BsPutBinary(BsPutBinary),
64 BsPutFloat(BsPutFloat),
65 BsPutInteger(BsPutInteger),
66 BsPutString(BsPutString),
67 BsPutUtf32(BsPutUtf32),
68 BsPutUtf16(BsPutUtf16),
69 BsPutUtf8(BsPutUtf8),
70 BsRestore(BsRestore),
72 BsRestore2(BsRestore2),
73 BsSave(BsSave),
74 BsSave2(BsSave2),
75 BsSetPosition(BsSetPosition),
76 BsSkipBits(BsSkipBits),
77 BsSkipBits2(BsSkipBits2),
78 BsSkipUtf32(BsSkipUtf32),
79 BsSkipUtf16(BsSkipUtf16),
80 BsSkipUtf8(BsSkipUtf8),
81 BsStartMatch(BsStartMatch),
83 BsStartMatch2(BsStartMatch2),
84 BsStartMatch3(BsStartMatch3),
85 BsStartMatch4(BsStartMatch4),
86 BsTestTail(BsTestTail),
88 BsTestTail2(BsTestTail2),
89 BsTestUnit(BsTestUnit),
90 BsUtf16Size(BsUtf16Size),
91 BsUtf8Size(BsUtf8Size),
92 BuildStacktrace(BuildStacktrace),
93 Call(Call),
94 CallExt(CallExt),
95 CallExtLast(CallExtLast),
96 CallExtOnly(CallExtOnly),
97 CallFun(CallFun),
98 CallFun2(CallFun2),
99 CallLast(CallLast),
100 CallOnly(CallOnly),
101 CaseEnd(CaseEnd),
102 Catch(Catch),
103 CatchEnd(CatchEnd),
104 Deallocate(Deallocate),
105 Fadd(Fadd),
106 Fcheckerror(Fcheckerror),
107 Fclearerror(Fclearerror),
108 Fconv(Fconv),
109 Fdiv(Fdiv),
110 Fmove(Fmove),
111 Fmul(Fmul),
112 Fnegate(Fnegate),
113 Fsub(Fsub),
114 FuncInfo(FuncInfo),
115 GcBif1(GcBif1),
116 GcBif2(GcBif2),
117 GcBif3(GcBif3),
118 GetHd(GetHd),
119 GetList(GetList),
120 GetMapElement(GetMapElement),
121 GetTl(GetTl),
122 GetTupleElement(GetTupleElement),
123 HasMapFields(HasMapFields),
124 IfEnd(IfEnd),
125 Init(Init),
126 InitYregs(InitYregs),
127 IntBand(IntBand),
129 IntBnot(IntBnot),
131 IntBor(IntBor),
133 IntBsl(IntBsl),
135 IntBsr(IntBsr),
137 IntBxor(IntBxor),
139 IntCodeEnd(IntCodeEnd),
140 IntDiv(IntDiv),
142 IntRem(IntRem),
144 IsAtom(IsAtom),
145 IsBinary(IsBinary),
146 IsBitstr(IsBitstr),
147 IsBoolean(IsBoolean),
148 IsConstant(IsConstant),
150 IsEq(IsEq),
151 IsEqExact(IsEqExact),
152 IsFloat(IsFloat),
153 IsFunction(IsFunction),
154 IsFunction2(IsFunction2),
155 IsGe(IsGe),
156 IsInteger(IsInteger),
157 IsList(IsList),
158 IsLt(IsLt),
159 IsMap(IsMap),
160 IsNe(IsNe),
161 IsNeExact(IsNeExact),
162 IsNil(IsNil),
163 IsNonemptyList(IsNonemptyList),
164 IsNumber(IsNumber),
165 IsPid(IsPid),
166 IsPort(IsPort),
167 IsReference(IsReference),
168 IsTaggedTuple(IsTaggedTuple),
169 IsTuple(IsTuple),
170 Jump(Jump),
171 Label(Label),
172 Line(Line),
173 LoopRec(LoopRec),
174 LoopRecEnd(LoopRecEnd),
175 MakeFun(MakeFun),
177 MakeFun2(MakeFun2),
178 MakeFun3(MakeFun3),
179 MDiv(MDiv),
181 Move(Move),
182 MPlus(MPlus),
184 MMinus(MMinus),
186 MTimes(MTimes),
188 NifStart(NifStart),
189 OnLoad(OnLoad),
190 Put(Put),
191 PutList(PutList),
192 PutLiteral(PutLiteral),
194 PutMapAssoc(PutMapAssoc),
195 PutMapExact(PutMapExact),
196 PutString(PutString),
198 PutTuple(PutTuple),
199 PutTuple2(PutTuple2),
200 Raise(Raise),
201 RawRaise(RawRaise),
202 RecvMark(RecvMark),
203 RecvMarkerBind(RecvMarkerBind),
204 RecvMarkerClear(RecvMarkerClear),
205 RecvMarkerReserve(RecvMarkerReserve),
206 RecvMarkerUse(RecvMarkerUse),
207 RecvSet(RecvSet),
208 Return(Return),
209 RemoveMessage(RemoveMessage),
210 SelectTupleArity(SelectTupleArity),
211 SelectVal(SelectVal),
212 Send(Send),
213 SetTupleElement(SetTupleElement),
214 Swap(Swap),
215 TestArity(TestArity),
216 TestHeap(TestHeap),
217 Timeout(Timeout),
218 Trim(Trim),
219 Try(Try),
220 TryCase(TryCase),
221 TryCaseEnd(TryCaseEnd),
222 TryEnd(TryEnd),
223 Wait(Wait),
224 WaitTimeout(WaitTimeout),
225}
226
227#[derive(Debug, Clone, Opcode, Decode, Encode)]
228#[opcode(1)]
229pub struct Label {
230 pub literal: usize,
231}
232
233#[derive(Debug, Clone, Opcode, Decode, Encode)]
234#[opcode(2)]
235pub struct FuncInfo {
236 pub module: Atom,
237 pub function: Atom,
238 pub arity: usize,
239}
240
241#[derive(Debug, Clone, Opcode, Decode, Encode)]
242#[opcode(3)]
243pub struct IntCodeEnd {}
244
245#[derive(Debug, Clone, Opcode, Decode, Encode)]
246#[opcode(4)]
247pub struct Call {
248 pub arity: usize,
249 pub label: term::Label,
250}
251
252#[derive(Debug, Clone, Opcode, Decode, Encode)]
253#[opcode(5)]
254pub struct CallLast {
255 pub arg1: Term,
256 pub arg2: Term,
257 pub arg3: Term,
258}
259
260#[derive(Debug, Clone, Opcode, Decode, Encode)]
261#[opcode(6)]
262pub struct CallOnly {
263 pub arity: usize,
264 pub label: term::Label,
265}
266
267#[derive(Debug, Clone, Opcode, Decode, Encode)]
268#[opcode(7)]
269pub struct CallExt {
270 pub arity: usize,
271 pub destination: usize,
272}
273
274#[derive(Debug, Clone, Opcode, Decode, Encode)]
275#[opcode(8)]
276pub struct CallExtLast {
277 pub arity: usize,
278 pub destination: usize,
279 pub deallocate: usize,
280}
281
282#[derive(Debug, Clone, Opcode, Decode, Encode)]
283#[opcode(9)]
284pub struct Bif0 {
285 pub arg1: Term,
286 pub arg2: Term,
287}
288
289#[derive(Debug, Clone, Opcode, Decode, Encode)]
290#[opcode(10)]
291pub struct Bif1 {
292 pub arg1: Term,
293 pub arg2: Term,
294 pub arg3: Term,
295 pub arg4: Term,
296}
297
298#[derive(Debug, Clone, Opcode, Decode, Encode)]
299#[opcode(11)]
300pub struct Bif2 {
301 pub arg1: Term,
302 pub arg2: Term,
303 pub arg3: Term,
304 pub arg4: Term,
305 pub arg5: Term,
306}
307
308#[derive(Debug, Clone, Opcode, Decode, Encode)]
309#[opcode(12)]
310pub struct Allocate {
311 pub stack_need: Allocation,
312 pub live: usize,
313}
314
315#[derive(Debug, Clone, Opcode, Decode, Encode)]
316#[opcode(13)]
317pub struct AllocateHeap {
318 pub stack_need: Allocation,
319 pub heap_need: Allocation,
320 pub live: usize,
321}
322
323#[derive(Debug, Clone, Opcode, Decode, Encode)]
324#[opcode(14)]
325pub struct AllocateZero {
326 pub arg1: Term,
327 pub arg2: Term,
328}
329
330#[derive(Debug, Clone, Opcode, Decode, Encode)]
331#[opcode(15)]
332pub struct AllocateHeapZero {
333 pub stack_need: Allocation,
334 pub heap_need: Allocation,
335 pub live: usize,
336}
337
338#[derive(Debug, Clone, Opcode, Decode, Encode)]
339#[opcode(16)]
340pub struct TestHeap {
341 pub heap_need: Allocation,
342 pub live: usize,
343}
344
345#[derive(Debug, Clone, Opcode, Decode, Encode)]
346#[opcode(17)]
347pub struct Init {
348 pub arg1: Term,
349}
350
351#[derive(Debug, Clone, Opcode, Decode, Encode)]
352#[opcode(18)]
353pub struct Deallocate {
354 pub n: usize,
355}
356
357#[derive(Debug, Clone, Opcode, Decode, Encode)]
358#[opcode(19)]
359pub struct Return {}
360
361#[derive(Debug, Clone, Opcode, Decode, Encode)]
362#[opcode(20)]
363pub struct Send {}
364
365#[derive(Debug, Clone, Opcode, Decode, Encode)]
366#[opcode(21)]
367pub struct RemoveMessage {}
368
369#[derive(Debug, Clone, Opcode, Decode, Encode)]
370#[opcode(22)]
371pub struct Timeout {}
372
373#[derive(Debug, Clone, Opcode, Decode, Encode)]
374#[opcode(23)]
375pub struct LoopRec {
376 pub arg1: Term,
377 pub arg2: Term,
378}
379
380#[derive(Debug, Clone, Opcode, Decode, Encode)]
381#[opcode(24)]
382pub struct LoopRecEnd {
383 pub arg1: Term,
384}
385
386#[derive(Debug, Clone, Opcode, Decode, Encode)]
387#[opcode(25)]
388pub struct Wait {
389 pub arg1: Term,
390}
391
392#[derive(Debug, Clone, Opcode, Decode, Encode)]
393#[opcode(26)]
394pub struct WaitTimeout {
395 pub arg1: Term,
396 pub arg2: Term,
397}
398
399#[derive(Debug, Clone, Opcode, Decode, Encode)]
401#[opcode(27)]
402pub struct MPlus {
403 pub arg1: Term,
404 pub arg2: Term,
405 pub arg3: Term,
406 pub arg4: Term,
407}
408
409#[derive(Debug, Clone, Opcode, Decode, Encode)]
411#[opcode(28)]
412pub struct MMinus {
413 pub arg1: Term,
414 pub arg2: Term,
415 pub arg3: Term,
416 pub arg4: Term,
417}
418
419#[derive(Debug, Clone, Opcode, Decode, Encode)]
421#[opcode(29)]
422pub struct MTimes {
423 pub arg1: Term,
424 pub arg2: Term,
425 pub arg3: Term,
426 pub arg4: Term,
427}
428
429#[derive(Debug, Clone, Opcode, Decode, Encode)]
431#[opcode(30)]
432pub struct MDiv {
433 pub arg1: Term,
434 pub arg2: Term,
435 pub arg3: Term,
436 pub arg4: Term,
437}
438
439#[derive(Debug, Clone, Opcode, Decode, Encode)]
441#[opcode(31)]
442pub struct IntDiv {
443 pub arg1: Term,
444 pub arg2: Term,
445 pub arg3: Term,
446 pub arg4: Term,
447}
448
449#[derive(Debug, Clone, Opcode, Decode, Encode)]
451#[opcode(32)]
452pub struct IntRem {
453 pub arg1: Term,
454 pub arg2: Term,
455 pub arg3: Term,
456 pub arg4: Term,
457}
458
459#[derive(Debug, Clone, Opcode, Decode, Encode)]
461#[opcode(33)]
462pub struct IntBand {
463 pub arg1: Term,
464 pub arg2: Term,
465 pub arg3: Term,
466 pub arg4: Term,
467}
468
469#[derive(Debug, Clone, Opcode, Decode, Encode)]
471#[opcode(34)]
472pub struct IntBor {
473 pub arg1: Term,
474 pub arg2: Term,
475 pub arg3: Term,
476 pub arg4: Term,
477}
478
479#[derive(Debug, Clone, Opcode, Decode, Encode)]
481#[opcode(35)]
482pub struct IntBxor {
483 pub arg1: Term,
484 pub arg2: Term,
485 pub arg3: Term,
486 pub arg4: Term,
487}
488
489#[derive(Debug, Clone, Opcode, Decode, Encode)]
491#[opcode(36)]
492pub struct IntBsl {
493 pub arg1: Term,
494 pub arg2: Term,
495 pub arg3: Term,
496 pub arg4: Term,
497}
498
499#[derive(Debug, Clone, Opcode, Decode, Encode)]
501#[opcode(37)]
502pub struct IntBsr {
503 pub arg1: Term,
504 pub arg2: Term,
505 pub arg3: Term,
506 pub arg4: Term,
507}
508
509#[derive(Debug, Clone, Opcode, Decode, Encode)]
511#[opcode(38)]
512pub struct IntBnot {
513 pub arg1: Term,
514 pub arg2: Term,
515 pub arg3: Term,
516}
517
518#[derive(Debug, Clone, Opcode, Decode, Encode)]
519#[opcode(39)]
520pub struct IsLt {
521 pub arg1: Term,
522 pub arg2: Term,
523 pub arg3: Term,
524}
525
526#[derive(Debug, Clone, Opcode, Decode, Encode)]
527#[opcode(40)]
528pub struct IsGe {
529 pub arg1: Term,
530 pub arg2: Term,
531 pub arg3: Term,
532}
533
534#[derive(Debug, Clone, Opcode, Decode, Encode)]
535#[opcode(41)]
536pub struct IsEq {
537 pub arg1: Term,
538 pub arg2: Term,
539 pub arg3: Term,
540}
541
542#[derive(Debug, Clone, Opcode, Decode, Encode)]
543#[opcode(42)]
544pub struct IsNe {
545 pub arg1: Term,
546 pub arg2: Term,
547 pub arg3: Term,
548}
549
550#[derive(Debug, Clone, Opcode, Decode, Encode)]
551#[opcode(43)]
552pub struct IsEqExact {
553 pub label: term::Label,
554 pub arg1: Term,
555 pub arg2: Term,
556}
557
558#[derive(Debug, Clone, Opcode, Decode, Encode)]
559#[opcode(44)]
560pub struct IsNeExact {
561 pub label: term::Label,
562 pub arg1: Term,
563 pub arg2: Term,
564}
565
566#[derive(Debug, Clone, Opcode, Decode, Encode)]
567#[opcode(45)]
568pub struct IsInteger {
569 pub label: term::Label,
570 pub arg1: Term,
571}
572
573#[derive(Debug, Clone, Opcode, Decode, Encode)]
574#[opcode(46)]
575pub struct IsFloat {
576 pub label: term::Label,
577 pub arg1: Term,
578}
579
580#[derive(Debug, Clone, Opcode, Decode, Encode)]
581#[opcode(47)]
582pub struct IsNumber {
583 pub label: term::Label,
584 pub arg1: Term,
585}
586
587#[derive(Debug, Clone, Opcode, Decode, Encode)]
588#[opcode(48)]
589pub struct IsAtom {
590 pub label: term::Label,
591 pub arg1: Term,
592}
593
594#[derive(Debug, Clone, Opcode, Decode, Encode)]
595#[opcode(49)]
596pub struct IsPid {
597 pub label: term::Label,
598 pub arg1: Term,
599}
600
601#[derive(Debug, Clone, Opcode, Decode, Encode)]
602#[opcode(50)]
603pub struct IsReference {
604 pub label: term::Label,
605 pub arg1: Term,
606}
607
608#[derive(Debug, Clone, Opcode, Decode, Encode)]
609#[opcode(51)]
610pub struct IsPort {
611 pub label: term::Label,
612 pub arg1: Term,
613}
614
615#[derive(Debug, Clone, Opcode, Decode, Encode)]
616#[opcode(52)]
617pub struct IsNil {
618 pub label: term::Label,
619 pub arg1: Term,
620}
621
622#[derive(Debug, Clone, Opcode, Decode, Encode)]
623#[opcode(53)]
624pub struct IsBinary {
625 pub label: term::Label,
626 pub arg1: Term,
627}
628
629#[derive(Debug, Clone, Opcode, Decode, Encode)]
631#[opcode(54)]
632pub struct IsConstant {
633 pub label: term::Label,
634 pub arg1: Term,
635}
636
637#[derive(Debug, Clone, Opcode, Decode, Encode)]
638#[opcode(55)]
639pub struct IsList {
640 pub label: term::Label,
641 pub arg1: Term,
642}
643
644#[derive(Debug, Clone, Opcode, Decode, Encode)]
645#[opcode(56)]
646pub struct IsNonemptyList {
647 pub label: term::Label,
648 pub arg1: Term,
649}
650
651#[derive(Debug, Clone, Opcode, Decode, Encode)]
652#[opcode(57)]
653pub struct IsTuple {
654 pub label: term::Label,
655 pub arg1: Term,
656}
657
658#[derive(Debug, Clone, Opcode, Decode, Encode)]
659#[opcode(58)]
660pub struct TestArity {
661 pub label: term::Label,
662 pub arg1: Term,
663 pub arity: usize,
664}
665
666#[derive(Debug, Clone, Opcode, Decode, Encode)]
667#[opcode(59)]
668pub struct SelectVal {
669 pub arg: Term,
670 pub fail_label: term::Label,
671 pub destinations: List,
672}
673
674#[derive(Debug, Clone, Opcode, Decode, Encode)]
675#[opcode(60)]
676pub struct SelectTupleArity {
677 pub arg1: Term,
678 pub arg2: Term,
679 pub arg3: Term,
680}
681
682#[derive(Debug, Clone, Opcode, Decode, Encode)]
683#[opcode(61)]
684pub struct Jump {
685 pub label: term::Label,
686}
687
688#[derive(Debug, Clone, Opcode, Decode, Encode)]
689#[opcode(62)]
690pub struct Catch {
691 pub arg1: Term,
692 pub arg2: Term,
693}
694
695#[derive(Debug, Clone, Opcode, Decode, Encode)]
696#[opcode(63)]
697pub struct CatchEnd {
698 pub arg1: Term,
699}
700
701#[derive(Debug, Clone, Opcode, Decode, Encode)]
702#[opcode(64)]
703pub struct Move {
704 pub src: Term,
705 pub dst: Register,
706}
707
708#[derive(Debug, Clone, Opcode, Decode, Encode)]
709#[opcode(65)]
710pub struct GetList {
711 pub source: Term,
712 pub head: Register,
713 pub tail: Register,
714}
715
716#[derive(Debug, Clone, Opcode, Decode, Encode)]
717#[opcode(66)]
718pub struct GetTupleElement {
719 pub source: Register,
720 pub element: usize,
721 pub destination: Register,
722}
723
724#[derive(Debug, Clone, Opcode, Decode, Encode)]
725#[opcode(67)]
726pub struct SetTupleElement {
727 pub arg1: Term,
728 pub arg2: Term,
729 pub arg3: Term,
730}
731
732#[derive(Debug, Clone, Opcode, Decode, Encode)]
734#[opcode(68)]
735pub struct PutString {
736 pub arg1: Term,
737 pub arg2: Term,
738 pub arg3: Term,
739}
740
741#[derive(Debug, Clone, Opcode, Decode, Encode)]
742#[opcode(69)]
743pub struct PutList {
744 pub head: Term,
745 pub tail: Term,
746 pub destination: Register,
747}
748
749#[derive(Debug, Clone, Opcode, Decode, Encode)]
750#[opcode(70)]
751pub struct PutTuple {
752 pub arg1: Term,
753 pub arg2: Term,
754}
755
756#[derive(Debug, Clone, Opcode, Decode, Encode)]
757#[opcode(71)]
758pub struct Put {
759 pub arg1: Term,
760}
761
762#[derive(Debug, Clone, Opcode, Decode, Encode)]
763#[opcode(72)]
764pub struct Badmatch {
765 pub arg1: Term,
766}
767
768#[derive(Debug, Clone, Opcode, Decode, Encode)]
769#[opcode(73)]
770pub struct IfEnd {}
771
772#[derive(Debug, Clone, Opcode, Decode, Encode)]
773#[opcode(74)]
774pub struct CaseEnd {
775 pub arg1: Term,
776}
777
778#[derive(Debug, Clone, Opcode, Decode, Encode)]
779#[opcode(75)]
780pub struct CallFun {
781 pub arg1: Term,
782}
783
784#[derive(Debug, Clone, Opcode, Decode, Encode)]
786#[opcode(76)]
787pub struct MakeFun {
788 pub arg1: Term,
789 pub arg2: Term,
790 pub arg3: Term,
791}
792
793#[derive(Debug, Clone, Opcode, Decode, Encode)]
794#[opcode(77)]
795pub struct IsFunction {
796 pub arg1: Term,
797 pub arg2: Term,
798}
799
800#[derive(Debug, Clone, Opcode, Decode, Encode)]
801#[opcode(78)]
802pub struct CallExtOnly {
803 pub arity: usize,
804 pub destination: usize,
805}
806
807#[derive(Debug, Clone, Opcode, Decode, Encode)]
809#[opcode(79)]
810pub struct BsStartMatch {
811 pub arg1: Term,
812 pub arg2: Term,
813}
814
815#[derive(Debug, Clone, Opcode, Decode, Encode)]
817#[opcode(80)]
818pub struct BsGetInteger {
819 pub arg1: Term,
820 pub arg2: Term,
821 pub arg3: Term,
822 pub arg4: Term,
823 pub arg5: Term,
824}
825
826#[derive(Debug, Clone, Opcode, Decode, Encode)]
828#[opcode(81)]
829pub struct BsGetFloat {
830 pub arg1: Term,
831 pub arg2: Term,
832 pub arg3: Term,
833 pub arg4: Term,
834 pub arg5: Term,
835}
836
837#[derive(Debug, Clone, Opcode, Decode, Encode)]
839#[opcode(82)]
840pub struct BsGetBinary {
841 pub arg1: Term,
842 pub arg2: Term,
843 pub arg3: Term,
844 pub arg4: Term,
845 pub arg5: Term,
846}
847
848#[derive(Debug, Clone, Opcode, Decode, Encode)]
849#[opcode(83)]
850pub struct BsSkipBits {
851 pub arg1: Term,
852 pub arg2: Term,
853 pub arg3: Term,
854 pub arg4: Term,
855}
856
857#[derive(Debug, Clone, Opcode, Decode, Encode)]
859#[opcode(84)]
860pub struct BsTestTail {
861 pub arg1: Term,
862 pub arg2: Term,
863}
864
865#[derive(Debug, Clone, Opcode, Decode, Encode)]
866#[opcode(85)]
867pub struct BsSave {
868 pub arg1: Term,
869}
870
871#[derive(Debug, Clone, Opcode, Decode, Encode)]
873#[opcode(86)]
874pub struct BsRestore {
875 pub arg1: Term,
876}
877
878#[derive(Debug, Clone, Opcode, Decode, Encode)]
880#[opcode(87)]
881pub struct BsInit {
882 pub arg1: Term,
883 pub arg2: Term,
884}
885
886#[derive(Debug, Clone, Opcode, Decode, Encode)]
888#[opcode(88)]
889pub struct BsFinal {
890 pub arg1: Term,
891 pub arg2: Term,
892}
893
894#[derive(Debug, Clone, Opcode, Decode, Encode)]
895#[opcode(89)]
896pub struct BsPutInteger {
897 pub arg1: Term,
898 pub arg2: Term,
899 pub arg3: Term,
900 pub arg4: Term,
901 pub arg5: Term,
902}
903
904#[derive(Debug, Clone, Opcode, Decode, Encode)]
905#[opcode(90)]
906pub struct BsPutBinary {
907 pub arg1: Term,
908 pub arg2: Term,
909 pub arg3: Term,
910 pub arg4: Term,
911 pub arg5: Term,
912}
913
914#[derive(Debug, Clone, Opcode, Decode, Encode)]
915#[opcode(91)]
916pub struct BsPutFloat {
917 pub arg1: Term,
918 pub arg2: Term,
919 pub arg3: Term,
920 pub arg4: Term,
921 pub arg5: Term,
922}
923
924#[derive(Debug, Clone, Opcode, Decode, Encode)]
925#[opcode(92)]
926pub struct BsPutString {
927 pub arg1: Term,
928 pub arg2: Term,
929}
930
931#[derive(Debug, Clone, Opcode, Decode, Encode)]
932#[opcode(93)]
933pub struct BsNeedBuf {
934 pub arg1: Term,
935}
936
937#[derive(Debug, Clone, Opcode, Decode, Encode)]
938#[opcode(94)]
939pub struct Fclearerror {}
940
941#[derive(Debug, Clone, Opcode, Decode, Encode)]
942#[opcode(95)]
943pub struct Fcheckerror {
944 pub arg1: Term,
945}
946
947#[derive(Debug, Clone, Opcode, Decode, Encode)]
948#[opcode(96)]
949pub struct Fmove {
950 pub arg1: Term,
951 pub arg2: Term,
952}
953
954#[derive(Debug, Clone, Opcode, Decode, Encode)]
955#[opcode(97)]
956pub struct Fconv {
957 pub arg1: Term,
958 pub arg2: Term,
959}
960
961#[derive(Debug, Clone, Opcode, Decode, Encode)]
962#[opcode(98)]
963pub struct Fadd {
964 pub arg1: Term,
965 pub arg2: Term,
966 pub arg3: Term,
967 pub arg4: Term,
968}
969
970#[derive(Debug, Clone, Opcode, Decode, Encode)]
971#[opcode(99)]
972pub struct Fsub {
973 pub arg1: Term,
974 pub arg2: Term,
975 pub arg3: Term,
976 pub arg4: Term,
977}
978
979#[derive(Debug, Clone, Opcode, Decode, Encode)]
980#[opcode(100)]
981pub struct Fmul {
982 pub arg1: Term,
983 pub arg2: Term,
984 pub arg3: Term,
985 pub arg4: Term,
986}
987
988#[derive(Debug, Clone, Opcode, Decode, Encode)]
989#[opcode(101)]
990pub struct Fdiv {
991 pub arg1: Term,
992 pub arg2: Term,
993 pub arg3: Term,
994 pub arg4: Term,
995}
996
997#[derive(Debug, Clone, Opcode, Decode, Encode)]
998#[opcode(102)]
999pub struct Fnegate {
1000 pub arg1: Term,
1001 pub arg2: Term,
1002 pub arg3: Term,
1003}
1004
1005#[derive(Debug, Clone, Opcode, Decode, Encode)]
1006#[opcode(103)]
1007pub struct MakeFun2 {
1008 pub arg1: Term,
1009}
1010
1011#[derive(Debug, Clone, Opcode, Decode, Encode)]
1012#[opcode(104)]
1013pub struct Try {
1014 pub register: Register,
1015 pub label: term::Label,
1016}
1017
1018#[derive(Debug, Clone, Opcode, Decode, Encode)]
1019#[opcode(105)]
1020pub struct TryEnd {
1021 pub register: Register,
1022}
1023
1024#[derive(Debug, Clone, Opcode, Decode, Encode)]
1025#[opcode(106)]
1026pub struct TryCase {
1027 pub register: Register,
1028}
1029
1030#[derive(Debug, Clone, Opcode, Decode, Encode)]
1031#[opcode(107)]
1032pub struct TryCaseEnd {
1033 pub arg1: Term,
1034}
1035
1036#[derive(Debug, Clone, Opcode, Decode, Encode)]
1037#[opcode(108)]
1038pub struct Raise {
1039 pub stacktrace: Term,
1040 pub exc_value: Term,
1041}
1042
1043#[derive(Debug, Clone, Opcode, Decode, Encode)]
1044#[opcode(109)]
1045pub struct BsInit2 {
1046 pub arg1: Term,
1047 pub arg2: Term,
1048 pub arg3: Term,
1049 pub arg4: Term,
1050 pub arg5: Term,
1051 pub arg6: Term,
1052}
1053
1054#[derive(Debug, Clone, Opcode, Decode, Encode)]
1056#[opcode(110)]
1057pub struct BsBitsToBytes {
1058 pub arg1: Term,
1059 pub arg2: Term,
1060 pub arg3: Term,
1061}
1062
1063#[derive(Debug, Clone, Opcode, Decode, Encode)]
1064#[opcode(111)]
1065pub struct BsAdd {
1066 pub arg1: Term,
1067 pub arg2: Term,
1068 pub arg3: Term,
1069 pub arg4: Term,
1070 pub arg5: Term,
1071}
1072
1073#[derive(Debug, Clone, Opcode, Decode, Encode)]
1074#[opcode(112)]
1075pub struct Apply {
1076 pub arg1: Term,
1077}
1078
1079#[derive(Debug, Clone, Opcode, Decode, Encode)]
1080#[opcode(113)]
1081pub struct ApplyLast {
1082 pub arg1: Term,
1083 pub arg2: Term,
1084}
1085
1086#[derive(Debug, Clone, Opcode, Decode, Encode)]
1087#[opcode(114)]
1088pub struct IsBoolean {
1089 pub arg1: Term,
1090 pub arg2: Term,
1091}
1092
1093#[derive(Debug, Clone, Opcode, Decode, Encode)]
1094#[opcode(115)]
1095pub struct IsFunction2 {
1096 pub arg1: Term,
1097 pub arg2: Term,
1098 pub arg3: Term,
1099}
1100
1101#[derive(Debug, Clone, Opcode, Decode, Encode)]
1102#[opcode(116)]
1103pub struct BsStartMatch2 {
1104 pub arg1: Term,
1105 pub arg2: Term,
1106 pub arg3: Term,
1107 pub arg4: Term,
1108 pub arg5: Term,
1109}
1110
1111#[derive(Debug, Clone, Opcode, Decode, Encode)]
1112#[opcode(117)]
1113pub struct BsGetInteger2 {
1114 pub arg1: Term,
1115 pub arg2: Term,
1116 pub arg3: Term,
1117 pub arg4: Term,
1118 pub arg5: Term,
1119 pub arg6: Term,
1120 pub arg7: Term,
1121}
1122
1123#[derive(Debug, Clone, Opcode, Decode, Encode)]
1124#[opcode(118)]
1125pub struct BsGetFloat2 {
1126 pub arg1: Term,
1127 pub arg2: Term,
1128 pub arg3: Term,
1129 pub arg4: Term,
1130 pub arg5: Term,
1131 pub arg6: Term,
1132 pub arg7: Term,
1133}
1134
1135#[derive(Debug, Clone, Opcode, Decode, Encode)]
1136#[opcode(119)]
1137pub struct BsGetBinary2 {
1138 pub arg1: Term,
1139 pub arg2: Term,
1140 pub arg3: Term,
1141 pub arg4: Term,
1142 pub arg5: Term,
1143 pub arg6: Term,
1144 pub arg7: Term,
1145}
1146
1147#[derive(Debug, Clone, Opcode, Decode, Encode)]
1148#[opcode(120)]
1149pub struct BsSkipBits2 {
1150 pub arg1: Term,
1151 pub arg2: Term,
1152 pub arg3: Term,
1153 pub arg4: Term,
1154 pub arg5: Term,
1155}
1156
1157#[derive(Debug, Clone, Opcode, Decode, Encode)]
1158#[opcode(121)]
1159pub struct BsTestTail2 {
1160 pub arg1: Term,
1161 pub arg2: Term,
1162 pub arg3: Term,
1163}
1164
1165#[derive(Debug, Clone, Opcode, Decode, Encode)]
1166#[opcode(122)]
1167pub struct BsSave2 {
1168 pub arg1: Term,
1169 pub arg2: Term,
1170}
1171
1172#[derive(Debug, Clone, Opcode, Decode, Encode)]
1173#[opcode(123)]
1174pub struct BsRestore2 {
1175 pub arg1: Term,
1176 pub arg2: Term,
1177}
1178
1179#[derive(Debug, Clone, Opcode, Decode, Encode)]
1180#[opcode(124)]
1181pub struct GcBif1 {
1182 pub arg1: Term,
1183 pub arg2: Term,
1184 pub arg3: Term,
1185 pub arg4: Term,
1186 pub arg5: Term,
1187}
1188
1189#[derive(Debug, Clone, Opcode, Decode, Encode)]
1190#[opcode(125)]
1191pub struct GcBif2 {
1192 pub arg1: Term,
1193 pub arg2: Term,
1194 pub arg3: Term,
1195 pub arg4: Term,
1196 pub arg5: Term,
1197 pub arg6: Term,
1198}
1199
1200#[derive(Debug, Clone, Opcode, Decode, Encode)]
1202#[opcode(126)]
1203pub struct BsFinal2 {
1204 pub arg1: Term,
1205 pub arg2: Term,
1206}
1207
1208#[derive(Debug, Clone, Opcode, Decode, Encode)]
1210#[opcode(127)]
1211pub struct BsBitsToBytes2 {
1212 pub arg1: Term,
1213 pub arg2: Term,
1214}
1215
1216#[derive(Debug, Clone, Opcode, Decode, Encode)]
1218#[opcode(128)]
1219pub struct PutLiteral {
1220 pub arg1: Term,
1221 pub arg2: Term,
1222}
1223
1224#[derive(Debug, Clone, Opcode, Decode, Encode)]
1225#[opcode(129)]
1226pub struct IsBitstr {
1227 pub arg1: Term,
1228 pub arg2: Term,
1229}
1230
1231#[derive(Debug, Clone, Opcode, Decode, Encode)]
1232#[opcode(130)]
1233pub struct BsContextToBinary {
1234 pub arg1: Term,
1235}
1236
1237#[derive(Debug, Clone, Opcode, Decode, Encode)]
1238#[opcode(131)]
1239pub struct BsTestUnit {
1240 pub arg1: Term,
1241 pub arg2: Term,
1242 pub arg3: Term,
1243}
1244
1245#[derive(Debug, Clone, Opcode, Decode, Encode)]
1246#[opcode(132)]
1247pub struct BsMatchString {
1248 pub arg1: Term,
1249 pub arg2: Term,
1250 pub arg3: Term,
1251 pub arg4: Term,
1252}
1253
1254#[derive(Debug, Clone, Opcode, Decode, Encode)]
1255#[opcode(133)]
1256pub struct BsInitWritable {}
1257
1258#[derive(Debug, Clone, Opcode, Decode, Encode)]
1259#[opcode(134)]
1260pub struct BsAppend {
1261 pub arg1: Term,
1262 pub arg2: Term,
1263 pub arg3: Term,
1264 pub arg4: Term,
1265 pub arg5: Term,
1266 pub arg6: Term,
1267 pub arg7: Term,
1268 pub arg8: Term,
1269}
1270
1271#[derive(Debug, Clone, Opcode, Decode, Encode)]
1272#[opcode(135)]
1273pub struct BsPrivateAppend {
1274 pub arg1: Term,
1275 pub arg2: Term,
1276 pub arg3: Term,
1277 pub arg4: Term,
1278 pub arg5: Term,
1279 pub arg6: Term,
1280}
1281
1282#[derive(Debug, Clone, Opcode, Decode, Encode)]
1283#[opcode(136)]
1284pub struct Trim {
1285 pub arg1: Term,
1286 pub arg2: Term,
1287}
1288
1289#[derive(Debug, Clone, Opcode, Decode, Encode)]
1290#[opcode(137)]
1291pub struct BsInitBits {
1292 pub arg1: Term,
1293 pub arg2: Term,
1294 pub arg3: Term,
1295 pub arg4: Term,
1296 pub arg5: Term,
1297 pub arg6: Term,
1298}
1299
1300#[derive(Debug, Clone, Opcode, Decode, Encode)]
1301#[opcode(138)]
1302pub struct BsGetUtf8 {
1303 pub arg1: Term,
1304 pub arg2: Term,
1305 pub arg3: Term,
1306 pub arg4: Term,
1307 pub arg5: Term,
1308}
1309
1310#[derive(Debug, Clone, Opcode, Decode, Encode)]
1311#[opcode(139)]
1312pub struct BsSkipUtf8 {
1313 pub arg1: Term,
1314 pub arg2: Term,
1315 pub arg3: Term,
1316 pub arg4: Term,
1317}
1318
1319#[derive(Debug, Clone, Opcode, Decode, Encode)]
1320#[opcode(140)]
1321pub struct BsGetUtf16 {
1322 pub arg1: Term,
1323 pub arg2: Term,
1324 pub arg3: Term,
1325 pub arg4: Term,
1326 pub arg5: Term,
1327}
1328
1329#[derive(Debug, Clone, Opcode, Decode, Encode)]
1330#[opcode(141)]
1331pub struct BsSkipUtf16 {
1332 pub arg1: Term,
1333 pub arg2: Term,
1334 pub arg3: Term,
1335 pub arg4: Term,
1336}
1337
1338#[derive(Debug, Clone, Opcode, Decode, Encode)]
1339#[opcode(142)]
1340pub struct BsGetUtf32 {
1341 pub arg1: Term,
1342 pub arg2: Term,
1343 pub arg3: Term,
1344 pub arg4: Term,
1345 pub arg5: Term,
1346}
1347
1348#[derive(Debug, Clone, Opcode, Decode, Encode)]
1349#[opcode(143)]
1350pub struct BsSkipUtf32 {
1351 pub arg1: Term,
1352 pub arg2: Term,
1353 pub arg3: Term,
1354 pub arg4: Term,
1355}
1356
1357#[derive(Debug, Clone, Opcode, Decode, Encode)]
1358#[opcode(144)]
1359pub struct BsUtf8Size {
1360 pub arg1: Term,
1361 pub arg2: Term,
1362 pub arg3: Term,
1363}
1364
1365#[derive(Debug, Clone, Opcode, Decode, Encode)]
1366#[opcode(145)]
1367pub struct BsPutUtf8 {
1368 pub arg1: Term,
1369 pub arg2: Term,
1370 pub arg3: Term,
1371}
1372
1373#[derive(Debug, Clone, Opcode, Decode, Encode)]
1374#[opcode(146)]
1375pub struct BsUtf16Size {
1376 pub arg1: Term,
1377 pub arg2: Term,
1378 pub arg3: Term,
1379}
1380
1381#[derive(Debug, Clone, Opcode, Decode, Encode)]
1382#[opcode(147)]
1383pub struct BsPutUtf16 {
1384 pub arg1: Term,
1385 pub arg2: Term,
1386 pub arg3: Term,
1387}
1388
1389#[derive(Debug, Clone, Opcode, Decode, Encode)]
1390#[opcode(148)]
1391pub struct BsPutUtf32 {
1392 pub arg1: Term,
1393 pub arg2: Term,
1394 pub arg3: Term,
1395}
1396
1397#[derive(Debug, Clone, Opcode, Decode, Encode)]
1398#[opcode(149)]
1399pub struct OnLoad {}
1400
1401#[derive(Debug, Clone, Opcode, Decode, Encode)]
1402#[opcode(150)]
1403pub struct RecvMark {
1404 pub arg1: Term,
1405}
1406
1407#[derive(Debug, Clone, Opcode, Decode, Encode)]
1408#[opcode(151)]
1409pub struct RecvSet {
1410 pub arg1: Term,
1411}
1412
1413#[derive(Debug, Clone, Opcode, Decode, Encode)]
1414#[opcode(152)]
1415pub struct GcBif3 {
1416 pub arg1: Term,
1417 pub arg2: Term,
1418 pub arg3: Term,
1419 pub arg4: Term,
1420 pub arg5: Term,
1421 pub arg6: Term,
1422 pub arg7: Term,
1423}
1424
1425#[derive(Debug, Clone, Opcode, Decode, Encode)]
1426#[opcode(153)]
1427pub struct Line {
1428 pub literal: usize,
1429}
1430
1431#[derive(Debug, Clone, Opcode, Decode, Encode)]
1432#[opcode(154)]
1433pub struct PutMapAssoc {
1434 pub arg1: Term,
1435 pub arg2: Term,
1436 pub arg3: Term,
1437 pub arg4: Term,
1438 pub arg5: Term,
1439}
1440
1441#[derive(Debug, Clone, Opcode, Decode, Encode)]
1442#[opcode(155)]
1443pub struct PutMapExact {
1444 pub arg1: Term,
1445 pub arg2: Term,
1446 pub arg3: Term,
1447 pub arg4: Term,
1448 pub arg5: Term,
1449}
1450
1451#[derive(Debug, Clone, Opcode, Decode, Encode)]
1452#[opcode(156)]
1453pub struct IsMap {
1454 pub arg1: Term,
1455 pub arg2: Term,
1456}
1457
1458#[derive(Debug, Clone, Opcode, Decode, Encode)]
1459#[opcode(157)]
1460pub struct HasMapFields {
1461 pub arg1: Term,
1462 pub arg2: Term,
1463 pub arg3: Term,
1464}
1465
1466#[derive(Debug, Clone, Opcode, Decode, Encode)]
1467#[opcode(158)]
1468pub struct GetMapElement {
1469 pub arg1: Term,
1470 pub arg2: Term,
1471 pub arg3: Term,
1472}
1473
1474#[derive(Debug, Clone, Opcode, Decode, Encode)]
1475#[opcode(159)]
1476pub struct IsTaggedTuple {
1477 pub label: term::Label,
1478 pub register: Register,
1479 pub arity: usize,
1480 pub atom: Atom,
1481}
1482
1483#[derive(Debug, Clone, Opcode, Decode, Encode)]
1484#[opcode(160)]
1485pub struct BuildStacktrace {}
1486
1487#[derive(Debug, Clone, Opcode, Decode, Encode)]
1488#[opcode(161)]
1489pub struct RawRaise {}
1490
1491#[derive(Debug, Clone, Opcode, Decode, Encode)]
1492#[opcode(162)]
1493pub struct GetHd {
1494 pub arg1: Term,
1495 pub arg2: Term,
1496}
1497
1498#[derive(Debug, Clone, Opcode, Decode, Encode)]
1499#[opcode(163)]
1500pub struct GetTl {
1501 pub arg1: Term,
1502 pub arg2: Term,
1503}
1504
1505#[derive(Debug, Clone, Opcode, Decode, Encode)]
1506#[opcode(164)]
1507pub struct PutTuple2 {
1508 pub destination: Register,
1509 pub elements: List,
1510}
1511
1512#[derive(Debug, Clone, Opcode, Decode, Encode)]
1513#[opcode(165)]
1514pub struct BsGetTail {
1515 pub context: Term,
1516 pub destination: Register,
1517 pub live: usize,
1518}
1519
1520#[derive(Debug, Clone, Opcode, Decode, Encode)]
1521#[opcode(166)]
1522pub struct BsStartMatch3 {
1523 pub fail: term::Label,
1524 pub bin: Term,
1525 pub live: usize,
1526 pub destination: Register,
1527}
1528
1529#[derive(Debug, Clone, Opcode, Decode, Encode)]
1530#[opcode(167)]
1531pub struct BsGetPosition {
1532 pub context: Term,
1533 pub destination: Register,
1534 pub live: usize,
1535}
1536
1537#[derive(Debug, Clone, Opcode, Decode, Encode)]
1538#[opcode(168)]
1539pub struct BsSetPosition {
1540 pub context: Term,
1541 pub position: Term,
1542}
1543
1544#[derive(Debug, Clone, Opcode, Decode, Encode)]
1545#[opcode(169)]
1546pub struct Swap {
1547 pub arg1: Term,
1548 pub arg2: Term,
1549}
1550
1551#[derive(Debug, Clone, Opcode, Decode, Encode)]
1552#[opcode(170)]
1553pub struct BsStartMatch4 {
1554 pub arg1: Term,
1555 pub arg2: Term,
1556 pub arg3: Term,
1557 pub arg4: Term,
1558}
1559
1560#[derive(Debug, Clone, Opcode, Decode, Encode)]
1561#[opcode(171)]
1562pub struct MakeFun3 {
1563 pub arg1: Term,
1564 pub arg2: Term,
1565 pub arg3: Term,
1566}
1567
1568#[derive(Debug, Clone, Opcode, Decode, Encode)]
1569#[opcode(172)]
1570pub struct InitYregs {
1571 pub registers: Vec<YRegister>,
1572}
1573
1574#[derive(Debug, Clone, Opcode, Decode, Encode)]
1575#[opcode(173)]
1576pub struct RecvMarkerBind {
1577 pub arg1: Term,
1578 pub arg2: Term,
1579}
1580
1581#[derive(Debug, Clone, Opcode, Decode, Encode)]
1582#[opcode(174)]
1583pub struct RecvMarkerClear {
1584 pub arg1: Term,
1585}
1586
1587#[derive(Debug, Clone, Opcode, Decode, Encode)]
1588#[opcode(175)]
1589pub struct RecvMarkerReserve {
1590 pub arg1: Term,
1591}
1592
1593#[derive(Debug, Clone, Opcode, Decode, Encode)]
1594#[opcode(176)]
1595pub struct RecvMarkerUse {
1596 pub arg1: Term,
1597}
1598
1599#[derive(Debug, Clone, Opcode, Decode, Encode)]
1600#[opcode(177)]
1601pub struct BsCreateBin {
1602 pub arg1: Term,
1603 pub arg2: Term,
1604 pub arg3: Term,
1605 pub arg4: Term,
1606 pub arg5: Term,
1607 pub arg6: Term,
1608}
1609
1610#[derive(Debug, Clone, Opcode, Decode, Encode)]
1611#[opcode(178)]
1612pub struct CallFun2 {
1613 pub arg1: Term,
1614 pub arg2: Term,
1615 pub arg3: Term,
1616}
1617
1618#[derive(Debug, Clone, Opcode, Decode, Encode)]
1619#[opcode(179)]
1620pub struct NifStart {}
1621
1622#[derive(Debug, Clone, Opcode, Decode, Encode)]
1623#[opcode(180)]
1624pub struct Badrecord {
1625 pub arg1: Term,
1626}