CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

どっちのが早いんだろ?

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

ふと、上位ビットをマスクする処理を書いてて、2通り浮かんだ。

どっちのが速いんだろう...

data &= ~(~0u << size) ;
data &= (1u << size) - 1 ;

gcc -S して、diffしてみると、

<       movl    $-1, %eax
---
>       movl    $1, %eax
<       notb    %al
---
>       subb    $1, %al

となった。

subよりは notb の方が算術より論理だし、速そうな気がする。

でも、調べてないけど両方 1clkなんだろうな。そんな気がする。

意外に直後の命令でハザードするかしないかの差もあるかも知れない。

まぁ趣味プログラムだし、全然どうでもいいし、

というか昔は必死に1命令を縮める Cプログラムを書こうとしてた気がするけど

最近はそうでもなくなったような気がする。

(追記)

命令数よりどっちかというと、即値の型のが気になってきた(笑)。

1 と書くか、1uか、1uLか、いや、castしとくべきか。


ふと、ソースコードを書いていて、

上位ビットをマスクする処理を書いてて、2通り浮かんだんだけど

どっちのが早いんだろう...

data &= ~(~0 << size) ;
data &= (1 << size) - 1 ;

gcc -S して、diffしてみると、

<       movl    $-1, %eax
---
>       movl    $1, %eax
<       notb    %al
---
>       subb    $1, %al

となった。なんとなく、subよりは notb の方が早い気がする。

算術より論理の方が早そうな気がするからかな。

でも、両方 1clkで差がないとかだったりして。

意外に直後の命令でハザードするかしないかによって変るのかも知れない。

まぁ趣味プログラムだし、全然どうでもいいし、

というか昔は必死に1命令を縮める Cプログラムを書こうとしてた気がするけど

最近はそうでもなくなったような気がする...


実例で学ぶGCCの本格的活用法―高機能コンパイラのオプション・コマンドを一つ一つていねいに解説 (TECHI―Embedded Software)実例で学ぶGCCの本格的活用法―高機能コンパイラのオプション・コマンドを一つ一つていねいに解説 (TECHI―Embedded Software)
(2006/07)
岸 哲夫

商品詳細を見る
スポンサーサイト


★☆★コメント★☆★

コメントの投稿

Name
Subject
Mail
URI
Comment
Pass
Secret 管理者にだけ表示を許可する

トラックバック

http://iyukki.blog56.fc2.com/tb.php/74-001e45b0

 | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。