Skip to content

Commit 423b6f8

Browse files
committed
Replace some calls to pointer::offset with add and sub
1 parent b668972 commit 423b6f8

File tree

4 files changed

+33
-36
lines changed

4 files changed

+33
-36
lines changed

crates/core_arch/src/x86/avx512gfni.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -829,21 +829,21 @@ mod tests {
829829
#[target_feature(enable = "sse2")]
830830
unsafe fn load_m128i_word<T>(data: &[T], word_index: usize) -> __m128i {
831831
let byte_offset = word_index * 16 / size_of::<T>();
832-
let pointer = data.as_ptr().offset(byte_offset as isize) as *const __m128i;
832+
let pointer = data.as_ptr().add(byte_offset) as *const __m128i;
833833
_mm_loadu_si128(black_box(pointer))
834834
}
835835

836836
#[target_feature(enable = "avx")]
837837
unsafe fn load_m256i_word<T>(data: &[T], word_index: usize) -> __m256i {
838838
let byte_offset = word_index * 32 / size_of::<T>();
839-
let pointer = data.as_ptr().offset(byte_offset as isize) as *const __m256i;
839+
let pointer = data.as_ptr().add(byte_offset) as *const __m256i;
840840
_mm256_loadu_si256(black_box(pointer))
841841
}
842842

843843
#[target_feature(enable = "avx512f")]
844844
unsafe fn load_m512i_word<T>(data: &[T], word_index: usize) -> __m512i {
845845
let byte_offset = word_index * 64 / size_of::<T>();
846-
let pointer = data.as_ptr().offset(byte_offset as isize) as *const i32;
846+
let pointer = data.as_ptr().add(byte_offset) as *const i32;
847847
_mm512_loadu_si512(black_box(pointer))
848848
}
849849

crates/core_arch/src/x86/sse.rs

+16-16
Original file line numberDiff line numberDiff line change
@@ -1185,9 +1185,9 @@ pub unsafe fn _mm_loadu_ps(p: *const f32) -> __m128 {
11851185
///
11861186
/// ```text
11871187
/// let a0 = *p;
1188-
/// let a1 = *p.offset(1);
1189-
/// let a2 = *p.offset(2);
1190-
/// let a3 = *p.offset(3);
1188+
/// let a1 = *p.add(1);
1189+
/// let a2 = *p.add(2);
1190+
/// let a3 = *p.add(3);
11911191
/// __m128::new(a3, a2, a1, a0)
11921192
/// ```
11931193
///
@@ -1241,9 +1241,9 @@ pub unsafe fn _mm_store_ss(p: *mut f32, a: __m128) {
12411241
/// ```text
12421242
/// let x = a.extract(0);
12431243
/// *p = x;
1244-
/// *p.offset(1) = x;
1245-
/// *p.offset(2) = x;
1246-
/// *p.offset(3) = x;
1244+
/// *p.add(1) = x;
1245+
/// *p.add(2) = x;
1246+
/// *p.add(3) = x;
12471247
/// ```
12481248
///
12491249
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_store1_ps)
@@ -1317,9 +1317,9 @@ pub unsafe fn _mm_storeu_ps(p: *mut f32, a: __m128) {
13171317
///
13181318
/// ```text
13191319
/// *p = a.extract(3);
1320-
/// *p.offset(1) = a.extract(2);
1321-
/// *p.offset(2) = a.extract(1);
1322-
/// *p.offset(3) = a.extract(0);
1320+
/// *p.add(1) = a.extract(2);
1321+
/// *p.add(2) = a.extract(1);
1322+
/// *p.add(3) = a.extract(0);
13231323
/// ```
13241324
///
13251325
/// [Intel's documentation](https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_storer_ps)
@@ -3006,9 +3006,9 @@ mod tests {
30063006

30073007
let unalignment = (p as usize) & 0xf;
30083008
if unalignment != 0 {
3009-
let delta = ((16 - unalignment) >> 2) as isize;
3009+
let delta = (16 - unalignment) >> 2;
30103010
fixup = delta as f32;
3011-
p = p.offset(delta);
3011+
p = p.add(delta);
30123012
}
30133013

30143014
let r = _mm_load_ps(p);
@@ -3019,7 +3019,7 @@ mod tests {
30193019
#[simd_test(enable = "sse")]
30203020
unsafe fn test_mm_loadu_ps() {
30213021
let vals = &[1.0f32, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0];
3022-
let p = vals.as_ptr().offset(3);
3022+
let p = vals.as_ptr().add(3);
30233023
let r = _mm_loadu_ps(black_box(p));
30243024
assert_eq_m128(r, _mm_setr_ps(4.0, 5.0, 6.0, 7.0));
30253025
}
@@ -3036,9 +3036,9 @@ mod tests {
30363036

30373037
let unalignment = (p as usize) & 0xf;
30383038
if unalignment != 0 {
3039-
let delta = ((16 - unalignment) >> 2) as isize;
3039+
let delta = (16 - unalignment) >> 2;
30403040
fixup = delta as f32;
3041-
p = p.offset(delta);
3041+
p = p.add(delta);
30423042
}
30433043

30443044
let r = _mm_loadr_ps(p);
@@ -3057,7 +3057,7 @@ mod tests {
30573057
unsafe fn test_mm_store_ss() {
30583058
let mut vals = [0.0f32; 8];
30593059
let a = _mm_setr_ps(1.0, 2.0, 3.0, 4.0);
3060-
_mm_store_ss(vals.as_mut_ptr().offset(1), a);
3060+
_mm_store_ss(vals.as_mut_ptr().add(1), a);
30613061

30623062
assert_eq!(vals[0], 0.0);
30633063
assert_eq!(vals[1], 1.0);
@@ -3152,7 +3152,7 @@ mod tests {
31523152
// Make sure p is **not** aligned to 16-byte boundary
31533153
if (p as usize) & 0xf == 0 {
31543154
ofs = 1;
3155-
p = p.offset(1);
3155+
p = p.add(1);
31563156
}
31573157

31583158
_mm_storeu_ps(p, *black_box(&a));

crates/core_arch/src/x86/sse2.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -4518,7 +4518,7 @@ mod tests {
45184518
// Make sure p is **not** aligned to 16-byte boundary
45194519
if (p as usize) & 0xf == 0 {
45204520
ofs = 1;
4521-
p = p.offset(1);
4521+
p = p.add(1);
45224522
}
45234523

45244524
_mm_storeu_pd(p, *black_box(&a));
@@ -4606,7 +4606,7 @@ mod tests {
46064606
let mut offset = 0;
46074607
if (d as usize) & 0xf == 0 {
46084608
offset = 1;
4609-
d = d.offset(offset as isize);
4609+
d = d.add(offset);
46104610
}
46114611

46124612
let r = _mm_loadu_pd(d);

examples/hex.rs

+12-15
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ unsafe fn hex_encode_avx2<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'a s
7676
let ascii_a = _mm256_set1_epi8((b'a' - 9 - 1) as i8);
7777
let and4bits = _mm256_set1_epi8(0xf);
7878

79-
let mut i = 0_isize;
79+
let mut i = 0_usize;
8080
while src.len() >= 32 {
8181
let invec = _mm256_loadu_si256(src.as_ptr() as *const _);
8282

@@ -96,18 +96,17 @@ unsafe fn hex_encode_avx2<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'a s
9696
let res2 = _mm256_unpackhi_epi8(masked2, masked1);
9797

9898
// Store everything into the right destination now
99-
let base = dst.as_mut_ptr().offset(i * 2);
100-
let base1 = base.offset(0) as *mut _;
101-
let base2 = base.offset(16) as *mut _;
102-
let base3 = base.offset(32) as *mut _;
103-
let base4 = base.offset(48) as *mut _;
99+
let base = dst.as_mut_ptr().add(i * 2);
100+
let base1 = base.add(0) as *mut _;
101+
let base2 = base.add(16) as *mut _;
102+
let base3 = base.add(32) as *mut _;
103+
let base4 = base.add(48) as *mut _;
104104
_mm256_storeu2_m128i(base3, base1, res1);
105105
_mm256_storeu2_m128i(base4, base2, res2);
106106
src = &src[32..];
107107
i += 32;
108108
}
109109

110-
let i = i as usize;
111110
let _ = hex_encode_sse41(src, &mut dst[i * 2..]);
112111

113112
Ok(str::from_utf8_unchecked(&dst[..src.len() * 2 + i * 2]))
@@ -122,7 +121,7 @@ unsafe fn hex_encode_sse41<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'a
122121
let ascii_a = _mm_set1_epi8((b'a' - 9 - 1) as i8);
123122
let and4bits = _mm_set1_epi8(0xf);
124123

125-
let mut i = 0_isize;
124+
let mut i = 0_usize;
126125
while src.len() >= 16 {
127126
let invec = _mm_loadu_si128(src.as_ptr() as *const _);
128127

@@ -141,13 +140,12 @@ unsafe fn hex_encode_sse41<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'a
141140
let res1 = _mm_unpacklo_epi8(masked2, masked1);
142141
let res2 = _mm_unpackhi_epi8(masked2, masked1);
143142

144-
_mm_storeu_si128(dst.as_mut_ptr().offset(i * 2) as *mut _, res1);
145-
_mm_storeu_si128(dst.as_mut_ptr().offset(i * 2 + 16) as *mut _, res2);
143+
_mm_storeu_si128(dst.as_mut_ptr().add(i * 2) as *mut _, res1);
144+
_mm_storeu_si128(dst.as_mut_ptr().add(i * 2 + 16) as *mut _, res2);
146145
src = &src[16..];
147146
i += 16;
148147
}
149148

150-
let i = i as usize;
151149
let _ = hex_encode_fallback(src, &mut dst[i * 2..]);
152150

153151
Ok(str::from_utf8_unchecked(&dst[..src.len() * 2 + i * 2]))
@@ -163,7 +161,7 @@ unsafe fn hex_encode_simd128<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'
163161
let ascii_a = u8x16_splat(b'a' - 9 - 1);
164162
let and4bits = u8x16_splat(0xf);
165163

166-
let mut i = 0_isize;
164+
let mut i = 0_usize;
167165
while src.len() >= 16 {
168166
let invec = v128_load(src.as_ptr() as *const _);
169167

@@ -189,13 +187,12 @@ unsafe fn hex_encode_simd128<'a>(mut src: &[u8], dst: &'a mut [u8]) -> Result<&'
189187
masked2, masked1,
190188
);
191189

192-
v128_store(dst.as_mut_ptr().offset(i * 2) as *mut _, res1);
193-
v128_store(dst.as_mut_ptr().offset(i * 2 + 16) as *mut _, res2);
190+
v128_store(dst.as_mut_ptr().add(i * 2) as *mut _, res1);
191+
v128_store(dst.as_mut_ptr().add(i * 2 + 16) as *mut _, res2);
194192
src = &src[16..];
195193
i += 16;
196194
}
197195

198-
let i = i as usize;
199196
let _ = hex_encode_fallback(src, &mut dst[i * 2..]);
200197

201198
Ok(str::from_utf8_unchecked(&dst[..src.len() * 2 + i * 2]))

0 commit comments

Comments
 (0)