diff --git a/crates/llvm-context/src/eravm/const.rs b/crates/llvm-context/src/eravm/const.rs index 6f5fc8e..d47de5b 100644 --- a/crates/llvm-context/src/eravm/const.rs +++ b/crates/llvm-context/src/eravm/const.rs @@ -8,6 +8,9 @@ pub const LLVM_VERSION: semver::Version = semver::Version::new(15, 0, 4); /// The EraVM version. pub const ZKEVM_VERSION: semver::Version = semver::Version::new(1, 3, 2); +/// The register width sized type +pub static XLEN: usize = revive_common::BIT_LENGTH_X32; + /// The heap memory pointer pointer global variable name. pub static GLOBAL_HEAP_MEMORY_POINTER: &str = "memory_pointer"; diff --git a/crates/llvm-context/src/eravm/context/function/runtime/entry.rs b/crates/llvm-context/src/eravm/context/function/runtime/entry.rs index d15b540..2b2af11 100644 --- a/crates/llvm-context/src/eravm/context/function/runtime/entry.rs +++ b/crates/llvm-context/src/eravm/context/function/runtime/entry.rs @@ -46,7 +46,7 @@ impl Entry { crate::eravm::GLOBAL_HEAP_MEMORY_POINTER, context.byte_type().ptr_type(AddressSpace::Generic.into()), AddressSpace::Stack, - context.integer_type(32).get_undef(), + context.xlen_type().get_undef(), ); context.build_store( context @@ -101,14 +101,14 @@ impl Entry { .as_pointer_value(); let input_pointer_casted = context.builder.build_ptr_to_int( input_pointer, - context.integer_type(32), + context.xlen_type(), "input_pointer_casted", )?; - let length_pointer = context.build_alloca(context.integer_type(32), "len_ptr"); + let length_pointer = context.build_alloca(context.xlen_type(), "len_ptr"); let length_pointer_casted = context.builder.build_ptr_to_int( length_pointer.value, - context.integer_type(32), + context.xlen_type(), "length_pointer_casted", )?; diff --git a/crates/llvm-context/src/eravm/context/mod.rs b/crates/llvm-context/src/eravm/context/mod.rs index fa82e36..050d3de 100644 --- a/crates/llvm-context/src/eravm/context/mod.rs +++ b/crates/llvm-context/src/eravm/context/mod.rs @@ -665,14 +665,14 @@ where let heap_pointer = self.build_heap_gep( self.builder().build_ptr_to_int( pointer.value, - self.integer_type(32), + self.xlen_type(), "offset_ptrtoint", )?, pointer .r#type .size_of() .expect("should be IntValue") - .const_truncate(self.integer_type(32)), + .const_truncate(self.xlen_type()), )?; let value = self @@ -697,22 +697,22 @@ where self.build_alloca(storage_key_value.get_type(), "storage_key"); let storage_key_pointer_casted = self.builder().build_ptr_to_int( storage_key_pointer.value, - self.integer_type(32), + self.xlen_type(), "storage_key_pointer_casted", )?; let storage_value_pointer = self.build_alloca(self.field_type(), "storage_value"); let storage_value_pointer_casted = self.builder().build_ptr_to_int( storage_value_pointer.value, - self.integer_type(32), + self.xlen_type(), "storage_value_pointer_casted", )?; let storage_value_length_pointer = - self.build_alloca(self.integer_type(32), "out_len_ptr"); + self.build_alloca(self.xlen_type(), "out_len_ptr"); let storage_value_length_pointer_casted = self.builder().build_ptr_to_int( storage_value_length_pointer.value, - self.integer_type(32), + self.xlen_type(), "storage_value_length_pointer_cast", )?; @@ -779,7 +779,7 @@ where let heap_pointer = self.build_heap_gep( self.builder().build_ptr_to_int( pointer.value, - self.integer_type(32), + self.xlen_type(), "offset_ptrtoint", )?, value @@ -787,7 +787,7 @@ where .get_type() .size_of() .expect("should be IntValue") - .const_truncate(self.integer_type(32)), + .const_truncate(self.xlen_type()), )?; let value = self.build_byte_swap(value.as_basic_value_enum()); @@ -816,12 +816,12 @@ where let storage_key_pointer_casted = self.builder().build_ptr_to_int( storage_key_pointer.value, - self.integer_type(32), + self.xlen_type(), "storage_key_pointer_casted", )?; let storage_value_pointer_casted = self.builder().build_ptr_to_int( storage_value_pointer.value, - self.integer_type(32), + self.xlen_type(), "storage_value_pointer_casted", )?; @@ -1190,7 +1190,7 @@ where let length_pointer = self.safe_truncate_int_to_i32(length)?; let offset_pointer = self.builder().build_ptr_to_int( offset_into_heap.value, - self.integer_type(32), + self.xlen_type(), "return_data_ptr_to_int", )?; @@ -1215,7 +1215,7 @@ where ) -> anyhow::Result> { let truncated = self.builder().build_int_truncate_or_bit_cast( value, - self.integer_type(32), + self.xlen_type(), "offset_truncated", )?; let extended = self.builder().build_int_z_extend_or_bit_cast( @@ -1297,8 +1297,8 @@ where offset: inkwell::values::IntValue<'ctx>, length: inkwell::values::IntValue<'ctx>, ) -> anyhow::Result> { - assert_eq!(offset.get_type(), self.integer_type(32)); - assert_eq!(length.get_type(), self.integer_type(32)); + assert_eq!(offset.get_type(), self.xlen_type()); + assert_eq!(length.get_type(), self.xlen_type()); let heap_start = self .get_global(crate::eravm::GLOBAL_HEAP_MEMORY_POINTER)? @@ -1462,8 +1462,7 @@ where /// Returns the register witdh sized type. pub fn xlen_type(&self) -> inkwell::types::IntType<'ctx> { - self.llvm - .custom_width_int_type(revive_common::BIT_LENGTH_X32 as u32) + self.llvm.custom_width_int_type(crate::eravm::XLEN as u32) } /// diff --git a/crates/llvm-context/src/eravm/evm/crypto.rs b/crates/llvm-context/src/eravm/evm/crypto.rs index 0719432..c301ef3 100644 --- a/crates/llvm-context/src/eravm/evm/crypto.rs +++ b/crates/llvm-context/src/eravm/evm/crypto.rs @@ -21,14 +21,14 @@ where let input_pointer = context.build_heap_gep(offset_casted, length_casted)?; let input_pointer_casted = context.builder().build_ptr_to_int( input_pointer.value, - context.integer_type(32), + context.xlen_type(), "input_pointer_casted", )?; let output_pointer = context.build_alloca(context.field_type(), "output_pointer"); let output_pointer_casted = context.builder().build_ptr_to_int( output_pointer.value, - context.integer_type(32), + context.xlen_type(), "output_pointer_casted", )?;