GR-SAKURA
GR-KURUMI
GR-COTTON
GR-CITRUS
GR-PEACH
GR-KAEDE
GR-ADZUKI
GR-LYCHEE
GR-ROSE
GR-MANGO(*)
SNShield
Web Compiler
IDE for GR
TOPPERS関連
女子美コラボ
その他
※プロデューサミーティング中
作り方使い方資料
イベント関連
作品記事
体験記事
ライブラリ
ツール
その他・過去ファイル
がじぇるね岡宮です。
画像処理のミドルウェアについて、公開が遅れており申し訳ありません。
人物検知、動体物検知について、ミドルウェアの動作確認を進めており、もう少しのところなのですが8/Eまでに間に合わず申し訳ありません。
あと、1日、2日の内に暫定公開させていただきます。
(検知後の画面は出力されているが、なぜか画面が半分に切れている!?)
(QVGAのJPEGエンコードでなぜか青っぽい。これの修正は時間がかかるかもしれず、このまま暫定公開となりそうです。原因究明は続けますが、純正CCRXのコードがアセンブルで最適化されており、青っぽくなる原因箇所がよく分かりません。)
> 純正CCRXのコードがアセンブルで最適化されており、青っぽくなる原因箇所がよく分かりません。)
gcc の ABI で呼び出されて CCRX の ABi で呼び出すラッパーを用意する、みたいな簡単な話じゃないんですかね?
純正のアセンブラ用に書かれたソースが GNU の as に掛けると同じコードが出力されない、みたいなこともあるのかな。
そーいや CCRX 用は
r_jpege_rx/lib/compress_jpege_rx600_little.lib
r_jpege_rx/lib/jpege_rx600_little.lib
ここいら辺がソース非公開でライブラリ提供になってたなあ。gcc 用には公開されるんだろうか?
ABIは一緒らしいのでそれを合わせるラッパーを作る必要はないのですが、asm()と、スタックフレーム処理の対処だけで済ませていますが、なんだかうまくいかないです。
あとでソース版をアップしようと思います。もともとはソース公開前提のものらしいです。
Fujitaさん、一応こちらにソース版を公開させていただきました。
一応そちらのソース版に 2 つ入ってるアセンブリソース dct.src と encCsection.src について確認してみました。
dct.src は純正アセンブラでアセンブルすると
00000012 A003 mov.l r3, 0[r0] ; qtbl
と
00000111 A803 mov.l 0[r0], r3
となる箇所が GNU as では
46 0012 E3 03 mov.l r3, 0[r0] ; qtbl
194 0111 EC 03 mov.l 0[r0], r3
となります。
命令コードが違ってるようですが、『RXファミリ RXv2命令セットアーキテクチャ ユーザーズマニュアル ソフトウェア編』を確認すると、純正アセンブラでは
(1) MOV.size src, dest
(2) MOV.size src, dest
のパターンの MOV 命令が生成されているところが、GNU as では
(11) MOV.size src, dest
(9) MOV.size src, dest
のパターンの MOV 命令が生成されており、それぞれ
46 0012 E3 03 mov.l r3, [r0]
194 0111 EC 03 mov.l [r0], r3
であり、アセンブラの動作としてはどうかと思いますが命令の動作としては同等のものなので問題ないようです。
encCsection.src ですが、純正アセンブラでアセンブルすると
00000040 9B1A631F .word 1A9BH, 1F63H, 063EH, 11C7H, 0F9C2H, 1A9BH, 0EE39H, 0E09DH, 0E09DH, 11C7H 3E06C711 C2F99B1A 39EE9DE0 9DE0C711 00000054 9B1A3E06 .word 1A9BH, 063EH, 0EE39H, 063EH, 0E09DH, 1A9BH, 0C3FH, 1D90H, 0E270H, 0C3FH 39EE3E06 9DE09B1A 3F0C901D 70E23F0C
19 0040 9B 1A 00 00 63 1F 00 00 .word 1A9BH, 1F63H, 063EH, 11C7H, 0F9C2H, 1A9BH, 0EE39H, 0E09DH, 0E09DH, 11C7H 19 3E 06 00 00 C7 11 00 00 19 C2 F9 00 00 9B 1A 00 00 19 39 EE 00 00 9D E0 00 00 19 9D E0 00 00 C7 11 00 00 20 0068 9B 1A 00 00 3E 06 00 00 .word 1A9BH, 063EH, 0EE39H, 063EH, 0E09DH, 1A9BH, 0C3FH, 1D90H, 0E270H, 0C3FH 20 39 EE 00 00 3E 06 00 00 20 9D E0 00 00 9B 1A 00 00 20 3F 0C 00 00 90 1D 00 00 20 70 E2 00 00 3F 0C 00 00
となっています。
擬似命令 .word の動作が純正アセンブラでは 2 バイトの整数を吐くところを GNU as では 4 バイトの整数を吐いており、明らかに異なります。
この箇所を .short に書き換えると
19 0040 9B 1A 63 1F 3E 06 C7 11 .short 1A9BH, 1F63H, 063EH, 11C7H, 0F9C2H, 1A9BH, 0EE39H, 0E09DH, 0E09DH, 11C7H 19 C2 F9 9B 1A 39 EE 9D E0 19 9D E0 C7 11 20 0054 9B 1A 3E 06 39 EE 3E 06 .short 1A9BH, 063EH, 0EE39H, 063EH, 0E09DH, 1A9BH, 0C3FH, 1D90H, 0E270H, 0C3FH 20 9D E0 9B 1A 3F 0C 90 1D 20 70 E2 3F 0C
純正アセンブラと同一の結果となるようです。これが不具合の原因かは不明ですが明らかに違っているところなので修正されてみてはどうでしょうか。
他、.section の align の解釈も違うようですがあんま関係なさそうなので解説は省きます。
.section の align の解釈と MOV 命令の出力コードについては KPIT のサポートに報告しました。
http://www.kpitgnutools.com/bt/bug_view_advanced_page.php?bug_id=04540
http://www.kpitgnutools.com/bt/bug_view_advanced_page.php?bug_id=04541
Fujitaさん、アセンブルソースのご確認誠にありがとうございます。.wordと.shortの件はあらかじめ判明していたのですが、私の認識不足でdct.srcがそのままアセンブルが通ると思いませんでした。そのままソース登録し、ファイル名だけ.asmにして(必要ないかもですが)、ビルドしたところ青っぽくならずきちんとエンコードできました。お騒がせしてすみませんでした。
なんか徒労だった気もしないでもないですがエンコできるようなったのなら結果オーライですかね(GNU as の不具合も2つGNURX Toolchain の不具合も3つ4つ見つかったし)。
『RXファミリ RXv2命令セットアーキテクチャ ユーザーズマニュアル ソフトウェア編』 148頁
【命令フォーマット】 RACL src 【記述例】 RACL #1 RACL #2
は
【命令フォーマット】 RACL src, Adest 【記述例】 RACW #1, A1RACW #2, A0
が正しいみたいなことはどこに投稿すればいいんだろ?