- 897 名前:,,・´∀`・,,)っ-○◎● mailto:sage [2008/09/27(土) 12:16:50 ]
- >>894
ARMならプレディケートに展開されるのでそれで十分速いんだが 欲をいえばこっちのほうが命令数とかレジスタ節約できるかもしれないね。 bit8 = bit4 | (bit4 & 0x8) ? 0xF0 : 0; また、比較命令はall 1 か all 0のビットマスクを生成するタイプのCPUなら、 ビットマスクと0xF0との論理積をとるだけで加算する値を取得できる。 しかし、2項選択は多くのCPU分岐命令に一般的には遅い。 シフトが遅くないならこっちを試してもいい bit8 = (signed char)bit4 << 4 >> 4; 現実には多くの32ビットCPUはレジスタサイズ未満のビット演算は遅いのでこっちのほうがいいかも bit8 = (signed char)(((signed int)bit4 << 28) >> 28); 要はネイティブで算術シフト命令のできる最小単位ならなんでもいい。 同じロジックでbit16でもbit32でも展開できる。
|

|