diff --git a/Cargo.toml b/Cargo.toml index 7845eaf7..52e49ac2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ckb-vm" description = "CKB's Virtual machine" -version = "0.23.1" +version = "0.23.2" license = "MIT" authors = ["Nervos Core Dev "] edition = "2021" @@ -27,7 +27,7 @@ goblin_v023 = { package = "goblin", version = "=0.2.3" } goblin_v040 = { package = "goblin", version = "=0.4.0" } scroll = "0.10" serde = { version = "1.0", features = ["derive"] } -ckb-vm-definitions = { path = "definitions", version = "=0.23.1" } +ckb-vm-definitions = { path = "definitions", version = "=0.23.2" } derive_more = "0.99.2" rand = "0.7.3" diff --git a/definitions/Cargo.toml b/definitions/Cargo.toml index b6e61492..03ed4e5f 100644 --- a/definitions/Cargo.toml +++ b/definitions/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "ckb-vm-definitions" description = "Common definition files for CKB VM" -version = "0.23.1" +version = "0.23.2" license = "MIT" authors = ["Nervos Core Dev "] edition = "2021" diff --git a/definitions/src/generate_asm_constants.rs b/definitions/src/generate_asm_constants.rs index 0ae4b772..4a1284b4 100644 --- a/definitions/src/generate_asm_constants.rs +++ b/definitions/src/generate_asm_constants.rs @@ -4,7 +4,10 @@ use ckb_vm_definitions::{ RET_ECALL, RET_INVALID_PERMISSION, RET_MAX_CYCLES_EXCEEDED, RET_OUT_OF_BOUND, RET_SLOWPATH, TRACE_ITEM_LENGTH, }, - instructions::{Instruction, INSTRUCTION_OPCODE_NAMES}, + instructions::{ + instruction_opcode_name, Instruction, INSTRUCTION_OPCODE_NAMES, MAXIMUM_OPCODE, + MINIMAL_OPCODE, + }, memory::{FLAG_DIRTY, FLAG_EXECUTABLE, FLAG_FREEZED, FLAG_WRITABLE, FLAG_WXORX_BIT}, registers::{RA, SP}, MEMORY_FRAMES, MEMORY_FRAMESIZE, MEMORY_FRAME_PAGE_SHIFTS, MEMORY_FRAME_SHIFTS, @@ -162,8 +165,12 @@ fn main() { ); println!(); - for (op, name) in INSTRUCTION_OPCODE_NAMES.iter().enumerate() { - println!("#define CKB_VM_ASM_OP_{} {}", name, op); + for op in MINIMAL_OPCODE..MAXIMUM_OPCODE { + println!( + "#define CKB_VM_ASM_OP_{} {}", + instruction_opcode_name(op), + op + ); } println!(); diff --git a/src/instructions/mod.rs b/src/instructions/mod.rs index e5764a45..2ae654f8 100644 --- a/src/instructions/mod.rs +++ b/src/instructions/mod.rs @@ -13,7 +13,9 @@ pub mod tagged; pub use self::register::Register; use super::Error; pub use ckb_vm_definitions::{ - instructions::{self as insts, instruction_opcode_name, Instruction, InstructionOpcode}, + instructions::{ + self as insts, instruction_opcode_name, Instruction, InstructionOpcode, MINIMAL_OPCODE, + }, registers::REGISTER_ABI_NAMES, }; use core::fmt; @@ -340,7 +342,7 @@ impl fmt::Display for R4type { } pub fn is_slowpath_instruction(i: Instruction) -> bool { - i as u8 >= 0xF0 + (i as u8 as u16) < MINIMAL_OPCODE } pub fn is_basic_block_end_instruction(i: Instruction) -> bool { diff --git a/src/machine/asm/cdefinitions_generated.h b/src/machine/asm/cdefinitions_generated.h index 48e4ce33..b4020281 100644 --- a/src/machine/asm/cdefinitions_generated.h +++ b/src/machine/asm/cdefinitions_generated.h @@ -49,128 +49,127 @@ #define CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_TRACES 4195656 #define CKB_VM_ASM_ASM_CORE_MACHINE_OFFSET_FRAMES 4195640 -#define CKB_VM_ASM_OP_UNLOADED 0 -#define CKB_VM_ASM_OP_ADD 1 -#define CKB_VM_ASM_OP_ADDI 2 -#define CKB_VM_ASM_OP_ADDIW 3 -#define CKB_VM_ASM_OP_ADDW 4 -#define CKB_VM_ASM_OP_AND 5 -#define CKB_VM_ASM_OP_ANDI 6 -#define CKB_VM_ASM_OP_AUIPC 7 -#define CKB_VM_ASM_OP_BEQ 8 -#define CKB_VM_ASM_OP_BGE 9 -#define CKB_VM_ASM_OP_BGEU 10 -#define CKB_VM_ASM_OP_BLT 11 -#define CKB_VM_ASM_OP_BLTU 12 -#define CKB_VM_ASM_OP_BNE 13 -#define CKB_VM_ASM_OP_DIV 14 -#define CKB_VM_ASM_OP_DIVU 15 -#define CKB_VM_ASM_OP_DIVUW 16 -#define CKB_VM_ASM_OP_DIVW 17 -#define CKB_VM_ASM_OP_EBREAK 18 -#define CKB_VM_ASM_OP_ECALL 19 -#define CKB_VM_ASM_OP_FENCE 20 -#define CKB_VM_ASM_OP_FENCEI 21 -#define CKB_VM_ASM_OP_JAL 22 -#define CKB_VM_ASM_OP_JALR 23 -#define CKB_VM_ASM_OP_LB 24 -#define CKB_VM_ASM_OP_LBU 25 -#define CKB_VM_ASM_OP_LD 26 -#define CKB_VM_ASM_OP_LH 27 -#define CKB_VM_ASM_OP_LHU 28 -#define CKB_VM_ASM_OP_LUI 29 -#define CKB_VM_ASM_OP_LW 30 -#define CKB_VM_ASM_OP_LWU 31 -#define CKB_VM_ASM_OP_MUL 32 -#define CKB_VM_ASM_OP_MULH 33 -#define CKB_VM_ASM_OP_MULHSU 34 -#define CKB_VM_ASM_OP_MULHU 35 -#define CKB_VM_ASM_OP_MULW 36 -#define CKB_VM_ASM_OP_OR 37 -#define CKB_VM_ASM_OP_ORI 38 -#define CKB_VM_ASM_OP_REM 39 -#define CKB_VM_ASM_OP_REMU 40 -#define CKB_VM_ASM_OP_REMUW 41 -#define CKB_VM_ASM_OP_REMW 42 -#define CKB_VM_ASM_OP_SB 43 -#define CKB_VM_ASM_OP_SD 44 -#define CKB_VM_ASM_OP_SH 45 -#define CKB_VM_ASM_OP_SLL 46 -#define CKB_VM_ASM_OP_SLLI 47 -#define CKB_VM_ASM_OP_SLLIW 48 -#define CKB_VM_ASM_OP_SLLW 49 -#define CKB_VM_ASM_OP_SLT 50 -#define CKB_VM_ASM_OP_SLTI 51 -#define CKB_VM_ASM_OP_SLTIU 52 -#define CKB_VM_ASM_OP_SLTU 53 -#define CKB_VM_ASM_OP_SRA 54 -#define CKB_VM_ASM_OP_SRAI 55 -#define CKB_VM_ASM_OP_SRAIW 56 -#define CKB_VM_ASM_OP_SRAW 57 -#define CKB_VM_ASM_OP_SRL 58 -#define CKB_VM_ASM_OP_SRLI 59 -#define CKB_VM_ASM_OP_SRLIW 60 -#define CKB_VM_ASM_OP_SRLW 61 -#define CKB_VM_ASM_OP_SUB 62 -#define CKB_VM_ASM_OP_SUBW 63 -#define CKB_VM_ASM_OP_SW 64 -#define CKB_VM_ASM_OP_XOR 65 -#define CKB_VM_ASM_OP_XORI 66 -#define CKB_VM_ASM_OP_ADDUW 67 -#define CKB_VM_ASM_OP_ANDN 68 -#define CKB_VM_ASM_OP_BCLR 69 -#define CKB_VM_ASM_OP_BCLRI 70 -#define CKB_VM_ASM_OP_BEXT 71 -#define CKB_VM_ASM_OP_BEXTI 72 -#define CKB_VM_ASM_OP_BINV 73 -#define CKB_VM_ASM_OP_BINVI 74 -#define CKB_VM_ASM_OP_BSET 75 -#define CKB_VM_ASM_OP_BSETI 76 -#define CKB_VM_ASM_OP_CLMUL 77 -#define CKB_VM_ASM_OP_CLMULH 78 -#define CKB_VM_ASM_OP_CLMULR 79 -#define CKB_VM_ASM_OP_CLZ 80 -#define CKB_VM_ASM_OP_CLZW 81 -#define CKB_VM_ASM_OP_CPOP 82 -#define CKB_VM_ASM_OP_CPOPW 83 -#define CKB_VM_ASM_OP_CTZ 84 -#define CKB_VM_ASM_OP_CTZW 85 -#define CKB_VM_ASM_OP_MAX 86 -#define CKB_VM_ASM_OP_MAXU 87 -#define CKB_VM_ASM_OP_MIN 88 -#define CKB_VM_ASM_OP_MINU 89 -#define CKB_VM_ASM_OP_ORCB 90 -#define CKB_VM_ASM_OP_ORN 91 -#define CKB_VM_ASM_OP_REV8 92 -#define CKB_VM_ASM_OP_ROL 93 -#define CKB_VM_ASM_OP_ROLW 94 -#define CKB_VM_ASM_OP_ROR 95 -#define CKB_VM_ASM_OP_RORI 96 -#define CKB_VM_ASM_OP_RORIW 97 -#define CKB_VM_ASM_OP_RORW 98 -#define CKB_VM_ASM_OP_SEXTB 99 -#define CKB_VM_ASM_OP_SEXTH 100 -#define CKB_VM_ASM_OP_SH1ADD 101 -#define CKB_VM_ASM_OP_SH1ADDUW 102 -#define CKB_VM_ASM_OP_SH2ADD 103 -#define CKB_VM_ASM_OP_SH2ADDUW 104 -#define CKB_VM_ASM_OP_SH3ADD 105 -#define CKB_VM_ASM_OP_SH3ADDUW 106 -#define CKB_VM_ASM_OP_SLLIUW 107 -#define CKB_VM_ASM_OP_XNOR 108 -#define CKB_VM_ASM_OP_ZEXTH 109 -#define CKB_VM_ASM_OP_WIDE_MUL 110 -#define CKB_VM_ASM_OP_WIDE_MULU 111 -#define CKB_VM_ASM_OP_WIDE_MULSU 112 -#define CKB_VM_ASM_OP_WIDE_DIV 113 -#define CKB_VM_ASM_OP_WIDE_DIVU 114 -#define CKB_VM_ASM_OP_FAR_JUMP_REL 115 -#define CKB_VM_ASM_OP_FAR_JUMP_ABS 116 -#define CKB_VM_ASM_OP_ADC 117 -#define CKB_VM_ASM_OP_SBB 118 -#define CKB_VM_ASM_OP_CUSTOM_LOAD_UIMM 119 -#define CKB_VM_ASM_OP_CUSTOM_LOAD_IMM 120 -#define CKB_VM_ASM_OP_CUSTOM_TRACE_END 121 +#define CKB_VM_ASM_OP_UNLOADED 16 +#define CKB_VM_ASM_OP_ADD 17 +#define CKB_VM_ASM_OP_ADDI 18 +#define CKB_VM_ASM_OP_ADDIW 19 +#define CKB_VM_ASM_OP_ADDW 20 +#define CKB_VM_ASM_OP_AND 21 +#define CKB_VM_ASM_OP_ANDI 22 +#define CKB_VM_ASM_OP_AUIPC 23 +#define CKB_VM_ASM_OP_BEQ 24 +#define CKB_VM_ASM_OP_BGE 25 +#define CKB_VM_ASM_OP_BGEU 26 +#define CKB_VM_ASM_OP_BLT 27 +#define CKB_VM_ASM_OP_BLTU 28 +#define CKB_VM_ASM_OP_BNE 29 +#define CKB_VM_ASM_OP_DIV 30 +#define CKB_VM_ASM_OP_DIVU 31 +#define CKB_VM_ASM_OP_DIVUW 32 +#define CKB_VM_ASM_OP_DIVW 33 +#define CKB_VM_ASM_OP_EBREAK 34 +#define CKB_VM_ASM_OP_ECALL 35 +#define CKB_VM_ASM_OP_FENCE 36 +#define CKB_VM_ASM_OP_FENCEI 37 +#define CKB_VM_ASM_OP_JAL 38 +#define CKB_VM_ASM_OP_JALR 39 +#define CKB_VM_ASM_OP_LB 40 +#define CKB_VM_ASM_OP_LBU 41 +#define CKB_VM_ASM_OP_LD 42 +#define CKB_VM_ASM_OP_LH 43 +#define CKB_VM_ASM_OP_LHU 44 +#define CKB_VM_ASM_OP_LUI 45 +#define CKB_VM_ASM_OP_LW 46 +#define CKB_VM_ASM_OP_LWU 47 +#define CKB_VM_ASM_OP_MUL 48 +#define CKB_VM_ASM_OP_MULH 49 +#define CKB_VM_ASM_OP_MULHSU 50 +#define CKB_VM_ASM_OP_MULHU 51 +#define CKB_VM_ASM_OP_MULW 52 +#define CKB_VM_ASM_OP_OR 53 +#define CKB_VM_ASM_OP_ORI 54 +#define CKB_VM_ASM_OP_REM 55 +#define CKB_VM_ASM_OP_REMU 56 +#define CKB_VM_ASM_OP_REMUW 57 +#define CKB_VM_ASM_OP_REMW 58 +#define CKB_VM_ASM_OP_SB 59 +#define CKB_VM_ASM_OP_SD 60 +#define CKB_VM_ASM_OP_SH 61 +#define CKB_VM_ASM_OP_SLL 62 +#define CKB_VM_ASM_OP_SLLI 63 +#define CKB_VM_ASM_OP_SLLIW 64 +#define CKB_VM_ASM_OP_SLLW 65 +#define CKB_VM_ASM_OP_SLT 66 +#define CKB_VM_ASM_OP_SLTI 67 +#define CKB_VM_ASM_OP_SLTIU 68 +#define CKB_VM_ASM_OP_SLTU 69 +#define CKB_VM_ASM_OP_SRA 70 +#define CKB_VM_ASM_OP_SRAI 71 +#define CKB_VM_ASM_OP_SRAIW 72 +#define CKB_VM_ASM_OP_SRAW 73 +#define CKB_VM_ASM_OP_SRL 74 +#define CKB_VM_ASM_OP_SRLI 75 +#define CKB_VM_ASM_OP_SRLIW 76 +#define CKB_VM_ASM_OP_SRLW 77 +#define CKB_VM_ASM_OP_SUB 78 +#define CKB_VM_ASM_OP_SUBW 79 +#define CKB_VM_ASM_OP_SW 80 +#define CKB_VM_ASM_OP_XOR 81 +#define CKB_VM_ASM_OP_XORI 82 +#define CKB_VM_ASM_OP_ADDUW 83 +#define CKB_VM_ASM_OP_ANDN 84 +#define CKB_VM_ASM_OP_BCLR 85 +#define CKB_VM_ASM_OP_BCLRI 86 +#define CKB_VM_ASM_OP_BEXT 87 +#define CKB_VM_ASM_OP_BEXTI 88 +#define CKB_VM_ASM_OP_BINV 89 +#define CKB_VM_ASM_OP_BINVI 90 +#define CKB_VM_ASM_OP_BSET 91 +#define CKB_VM_ASM_OP_BSETI 92 +#define CKB_VM_ASM_OP_CLMUL 93 +#define CKB_VM_ASM_OP_CLMULH 94 +#define CKB_VM_ASM_OP_CLMULR 95 +#define CKB_VM_ASM_OP_CLZ 96 +#define CKB_VM_ASM_OP_CLZW 97 +#define CKB_VM_ASM_OP_CPOP 98 +#define CKB_VM_ASM_OP_CPOPW 99 +#define CKB_VM_ASM_OP_CTZ 100 +#define CKB_VM_ASM_OP_CTZW 101 +#define CKB_VM_ASM_OP_MAX 102 +#define CKB_VM_ASM_OP_MAXU 103 +#define CKB_VM_ASM_OP_MIN 104 +#define CKB_VM_ASM_OP_MINU 105 +#define CKB_VM_ASM_OP_ORCB 106 +#define CKB_VM_ASM_OP_ORN 107 +#define CKB_VM_ASM_OP_REV8 108 +#define CKB_VM_ASM_OP_ROL 109 +#define CKB_VM_ASM_OP_ROLW 110 +#define CKB_VM_ASM_OP_ROR 111 +#define CKB_VM_ASM_OP_RORI 112 +#define CKB_VM_ASM_OP_RORIW 113 +#define CKB_VM_ASM_OP_RORW 114 +#define CKB_VM_ASM_OP_SEXTB 115 +#define CKB_VM_ASM_OP_SEXTH 116 +#define CKB_VM_ASM_OP_SH1ADD 117 +#define CKB_VM_ASM_OP_SH1ADDUW 118 +#define CKB_VM_ASM_OP_SH2ADD 119 +#define CKB_VM_ASM_OP_SH2ADDUW 120 +#define CKB_VM_ASM_OP_SH3ADD 121 +#define CKB_VM_ASM_OP_SH3ADDUW 122 +#define CKB_VM_ASM_OP_SLLIUW 123 +#define CKB_VM_ASM_OP_XNOR 124 +#define CKB_VM_ASM_OP_ZEXTH 125 +#define CKB_VM_ASM_OP_WIDE_MUL 126 +#define CKB_VM_ASM_OP_WIDE_MULU 127 +#define CKB_VM_ASM_OP_WIDE_MULSU 128 +#define CKB_VM_ASM_OP_WIDE_DIV 129 +#define CKB_VM_ASM_OP_WIDE_DIVU 130 +#define CKB_VM_ASM_OP_FAR_JUMP_REL 131 +#define CKB_VM_ASM_OP_FAR_JUMP_ABS 132 +#define CKB_VM_ASM_OP_ADC 133 +#define CKB_VM_ASM_OP_SBB 134 +#define CKB_VM_ASM_OP_CUSTOM_LOAD_UIMM 135 +#define CKB_VM_ASM_OP_CUSTOM_LOAD_IMM 136 #ifdef CKB_VM_ASM_GENERATE_LABEL_TABLES #ifdef __APPLE__