page0053
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* printfの%d的なAPIについて
-(by [[K]], 2013.07.22)
** (0) はじめに
-OSECPUは[[page0040]]で、もはや病的なほどにサイズにこだわ...
-しかし数字の表示なんて実に典型的でありふれた処理です。こ...
** (1) Kは10進数が嫌い
-実は僕は10進数が嫌いです。こんな進数は人間の指がたまたま...
-こんなくだらないものはいつか廃(すた)れると思います。だ...
-僕は2進数や4進数や16進数が好きです。これらの進数には必然...
~
-こういう妙なこだわりがあるので、なかなか%d的なものをAPI...
** (2) 言い訳でしかない
-しかしこれは実は言い訳でしかありません。というのは、上記...
~
-ということで、ver.0.62からは%d的な機能をAPIでサポートし...
-その結果、[[page0054]]の(4)の[4-1]のようなプログラムが34...
** (3) 隠れた問題・・・それは可変長引数問題
-%d的なものを実装しようとすると、関数の可変長引数がほしく...
~
-まずOSECPUは本質的には可変長引数をサポートしていません。...
-これはいいのか、・・・一見するとよくない仕様のようにも見...
-僕の考えはこうです。
--大多数の関数は固定長引数で記述できる。
--あらかじめ引数の型と順番が分かっていれば、それらを短い...
--固定長であれば、レジスタ渡しの方が(特にOSECPUでは)効...
-ということで、まずは固定長引数関数をメインでサポートしま...
~
-一方で、可変長引数のサポートも必要です。これをどうしたら...
-OSECPUでは配列を引数として渡したいときに、関数の引数リス...
5 1 0 5 68 65 6C 6C 6F
-などという記述はまさにこれを使っています。68 65 6C 6C 6F...
-ここでは定数ばかりを配列に代入していますが、もちろんレジ...
-ここまでをまとめると、OSECPUでは可変長引数を本質的にはサ...
~
-配列を渡すときに、インライン展開ではなくて、すでに作った...
-ということで、配列を渡すときにはまずモード番号を記述しま...
--このモード3を指定していたとしても、結局長さはJITコンパ...
-他にもモードはありますが、まあきりがないのでこれくらいに...
-このモード方式に到達するまでも、いろいろ悩みました。モー...
-しかし結局は、モード番号制にしました。今ではこれが一番効...
~
-この節の冒頭で、%dのためには可変長引数が必要だとか書きま...
-しかし・・・%d的なことをしようと思ったら、今の文字列に加...
-それでどうしたのかと言えば、配列引数を2つとれるようにし...
-今回は%d的なものしか配慮していませんが、将来は%fや%sや%p...
--整数の表示は利用頻度が高そうで、そうであれば汎用的なも...
* こめんと欄
#comment
終了行:
* printfの%d的なAPIについて
-(by [[K]], 2013.07.22)
** (0) はじめに
-OSECPUは[[page0040]]で、もはや病的なほどにサイズにこだわ...
-しかし数字の表示なんて実に典型的でありふれた処理です。こ...
** (1) Kは10進数が嫌い
-実は僕は10進数が嫌いです。こんな進数は人間の指がたまたま...
-こんなくだらないものはいつか廃(すた)れると思います。だ...
-僕は2進数や4進数や16進数が好きです。これらの進数には必然...
~
-こういう妙なこだわりがあるので、なかなか%d的なものをAPI...
** (2) 言い訳でしかない
-しかしこれは実は言い訳でしかありません。というのは、上記...
~
-ということで、ver.0.62からは%d的な機能をAPIでサポートし...
-その結果、[[page0054]]の(4)の[4-1]のようなプログラムが34...
** (3) 隠れた問題・・・それは可変長引数問題
-%d的なものを実装しようとすると、関数の可変長引数がほしく...
~
-まずOSECPUは本質的には可変長引数をサポートしていません。...
-これはいいのか、・・・一見するとよくない仕様のようにも見...
-僕の考えはこうです。
--大多数の関数は固定長引数で記述できる。
--あらかじめ引数の型と順番が分かっていれば、それらを短い...
--固定長であれば、レジスタ渡しの方が(特にOSECPUでは)効...
-ということで、まずは固定長引数関数をメインでサポートしま...
~
-一方で、可変長引数のサポートも必要です。これをどうしたら...
-OSECPUでは配列を引数として渡したいときに、関数の引数リス...
5 1 0 5 68 65 6C 6C 6F
-などという記述はまさにこれを使っています。68 65 6C 6C 6F...
-ここでは定数ばかりを配列に代入していますが、もちろんレジ...
-ここまでをまとめると、OSECPUでは可変長引数を本質的にはサ...
~
-配列を渡すときに、インライン展開ではなくて、すでに作った...
-ということで、配列を渡すときにはまずモード番号を記述しま...
--このモード3を指定していたとしても、結局長さはJITコンパ...
-他にもモードはありますが、まあきりがないのでこれくらいに...
-このモード方式に到達するまでも、いろいろ悩みました。モー...
-しかし結局は、モード番号制にしました。今ではこれが一番効...
~
-この節の冒頭で、%dのためには可変長引数が必要だとか書きま...
-しかし・・・%d的なことをしようと思ったら、今の文字列に加...
-それでどうしたのかと言えば、配列引数を2つとれるようにし...
-今回は%d的なものしか配慮していませんが、将来は%fや%sや%p...
--整数の表示は利用頻度が高そうで、そうであれば汎用的なも...
* こめんと欄
#comment
ページ名: