私はamr音声コーデック(移植/最適化)に取り組んでいます 私はVoiceageから最適化されたバージョンのアームを持っており、テスト。これまでのところ、私のlibで生成されたバイナリは、他のものを約20〜30%上回りました!私はVs2008を使用し、Microsoftコンパイラで生成できるARM命令セットへのアクセスが制限されています。だから私は性能の違いが何であるかを見るために別のコンパイラを探すことを試みました。 私はRVCTコンパイラを持っていますが、elfバイナリ/オブジェクトファイルを生成します。しかし、WinCEでRVCTでコンパイルされたコードを実行する方法を見つける必要があるので、私はwinceの携帯電話(TyTn 2)でテストを実行します。 一部のオプションは です。1)アセンブリリスト(armccの-Sオプション)を生成し、COFF(アーム用MSアセンブラ)を作成できる他のアセンブラでアセンブルを試みます。 2)生成されたELFオブジェクトファイルをコンパイルし、 COFFオブジェクト(gnu binutilsのobjcopyのように思われます) 3)RVCTが提供するfromelfユーティリティを使用してBINファイルを作成し、何らかの方法でビットをマングリングしようとします)WinCE/Window Mobile用RVCTを使用したAMR-nbコーデックのコンパイル
私の最初の試みは、 1つのエクスポートされた関数を持つシンプルなC++ファイルを作成し、RVCTでコンパイルし、その関数をスマートフォンで実行しようとします。 発行されたアセンブリをmsアセンブラでアセンブルすることはできません(これらは互換性がないだけでなく、RVCTコンパイラで生成された命令のいくつかを拒否します;私のケースではASRオペコード) ELFオブジェクトをcoff形式私はそれに関する情報を見つけることができません。 CE用のgccポートがあり、そのツールセットからのobjcopyがタスクを実行できるはずです。しかし、私はそれを働かせることはできません。私は別のスイッチを試しましたが、入力と出力のフォーマットのためにbfdnameとして何を指定する必要があるのかよくわかりません。だから、私はそれを働かせることができませんでした。 fromelfを使ってダンプし、生成されたbinファイルを使用することは過度のようですので、私は何かしようとしているか、誰かがすでに同様の作業をしていて助けてくれるかどうか聞いてみることにしました。 基本的には、RVCTコンパイラを使用してコードをコンパイルし、パフォーマンスの違いを確認するだけです。私のコードは、どのcランタイム関数にも依存しません。
ありがとうございました!
ASRについて "opcode" - 本当に、それはマクロのようです。 RVCTアームには、この「オペコード」の多くが使用されています。たとえば、POP/PUSH/RET/LDM/Allシフト(ASR、LSLなど)などがあります。 (ASR Rd、Rx、Y => MOV Rd、Rx、ASR y)。 あなたは例えば、それらをコンパイルするために、MSの腕ASMでマクロを書くことができます。: \t MACRO \t RET \t MOV PC、LR \t MEND – zxcat