Wait, I modified the example, now the assembly is (very likely) more expensive 
with `--gc:arc` (I don't know assembly very well): 
    
    
    type Position* = object
        pieces: array[6, uint64]
        colors: array[2, uint64]
    
    func isAttacked*(position: Position, enemy: int8, target: int8): bool =
        position.colors[enemy] != 0
    
    func kingSquare*(position: Position): int8 =
        12
    
    func inCheck*(position: Position, enemy: int8): bool =
        position.isAttacked(enemy, position.kingSquare)
    
    var p: Position
    echo p.inCheck(1)
    
    
    Run

with `nim c -d:danger --passC:"-g" main.nim` it looks like this: 
    
    
    000000000000e510 <inCheck_main_12>:
        e510:   48 0f be f6             movsx  rsi,sil
        e514:   48 83 7c f7 30 00       cmp    QWORD PTR [rdi+rsi*8+0x30],0x0
        e51a:   0f 95 c0                setne  al
        e51d:   c3                      ret
        e51e:   66 90                   xchg   ax,ax
    
    
    Run

with `nim c -d:danger --panics:on --gc:arc --passC:"-g" main.nim` it looks like 
this: 
    
    
    0000000000005e70 <inCheck_main_12>:
        5e70:   48 83 ec 58             sub    rsp,0x58
        5e74:   f3 0f 6f 07             movdqu xmm0,XMMWORD PTR [rdi]
        5e78:   f3 0f 6f 4f 10          movdqu xmm1,XMMWORD PTR [rdi+0x10]
        5e7d:   48 0f be f6             movsx  rsi,sil
        5e81:   64 48 8b 04 25 28 00 00 00      mov    rax,QWORD PTR fs:0x28
        5e8a:   48 89 44 24 48          mov    QWORD PTR [rsp+0x48],rax
        5e8f:   31 c0                   xor    eax,eax
        5e91:   f3 0f 6f 57 20          movdqu xmm2,XMMWORD PTR [rdi+0x20]
        5e96:   f3 0f 6f 5f 30          movdqu xmm3,XMMWORD PTR [rdi+0x30]
        5e9b:   0f 29 04 24             movaps XMMWORD PTR [rsp],xmm0
        5e9f:   0f 29 4c 24 10          movaps XMMWORD PTR [rsp+0x10],xmm1
        5ea4:   0f 29 54 24 20          movaps XMMWORD PTR [rsp+0x20],xmm2
        5ea9:   0f 29 5c 24 30          movaps XMMWORD PTR [rsp+0x30],xmm3
        5eae:   48 83 7c f4 30 00       cmp    QWORD PTR [rsp+rsi*8+0x30],0x0
        5eb4:   0f 95 c0                setne  al
        5eb7:   48 8b 54 24 48          mov    rdx,QWORD PTR [rsp+0x48]
        5ebc:   64 48 2b 14 25 28 00 00 00      sub    rdx,QWORD PTR fs:0x28
        5ec5:   75 05                   jne    5ecc <inCheck_main_12+0x5c>
        5ec7:   48 83 c4 58             add    rsp,0x58
        5ecb:   c3                      ret
        5ecc:   e8 8f b1 ff ff          call   1060 <__stack_chk_fail@plt>
        5ed1:   66 66 2e 0f 1f 84 00 00 00 00 00        data16 cs nop WORD PTR 
[rax+rax*1+0x0]
        5edc:   0f 1f 40 00             nop    DWORD PTR [rax+0x0]
    
    
    Run

Reply via email to