[過去ログ] スレを勃てるまでもないC/C++の質問はここで 21 (1001レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
16(4): 2012/07/24(火)13:20 AAS
質問ですが
__int64 bit;
//setbit = 1ull << i;
setbit = 0;
_bittestandset64(&setbit,i);
のアセンブリコード出力が
lea rcx, QWORD PTR setbit$87411[rsp]
mov QWORD PTR setbit$87411[rsp], 0
bts QWORD PTR [rcx], rax
mov rcx, QWORD PTR setbit$87411[rsp]
となるんだが
xor ecx, ecx
bts rcx, rax
となるようなソースコードを教えていただけませんか?
環境はVC2010、ターゲットCPUはSandy Bridgeです。
またiは0〜63の整数です。
放置するかアセンブラで書くしかないのかな
17(1): 2012/07/24(火)13:26 AAS
>>16
最適化したらどうなる?
18: 16 2012/07/24(火)13:38 AAS
>>17
すでに最適化(/O2)はかけています。
このコードではiの範囲とsetbitを指すポインタの有無を
コンパイラが分からない事が原因なのではと考えています。
ちょっと逆アセも確認してきます。
19: 16 2012/07/24(火)13:47 AAS
逆アセでもほぼ同様でした。
(インライン展開された関係でレジスタが変わっただけ)
21: 16 2012/07/24(火)22:21 AAS
__int64 setbit;
setbit = 1ull << i;
だと
mov ecx, r8d
mov edx, 1
shl rdx, cl
になるのでとりあえずシフトを使うコードにしておいて
別の場所の最適化をしときます
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.041s