vyre_runtime/megakernel/protocol/
opcode.rs1pub const NOP: u32 = 0;
3pub const STORE_U32: u32 = 1;
5pub const ATOMIC_ADD: u32 = 2;
7pub const LOAD_U32: u32 = 3;
9pub const COMPARE_SWAP: u32 = 4;
11pub const MEMCPY: u32 = 5;
13pub const DFA_STEP: u32 = 6;
15pub const BATCH_FENCE: u32 = 7;
17pub const LOAD_MISS: u32 = 0x0000_FFFD;
23pub const PACKED_SLOT: u32 = 0x8000_0001;
25pub const PRINTF: u32 = 0x0000_FFFE;
27pub const SHUTDOWN: u32 = u32::MAX;
29pub const SYSTEM_MASK: u32 = 0x8000_0000;
31pub const RESERVED_MAX_RANGE_MIN: u32 = 0x0000_FFF0;
33
34#[must_use]
36pub const fn is_system(op: u32) -> bool {
37 (op & SYSTEM_MASK) != 0
38 || (op >= RESERVED_MAX_RANGE_MIN && op <= 0x0000_FFFF)
39 || op <= BATCH_FENCE
40}
41
42#[must_use]
44pub const fn is_builtin(op: u32) -> bool {
45 op <= BATCH_FENCE || op == PACKED_SLOT || op == PRINTF || op == SHUTDOWN
46}
47
48pub const fn validate_user_opcode(op: u32) -> Result<(), &'static str> {
54 if is_system(op) {
55 Err("User opcode overlaps with reserved system range or uses the high bit.")
56 } else {
57 Ok(())
58 }
59}
60
61pub const fn validate_publish_opcode(op: u32) -> Result<(), &'static str> {
63 if is_builtin(op) {
64 Ok(())
65 } else {
66 validate_user_opcode(op)
67 }
68}
69
70const _: () = {
71 let opcodes = [
72 NOP,
73 STORE_U32,
74 ATOMIC_ADD,
75 LOAD_U32,
76 COMPARE_SWAP,
77 MEMCPY,
78 DFA_STEP,
79 BATCH_FENCE,
80 LOAD_MISS,
81 PACKED_SLOT,
82 PRINTF,
83 SHUTDOWN,
84 ];
85 let mut i = 0;
86 while i < opcodes.len() {
87 let mut j = i + 1;
88 while j < opcodes.len() {
89 assert!(opcodes[i] != opcodes[j], "Duplicate opcode");
90 j += 1;
91 }
92 assert!(is_system(opcodes[i]), "Opcode is not system");
93 i += 1;
94 }
95};