Not only is the Internet dead, it's starting to smell really bad.:2007年12月10日分

2007/12/10(Mon)

[pcc] pcc(1) INCR/DECR issue その1

_Bool type bug( 差分)の話の続きだけど、_Boolだけの問題じゃないのでSubject変更。

pass2は

int x, y, z;
main(void)
{
	/*
	 * | |(B)| |(A+=)| |
	 * |x| = |y| +=  |z|
	 */
	x = y += z;
}
0xbb901294) =, int, 0x0, 0x8081828 … (B)
    0xbb901104) NAME, 0, 0, int, 0x0, 0x8081828
    0xbb901200) +=, int, 0x0, 0x8081828 … (A+=)
        0xbb90122c) NAME, 0, 0, int, 0x0, 0x8081828
        0xbb901080) NAME, 0, 0, int, 0x0, 0x8081828
movl y,%eax
addl z,%eax (A+)
movl %eax,y (A=)
movl %eax,x (B)

とツリーの下の方からアセンブラを生成してくんだけど
現在までのpatchをあてた状態のpccは、INCR/DECRの場合
int x, y, z;
main(void)
{
	/*
	 * | |(C)| |(B+=)| |(A12)|
	 * |x| = |y| +=  |z| ++  |
	 */
        x = y += z++;
}
0xbb9012ec) =, int, 0x0, 0x8081828 … (C)
    0xbb901104) NAME, 0, 0, int, 0x0, 0x8081828
    0xbb9012c0) +=, int, 0x0, 0x8081828 … (B+=)
        0xbb90122c) NAME, 0, 0, int, 0x0, 0x8081828
        0xbb901294) ++, int, 0x0, 0x8081828 … (A12)
            0xbb901080) NAME, 0, 0, int, 0x0, 0x8081828
            0xbb901200) ICON, 1, 0, int, 0x0, 0x8081828
というツリーを吐くので、アセンブラ生成時に
movl y, %eax
movl z, %edx
addl %edx,%eax (B+)
movl %eax,y (B=)
addl $1,%edx (A1)
movl %edx,y (A2)
movl %eax,x (C)
と(B+=)と(A12)の順序を逆にしないとならないんだよな。

INCR/DECRの場合のツリー構造を見直して、逆順が発生しないようにできないもんかね。

Not Allowed NEW in PRE.

週末

体調悪いので修理上がりのカメラで写真撮りにいくのはキャンセルして
おうちでモータウンのCD流しながらベース弾いてた。
Jamerson奏法用にプレベ一本欲しくなってきたぞ。

[OpenBSD] wsconscfg(8)

chvtが無いネタ。
NetBSDやOpenBSDのwscons(4)の場合

$ /usr/sbin/wsconscfg -s 1

とゆーものがありますよ。

と思ったら、OpenBSDのwsconscfg(8)は-sスイッチないのな。

#include <sys/ioctl.h>
#include <fcntl.h>
#include <dev/wscons/wsdisplay_usl_io.h>
int
main(void)
{
    int fd;
    fd = open("/dev/ttyCcfg", O_RDWR, 0);
    ioctl(fd, VT_ACTIVATE, 2);
}

というコードをttyC0から実行すると、ちゃんとttyC1に切り替わるので
wscons(4)自体の機能には不足は無い模様。
NetBSDのwsconscfg.cの最新版をOpenBSDにパチってくればよいかと。