OK, here is the assembler listing...
# nim c -d:release t.nim
# gcc.options.speed = "-save-temps -march=native -O3 -fno-strict-aliasing"
$ cat t.nim
proc t(a, b: string) : bool =
a == b
proc main =
var a = "Rust"
var b = "Nim"
echo t(a, b)
main()
Run
t_IxGYsz1VoA2HIiGBY5mgGw:
.LFB20:
.cfi_startproc
movl $1, %eax
cmpq %rsi, %rdi
je .L32
testq %rdi, %rdi
je .L35
movq (%rdi), %rdx
testq %rsi, %rsi
je .L36
xorl %eax, %eax
cmpq (%rsi), %rdx
je .L37
.L32:
ret
.p2align 4,,10
.p2align 3
.L35:
testq %rsi, %rsi
je .L32
cmpq $0, (%rsi)
sete %al
ret
.p2align 4,,10
.p2align 3
.L37:
testq %rdx, %rdx
je .L28
subq $8, %rsp
.cfi_def_cfa_offset 16
addq $16, %rsi
addq $16, %rdi
call memcmp@PLT
testl %eax, %eax
sete %al
addq $8, %rsp
.cfi_def_cfa_offset 8
ret
.p2align 4,,10
.p2align 3
.L36:
testq %rdx, %rdx
sete %al
ret
.L28:
.L21:
.L24:
movl $1, %eax
ret
.cfi_endproc
Run