[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];