Skip to content

Commit bdee380

Browse files
WasmParser: Add atomic instructions support
1 parent bec06f2 commit bdee380

File tree

6 files changed

+1478
-203
lines changed

6 files changed

+1478
-203
lines changed

Sources/WAT/InstructionEncoder.swift

Lines changed: 265 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,4 +408,269 @@ extension InstructionEncoder {
408408
mutating func visitI64TruncSatF32U() throws { try encodeInstruction(0x05, 0xFC) }
409409
mutating func visitI64TruncSatF64S() throws { try encodeInstruction(0x06, 0xFC) }
410410
mutating func visitI64TruncSatF64U() throws { try encodeInstruction(0x07, 0xFC) }
411+
mutating func visitMemoryAtomicNotify(memarg: MemArg) throws {
412+
try encodeInstruction(0x00, 0xFE)
413+
try encodeImmediates(memarg: memarg)
414+
}
415+
mutating func visitMemoryAtomicWait32(memarg: MemArg) throws {
416+
try encodeInstruction(0x01, 0xFE)
417+
try encodeImmediates(memarg: memarg)
418+
}
419+
mutating func visitMemoryAtomicWait64(memarg: MemArg) throws {
420+
try encodeInstruction(0x02, 0xFE)
421+
try encodeImmediates(memarg: memarg)
422+
}
423+
mutating func visitAtomicFence() throws { try encodeInstruction(0x03, 0xFE) }
424+
mutating func visitI32AtomicLoad(memarg: MemArg) throws {
425+
try encodeInstruction(0x10, 0xFE)
426+
try encodeImmediates(memarg: memarg)
427+
}
428+
mutating func visitI64AtomicLoad(memarg: MemArg) throws {
429+
try encodeInstruction(0x11, 0xFE)
430+
try encodeImmediates(memarg: memarg)
431+
}
432+
mutating func visitI32AtomicLoad8U(memarg: MemArg) throws {
433+
try encodeInstruction(0x12, 0xFE)
434+
try encodeImmediates(memarg: memarg)
435+
}
436+
mutating func visitI32AtomicLoad16U(memarg: MemArg) throws {
437+
try encodeInstruction(0x13, 0xFE)
438+
try encodeImmediates(memarg: memarg)
439+
}
440+
mutating func visitI64AtomicLoad8U(memarg: MemArg) throws {
441+
try encodeInstruction(0x14, 0xFE)
442+
try encodeImmediates(memarg: memarg)
443+
}
444+
mutating func visitI64AtomicLoad16U(memarg: MemArg) throws {
445+
try encodeInstruction(0x15, 0xFE)
446+
try encodeImmediates(memarg: memarg)
447+
}
448+
mutating func visitI64AtomicLoad32U(memarg: MemArg) throws {
449+
try encodeInstruction(0x16, 0xFE)
450+
try encodeImmediates(memarg: memarg)
451+
}
452+
mutating func visitI32AtomicStore(memarg: MemArg) throws {
453+
try encodeInstruction(0x17, 0xFE)
454+
try encodeImmediates(memarg: memarg)
455+
}
456+
mutating func visitI64AtomicStore(memarg: MemArg) throws {
457+
try encodeInstruction(0x18, 0xFE)
458+
try encodeImmediates(memarg: memarg)
459+
}
460+
mutating func visitI32AtomicStore8(memarg: MemArg) throws {
461+
try encodeInstruction(0x19, 0xFE)
462+
try encodeImmediates(memarg: memarg)
463+
}
464+
mutating func visitI32AtomicStore16(memarg: MemArg) throws {
465+
try encodeInstruction(0x1A, 0xFE)
466+
try encodeImmediates(memarg: memarg)
467+
}
468+
mutating func visitI64AtomicStore8(memarg: MemArg) throws {
469+
try encodeInstruction(0x1B, 0xFE)
470+
try encodeImmediates(memarg: memarg)
471+
}
472+
mutating func visitI64AtomicStore16(memarg: MemArg) throws {
473+
try encodeInstruction(0x1C, 0xFE)
474+
try encodeImmediates(memarg: memarg)
475+
}
476+
mutating func visitI64AtomicStore32(memarg: MemArg) throws {
477+
try encodeInstruction(0x1D, 0xFE)
478+
try encodeImmediates(memarg: memarg)
479+
}
480+
mutating func visitI32AtomicRmwAdd(memarg: MemArg) throws {
481+
try encodeInstruction(0x1E, 0xFE)
482+
try encodeImmediates(memarg: memarg)
483+
}
484+
mutating func visitI64AtomicRmwAdd(memarg: MemArg) throws {
485+
try encodeInstruction(0x1F, 0xFE)
486+
try encodeImmediates(memarg: memarg)
487+
}
488+
mutating func visitI32AtomicRmw8AddU(memarg: MemArg) throws {
489+
try encodeInstruction(0x20, 0xFE)
490+
try encodeImmediates(memarg: memarg)
491+
}
492+
mutating func visitI32AtomicRmw16AddU(memarg: MemArg) throws {
493+
try encodeInstruction(0x21, 0xFE)
494+
try encodeImmediates(memarg: memarg)
495+
}
496+
mutating func visitI64AtomicRmw8AddU(memarg: MemArg) throws {
497+
try encodeInstruction(0x22, 0xFE)
498+
try encodeImmediates(memarg: memarg)
499+
}
500+
mutating func visitI64AtomicRmw16AddU(memarg: MemArg) throws {
501+
try encodeInstruction(0x23, 0xFE)
502+
try encodeImmediates(memarg: memarg)
503+
}
504+
mutating func visitI64AtomicRmw32AddU(memarg: MemArg) throws {
505+
try encodeInstruction(0x24, 0xFE)
506+
try encodeImmediates(memarg: memarg)
507+
}
508+
mutating func visitI32AtomicRmwSub(memarg: MemArg) throws {
509+
try encodeInstruction(0x25, 0xFE)
510+
try encodeImmediates(memarg: memarg)
511+
}
512+
mutating func visitI64AtomicRmwSub(memarg: MemArg) throws {
513+
try encodeInstruction(0x26, 0xFE)
514+
try encodeImmediates(memarg: memarg)
515+
}
516+
mutating func visitI32AtomicRmw8SubU(memarg: MemArg) throws {
517+
try encodeInstruction(0x27, 0xFE)
518+
try encodeImmediates(memarg: memarg)
519+
}
520+
mutating func visitI32AtomicRmw16SubU(memarg: MemArg) throws {
521+
try encodeInstruction(0x28, 0xFE)
522+
try encodeImmediates(memarg: memarg)
523+
}
524+
mutating func visitI64AtomicRmw8SubU(memarg: MemArg) throws {
525+
try encodeInstruction(0x29, 0xFE)
526+
try encodeImmediates(memarg: memarg)
527+
}
528+
mutating func visitI64AtomicRmw16SubU(memarg: MemArg) throws {
529+
try encodeInstruction(0x2A, 0xFE)
530+
try encodeImmediates(memarg: memarg)
531+
}
532+
mutating func visitI64AtomicRmw32SubU(memarg: MemArg) throws {
533+
try encodeInstruction(0x2B, 0xFE)
534+
try encodeImmediates(memarg: memarg)
535+
}
536+
mutating func visitI32AtomicRmwAnd(memarg: MemArg) throws {
537+
try encodeInstruction(0x2C, 0xFE)
538+
try encodeImmediates(memarg: memarg)
539+
}
540+
mutating func visitI64AtomicRmwAnd(memarg: MemArg) throws {
541+
try encodeInstruction(0x2D, 0xFE)
542+
try encodeImmediates(memarg: memarg)
543+
}
544+
mutating func visitI32AtomicRmw8AndU(memarg: MemArg) throws {
545+
try encodeInstruction(0x2E, 0xFE)
546+
try encodeImmediates(memarg: memarg)
547+
}
548+
mutating func visitI32AtomicRmw16AndU(memarg: MemArg) throws {
549+
try encodeInstruction(0x2F, 0xFE)
550+
try encodeImmediates(memarg: memarg)
551+
}
552+
mutating func visitI64AtomicRmw8AndU(memarg: MemArg) throws {
553+
try encodeInstruction(0x30, 0xFE)
554+
try encodeImmediates(memarg: memarg)
555+
}
556+
mutating func visitI64AtomicRmw16AndU(memarg: MemArg) throws {
557+
try encodeInstruction(0x31, 0xFE)
558+
try encodeImmediates(memarg: memarg)
559+
}
560+
mutating func visitI64AtomicRmw32AndU(memarg: MemArg) throws {
561+
try encodeInstruction(0x32, 0xFE)
562+
try encodeImmediates(memarg: memarg)
563+
}
564+
mutating func visitI32AtomicRmwOr(memarg: MemArg) throws {
565+
try encodeInstruction(0x33, 0xFE)
566+
try encodeImmediates(memarg: memarg)
567+
}
568+
mutating func visitI64AtomicRmwOr(memarg: MemArg) throws {
569+
try encodeInstruction(0x34, 0xFE)
570+
try encodeImmediates(memarg: memarg)
571+
}
572+
mutating func visitI32AtomicRmw8OrU(memarg: MemArg) throws {
573+
try encodeInstruction(0x35, 0xFE)
574+
try encodeImmediates(memarg: memarg)
575+
}
576+
mutating func visitI32AtomicRmw16OrU(memarg: MemArg) throws {
577+
try encodeInstruction(0x36, 0xFE)
578+
try encodeImmediates(memarg: memarg)
579+
}
580+
mutating func visitI64AtomicRmw8OrU(memarg: MemArg) throws {
581+
try encodeInstruction(0x37, 0xFE)
582+
try encodeImmediates(memarg: memarg)
583+
}
584+
mutating func visitI64AtomicRmw16OrU(memarg: MemArg) throws {
585+
try encodeInstruction(0x38, 0xFE)
586+
try encodeImmediates(memarg: memarg)
587+
}
588+
mutating func visitI64AtomicRmw32OrU(memarg: MemArg) throws {
589+
try encodeInstruction(0x39, 0xFE)
590+
try encodeImmediates(memarg: memarg)
591+
}
592+
mutating func visitI32AtomicRmwXor(memarg: MemArg) throws {
593+
try encodeInstruction(0x3A, 0xFE)
594+
try encodeImmediates(memarg: memarg)
595+
}
596+
mutating func visitI64AtomicRmwXor(memarg: MemArg) throws {
597+
try encodeInstruction(0x3B, 0xFE)
598+
try encodeImmediates(memarg: memarg)
599+
}
600+
mutating func visitI32AtomicRmw8XorU(memarg: MemArg) throws {
601+
try encodeInstruction(0x3C, 0xFE)
602+
try encodeImmediates(memarg: memarg)
603+
}
604+
mutating func visitI32AtomicRmw16XorU(memarg: MemArg) throws {
605+
try encodeInstruction(0x3D, 0xFE)
606+
try encodeImmediates(memarg: memarg)
607+
}
608+
mutating func visitI64AtomicRmw8XorU(memarg: MemArg) throws {
609+
try encodeInstruction(0x3E, 0xFE)
610+
try encodeImmediates(memarg: memarg)
611+
}
612+
mutating func visitI64AtomicRmw16XorU(memarg: MemArg) throws {
613+
try encodeInstruction(0x3F, 0xFE)
614+
try encodeImmediates(memarg: memarg)
615+
}
616+
mutating func visitI64AtomicRmw32XorU(memarg: MemArg) throws {
617+
try encodeInstruction(0x40, 0xFE)
618+
try encodeImmediates(memarg: memarg)
619+
}
620+
mutating func visitI32AtomicRmwXchg(memarg: MemArg) throws {
621+
try encodeInstruction(0x41, 0xFE)
622+
try encodeImmediates(memarg: memarg)
623+
}
624+
mutating func visitI64AtomicRmwXchg(memarg: MemArg) throws {
625+
try encodeInstruction(0x42, 0xFE)
626+
try encodeImmediates(memarg: memarg)
627+
}
628+
mutating func visitI32AtomicRmw8XchgU(memarg: MemArg) throws {
629+
try encodeInstruction(0x43, 0xFE)
630+
try encodeImmediates(memarg: memarg)
631+
}
632+
mutating func visitI32AtomicRmw16XchgU(memarg: MemArg) throws {
633+
try encodeInstruction(0x44, 0xFE)
634+
try encodeImmediates(memarg: memarg)
635+
}
636+
mutating func visitI64AtomicRmw8XchgU(memarg: MemArg) throws {
637+
try encodeInstruction(0x45, 0xFE)
638+
try encodeImmediates(memarg: memarg)
639+
}
640+
mutating func visitI64AtomicRmw16XchgU(memarg: MemArg) throws {
641+
try encodeInstruction(0x46, 0xFE)
642+
try encodeImmediates(memarg: memarg)
643+
}
644+
mutating func visitI64AtomicRmw32XchgU(memarg: MemArg) throws {
645+
try encodeInstruction(0x47, 0xFE)
646+
try encodeImmediates(memarg: memarg)
647+
}
648+
mutating func visitI32AtomicRmwCmpxchg(memarg: MemArg) throws {
649+
try encodeInstruction(0x48, 0xFE)
650+
try encodeImmediates(memarg: memarg)
651+
}
652+
mutating func visitI64AtomicRmwCmpxchg(memarg: MemArg) throws {
653+
try encodeInstruction(0x49, 0xFE)
654+
try encodeImmediates(memarg: memarg)
655+
}
656+
mutating func visitI32AtomicRmw8CmpxchgU(memarg: MemArg) throws {
657+
try encodeInstruction(0x4A, 0xFE)
658+
try encodeImmediates(memarg: memarg)
659+
}
660+
mutating func visitI32AtomicRmw16CmpxchgU(memarg: MemArg) throws {
661+
try encodeInstruction(0x4B, 0xFE)
662+
try encodeImmediates(memarg: memarg)
663+
}
664+
mutating func visitI64AtomicRmw8CmpxchgU(memarg: MemArg) throws {
665+
try encodeInstruction(0x4C, 0xFE)
666+
try encodeImmediates(memarg: memarg)
667+
}
668+
mutating func visitI64AtomicRmw16CmpxchgU(memarg: MemArg) throws {
669+
try encodeInstruction(0x4D, 0xFE)
670+
try encodeImmediates(memarg: memarg)
671+
}
672+
mutating func visitI64AtomicRmw32CmpxchgU(memarg: MemArg) throws {
673+
try encodeInstruction(0x4E, 0xFE)
674+
try encodeImmediates(memarg: memarg)
675+
}
411676
}

0 commit comments

Comments
 (0)