以下のコードは同じアセンブラを生成している。
bool mod(size_t i) { return i % 4 == 0; } bool bitOr(size_t i) { return (i & 3) == 0; }
% dmd --version DMD64 D Compiler v2.071.0 Copyright (c) 1999-2015 by Digital Mars written by Walter Bright % dmd -main -g -O fuga.d % objdump -drS fuga| less ... 0000000000422b70 <_D4fuga3modFmZb>: bool mod(size_t i) 422b70: 50 push %rax 422b71: 48 89 3c 24 mov %rdi,(%rsp) { return i % 4 == 0; 422b75: f6 04 24 03 testb $0x3,(%rsp) 422b79: 0f 94 c0 sete %al } 422b7c: 59 pop %rcx 422b7d: c3 retq 422b7e: 66 90 xchg %ax,%ax 0000000000422b80 <_D4fuga5bitOrFmZb>: bool bitOr(size_t i) 422b80: 50 push %rax 422b81: 48 89 3c 24 mov %rdi,(%rsp) { return (i & 3) == 0; 422b85: f6 04 24 03 testb $0x3,(%rsp) 422b89: 0f 94 c0 sete %al } 422b8c: 59 pop %rcx 422b8d: c3 retq 422b8e: 66 90 xchg %ax,%ax
ちょっと凝ったコードを書く前に「それコンパイラがやってくれてないか」というのを調べてみてもいいんじゃない?というだけのはなし。