September 21, 2012
> 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
> 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
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
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
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
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
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.

1 2
Next ›   Last »