2008年12月23日から2008年12月19日までの日記を表示中

2008年12月23日 (火)

uim.el

たまたま別のところ経由で発見.ASCIIから戻れない? うーん,そんなの設定しなくても uim 全体のキーバインドでいけるはずなんですが・・・.と思っていたら続きがあって,残念ながら既にお別れされてしまった後のようです (´・ω・`).Undo おかしいのかー.うーん,Canna あたりと同じようになるように作ったんだっけ? もう忘れてしまった・・・. SKK だと特別に変だったりするのかなぁ.

pidgin-2.5.3 for Windows

出てたのでyazさんパッチを当ててビルドして置きました.こちらからどうぞ.

チェンブレ

最近なぜか話題のチェンジエアブレードの基板をゲットしました.

チェンジエアブレード基板

無事動作したよ.わーい.

チェンジエアブレード

そしていよいよ本格的に置き場所がない・・・.

spu-gcc-4.3

リストDMAで色々試してたらコンパイル時に変なエラーがが.

spu-gcc43 -Wall -g -O3  -c listdma_spe.c -o listdma_spe.o
listdma_spe.c: In function 'main':
listdma_spe.c:51: error: unrecognizable insn:
(insn 191 55 60 4 listdma_spe.c:26 (set (reg:SI 209)
        (plus:SI (const:SI (plus:SI (symbol_ref:SI ("dma_list") [flags 0x200] <var_decl 0x403decf0 dma_list>)
                    (const_int 120 [0x78])))
            (const_int 13 [0xd]))) -1 (nil))
listdma_spe.c:51: internal compiler error: in extract_insn, at recog.c:1990
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
make: *** [listdma_spe.o] エラー 1

↓これがまずいらしい

mfc_list_element_t dma_list[16] __attribute__((aligned(8)));
...
dma_list[15].notify = 1;

↓こんな風に16byteアラインすると大丈夫.

mfc_list_element_t dma_list[16] __attribute__((aligned(16)));
...
dma_list[15].notify = 1;

まー,mfc_list_element_t の notify がこんなんだから色々例外っぽいけど・・・.あと,超どうでもいい話ですが上のソースには罠があって,リストの最後の要素の notify を 1 しても完了後にストールしてくれないので意味ないです.というか mfc_read_list_stall_status 呼ぶと返ってこなくなるので注意.

typedef struct mfc_list_element {
  uint64_t notify       :  1;   /** Stall-and-notify bit  */
  uint64_t reserved     : 16;
  uint64_t size         : 15;   /** Transfer size */
  uint64_t eal          : 32;   /** Lower word of effective address */
} mfc_list_element_t;

2008年12月22日 (月)

SPUの右シフト

コメントに書くと長そうなのでこっちにー.団子厨さんから以下のようなコメントを頂きました.

> 128ビットアラインメントされてないアドレスをロードすると
> 下位4ビットが無視される。

> 128ビット境界を跨ぐデータをロードする場合、2回ロードを発行して、
> それぞれ右シフト+左シフトして重ね合わせることになる。
> この際、シフト命令が補数をとる形式だと下位4ビットがそのまま使うことが
> できる。

おお!なるほど! それは考えたことがなかった! というわけで早速試してみたんですが,ちょっとうまくいかないっぽいです (´・ω・`)

アドレスをシフト値に使うということなので,ビットで指定する spu_rlmaskqwbytebc ではなくバイトで指定する spu_rlmaskqwbyte の話になるかと思うんですが,たとえば以下のコードでbuf の中の「CDEFGHIJKLMNOPQR」を1個のレジスタに読み出したいようなシチュエーションでの利用ということでいいんですよね?

char buf[] __attribute__((aligned(16))) = "ABCDEFGHIJKLMNOP"
                                          "QRSTUVWXYZabcdef"
                                          "ghijklmnopqrstuv"
                                          "wxyz";
vec_char16 v, vp, v1, v2;
vp = (vec_char16 *)(buf + 2);
v1 = vp[0];
v2 = vp[1];

// ビッグエンディアンなので1個目を左シフト,2個目を右シフトする
v = spu_or(spu_slqwbyte(v1, (int)vp),
           spu_rlmaskqwbyte(v2, (int)vp));

残念ながら,これはうまくいかないっぽいです.動かすと,vの中身は「\0\0\0\0\0\0\0\0\0\0\0\0\0\0QR」か「CDEFGHIJKLMNOP\0\0」になってしまいます.

シフトの大きさは (bufのアドレス + 2) としていますが,これは (16の倍数 + 2) になっているので,左シフトでも右シフトでも下位4bitしか見ないのであれば「2」を指定したのと同じになるはずです.

が,実際は,spu_rlmaskqwbyte は指定されたシフト値の符号を反転した後,下位5bitを取り出して,その数分右シフトします.また,バイト単位で左シフトする命令の spu_slqwbyte も同じように下位5bitを使います.なので,上記コードでは,シフト値として「2」が渡されるとは限らず,bufのアドレス次第では「18」になってしまう可能性があります.

で,18 になってしまうと,18 バイト左シフトされた1個目の値は全部 0 で埋まってしまいます.右シフトの方は「-14」を指定したのと同じことになるので14bit右シフトしてくれて丁度いいのですが・・・.

また,vpの下位5bitが 18 でなく 2 だった場合,左シフトは 2バイトでいい具合なんですが,今度は右シフトが「-30」を指定したのと同じ扱いになってしまい,結果が全部 0 で埋まってしまいます (´・ω・`)

というわけで,アドレスをそのまま使って2回に分けてロードしたベクタの合成には使えないかなーという感じなのですが,どうでしょう・・・.わざわざ5bit分使うのは16バイトの右シフトにも対応させたかったからなんですかね・・・.うーん.

あと,ここまで書いて気がついたんですが,SPEではそういう必要が生じたらシャッフル命令を使ってこんな風にやるのが普通なのかもしれません.

char buf[] __attribute__((aligned(16))) = "ABCDEFGHIJKLMNOP"
                                          "QRSTUVWXYZabcdef"
                                          "ghijklmnopqrstuv"
                                          "wxyz";
vec_char16 v, vp, v1, v2;
const vec_uchar16 vshuf2 = (vec_uchar16){ 2,  3,  4,  5,  6,  7,  8,  9,
                                         10, 11, 12, 13, 14, 15, 16, 17};
vp = (vec_char16 *)buf;
v1 = vp[0];
v2 = vp[1];

v = spu_shuffle(v1, v2, vshuf2);

Anthy

12月9日版のG-HAL氏パッチを当てたAnthyを使っているわけですが,恐ろしいパターンを発見してしまいました.

「そのでばいすに」を変換すると,普通は「その + デバイスに」になってくれると思います.が,うっかり間違えて文節を伸ばしてしまって「園で + 倍すに」とした上で1回確定してしまうと,その後何度文節を直して確定しても「そのでばいすに」→「園で + 倍すに」で固定されてしまいます・・・.

今んとこ復帰するには last-record2_default.utf8 をエディタで開いて「園で」とかを探して手で消すしかないような.うーむ,うまいこと設定で回避できないものか・・・.他の人どうっすかねー.まあ,覚えてくれないよりは遥かにいいのかも知れませんがw

[コメントを書く]

G-HAL 2008/12/24(水) 22:19:36
重ね重ね申し訳ありません。
学習量をケチろうとしてカタカナ語やひらがな語?を覚えない設定にしたまま、一般公開時に戻していませんでした。
confファイルで
DONOT_LEARN_GUESS _
DONOT_LEARN_HIRAGANA _
DONOT_LEARN_KATAKANA _
DONOT_LEARN_KIGOU _
DONOT_LEARN_MUHENKAN _
DONOT_LEARN_ZENHAN _
DONOT_LEARN_NUM_ANK _
DONOT_LEARN_NUM_JIS _
DONOT_LEARN_NUM_KANSUUZI _
DONOT_LEARN_NUM_SEPARATED_ANK _
DONOT_LEARN_NUM_SEPARATED_JIS _
DONOT_LEARN_NUM_ZIPCODE _
すると、ありとあらゆる変換を覚える様になります。
nosuke 2008/12/25(木) 00:42:25
うおお,こんにちは.いつもお世話になっております.
そしてコメントありがとうございます.
早速追加してみたところ,ばっちり復活できるようになりました!
わーい.

2008年12月21日 (日)

celltripperとか

ちょこちょこいじってたらちょっとスコアが伸びました.でも何でこれで伸びるのかさっぱりわかりません.むしろ遅くなっておかしくない筈なのに(;´Д`)

ところで spu-gcc の組み込み関数の一覧見てて気になったんですが,spu_rlmaskqwbytebc って何のためにあるんですかね.spu_slqwbytebc とかだと spu_slqw とあわせて1〜128ビットの左シフトとかに使えそうだけど, spu_rlmaskqwbytebc は負の数で指定しないといけないという謎仕様のせいで spu_rlmaskqw と組み合わせてもきれいに右シフトに使えないっぽいんですよね・・・.simdmath 見ても使われてないようだし.謎だ・・・.

[コメントを書く]

団子厨 2008/12/22(月) 02:52:31
多分こういうことでは?

128ビットアラインメントされてないアドレスをロードすると下位4ビットが無視される。

128ビット境界を跨ぐデータをロードする場合、2回ロードを発行して、それぞれ右シフト+左シフトして重ね合わせることになる。
この際、シフト命令が補数をとる形式だと下位4ビットがそのまま使うことができる。
nosuke 2008/12/23(火) 01:04:14
おお,ありがとうございます!
なるほど!そういう使い方があったか!
というわけで早速試してみたんですが,残念ながらどうもこれには
使えないっぽいです.詳細は22日のエントリに書いてみました.
勘違いしてたらごめんなさい・・・

2008年12月20日 (土)

VMware Player

昨日の続き.Fedora 9 を Vmware 上にクリーンインストールしてみました.HDDイメージを作るのが面倒だったので Windows の方の VMware で使ってる奴をコピーしてフォーマットし直してつかうことに.

順調にインストールが進むも,インストール後 yum update を始めたところでなにやら異変が.T60 が全体的にやたらと重い・・・なんだこりゃ.・・・アッー! SWAP が 500M も使われているぞ (;´Д`)

VMwareのゲストOSにうっかり1Gもメモリを割り当ててしまったせい? とりあえずあれこれホストの Linux 側のプロセスを落としまくってどうにか 300M くらいまでに減らしましたが,ここから先はもう落とせるものがない状態 w.くそー.で,結局その後数時間耐えてどうにか完走はしたんですが,こりゃ途中で止めてWindows側のVMware に移してやり直した方が速かったぽいなぁ.不覚・・・.

vmshrink

いやしかし,インストール直後で大して中身も入っていないはずの状態なのにディスクが 18G もあるのはどうなのかと.いやそもそも勝手にシュリンクされたりはしないのかな.手を抜いてコピーしてきたディスクイメージを使いまわしたのも失敗だったか・・・orz

そんなわけでどうにか縮める方法はないものかと探してみたら vmsrinkというのを発見.これはすごそう.

早速ゲストOS上にダウンロードしてコンパイルして実行.最初にデフラグっぽいことをしているのか,数字がぐるぐると回ります.・・・ずいぶん待たされますな・・・ってなんか別のワークスペースでVMware Playerがエラーを吐いているぅ (VMware 上の Fedora にsshでログインして作業してたので気づかなかった). なになに,作業をするのに十分なディスク領域がないだと (;´Д`)? 失敗してたのね・・・orz

仕方ないのでイメージをWindows側にコピーして,Windows の VMware Player 上で再挑戦することに.こっちはHDDの空きが十分あるんでばっちり縮小に成功.3Gくらいになりました.これを再度 T60 側に持ってきてようやく環境構築完了.ふー.HDD買い換えようかな・・・

2008年12月19日 (金)

mltermのマウス選択

なぜか最近 (実は前から?) VMware 上の Fedora で上げてるXサーバに mlterm の窓を飛ばすとマウスのダブルクリックやトリプルクリックでの文字列の選択が100% 失敗するようになってしまいました.まあマウスでじっくり選んでやれば大丈夫だったのでとりあえず放置してたんですが,今日になってこれだとちょっと不便な事態が発生したので適当に追ってみることに.

ダブルクリックとか検出してそうなところをgrepして追って行ったらそれっぽいところに到達.むう,マウスのリリース処理が怪しいな・・・.というわけで適当にコピペしてみたらあっさり直ってしまいました.これはラッキー.どんな副作用があるかわかりませんが,↓で今んとこ普通に使えてます.

--- xwindow/x_screen.c.org
+++ xwindow/x_screen.c
@@ -3517,6 +3517,18 @@
                        yank_event_received( screen , event->time) ;
                }
        }
+        else if( win->click_num == 2 && event->button == 1)
+        {
+                /* double clicked */
+
+                selecting_word( screen , event->x , event->y , event->time) ;
+        }
+        else if( win->click_num == 3 && event->button == 1)
+        {
+                /* triple click */
+
+                selecting_line( screen , event->y , event->time) ;
+        }

        x_stop_selecting( &screen->sel) ;
        highlight_cursor( screen) ;

VMware Player for Linux

今までT60には VMware Workstation 5.5系が入っていたんですが,新しいのが使いたくなって VMware Player に入れ替えてみることにしました.が,インストーラをダウンロードして実行しするもまったくインストールできず・・・.一応データの展開は行われるっぽいんですが,展開が終了したところで落ちます.落ちるときに律儀に展開したテンポラリのデータを消してくれるので,何が原因で落ちているのかさっぱりわからん (;´Д`)

あれこれ試しているうちに環境変数で LD_LIBRARY_PATH=/usr/local/lib を設定してやると上がることが発覚 (/etc/ld.so.confが空なので標準で/usr/local/libは見にいかない).あー,インストールにX使ってるのね (;´Д`)

が,しかし,まだインストールがうまくいっていないっぽい.文字コードがどうこうみたいなメッセージが表示されていたのでググってみるも,ヒットするのはロシア語のページばかり.なんじゃこりゃ・・・ロシア人だけがハマる? ・・・LANGかな? 試しに LANG を C にしてインストーラを起動してみたらばっちり.ようやくインストールできましたよ.何て難しいんだ (;´Д`)

その後 /dev/vmmonを作ったり,起動スクリプトにLD_PRELOADを書き足してX関連のライブラリを事前に読み込んでおくようにしたりしてどうにか VMware Player 自体も起動するようになりました.はぁ.

2008年12月23日から2008年12月19日までの日記を表示中

中の人情報

名前:
nosuke (のすけ)
メール:
sasugaanijaのgmail.com
「の」は「@」みたいな
関連リンク:

カレンダー

2008年12月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      

<<先月分

翌月分>>

最新の10件のエントリ

最近の10件のコメント

過去ログ