mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-29 14:54:47 +00:00
fix tag id stored in ptr bits on 32-bit systems
This commit is contained in:
parent
3ef4a40f45
commit
59c63ef3a8
1 changed files with 12 additions and 2 deletions
|
@ -1706,7 +1706,11 @@ pub fn tag_pointer_read_tag_id<'a, 'ctx, 'env>(
|
||||||
env: &Env<'a, 'ctx, 'env>,
|
env: &Env<'a, 'ctx, 'env>,
|
||||||
pointer: PointerValue<'ctx>,
|
pointer: PointerValue<'ctx>,
|
||||||
) -> IntValue<'ctx> {
|
) -> IntValue<'ctx> {
|
||||||
let mask: u64 = 0b0000_0111;
|
let mask: u64 = match env.ptr_bytes {
|
||||||
|
8 => 0b0000_0111,
|
||||||
|
4 => 0b0000_0011,
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
|
||||||
let ptr_int = env.ptr_int();
|
let ptr_int = env.ptr_int();
|
||||||
|
|
||||||
|
@ -1725,11 +1729,17 @@ pub fn tag_pointer_clear_tag_id<'a, 'ctx, 'env>(
|
||||||
) -> PointerValue<'ctx> {
|
) -> PointerValue<'ctx> {
|
||||||
let ptr_int = env.ptr_int();
|
let ptr_int = env.ptr_int();
|
||||||
|
|
||||||
|
let tag_id_bits_mask = match env.ptr_bytes {
|
||||||
|
8 => 3,
|
||||||
|
4 => 2,
|
||||||
|
_ => unreachable!(),
|
||||||
|
};
|
||||||
|
|
||||||
let as_int = env.builder.build_ptr_to_int(pointer, ptr_int, "to_int");
|
let as_int = env.builder.build_ptr_to_int(pointer, ptr_int, "to_int");
|
||||||
|
|
||||||
let mask = {
|
let mask = {
|
||||||
let a = env.ptr_int().const_all_ones();
|
let a = env.ptr_int().const_all_ones();
|
||||||
let tag_id_bits = env.ptr_int().const_int(3, false);
|
let tag_id_bits = env.ptr_int().const_int(tag_id_bits_mask, false);
|
||||||
env.builder.build_left_shift(a, tag_id_bits, "make_mask")
|
env.builder.build_left_shift(a, tag_id_bits, "make_mask")
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue