Skip to content

Instantly share code, notes, and snippets.

@eira-fransham
Last active August 18, 2017 15:52
Show Gist options
  • Save eira-fransham/bac1d30dc04c63794eb398d9218a1533 to your computer and use it in GitHub Desktop.
Save eira-fransham/bac1d30dc04c63794eb398d9218a1533 to your computer and use it in GitHub Desktop.
Dump of assembler code for function bigint_sherlock::mul: Dump of assembler code for function bigint_sherlock::mul:
<+0>: push %rbp <+0>: push %rbp
<+1>: mov %rsp,%rbp <+1>: mov %rsp,%rbp
<+4>: sub $0x40,%rsp | <+4>: push %r15
<+8>: mov 0x10(%rbp),%rax | <+6>: push %r14
<+12>: mov 0x18(%rbp),%rcx | <+8>: push %r13
<+16>: mov 0x20(%rbp),%rdx | <+10>: push %r12
<+20>: mov 0x28(%rbp),%rsi | <+12>: push %rbx
<+24>: mov 0x30(%rbp),%r8 | <+13>: sub $0x38,%rsp
<+28>: mov 0x38(%rbp),%r9 | <+17>: mov %rdi,-0x58(%rbp)
<+32>: mov 0x40(%rbp),%r10 | <+21>: mov 0x10(%rbp),%r11
<+36>: mov 0x48(%rbp),%r11 | <+25>: mov 0x18(%rbp),%rsi
<+40>: mov %rax,-0x40(%rbp) | <+29>: mov 0x20(%rbp),%rax
<+44>: mov %rcx,-0x38(%rbp) | <+33>: mov %rax,-0x30(%rbp)
<+48>: mov %rdx,-0x30(%rbp) | <+37>: mov 0x28(%rbp),%rax
<+52>: mov %rsi,-0x28(%rbp) | <+41>: mov %rax,-0x48(%rbp)
<+56>: mov %r8,-0x20(%rbp) | <+45>: mov 0x30(%rbp),%rcx
<+60>: mov %r9,-0x18(%rbp) | <+49>: mov 0x38(%rbp),%r12
<+64>: mov %r10,-0x10(%rbp) | <+53>: mov 0x40(%rbp),%rax
<+68>: mov %r11,-0x8(%rbp) | <+57>: mov %rax,-0x38(%rbp)
<+72>: mov -0x40(%rbp),%rax | <+61>: mov 0x48(%rbp),%rax
<+76>: mulq -0x20(%rbp) | <+65>: mov %rax,-0x60(%rbp)
<+80>: mov %rax,%r8 | <+69>: mov %ecx,%r10d
<+83>: mov %rdx,%r9 | <+72>: shr $0x20,%rcx
<+86>: mov -0x40(%rbp),%rax | <+76>: test %r11,%r11
<+90>: mulq -0x18(%rbp) | <+79>: mov %rsi,-0x40(%rbp)
<+94>: add %rax,%r9 | <+83>: je 0x58276 <bigint_sherlock::mul+198>
<+97>: adc $0x0,%rdx | <+85>: mov %r11,%r13
<+101>: mov %rdx,%r10 | <+88>: shr $0x20,%r13
<+104>: mov -0x40(%rbp),%rax | <+92>: mov %r11d,%esi
<+108>: mulq -0x10(%rbp) | <+95>: mov %r10,%rax
<+112>: add %rax,%r10 | <+98>: imul %r13,%rax
<+115>: adc $0x0,%rdx | <+102>: mov %r10,%rdi
<+119>: mov %rdx,%r11 | <+105>: imul %rsi,%rdi
<+122>: mov -0x40(%rbp),%rax | <+109>: mov %rax,%rbx
<+126>: mulq -0x8(%rbp) | <+112>: shl $0x20,%rbx
<+130>: add %rax,%r11 | <+116>: shr $0x20,%rax
<+133>: adc $0x0,%rdx | <+120>: add %rdi,%rbx
<+137>: mov %rdx,%rcx | <+123>: adc $0x0,%rax
<+140>: mov -0x38(%rbp),%rax | <+127>: mov %ebx,%edi
<+144>: mulq -0x20(%rbp) | <+129>: shr $0x20,%rbx
<+148>: add %rax,%r9 | <+133>: imul %rcx,%r13
<+151>: adc %rdx,%r10 | <+137>: imul %rcx,%rsi
<+154>: adc $0x0,%r11 | <+141>: mov %r13,%rdx
<+158>: adc $0x0,%rcx | <+144>: shl $0x20,%rdx
<+162>: mov -0x38(%rbp),%rax | <+148>: shr $0x20,%r13
<+166>: mulq -0x18(%rbp) | <+152>: add %rsi,%rdx
<+170>: add %rax,%r10 | <+155>: mov -0x40(%rbp),%rsi
<+173>: adc %rdx,%r11 | <+159>: adc $0x0,%r13d
<+176>: adc $0x0,%rcx | <+163>: add %rbx,%rdx
<+180>: adc $0x0,%r11 | <+166>: adc $0x0,%r13d
<+184>: adc $0x0,%rcx | <+170>: shld $0x20,%rdx,%r13
<+188>: mov -0x38(%rbp),%rax | <+175>: shl $0x20,%rdx
<+192>: mulq -0x10(%rbp) | <+179>: or %rdi,%rdx
<+196>: add %rax,%r11 | <+182>: mov %rdx,-0x50(%rbp)
<+199>: adc $0x0,%rdx | <+186>: add %rax,%r13
<+203>: or %rdx,%rcx | <+189>: sbb %r14,%r14
<+206>: mov -0x30(%rbp),%rax | <+192>: and $0x1,%r14d
<+210>: mulq -0x20(%rbp) | <+196>: jmp 0x58282 <bigint_sherlock::mul+210>
<+214>: add %rax,%r10 | <+198>: xor %eax,%eax
<+217>: adc %rdx,%r11 | <+200>: mov %rax,-0x50(%rbp)
<+220>: adc $0x0,%rcx | <+204>: xor %r13d,%r13d
<+224>: mov -0x30(%rbp),%rax | <+207>: xor %r14d,%r14d
<+228>: mulq -0x18(%rbp) | <+210>: mov %r14,%rax
<+232>: add %rax,%r11 | <+213>: or %rsi,%rax
<+235>: adc $0x0,%rdx | <+216>: je 0x582fc <bigint_sherlock::mul+332>
<+239>: or %rdx,%rcx | <+218>: mov %rsi,%r8
<+242>: mov -0x28(%rbp),%rax | <+221>: shr $0x20,%r8
<+246>: mulq -0x20(%rbp) | <+225>: mov %esi,%esi
<+250>: add %rax,%r11 | <+227>: mov %r10,%rax
<+253>: or %rdx,%rcx | <+230>: imul %r8,%rax
<+256>: cmp $0x0,%rcx | <+234>: mov %r10,%rdx
<+260>: jne 0x58351 <bigint_sherlock::mul+321> | <+237>: imul %rsi,%rdx
<+262>: mov -0x28(%rbp),%rcx | <+241>: mov %rax,%rdi
<+266>: jrcxz 0x58330 <bigint_sherlock::mul+288> | <+244>: shl $0x20,%rdi
<+268>: mov -0x8(%rbp),%rcx | <+248>: shr $0x20,%rax
<+272>: mov -0x10(%rbp),%rax | <+252>: add %rdx,%rdi
<+276>: or %rax,%rcx | <+255>: adc $0x0,%rax
<+279>: mov -0x18(%rbp),%rax | <+259>: add %r14,%rax
<+283>: or %rax,%rcx | <+262>: add %r13,%rdi
<+286>: jmp 0x58351 <bigint_sherlock::mul+321> | <+265>: adc $0x0,%rax
<+288>: mov -0x8(%rbp),%rcx | <+269>: mov %edi,%edx
<+292>: jrcxz 0x58347 <bigint_sherlock::mul+311> | <+271>: shr $0x20,%rdi
<+294>: mov -0x30(%rbp),%rcx | <+275>: imul %rcx,%r8
<+298>: mov -0x38(%rbp),%rax | <+279>: imul %rcx,%rsi
<+302>: or %rax,%rcx | <+283>: mov %r8,%r13
<+305>: cmp $0x0,%rcx | <+286>: shl $0x20,%r13
<+309>: jne 0x58351 <bigint_sherlock::mul+321> | <+290>: shr $0x20,%r8
<+311>: mov -0x10(%rbp),%rcx | <+294>: add %rsi,%r13
<+315>: jrcxz 0x58351 <bigint_sherlock::mul+321> | <+297>: adc $0x0,%r8d
<+317>: mov -0x30(%rbp),%rcx | <+301>: add %rdi,%r13
<+321>: test %rcx,%rcx | <+304>: adc $0x0,%r8d
<+324>: jne 0x5836e <bigint_sherlock::mul+350> | <+308>: shld $0x20,%r13,%r8
<+326>: mov %r8,(%rdi) | <+313>: shl $0x20,%r13
<+329>: mov %r9,0x8(%rdi) | <+317>: or %rdx,%r13
<+333>: mov %r10,0x10(%rdi) | <+320>: add %rax,%r8
<+337>: mov %r11,0x18(%rdi) | <+323>: sbb %r14,%r14
<+341>: mov %rdi,%rax | <+326>: and $0x1,%r14d
<+344>: add $0x40,%rsp | <+330>: jmp 0x582ff <bigint_sherlock::mul+335>
<+348>: pop %rbp | <+332>: xor %r8d,%r8d
<+349>: retq | <+335>: mov -0x30(%rbp),%rdx
<+350>: mov 0x3ff29b(%rip),%rdi # 0x457610 | <+339>: mov %r14,%rax
<+357>: callq 0x57a38 | <+342>: or %rdx,%rax
> <+345>: je 0x5837d <bigint_sherlock::mul+461>
> <+347>: mov %rdx,%r15
> <+350>: shr $0x20,%r15
> <+354>: mov %edx,%edi
> <+356>: mov %r10,%rax
> <+359>: imul %r15,%rax
> <+363>: mov %r10,%rdx
> <+366>: imul %rdi,%rdx
> <+370>: mov %rax,%rbx
> <+373>: shl $0x20,%rbx
> <+377>: shr $0x20,%rax
> <+381>: add %rdx,%rbx
> <+384>: adc $0x0,%rax
> <+388>: add %r14,%rax
> <+391>: add %r8,%rbx
> <+394>: adc $0x0,%rax
> <+398>: mov %ebx,%edx
> <+400>: shr $0x20,%rbx
> <+404>: imul %rcx,%r15
> <+408>: imul %rcx,%rdi
> <+412>: mov %r15,%r8
> <+415>: shl $0x20,%r8
> <+419>: shr $0x20,%r15
> <+423>: add %rdi,%r8
> <+426>: adc $0x0,%r15d
> <+430>: add %rbx,%r8
> <+433>: adc $0x0,%r15d
> <+437>: shld $0x20,%r8,%r15
> <+442>: shl $0x20,%r8
> <+446>: or %rdx,%r8
> <+449>: add %rax,%r15
> <+452>: sbb %r14,%r14
> <+455>: and $0x1,%r14d
> <+459>: jmp 0x58380 <bigint_sherlock::mul+464>
> <+461>: xor %r15d,%r15d
> <+464>: mov %r14,%rax
> <+467>: mov -0x48(%rbp),%rdx
> <+471>: or %rdx,%rax
> <+474>: je 0x583f4 <bigint_sherlock::mul+580>
> <+476>: mov %rdx,%r9
> <+479>: shr $0x20,%r9
> <+483>: mov %edx,%edi
> <+485>: mov %r10,%rax
> <+488>: imul %r9,%rax
> <+492>: imul %rdi,%r10
> <+496>: mov %rax,%rbx
> <+499>: shl $0x20,%rbx
> <+503>: shr $0x20,%rax
> <+507>: add %r10,%rbx
> <+510>: adc $0x0,%rax
> <+514>: add %r14,%rax
> <+517>: add %r15,%rbx
> <+520>: adc $0x0,%rax
> <+524>: mov %ebx,%edx
> <+526>: shr $0x20,%rbx
> <+530>: imul %rcx,%r9
> <+534>: imul %rdi,%rcx
> <+538>: mov %r9,%r15
> <+541>: shl $0x20,%r15
> <+545>: shr $0x20,%r9
> <+549>: add %rcx,%r15
> <+552>: adc $0x0,%r9d
> <+556>: add %rbx,%r15
> <+559>: adc $0x0,%r9d
> <+563>: shld $0x20,%r15,%r9
> <+568>: shl $0x20,%r15
> <+572>: or %rdx,%r15
> <+575>: add %rax,%r9
> <+578>: jmp 0x583f7 <bigint_sherlock::mul+583>
> <+580>: xor %r9d,%r9d
> <+583>: mov -0x38(%rbp),%r10
> <+587>: mov %r12,%r14
> <+590>: shr $0x20,%r14
> <+594>: mov %r12d,%r12d
> <+597>: test %r11,%r11
> <+600>: je 0x5847f <bigint_sherlock::mul+719>
> <+602>: mov %r11,%rax
> <+605>: shr $0x20,%rax
> <+609>: mov %r11d,%edi
> <+612>: mov %r12,%rdx
> <+615>: imul %rax,%rdx
> <+619>: mov %r12,%rsi
> <+622>: imul %rdi,%rsi
> <+626>: mov %rdx,%rcx
> <+629>: shl $0x20,%rcx
> <+633>: shr $0x20,%rdx
> <+637>: add %rsi,%rcx
> <+640>: adc $0x0,%rdx
> <+644>: add %r13,%rcx
> <+647>: adc $0x0,%rdx
> <+651>: mov %ecx,%esi
> <+653>: shr $0x20,%rcx
> <+657>: imul %r14,%rax
> <+661>: imul %r14,%rdi
> <+665>: mov %rax,%r13
> <+668>: shl $0x20,%r13
> <+672>: shr $0x20,%rax
> <+676>: add %rdi,%r13
> <+679>: adc $0x0,%eax
> <+682>: add %rcx,%r13
> <+685>: adc $0x0,%eax
> <+688>: shld $0x20,%r13,%rax
> <+693>: shl $0x20,%r13
> <+697>: or %rsi,%r13
> <+700>: add %rdx,%rax
> <+703>: sbb %cl,%cl
> <+705>: add %rax,%r8
> <+708>: sbb %al,%al
> <+710>: or %cl,%al
> <+712>: and $0x1,%al
> <+714>: movzbl %al,%edi
> <+717>: jmp 0x58481 <bigint_sherlock::mul+721>
> <+719>: xor %edi,%edi
> <+721>: mov %rdi,%rax
> <+724>: mov -0x40(%rbp),%rcx
> <+728>: or %rcx,%rax
> <+731>: je 0x58503 <bigint_sherlock::mul+851>
> <+733>: mov %rcx,%rdx
> <+736>: shr $0x20,%rdx
> <+740>: mov %ecx,%ebx
> <+742>: mov %r12,%rax
> <+745>: imul %rdx,%rax
> <+749>: mov %r12,%rsi
> <+752>: imul %rbx,%rsi
> <+756>: mov %rax,%rcx
> <+759>: shl $0x20,%rcx
> <+763>: shr $0x20,%rax
> <+767>: add %rsi,%rcx
> <+770>: adc $0x0,%rax
> <+774>: add %rdi,%rax
> <+777>: add %r8,%rcx
> <+780>: adc $0x0,%rax
> <+784>: mov %ecx,%esi
> <+786>: shr $0x20,%rcx
> <+790>: imul %r14,%rdx
> <+794>: imul %r14,%rbx
> <+798>: mov %rdx,%r8
> <+801>: shl $0x20,%r8
> <+805>: shr $0x20,%rdx
> <+809>: add %rbx,%r8
> <+812>: adc $0x0,%edx
> <+815>: add %rcx,%r8
> <+818>: adc $0x0,%edx
> <+821>: shld $0x20,%r8,%rdx
> <+826>: shl $0x20,%r8
> <+830>: or %rsi,%r8
> <+833>: add %rax,%rdx
> <+836>: sbb %al,%al
> <+838>: add %rdx,%r15
> <+841>: sbb %cl,%cl
> <+843>: or %al,%cl
> <+845>: and $0x1,%cl
> <+848>: movzbl %cl,%edi
> <+851>: mov %rdi,%rax
> <+854>: mov -0x30(%rbp),%rcx
> <+858>: or %rcx,%rax
> <+861>: je 0x58585 <bigint_sherlock::mul+981>
> <+863>: mov %rcx,%rdx
> <+866>: shr $0x20,%rdx
> <+870>: mov %ecx,%ebx
> <+872>: mov %r12,%rax
> <+875>: imul %rdx,%rax
> <+879>: mov %r12,%rsi
> <+882>: imul %rbx,%rsi
> <+886>: mov %rax,%rcx
> <+889>: shl $0x20,%rcx
> <+893>: shr $0x20,%rax
> <+897>: add %rsi,%rcx
> <+900>: adc $0x0,%rax
> <+904>: add %rdi,%rax
> <+907>: add %r15,%rcx
> <+910>: adc $0x0,%rax
> <+914>: mov %ecx,%esi
> <+916>: shr $0x20,%rcx
> <+920>: imul %r14,%rdx
> <+924>: imul %r14,%rbx
> <+928>: mov %rdx,%r15
> <+931>: shl $0x20,%r15
> <+935>: shr $0x20,%rdx
> <+939>: add %rbx,%r15
> <+942>: adc $0x0,%edx
> <+945>: add %rcx,%r15
> <+948>: adc $0x0,%edx
> <+951>: shld $0x20,%r15,%rdx
> <+956>: shl $0x20,%r15
> <+960>: or %rsi,%r15
> <+963>: add %rax,%rdx
> <+966>: sbb %al,%al
> <+968>: add %rdx,%r9
> <+971>: sbb %cl,%cl
> <+973>: or %al,%cl
> <+975>: and $0x1,%cl
> <+978>: movzbl %cl,%edi
> <+981>: mov %r13,-0x38(%rbp)
> <+985>: mov %rdi,%rax
> <+988>: mov -0x48(%rbp),%rdx
> <+992>: or %rdx,%rax
> <+995>: je 0x585fd <bigint_sherlock::mul+1101>
> <+997>: mov %rdx,%r13
> <+1000>: shr $0x20,%r13
> <+1004>: mov %edx,%ebx
> <+1006>: mov %r12,%rax
> <+1009>: imul %r13,%rax
> <+1013>: imul %rbx,%r12
> <+1017>: mov %rax,%rcx
> <+1020>: shl $0x20,%rcx
> <+1024>: shr $0x20,%rax
> <+1028>: add %r12,%rcx
> <+1031>: adc $0x0,%rax
> <+1035>: add %rdi,%rax
> <+1038>: add %r9,%rcx
> <+1041>: adc $0x0,%rax
> <+1045>: mov %ecx,%esi
> <+1047>: shr $0x20,%rcx
> <+1051>: imul %r14,%r13
> <+1055>: imul %rbx,%r14
> <+1059>: mov %r13,%r9
> <+1062>: shl $0x20,%r9
> <+1066>: shr $0x20,%r13
> <+1070>: add %r14,%r9
> <+1073>: adc $0x0,%r13d
> <+1077>: add %rcx,%r9
> <+1080>: adc $0x0,%r13d
> <+1084>: shld $0x20,%r9,%r13
> <+1089>: shl $0x20,%r9
> <+1093>: or %rsi,%r9
> <+1096>: add %rax,%r13
> <+1099>: jmp 0x58600 <bigint_sherlock::mul+1104>
> <+1101>: xor %r13d,%r13d
> <+1104>: mov %r10,%r12
> <+1107>: shr $0x20,%r12
> <+1111>: mov %r10d,%r14d
> <+1114>: test %r11,%r11
> <+1117>: je 0x58684 <bigint_sherlock::mul+1236>
> <+1119>: mov %r11,%rax
> <+1122>: shr $0x20,%rax
> <+1126>: mov %r11d,%edi
> <+1129>: mov %r14,%rcx
> <+1132>: imul %rax,%rcx
> <+1136>: mov %r14,%rbx
> <+1139>: imul %rdi,%rbx
> <+1143>: mov %rcx,%rsi
> <+1146>: shl $0x20,%rsi
> <+1150>: shr $0x20,%rcx
> <+1154>: add %rbx,%rsi
> <+1157>: adc $0x0,%rcx
> <+1161>: add %r8,%rsi
> <+1164>: adc $0x0,%rcx
> <+1168>: mov %esi,%ebx
> <+1170>: shr $0x20,%rsi
> <+1174>: imul %r12,%rax
> <+1178>: imul %r12,%rdi
> <+1182>: mov %rax,%r8
> <+1185>: shl $0x20,%r8
> <+1189>: shr $0x20,%rax
> <+1193>: add %rdi,%r8
> <+1196>: adc $0x0,%eax
> <+1199>: add %rsi,%r8
> <+1202>: adc $0x0,%eax
> <+1205>: shld $0x20,%r8,%rax
> <+1210>: shl $0x20,%r8
> <+1214>: or %rbx,%r8
> <+1217>: add %rcx,%rax
> <+1220>: sbb %cl,%cl
> <+1222>: add %rax,%r15
> <+1225>: sbb %al,%al
> <+1227>: or %cl,%al
> <+1229>: and $0x1,%al
> <+1231>: movzbl %al,%edi
> <+1234>: jmp 0x58686 <bigint_sherlock::mul+1238>
> <+1236>: xor %edi,%edi
> <+1238>: mov %rdi,%rax
> <+1241>: mov -0x40(%rbp),%rsi
> <+1245>: or %rsi,%rax
> <+1248>: je 0x58709 <bigint_sherlock::mul+1369>
> <+1250>: mov %rsi,%rcx
> <+1253>: shr $0x20,%rcx
> <+1257>: mov %esi,%ebx
> <+1259>: mov %r14,%rax
> <+1262>: imul %rcx,%rax
> <+1266>: mov %r14,%rsi
> <+1269>: imul %rbx,%rsi
> <+1273>: mov %rax,%r10
> <+1276>: shl $0x20,%r10
> <+1280>: shr $0x20,%rax
> <+1284>: add %rsi,%r10
> <+1287>: adc $0x0,%rax
> <+1291>: add %rdi,%rax
> <+1294>: add %r15,%r10
> <+1297>: adc $0x0,%rax
> <+1301>: mov %r10d,%esi
> <+1304>: shr $0x20,%r10
> <+1308>: imul %r12,%rcx
> <+1312>: imul %r12,%rbx
> <+1316>: mov %rcx,%r15
> <+1319>: shl $0x20,%r15
> <+1323>: shr $0x20,%rcx
> <+1327>: add %rbx,%r15
> <+1330>: adc $0x0,%ecx
> <+1333>: add %r10,%r15
> <+1336>: adc $0x0,%ecx
> <+1339>: shld $0x20,%r15,%rcx
> <+1344>: shl $0x20,%r15
> <+1348>: or %rsi,%r15
> <+1351>: add %rax,%rcx
> <+1354>: sbb %al,%al
> <+1356>: add %rcx,%r9
> <+1359>: sbb %cl,%cl
> <+1361>: or %al,%cl
> <+1363>: and $0x1,%cl
> <+1366>: movzbl %cl,%edi
> <+1369>: mov %rdi,%rax
> <+1372>: mov -0x30(%rbp),%rsi
> <+1376>: or %rsi,%rax
> <+1379>: je 0x5878c <bigint_sherlock::mul+1500>
> <+1381>: mov %rsi,%rcx
> <+1384>: shr $0x20,%rcx
> <+1388>: mov %esi,%r10d
> <+1391>: mov %r14,%rax
> <+1394>: imul %rcx,%rax
> <+1398>: mov %r14,%rsi
> <+1401>: imul %r10,%rsi
> <+1405>: mov %rax,%rbx
> <+1408>: shl $0x20,%rbx
> <+1412>: shr $0x20,%rax
> <+1416>: add %rsi,%rbx
> <+1419>: adc $0x0,%rax
> <+1423>: add %rdi,%rax
> <+1426>: add %r9,%rbx
> <+1429>: adc $0x0,%rax
> <+1433>: mov %ebx,%esi
> <+1435>: shr $0x20,%rbx
> <+1439>: imul %r12,%rcx
> <+1443>: imul %r12,%r10
> <+1447>: mov %rcx,%r9
> <+1450>: shl $0x20,%r9
> <+1454>: shr $0x20,%rcx
> <+1458>: add %r10,%r9
> <+1461>: adc $0x0,%ecx
> <+1464>: add %rbx,%r9
> <+1467>: adc $0x0,%ecx
> <+1470>: shld $0x20,%r9,%rcx
> <+1475>: shl $0x20,%r9
> <+1479>: or %rsi,%r9
> <+1482>: add %rax,%rcx
> <+1485>: sbb %al,%al
> <+1487>: add %rcx,%r13
> <+1490>: sbb %cl,%cl
> <+1492>: or %al,%cl
> <+1494>: and $0x1,%cl
> <+1497>: movzbl %cl,%edi
> <+1500>: mov %rdi,%rax
> <+1503>: or %rdx,%rax
> <+1506>: je 0x587fb <bigint_sherlock::mul+1611>
> <+1508>: mov %rdx,%rcx
> <+1511>: shr $0x20,%rcx
> <+1515>: mov %edx,%r10d
> <+1518>: mov %r14,%rax
> <+1521>: imul %rcx,%rax
> <+1525>: imul %r10,%r14
> <+1529>: mov %rax,%rbx
> <+1532>: shl $0x20,%rbx
> <+1536>: shr $0x20,%rax
> <+1540>: add %r14,%rbx
> <+1543>: adc $0x0,%rax
> <+1547>: add %rdi,%rax
> <+1550>: add %r13,%rbx
> <+1553>: adc $0x0,%rax
> <+1557>: mov %ebx,%esi
> <+1559>: shr $0x20,%rbx
> <+1563>: imul %r12,%rcx
> <+1567>: imul %r10,%r12
> <+1571>: mov %rcx,%r13
> <+1574>: shl $0x20,%r13
> <+1578>: shr $0x20,%rcx
> <+1582>: add %r12,%r13
> <+1585>: adc $0x0,%ecx
> <+1588>: add %rbx,%r13
> <+1591>: adc $0x0,%ecx
> <+1594>: shld $0x20,%r13,%rcx
> <+1599>: shl $0x20,%r13
> <+1603>: or %rsi,%r13
> <+1606>: add %rax,%rcx
> <+1609>: jmp 0x587fd <bigint_sherlock::mul+1613>
> <+1611>: xor %ecx,%ecx
> <+1613>: mov -0x60(%rbp),%rax
> <+1617>: mov %rax,%r14
> <+1620>: shr $0x20,%r14
> <+1624>: mov %eax,%r12d
> <+1627>: test %r11,%r11
> <+1630>: je 0x58885 <bigint_sherlock::mul+1749>
> <+1632>: mov %r11,%rax
> <+1635>: shr $0x20,%rax
> <+1639>: mov %r11d,%r10d
> <+1642>: mov %r12,%rdi
> <+1645>: imul %rax,%rdi
> <+1649>: mov %r12,%rbx
> <+1652>: imul %r10,%rbx
> <+1656>: mov %rdi,%rsi
> <+1659>: shl $0x20,%rsi
> <+1663>: shr $0x20,%rdi
> <+1667>: add %rbx,%rsi
> <+1670>: adc $0x0,%rdi
> <+1674>: add %r15,%rsi
> <+1677>: adc $0x0,%rdi
> <+1681>: mov %esi,%ebx
> <+1683>: shr $0x20,%rsi
> <+1687>: imul %r14,%rax
> <+1691>: imul %r14,%r10
> <+1695>: mov %rax,%r15
> <+1698>: shl $0x20,%r15
> <+1702>: shr $0x20,%rax
> <+1706>: add %r10,%r15
> <+1709>: adc $0x0,%eax
> <+1712>: add %rsi,%r15
> <+1715>: adc $0x0,%eax
> <+1718>: shld $0x20,%r15,%rax
> <+1723>: shl $0x20,%r15
> <+1727>: or %rbx,%r15
> <+1730>: add %rdi,%rax
> <+1733>: sbb %bl,%bl
> <+1735>: add %rax,%r9
> <+1738>: sbb %al,%al
> <+1740>: or %bl,%al
> <+1742>: and $0x1,%al
> <+1744>: movzbl %al,%edi
> <+1747>: jmp 0x58887 <bigint_sherlock::mul+1751>
> <+1749>: xor %edi,%edi
> <+1751>: mov %rdi,%rax
> <+1754>: mov -0x40(%rbp),%rdx
> <+1758>: or %rdx,%rax
> <+1761>: je 0x58909 <bigint_sherlock::mul+1881>
> <+1763>: mov %rdx,%rax
> <+1766>: shr $0x20,%rax
> <+1770>: mov %edx,%r11d
> <+1773>: mov %r12,%rbx
> <+1776>: imul %rax,%rbx
> <+1780>: mov %r12,%rdx
> <+1783>: imul %r11,%rdx
> <+1787>: mov %rbx,%rsi
> <+1790>: shl $0x20,%rsi
> <+1794>: shr $0x20,%rbx
> <+1798>: add %rdx,%rsi
> <+1801>: adc $0x0,%rbx
> <+1805>: add %rdi,%rbx
> <+1808>: add %r9,%rsi
> <+1811>: adc $0x0,%rbx
> <+1815>: mov %esi,%edx
> <+1817>: shr $0x20,%rsi
> <+1821>: imul %r14,%rax
> <+1825>: imul %r14,%r11
> <+1829>: mov %rax,%r9
> <+1832>: shl $0x20,%r9
> <+1836>: shr $0x20,%rax
> <+1840>: add %r11,%r9
> <+1843>: adc $0x0,%eax
> <+1846>: add %rsi,%r9
> <+1849>: adc $0x0,%eax
> <+1852>: shld $0x20,%r9,%rax
> <+1857>: shl $0x20,%r9
> <+1861>: or %rdx,%r9
> <+1864>: add %rbx,%rax
> <+1867>: sbb %dl,%dl
> <+1869>: add %rax,%r13
> <+1872>: sbb %al,%al
> <+1874>: or %dl,%al
> <+1876>: and $0x1,%al
> <+1878>: movzbl %al,%edi
> <+1881>: mov %rdi,%rax
> <+1884>: mov -0x30(%rbp),%rdx
> <+1888>: or %rdx,%rax
> <+1891>: je 0x5898b <bigint_sherlock::mul+2011>
> <+1893>: mov %rdx,%rax
> <+1896>: shr $0x20,%rax
> <+1900>: mov %edx,%r10d
> <+1903>: mov %r12,%rbx
> <+1906>: imul %rax,%rbx
> <+1910>: mov %r12,%rdx
> <+1913>: imul %r10,%rdx
> <+1917>: mov %rbx,%rsi
> <+1920>: shl $0x20,%rsi
> <+1924>: shr $0x20,%rbx
> <+1928>: add %rdx,%rsi
> <+1931>: adc $0x0,%rbx
> <+1935>: add %rdi,%rbx
> <+1938>: add %r13,%rsi
> <+1941>: adc $0x0,%rbx
> <+1945>: mov %esi,%edx
> <+1947>: shr $0x20,%rsi
> <+1951>: imul %r14,%rax
> <+1955>: imul %r14,%r10
> <+1959>: mov %rax,%r13
> <+1962>: shl $0x20,%r13
> <+1966>: shr $0x20,%rax
> <+1970>: add %r10,%r13
> <+1973>: adc $0x0,%eax
> <+1976>: add %rsi,%r13
> <+1979>: adc $0x0,%eax
> <+1982>: shld $0x20,%r13,%rax
> <+1987>: shl $0x20,%r13
> <+1991>: or %rdx,%r13
> <+1994>: add %rbx,%rax
> <+1997>: sbb %dl,%dl
> <+1999>: add %rax,%rcx
> <+2002>: sbb %al,%al
> <+2004>: or %dl,%al
> <+2006>: and $0x1,%al
> <+2008>: movzbl %al,%edi
> <+2011>: mov %rdi,%rax
> <+2014>: mov -0x48(%rbp),%rdx
> <+2018>: or %rdx,%rax
> <+2021>: je 0x58a05 <bigint_sherlock::mul+2133>
> <+2023>: mov %rdx,%rax
> <+2026>: shr $0x20,%rax
> <+2030>: mov %edx,%r10d
> <+2033>: mov %r12,%rbx
> <+2036>: imul %rax,%rbx
> <+2040>: imul %r10,%r12
> <+2044>: mov %rbx,%rsi
> <+2047>: shl $0x20,%rsi
> <+2051>: shr $0x20,%rbx
> <+2055>: add %r12,%rsi
> <+2058>: adc $0x0,%rbx
> <+2062>: add %rdi,%rbx
> <+2065>: add %rcx,%rsi
> <+2068>: adc $0x0,%rbx
> <+2072>: mov %esi,%edx
> <+2074>: shr $0x20,%rsi
> <+2078>: imul %r14,%rax
> <+2082>: imul %r10,%r14
> <+2086>: mov %rax,%rcx
> <+2089>: shl $0x20,%rcx
> <+2093>: shr $0x20,%rax
> <+2097>: add %r14,%rcx
> <+2100>: adc $0x0,%eax
> <+2103>: add %rsi,%rcx
> <+2106>: adc $0x0,%eax
> <+2109>: shld $0x20,%rcx,%rax
> <+2114>: shl $0x20,%rcx
> <+2118>: or %rdx,%rcx
> <+2121>: add %rbx,%rax
> <+2124>: setne %al
> <+2127>: test %al,%al
> <+2129>: je 0x58a0b <bigint_sherlock::mul+2139>
> <+2131>: jmp 0x58a3d <bigint_sherlock::mul+2189>
> <+2133>: xor %eax,%eax
> <+2135>: test %al,%al
> <+2137>: jne 0x58a3d <bigint_sherlock::mul+2189>
> <+2139>: or %r9,%r13
> <+2142>: or %rcx,%r13
> <+2145>: jne 0x58a3d <bigint_sherlock::mul+2189>
> <+2147>: mov -0x58(%rbp),%rax
> <+2151>: mov -0x50(%rbp),%rcx
> <+2155>: mov %rcx,(%rax)
> <+2158>: mov -0x38(%rbp),%rcx
> <+2162>: mov %rcx,0x8(%rax)
> <+2166>: mov %r8,0x10(%rax)
> <+2170>: mov %r15,0x18(%rax)
> <+2174>: add $0x38,%rsp
> <+2178>: pop %rbx
> <+2179>: pop %r12
> <+2181>: pop %r13
> <+2183>: pop %r14
> <+2185>: pop %r15
> <+2187>: pop %rbp
> <+2188>: retq
> <+2189>: mov 0x44dbcc(%rip),%rdi # 0x4a6610
> <+2196>: callq 0x579d8
End of assembler dump. End of assembler dump.
Dump of assembler code for function bigint_sherlock::add: Dump of assembler code for function bigint_sherlock::add:
<+0>: push %rbp <+0>: push %rbp
<+1>: mov %rsp,%rbp <+1>: mov %rsp,%rbp
<+4>: sub $0x20,%rsp | <+4>: mov 0x10(%rbp),%r9
<+8>: mov 0x10(%rbp),%rcx | <+8>: mov 0x18(%rbp),%rcx
<+12>: mov 0x18(%rbp),%rdx | <+12>: mov 0x20(%rbp),%rsi
<+16>: mov 0x20(%rbp),%rsi | <+16>: mov 0x28(%rbp),%rdx
<+20>: mov 0x28(%rbp),%r8 | <+20>: mov 0x40(%rbp),%r10
<+24>: mov 0x30(%rbp),%rax | <+24>: mov 0x48(%rbp),%r8
<+28>: mov 0x38(%rbp),%r9 | <+28>: add 0x38(%rbp),%rcx
<+32>: mov 0x40(%rbp),%r10 | <+32>: setb %al
<+36>: mov 0x48(%rbp),%r11 | <+35>: add 0x30(%rbp),%r9
<+40>: mov %rax,-0x20(%rbp) | <+39>: jae 0x58a7f <bigint_sherlock::add+47>
<+44>: mov %r9,-0x18(%rbp) | <+41>: add $0x1,%rcx
<+48>: mov %r10,-0x10(%rbp) | <+45>: adc $0x0,%al
<+52>: mov %r11,-0x8(%rbp) | <+47>: test %al,%al
<+56>: add -0x20(%rbp),%rcx | <+49>: je 0x58a9b <bigint_sherlock::add+75>
<+60>: adc -0x18(%rbp),%rdx | <+51>: movzbl %al,%eax
<+64>: adc -0x10(%rbp),%rsi | <+54>: lea (%rsi,%r10,1),%r11
<+68>: adc -0x8(%rbp),%r8 | <+58>: add %rax,%r11
<+72>: setb %al | <+61>: setb %al
<+75>: test %al,%al | <+64>: add %r10,%rsi
<+77>: jne 0x583e7 <bigint_sherlock::add+103> | <+67>: adc $0x0,%al
<+79>: mov %rcx,(%rdi) | <+69>: test %al,%al
<+82>: mov %rdx,0x8(%rdi) | <+71>: jne 0x58aa8 <bigint_sherlock::add+88>
<+86>: mov %rsi,0x10(%rdi) | <+73>: jmp 0x58ac0 <bigint_sherlock::add+112>
<+90>: mov %r8,0x18(%rdi) | <+75>: add %r10,%rsi
<+94>: mov %rdi,%rax | <+78>: setb %al
<+97>: add $0x20,%rsp | <+81>: mov %rsi,%r11
<+101>: pop %rbp | <+84>: test %al,%al
<+102>: retq | <+86>: je 0x58ac0 <bigint_sherlock::add+112>
<+103>: mov 0x3ff142(%rip),%rdi # 0x457530 | <+88>: movzbl %al,%eax
<+110>: callq 0x57a38 | <+91>: lea (%rdx,%r8,1),%rsi
> <+95>: add %rax,%rsi
> <+98>: setb %al
> <+101>: add %r8,%rdx
> <+104>: adc $0x0,%al
> <+106>: test %al,%al
> <+108>: je 0x58acd <bigint_sherlock::add+125>
> <+110>: jmp 0x58ae1 <bigint_sherlock::add+145>
> <+112>: add %r8,%rdx
> <+115>: setb %al
> <+118>: mov %rdx,%rsi
> <+121>: test %al,%al
> <+123>: jne 0x58ae1 <bigint_sherlock::add+145>
> <+125>: mov %r9,(%rdi)
> <+128>: mov %rcx,0x8(%rdi)
> <+132>: mov %r11,0x10(%rdi)
> <+136>: mov %rsi,0x18(%rdi)
> <+140>: mov %rdi,%rax
> <+143>: pop %rbp
> <+144>: retq
> <+145>: mov 0x44da48(%rip),%rdi # 0x4a6530
> <+152>: callq 0x579d8
End of assembler dump. End of assembler dump.
Dump of assembler code for function bigint_sherlock::sub: Dump of assembler code for function bigint_sherlock::sub:
<+0>: push %rbp <+0>: push %rbp
<+1>: mov %rsp,%rbp <+1>: mov %rsp,%rbp
<+4>: sub $0x20,%rsp | <+4>: mov 0x10(%rbp),%r9
<+8>: mov 0x10(%rbp),%rcx | <+8>: mov 0x18(%rbp),%rcx
<+12>: mov 0x18(%rbp),%rdx | <+12>: mov 0x20(%rbp),%rsi
<+16>: mov 0x20(%rbp),%rsi | <+16>: mov 0x28(%rbp),%rdx
<+20>: mov 0x28(%rbp),%r8 | <+20>: mov 0x40(%rbp),%r10
<+24>: mov 0x30(%rbp),%rax | <+24>: mov 0x48(%rbp),%r8
<+28>: mov 0x38(%rbp),%r9 | <+28>: add 0x38(%rbp),%rcx
<+32>: mov 0x40(%rbp),%r10 | <+32>: setb %al
<+36>: mov 0x48(%rbp),%r11 | <+35>: add 0x30(%rbp),%r9
<+40>: mov %rax,-0x20(%rbp) | <+39>: jae 0x58b1f <bigint_sherlock::sub+47>
<+44>: mov %r9,-0x18(%rbp) | <+41>: add $0x1,%rcx
<+48>: mov %r10,-0x10(%rbp) | <+45>: adc $0x0,%al
<+52>: mov %r11,-0x8(%rbp) | <+47>: test %al,%al
<+56>: add -0x20(%rbp),%rcx | <+49>: je 0x58b3b <bigint_sherlock::sub+75>
<+60>: adc -0x18(%rbp),%rdx | <+51>: movzbl %al,%eax
<+64>: adc -0x10(%rbp),%rsi | <+54>: lea (%rsi,%r10,1),%r11
<+68>: adc -0x8(%rbp),%r8 | <+58>: add %rax,%r11
<+72>: setb %al | <+61>: setb %al
<+75>: test %al,%al | <+64>: add %r10,%rsi
<+77>: jne 0x58467 <bigint_sherlock::sub+103> | <+67>: adc $0x0,%al
<+79>: mov %rcx,(%rdi) | <+69>: test %al,%al
<+82>: mov %rdx,0x8(%rdi) | <+71>: jne 0x58b48 <bigint_sherlock::sub+88>
<+86>: mov %rsi,0x10(%rdi) | <+73>: jmp 0x58b60 <bigint_sherlock::sub+112>
<+90>: mov %r8,0x18(%rdi) | <+75>: add %r10,%rsi
<+94>: mov %rdi,%rax | <+78>: setb %al
<+97>: add $0x20,%rsp | <+81>: mov %rsi,%r11
<+101>: pop %rbp | <+84>: test %al,%al
<+102>: retq | <+86>: je 0x58b60 <bigint_sherlock::sub+112>
<+103>: mov 0x3ff0c2(%rip),%rdi # 0x457530 | <+88>: movzbl %al,%eax
<+110>: callq 0x57a38 | <+91>: lea (%rdx,%r8,1),%rsi
> <+95>: add %rax,%rsi
> <+98>: setb %al
> <+101>: add %r8,%rdx
> <+104>: adc $0x0,%al
> <+106>: test %al,%al
> <+108>: je 0x58b6d <bigint_sherlock::sub+125>
> <+110>: jmp 0x58b81 <bigint_sherlock::sub+145>
> <+112>: add %r8,%rdx
> <+115>: setb %al
> <+118>: mov %rdx,%rsi
> <+121>: test %al,%al
> <+123>: jne 0x58b81 <bigint_sherlock::sub+145>
> <+125>: mov %r9,(%rdi)
> <+128>: mov %rcx,0x8(%rdi)
> <+132>: mov %r11,0x10(%rdi)
> <+136>: mov %rsi,0x18(%rdi)
> <+140>: mov %rdi,%rax
> <+143>: pop %rbp
> <+144>: retq
> <+145>: mov 0x44d9a8(%rip),%rdi # 0x4a6530
> <+152>: callq 0x579d8
End of assembler dump. End of assembler dump.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment