Skip to content

Instantly share code, notes, and snippets.

@BillyONeal
Created March 9, 2019 18:39
Show Gist options
  • Save BillyONeal/ce23b403fa3fe1670efd2293e79a244c to your computer and use it in GitHub Desktop.
Save BillyONeal/ce23b403fa3fe1670efd2293e79a244c to your computer and use it in GitHub Desktop.
Atomic Asm Output
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.20.27404.0
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC ?i@@3U?$atomic@H@std@@A ; i
_BSS SEGMENT
?i@@3U?$atomic@H@std@@A DD 01H DUP (?) ; i
_BSS ENDS
PUBLIC ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z ; std::_Atomic_integral<int,4>::operator++
PUBLIC ?example@@YAXXZ ; example
PUBLIC ??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >
EXTRN __CxxFrameHandler3:PROC
; COMDAT pdata
pdata SEGMENT
$pdata$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z DD imagerel $LN3
DD imagerel $LN3+69
DD imagerel $unwind$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
pdata ENDS
pdata SEGMENT
$pdata$?example@@YAXXZ DD imagerel $LN3
DD imagerel $LN3+23
DD imagerel $unwind$?example@@YAXXZ
pdata ENDS
xdata SEGMENT
$unwind$?example@@YAXXZ DD 010401H
DD 04204H
xdata ENDS
; COMDAT xdata
xdata SEGMENT
$ip2state$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z DD imagerel ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
DD 0ffffffffH
xdata ENDS
; COMDAT CONST
CONST SEGMENT
$cppxdata$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z DD 019930522H
DD 00H
DD 00H
DD 00H
DD 00H
DD 01H
DD imagerel $ip2state$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
DD 028H
DD 00H
DD 05H
CONST ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z DD 011619H
DD 0620dH
DD imagerel __CxxFrameHandler3
DD imagerel $cppxdata$??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
xdata ENDS
; Function compile flags: /Odtp
; COMDAT ??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z
_TEXT SEGMENT
_Source$ = 8
??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z PROC ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\atomic
; Line 215
00000 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
; Line 218
00005 48 8b 44 24 08 mov rax, QWORD PTR _Source$[rsp]
; Line 219
0000a c3 ret 0
??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z ENDP ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >
_TEXT ENDS
; Function compile flags: /Odtp
_TEXT SEGMENT
?example@@YAXXZ PROC ; example
; File C:\Users\bion\Desktop\test.cpp
; Line 5
$LN3:
00000 48 83 ec 28 sub rsp, 40 ; 00000028H
; Line 6
00004 33 d2 xor edx, edx
00006 48 8d 0d 00 00
00 00 lea rcx, OFFSET FLAT:?i@@3U?$atomic@H@std@@A ; i
0000d e8 00 00 00 00 call ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z ; std::_Atomic_integral<int,4>::operator++
; Line 7
00012 48 83 c4 28 add rsp, 40 ; 00000028H
00016 c3 ret 0
?example@@YAXXZ ENDP ; example
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
_TEXT SEGMENT
_After$ = 32
$T1 = 40
this$ = 64
__formal$ = 72
??E?$_Atomic_integral@H$03@std@@QEAAHH@Z PROC ; std::_Atomic_integral<int,4>::operator++, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\atomic
; Line 1028
$LN3:
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
00009 48 83 ec 38 sub rsp, 56 ; 00000038H
0000d 48 c7 44 24 28
fe ff ff ff mov QWORD PTR $T1[rsp], -2
; Line 1030
00016 48 8b 4c 24 40 mov rcx, QWORD PTR this$[rsp]
0001b e8 00 00 00 00 call ??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >
00020 90 npad 1
00021 b9 01 00 00 00 mov ecx, 1
00026 f0 0f c1 08 lock xadd DWORD PTR [rax], ecx
0002a ff c1 inc ecx
0002c 8b c1 mov eax, ecx
0002e 89 44 24 20 mov DWORD PTR _After$[rsp], eax
; Line 1031
00032 8b 44 24 20 mov eax, DWORD PTR _After$[rsp]
00036 ff c8 dec eax
00038 89 44 24 20 mov DWORD PTR _After$[rsp], eax
; Line 1032
0003c 8b 44 24 20 mov eax, DWORD PTR _After$[rsp]
; Line 1033
00040 48 83 c4 38 add rsp, 56 ; 00000038H
00044 c3 ret 0
??E?$_Atomic_integral@H$03@std@@QEAAHH@Z ENDP ; std::_Atomic_integral<int,4>::operator++
_TEXT ENDS
END
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.20.27404.0
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC ?i@@3U?$atomic@H@std@@A ; i
_BSS SEGMENT
?i@@3U?$atomic@H@std@@A DD 01H DUP (?) ; i
_BSS ENDS
PUBLIC ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z ; std::_Atomic_integral<int,4>::operator++
PUBLIC ?example@@YAXXZ ; example
PUBLIC ??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >
; Function compile flags: /Ogtpy
; COMDAT ??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z
_TEXT SEGMENT
_Source$ = 8
??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z PROC ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\atomic
; Line 218
00000 48 8b c1 mov rax, rcx
; Line 219
00003 c3 ret 0
??$_Atomic_address_as@JU?$_Atomic_padded@H@std@@@std@@YAPECJAEAU?$_Atomic_padded@H@0@@Z ENDP ; std::_Atomic_address_as<long,std::_Atomic_padded<int> >
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?example@@YAXXZ
_TEXT SEGMENT
?example@@YAXXZ PROC ; example, COMDAT
; File C:\Users\bion\Desktop\test.cpp
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\atomic
; Line 1030
00000 f0 ff 05 00 00
00 00 lock inc DWORD PTR ?i@@3U?$atomic@H@std@@A ; i
; File C:\Users\bion\Desktop\test.cpp
; Line 7
00007 c3 ret 0
?example@@YAXXZ ENDP ; example
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ??E?$_Atomic_integral@H$03@std@@QEAAHH@Z
_TEXT SEGMENT
this$ = 8
__formal$ = 16
??E?$_Atomic_integral@H$03@std@@QEAAHH@Z PROC ; std::_Atomic_integral<int,4>::operator++, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\atomic
; Line 1030
00000 b8 01 00 00 00 mov eax, 1
00005 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; Line 1033
00009 c3 ret 0
??E?$_Atomic_integral@H$03@std@@QEAAHH@Z ENDP ; std::_Atomic_integral<int,4>::operator++
_TEXT ENDS
END
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.20.27404.0
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC ?i@@3U?$atomic@H@std@@A ; i
_BSS SEGMENT
?i@@3U?$atomic@H@std@@A DD 01H DUP (?) ; i
_BSS ENDS
PUBLIC ?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z ; std::_Fetch_add_seq_cst_4
PUBLIC ?_Fetch_add_relaxed_4@std@@YAKPECKK@Z ; std::_Fetch_add_relaxed_4
PUBLIC ?_Fetch_add_acquire_4@std@@YAKPECKK@Z ; std::_Fetch_add_acquire_4
PUBLIC ?_Fetch_add_release_4@std@@YAKPECKK@Z ; std::_Fetch_add_release_4
PUBLIC ?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z ; std::_Atomic_fetch_add_4
PUBLIC ??E_Atomic_int@std@@QEAAHH@Z ; std::_Atomic_int::operator++
PUBLIC ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z ; std::atomic_fetch_add_explicit
PUBLIC ?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z ; std::atomic_fetch_add
PUBLIC ?example@@YAXXZ ; example
EXTRN __CxxFrameHandler3:PROC
EXTRN __ImageBase:BYTE
; COMDAT pdata
pdata SEGMENT
$pdata$?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z DD imagerel $LN11
DD imagerel $LN11+152
DD imagerel $unwind$?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z
pdata ENDS
; COMDAT pdata
pdata SEGMENT
$pdata$??E_Atomic_int@std@@QEAAHH@Z DD imagerel $LN3
DD imagerel $LN3+33
DD imagerel $unwind$??E_Atomic_int@std@@QEAAHH@Z
pdata ENDS
; COMDAT pdata
pdata SEGMENT
$pdata$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z DD imagerel $LN3
DD imagerel $LN3+55
DD imagerel $unwind$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
pdata ENDS
; COMDAT pdata
pdata SEGMENT
$pdata$?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z DD imagerel $LN3
DD imagerel $LN3+38
DD imagerel $unwind$?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z
pdata ENDS
pdata SEGMENT
$pdata$?example@@YAXXZ DD imagerel $LN3
DD imagerel $LN3+23
DD imagerel $unwind$?example@@YAXXZ
pdata ENDS
xdata SEGMENT
$unwind$?example@@YAXXZ DD 010401H
DD 04204H
xdata ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z DD 010d01H
DD 0420dH
xdata ENDS
; COMDAT xdata
xdata SEGMENT
$ip2state$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z DD imagerel ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
DD 0ffffffffH
xdata ENDS
; COMDAT CONST
CONST SEGMENT
$cppxdata$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z DD 019930522H
DD 00H
DD 00H
DD 00H
DD 00H
DD 01H
DD imagerel $ip2state$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
DD 020H
DD 00H
DD 05H
CONST ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z DD 011b19H
DD 06212H
DD imagerel __CxxFrameHandler3
DD imagerel $cppxdata$?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
xdata ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$??E_Atomic_int@std@@QEAAHH@Z DD 010d01H
DD 0420dH
xdata ENDS
; COMDAT xdata
xdata SEGMENT
$unwind$?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z DD 011201H
DD 06212H
xdata ENDS
; Function compile flags: /Odtp
_TEXT SEGMENT
?example@@YAXXZ PROC ; example
; File C:\Users\bion\Desktop\test.cpp
; Line 5
$LN3:
00000 48 83 ec 28 sub rsp, 40 ; 00000028H
; Line 6
00004 33 d2 xor edx, edx
00006 48 8d 0d 00 00
00 00 lea rcx, OFFSET FLAT:?i@@3U?$atomic@H@std@@A ; i
0000d e8 00 00 00 00 call ??E_Atomic_int@std@@QEAAHH@Z ; std::_Atomic_int::operator++
; Line 7
00012 48 83 c4 28 add rsp, 40 ; 00000028H
00016 c3 ret 0
?example@@YAXXZ ENDP ; example
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z
_TEXT SEGMENT
_Atom$ = 48
_Value$ = 56
?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z PROC ; std::atomic_fetch_add, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 743
$LN3:
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
00009 48 83 ec 28 sub rsp, 40 ; 00000028H
; Line 744
0000d 41 b8 05 00 00
00 mov r8d, 5
00013 8b 54 24 38 mov edx, DWORD PTR _Value$[rsp]
00017 48 8b 4c 24 30 mov rcx, QWORD PTR _Atom$[rsp]
0001c e8 00 00 00 00 call ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z ; std::atomic_fetch_add_explicit
; Line 745
00021 48 83 c4 28 add rsp, 40 ; 00000028H
00025 c3 ret 0
?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z ENDP ; std::atomic_fetch_add
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
_TEXT SEGMENT
$T1 = 32
_Atom$ = 64
_Value$ = 72
_Order$ = 80
?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z PROC ; std::atomic_fetch_add_explicit, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 734
$LN3:
00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d
00005 89 54 24 10 mov DWORD PTR [rsp+16], edx
00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
0000e 48 83 ec 38 sub rsp, 56 ; 00000038H
00012 48 c7 44 24 20
fe ff ff ff mov QWORD PTR $T1[rsp], -2
; Line 735
0001b 48 8b 44 24 40 mov rax, QWORD PTR _Atom$[rsp]
00020 44 8b 44 24 50 mov r8d, DWORD PTR _Order$[rsp]
00025 8b 54 24 48 mov edx, DWORD PTR _Value$[rsp]
00029 48 8b c8 mov rcx, rax
0002c e8 00 00 00 00 call ?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z ; std::_Atomic_fetch_add_4
00031 90 npad 1
; Line 736
00032 48 83 c4 38 add rsp, 56 ; 00000038H
00036 c3 ret 0
?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z ENDP ; std::atomic_fetch_add_explicit
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ??E_Atomic_int@std@@QEAAHH@Z
_TEXT SEGMENT
this$ = 48
__formal$ = 56
??E_Atomic_int@std@@QEAAHH@Z PROC ; std::_Atomic_int::operator++, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 829
$LN3:
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
00009 48 83 ec 28 sub rsp, 40 ; 00000028H
; Line 830
0000d ba 01 00 00 00 mov edx, 1
00012 48 8b 4c 24 30 mov rcx, QWORD PTR this$[rsp]
00017 e8 00 00 00 00 call ?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z ; std::atomic_fetch_add
; Line 831
0001c 48 83 c4 28 add rsp, 40 ; 00000028H
00020 c3 ret 0
??E_Atomic_int@std@@QEAAHH@Z ENDP ; std::_Atomic_int::operator++
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z
_TEXT SEGMENT
tv64 = 32
_Tgt$ = 64
_Value$ = 72
_Order$ = 80
?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z PROC ; std::_Atomic_fetch_add_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1367
$LN11:
00000 44 89 44 24 18 mov DWORD PTR [rsp+24], r8d
00005 89 54 24 10 mov DWORD PTR [rsp+16], edx
00009 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
0000e 48 83 ec 38 sub rsp, 56 ; 00000038H
; Line 1368
00012 8b 44 24 50 mov eax, DWORD PTR _Order$[rsp]
00016 89 44 24 20 mov DWORD PTR tv64[rsp], eax
0001a 83 7c 24 20 05 cmp DWORD PTR tv64[rsp], 5
0001f 77 58 ja SHORT $LN8@Atomic_fet
00021 48 63 44 24 20 movsxd rax, DWORD PTR tv64[rsp]
00026 48 8d 0d 00 00
00 00 lea rcx, OFFSET FLAT:__ImageBase
0002d 8b 84 81 00 00
00 00 mov eax, DWORD PTR $LN10@Atomic_fet[rcx+rax*4]
00034 48 03 c1 add rax, rcx
00037 ff e0 jmp rax
$LN4@Atomic_fet:
; Line 1370
00039 8b 54 24 48 mov edx, DWORD PTR _Value$[rsp]
0003d 48 8b 4c 24 40 mov rcx, QWORD PTR _Tgt$[rsp]
00042 e8 00 00 00 00 call ?_Fetch_add_relaxed_4@std@@YAKPECKK@Z ; std::_Fetch_add_relaxed_4
00047 eb 32 jmp SHORT $LN1@Atomic_fet
$LN5@Atomic_fet:
; Line 1374
00049 8b 54 24 48 mov edx, DWORD PTR _Value$[rsp]
0004d 48 8b 4c 24 40 mov rcx, QWORD PTR _Tgt$[rsp]
00052 e8 00 00 00 00 call ?_Fetch_add_acquire_4@std@@YAKPECKK@Z ; std::_Fetch_add_acquire_4
00057 eb 22 jmp SHORT $LN1@Atomic_fet
$LN6@Atomic_fet:
; Line 1377
00059 8b 54 24 48 mov edx, DWORD PTR _Value$[rsp]
0005d 48 8b 4c 24 40 mov rcx, QWORD PTR _Tgt$[rsp]
00062 e8 00 00 00 00 call ?_Fetch_add_release_4@std@@YAKPECKK@Z ; std::_Fetch_add_release_4
00067 eb 12 jmp SHORT $LN1@Atomic_fet
$LN7@Atomic_fet:
; Line 1381
00069 8b 54 24 48 mov edx, DWORD PTR _Value$[rsp]
0006d 48 8b 4c 24 40 mov rcx, QWORD PTR _Tgt$[rsp]
00072 e8 00 00 00 00 call ?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z ; std::_Fetch_add_seq_cst_4
00077 eb 02 jmp SHORT $LN1@Atomic_fet
$LN8@Atomic_fet:
; Line 1385
00079 33 c0 xor eax, eax
$LN1@Atomic_fet:
; Line 1387
0007b 48 83 c4 38 add rsp, 56 ; 00000038H
0007f c3 ret 0
$LN10@Atomic_fet:
00080 00 00 00 00 DD $LN4@Atomic_fet
00084 00 00 00 00 DD $LN5@Atomic_fet
00088 00 00 00 00 DD $LN5@Atomic_fet
0008c 00 00 00 00 DD $LN6@Atomic_fet
00090 00 00 00 00 DD $LN7@Atomic_fet
00094 00 00 00 00 DD $LN7@Atomic_fet
?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z ENDP ; std::_Atomic_fetch_add_4
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?_Fetch_add_release_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_release_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_release_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1361
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
; Line 1362
00009 8b 44 24 10 mov eax, DWORD PTR _Value$[rsp]
0000d 48 8b 4c 24 08 mov rcx, QWORD PTR _Tgt$[rsp]
00012 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; Line 1364
00016 c3 ret 0
?_Fetch_add_release_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_release_4
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?_Fetch_add_acquire_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_acquire_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_acquire_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1355
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
; Line 1356
00009 8b 44 24 10 mov eax, DWORD PTR _Value$[rsp]
0000d 48 8b 4c 24 08 mov rcx, QWORD PTR _Tgt$[rsp]
00012 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; Line 1358
00016 c3 ret 0
?_Fetch_add_acquire_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_acquire_4
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?_Fetch_add_relaxed_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_relaxed_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_relaxed_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1349
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
; Line 1350
00009 8b 44 24 10 mov eax, DWORD PTR _Value$[rsp]
0000d 48 8b 4c 24 08 mov rcx, QWORD PTR _Tgt$[rsp]
00012 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; Line 1352
00016 c3 ret 0
?_Fetch_add_relaxed_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_relaxed_4
_TEXT ENDS
; Function compile flags: /Odtp
; COMDAT ?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_seq_cst_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1343
00000 89 54 24 10 mov DWORD PTR [rsp+16], edx
00004 48 89 4c 24 08 mov QWORD PTR [rsp+8], rcx
; Line 1344
00009 8b 44 24 10 mov eax, DWORD PTR _Value$[rsp]
0000d 48 8b 4c 24 08 mov rcx, QWORD PTR _Tgt$[rsp]
00012 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; Line 1346
00016 c3 ret 0
?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_seq_cst_4
_TEXT ENDS
END
; Listing generated by Microsoft (R) Optimizing Compiler Version 19.20.27404.0
include listing.inc
INCLUDELIB LIBCMT
INCLUDELIB OLDNAMES
PUBLIC ?i@@3U?$atomic@H@std@@A ; i
_BSS SEGMENT
?i@@3U?$atomic@H@std@@A DD 01H DUP (?) ; i
_BSS ENDS
PUBLIC ?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z ; std::_Fetch_add_seq_cst_4
PUBLIC ?_Fetch_add_relaxed_4@std@@YAKPECKK@Z ; std::_Fetch_add_relaxed_4
PUBLIC ?_Fetch_add_acquire_4@std@@YAKPECKK@Z ; std::_Fetch_add_acquire_4
PUBLIC ?_Fetch_add_release_4@std@@YAKPECKK@Z ; std::_Fetch_add_release_4
PUBLIC ?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z ; std::_Atomic_fetch_add_4
PUBLIC ??E_Atomic_int@std@@QEAAHH@Z ; std::_Atomic_int::operator++
PUBLIC ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z ; std::atomic_fetch_add_explicit
PUBLIC ?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z ; std::atomic_fetch_add
PUBLIC ?example@@YAXXZ ; example
EXTRN __ImageBase:BYTE
; Function compile flags: /Ogtpy
; COMDAT ?example@@YAXXZ
_TEXT SEGMENT
?example@@YAXXZ PROC ; example, COMDAT
; File C:\Users\bion\Desktop\test.cpp
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1344
00000 b8 01 00 00 00 mov eax, 1
00005 f0 0f c1 05 00
00 00 00 lock xadd DWORD PTR ?i@@3U?$atomic@H@std@@A, eax ; i
; File C:\Users\bion\Desktop\test.cpp
; Line 7
0000d c3 ret 0
?example@@YAXXZ ENDP ; example
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z
_TEXT SEGMENT
_Atom$ = 8
_Value$ = 16
?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z PROC ; std::atomic_fetch_add, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1344
00000 f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 745
00004 8b c2 mov eax, edx
00006 c3 ret 0
?atomic_fetch_add@std@@YAHPEAU_Atomic_int@1@H@Z ENDP ; std::atomic_fetch_add
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z
_TEXT SEGMENT
_Atom$ = 8
_Value$ = 16
_Order$ = 24
?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z PROC ; std::atomic_fetch_add_explicit, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 734
00000 44 8b ca mov r9d, edx
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1368
00003 41 83 f8 05 cmp r8d, 5
00007 77 20 ja SHORT $LN10@atomic_fet
00009 49 63 c0 movsxd rax, r8d
0000c 4c 8d 05 00 00
00 00 lea r8, OFFSET FLAT:__ImageBase
00013 41 8b 94 80 00
00 00 00 mov edx, DWORD PTR $LN20@atomic_fet[r8+rax*4]
0001b 49 03 d0 add rdx, r8
0001e ff e2 jmp rdx
$LN6@atomic_fet:
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 736
00020 f0 44 0f c1 09 lock xadd DWORD PTR [rcx], r9d
00025 41 8b c1 mov eax, r9d
00028 c3 ret 0
$LN10@atomic_fet:
; Line 735
00029 33 c0 xor eax, eax
; Line 736
0002b c3 ret 0
$LN20@atomic_fet:
0002c 00 00 00 00 DD $LN6@atomic_fet
00030 00 00 00 00 DD $LN6@atomic_fet
00034 00 00 00 00 DD $LN6@atomic_fet
00038 00 00 00 00 DD $LN6@atomic_fet
0003c 00 00 00 00 DD $LN6@atomic_fet
00040 00 00 00 00 DD $LN6@atomic_fet
?atomic_fetch_add_explicit@std@@YAHPEAU_Atomic_int@1@HW4memory_order@1@@Z ENDP ; std::atomic_fetch_add_explicit
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ??E_Atomic_int@std@@QEAAHH@Z
_TEXT SEGMENT
this$ = 8
__formal$ = 16
??E_Atomic_int@std@@QEAAHH@Z PROC ; std::_Atomic_int::operator++, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1344
00000 b8 01 00 00 00 mov eax, 1
00005 f0 0f c1 01 lock xadd DWORD PTR [rcx], eax
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xxatomic
; Line 831
00009 c3 ret 0
??E_Atomic_int@std@@QEAAHH@Z ENDP ; std::_Atomic_int::operator++
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
_Order$ = 24
?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z PROC ; std::_Atomic_fetch_add_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1368
00000 41 83 f8 05 cmp r8d, 5
00004 77 1f ja SHORT $LN8@Atomic_fet
00006 49 63 c0 movsxd rax, r8d
00009 4c 8d 0d 00 00
00 00 lea r9, OFFSET FLAT:__ImageBase
00010 45 8b 84 81 00
00 00 00 mov r8d, DWORD PTR $LN18@Atomic_fet[r9+rax*4]
00018 4d 03 c1 add r8, r9
0001b 41 ff e0 jmp r8
$LN4@Atomic_fet:
; Line 1387
0001e f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
00022 8b c2 mov eax, edx
00024 c3 ret 0
$LN8@Atomic_fet:
; Line 1385
00025 33 c0 xor eax, eax
; Line 1387
00027 c3 ret 0
$LN18@Atomic_fet:
00028 00 00 00 00 DD $LN4@Atomic_fet
0002c 00 00 00 00 DD $LN4@Atomic_fet
00030 00 00 00 00 DD $LN4@Atomic_fet
00034 00 00 00 00 DD $LN4@Atomic_fet
00038 00 00 00 00 DD $LN4@Atomic_fet
0003c 00 00 00 00 DD $LN4@Atomic_fet
?_Atomic_fetch_add_4@std@@YAKPECKKW4memory_order@1@@Z ENDP ; std::_Atomic_fetch_add_4
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?_Fetch_add_release_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_release_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_release_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1362
00000 f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
00004 8b c2 mov eax, edx
; Line 1364
00006 c3 ret 0
?_Fetch_add_release_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_release_4
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?_Fetch_add_acquire_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_acquire_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_acquire_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1356
00000 f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
00004 8b c2 mov eax, edx
; Line 1358
00006 c3 ret 0
?_Fetch_add_acquire_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_acquire_4
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?_Fetch_add_relaxed_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_relaxed_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_relaxed_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1350
00000 f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
00004 8b c2 mov eax, edx
; Line 1352
00006 c3 ret 0
?_Fetch_add_relaxed_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_relaxed_4
_TEXT ENDS
; Function compile flags: /Ogtpy
; COMDAT ?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z
_TEXT SEGMENT
_Tgt$ = 8
_Value$ = 16
?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z PROC ; std::_Fetch_add_seq_cst_4, COMDAT
; File C:\Dev\msvc\src\vctools\crt\crtw32\stdhpp\xatomic.h
; Line 1344
00000 f0 0f c1 11 lock xadd DWORD PTR [rcx], edx
00004 8b c2 mov eax, edx
; Line 1346
00006 c3 ret 0
?_Fetch_add_seq_cst_4@std@@YAKPECKK@Z ENDP ; std::_Fetch_add_seq_cst_4
_TEXT ENDS
END
#include <atomic>
std::atomic<int> i;
void example() {
i++;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment