1. Disassembly of section .text:
  2.  
  3. 0000000000400410 <main>:
  4. #include <math.h>
  5. #include <stdio.h>
  6.  
  7. int main(int argc, char **argv) {
  8. 400410: 41 56 push %r14
  9. 400412: 41 55 push %r13
  10. 400414: 41 54 push %r12
  11. 400416: 55 push %rbp
  12. 400417: 53 push %rbx
  13. 400418: 48 83 ec 20 sub $0x20,%rsp
  14. 40041c: 45 31 ed xor %r13d,%r13d
  15. 40041f: 4d 89 ee mov %r13,%r14
  16. 400422: 66 49 0f 6e c5 movq %r13,%xmm0
  17. for (int i = 0; i < 10000; i++) {
  18. 400427: 31 db xor %ebx,%ebx
  19. 400429: 48 bd 9a 99 99 99 99 movabs $0x3fc999999999999a,%rbp
  20. 400430: 99 c9 3f
  21. #include <math.h>
  22. #include <stdio.h>
  23.  
  24. int main(int argc, char **argv) {
  25. 400433: 49 bc 00 00 00 00 00 movabs $0x4330000000000000,%r12
  26. 40043a: 00 30 43
  27. 40043d: f2 0f 10 15 2b 03 00 movsd 0x32b(%rip),%xmm2 # 400770 <_IO_stdin_used+0x40>
  28. 400444: 00
  29. 400445: e9 c4 00 00 00 jmpq 40050e <main+0xfe>
  30. 40044a: f2 0f 2a cb cvtsi2sd %ebx,%xmm1
  31. 40044e: 66 48 0f 6e c5 movq %rbp,%xmm0
  32. 400453: f2 0f 59 c8 mulsd %xmm0,%xmm1
  33. 400457: 66 0f 28 c1 movapd %xmm1,%xmm0
  34. 40045b: 66 0f 28 d9 movapd %xmm1,%xmm3
  35. 40045f: 66 0f 54 da andpd %xmm2,%xmm3
  36. 400463: 66 49 0f 6e e4 movq %r12,%xmm4
  37. 400468: 66 0f 2e e3 ucomisd %xmm3,%xmm4
  38. 40046c: 76 23 jbe 400491 <main+0x81>
  39. 40046e: f2 48 0f 2c c1 cvttsd2si %xmm1,%rax
  40. 400473: f2 48 0f 2a d8 cvtsi2sd %rax,%xmm3
  41. 400478: f2 0f 10 05 00 03 00 movsd 0x300(%rip),%xmm0 # 400780 <_IO_stdin_used+0x50>
  42. 40047f: 00
  43. 400480: 66 0f 28 e1 movapd %xmm1,%xmm4
  44. 400484: f2 0f c2 e3 06 cmpnlesd %xmm3,%xmm4
  45. 400489: 66 0f 54 c4 andpd %xmm4,%xmm0
  46. 40048d: f2 0f 58 c3 addsd %xmm3,%xmm0
  47. 400491: 66 0f 28 e1 movapd %xmm1,%xmm4
  48. 400495: 66 0f 28 d9 movapd %xmm1,%xmm3
  49. 400499: 66 0f 54 da andpd %xmm2,%xmm3
  50. 40049d: 66 49 0f 6e ec movq %r12,%xmm5
  51. 4004a2: 66 0f 2e eb ucomisd %xmm3,%xmm5
  52. 4004a6: 76 27 jbe 4004cf <main+0xbf>
  53. 4004a8: f2 48 0f 2c c1 cvttsd2si %xmm1,%rax
  54. 4004ad: f2 48 0f 2a d8 cvtsi2sd %rax,%xmm3
  55. 4004b2: 66 0f 28 e3 movapd %xmm3,%xmm4
  56. 4004b6: f2 0f c2 e1 06 cmpnlesd %xmm1,%xmm4
  57. 4004bb: f2 0f 10 2d bd 02 00 movsd 0x2bd(%rip),%xmm5 # 400780 <_IO_stdin_used+0x50>
  58. 4004c2: 00
  59. 4004c3: 66 0f 54 e5 andpd %xmm5,%xmm4
  60. 4004c7: f2 0f 5c dc subsd %xmm4,%xmm3
  61. 4004cb: 66 0f 28 e3 movapd %xmm3,%xmm4
  62. 4004cf: 66 49 0f 7e e6 movq %xmm4,%r14
  63. 4004d4: 66 0f 28 d9 movapd %xmm1,%xmm3
  64. 4004d8: 66 0f 54 da andpd %xmm2,%xmm3
  65. 4004dc: 66 49 0f 6e e4 movq %r12,%xmm4
  66. 4004e1: 66 0f 2e e3 ucomisd %xmm3,%xmm4
  67. 4004e5: 76 22 jbe 400509 <main+0xf9>
  68. 4004e7: f2 0f 58 1d 99 02 00 addsd 0x299(%rip),%xmm3 # 400788 <_IO_stdin_used+0x58>
  69. 4004ee: 00
  70. 4004ef: f2 48 0f 2c c3 cvttsd2si %xmm3,%rax
  71. 4004f4: f2 48 0f 2a d8 cvtsi2sd %rax,%xmm3
  72. 4004f9: 66 0f 28 ea movapd %xmm2,%xmm5
  73. 4004fd: 66 0f 55 e9 andnpd %xmm1,%xmm5
  74. 400501: 66 0f 28 cd movapd %xmm5,%xmm1
  75. 400505: 66 0f 56 cb orpd %xmm3,%xmm1
  76. 400509: 66 49 0f 7e cd movq %xmm1,%r13
  77. for (int i = 0; i < 10000; i++) {
  78. double y = (double)i / 5;
  79. printf("==== %d/5 = %f ====\n");
  80. 40050e: bf 34 07 40 00 mov $0x400734,%edi
  81. 400513: 31 c0 xor %eax,%eax
  82. 400515: f2 0f 11 44 24 10 movsd %xmm0,0x10(%rsp)
  83. 40051b: f2 0f 11 14 24 movsd %xmm2,(%rsp)
  84. 400520: e8 bb fe ff ff callq 4003e0 <printf@plt>
  85. printf("ceil : %f", ceil(y));
  86. 400525: f2 0f 10 44 24 10 movsd 0x10(%rsp),%xmm0
  87. 40052b: bf 49 07 40 00 mov $0x400749,%edi
  88. 400530: b8 01 00 00 00 mov $0x1,%eax
  89. 400535: e8 a6 fe ff ff callq 4003e0 <printf@plt>
  90. printf(" floor : %f", floor(y));
  91. 40053a: 66 49 0f 6e c6 movq %r14,%xmm0
  92. 40053f: bf 53 07 40 00 mov $0x400753,%edi
  93. 400544: b8 01 00 00 00 mov $0x1,%eax
  94. 400549: e8 92 fe ff ff callq 4003e0 <printf@plt>
  95. printf(" round : %f\n", round(y));
  96. 40054e: 66 49 0f 6e c5 movq %r13,%xmm0
  97. 400553: bf 5f 07 40 00 mov $0x40075f,%edi
  98. 400558: b8 01 00 00 00 mov $0x1,%eax
  99. 40055d: e8 7e fe ff ff callq 4003e0 <printf@plt>
  100. #include <math.h>
  101. #include <stdio.h>
  102.  
  103. int main(int argc, char **argv) {
  104. for (int i = 0; i < 10000; i++) {
  105. 400562: 83 c3 01 add $0x1,%ebx
  106. 400565: 81 fb 10 27 00 00 cmp $0x2710,%ebx
  107. 40056b: f2 0f 10 14 24 movsd (%rsp),%xmm2
  108. 400570: 0f 85 d4 fe ff ff jne 40044a <main+0x3a>
  109. printf("ceil : %f", ceil(y));
  110. printf(" floor : %f", floor(y));
  111. printf(" round : %f\n", round(y));
  112. }
  113. return 0;
  114. }
  115. 400576: 31 c0 xor %eax,%eax
  116. 400578: 48 83 c4 20 add $0x20,%rsp
  117. 40057c: 5b pop %rbx
  118. 40057d: 5d pop %rbp
  119. 40057e: 41 5c pop %r12
  120. 400580: 41 5d pop %r13
  121. 400582: 41 5e pop %r14
  122. 400584: c3 retq
  123. 400585: 66 2e 0f 1f 84 00 00 nopw %cs:0x0(%rax,%rax,1)
  124. 40058c: 00 00 00
  125. 40058f: 90 nop