@@ -19,33 +19,19 @@ pub trait PointerArithmetic: HasDataLayout {
19
19
20
20
#[ inline( always) ]
21
21
fn max_size_of_val ( & self ) -> Size {
22
- Size :: from_bytes ( self . target_isize_max ( ) )
23
- }
24
-
25
- #[ inline]
26
- fn target_usize_max ( & self ) -> u64 {
27
- self . pointer_size ( ) . unsigned_int_max ( ) . try_into ( ) . unwrap ( )
28
- }
29
-
30
- #[ inline]
31
- fn target_isize_min ( & self ) -> i64 {
32
- self . pointer_size ( ) . signed_int_min ( ) . try_into ( ) . unwrap ( )
33
- }
34
-
35
- #[ inline]
36
- fn target_isize_max ( & self ) -> i64 {
37
- self . pointer_size ( ) . signed_int_max ( ) . try_into ( ) . unwrap ( )
22
+ Size :: from_bytes ( self . data_layout ( ) . target_isize_max ( ) )
38
23
}
39
24
40
25
#[ inline]
41
26
fn target_usize_to_isize ( & self , val : u64 ) -> i64 {
27
+ let dl = self . data_layout ( ) ;
42
28
let val = val as i64 ;
43
29
// Now wrap-around into the machine_isize range.
44
- if val > self . target_isize_max ( ) {
30
+ if val > dl . target_isize_max ( ) {
45
31
// This can only happen if the ptr size is < 64, so we know max_usize_plus_1 fits into
46
32
// i64.
47
- debug_assert ! ( self . pointer_size( ) . bits( ) < 64 ) ;
48
- let max_usize_plus_1 = 1u128 << self . pointer_size ( ) . bits ( ) ;
33
+ debug_assert ! ( dl . pointer_size. bits( ) < 64 ) ;
34
+ let max_usize_plus_1 = 1u128 << dl . pointer_size . bits ( ) ;
49
35
val - i64:: try_from ( max_usize_plus_1) . unwrap ( )
50
36
} else {
51
37
val
@@ -58,7 +44,7 @@ pub trait PointerArithmetic: HasDataLayout {
58
44
#[ inline]
59
45
fn truncate_to_ptr ( & self , ( val, over) : ( u64 , bool ) ) -> ( u64 , bool ) {
60
46
let val = u128:: from ( val) ;
61
- let max_ptr_plus_1 = 1u128 << self . pointer_size ( ) . bits ( ) ;
47
+ let max_ptr_plus_1 = 1u128 << self . data_layout ( ) . pointer_size . bits ( ) ;
62
48
( u64:: try_from ( val % max_ptr_plus_1) . unwrap ( ) , over || val >= max_ptr_plus_1)
63
49
}
64
50
@@ -76,11 +62,11 @@ pub trait PointerArithmetic: HasDataLayout {
76
62
let n = i. unsigned_abs ( ) ;
77
63
if i >= 0 {
78
64
let ( val, over) = self . overflowing_offset ( val, n) ;
79
- ( val, over || i > self . target_isize_max ( ) )
65
+ ( val, over || i > self . data_layout ( ) . target_isize_max ( ) )
80
66
} else {
81
67
let res = val. overflowing_sub ( n) ;
82
68
let ( val, over) = self . truncate_to_ptr ( res) ;
83
- ( val, over || i < self . target_isize_min ( ) )
69
+ ( val, over || i < self . data_layout ( ) . target_isize_min ( ) )
84
70
}
85
71
}
86
72
0 commit comments