On Saturday, 2 July 2016 at 14:03:29 UTC, Andrei Alexandrescu wrote:

Nice, thanks. I've tried to not rely too much on mixing statically-known and dynamically-known Boolean expressions. Can I safely assume that all compilers will generate good code for such?

I'd be very surprised if not (especially with statically-known booleans upfront in the expression).

I get this for opCast!(short, int)(int):

asm.dlang.org ("-O -inline")
    push   %rax
    mov    %rdi,%rcx
    movswl %cx,%eax
    cmp    %ecx,%eax
    jne    label1
    mov    %rdi,%rax
    jmp    label2
    label1:
    xor    %eax,%eax
    label2:
    pop    %rcx
    retq

LDC trunk (-O3)  (identical code for your and my version)
    movswl  %di, %eax
    cmpl      %edi, %eax
    jne         LBB2_1
    movswl  %di, %eax
    retq
    LBB2_1:
    xorl        %eax, %eax
    retq

Define "good" ;-) ;-)

PS: you can look at LDC's annotated asm output with "-c -output-s".

Reply via email to