Kazu Hirata
kazu****@cs*****
2003年 9月 30日 (火) 03:07:20 JST
こんにちは。 include/asm-h8300/bitop.h の中でよく現れる ((nr >> 3) & ~3) + (3 - ((nr >> 3) & 3)) や (1UL << (nr & 7)) & something という式を最適化する patch を gcc-3.4 に入れてみました。結果、 test_bit() では shar.l er0 <- er0 = nr >> 3; shar.l er0 shar.l er0 sub.l er2,er2 <- er2 = (nr >> 3) & 3; mov.b r0l,r2l and #3,r2l and #252,r0l <- er0 = (nr >> 3) & ~3; sub.l er2,er0 add.l er6,er0 adds #2,er0 adds #1,er0 mov.b @er0,r2l sub.l er0,er0 mov.b r2l,r0l sub.l er2,er2 mov.b r4l,r2l and #7,r2l mov.b r2l,r2l ble .L58 .L57: shlr.l er0 <- test の前に shift add.b #-1,r2l bne .L57 .L58: btst #0,r0l <- 固定 bit の test bne .L18 が shar.l er2 shar.l er2 shar.l er2 xor #3,r2l <- xor のみで array index の調整 add.l er6,er2 mov.b @er2,r2l btst r5l,r2l <- 可変 bit の test bne .L18 まで凝縮されました。gcc-3.4 の正式 release は恐らく来年の初頭になって しまうと思いますが、とりあえずご報告まで。 Kazu Hirata