XLEN type helper

Signed-off-by: xermicus <cyrill@parity.io>
This commit is contained in:
xermicus
2024-03-22 16:34:04 +01:00
parent c52a8d0f20
commit 2327a58213
4 changed files with 24 additions and 22 deletions
+3
View File
@@ -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";
@@ -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",
)?;
+15 -16
View File
@@ -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<inkwell::values::IntValue<'ctx>> {
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<Pointer<'ctx>> {
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)
}
///
+2 -2
View File
@@ -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",
)?;