September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | > I'd like a way to filter the output to the
> disassembly of just one (or few) functions, because otherwise the output risks being too much large.
It seems even this program produces a too much long asm listing for the site:
import std.stdio;
void main() {
writeln("%f", 1.5);
}
Bye,
bearophile
|
September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | > It seems even this program produces a too much long asm listing for the site:
>
> import std.stdio;
> void main() {
> writeln("%f", 1.5);
> }
Compiled with:
-O0 -march=native
Bye,
bearophile
|
September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Jens Mueller | On 09/21/2012 03:04 AM, Jens Mueller wrote:
> But it's nice to have source code and assembly side by side.
>
> Jens
>
And very nice to have demangled names in assembly.
|
September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 21 September 2012 14:49, bearophile <bearophileHUGS@lycos.com> wrote: >> It seems even this program produces a too much long asm listing for the site: >> >> import std.stdio; >> void main() { >> writeln("%f", 1.5); >> } > > > Compiled with: > > -O0 -march=native > > Bye, > bearophile Curse those templates. ;-) -- Iain Buclaw *(p < e ? p++ : p) = (c & 0x0f) + '0'; |
September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ellery Newcomer | Ellery Newcomer wrote:
> On 09/21/2012 03:04 AM, Jens Mueller wrote:
> >But it's nice to have source code and assembly side by side.
> >
> >Jens
> >
>
> And very nice to have demangled names in assembly.
You can pipe your assembly code to ddemangle if there is some other tool that missing demangling. I did this for example when I looked at output from a statistical profiler.
Jens
|
September 21, 2012 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrej Mitrovic | On Friday, 21 September 2012 at 07:40:11 UTC, Andrej Mitrovic wrote: > On 9/21/12, Andrei Alexandrescu <SeeWebsiteForEmail@erdani.org> wrote: >> snip > > Integrating this with dpaste would be aweee..sooome! http://dpaste.dzfl.pl/news/change-log---v0.82 Those are in plans for all compilers but atm, we are struggling with problem of exceeding monthly bandwidth. Disassemble output takes a lot of space Anyways, I like design of this website! Very similar to dpaste, which rox ;> Looks very nice, probably we could adapt some ideas to dpaste, like __Compiler options__ |
May 20, 2018 Re: GDC Explorer - an online disassembler for D | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On Friday, 21 September 2012 at 03:46:12 UTC, Andrei Alexandrescu wrote:
> I've met Matt Goldbolt, the author of the GCC Explorer at http://gcc.godbolt.org - a very handy online disassembler for GCC.
>
> We got to talk a bit about D and he hacked together support for D by using gdc. Take a look at http://d.godbolt.org, I think it's pretty darn cool! I'm talking to him about integrating his work with our servers.
>
>
> Andrei
Compare a simple C++ to D and the C++ output is far better:
class C
{
int x = 12;
public:
int foo(int y) { return y*x; }
};
int main()
{
C* c = new C();
return c->foo(2);
}
VS
class C
{
int x = 12;
public:
int foo(int y) { return y*x; }
};
int main()
{
C c = new C();
return c.foo(2);
}
operator new(unsigned long)@plt:
jmp QWORD PTR [rip+0x200baa] # 601020 <operator new(unsigned long)@GLIBCXX_3.4>
push 0x1
jmp 400450 <.plt>
main:
push rbp
mov rbp,rsp
push rbx
sub rsp,0x18
mov edi,0x4
call 400470 <operator new(unsigned long)@plt>
mov rbx,rax
mov DWORD PTR [rbx],0x0
mov rdi,rbx
call 4005bc <C::C()>
mov QWORD PTR [rbp-0x18],rbx
mov rax,QWORD PTR [rbp-0x18]
mov esi,0x2
mov rdi,rax
call 4005a4 <C::foo(int)>
nop
add rsp,0x18
pop rbx
pop rbp
ret
nop
C::foo(int):
push rbp
mov rbp,rsp
mov QWORD PTR [rbp-0x8],rdi
mov DWORD PTR [rbp-0xc],esi
mov rax,QWORD PTR [rbp-0x8]
mov eax,DWORD PTR [rax]
imul eax,DWORD PTR [rbp-0xc]
pop rbp
ret
nop
C::C():
push rbp
mov rbp,rsp
mov QWORD PTR [rbp-0x8],rdi
mov rax,QWORD PTR [rbp-0x8]
mov DWORD PTR [rax],0xc
nop
pop rbp
ret
nop WORD PTR cs:[rax+rax*1+0x0]
nop DWORD PTR [rax+rax*1+0x0]
VS
_Dmain:
push rbp
mov rbp,rsp
sub rsp,0x10
mov rdi,QWORD PTR [rip+0x0] # f <_Dmain+0xf>
call 14 <_Dmain+0x14>
mov QWORD PTR [rbp-0x8],rax
mov esi,0x2
mov rdi,rax
mov rax,QWORD PTR [rax]
rex.W call QWORD PTR [rax+0x28]
leave
ret
add BYTE PTR [rax],al
main:
push rbp
mov rbp,rsp
sub rsp,0x10
mov DWORD PTR [rbp-0x10],edi
mov QWORD PTR [rbp-0x8],rsi
mov rdx,QWORD PTR [rip+0x0] # 16 <main+0x16>
mov rsi,QWORD PTR [rbp-0x8]
mov edi,DWORD PTR [rbp-0x10]
call 22 <main+0x22>
leave
ret
.text.d_dso_init:
push rbp
mov rbp,rsp
lea rax,[rip+0x0] # b <.text.d_dso_init+0xb>
push rax
lea rax,[rip+0x0] # 13 <.text.d_dso_init+0x13>
push rax
lea rax,[rip+0x0] # 1b <.text.d_dso_init+0x1b>
push rax
push 0x1
mov rdi,rsp
call 26 <.text.d_dso_init+0x26>
leave
ret
the C++ version is more verbose, gives explicit references to functions and methods while the D version requires you to hunt and peck.
|
Copyright © 1999-2021 by the D Language Foundation