[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: -fno-strict-alias (Re: optimization/7427)



>	in4_cksum.cに対するパッチがあるなら送って下さい。

以下のパッチで動作することを確認しました。
powerpc/in_cksum.c 用ですが、netinet/in4_cksum.c でも同様の変更で
いけるとおもいます。(とにかく union にすればいい)
# 変数名は適切になおしてください。

gcc-2.95.3 ではこの変更によらずおなじコードが出ます。

*** in_cksum.c.old	Mon Jul 29 17:39:28 2002
--- in_cksum.c.new	Mon Jul 29 17:35:46 2002
***************
*** 237,252 ****
  {
  	u_int16_t *w;
  	u_int sum = 0;
! 	struct ipovly ipov;
  
  	if (nxt != 0) {
  		/* pseudo header */
! 		memset(&ipov, 0, sizeof(ipov));
! 		ipov.ih_len = htons(len);
! 		ipov.ih_pr = nxt; 
! 		ipov.ih_src = mtod(m, struct ip *)->ip_src; 
! 		ipov.ih_dst = mtod(m, struct ip *)->ip_dst;
! 		w = (u_int16_t *)&ipov;
  		/* assumes sizeof(ipov) == 20 */
  		sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3]; sum += w[4];
  		sum += w[5]; sum += w[6]; sum += w[7]; sum += w[8]; sum += w[9];
--- 237,255 ----
  {
  	u_int16_t *w;
  	u_int sum = 0;
! 	union {
! 		struct ipovly ipov;
! 		u_int16_t w[20];
! 	} u;
  
  	if (nxt != 0) {
  		/* pseudo header */
! 		memset(&u.ipov, 0, sizeof(u.ipov));
! 		u.ipov.ih_len = htons(len);
! 		u.ipov.ih_pr = nxt; 
! 		u.ipov.ih_src = mtod(m, struct ip *)->ip_src; 
! 		u.ipov.ih_dst = mtod(m, struct ip *)->ip_dst;
! 		w = u.w;
  		/* assumes sizeof(ipov) == 20 */
  		sum += w[0]; sum += w[1]; sum += w[2]; sum += w[3]; sum += w[4];
  		sum += w[5]; sum += w[6]; sum += w[7]; sum += w[8]; sum += w[9];