On 8/2/2011 12:49 PM, Adam D. Ruppe wrote:
So I'm pretty sure the difference is caused by dmd not using the
new registers in x64. The other differences look trivial to my
eyes.

When I compile it, it uses the registers:

L2E:            inc     R11
                lea     R9D,[00h][RSI*2]
                mov     R9,R9
                mov     RCX,R11
                imul    RCX,RSI
                mov     RSI,RCX
                add     RDI,R9
                add     R8,2
                mov     RDX,R8
                imul    RDX,RDI
                mov     RDI,RDX
                mov     R10,R8
                imul    R10,RBX
                mov     RBX,R10
                cmp     RDI,RSI
                jl      L2E
                lea     RAX,[RCX*2][RCX]
                add     RAX,RDX
                mov     -8[RBP],RAX
                cqo
                idiv    R10
                mov     R9,RAX
                mov     R9,R9
                mov     RAX,-8[RBP]
                cqo
                idiv    R10
                mov     R12,RDX
                mov     R12,R12
                add     R12,RSI
                cmp     RBX,R12
                jle     L2E
                lea     R14,[R14*4][R14]
                add     R14,R14
                add     R14,R9
                mov     R14,R14
                inc     R13
                mov     RAX,R13
                mov     RCX,0Ah
                cqo
                idiv    RCX
                test    RDX,RDX
                jne     LBD
                xor     R14,R14
LBD:            cmp     R13,02710h
                jge     LE3
                mov     RDX,RBX
                imul    RDX,R9
                sub     RDI,RDX
                imul    R10D,RDI,0Ah
                mov     RDI,R10
                imul    R12D,RSI,0Ah
                mov     RSI,R12
                jmp       L2E

All I did with your example was replace BigInt with long.

Reply via email to