Guest User

Untitled

a guest
Dec 18th, 2012
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
ARM 48.82 KB | None | 0 0
  1. ; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.30319.01
  2.  
  3. include listing.inc
  4.  
  5. INCLUDELIB OLDNAMES
  6.  
  7. PUBLIC  ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<<<std::char_traits<char> >
  8. PUBLIC  ?length@?$char_traits@D@std@@SA_KPEBD@Z     ; std::char_traits<char>::length
  9. PUBLIC  ?eq_int_type@?$char_traits@D@std@@SA_NAEBH0@Z   ; std::char_traits<char>::eq_int_type
  10. PUBLIC  ?eof@?$char_traits@D@std@@SAHXZ         ; std::char_traits<char>::eof
  11. PUBLIC  ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base
  12. PUBLIC  ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry
  13. PUBLIC  ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  14. PUBLIC  ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry
  15. PUBLIC  ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBAPEQ_Bool_struct@2@HXZ ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator int std::_Bool_struct::* __ptr64
  16. PUBLIC  ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  17. EXTRN   __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z:PROC
  18. EXTRN   __imp_?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ:PROC
  19. EXTRN   __imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A:BYTE
  20. EXTRN   __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A:BYTE
  21. EXTRN   __imp_clock:PROC
  22. EXTRN   __imp_?flags@ios_base@std@@QEBAHXZ:PROC
  23. EXTRN   __imp_?width@ios_base@std@@QEBA_JXZ:PROC
  24. EXTRN   __imp_?width@ios_base@std@@QEAA_J_J@Z:PROC
  25. EXTRN   __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z:PROC
  26. EXTRN   __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z:PROC
  27. EXTRN   __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z:PROC
  28. EXTRN   __imp_?fill@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBADXZ:PROC
  29. EXTRN   __imp_?rdstate@ios_base@std@@QEBAHXZ:PROC
  30. EXTRN   __imp_?good@ios_base@std@@QEBA_NXZ:PROC
  31. EXTRN   __imp_?tie@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_ostream@DU?$char_traits@D@std@@@2@XZ:PROC
  32. EXTRN   __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ:PROC
  33. EXTRN   __imp_?uncaught_exception@std@@YA_NXZ:PROC
  34. EXTRN   __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ:PROC
  35. EXTRN   __imp_?rdbuf@?$basic_ios@DU?$char_traits@D@std@@@std@@QEBAPEAV?$basic_streambuf@DU?$char_traits@D@std@@@2@XZ:PROC
  36. $SG-31  DB  'Variante 0: Kontrollwert: ', 00H
  37.     ORG $+1
  38. $SG-32  DB  's', 0aH, 00H
  39.     ORG $+1
  40. $SG-33  DB  09H, ' zeit: ', 00H
  41.     ORG $+3
  42. $SG-35  DB  's', 0aH, 00H
  43.     ORG $+1
  44. $SG-34  DB  'Variante 1: Kontrollwert: ', 00H
  45.     ORG $+1
  46. $SG-38  DB  's', 0aH, 00H
  47.     ORG $+1
  48. $SG-36  DB  09H, ' zeit: ', 00H
  49.     ORG $+3
  50. $SG-41  DB  's', 0aH, 00H
  51.     ORG $+1
  52. $SG-37  DB  'Variante 2: Kontrollwert: ', 00H
  53.     ORG $+5
  54. $SG-39  DB  09H, ' zeit: ', 00H
  55.     ORG $+7
  56. $SG-40  DB  'Variante 3: Kontrollwert: ', 00H
  57.     ORG $+5
  58. $SG-42  DB  09H, ' zeit: ', 00H
  59.     ORG $+7
  60. $SG-43  DB  'Variante 4: Kontrollwert: ', 00H
  61. ;   COMDAT pdata
  62. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios
  63. pdata   SEGMENT
  64. $pdata$??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ DD imagerel $LN8
  65.     DD  imagerel $LN8+35
  66.     DD  imagerel $unwind$??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ
  67. pdata   ENDS
  68. ;   COMDAT xdata
  69. xdata   SEGMENT
  70. $unwind$??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ DD 010401H
  71.     DD  04204H
  72. ; Function compile flags: /Ogtpy
  73. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  74. xdata   ENDS
  75. ;   COMDAT ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ
  76. _TEXT   SEGMENT
  77. this$ = 48
  78. ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ PROC ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base, COMDAT
  79.  
  80. ; 97   :            {   // destroy after unlocking
  81.  
  82. $LN8:
  83.     sub rsp, 40                 ; 00000028H
  84.  
  85. ; 98   :            if (_Myostr.rdbuf() != 0)
  86.  
  87.     mov rdx, QWORD PTR [rcx]
  88.     mov rax, QWORD PTR [rdx]
  89.     movsxd  rcx, DWORD PTR [rax+4]
  90.     mov rcx, QWORD PTR [rcx+rdx+72]
  91.     test    rcx, rcx
  92.     je  SHORT $LN1@Sentry_bas
  93.  
  94. ; 99   :                _Myostr.rdbuf()->_Unlock();
  95.  
  96.     mov rax, QWORD PTR [rcx]
  97.     call    QWORD PTR [rax+16]
  98. $LN1@Sentry_bas:
  99.  
  100. ; 100  :            }
  101.  
  102.     add rsp, 40                 ; 00000028H
  103.     ret 0
  104. ??1_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::~_Sentry_base
  105. _TEXT   ENDS
  106. ;   COMDAT pdata
  107. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios
  108. pdata   SEGMENT
  109. $pdata$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z DD imagerel $LN9
  110.     DD  imagerel $LN9+44
  111.     DD  imagerel $unwind$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z
  112. pdata   ENDS
  113. ;   COMDAT xdata
  114. xdata   SEGMENT
  115. $unwind$??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z DD 020601H
  116.     DD  030023206H
  117. ; Function compile flags: /Ogtpy
  118. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  119. xdata   ENDS
  120. ;   COMDAT ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z
  121. _TEXT   SEGMENT
  122. this$ = 48
  123. _Ostr$ = 56
  124. ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z PROC ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base, COMDAT
  125.  
  126. ; 91   :            {   // lock the stream buffer, if there
  127.  
  128. $LN9:
  129.     push    rbx
  130.     sub rsp, 32                 ; 00000020H
  131.     mov QWORD PTR [rcx], rdx
  132.  
  133. ; 92   :            if (_Myostr.rdbuf() != 0)
  134.  
  135.     mov rax, QWORD PTR [rdx]
  136.     mov rbx, rcx
  137.     movsxd  r8, DWORD PTR [rax+4]
  138.     mov rcx, QWORD PTR [r8+rdx+72]
  139.     test    rcx, rcx
  140.     je  SHORT $LN8@Sentry_bas@2
  141.  
  142. ; 93   :                _Myostr.rdbuf()->_Lock();
  143.  
  144.     mov rax, QWORD PTR [rcx]
  145.     call    QWORD PTR [rax+8]
  146. $LN8@Sentry_bas@2:
  147.  
  148. ; 94   :            }
  149.  
  150.     mov rax, rbx
  151.     add rsp, 32                 ; 00000020H
  152.     pop rbx
  153.     ret 0
  154. ??0_Sentry_base@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ENDP ; std::basic_ostream<char,std::char_traits<char> >::_Sentry_base::_Sentry_base
  155. ; Function compile flags: /Ogtpy
  156. _TEXT   ENDS
  157. ;   COMDAT ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBAPEQ_Bool_struct@2@HXZ
  158. _TEXT   SEGMENT
  159. this$ = 8
  160. ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBAPEQ_Bool_struct@2@HXZ PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator int std::_Bool_struct::* __ptr64, COMDAT
  161.  
  162. ; 133  :            return (_Ok ? _CONVERTIBLE_TO_TRUE : 0);
  163.  
  164.     movzx   eax, BYTE PTR [rcx+8]
  165.     neg al
  166.     sbb eax, eax
  167.     neg eax
  168.     dec eax
  169.  
  170. ; 134  :            }
  171.  
  172.     ret 0
  173. ??Bsentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEBAPEQ_Bool_struct@2@HXZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::operator int std::_Bool_struct::* __ptr64
  174. _TEXT   ENDS
  175. ;   COMDAT pdata
  176. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios
  177. pdata   SEGMENT
  178. $pdata$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ DD imagerel $LN11
  179.     DD  imagerel $LN11+60
  180.     DD  imagerel $unwind$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ
  181. pdata   ENDS
  182. ;   COMDAT xdata
  183. xdata   SEGMENT
  184. $unwind$??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ DD 020601H
  185.     DD  030023206H
  186. ; Function compile flags: /Ogtpy
  187. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  188. xdata   ENDS
  189. ;   COMDAT ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ
  190. _TEXT   SEGMENT
  191. this$ = 48
  192. ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry, COMDAT
  193.  
  194. ; 121  :            {   // destroy the object
  195.  
  196. $LN11:
  197.     push    rbx
  198.     sub rsp, 32                 ; 00000020H
  199.     mov rbx, rcx
  200.  
  201. ; 122  :  #if _HAS_EXCEPTIONS
  202. ; 123  :            if (!uncaught_exception())
  203.  
  204.     call    QWORD PTR __imp_?uncaught_exception@std@@YA_NXZ
  205.     test    al, al
  206.     jne SHORT $LN1@sentry
  207.  
  208. ; 124  :                this->_Myostr._Osfx();
  209.  
  210.     mov rcx, QWORD PTR [rbx]
  211.     call    QWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ
  212. $LN1@sentry:
  213.  
  214. ; 125  :
  215. ; 126  :  #else /* _HAS_EXCEPTIONS */
  216. ; 127  :            this->_Myostr._Osfx();
  217. ; 128  :  #endif /* _HAS_EXCEPTIONS */
  218. ; 129  :            }
  219.  
  220.     mov rdx, QWORD PTR [rbx]
  221.     mov rax, QWORD PTR [rdx]
  222.     movsxd  rcx, DWORD PTR [rax+4]
  223.     mov rcx, QWORD PTR [rcx+rdx+72]
  224.     test    rcx, rcx
  225.     je  SHORT $LN4@sentry
  226.     mov rax, QWORD PTR [rcx]
  227.     call    QWORD PTR [rax+16]
  228. $LN4@sentry:
  229.     add rsp, 32                 ; 00000020H
  230.     pop rbx
  231.     ret 0
  232. ??1sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@XZ ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::~sentry
  233. _TEXT   ENDS
  234. ;   COMDAT pdata
  235. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\xiosbase
  236. pdata   SEGMENT
  237. $pdata$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z DD imagerel $LN23
  238.     DD  imagerel $LN23+104
  239.     DD  imagerel $unwind$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z
  240. pdata   ENDS
  241. ;   COMDAT xdata
  242. xdata   SEGMENT
  243. $unwind$??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z DD 040a01H
  244.     DD  06340aH
  245.     DD  07006320aH
  246. ; Function compile flags: /Ogtpy
  247. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  248. xdata   ENDS
  249. ;   COMDAT ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z
  250. _TEXT   SEGMENT
  251. this$ = 48
  252. _Ostr$ = 56
  253. ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z PROC ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry, COMDAT
  254.  
  255. ; 114  :            {   // construct locking and testing stream
  256.  
  257. $LN23:
  258.     mov QWORD PTR [rsp+8], rbx
  259.     push    rdi
  260.     sub rsp, 32                 ; 00000020H
  261.     mov QWORD PTR [rcx], rdx
  262.     mov rax, QWORD PTR [rdx]
  263.     mov rdi, rcx
  264.     movsxd  r8, DWORD PTR [rax+4]
  265.     mov rbx, rdx
  266.     mov rcx, QWORD PTR [r8+rdx+72]
  267.     test    rcx, rcx
  268.     je  SHORT $LN4@sentry@2
  269.     mov rax, QWORD PTR [rcx]
  270.     call    QWORD PTR [rax+8]
  271. $LN4@sentry@2:
  272.  
  273. ; 115  :            if (_Ostr.good() && _Ostr.tie() != 0)
  274.  
  275.     mov rax, QWORD PTR [rbx]
  276.     movsxd  rcx, DWORD PTR [rax+4]
  277.     cmp DWORD PTR [rcx+rbx+16], 0
  278.     jne SHORT $LN1@sentry@2
  279.     mov rcx, QWORD PTR [rcx+rbx+80]
  280.     test    rcx, rcx
  281.     je  SHORT $LN1@sentry@2
  282.  
  283. ; 116  :                _Ostr.tie()->flush();
  284.  
  285.     call    QWORD PTR __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ
  286. $LN1@sentry@2:
  287.  
  288. ; 117  :            _Ok = _Ostr.good(); // store test only after flushing tie
  289.  
  290.     mov rax, QWORD PTR [rbx]
  291.     movsxd  rcx, DWORD PTR [rax+4]
  292.     cmp DWORD PTR [rcx+rbx+16], 0
  293.  
  294. ; 118  :            }
  295.  
  296.     mov rbx, QWORD PTR [rsp+48]
  297.     sete    al
  298.     mov BYTE PTR [rdi+8], al
  299.     mov rax, rdi
  300.     add rsp, 32                 ; 00000020H
  301.     pop rdi
  302.     ret 0
  303. ??0sentry@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAA@AEAV12@@Z ENDP ; std::basic_ostream<char,std::char_traits<char> >::sentry::sentry
  304. ; Function compile flags: /Ogtpy
  305. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\iosfwd
  306. _TEXT   ENDS
  307. ;   COMDAT ?eof@?$char_traits@D@std@@SAHXZ
  308. _TEXT   SEGMENT
  309. ?eof@?$char_traits@D@std@@SAHXZ PROC            ; std::char_traits<char>::eof, COMDAT
  310.  
  311. ; 563  :        return (EOF);
  312.  
  313.     or  eax, -1
  314.  
  315. ; 564  :        }
  316.  
  317.     ret 0
  318. ?eof@?$char_traits@D@std@@SAHXZ ENDP            ; std::char_traits<char>::eof
  319. ; Function compile flags: /Ogtpy
  320. _TEXT   ENDS
  321. ;   COMDAT ?eq_int_type@?$char_traits@D@std@@SA_NAEBH0@Z
  322. _TEXT   SEGMENT
  323. _Left$ = 8
  324. _Right$ = 16
  325. ?eq_int_type@?$char_traits@D@std@@SA_NAEBH0@Z PROC  ; std::char_traits<char>::eq_int_type, COMDAT
  326.  
  327. ; 553  :        return (_Left == _Right);
  328.  
  329.     mov edx, DWORD PTR [rdx]
  330.     cmp DWORD PTR [rcx], edx
  331.     sete    al
  332.  
  333. ; 554  :        }
  334.  
  335.     ret 0
  336. ?eq_int_type@?$char_traits@D@std@@SA_NAEBH0@Z ENDP  ; std::char_traits<char>::eq_int_type
  337. _TEXT   ENDS
  338. ;   COMDAT pdata
  339. pdata   SEGMENT
  340. $pdata$?length@?$char_traits@D@std@@SA_KPEBD@Z DD imagerel $LN3
  341.     DD  imagerel $LN3+29
  342.     DD  imagerel $unwind$?length@?$char_traits@D@std@@SA_KPEBD@Z
  343. pdata   ENDS
  344. ;   COMDAT xdata
  345. xdata   SEGMENT
  346. $unwind$?length@?$char_traits@D@std@@SA_KPEBD@Z DD 020501H
  347.     DD  017405H
  348. ; Function compile flags: /Ogtpy
  349. xdata   ENDS
  350. ;   COMDAT ?length@?$char_traits@D@std@@SA_KPEBD@Z
  351. _TEXT   SEGMENT
  352. _First$ = 8
  353. ?length@?$char_traits@D@std@@SA_KPEBD@Z PROC        ; std::char_traits<char>::length, COMDAT
  354.  
  355. ; 490  :        {   // find length of null-terminated string
  356.  
  357. $LN3:
  358.     mov QWORD PTR [rsp+8], rdi
  359.     mov rdi, rcx
  360.  
  361. ; 491  :        return (_CSTD strlen(_First));
  362.  
  363.     xor eax, eax
  364.     or  rcx, -1
  365.     repne scasb
  366.  
  367. ; 492  :        }
  368.  
  369.     mov rdi, QWORD PTR [rsp+8]
  370.     not rcx
  371.     lea rax, QWORD PTR [rcx-1]
  372.     ret 0
  373. ?length@?$char_traits@D@std@@SA_KPEBD@Z ENDP        ; std::char_traits<char>::length
  374. _TEXT   ENDS
  375. EXTRN   __CxxFrameHandler3:PROC
  376. ;   COMDAT pdata
  377. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios
  378. pdata   SEGMENT
  379. $pdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD imagerel $LN93
  380.     DD  imagerel $LN93+431
  381.     DD  imagerel $unwind$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  382. pdata   ENDS
  383. ;   COMDAT pdata
  384. pdata   SEGMENT
  385. $pdata$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA DD imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA
  386.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA+56
  387.     DD  imagerel $unwind$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA
  388. pdata   ENDS
  389. ;   COMDAT xdata
  390. xdata   SEGMENT
  391. $ip2state$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  392.     DD  0ffffffffH
  393.     DD  imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z+141
  394.     DD  00H
  395.     DD  imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z+309
  396.     DD  0ffffffffH
  397.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA
  398.     DD  00H
  399.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA+13
  400.     DD  01H
  401.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA+42
  402.     DD  00H
  403. xdata   ENDS
  404. ;   COMDAT xdata
  405. xdata   SEGMENT
  406. $unwind$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA DD 020a19H
  407.     DD  05006320aH
  408.     DD  imagerel __CxxFrameHandler3
  409.     DD  imagerel $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  410. xdata   ENDS
  411. ;   COMDAT xdata
  412. xdata   SEGMENT
  413. $unwind$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD 082119H
  414.     DD  0106421H
  415.     DD  0f341dH
  416.     DD  0d00c9210H
  417.     DD  07008c00aH
  418.     DD  imagerel __CxxFrameHandler3
  419.     DD  imagerel $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  420. xdata   ENDS
  421. ;   COMDAT CONST
  422. CONST   SEGMENT
  423. $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD 019930522H
  424.     DD  02H
  425.     DD  imagerel $stateUnwindMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  426.     DD  01H
  427.     DD  imagerel $tryMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  428.     DD  06H
  429.     DD  imagerel $ip2state$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  430.     DD  030H
  431.     DD  00H
  432.     DD  00H
  433. CONST   ENDS
  434. ;   COMDAT xdata
  435. xdata   SEGMENT
  436. $tryMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD 00H
  437.     DD  00H
  438.     DD  01H
  439.     DD  01H
  440.     DD  imagerel $handlerMap$0$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  441. xdata   ENDS
  442. ;   COMDAT xdata
  443. xdata   SEGMENT
  444. $handlerMap$0$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD 00H
  445.     DD  00H
  446.     DD  00H
  447.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA
  448.     DD  038H
  449. xdata   ENDS
  450. ;   COMDAT xdata
  451. xdata   SEGMENT
  452. $stateUnwindMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z DD 0ffffffffH
  453.     DD  00H
  454.     DD  0ffffffffH
  455.     DD  00H
  456. ; Function compile flags: /Ogtpy
  457. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  458. xdata   ENDS
  459. ;   COMDAT ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z
  460. _TEXT   SEGMENT
  461. _State$ = 32
  462. _Pad$26549 = 40
  463. $T29757 = 48
  464. _Ok$ = 56
  465. _Ostr$ = 112
  466. ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z PROC ; std::operator<<<std::char_traits<char> >, COMDAT
  467.  
  468. ; 813  :    {   // insert a char into char stream
  469.  
  470. $LN93:
  471.     mov rax, rsp
  472.     mov QWORD PTR [rax+8], rcx
  473.     push    rdi
  474.     push    r12
  475.     push    r13
  476.     sub rsp, 80                 ; 00000050H
  477.     mov QWORD PTR $T29757[rsp], -2
  478.     mov QWORD PTR [rax+16], rbx
  479.     mov QWORD PTR [rax+24], rsi
  480.     mov rdi, rcx
  481.  
  482. ; 814  :    typedef char _Elem;
  483. ; 815  :    typedef basic_ostream<_Elem, _Traits> _Myos;
  484. ; 816  :    ios_base::iostate _State = ios_base::goodbit;
  485.  
  486.     xor esi, esi
  487.     mov DWORD PTR [rax-72], esi
  488.  
  489. ; 817  :    const typename _Myos::sentry _Ok(_Ostr);
  490.  
  491.     mov r12, rcx
  492.     mov QWORD PTR _Ok$[rsp], rcx
  493.     mov rax, QWORD PTR [rcx]
  494.     movsxd  rdx, DWORD PTR [rax+4]
  495.     mov rcx, QWORD PTR [rdx+rcx+72]
  496.     test    rcx, rcx
  497.     je  SHORT $LN24@operator
  498.     mov rax, QWORD PTR [rcx]
  499.     call    QWORD PTR [rax+8]
  500. $LN24@operator:
  501.     mov rax, QWORD PTR [rdi]
  502.     movsxd  rcx, DWORD PTR [rax+4]
  503.     cmp DWORD PTR [rcx+rdi+16], esi
  504.     jne SHORT $LN21@operator
  505.     mov rcx, QWORD PTR [rcx+rdi+80]
  506.     test    rcx, rcx
  507.     je  SHORT $LN21@operator
  508.     call    QWORD PTR __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ
  509. $LN21@operator:
  510.     mov rax, QWORD PTR [rdi]
  511.     movsxd  rbx, DWORD PTR [rax+4]
  512.     cmp DWORD PTR [rbx+rdi+16], esi
  513.     sete    al
  514.  
  515. ; 818  :
  516. ; 819  :    if (_Ok)
  517.  
  518.     test    al, al
  519.     je  $LN19@operator
  520.  
  521. ; 820  :        {   // state okay, insert
  522. ; 821  :        streamsize _Pad = _Ostr.width() <= 1 ? 0 : _Ostr.width() - 1;
  523.  
  524.     mov rbx, QWORD PTR [rbx+rdi+40]
  525.     cmp rbx, 1
  526.     jg  SHORT $LN15@operator
  527.     xor ebx, ebx
  528.     jmp SHORT $LN16@operator
  529. $LN15@operator:
  530.     dec rbx
  531. $LN16@operator:
  532.  
  533. ; 822  :
  534. ; 823  :        _TRY_IO_BEGIN
  535. ; 824  :        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
  536.  
  537.     mov rax, QWORD PTR [rdi]
  538.     movsxd  rcx, DWORD PTR [rax+4]
  539.     mov eax, DWORD PTR [rcx+rdi+24]
  540.     and eax, 448                ; 000001c0H
  541.     mov r13d, 4
  542.     cmp eax, 64                 ; 00000040H
  543.     je  SHORT $LN88@operator
  544. $LL9@operator:
  545.  
  546. ; 825  :            for (; _State == ios_base::goodbit && 0 < _Pad;
  547. ; 826  :                --_Pad) // pad on left
  548.  
  549.     test    esi, esi
  550.     jne $LN2@operator
  551.     test    rbx, rbx
  552.     jle SHORT $LN88@operator
  553.  
  554. ; 827  :                if (_Traits::eq_int_type(_Traits::eof(),
  555. ; 828  :                    _Ostr.rdbuf()->sputc(_Ostr.fill())))
  556.  
  557.     mov rax, QWORD PTR [rdi]
  558.     movsxd  rcx, DWORD PTR [rax+4]
  559.     movzx   edx, BYTE PTR [rcx+rdi+88]
  560.     mov rcx, QWORD PTR [rcx+rdi+72]
  561.     call    QWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z
  562.     cmp eax, -1
  563.     cmove   esi, r13d
  564.     mov DWORD PTR _State$[rsp], esi
  565.  
  566. ; 825  :            for (; _State == ios_base::goodbit && 0 < _Pad;
  567. ; 826  :                --_Pad) // pad on left
  568.  
  569.     dec rbx
  570.     mov QWORD PTR _Pad$26549[rsp], rbx
  571.     jmp SHORT $LL9@operator
  572. $LN88@operator:
  573.  
  574. ; 829  :                    _State |= ios_base::badbit;
  575. ; 830  :
  576. ; 831  :        if (_State == ios_base::goodbit
  577. ; 832  :            && _Traits::eq_int_type(_Traits::eof(),
  578. ; 833  :                _Ostr.rdbuf()->sputc(_Ch)))
  579.  
  580.     mov rax, QWORD PTR [rdi]
  581.     movsxd  rcx, DWORD PTR [rax+4]
  582.     mov dl, 10
  583.     mov rcx, QWORD PTR [rcx+rdi+72]
  584.     call    QWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z
  585.     cmp eax, -1
  586.     cmove   esi, r13d
  587.     mov DWORD PTR _State$[rsp], esi
  588. $LL89@operator:
  589.  
  590. ; 834  :            _State |= ios_base::badbit;
  591. ; 835  :
  592. ; 836  :        for (; _State == ios_base::goodbit && 0 < _Pad;
  593. ; 837  :            --_Pad) // pad on right
  594.  
  595.     test    esi, esi
  596.     jne SHORT $LN2@operator
  597.     test    rbx, rbx
  598.     jle SHORT $LN2@operator
  599.  
  600. ; 838  :            if (_Traits::eq_int_type(_Traits::eof(),
  601. ; 839  :                _Ostr.rdbuf()->sputc(_Ostr.fill())))
  602.  
  603.     mov rax, QWORD PTR [rdi]
  604.     movsxd  rcx, DWORD PTR [rax+4]
  605.     movzx   edx, BYTE PTR [rcx+rdi+88]
  606.     mov rcx, QWORD PTR [rcx+rdi+72]
  607.     call    QWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z
  608.     cmp eax, -1
  609.     cmove   esi, r13d
  610.     mov DWORD PTR _State$[rsp], esi
  611.  
  612. ; 834  :            _State |= ios_base::badbit;
  613. ; 835  :
  614. ; 836  :        for (; _State == ios_base::goodbit && 0 < _Pad;
  615. ; 837  :            --_Pad) // pad on right
  616.  
  617.     dec rbx
  618.     mov QWORD PTR _Pad$26549[rsp], rbx
  619.     jmp SHORT $LL89@operator
  620. $LN2@operator:
  621.     jmp SHORT $LN19@operator
  622. $LN20@operator:
  623.  
  624. ; 840  :                _State |= ios_base::badbit;
  625. ; 841  :        _CATCH_IO_(_Ostr)
  626.  
  627.     mov rdi, QWORD PTR _Ostr$[rsp]
  628.     mov esi, DWORD PTR _State$[rsp]
  629.     mov r12, QWORD PTR _Ok$[rsp]
  630. $LN19@operator:
  631.  
  632. ; 842  :        }
  633. ; 843  :
  634. ; 844  :    _Ostr.width(0);
  635.  
  636.     mov rax, QWORD PTR [rdi]
  637.     movsxd  rcx, DWORD PTR [rax+4]
  638.     mov QWORD PTR [rcx+rdi+40], 0
  639.  
  640. ; 845  :    _Ostr.setstate(_State);
  641.  
  642.     mov rax, QWORD PTR [rdi]
  643.     movsxd  rcx, DWORD PTR [rax+4]
  644.     add rcx, rdi
  645.     xor r8d, r8d
  646.     mov edx, esi
  647.     call    QWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z
  648.  
  649. ; 846  :    return (_Ostr);
  650.  
  651.     call    QWORD PTR __imp_?uncaught_exception@std@@YA_NXZ
  652.     test    al, al
  653.     jne SHORT $LN75@operator
  654.     mov rcx, r12
  655.     call    QWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ
  656. $LN75@operator:
  657.     mov rax, QWORD PTR [r12]
  658.     movsxd  rcx, DWORD PTR [rax+4]
  659.     mov rcx, QWORD PTR [rcx+r12+72]
  660.     test    rcx, rcx
  661.     je  SHORT $LN90@operator
  662.     mov rax, QWORD PTR [rcx]
  663.     call    QWORD PTR [rax+16]
  664. $LN90@operator:
  665.     mov rax, rdi
  666.  
  667. ; 847  :    }
  668.  
  669.     mov rbx, QWORD PTR [rsp+120]
  670.     mov rsi, QWORD PTR [rsp+128]
  671.     add rsp, 80                 ; 00000050H
  672.     pop r13
  673.     pop r12
  674.     pop rdi
  675.     ret 0
  676. ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ENDP ; std::operator<<<std::char_traits<char> >
  677. ; Function compile flags: /Ogtpy
  678. _TEXT   ENDS
  679. ;   COMDAT text$x
  680. text$x  SEGMENT
  681. _State$ = 32
  682. _Pad$26549 = 40
  683. $T29757 = 48
  684. _Ok$ = 56
  685. _Ostr$ = 112
  686. ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA PROC ; `std::operator<<<std::char_traits<char> >'::`1'::catch$0
  687.  
  688. ; 841  :        _CATCH_IO_(_Ostr)
  689.  
  690.     mov QWORD PTR [rsp+16], rdx
  691.     push    rbp
  692.     sub rsp, 32                 ; 00000020H
  693.     mov rbp, rdx
  694. __catch$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z$0:
  695.     mov rdx, QWORD PTR _Ostr$[rbp]
  696.     mov rax, QWORD PTR [rdx]
  697.     movsxd  rcx, DWORD PTR [rax+4]
  698.     add rcx, rdx
  699.     mov r8b, 1
  700.     mov edx, 4
  701.     call    QWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z
  702.     npad    1
  703.     lea rax, $LN20@catch$0
  704.     add rsp, 32                 ; 00000020H
  705.     pop rbp
  706.     ret 0
  707.     int 3
  708. ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z@4HA ENDP ; `std::operator<<<std::char_traits<char> >'::`1'::catch$0
  709. text$x  ENDS
  710. ;   COMDAT pdata
  711. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ios
  712. pdata   SEGMENT
  713. $pdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD imagerel $LN96
  714.     DD  imagerel $LN96+468
  715.     DD  imagerel $unwind$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  716. pdata   ENDS
  717. ;   COMDAT pdata
  718. pdata   SEGMENT
  719. $pdata$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA DD imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA
  720.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA+56
  721.     DD  imagerel $unwind$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA
  722. pdata   ENDS
  723. ;   COMDAT xdata
  724. xdata   SEGMENT
  725. $ip2state$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  726.     DD  0ffffffffH
  727.     DD  imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z+177
  728.     DD  00H
  729.     DD  imagerel ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z+358
  730.     DD  0ffffffffH
  731.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA
  732.     DD  00H
  733.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA+13
  734.     DD  01H
  735.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA+42
  736.     DD  00H
  737. xdata   ENDS
  738. ;   COMDAT xdata
  739. xdata   SEGMENT
  740. $unwind$?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA DD 020a19H
  741.     DD  05006320aH
  742.     DD  imagerel __CxxFrameHandler3
  743.     DD  imagerel $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  744. xdata   ENDS
  745. ;   COMDAT xdata
  746. xdata   SEGMENT
  747. $unwind$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD 0a2619H
  748.     DD  0117426H
  749.     DD  0106422H
  750.     DD  0f341eH
  751.     DD  0e00d9211H
  752.     DD  0c009d00bH
  753.     DD  imagerel __CxxFrameHandler3
  754.     DD  imagerel $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  755. xdata   ENDS
  756. ;   COMDAT CONST
  757. CONST   SEGMENT
  758. $cppxdata$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD 019930522H
  759.     DD  02H
  760.     DD  imagerel $stateUnwindMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  761.     DD  01H
  762.     DD  imagerel $tryMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  763.     DD  06H
  764.     DD  imagerel $ip2state$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  765.     DD  030H
  766.     DD  00H
  767.     DD  00H
  768. CONST   ENDS
  769. ;   COMDAT xdata
  770. xdata   SEGMENT
  771. $tryMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD 00H
  772.     DD  00H
  773.     DD  01H
  774.     DD  01H
  775.     DD  imagerel $handlerMap$0$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  776. xdata   ENDS
  777. ;   COMDAT xdata
  778. xdata   SEGMENT
  779. $handlerMap$0$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD 00H
  780.     DD  00H
  781.     DD  00H
  782.     DD  imagerel ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA
  783.     DD  038H
  784. xdata   ENDS
  785. ;   COMDAT xdata
  786. xdata   SEGMENT
  787. $stateUnwindMap$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z DD 0ffffffffH
  788.     DD  00H
  789.     DD  0ffffffffH
  790.     DD  00H
  791. ; Function compile flags: /Ogtpy
  792. ; File c:\program files (x86)\microsoft visual studio 10.0\vc\include\ostream
  793. xdata   ENDS
  794. ;   COMDAT ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z
  795. _TEXT   SEGMENT
  796. _State$ = 32
  797. _Pad$ = 40
  798. $T29982 = 48
  799. _Ok$ = 56
  800. _Ostr$ = 112
  801. _Val$ = 120
  802. ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z PROC ; std::operator<<<std::char_traits<char> >, COMDAT
  803.  
  804. ; 767  :    {   // insert NTBS into char stream
  805.  
  806. $LN96:
  807.     mov rax, rsp
  808.     mov QWORD PTR [rax+8], rcx
  809.     push    r12
  810.     push    r13
  811.     push    r14
  812.     sub rsp, 80                 ; 00000050H
  813.     mov QWORD PTR $T29982[rsp], -2
  814.     mov QWORD PTR [rax+16], rbx
  815.     mov QWORD PTR [rax+24], rsi
  816.     mov QWORD PTR [rax+32], rdi
  817.     mov r14, rdx
  818.     mov rsi, rcx
  819.  
  820. ; 768  :    typedef char _Elem;
  821. ; 769  :    typedef basic_ostream<_Elem, _Traits> _Myos;
  822. ; 770  :    ios_base::iostate _State = ios_base::goodbit;
  823.  
  824.     xor ebx, ebx
  825.     mov DWORD PTR [rax-72], ebx
  826.  
  827. ; 771  :    streamsize _Count = (streamsize)_Traits::length(_Val);  // may overflow
  828.  
  829.     xor eax, eax
  830.     or  rcx, -1
  831.     mov rdi, rdx
  832.     repne scasb
  833.     not rcx
  834.     lea r13, QWORD PTR [rcx-1]
  835.  
  836. ; 772  :    streamsize _Pad = _Ostr.width() <= 0 || _Ostr.width() <= _Count
  837. ; 773  :        ? 0 : _Ostr.width() - _Count;
  838.  
  839.     mov rax, QWORD PTR [rsi]
  840.     movsxd  rcx, DWORD PTR [rax+4]
  841.     mov rdi, QWORD PTR [rcx+rsi+40]
  842.     test    rdi, rdi
  843.     jle SHORT $LN17@operator@2
  844.     cmp rdi, r13
  845.     jle SHORT $LN17@operator@2
  846.     sub rdi, r13
  847.     jmp SHORT $LN18@operator@2
  848. $LN17@operator@2:
  849.     xor edi, edi
  850. $LN18@operator@2:
  851.  
  852. ; 774  :    const typename _Myos::sentry _Ok(_Ostr);
  853.  
  854.     mov r12, rsi
  855.     mov QWORD PTR _Ok$[rsp], rsi
  856.     mov rcx, QWORD PTR [rcx+rsi+72]
  857.     test    rcx, rcx
  858.     je  SHORT $LN34@operator@2
  859.     mov rax, QWORD PTR [rcx]
  860.     call    QWORD PTR [rax+8]
  861. $LN34@operator@2:
  862.     mov rax, QWORD PTR [rsi]
  863.     movsxd  rcx, DWORD PTR [rax+4]
  864.     cmp DWORD PTR [rcx+rsi+16], ebx
  865.     jne SHORT $LN31@operator@2
  866.     mov rcx, QWORD PTR [rcx+rsi+80]
  867.     test    rcx, rcx
  868.     je  SHORT $LN31@operator@2
  869.     call    QWORD PTR __imp_?flush@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV12@XZ
  870. $LN31@operator@2:
  871.     mov rax, QWORD PTR [rsi]
  872.     movsxd  rcx, DWORD PTR [rax+4]
  873.     cmp DWORD PTR [rcx+rsi+16], ebx
  874.     sete    al
  875.  
  876. ; 775  :
  877. ; 776  :    if (!_Ok)
  878.  
  879.     test    al, al
  880.     jne SHORT $LN14@operator@2
  881.  
  882. ; 777  :        _State |= ios_base::badbit;
  883.  
  884.     mov ebx, 4
  885.  
  886. ; 778  :    else
  887.  
  888.     jmp $LN21@operator@2
  889. $LN14@operator@2:
  890.  
  891. ; 779  :        {   // state okay, insert
  892. ; 780  :        _TRY_IO_BEGIN
  893. ; 781  :        if ((_Ostr.flags() & ios_base::adjustfield) != ios_base::left)
  894.  
  895.     mov rax, QWORD PTR [rsi]
  896.     movsxd  rcx, DWORD PTR [rax+4]
  897.     mov eax, DWORD PTR [rcx+rsi+24]
  898.     and eax, 448                ; 000001c0H
  899.     cmp eax, 64                 ; 00000040H
  900.     je  SHORT $LN89@operator@2
  901. $LL10@operator@2:
  902.  
  903. ; 782  :            for (; 0 < _Pad; --_Pad)    // pad on left
  904.  
  905.     test    rdi, rdi
  906.     jle SHORT $LN8@operator@2
  907.  
  908. ; 783  :                if (_Traits::eq_int_type(_Traits::eof(),
  909. ; 784  :                    _Ostr.rdbuf()->sputc(_Ostr.fill())))
  910.  
  911.     mov rax, QWORD PTR [rsi]
  912.     movsxd  rcx, DWORD PTR [rax+4]
  913.     movzx   edx, BYTE PTR [rcx+rsi+88]
  914.     mov rcx, QWORD PTR [rcx+rsi+72]
  915.     call    QWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z
  916.     cmp eax, -1
  917.     jne SHORT $LN7@operator@2
  918.  
  919. ; 785  :                    {   // insertion failed, quit
  920. ; 786  :                    _State |= ios_base::badbit;
  921.  
  922.     or  ebx, 4
  923.     mov DWORD PTR _State$[rsp], ebx
  924.  
  925. ; 787  :                    break;
  926.  
  927.     jmp SHORT $LN8@operator@2
  928. $LN7@operator@2:
  929.  
  930. ; 782  :            for (; 0 < _Pad; --_Pad)    // pad on left
  931.  
  932.     dec rdi
  933.     mov QWORD PTR _Pad$[rsp], rdi
  934.     jmp SHORT $LL10@operator@2
  935. $LN8@operator@2:
  936.  
  937. ; 788  :                    }
  938. ; 789  :
  939. ; 790  :        if (_State == ios_base::goodbit
  940. ; 791  :            && _Ostr.rdbuf()->sputn(_Val, _Count) != _Count)
  941.  
  942.     test    ebx, ebx
  943.     jne SHORT $LN2@operator@2
  944. $LN89@operator@2:
  945.     mov rax, QWORD PTR [rsi]
  946.     movsxd  rcx, DWORD PTR [rax+4]
  947.     mov r8, r13
  948.     mov rdx, r14
  949.     mov rcx, QWORD PTR [rcx+rsi+72]
  950.     call    QWORD PTR __imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z
  951.     cmp rax, r13
  952.     je  SHORT $LL91@operator@2
  953.  
  954. ; 792  :            _State |= ios_base::badbit;
  955.  
  956.     mov ebx, 4
  957.  
  958. ; 793  :
  959. ; 794  :        if (_State == ios_base::goodbit)
  960.  
  961.     jmp SHORT $LN94@operator@2
  962. $LL91@operator@2:
  963.  
  964. ; 795  :            for (; 0 < _Pad; --_Pad)    // pad on right
  965.  
  966.     test    rdi, rdi
  967.     jle SHORT $LN2@operator@2
  968.  
  969. ; 796  :                if (_Traits::eq_int_type(_Traits::eof(),
  970. ; 797  :                    _Ostr.rdbuf()->sputc(_Ostr.fill())))
  971.  
  972.     mov rax, QWORD PTR [rsi]
  973.     movsxd  rcx, DWORD PTR [rax+4]
  974.     movzx   edx, BYTE PTR [rcx+rsi+88]
  975.     mov rcx, QWORD PTR [rcx+rsi+72]
  976.     call    QWORD PTR __imp_?sputc@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAAHD@Z
  977.     cmp eax, -1
  978.     jne SHORT $LN1@operator@2
  979.  
  980. ; 798  :                    {   // insertion failed, quit
  981. ; 799  :                    _State |= ios_base::badbit;
  982.  
  983.     or  ebx, 4
  984.  
  985. ; 800  :                    break;
  986.  
  987.     jmp SHORT $LN94@operator@2
  988. $LN1@operator@2:
  989.  
  990. ; 795  :            for (; 0 < _Pad; --_Pad)    // pad on right
  991.  
  992.     dec rdi
  993.     mov QWORD PTR _Pad$[rsp], rdi
  994.     jmp SHORT $LL91@operator@2
  995. $LN94@operator@2:
  996.  
  997. ; 792  :            _State |= ios_base::badbit;
  998.  
  999.     mov DWORD PTR _State$[rsp], ebx
  1000. $LN2@operator@2:
  1001.  
  1002. ; 801  :                    }
  1003. ; 802  :        _Ostr.width(0);
  1004.  
  1005.     mov rax, QWORD PTR [rsi]
  1006.     movsxd  rcx, DWORD PTR [rax+4]
  1007.     mov QWORD PTR [rcx+rsi+40], 0
  1008.     jmp SHORT $LN21@operator@2
  1009. $LN22@operator@2:
  1010.  
  1011. ; 803  :        _CATCH_IO_(_Ostr)
  1012.  
  1013.     mov rsi, QWORD PTR _Ostr$[rsp]
  1014.     mov ebx, DWORD PTR _State$[rsp]
  1015.     mov r12, QWORD PTR _Ok$[rsp]
  1016. $LN21@operator@2:
  1017.  
  1018. ; 804  :        }
  1019. ; 805  :
  1020. ; 806  :    _Ostr.setstate(_State);
  1021.  
  1022.     mov rax, QWORD PTR [rsi]
  1023.     movsxd  rcx, DWORD PTR [rax+4]
  1024.     add rcx, rsi
  1025.     xor r8d, r8d
  1026.     mov edx, ebx
  1027.     call    QWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z
  1028.  
  1029. ; 807  :    return (_Ostr);
  1030.  
  1031.     call    QWORD PTR __imp_?uncaught_exception@std@@YA_NXZ
  1032.     test    al, al
  1033.     jne SHORT $LN77@operator@2
  1034.     mov rcx, r12
  1035.     call    QWORD PTR __imp_?_Osfx@?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAXXZ
  1036. $LN77@operator@2:
  1037.     mov rax, QWORD PTR [r12]
  1038.     movsxd  rcx, DWORD PTR [rax+4]
  1039.     mov rcx, QWORD PTR [rcx+r12+72]
  1040.     test    rcx, rcx
  1041.     je  SHORT $LN92@operator@2
  1042.     mov rax, QWORD PTR [rcx]
  1043.     call    QWORD PTR [rax+16]
  1044. $LN92@operator@2:
  1045.     mov rax, rsi
  1046.  
  1047. ; 808  :    }
  1048.  
  1049.     lea r11, QWORD PTR [rsp+80]
  1050.     mov rbx, QWORD PTR [r11+40]
  1051.     mov rsi, QWORD PTR [r11+48]
  1052.     mov rdi, QWORD PTR [r11+56]
  1053.     mov rsp, r11
  1054.     pop r14
  1055.     pop r13
  1056.     pop r12
  1057.     ret 0
  1058. ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ENDP ; std::operator<<<std::char_traits<char> >
  1059. ; Function compile flags: /Ogtpy
  1060. _TEXT   ENDS
  1061. ;   COMDAT text$x
  1062. text$x  SEGMENT
  1063. _State$ = 32
  1064. _Pad$ = 40
  1065. $T29982 = 48
  1066. _Ok$ = 56
  1067. _Ostr$ = 112
  1068. _Val$ = 120
  1069. ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA PROC ; `std::operator<<<std::char_traits<char> >'::`1'::catch$0
  1070.  
  1071. ; 803  :        _CATCH_IO_(_Ostr)
  1072.  
  1073.     mov QWORD PTR [rsp+16], rdx
  1074.     push    rbp
  1075.     sub rsp, 32                 ; 00000020H
  1076.     mov rbp, rdx
  1077. __catch$??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z$0:
  1078.     mov rdx, QWORD PTR _Ostr$[rbp]
  1079.     mov rax, QWORD PTR [rdx]
  1080.     movsxd  rcx, DWORD PTR [rax+4]
  1081.     add rcx, rdx
  1082.     mov r8b, 1
  1083.     mov edx, 4
  1084.     call    QWORD PTR __imp_?setstate@?$basic_ios@DU?$char_traits@D@std@@@std@@QEAAXH_N@Z
  1085.     npad    1
  1086.     lea rax, $LN22@catch$0@2
  1087.     add rsp, 32                 ; 00000020H
  1088.     pop rbp
  1089.     ret 0
  1090.     int 3
  1091. ?catch$0@?0???$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z@4HA ENDP ; `std::operator<<<std::char_traits<char> >'::`1'::catch$0
  1092. text$x  ENDS
  1093. PUBLIC  __real@3f50624dd2f1a9fc
  1094. PUBLIC  __real@43f0000000000000
  1095. PUBLIC  main
  1096. EXTRN   _fltused:DWORD
  1097. EXTRN   __chkstk:PROC
  1098. EXTRN   memset:PROC
  1099. ;   COMDAT pdata
  1100. ; File c:\users\g3\documents\visual studio 2010\projects\test\test\main.cpp
  1101. pdata   SEGMENT
  1102. $pdata$main DD  imagerel $LN54
  1103.     DD  imagerel $LN54+1207
  1104.     DD  imagerel $unwind$main
  1105. pdata   ENDS
  1106. ;   COMDAT xdata
  1107. xdata   SEGMENT
  1108. $unwind$main DD 0114a01H
  1109.     DD  0bba784aH
  1110.     DD  0bbb6842H
  1111.     DD  01781742dH
  1112.     DD  01780642dH
  1113.     DD  0177f342dH
  1114.     DD  01778012dH
  1115.     DD  0e016f018H
  1116.     DD  0c012d014H
  1117.     DD  05010H
  1118. xdata   ENDS
  1119. ;   COMDAT __real@3f50624dd2f1a9fc
  1120. CONST   SEGMENT
  1121. __real@3f50624dd2f1a9fc DQ 03f50624dd2f1a9fcr   ; 0.001
  1122. CONST   ENDS
  1123. ;   COMDAT __real@43f0000000000000
  1124. CONST   SEGMENT
  1125. __real@43f0000000000000 DQ 043f0000000000000r   ; 1.84467e+019
  1126. ; Function compile flags: /Ogtpy
  1127. CONST   ENDS
  1128. ;   COMDAT main
  1129. _TEXT   SEGMENT
  1130. base$ = 32
  1131. var4$ = 8032
  1132. var0$ = 16032
  1133. var1$ = 24032
  1134. var2$ = 32032
  1135. var3$ = 40032
  1136. start1$1$ = 48112
  1137. main    PROC                        ; COMDAT
  1138.  
  1139. ; 233  : {
  1140.  
  1141. $LN54:
  1142.     mov QWORD PTR [rsp+16], rbx
  1143.     mov QWORD PTR [rsp+24], rsi
  1144.     mov QWORD PTR [rsp+32], rdi
  1145.     push    rbp
  1146.     push    r12
  1147.     push    r13
  1148.     push    r14
  1149.     push    r15
  1150.     lea rbp, QWORD PTR [rsp-47808]
  1151.     mov eax, 48064              ; 0000bbc0H
  1152.     call    __chkstk
  1153.     sub rsp, rax
  1154.  
  1155. ; 234  :    double ALIGN_16 base[N] = {};
  1156.  
  1157.     lea rcx, QWORD PTR base$[rsp]
  1158.     xor edx, edx
  1159.     mov r8d, 8000               ; 00001f40H
  1160.     movaps  XMMWORD PTR [rsp+48048], xmm6
  1161.     movaps  XMMWORD PTR [rsp+48032], xmm7
  1162.     call    memset
  1163.  
  1164. ; 235  :    for(size_t i=0; i!=N; ++i) base[i]=static_cast<double>(i); //initialisiere base
  1165.  
  1166.     xor eax, eax
  1167.     movsdx  xmm1, QWORD PTR __real@43f0000000000000
  1168.     npad    7
  1169. $LL30@main:
  1170.     pxor    xmm0, xmm0
  1171.     cvtsi2sd xmm0, rax
  1172.     test    rax, rax
  1173.     jns SHORT $LN53@main
  1174.     addsd   xmm0, xmm1
  1175. $LN53@main:
  1176.     movsdx  QWORD PTR base$[rsp+rax*8], xmm0
  1177.     inc rax
  1178.     cmp rax, 1000               ; 000003e8H
  1179.     jne SHORT $LL30@main
  1180.  
  1181. ; 236  :
  1182. ; 237  :    //variante0
  1183. ; 238  :    double var0[N] = {};
  1184.  
  1185.     lea rcx, QWORD PTR var0$[rbp-256]
  1186.     xor edx, edx
  1187.     mov r8d, 8000               ; 00001f40H
  1188.     call    memset
  1189.  
  1190. ; 239  :    for(size_t i=2; i!=N-2; ++i)
  1191.  
  1192.     mov eax, 16
  1193.     npad    4
  1194. $LL27@main:
  1195.  
  1196. ; 240  :        var0[i] = base[i-1] + base[i] + base[i+1];
  1197.  
  1198.     movsdx  xmm0, QWORD PTR base$[rsp+rax-8]
  1199.     add rax, 8
  1200.     addsd   xmm0, QWORD PTR base$[rsp+rax-8]
  1201.     addsd   xmm0, QWORD PTR base$[rsp+rax]
  1202.     movsdx  QWORD PTR var0$[rbp+rax-264], xmm0
  1203.     cmp rax, 7984               ; 00001f30H
  1204.     jne SHORT $LL27@main
  1205.  
  1206. ; 241  :    
  1207. ; 242  :    //variante 1 (insg (N-4)/2 aligned loads, (N-4) unaligned loads
  1208. ; 243  :    double ALIGN_16 var1[N] = {};
  1209.  
  1210.     lea r8d, QWORD PTR [rax+16]
  1211.     lea rcx, QWORD PTR var1$[rbp-256]
  1212.     xor edx, edx
  1213.     call    memset
  1214.  
  1215. ; 244  :    clock_t start1 = clock();
  1216.  
  1217.     call    QWORD PTR __imp_clock
  1218.     mov ebx, 40000000               ; 02625a00H
  1219.     mov DWORD PTR start1$1$[rbp-256], eax
  1220.     mov r8d, ebx
  1221.     npad    3
  1222. $LL24@main:
  1223.  
  1224. ; 246  :    for(size_t i=2; i!=N-2; i+=2)
  1225.  
  1226.     xor ecx, ecx
  1227.     mov edx, 498                ; 000001f2H
  1228.     npad    9
  1229. $LL21@main:
  1230.  
  1231. ; 247  :    {
  1232. ; 248  :        __m128d m1 = _mm_loadu_pd(base+i-1); //lade "base[i-1]" (unaligned)
  1233.  
  1234.     movupd  xmm0, XMMWORD PTR base$[rsp+rcx+8]
  1235.  
  1236. ; 249  :        __m128d m2 = _mm_loadu_pd(base+i+1); //lade "base[i+1]" (unaligned)
  1237. ; 250  :        __m128d m3 = _mm_load_pd(base+i);    //lade "base[i]"   (  aligned)
  1238.  
  1239.     movapd  xmm1, XMMWORD PTR base$[rsp+rcx+16]
  1240.     add rcx, 16
  1241.     dec rdx
  1242.  
  1243. ; 251  :
  1244. ; 252  :        m3 = _mm_add_pd(m3,m1);  // base[i] + base[i-1]
  1245.  
  1246.     addpd   xmm1, xmm0
  1247.     movupd  xmm0, XMMWORD PTR base$[rsp+rcx+8]
  1248.  
  1249. ; 253  :        m3 = _mm_add_pd(m3,m2);  // base[i] + base[i-1] + base[i+1]
  1250.  
  1251.     addpd   xmm1, xmm0
  1252.  
  1253. ; 254  :
  1254. ; 255  :        _mm_store_pd(var1+i, m3);
  1255.  
  1256.     movapd  XMMWORD PTR var1$[rbp+rcx-256], xmm1
  1257.     jne SHORT $LL21@main
  1258.  
  1259. ; 245  :    for(size_t j=0; j!=M; ++j)
  1260.  
  1261.     dec r8
  1262.     jne SHORT $LL24@main
  1263.  
  1264. ; 256  :    }
  1265. ; 257  :    clock_t end1 = clock();
  1266.  
  1267.     call    QWORD PTR __imp_clock
  1268.  
  1269. ; 258  :    
  1270. ; 259  :    //variante 2 (insg. (N-4)/2 unaligned loads, (N-4)/2 aligned loads
  1271. ; 260  :    double ALIGN_16 var2[N] = {};
  1272.  
  1273.     lea rcx, QWORD PTR var2$[rbp-256]
  1274.     xor edx, edx
  1275.     mov r8d, 8000               ; 00001f40H
  1276.     mov r14d, eax
  1277.     call    memset
  1278.  
  1279. ; 261  :    clock_t start2 = clock();
  1280.  
  1281.     call    QWORD PTR __imp_clock
  1282.     mov rdx, rbx
  1283.     movupd  xmm3, XMMWORD PTR base$[rsp+8]
  1284.     mov r15d, eax
  1285. $LL18@main:
  1286.  
  1287. ; 263  :    {
  1288. ; 264  :        __m128d m1 = _mm_loadu_pd(base+1);
  1289.  
  1290.     movapd  xmm2, xmm3
  1291.  
  1292. ; 265  :        for(size_t i=2; i!=N-2; i+=4) //einmal "unrolled"
  1293.  
  1294.     mov ecx, 16
  1295.     npad    7
  1296. $LL15@main:
  1297.  
  1298. ; 266  :        {
  1299. ; 267  :            __m128d m2 = _mm_loadu_pd(base+i+1);
  1300.  
  1301.     movupd  xmm1, XMMWORD PTR base$[rsp+rcx+8]
  1302.  
  1303. ; 268  :            __m128d m3 = _mm_load_pd(base+i);
  1304.  
  1305.     movapd  xmm0, XMMWORD PTR base$[rsp+rcx]
  1306.     add rcx, 32                 ; 00000020H
  1307.  
  1308. ; 269  :
  1309. ; 270  :            m3 = _mm_add_pd(m3,m1); //m1 enthält "base[i-1]" (das "base[i+1]" vom nächsten schritt)
  1310.  
  1311.     addpd   xmm0, xmm2
  1312.  
  1313. ; 271  :            m3 = _mm_add_pd(m3,m2); //m2 enthält "base[i+1]"
  1314. ; 272  :            _mm_store_pd(var2+i, m3);
  1315. ; 273  :
  1316. ; 274  :            m1 = _mm_loadu_pd(base+i+3);
  1317.  
  1318.     movupd  xmm2, XMMWORD PTR base$[rsp+rcx-8]
  1319.     addpd   xmm0, xmm1
  1320.     movapd  XMMWORD PTR var2$[rbp+rcx-288], xmm0
  1321.  
  1322. ; 275  :            m3 = _mm_load_pd(base+i+2);
  1323.  
  1324.     movapd  xmm0, XMMWORD PTR base$[rsp+rcx-16]
  1325.  
  1326. ; 276  :
  1327. ; 277  :            m3 = _mm_add_pd(m3,m1); //m1 enthält "base[i+1]"
  1328.  
  1329.     addpd   xmm0, xmm2
  1330.  
  1331. ; 278  :            m3 = _mm_add_pd(m3,m2); //m2 enthält "base[i-1]" (das "base[i+1]" vom vorherigen schritt)
  1332.  
  1333.     addpd   xmm0, xmm1
  1334.  
  1335. ; 279  :            _mm_store_pd(var2+i+2, m3);
  1336.  
  1337.     movapd  XMMWORD PTR var2$[rbp+rcx-272], xmm0
  1338.     cmp rcx, 7984               ; 00001f30H
  1339.     jne SHORT $LL15@main
  1340.  
  1341. ; 262  :    for(size_t j=0; j!=M; ++j)
  1342.  
  1343.     dec rdx
  1344.     jne SHORT $LL18@main
  1345.  
  1346. ; 280  :        }
  1347. ; 281  :    }
  1348. ; 282  :    clock_t end2 = clock();
  1349.  
  1350.     call    QWORD PTR __imp_clock
  1351.  
  1352. ; 283  :
  1353. ; 284  :    //variante 3 (insg. (N-4)*3/2 aligned loads, (N-4) shuffles
  1354. ; 285  :    double ALIGN_16 var3[N] = {};
  1355.  
  1356.     lea rcx, QWORD PTR var3$[rbp-256]
  1357.     xor edx, edx
  1358.     mov r8d, 8000               ; 00001f40H
  1359.     mov r12d, eax
  1360.     call    memset
  1361.  
  1362. ; 286  :    clock_t start3 = clock();
  1363.  
  1364.     call    QWORD PTR __imp_clock
  1365.     mov rdx, rbx
  1366.     mov r13d, eax
  1367. $LL12@main:
  1368.  
  1369. ; 288  :    {
  1370. ; 289  :        for(size_t i=2; i!=N-2; i+=2)
  1371.  
  1372.     mov ecx, 16
  1373.     npad    6
  1374. $LL9@main:
  1375.  
  1376. ; 290  :        {
  1377. ; 291  :            __m128d m1 = _mm_load_pd(base+i-2);
  1378. ; 292  :            __m128d m3 = _mm_load_pd(base+i);
  1379.  
  1380.     movapd  xmm1, XMMWORD PTR base$[rsp+rcx]
  1381.     movapd  xmm0, XMMWORD PTR base$[rsp+rcx-16]
  1382.     add rcx, 16
  1383.  
  1384. ; 293  :            __m128d m2 = _mm_load_pd(base+i+2);
  1385. ; 294  :
  1386. ; 295  :            __m128d m4 = _mm_shuffle_pd(m1,m3, 0x1);
  1387.  
  1388.     shufpd  xmm0, xmm1, 1
  1389.  
  1390. ; 296  :            __m128d m5 = _mm_shuffle_pd(m3,m2, 0x1);
  1391. ; 297  :           
  1392. ; 298  :            m3 = _mm_add_pd(m3,m4);  // base[i] + base[i-1]
  1393.  
  1394.     addpd   xmm0, xmm1
  1395.     shufpd  xmm1, XMMWORD PTR base$[rsp+rcx], 1
  1396.  
  1397. ; 299  :            m3 = _mm_add_pd(m3,m5);  // base[i] + base[i-1] + base[i+1]
  1398.  
  1399.     addpd   xmm0, xmm1
  1400.  
  1401. ; 300  :
  1402. ; 301  :            _mm_store_pd(var3+i, m3);
  1403.  
  1404.     movapd  XMMWORD PTR var3$[rbp+rcx-272], xmm0
  1405.     cmp rcx, 7984               ; 00001f30H
  1406.     jne SHORT $LL9@main
  1407.  
  1408. ; 287  :    for(size_t j=0; j!=M; ++j)
  1409.  
  1410.     dec rdx
  1411.     jne SHORT $LL12@main
  1412.  
  1413. ; 302  :        }
  1414. ; 303  :    }
  1415. ; 304  :    clock_t end3 = clock();
  1416.  
  1417.     call    QWORD PTR __imp_clock
  1418.  
  1419. ; 305  :    
  1420. ; 306  :    //variante 4 (insg. (N-4)/2 aligned loads, (N-4)/2 shuffles
  1421. ; 307  :    double ALIGN_16 var4[N] = {};
  1422.  
  1423.     lea rcx, QWORD PTR var4$[rbp-256]
  1424.     xor edx, edx
  1425.     mov r8d, 8000               ; 00001f40H
  1426.     mov edi, eax
  1427.     call    memset
  1428.  
  1429. ; 308  :    clock_t start4 = clock();
  1430.  
  1431.     call    QWORD PTR __imp_clock
  1432.     movapd  xmm4, XMMWORD PTR base$[rsp+16]
  1433.     movapd  xmm5, XMMWORD PTR base$[rsp]
  1434.     mov esi, eax
  1435.     npad    5
  1436. $LL6@main:
  1437.  
  1438. ; 310  :    {
  1439. ; 311  :        __m128d prev = _mm_load_pd(base);
  1440. ; 312  :        __m128d m3 = _mm_load_pd(base+2);
  1441. ; 313  :        __m128d m1 = _mm_shuffle_pd(prev,m3, 0x1);     //entspricht "base[i-1]"
  1442.  
  1443.     movapd  xmm2, xmm5
  1444.     movapd  xmm3, xmm4
  1445.  
  1446. ; 314  :        for(size_t i=2; i!=N-2; i+=4) //einmal "unrolled"
  1447.  
  1448.     mov ecx, 16
  1449.     shufpd  xmm2, xmm4, 1
  1450. $LL3@main:
  1451.  
  1452. ; 315  :        {
  1453. ; 316  :            __m128d next = _mm_load_pd(base+i+2);
  1454.  
  1455.     movapd  xmm0, XMMWORD PTR base$[rsp+rcx+16]
  1456.  
  1457. ; 317  :            __m128d m2 = _mm_shuffle_pd(m3,next, 0x1); //entspricht "base[i+1]"
  1458. ; 318  :
  1459. ; 319  :            m3 = _mm_add_pd(m3,m1);
  1460.  
  1461.     addpd   xmm2, xmm3
  1462.     movapd  xmm1, xmm3
  1463.  
  1464. ; 320  :            m3 = _mm_add_pd(m3,m2);
  1465. ; 321  :
  1466. ; 322  :            _mm_store_pd(var4+i, m3);
  1467. ; 323  :
  1468. ; 324  :            //ab hier: next von oben ist hier m3
  1469. ; 325  :            //         m2 von oben entspricht hier m1 (base[i+1] -> base[i-1])
  1470. ; 326  :
  1471. ; 327  :            m3 = _mm_load_pd(base+i+4); //m3 wird später oben wiederverwendet
  1472.  
  1473.     movapd  xmm3, XMMWORD PTR base$[rsp+rcx+32]
  1474.     shufpd  xmm1, xmm0, 1
  1475.     add rcx, 32                 ; 00000020H
  1476.     addpd   xmm2, xmm1
  1477.  
  1478. ; 328  :            m1 = _mm_shuffle_pd(next, m3, 0x1);
  1479. ; 329  :
  1480. ; 330  :            m2 = _mm_add_pd(m2,next); //m1 wird später oben wiederverwendet
  1481.  
  1482.     addpd   xmm1, xmm0
  1483.     movapd  XMMWORD PTR var4$[rbp+rcx-288], xmm2
  1484.     movapd  xmm2, xmm0
  1485.     shufpd  xmm2, xmm3, 1
  1486.  
  1487. ; 331  :            m2 = _mm_add_pd(m2,m1);
  1488.  
  1489.     addpd   xmm1, xmm2
  1490.  
  1491. ; 332  :
  1492. ; 333  :            _mm_store_pd(var4+i+2, m2);
  1493.  
  1494.     movapd  XMMWORD PTR var4$[rbp+rcx-272], xmm1
  1495.     cmp rcx, 7984               ; 00001f30H
  1496.     jne SHORT $LL3@main
  1497.  
  1498. ; 309  :    for(size_t j=0; j!=M; ++j)
  1499.  
  1500.     dec rbx
  1501.     jne SHORT $LL6@main
  1502.  
  1503. ; 334  :        }
  1504. ; 335  :    }
  1505. ; 336  :    clock_t end4 = clock();
  1506.  
  1507.     call    QWORD PTR __imp_clock
  1508.  
  1509. ; 337  :
  1510. ; 338  :    cout<<"Variante 0: Kontrollwert: "<<var0[100]<<'\n';
  1511.  
  1512.     mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  1513.     lea rdx, OFFSET FLAT:$SG-31
  1514.     mov ebx, eax
  1515.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1516.     mov rcx, rax
  1517.     movsdx  xmm1, QWORD PTR var0$[rbp+544]
  1518.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1519.     mov rcx, rax
  1520.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@D@Z ; std::operator<<<std::char_traits<char> >
  1521.  
  1522. ; 339  :    cout<<"Variante 1: Kontrollwert: "<<var1[100]<<"\t zeit: "<<(end1-start1)/static_cast<double>(CLOCKS_PER_SEC)<<"s\n";
  1523.  
  1524.     sub r14d, DWORD PTR start1$1$[rbp-256]
  1525.     mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  1526.     movsdx  xmm7, QWORD PTR __real@3f50624dd2f1a9fc
  1527.     movd    xmm6, r14d
  1528.     lea rdx, OFFSET FLAT:$SG-34
  1529.     cvtdq2pd xmm6, xmm6
  1530.     mulsd   xmm6, xmm7
  1531.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1532.     movsdx  xmm1, QWORD PTR var1$[rbp+544]
  1533.     mov rcx, rax
  1534.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1535.     lea rdx, OFFSET FLAT:$SG-33
  1536.     mov rcx, rax
  1537.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1538.     mov rcx, rax
  1539.     movapd  xmm1, xmm6
  1540.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1541.     lea rdx, OFFSET FLAT:$SG-32
  1542.     mov rcx, rax
  1543.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1544.  
  1545. ; 340  :    cout<<"Variante 2: Kontrollwert: "<<var2[100]<<"\t zeit: "<<(end2-start2)/static_cast<double>(CLOCKS_PER_SEC)<<"s\n";
  1546.  
  1547.     mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  1548.     sub r12d, r15d
  1549.     movd    xmm6, r12d
  1550.     lea rdx, OFFSET FLAT:$SG-37
  1551.     cvtdq2pd xmm6, xmm6
  1552.     mulsd   xmm6, xmm7
  1553.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1554.     movsdx  xmm1, QWORD PTR var2$[rbp+544]
  1555.     mov rcx, rax
  1556.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1557.     lea rdx, OFFSET FLAT:$SG-36
  1558.     mov rcx, rax
  1559.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1560.     mov rcx, rax
  1561.     movapd  xmm1, xmm6
  1562.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1563.     lea rdx, OFFSET FLAT:$SG-35
  1564.     mov rcx, rax
  1565.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1566.  
  1567. ; 341  :    cout<<"Variante 3: Kontrollwert: "<<var3[100]<<"\t zeit: "<<(end3-start3)/static_cast<double>(CLOCKS_PER_SEC)<<"s\n";
  1568.  
  1569.     mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  1570.     sub edi, r13d
  1571.     movd    xmm6, edi
  1572.     lea rdx, OFFSET FLAT:$SG-40
  1573.     cvtdq2pd xmm6, xmm6
  1574.     mulsd   xmm6, xmm7
  1575.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1576.     movsdx  xmm1, QWORD PTR var3$[rbp+544]
  1577.     mov rcx, rax
  1578.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1579.     lea rdx, OFFSET FLAT:$SG-39
  1580.     mov rcx, rax
  1581.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1582.     mov rcx, rax
  1583.     movapd  xmm1, xmm6
  1584.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1585.     lea rdx, OFFSET FLAT:$SG-38
  1586.     mov rcx, rax
  1587.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1588.  
  1589. ; 342  :    cout<<"Variante 4: Kontrollwert: "<<var4[100]<<"\t zeit: "<<(end4-start4)/static_cast<double>(CLOCKS_PER_SEC)<<"s\n";
  1590.  
  1591.     mov rcx, QWORD PTR __imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A
  1592.     sub ebx, esi
  1593.     movd    xmm6, ebx
  1594.     lea rdx, OFFSET FLAT:$SG-43
  1595.     cvtdq2pd xmm6, xmm6
  1596.     mulsd   xmm6, xmm7
  1597.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1598.     movsdx  xmm1, QWORD PTR var4$[rbp+544]
  1599.     mov rcx, rax
  1600.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1601.     lea rdx, OFFSET FLAT:$SG-42
  1602.     mov rcx, rax
  1603.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1604.     movapd  xmm1, xmm6
  1605.     mov rcx, rax
  1606.     call    QWORD PTR __imp_??6?$basic_ostream@DU?$char_traits@D@std@@@std@@QEAAAEAV01@N@Z
  1607.     lea rdx, OFFSET FLAT:$SG-41
  1608.     mov rcx, rax
  1609.     call    ??$?6U?$char_traits@D@std@@@std@@YAAEAV?$basic_ostream@DU?$char_traits@D@std@@@0@AEAV10@PEBD@Z ; std::operator<<<std::char_traits<char> >
  1610.  
  1611. ; 343  : std::cin.get();}
  1612.  
  1613.     mov rcx, QWORD PTR __imp_?cin@std@@3V?$basic_istream@DU?$char_traits@D@std@@@1@A
  1614.     call    QWORD PTR __imp_?get@?$basic_istream@DU?$char_traits@D@std@@@std@@QEAAHXZ
  1615.     lea r11, QWORD PTR [rsp+48064]
  1616.     xor eax, eax
  1617.     mov rbx, QWORD PTR [r11+56]
  1618.     mov rsi, QWORD PTR [r11+64]
  1619.     mov rdi, QWORD PTR [r11+72]
  1620.     movaps  xmm6, XMMWORD PTR [r11-16]
  1621.     movaps  xmm7, XMMWORD PTR [r11-32]
  1622.     mov rsp, r11
  1623.     pop r15
  1624.     pop r14
  1625.     pop r13
  1626.     pop r12
  1627.     pop rbp
  1628.     ret 0
  1629. main    ENDP
  1630. _TEXT   ENDS
  1631. END
Advertisement
Add Comment
Please, Sign In to add comment