[Uclinux-h8-devel] bitop.h 関連での gcc の最適化

Back to archive index

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



Uclinux-h8-devel メーリングリストの案内
Back to archive index