]> git.lizzy.rs Git - rust.git/blob - tests/assembly/is_aligned.rs
Rollup merge of #107023 - scottmcm:stop-shouting, r=Nilstrieb
[rust.git] / tests / assembly / is_aligned.rs
1 // assembly-output: emit-asm
2 // min-llvm-version: 15.0
3 // only-x86_64
4 // revisions: opt-speed opt-size
5 // [opt-speed] compile-flags: -Copt-level=1
6 // [opt-size] compile-flags: -Copt-level=s
7 #![crate_type="rlib"]
8
9 #![feature(core_intrinsics)]
10 #![feature(pointer_is_aligned)]
11
12 // CHECK-LABEL: is_aligned_to_unchecked
13 // CHECK: decq
14 // CHECK-NEXT: testq
15 // CHECK-NEXT: sete
16 // CHECK: retq
17 #[no_mangle]
18 pub unsafe fn is_aligned_to_unchecked(ptr: *const u8, align: usize) -> bool {
19     unsafe {
20         std::intrinsics::assume(align.is_power_of_two())
21     }
22     ptr.is_aligned_to(align)
23 }
24
25 // CHECK-LABEL: is_aligned_1
26 // CHECK: movb $1
27 // CHECK: retq
28 #[no_mangle]
29 pub fn is_aligned_1(ptr: *const u8) -> bool {
30     ptr.is_aligned()
31 }
32
33 // CHECK-LABEL: is_aligned_2
34 // CHECK: testb $1
35 // CHECK-NEXT: sete
36 // CHECK: retq
37 #[no_mangle]
38 pub fn is_aligned_2(ptr: *const u16) -> bool {
39     ptr.is_aligned()
40 }
41
42 // CHECK-LABEL: is_aligned_4
43 // CHECK: testb $3
44 // CHECK-NEXT: sete
45 // CHECK: retq
46 #[no_mangle]
47 pub fn is_aligned_4(ptr: *const u32) -> bool {
48     ptr.is_aligned()
49 }
50
51 // CHECK-LABEL: is_aligned_8
52 // CHECK: testb $7
53 // CHECK-NEXT: sete
54 // CHECK: retq
55 #[no_mangle]
56 pub fn is_aligned_8(ptr: *const u64) -> bool {
57     ptr.is_aligned()
58 }