Skip to content

Commit

Permalink
Update asm test
Browse files Browse the repository at this point in the history
  • Loading branch information
taiki-e committed Jun 12, 2022
1 parent 3f15a28 commit 0b43d46
Show file tree
Hide file tree
Showing 33 changed files with 3,508 additions and 2,450 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ See [P1478R1][p1478r1] for more.

Note:
- This feature is only available on some platforms. See [the documentation of atomic-maybe-uninit](https://github.com/taiki-e/atomic-maybe-uninit#platform-support) crate for more.
- Enabling this feature increases the MSRV to Rust 1.59+.
- Enabling this feature increases the MSRV to Rust 1.59.
- This feature is not compatible with [Miri](https://github.com/rust-lang/miri/issues/1045) or [Sanitizer](https://github.com/google/sanitizers/issues/192) as of 2022-03-11 since it uses an inline assembly.

## Related Projects
Expand Down
1 change: 1 addition & 0 deletions tests/asm-test/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ doc = false

[features]
default = ["anyhow", "duct", "fs-err", "indexmap", "lexopt", "rustc-demangle", "syn"]
atomic-maybe-uninit = ["atomic-memcpy/atomic-maybe-uninit"]

[dependencies]
atomic-memcpy = { path = "../..", features = ["inline-always"] }
Expand Down
323 changes: 197 additions & 126 deletions tests/asm-test/asm/i686-unknown-linux-gnu/atomic_memcpy_load_align1
Original file line number Diff line number Diff line change
@@ -1,140 +1,211 @@
asm_test::atomic_memcpy_load_align1::acquire:
push ebx
push edi
push esi
sub esp, 32
sub esp, 36
mov ecx, dword, ptr, [esp, +, 52]
lea esi, [esp, +, 31]
mov eax, dword, ptr, [esp, +, 48]
lea edi, [ecx, +, 3]
and edi, -4
mov edx, edi
sub edx, ecx
cmp edx, 33
jb .LBB0_2
mov dl, byte, ptr, [ecx]
mov byte, ptr, [esp], dl
mov dl, byte, ptr, [ecx, +, 1]
mov byte, ptr, [esp, +, 1], dl
mov dl, byte, ptr, [ecx, +, 2]
mov byte, ptr, [esp, +, 2], dl
mov dl, byte, ptr, [ecx, +, 3]
mov byte, ptr, [esp, +, 3], dl
mov dl, byte, ptr, [ecx, +, 4]
mov byte, ptr, [esp, +, 4], dl
mov dl, byte, ptr, [ecx, +, 5]
mov byte, ptr, [esp, +, 5], dl
mov dl, byte, ptr, [ecx, +, 6]
mov byte, ptr, [esp, +, 6], dl
mov dl, byte, ptr, [ecx, +, 7]
mov byte, ptr, [esp, +, 7], dl
mov dl, byte, ptr, [ecx, +, 8]
mov byte, ptr, [esp, +, 8], dl
mov dl, byte, ptr, [ecx, +, 9]
mov byte, ptr, [esp, +, 9], dl
mov dl, byte, ptr, [ecx, +, 10]
mov byte, ptr, [esp, +, 10], dl
mov dl, byte, ptr, [ecx, +, 11]
mov byte, ptr, [esp, +, 11], dl
mov dl, byte, ptr, [ecx, +, 12]
mov byte, ptr, [esp, +, 12], dl
mov dl, byte, ptr, [ecx, +, 13]
mov byte, ptr, [esp, +, 13], dl
mov dl, byte, ptr, [ecx, +, 14]
mov byte, ptr, [esp, +, 14], dl
mov dl, byte, ptr, [ecx, +, 15]
mov byte, ptr, [esp, +, 15], dl
mov dl, byte, ptr, [ecx, +, 16]
mov byte, ptr, [esp, +, 16], dl
mov dl, byte, ptr, [ecx, +, 17]
mov byte, ptr, [esp, +, 17], dl
mov dl, byte, ptr, [ecx, +, 18]
mov byte, ptr, [esp, +, 18], dl
mov dl, byte, ptr, [ecx, +, 19]
mov byte, ptr, [esp, +, 19], dl
mov dl, byte, ptr, [ecx, +, 20]
mov byte, ptr, [esp, +, 20], dl
mov dl, byte, ptr, [ecx, +, 21]
mov byte, ptr, [esp, +, 21], dl
mov dl, byte, ptr, [ecx, +, 22]
mov byte, ptr, [esp, +, 22], dl
mov dl, byte, ptr, [ecx, +, 23]
mov byte, ptr, [esp, +, 23], dl
mov dl, byte, ptr, [ecx, +, 24]
mov byte, ptr, [esp, +, 24], dl
mov dl, byte, ptr, [ecx, +, 25]
mov byte, ptr, [esp, +, 25], dl
mov dl, byte, ptr, [ecx, +, 26]
mov byte, ptr, [esp, +, 26], dl
mov dl, byte, ptr, [ecx, +, 27]
mov byte, ptr, [esp, +, 27], dl
mov dl, byte, ptr, [ecx, +, 28]
mov byte, ptr, [esp, +, 28], dl
mov dl, byte, ptr, [ecx, +, 29]
mov byte, ptr, [esp, +, 29], dl
mov dl, byte, ptr, [ecx, +, 30]
mov byte, ptr, [esp, +, 30], dl
mov cl, byte, ptr, [ecx, +, 31]
mov byte, ptr, [esp, +, 31], cl
lea edx, [ecx, +, 31]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 30]
lea esi, [esp, +, 30]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 29]
lea esi, [esp, +, 29]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 28]
lea esi, [esp, +, 28]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 27]
lea esi, [esp, +, 27]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 26]
lea esi, [esp, +, 26]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 25]
lea esi, [esp, +, 25]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 24]
lea esi, [esp, +, 24]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 23]
lea esi, [esp, +, 23]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 22]
lea esi, [esp, +, 22]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 21]
lea esi, [esp, +, 21]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 20]
lea esi, [esp, +, 20]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 19]
lea esi, [esp, +, 19]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 18]
lea esi, [esp, +, 18]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 17]
lea esi, [esp, +, 17]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 16]
lea esi, [esp, +, 16]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 15]
lea esi, [esp, +, 15]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 14]
lea esi, [esp, +, 14]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 13]
lea esi, [esp, +, 13]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 12]
lea esi, [esp, +, 12]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 11]
lea esi, [esp, +, 11]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 10]
lea esi, [esp, +, 10]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 9]
lea esi, [esp, +, 9]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 8]
lea esi, [esp, +, 8]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 7]
lea esi, [esp, +, 7]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 6]
lea esi, [esp, +, 6]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 5]
lea esi, [esp, +, 5]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 4]
lea esi, [esp, +, 4]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 3]
lea esi, [esp, +, 3]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 2]
lea esi, [esp, +, 2]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
lea edx, [ecx, +, 1]
lea esi, [esp, +, 1]
#APP
mov bl, byte, ptr, [edx]
mov byte, ptr, [esi], bl
#NO_APP
mov edx, esp
#APP
mov bl, byte, ptr, [ecx]
mov byte, ptr, [edx], bl
#NO_APP
movsd xmm1, qword, ptr, [esp, +, 8]
movsd xmm0, qword, ptr, [esp, +, 16]
movsd xmm2, qword, ptr, [esp]
movsd xmm0, qword, ptr, [esp]
movsd xmm2, qword, ptr, [esp, +, 16]
movsd qword, ptr, [eax, +, 8], xmm1
movsd xmm1, qword, ptr, [esp, +, 24]
movsd qword, ptr, [eax, +, 16], xmm0
movsd qword, ptr, [eax], xmm2
movsd qword, ptr, [eax], xmm0
movsd qword, ptr, [eax, +, 16], xmm2
movsd qword, ptr, [eax, +, 24], xmm1
jmp .LBB0_12
.LBB0_2:
test edx, edx
je .LBB0_3
xor esi, esi
.LBB0_5:
movzx ebx, byte, ptr, [ecx, +, esi]
mov byte, ptr, [esp, +, esi], bl
inc esi
cmp edx, esi
jne .LBB0_5
mov esi, ecx
sub esi, edi
add esi, 32
cmp esi, 4
jae .LBB0_7
jmp .LBB0_8
.LBB0_3:
mov esi, 32
.LBB0_7:
mov edi, dword, ptr, [ecx, +, edx]
add esi, -4
mov dword, ptr, [esp, +, edx], edi
add edx, 4
cmp esi, 3
ja .LBB0_7
.LBB0_8:
test esi, esi
je .LBB0_11
lea edi, [esp, +, edx]
add ecx, edx
xor edx, edx
.LBB0_10:
movzx ebx, byte, ptr, [ecx, +, edx]
mov byte, ptr, [edi, +, edx], bl
inc edx
cmp esi, edx
jne .LBB0_10
.LBB0_11:
movsd xmm1, qword, ptr, [esp, +, 16]
movsd xmm0, qword, ptr, [esp, +, 24]
movsd xmm2, qword, ptr, [esp]
movsd qword, ptr, [eax, +, 16], xmm1
movsd xmm1, qword, ptr, [esp, +, 8]
movsd qword, ptr, [eax, +, 24], xmm0
movsd qword, ptr, [eax], xmm2
movsd qword, ptr, [eax, +, 8], xmm1
.LBB0_12:
#MEMBARRIER
add esp, 32
add esp, 36
pop esi
pop edi
pop ebx
ret 4
asm_test::atomic_memcpy_load_align1::read_volatile_acquire_fence:
Expand Down
Loading

0 comments on commit 0b43d46

Please sign in to comment.