Skip to content

Instantly share code, notes, and snippets.

@eira-fransham
Created August 18, 2017 16:21
Show Gist options
  • Save eira-fransham/bb385367fd628890cfb1c04425cd0d85 to your computer and use it in GitHub Desktop.
Save eira-fransham/bb385367fd628890cfb1c04425cd0d85 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 | <+198>: xor %eax,%eax
<+101>: mov %rdx,%r10 | <+200>: mov %rax,-0x50(%rbp)
<+104>: mov -0x40(%rbp),%rax | <+204>: xor %r13d,%r13d
<+108>: mulq -0x10(%rbp) | <+207>: xor %r14d,%r14d
<+112>: add %rax,%r10 | <+210>: mov %r14,%rax
<+115>: adc $0x0,%rdx | <+213>: or %rsi,%rax
<+119>: mov %rdx,%r11 | <+216>: je 0x582fc <bigint_sherlock::mul+332>
<+122>: mov -0x40(%rbp),%rax | <+332>: xor %r8d,%r8d
<+126>: mulq -0x8(%rbp) | <+335>: mov -0x30(%rbp),%rdx
<+130>: add %rax,%r11 | <+339>: mov %r14,%rax
<+133>: adc $0x0,%rdx | <+342>: or %rdx,%rax
<+137>: mov %rdx,%rcx | <+345>: je 0x5837d <bigint_sherlock::mul+461>
<+140>: mov -0x38(%rbp),%rax | <+461>: xor %r15d,%r15d
<+144>: mulq -0x20(%rbp) | <+464>: mov %r14,%rax
<+148>: add %rax,%r9 | <+467>: mov -0x48(%rbp),%rdx
<+151>: adc %rdx,%r10 | <+471>: or %rdx,%rax
<+154>: adc $0x0,%r11 | <+474>: je 0x583f4 <bigint_sherlock::mul+580>
<+158>: adc $0x0,%rcx | <+580>: xor %r9d,%r9d
<+162>: mov -0x38(%rbp),%rax | <+583>: mov -0x38(%rbp),%r10
<+166>: mulq -0x18(%rbp) | <+587>: mov %r12,%r14
<+170>: add %rax,%r10 | <+590>: shr $0x20,%r14
<+173>: adc %rdx,%r11 | <+594>: mov %r12d,%r12d
<+176>: adc $0x0,%rcx | <+597>: test %r11,%r11
<+180>: adc $0x0,%r11 | <+600>: je 0x5847f <bigint_sherlock::mul+719>
<+184>: adc $0x0,%rcx | <+719>: xor %edi,%edi
<+188>: mov -0x38(%rbp),%rax | <+721>: mov %rdi,%rax
<+192>: mulq -0x10(%rbp) | <+724>: mov -0x40(%rbp),%rcx
<+196>: add %rax,%r11 | <+728>: or %rcx,%rax
<+199>: adc $0x0,%rdx | <+731>: je 0x58503 <bigint_sherlock::mul+851>
<+203>: or %rdx,%rcx | <+851>: mov %rdi,%rax
<+206>: mov -0x30(%rbp),%rax | <+854>: mov -0x30(%rbp),%rcx
<+210>: mulq -0x20(%rbp) | <+858>: or %rcx,%rax
<+214>: add %rax,%r10 | <+861>: je 0x58585 <bigint_sherlock::mul+981>
<+217>: adc %rdx,%r11 | <+981>: mov %r13,-0x38(%rbp)
<+220>: adc $0x0,%rcx | <+985>: mov %rdi,%rax
<+224>: mov -0x30(%rbp),%rax | <+988>: mov -0x48(%rbp),%rdx
<+228>: mulq -0x18(%rbp) | <+992>: or %rdx,%rax
<+232>: add %rax,%r11 | <+995>: je 0x585fd <bigint_sherlock::mul+1101>
<+235>: adc $0x0,%rdx | <+1101>: xor %r13d,%r13d
<+239>: or %rdx,%rcx | <+1104>: mov %r10,%r12
<+242>: mov -0x28(%rbp),%rax | <+1107>: shr $0x20,%r12
<+246>: mulq -0x20(%rbp) | <+1111>: mov %r10d,%r14d
<+250>: add %rax,%r11 | <+1114>: test %r11,%r11
<+253>: or %rdx,%rcx | <+1117>: je 0x58684 <bigint_sherlock::mul+1236>
<+256>: cmp $0x0,%rcx | <+1236>: xor %edi,%edi
<+260>: jne 0x58351 <bigint_sherlock::mul+321> | <+1238>: mov %rdi,%rax
<+262>: mov -0x28(%rbp),%rcx | <+1241>: mov -0x40(%rbp),%rsi
<+266>: jrcxz 0x58330 <bigint_sherlock::mul+288> | <+1245>: or %rsi,%rax
<+268>: mov -0x8(%rbp),%rcx | <+1248>: je 0x58709 <bigint_sherlock::mul+1369>
<+272>: mov -0x10(%rbp),%rax | <+1369>: mov %rdi,%rax
<+276>: or %rax,%rcx | <+1372>: mov -0x30(%rbp),%rsi
<+279>: mov -0x18(%rbp),%rax | <+1376>: or %rsi,%rax
<+283>: or %rax,%rcx | <+1379>: je 0x5878c <bigint_sherlock::mul+1500>
<+286>: jmp 0x58351 <bigint_sherlock::mul+321> | <+1500>: mov %rdi,%rax
<+288>: mov -0x8(%rbp),%rcx | <+1503>: or %rdx,%rax
<+292>: jrcxz 0x58347 <bigint_sherlock::mul+311> | <+1506>: je 0x587fb <bigint_sherlock::mul+1611>
<+294>: mov -0x30(%rbp),%rcx | <+1611>: xor %ecx,%ecx
<+298>: mov -0x38(%rbp),%rax | <+1613>: mov -0x60(%rbp),%rax
<+302>: or %rax,%rcx | <+1617>: mov %rax,%r14
<+305>: cmp $0x0,%rcx | <+1620>: shr $0x20,%r14
<+309>: jne 0x58351 <bigint_sherlock::mul+321> | <+1624>: mov %eax,%r12d
<+311>: mov -0x10(%rbp),%rcx | <+1627>: test %r11,%r11
<+315>: jrcxz 0x58351 <bigint_sherlock::mul+321> | <+1630>: je 0x58885 <bigint_sherlock::mul+1749>
<+317>: mov -0x30(%rbp),%rcx | <+1749>: xor %edi,%edi
<+321>: test %rcx,%rcx | <+1751>: mov %rdi,%rax
<+324>: jne 0x5836e <bigint_sherlock::mul+350> | <+1754>: mov -0x40(%rbp),%rdx
<+326>: mov %r8,(%rdi) | <+1758>: or %rdx,%rax
<+329>: mov %r9,0x8(%rdi) | <+1761>: je 0x58909 <bigint_sherlock::mul+1881>
<+333>: mov %r10,0x10(%rdi) | <+1881>: mov %rdi,%rax
<+337>: mov %r11,0x18(%rdi) | <+1884>: mov -0x30(%rbp),%rdx
<+341>: mov %rdi,%rax | <+1888>: or %rdx,%rax
<+344>: add $0x40,%rsp | <+1891>: je 0x5898b <bigint_sherlock::mul+2011>
<+348>: pop %rbp | <+2011>: mov %rdi,%rax
<+349>: retq | <+2014>: mov -0x48(%rbp),%rdx
<+350>: mov 0x3ff29b(%rip),%rdi # 0x457610 | <+2018>: or %rdx,%rax
<+357>: callq 0x57a38 | <+2021>: je 0x58a05 <bigint_sherlock::mul+2133>
> <+2133>: xor %eax,%eax
> <+2135>: test %al,%al
> <+2137>: jne 0x58a3d <bigint_sherlock::mul+2189>
> <+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