横田宏幸の略歴:井田小、葵中、城西高、中部大中退、SCRN正社員4.5年、ソフト作家
小学3年になった時に「横田自動車工業で機械設計をしていた父が使用していた CASIO FX-702P」をもらって、添付された数値計算処理プログラミングガイドを見ながら、BASIC言語のプログラミングを始めた。最初は「数を入力して減算して勝負するゲーム」を入力して遊び、その後「インスタントラーメンを食べるときに3分タイマーがあると便利だと思って、カウントダウンタイマー」を自作した。小学5年生になる頃には「2次元行列計算」「3次元行列計算」「微分方程式の解法」というプログラムを勉強していたけれど、3次元行列は理解できても、微分方程式は「ブラックボックス」に見えた。ソフトウェア開発は CASIO FX-702P を使って勉強していましたが、電子工作については「鴨田町にあった成田無線の組み立てキットで学習」しており、最初に作ったものは「ゲルマニウムラジオ」でした。電池はないのにイヤホンから声がして、電波というのは「エネルギーを伴う力」であり、それを受信すると「電気を作る」という最も簡単な「電磁気学」を学んでいました。その後、小学5年生では「電撃組み立てキットを用いて、お菓子箱に電撃の罠を仕掛けたもの」を夏休みの自由研究にしていました。これは高度な研究に思えたのですが、リニアモーターカーの模型を自作した中根たちに注目が集まっており、妥協していると負けてしまうという感覚に囚われるようになりました。
井田小学校の卒業文集に「第一級アマチュア無線家になる」と書いたのですけれど、これは実現できていません。アマチュア無線の電話級を受験したのは大学生になってからでした。その当時は暗記本があって、その暗記をすれば簡単に合格できましたけれど、受験会場にいた受験生は小学生が99%という状況で、高校生以上は見つけられません。それから、アマチュア無線1級を目指していても、中部大学工学部電子工学科で学んでいることは活かせないと思い始め、最高難度である「第一級陸上無線技術士」「第一級総合通信士」の国家資格を目指しています。しかし、モールス信号は「音を信号として聞けず、論理的に解析できない」という課題を抱えており、この能力を鍛えることは困難でした。資格取得で暗記したら技術課題に取り組めなくなると考えて、「暗記は禁止」「京都大学の教授であった三上教授の言う通りに、定義の根拠を確実に学ぶ」という方針へ転換して、中部大学の図書館で調べられない時は「名古屋工業大学の図書館」「愛知県図書館」「岡崎市図書館」へ行き、細かい解釈を調べようとしていました。これは結局どうなったら勉強できるのか?米国から「英語技術専門書」を取り寄せて勉強すると、日本の技術専門書は「コピー本」であると分かり、以降は英語で勉強するのが習慣になっていきました。
合唱について。井田小学校や葵中学校は「音楽で活躍してる親戚が多い」という傾向から、全国的にみて「ハイレベル」と思います。葵中学校では「女子から合唱をやってみたら?」と言われ続けており、それでも葵中学校合唱部は「桜女学校」という感じで接近できず、岡崎城西高校男声合唱部から合唱を始めました。国士舘大学出身であった「数学教師わたなべ」先生が顧問で、「ハーモニーが揃っているのか、意味不明な状態」で、「雑魚キャラの合唱団として、NHK合唱コンクールへ出場する」という地獄を経験していました。愛知県立岡崎高校や光が丘女子高校は金賞を取っていたのですが、「ハーモニーが揃っていると思えない、意味不明な状態」でも金賞、難しい曲に挑戦している自由曲であるという理由で金賞を取れている感覚がありました。男声合唱は「低音を豊かに響かせるために、女声よりも神経質に音程を揃えなければ難しい」という根拠から「入賞するのは極端に難しい」と今は思っています。高校卒業まで1ヶ月となった時に「チケットぴあで慶応ワグネル・ソサエティの名古屋公演のペアチケットが当選した」ので、「数学教師わたなべ」先生と行き、「ワグネルの素晴らしい男声合唱」に感動しました。その時に先生が「早稲田」「同志社」「関学」「慶応」の音楽CDを買っていたので、それを借りてカセットテープに録音して、「早稲田大学校歌、都の西北」を歌えるようにしました。久遠の理想って、なんだろう?
グリークラブから混声合唱団へ、入学式の後、団員の多数決で決まった話
私ひとりの体質を知っていれば、「グリークラブ」のままでは「悪評の連鎖は避けられない」という結論の元、「混声合唱団」とする多数決となった。入学式後の「部員勧誘」では「ノノヤマ先輩やタケダ先輩から、ナンパして部員を勧誘してこい!特に女子部員を希望だ!」と言われても、ナンパした事がなく、何を言ったらいいのか、分からない。「ノノヤマ先輩やタケダ先輩は岡崎城西高校の吹奏楽部出身で、あり得ないぐらい女子のナンパに慣れていた」ので、DISCO「KingAndQueen」で雑誌ブルゾン企画による「ねるとんパーティ」という司会をやるほど社交性に長けていた。私ひとりのイメージでは「松浦亜弥の Good-by 夏男 というと、この2人の先輩」を夏男と表現できる。中部大学女子短大の卒業式では「2人の先輩から、ガードしてくれんか、女遊びをやり過ぎたかもしれん」と言われ、近寄ってくる女子卒業生を近づけさせない、ひたすらガードする任務を与えられた。この夏男という2人の先輩、合唱指揮において女子を指導する事に関しては極めて優秀、絶対音感に優れており音程は練習においてもズレた場面を見たことがない、そして女子に人気の歌を完璧に歌いこなすカラオケをやるし、それだけ優秀なら卒業できるだろうと思っていたけれど、この2人の先輩は「大学中退」を選択した。大学中退後も、練習場所に訪れては「女をナンパできるようになったか?」と気にしてる様子だった。
2人の夏男から「マハラジャEAST」へ行こうと誘われ、そこへ行くけれど、なんだこれは・・・「桜蘭高校ホスト部」・・・を見ている感覚に襲われる。だいたい、どういうダンスをすればよいか、分かったけれど・・・、踊るよりも会話から女を楽しませることが重要と思って見ていた。でも、落ち着いたときに他の先輩から「この音楽は分かるか?」と尋ねられて、ああ、これが本当の目的なんだと理解した。たぶん、中部大学グリークラブに来た理由は「夜のディスコで流れる音楽を知っておく」事だろうと思うようになった。その後、色々な女たちに絡む機会はあるんだけど、いつも「クラブへ行ってる?」と聞かれ、「混声合唱やってる」と答えると、以降無視されて相手にされなかった。ナンパは「声をかける」「女と会話できる状態にする」「どこかデートに行く話をする」、ここまでは出来るようになったけれど、そこから先へ大学生をしていた時は進まなかった。「アシある?」と聞かれて「歩き」というと、「車を買わないと女に相手にされないよ」と言われており、私の父母へ相談しても「そんな女は相手にしない方がいい」と言い、自動車免許を取らせてくれなかった。自動車免許を大学生で持っていない人は、大学2年になった時には中部大学で30%未満という状態で、「横田の父母はアホや」という噂が立っていた。
SINC( (100/400+Samples)×円周率 ) , 100 謎値 , AD40.0kHz
Samples -8192 ... 0 ... +8192 , Sinc(x) = Sin(x) ÷ x
DSD 2.8MHz = AD176.4kHz, DSD 5.6MHz = AD352.8kHz
2021年ミリオンセラーとなったCDを分析すると、DSDレコーディング DSD 2.8MHz してから、DSD-PCM変換して 44.1kHz、PCM 44.1kHz へ環境エフェクトを追加して、最後に DSD 2.8MHz 変換後、DSD-PCM 44.1kHz AD176.4kHz マスター作成。
リサンプル処理
音楽データ
○○○参照点前○○○○○○信号値○○○○○○参照点後○○○
信号値の前後を演算対象として、SINCテーブルを掛け算して合計値をリサンプル処理値とします。SINCテーブルを掛け算すると、足したり引いたりして、SIN関数を使った音波として予測値を得る。声や楽器を録音する時はSIN関数を使う。SIN関数を使わないで作った音はスタジオでうまく編集できない。
これは位相を変化させているからsin(x*pi)/pi が正しいとして演算すると雑音へ変換されます。教科書では sin((0.5+x)*pi)/((0.5+x)*pi) と書いてありますが、SINCノイズと言われるポワンポワン鳴る状態になります。この計算式は最も正確に音を鳴らせる条件になります。
変数 x -4,1,9
結果 8点 SINCリサンプル処理
円周率精度の問題
参照点数を増やしていくと、円周率精度の小数点桁を増やさないと、信号値から大きく離れたサンプル値は 0桁 の多い結果を示す。円周率精度の小数点は27桁で対応しており、FPU 80ビット演算により倍精度の演算テーブルを作成しています。音を悪くする方向へ変更したいときは、円周率精度の小数点桁を小さくすれば、アナログ感覚の劣化になりますけれど、音程はおかしくなります。「Junk Pi」(ElementaryではKogane)では1秒あたり周期的に円周率精度の劣化を引き起こす処理によって、ジッターレス条件下でジッターサウンドを楽しめます。
リサンプル処理で音が悪くなる条件
Sisters Resampler / Sisters Elementary
fripSide 2nd 南條愛乃の歌を少しでも気持ちよく聞くために作ったバージョンです。fripSide 2nd のほか、妖精帝國を聞く用途にも使えます。録音前の声を再現しており高評価です。
想定ゲーミングヘッドセット:USB 24bits WASAPI
想定ドライバー:ONKYO チタンコーティング 50mm
推奨されるパソコンの性能
Intel Core i3-10300 3.7GHz 4C8T TB-OFF 以上の性能を推薦
メモリ 8GB 以上、Window 11 Home 64ビット
SSDかHDDを使用している条件時で動作確認。
NASは作者環境で導入していないので操作や再生の確認はしていません。あまりにも遅くセットアップしているNASではドライブレターへ割り当てていてもロードできません。
再生可能フォーマット
WAV( .wav )、FLAC( .flac )、MP3( .mp3 )、ALAC( .m4a )、DSDIFF-PCM( .dsf .dff )周波数 44100Hz でPCM変換します。
低域補間処理とは?
SINCリサンプル処理を本の通りにやってみたら、音が良くなかった。そこで参照するサンプルを奇数列と偶数列に分けて、実質としては半分の周波数でリサンプル処理したら、録音されていない音が聞こえてきた。特許にできそうな話であったけれど、誰もこの話を信用してくれなくて科学的根拠がないと断言されていた。その後、超低ジッターを模索した研究開発を継続していると音は正しく聞こえるのに低音がない現象を確認。その根拠を考えていくと、音楽編集ソフトでリサンプル処理した際に参照点数が少なかったと分析、そして、スマホ難聴問題の原因でもあると分かったので情報共有した。
x1 x2 x4 x8 をクリックしますと、サウンドスペルを選べます。
おすすめ:Tester x2 x4 x8 , Master 1 2 , Black x2 x4
参照点数 青色の 1024 をクリックしますと、参照点数を選べます。
Self sound optimizer
自分でサウンドスペルをセレクトできます。最高24Linesまでセットアップ可能です。
処理時間の増大ルール
サウンドスペルについて
Elegant 上品な処理であり、きれいな音波の方向性
操作について
Windows 11 フォト は、ノートパソコンで使用される用途に最適化されておらず、使いにくい。デジカメの写真は PCIE NVMe SSD でもローディング時間が長くなり、全体的に遅く感じています。複数画面へ対応する時期は「未定」、このような内容は慎重に進めなければ、ソフトウェア開発は続行不能になります。自分で画面の位置を変更するユーティリティなどを使い、使い方を工夫すれば良いと思います。
MajiorityCleanES を実行している状態で「写真の色」を確認しています。コスプレイヤーの早瀬あみの写真を表示して、期待した画質で表示できているかを毎日確認しています。ローパスフィルターレスの撮影では「陰影が消えて平坦に見える」、もっと低ノイズの表示を追求すると「それでも陰影はあって、立体感を感じられる」、となります。表示する時に「CPUキャッシュメモリ」に対して、「写真データ」「表示処理プログラム」をキャッシュ化してから表示処理しているので、写真の表示は正確な色を実現できていると思います。
Windows 11 では印刷設定画面で「ページ設定の下にある『その他の設定』から印刷設定」します。
ファイル名(大小区別する、拡張子を除く)を入力する機能では、下記のファイルが実行形式のあるフォルダーに必要です。写真のあるフォルダーをセットしてください。PhotoFolder ファイルパスは最後は「¥」(Pictures\)となるように設定してください。PNG = 0 にすると PNG は検索しません。
"ArtPhotoPrefs.txt" ASCII
PhotoFolder = C:\Users\Public\Pictures\
JPG = 1
PNG = 1
TIFF = 1
SCREEN は「半導体製造」の分野で洗浄装置を作っていますけれど、それを作るには露光技術の研究にも参加していなければならない。その都合を考えているとき、「インテルの多重露光が失敗しており、10nm世代のCPU製造を開始できない」という報道が日本で繰り返されて、MajiorityCleanES や Rewrite data だけでなく Art photo print が必要と思い、作ってみたら不思議な報道は止まりました。これは半導体製造技術の改善に役立っているかもしれません。
2013年から10年間と続く「地獄の沼」は放置すれば、世界中の子供達を難聴にさせてしまい、成人して就職する頃には「音が聞こえない」という地獄を生むものでした。犯人を作るのは簡単です。今までの音楽業界は「犯人を作る」「犯人を始末する」「問題の根源は消滅してない」、問題分析に立ち上がった科学者は「犯人にされる」「犯人として始末される」「問題の根源は消滅してない」、これは「聴覚被害者は音量を上げすぎた」「スタジオは悪くない」「音楽に問題はない」という根拠に基づくものです。
しかし、問題の根幹に何があるのか? 音響処理を行う基本数学式が間違っており、リサンプル式の基礎研究を誰もやっていない。オーディオで水晶発振器の精度をフェムトにすれば、音楽は高精度円周率を根拠に作り直す必要があった。SINC 8点 で十分とされた説は、サンプリング周波数 100Hz を前提とした仮定式であり、サンプリング周波数 44100Hz になれば 441倍である 3528点 にしなければ十分と言えなかった。シンセサイザーに収録された音を復元できるリスクがあり、日本の楽器メーカーが隠し続けた。それは音楽再生プレイヤー「MDウォークマン」の技術者が現場を離れたあと、後継者の引き継ぎで伝えられる教材はなく、業界機密になり、そして「ロストテクノロジー」となった。シニア技術者は「韓国」「中国」のメーカーへ移籍したあと、この問題に気づき対応しようとしたけれど、音楽業界は魔女狩りの最中にあり、対応不能になっていました。
スタジオマスターの再生確認では「Elementary Normal」「Nontallion High」が使われます。超低ジッター条件における無変更の音楽再生を確認できます。オーディオマニアが素晴らしい、特に優れていると評価しているのは、ノーマル出力です。JPLAY forum では「グランドマスター」、ジェダイの騎士でいうジェダイ・マスターのうち「地上最強」を意味する、偉大な評価をされました。その後、ドイツの HIGH END で再生環境に選ばれて、裏から「もっとよくしろ!」の繰り返しでした。今は外国から岡崎市へ来て、裏のシステムが「すれ違い法」で会わせてあげるサービスを開始しているようで、すごい金持ちのファミリーに囲まれたりします。その時に限って、「最新のフェラーリ」「最新のポルシェ」だけでなく、日本で売ってないという数億円のスポーツカーで「すれ違い法」で、すれ違うシーンをよく経験する。もっと良くする方向性を示されて、ひたすら「Normal」を良くしてきました。それで Windows 11 で動作する音楽再生ソフトが、世界最高の高級サウンドプレイヤー(ハード機器、裏によると1人2億円)を超えれば、もっと音はよくできるということで、すべての特許や権利を無視して研究を続けてほしいと願いを託されていました。
この説明に問題点はあります。「XOR命令を使用して初期化すれば解決する」という説明でしたが、CPU演算基準はマザーボードを壊しやすくなる原因と分かってきて、そこで研究開発を中止しようと思いました。でも、神社で参拝しますと「歩みを止めてはならない」といって、次の改善方法を伝えてきました。レジスタのシフト命令によって「0」のビットをセットしますが、その「0」はどこから来たのでしょうか? それはつまり、キャッシュメモリから来た「0」という考えになれば、NOP QWORD [Rip] NOP QWORD [Rip] MOV Rax, 0 という命令であれば、キャッシュ化した「0」をRaxへセットする処理になります。これで完全に解決するかというと、CPU設計が変更されると再び基準の作り方を工夫しなければなりません。
この説明に不十分な記載があるとすると、Rax Eax の混在は何を引き起こすのか? それを確認していません。MOV Rax, 5 XOR Eax,Eax を実行すると、Rax は 0 になります。MOV Eax, 5 XOR Rax, Rax を実行すると Eax は 0 になります。ここを厳しく考えると Rax と Eax は物理レジスタとして独立している? と考えられるでしょう。低ジッタープログラミングをする時は、できるだけ Rax だけで作ろうとしていないと、画質や音質は良くなりません。PureBasic 変数でいうと Integer 64bits だけで変数定義を考えるほうが、トラブルを抑制できます。
Windowsプログラミングでは 32bit API の呼び出しは PUSH PUSH PUSH POP POP POP という方法で、Esp レジスタへ「複数の電子ビット基準に更新されて、ジッター現象」となる。64bit API の呼び出しは Rcx Rdx R8 R9 PUSH PUSH POP POP という方法になり、ジッター現象を回避しやすい。ソフトウェアによっては R8 R9 である第3引数と第4引数へ限定すれば、もっと良くなる。Rewrite data の現在バージョンでは Rcx Rdx を未使用になるよう注意しており、圧倒的な低ジッター記録を実現しています。
PCIE NVMe SSD とは、メモリからPCIEバスを通じてデータを書き出す仕組みです。SATA SSD とは、メモリからPCIEバスを通じてSATAコントローラーで再処理してデータを書き出す仕組みです。NAS NVMe SSD とは、メモリからPCIEバスを通じてネットワークへデータを送り出し、NASではネットワークからデータを受け取るとPCIEバスを通じてメモリへ転送後、メモリからPCIEバスを通じてデータを書き出す仕組みです。
AlderLake RapterLake の Zeroイディオム最適化
使用前に「GetDeviceName」を使い、使用している ASIO No. を記録します。この No. はスタジオによっては、毎日変更されており、Windowsログイン後にファイルサーバーから "GetAsioDeviceName.txt" が転送されて来るそうです。編集機によっては、ネットワークASIO出力のセットアップがあり、その出力管理をするために、この方式は都合良いということで、この方法を採用しています。"GetAsioDeviceName.txt" を最初から読んでいき、その番号で BASS_ASIO_Init(Asio_Device) and BASS_ASIO_CheckRate(44100.0) の時に使用可能と判断しています。返り値が 0 である場合、次の行へ進み、その番号で確認しています。その後、何度も再確認して BASS_ASIO_Free() にて解放していますが、これは裏から正規ASIOドライバ以外を使用不能にせよ、と指図されているからです。今より品質を上げても良いという場合、BASSASIO.dll を MemoryModuleLibrary によって、Executables の中へ内蔵して「命令キャッシュ化」しておく方法により、電子ビット基準を安定させることはできると思います。しかし、ユーザー様のほうで改造してある BASSASIO.DLL を使用禁止とするため、この最適化は回避しています。
BASSライブラリは「音量設定」「デコード処理」「転送処理」で高級オーディオ対応にできる音量設定 2020年 10月のマニュアルから抜粋
Q:音量設定の仕様について、教えて下さい。
ASIOは音量最大にしています。Digital bit stabilizer の処理を音量値に対して実施して、高解像度のサウンドを実現しました。WASAPIの場合は音量100(音量最大)の条件に限って、 Digital bit stabilizer の処理を音量値に対して実施しています。
具体的には、符号 1ビット 指数部 8ビット 仮数部 23ビット
Float 0.000 , 00000000000000000000000000000000 , INT 0
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 1.000 , 00111111100000000000000000000000 , INT 8388607
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 1.000 , 00111111100000000000000000000000 , INT 8388607
Float 0.000 , 00000000000000000000000000000000 , INT 0
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 1.000 , 00111111100000000000000000000000 , INT 8388607
Float 0.999 , 00111111011111111111111111111111 , INT 1065353215
Float 1.000 , 00111111100000000000000000000000 , INT 8388607
という音量値のセットを行い、下位16ビットで起きやすい電子ビット基準のズレをできるだけ抑えています。音量調整機能を作る場合、どの音量でもこの手順で安定化処理を行わないと不鮮明な音になります。
Q:左右のバランスを調整できない理由を教えて下さい。
左右のバランスが崩れないパターンはきっとDAC以降のアナログ回路がディスクリートやオペアンプになっておらず、DACにアンプが含まれている様なフルデジタルで処理した場合に限られると思います。しかし、左右のバランスを崩さないように片方の音量を下げるのは極めて難しい。左右のバランスが崩れた状態でUSB-DACを使い続けますと、ハードウェアとして左右のバランスが崩れていき、アナログ回路とデジタル回路の両方を破損する恐れがあります。破損の状態になったら左右を同じ音量にしても片方でパワーが出ない現象になります。
Q:16ビット整数出力しない理由はなぜですか?
CPUの設計か製造上の問題により、レジスタの最下位8ビットは不安定になりやすい。16ビット整数で出力すると、電子ビット基準が不安定なので、左の音が強く、右の音は弱い、バランスのおかしい出力になります。32ビット浮動小数点データにしておけば、仮数部23ビットとなり、右だけ 仮数部 正確 15ビット 不安定 最下位8ビット となり、安定します。
この問題が起きますのでデータ転送処理は64ビットのMMXレジスタで処理するようにして、左右のバランスを完全に安定化させて出力しています。WASAPI転送やASIO転送は手書きアセンブラで記述しておかないと、ダイナミックレンジが狭くなり、S/Nの品質を良くできません。16ビット整数の処理をMMXで書くのは難解になるので避けています。
Nontallion 14.28 で採用している音量設定のソースコード
Macro ASIO_ChannelSetVolume_Stabilizer
;
CALL_ALL_REGISTER_INC255_DEC255
SetR8_SHL_CL_Full
!PXOR mm5, mm5
!MOVQ mm5, R8
!PXOR mm3, mm3
!MOVQ mm3, R8
!PXOR mm7, mm7
!MOVQ mm7, R8
!MOVQ2DQ xmm2, mm5
XOR_R8_R8
XOR_R9_R9
!LEA R8, [p.v_False]
NEG_to_NEG_R8
After_NEG_to_NEG_R8
!LEA R9, [p.v_DM1]
NEG_to_NEG_R9
After_NEG_to_NEG_R9
!NOP QWORD [Rip]
!NOP QWORD [R8]
!MOVQ mm3, [R8]
!NOP QWORD [Rip]
!NOP QWORD [R9]
!MOVQ mm7, [R9]
!MOVQ2DQ xmm2, mm7
MacroMakeFloat
XOR_Rcx_Rcx
XOR_Rdx_Rdx
XOR_Rax_Rax
XOR_R8_R8
; 8 @@
!NOP QWORD [Rip+16]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!MOVQ Rcx, mm3
!MOVQ Rdx, mm7
!MOVQ2DQ xmm2, mm5
!MOVSS xmm2, xmm2
!EMMS
;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000)
!CALL QWORD BASS_ASIO_ChannelSetVolume
; 8 @@ End
;
CALL_ALL_REGISTER_INC255_DEC255_in
SetR8_SHL_CL_Full
!PXOR mm5, mm5
!MOVQ mm5, R8
!PXOR mm3, mm3
!MOVQ mm3, R8
!PXOR mm7, mm7
!MOVQ mm7, R8
!MOVQ2DQ xmm2, mm5
XOR_R8_R8
XOR_R9_R9
!LEA R8, [p.v_False]
NEG_to_NEG_R8
After_NEG_to_NEG_R8
!LEA R9, [p.v_DM1]
NEG_to_NEG_R9
After_NEG_to_NEG_R9
!NOP QWORD [Rip]
!NOP QWORD [R8]
!MOVQ mm3, [R8]
!NOP QWORD [Rip]
!NOP QWORD [R9]
!MOVQ mm7, [R9]
!MOVQ2DQ xmm2, mm7
MacroMakeFloatFF
XOR_Rcx_Rcx
XOR_Rdx_Rdx
XOR_Rax_Rax
XOR_R8_R8
; 8 @@
!NOP QWORD [Rip+16]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!MOVQ Rcx, mm3
!MOVQ Rdx, mm7
!MOVQ2DQ xmm2, mm5
!MOVSS xmm2, xmm2
!EMMS
;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000)
!CALL QWORD BASS_ASIO_ChannelSetVolume
; 8 @@ End
;
CALL_ALL_REGISTER_INC255_DEC255_in
SetR8_SHL_CL_Full
!PXOR mm5, mm5
!MOVQ mm5, R8
!PXOR mm3, mm3
!MOVQ mm3, R8
!PXOR mm7, mm7
!MOVQ mm7, R8
!MOVQ2DQ xmm2, mm5
XOR_R8_R8
XOR_R9_R9
!LEA R8, [p.v_False]
NEG_to_NEG_R8
After_NEG_to_NEG_R8
!LEA R9, [p.v_DM1]
NEG_to_NEG_R9
After_NEG_to_NEG_R9
!NOP QWORD [Rip]
!NOP QWORD [R8]
!MOVQ mm3, [R8]
!NOP QWORD [Rip]
!NOP QWORD [R9]
!MOVQ mm7, [R9]
!MOVQ2DQ xmm2, mm7
MacroMakeFloat
XOR_Rcx_Rcx
XOR_Rdx_Rdx
XOR_Rax_Rax
XOR_R8_R8
; 8 @@
!NOP QWORD [Rip+16]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!MOVQ Rcx, mm3
!MOVQ Rdx, mm7
!MOVQ2DQ xmm2, mm5
!MOVSS xmm2, xmm2
!EMMS
;BASS_ASIO_ChannelSetVolume(False, DM1, Float_1_000)
!CALL QWORD BASS_ASIO_ChannelSetVolume
; 8 @@ End
;
CALL_ALL_REGISTER_INC255_DEC255_in
SetR8_SHL_CL_Full
!PXOR mm5, mm5
!MOVQ mm5, R8
!PXOR mm3, mm3
!MOVQ mm3, R8
!PXOR mm7, mm7
!MOVQ mm7, R8
!MOVQ2DQ xmm2, mm5
XOR_R8_R8
XOR_R9_R9
!LEA R8, [p.v_False]
NEG_to_NEG_R8
After_NEG_to_NEG_R8
!LEA R9, [p.v_DM1]
NEG_to_NEG_R9
After_NEG_to_NEG_R9
!NOP QWORD [Rip]
!NOP QWORD [R8]
!MOVQ mm3, [R8]
!NOP QWORD [Rip]
!NOP QWORD [R9]
!MOVQ mm7, [R9]
!MOVQ2DQ xmm2, mm7
MacroMakeFloatFF
XOR_Rcx_Rcx
XOR_Rdx_Rdx
XOR_Rax_Rax
XOR_R8_R8
; 8 @@
!NOP QWORD [Rip+16]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!MOVQ Rcx, mm3
!MOVQ Rdx, mm7
!MOVQ2DQ xmm2, mm5
!MOVSS xmm2, xmm2
!EMMS
;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000)
!CALL QWORD BASS_ASIO_ChannelSetVolume
; 8 @@ End
;
CALL_ALL_REGISTER_INC255_DEC255_in
SetR8_SHL_CL_Full
!PXOR mm5, mm5
!MOVQ mm5, R8
!PXOR mm3, mm3
!MOVQ mm3, R8
!PXOR mm7, mm7
!MOVQ mm7, R8
!MOVQ2DQ xmm2, mm5
XOR_R8_R8
XOR_R9_R9
!LEA R8, [p.v_False]
NEG_to_NEG_R8
After_NEG_to_NEG_R8
!LEA R9, [p.v_DM1]
NEG_to_NEG_R9
After_NEG_to_NEG_R9
!NOP QWORD [Rip]
!NOP QWORD [R8]
!MOVQ mm3, [R8]
!NOP QWORD [Rip]
!NOP QWORD [R9]
!MOVQ mm7, [R9]
!MOVQ2DQ xmm2, mm7
MacroMakeFloat
XOR_Rcx_Rcx
XOR_Rdx_Rdx
XOR_Rax_Rax
XOR_R8_R8
; 8 @@
!NOP QWORD [Rip+16]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!MOVQ Rcx, mm3
!MOVQ Rdx, mm7
!MOVQ2DQ xmm2, mm5
!MOVSS xmm2, xmm2
!EMMS
;BASS_ASIO_ChannelSetVolume(False, DM1, Float_1_000)
!CALL QWORD BASS_ASIO_ChannelSetVolume
; 8 @@ End
XOR_Rax_Rax
EndMacro
この ASIO 音量設定を「短時間に繰り返せないドライバーに対応していない」ので注意です。高級オーディオのUSB-DACによっては、ドライバー内部に「厳密に調整された 1.000 の音量設定を採用」して、返り値は「常に True を返す」という仕様になっていれば問題ありません。ドライバー側で音量調整について独自に作っている場合、この方法は機能しないと思います。これは XMOS ドライバー を基準に作っていますが、音を悪くする方向へ調整するなら、音量設定値のビットを不安定にさせると著しく悪化します。最高に危険な方法をいえば、CPUID によってレジスタ Rdx を初期化します、CPUID MOV Rdx, 1 MOVQ xmm2, Rdx mov Rcx, 0 MOV Rdx,0 MOV R8, 0 CALL QWORD BASS_ASIO_ChannelSetVolume、という感じに書くと、USB-DACを壊すのは非常に簡単です。
Nontallion では Float_1_000 を INC SHL によって作成して、Macroで規定して、MacroMakeFloat MacroMakeFloatFF により、電子ビット基準の正確な音量設定を行っています。これで圧倒的な高音質を達成しています。ソースコードは下記のとおりです。
Macro MacroMakeFloat XOR_R8_R8 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !PXOR mm5, mm5 !MOVQ mm5, R8 !NOP QWORD [Rip-32] XOR_Rcx_Rcx_255 !INC cl !INC R8b MOVZX_R8 MOVZX_Rcx !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl !SHL R8, cl MOV_R8_R8_Up !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm5, R8 !NOP QWORD [Rip-32] EndMacro Macro MacroMakeFloatFF XOR_R8_R8 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !PXOR mm5, mm5 !MOVQ mm5, R8 !NOP QWORD [Rip-32] XOR_Rcx_Rcx_255 !INC cl !INC R8b MOVZX_R8 MOVZX_Rcx !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b !SHL R8, cl !INC R8b MOV_R8_R8_Up !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm5, R8 !NOP QWORD [Rip-32] EndMacro
デコード処理
自分でデコード処理を書くことはできるけれど、FLAC の場合、提供されたソースコードから「静的ライブラリを作り、内部処理として動作」する仕組みにするしかない。それで問題がなければいいけれど、実際に起きたことは「FLACのデコード処理はできたけれど、日本で公開しようとすると動作しない」という不可解な問題が起きた。それで、un4seen社 BASS Audio Library SDK を使用している。でも、デコード処理に問題があるようで、正しく処理できているとは思えない。その対策コードを考えていくうち、レジスタの安定した電子ビット基準の適用概念を思いつき、以下のソースコードによって、正確さでは世界最高といえるデコード処理となっていく。
CALL_ALL_REGISTER_INC255_DEC255_in CALL_ALL_REGISTER_PreCompileRun_only ; 115 @@
!NOP QWORD [Rip+72] !NOP QWORD [Rip+88] !NOP QWORD [Rip+104] !NOP QWORD [Rip+120] !NOP QWORD [Rip+136] !NOP QWORD [Rip+152] !NOP QWORD [Rip+168] !NOP QWORD [Rip+184] !NOP QWORD [Rip] !NOP QWORD [Rip] Bass_ChannelGetData(MultiSelect()\chan, *bufferDecode, Digital_Bit_Stabilizer_ToRax64(GD0,GD0, Bass_flags_FFFFFFF|BASS_DATA_FLOAT) ) ; 115 @@ End CALL_ALL_REGISTER_INC255_DEC255_in
Macro CALL_ALL_REGISTER_INC255_DEC255_in !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [ALL_REGISTER_INC255_DEC255_PreCompileRun] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !CALL QWORD ALL_REGISTER_INC255_DEC255_PreCompileRun !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] BeforeProcedureRegisters_SMSW !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [ALL_REGISTER_INC255_DEC255_in] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !CALL QWORD ALL_REGISTER_INC255_DEC255_in !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] EndMacro Macro CALL_ALL_REGISTER_PreCompileRun_only !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [ALL_REGISTER_INC255_DEC255_End_PreCompileRun] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !CALL QWORD ALL_REGISTER_INC255_DEC255_End_PreCompileRun !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] EndMacro Macro BeforeProcedureRegisters_SMSW ALL_MMX_CLEAR_SHIFTWORD_INC_CL MOV_Rax_Rax_Up_Down MOV_Rdx_Rdx_Up_Down MOV_Rsp_Rsp_Up_Down MOV_Rsi_Rsi_Up_Down MOV_R9_R9_Up_Down MOV_R11_R11_Up_Down MOV_R13_R13_Up_Down MOV_R15_R15_Up_Down MOV_Rcx_Rcx_Up_Down MOV_Rbx_Rbx_Up_Down MOV_Rbp_Rbp_Up_Down MOV_Rdi_Rdi_Up_Down MOV_R8_R8_Up_Down MOV_R10_R10_Up_Down MOV_R12_R12_Up_Down MOV_R14_R14_Up_Down ; 17 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip+32] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm0, Rax !MOVQ mm1, Rdx !MOVQ mm2, Rsp !MOVQ mm3, Rsi !MOVQ mm4, R9 !MOVQ mm5, R11 !MOVQ mm6, R13 !MOVQ mm7, R15 ; 17 @@ End !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rax !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rdx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rsp !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rsi !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R9 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R11 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R13 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R15 !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] ; 49 @@ !NOP QWORD [Rip+32] !NOP QWORD [Rip+48] !NOP QWORD [Rip+64] !NOP QWORD [Rip+80] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rax, mm0 !MOVQ Rdx, mm1 !MOVQ Rsp, mm2 !MOVQ Rsi, mm3 !MOVQ R9, mm4 !MOVQ R11, mm5 !MOVQ R13, mm6 !MOVQ R15, mm7 !MOVQ mm0, Rcx !MOVQ mm1, Rbx !MOVQ mm2, Rbp !MOVQ mm3, Rdi !MOVQ mm4, R8 !MOVQ mm5, R10 !MOVQ mm6, R12 !MOVQ mm7, R14 ; 49 @@ End !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rcx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rbx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rbp !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rdi !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R8 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R10 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R12 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R14 !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] ; 19 @@ !NOP QWORD [Rip+24] !NOP QWORD [Rip+40] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rcx, mm0 !MOVQ Rbx, mm1 !MOVQ Rbp, mm2 !MOVQ Rdi, mm3 !MOVQ R8, mm4 !MOVQ R10, mm5 !MOVQ R12, mm6 !MOVQ R14, mm7 !EMMS ; 19 @@ End MOV_Rax_Rax_Up_Down MOV_Rdx_Rdx_Up_Down MOV_Rsp_Rsp_Up_Down MOV_Rsi_Rsi_Up_Down MOV_R9_R9_Up_Down MOV_R11_R11_Up_Down MOV_R13_R13_Up_Down MOV_R15_R15_Up_Down MOV_Rcx_Rcx_Up_Down MOV_Rbx_Rbx_Up_Down MOV_Rbp_Rbp_Up_Down MOV_Rdi_Rdi_Up_Down MOV_R8_R8_Up_Down MOV_R10_R10_Up_Down MOV_R12_R12_Up_Down MOV_R14_R14_Up_Down EndMacro
IncludeFile "FNOPx512.txt" !ALL_REGISTER_INC255_DEC255_PreCompileRun: !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [ALL_REGISTER_INC255_DEC255_End_PreCompileRun] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !JMP QWORD ALL_REGISTER_INC255_DEC255_End_PreCompileRun !NOP QWORD [Rip] !NOP QWORD [Rip] !ALL_REGISTER_INC255_DEC255: !NOP QWORD [Rip] !NOP QWORD [Rip] BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL_xmm0 SIMPLE_MOVE_REGISTERS_Up_and_Down PSLLD_PSRLD_Setup_Perfect16bits XOR_R8_R8 XOR_R8_R8_255 !LEA R8, [v_RN] NEG_to_NEG_R8 After_NEG_to_NEG_R8 PSLLD_PSRLD_Conditioner_Perfect16bits !ALL_REGISTER_INC255_DEC255_in: !NOP QWORD [Rip] !NOP QWORD [Rip] BeforeProcedureRegisters_HALF BeforeProcedureRegisters_HALF BeforeProcedureRegisters_HALF_xmm0 SIMPLE_MOVE_REGISTERS_Up_and_Down BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL BeforeProcedureRegisters_ALL_xmm0 !ALL_REGISTER_INC255_DEC255_End_PreCompileRun: !NOP QWORD [Rip] !NOP QWORD [Rip] XORPS_xmm15_to_XMM0_XMM15 SIMPLE_MOVE_REGISTERS_Up_and_Down IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F268_MMX.pbi" SIMPLE_MOVE_REGISTERS_Up_and_Down !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [PureBasicStart] !NOP QWORD [Rip] !NOP QWORD [Rsp-16] !NOP QWORD [Rip] !NOP QWORD [Rsp] !NOP QWORD [Rip] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !RET IncludeFile "FNOPx512.txt"
Debug "; "+Str(?NOPMemoryQ_E_1-?NOPMemoryQ_S_1-15) + " @@" For I=0 To ?NOPMemoryQ_E_1-?NOPMemoryQ_S_1-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_1-?NOPMemoryQ_S_1)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_2-?NOPMemoryQ_S_2-15) + " @@" For I=0 To ?NOPMemoryQ_E_2-?NOPMemoryQ_S_2-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_2-?NOPMemoryQ_S_2)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_3-?NOPMemoryQ_S_3-15) + " @@" For I=0 To ?NOPMemoryQ_E_3-?NOPMemoryQ_S_3-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_3-?NOPMemoryQ_S_3)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_4-?NOPMemoryQ_S_4-15) + " @@" For I=0 To ?NOPMemoryQ_E_4-?NOPMemoryQ_S_4-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_4-?NOPMemoryQ_S_4)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_5-?NOPMemoryQ_S_5-15) + " @@" For I=0 To ?NOPMemoryQ_E_5-?NOPMemoryQ_S_5-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_5-?NOPMemoryQ_S_5)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_6-?NOPMemoryQ_S_6-15) + " @@" For I=0 To ?NOPMemoryQ_E_6-?NOPMemoryQ_S_6-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_6-?NOPMemoryQ_S_6)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_7-?NOPMemoryQ_S_7-15) + " @@" For I=0 To ?NOPMemoryQ_E_7-?NOPMemoryQ_S_7-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_7-?NOPMemoryQ_S_7)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_8-?NOPMemoryQ_S_8-15) + " @@" For I=0 To ?NOPMemoryQ_E_8-?NOPMemoryQ_S_8-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_8-?NOPMemoryQ_S_8)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_9-?NOPMemoryQ_S_9-15) + " @@" For I=0 To ?NOPMemoryQ_E_9-?NOPMemoryQ_S_9-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_9-?NOPMemoryQ_S_9)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" Debug "; "+Str(?NOPMemoryQ_E_10-?NOPMemoryQ_S_10-15) + " @@" For I=0 To ?NOPMemoryQ_E_10-?NOPMemoryQ_S_10-15 Step 16 Debug " !NOP QWORD [Rip+"+Str(Int(Round((?NOPMemoryQ_E_10-?NOPMemoryQ_S_10)/16, #PB_Round_Up))*8+I)+"]" Next Debug " !NOP QWORD [Rip]" Debug " !NOP QWORD [Rip]" Debug "-----------" CallDebugger; 適用する範囲をラベルで指定しておく
NOPMemoryQ_S_1: MainThread_No = RN | Digital_Bit_Stabilizer_ToRax64(RN, RN, CreateThread(MT_Thread_MainThread, MT_D0) ) NOPMemoryQ_E_1:; Debug 実行して、下記のように命令キャッシュを指定する
; 92 @@ !NOP QWORD [Rip+56] !NOP QWORD [Rip+72] !NOP QWORD [Rip+88] !NOP QWORD [Rip+104] !NOP QWORD [Rip+120] !NOP QWORD [Rip+136] !NOP QWORD [Rip] !NOP QWORD [Rip] MainThread_No = RN | Digital_Bit_Stabilizer_ToRax64(RN, RN, CreateThread(MT_Thread_MainThread, MT_D0) ) ; 92 @@ End
この範囲について「電子ビット基準は、CPUのキャッシュメモリ」になっていると想定しながら記述しなければならないので、十分に品質を高めるときは注意しなければならない。素早く参照すると困るパターンがあるからです。
転送処理
通常は SSE命令 を使用した転送処理となる。しかし、CPUのメモリアクセスを考えていくと、すべて MMXレジスタ で使われてるメモリアクセス処理で実現しているとしか思えなくなる。SSE命令の悪いところは「汎用処理命令よりも、クロック上昇、CPU電圧上昇、この原因によって、デジタルジッターを生じる」という点に問題がある。それで RapterLake CPU では、メモリ転送処理に関して E-Core を使用している雰囲気で、正確に鳴りやすいが遅くなりやすい。Nontallion では MMXによる転送処理によって実現しており、ジッター現象は起きにくい。
この実験は過去にやっており、具体的には下記のソースコードで確認していた。オーディオマニアの皆様が確認していき、どの転送モードを使用すると「低ジッター」になるのか? それを確認していたと思います。
Procedure CopyMemory2(*memory, *memory2, mem_size.i, *dummy) ; [4.56] Add *dummy for sound Shared feelsound.i ;, dsd_play.i Protected s.i, hn.i Protected n1.i, n2.i, *memory_in, *memory_out Select feelsound Case #Tune_Blade_1 To #Tune_Blade_11 ;, #Tune_Orochi_1 To #Tune_Orochi_11 hn = 16 Default hn = 8 EndSelect If *memory%hn>0 n1 = *memory%hn *memory_in = *memory - n1 Else n1 = 0 *memory_in = *memory EndIf If *memory2%hn>0 n2 = *memory2%hn *memory_out = *memory2 - n2 Else n2 = 0 *memory_out = *memory2 EndIf ; If (mem_size+n1)%hn>0 ; [4.11] s = (mem_size+n1) + (hn - (mem_size+n1)%hn) Else s = mem_size + n1 EndIf ; If (n1-n2)=0 ElseIf n2>0 s + hn EndIf If s<1 Goto CopyMemory2_end EndIf CompilerSelect #PB_Compiler_Processor ; [4.51] CompilerCase #PB_Processor_x86 ReWriteMemory_mmx_var(@s, 4) CompilerCase #PB_Processor_x64 ReWriteMemory_mmx_var(@s, 8) CompilerEndSelect Protected I.l = 0 ; 3.92 quality balance If feelsound = #Tune_Basic_1 Goto T_Tune_Basic_1 ElseIf feelsound = #Tune_Basic_2 Goto T_Tune_Basic_2 ElseIf feelsound = #Tune_Basic_3 Goto T_Tune_Basic_3 ElseIf feelsound = #Tune_Basic_4 Goto T_Tune_Basic_4 ElseIf feelsound = #Tune_Basic_5 Goto T_Tune_Basic_5 ElseIf feelsound = #Tune_Basic_6 Goto T_Tune_Basic_6 ElseIf feelsound = #Tune_Basic_7 Goto T_Tune_Basic_7 ElseIf feelsound = #Tune_Basic_8 Goto T_Tune_Basic_8 ElseIf feelsound = #Tune_Basic_9 Goto T_Tune_Basic_9 ElseIf feelsound = #Tune_Basic_10 Goto T_Tune_Basic_10 ElseIf feelsound = #Tune_Slash_1 Goto T_Tune_Slash_1 ElseIf feelsound = #Tune_Slash_2 Goto T_Tune_Slash_2 ElseIf feelsound = #Tune_Slash_3 Goto T_Tune_Slash_3 ElseIf feelsound = #Tune_Slash_4 Goto T_Tune_Slash_4 ElseIf feelsound = #Tune_Slash_5 Goto T_Tune_Slash_5 ElseIf feelsound = #Tune_Slash_6 Goto T_Tune_Slash_6 ElseIf feelsound = #Tune_Slash_7 Goto T_Tune_Slash_7 ElseIf feelsound = #Tune_Slash_8 Goto T_Tune_Slash_8 ElseIf feelsound = #Tune_Slash_9 Goto T_Tune_Slash_9 ElseIf feelsound = #Tune_Slash_10 Goto T_Tune_Slash_10 ElseIf feelsound = #Tune_Slash_11 Goto T_Tune_Slash_11 ElseIf feelsound = #Tune_Shine_1 Goto T_Tune_Shine_1 ElseIf feelsound = #Tune_Shine_2 Goto T_Tune_Shine_2 ElseIf feelsound = #Tune_Shine_3 Goto T_Tune_Shine_3 ElseIf feelsound = #Tune_Shine_4 Goto T_Tune_Shine_4 ElseIf feelsound = #Tune_Shine_5 Goto T_Tune_Shine_5 ElseIf feelsound = #Tune_Shine_6 Goto T_Tune_Shine_6 ElseIf feelsound = #Tune_Shine_7 Goto T_Tune_Shine_7 ElseIf feelsound = #Tune_Shine_8 Goto T_Tune_Shine_8 ElseIf feelsound = #Tune_Shine_9 Goto T_Tune_Shine_9 ElseIf feelsound = #Tune_Shine_10 Goto T_Tune_Shine_10 ElseIf feelsound = #Tune_Shine_11 Goto T_Tune_Shine_11 ElseIf feelsound = #Tune_Star_1 Goto T_Tune_Star_1 ElseIf feelsound = #Tune_Star_2 Goto T_Tune_Star_2 ElseIf feelsound = #Tune_Star_3 Goto T_Tune_Star_3 ElseIf feelsound = #Tune_Star_4 Goto T_Tune_Star_4 ElseIf feelsound = #Tune_Star_5 Goto T_Tune_Star_5 ElseIf feelsound = #Tune_Star_6 Goto T_Tune_Star_6 ElseIf feelsound = #Tune_Star_7 Goto T_Tune_Star_7 ElseIf feelsound = #Tune_Star_8 Goto T_Tune_Star_8 ElseIf feelsound = #Tune_Star_9 Goto T_Tune_Star_9 ElseIf feelsound = #Tune_Star_10 Goto T_Tune_Star_10 ElseIf feelsound = #Tune_Star_11 Goto T_Tune_Star_11 ElseIf feelsound = #Tune_Snake_1 Goto T_Tune_Snake_1 ElseIf feelsound = #Tune_Snake_2 Goto T_Tune_Snake_2 ElseIf feelsound = #Tune_Snake_3 Goto T_Tune_Snake_3 ElseIf feelsound = #Tune_Snake_4 Goto T_Tune_Snake_4 ElseIf feelsound = #Tune_Snake_5 Goto T_Tune_Snake_5 ElseIf feelsound = #Tune_Snake_6 Goto T_Tune_Snake_6 ElseIf feelsound = #Tune_Snake_7 Goto T_Tune_Snake_7 ElseIf feelsound = #Tune_Snake_8 Goto T_Tune_Snake_8 ElseIf feelsound = #Tune_Snake_9 Goto T_Tune_Snake_9 ElseIf feelsound = #Tune_Snake_10 Goto T_Tune_Snake_10 ElseIf feelsound = #Tune_Snake_11 Goto T_Tune_Snake_11 ElseIf feelsound = #Tune_Galaxy_1 Goto T_Tune_Galaxy_1 ElseIf feelsound = #Tune_Galaxy_2 Goto T_Tune_Galaxy_2 ElseIf feelsound = #Tune_Galaxy_3 Goto T_Tune_Galaxy_3 ElseIf feelsound = #Tune_Galaxy_4 Goto T_Tune_Galaxy_4 ElseIf feelsound = #Tune_Galaxy_5 Goto T_Tune_Galaxy_5 ; ElseIf feelsound = #Tune_Galaxy_6 ; Goto T_Tune_Galaxy_6 ; ElseIf feelsound = #Tune_Galaxy_7 ; Goto T_Tune_Galaxy_7 ; ElseIf feelsound = #Tune_Galaxy_8 ; Goto T_Tune_Galaxy_8 ; ElseIf feelsound = #Tune_Galaxy_9 ; Goto T_Tune_Galaxy_9 ElseIf feelsound = #Tune_Galaxy_10 Goto T_Tune_Galaxy_10 ElseIf feelsound = #Tune_Galaxy_11 Goto T_Tune_Galaxy_11 ElseIf feelsound = #Tune_Star_2_navx Goto T_Tune_Star_2_navx ElseIf feelsound = #Tune_Star_10_navx Goto T_Tune_Star_10_navx ElseIf feelsound = #Tune_Shine_10_navx Goto T_Tune_Shine_10_navx ElseIf feelsound = #Tune_Fstar_2_navx Goto T_Tune_Fstar_2_navx ElseIf feelsound = #Tune_Fstar_10_navx Goto T_Tune_Fstar_10_navx ElseIf feelsound = #Tune_Blade_1 Goto T_Tune_Blade_1 ElseIf feelsound = #Tune_Blade_2 Goto T_Tune_Blade_2 ElseIf feelsound = #Tune_Blade_3 Goto T_Tune_Blade_3 ElseIf feelsound = #Tune_Blade_4 Goto T_Tune_Blade_4 ElseIf feelsound = #Tune_Blade_5 Goto T_Tune_Blade_5 ElseIf feelsound = #Tune_Blade_6 Goto T_Tune_Blade_6 ElseIf feelsound = #Tune_Blade_7 Goto T_Tune_Blade_7 ElseIf feelsound = #Tune_Blade_8 Goto T_Tune_Blade_8 ElseIf feelsound = #Tune_Blade_9 Goto T_Tune_Blade_9 ElseIf feelsound = #Tune_Blade_10 Goto T_Tune_Blade_10 ElseIf feelsound = #Tune_Blade_11 Goto T_Tune_Blade_11 ElseIf feelsound = #Tune_Orochi_1 Goto T_Tune_Orochi_1 ElseIf feelsound = #Tune_Orochi_2 Goto T_Tune_Orochi_2 ElseIf feelsound = #Tune_Orochi_3 Goto T_Tune_Orochi_3 ElseIf feelsound = #Tune_Orochi_4 Goto T_Tune_Orochi_4 ElseIf feelsound = #Tune_Orochi_5 Goto T_Tune_Orochi_5 ElseIf feelsound = #Tune_Orochi_6 Goto T_Tune_Orochi_6 ElseIf feelsound = #Tune_Orochi_7 Goto T_Tune_Orochi_7 ElseIf feelsound = #Tune_Orochi_8 Goto T_Tune_Orochi_8 ElseIf feelsound = #Tune_Orochi_9 Goto T_Tune_Orochi_9 ElseIf feelsound = #Tune_Orochi_10 Goto T_Tune_Orochi_10 ElseIf feelsound = #Tune_Orochi_11 Goto T_Tune_Orochi_11 ElseIf feelsound = #Tune_Galaxy_10_plus Goto T_Tune_Galaxy_10_plus ElseIf feelsound = #Tune_Blade_10_plus Goto T_Tune_Blade_10_plus ElseIf feelsound = #Tune_Orochi_10_plus Goto T_Tune_Orochi_10_plus EndIf Goto CopyMemory2_end T_Tune_Basic_1: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_1: !movq xmm0, [Ecx] !movq [Edx], xmm0 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_1: !movq xmm0, [Rcx] !movq [Rdx], xmm0 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_2: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_2: !movq [Edx], xmm1 ; + !movq xmm0, [Ecx] !movq [Edx], xmm0 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_2 !emms ; Don't remove for hq sound Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_2: !movq [Rdx], xmm1 ; + !movq xmm0, [Rcx] !movq [Rdx], xmm0 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_2 !emms ; Don't remove for hq sound Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_3: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_3: !movq [Edx], xmm1 !movq xmm0, [Ecx] !movq [Edx], xmm0 !movq [Ecx], xmm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_3: !movq [Rdx], xmm1 !movq xmm0, [Rcx] !movq [Rdx], xmm0 !movq [Rcx], xmm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_4: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_4: !movq [Edx], xmm1 !PXOR xmm0, xmm0 ; + !movq xmm0, [Ecx] !movq [Edx], xmm0 !movq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_4: !movq [Rdx], xmm1 !PXOR xmm0, xmm0 ; + !movq xmm0, [Rcx] !movq [Rdx], xmm0 !movq [Rcx], xmm1 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_5: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_5: !PXOR xmm1, xmm1 ; + !movq [Edx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Ecx] !movq [Edx], xmm0 !movq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_5: !PXOR xmm1, xmm1 ; + !movq [Rdx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Rcx] !movq [Rdx], xmm0 !movq [Rcx], xmm1 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_6: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_6: !vmovq [Edx], xmm1 ; + !movq xmm0, [Ecx] !movq [Edx], xmm0 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_6: !vmovq [Rdx], xmm1 ; + !movq xmm0, [Rcx] !movq [Rdx], xmm0 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_7: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_7: !PXOR xmm1, xmm1 ; + !vmovq [Edx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Ecx] !movq [Edx], xmm0 !vmovq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_7: !vmovq [Rdx], xmm1 !movq xmm0, [Rcx] !movq [Rdx], xmm0 !vmovq [Rcx], xmm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_8: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_8: !vmovq [Edx], xmm1 !PXOR xmm0, xmm0 ; + !movq xmm0, [Ecx] !movq [Edx], xmm0 !vmovq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_8: !vmovq [Rdx], xmm1 !PXOR xmm0, xmm0 ; + !movq xmm0, [Rcx] !movq [Rdx], xmm0 !vmovq [Rcx], xmm1 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_9: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_9: !PXOR xmm1, xmm1 ; + !vmovq [Edx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Ecx] !movq [Edx], xmm0 !vmovq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_9: !PXOR xmm1, xmm1 ; + !vmovq [Rdx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Rcx] !movq [Rdx], xmm0 !vmovq [Rcx], xmm1 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Basic_10: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Basic_10: !PXOR xmm1, xmm1 !vmovq [Edx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Ecx] !movq [Edx], xmm0 !PXOR xmm1, xmm1 ; + !vmovq [Ecx], xmm1 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Basic_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm0, xmm0 !PXOR xmm1, xmm1 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Basic_10: !PXOR xmm1, xmm1 ; + !vmovq [Rdx], xmm1 !PXOR xmm0, xmm0 !movq xmm0, [Rcx] !movq [Rdx], xmm0 !PXOR xmm1, xmm1 ; + !vmovq [Rcx], xmm1 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Basic_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_1: CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_1: !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_1: !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_2: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_2: !PXOR xmm4, xmm4 ; + !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_2: !PXOR xmm14, xmm14 ; + !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_3: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_3: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_3: !vmovq [Rdx], xmm7 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_4: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_4: !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !vmovq [Ecx], xmm7 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_4: !vmovq [Rdx], xmm7 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !vmovq [Rcx], xmm7 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_5: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_5: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !vmovq [Ecx], xmm7 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_5: !PXOR xmm7, xmm7 ; + !vmovq [Rdx], xmm7 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !vmovq [Rcx], xmm7 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_6: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_6: !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_6: !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_7: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 ; + !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_7: !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovq [Edx], xmm4 !movq [Ecx], mm5 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_7: !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovq [Rdx], xmm14 !movq [Rcx], mm5 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_8: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_8: !movq [Edx], mm5 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovq [Edx], xmm4 !movq [Ecx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_8: !movq [Rdx], mm5 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovq [Rdx], xmm14 !movq [Rcx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_9: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_9: !PXOR mm5, mm5 ; + !movq [Edx], mm5 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovq [Edx], xmm4 !movq [Ecx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_9: !PXOR mm5, mm5 ; + !movq [Rdx], mm5 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovq [Rdx], xmm14 !movq [Rcx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_10: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_10: !PXOR mm5, mm5 !movq [Edx], mm5 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovq [Edx], xmm4 !PXOR mm3, mm3 ; + !movq [Ecx], mm3 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_10: !PXOR mm5, mm5 !movq [Rdx], mm5 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovq [Rdx], xmm14 !PXOR mm3, mm3 ; + !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Slash_11: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Slash_11: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !vmovq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Slash_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Slash_11: !PXOR xmm7, xmm7 ; + !vmovq [Rdx], xmm7 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !vmovq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Slash_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_1: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_1: !movq xmm4, [Ecx] !movq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_1: !movq xmm14, [Rcx] !movq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_2: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_2: !PXOR xmm4, xmm4 ; + !movq xmm4, [Ecx] !movq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_2: !PXOR xmm14, xmm14 ; + !movq xmm14, [Rcx] !movq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_3: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_3: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_3: !vmovq [Rdx], xmm7 ; + !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_4: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_4: !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !vmovq [Ecx], xmm7 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_4: !vmovq [Rdx], xmm7 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !vmovq [Rcx], xmm7 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_5: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_5: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !vmovq [Ecx], xmm7 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_5: !PXOR xmm7, xmm7 ; + !vmovq [Rdx], xmm7 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !vmovq [Rcx], xmm7 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_6: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_6: !PXOR mm5, mm5 !movq [Edx], mm5 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !movq [Ecx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_6: !PXOR mm5, mm5 !movq [Rdx], mm5 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !movq [Rcx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_7: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_7: !PXOR mm5, mm5 !movq [Edx], mm5 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !movq [Ecx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_7: !PXOR mm5, mm5 !movq [Rdx], mm5 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !movq [Rcx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_8: ; AVX ; ? CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR xmm3, xmm3 ; + !PXOR xmm6, xmm6 ; + !PXOR xmm2, xmm2 ; + !PXOR xmm7, xmm7 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_8: !vmovq [Edx], xmm3 ; + !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Ecx], mm5 ; + !PADDQ xmm6, xmm3 ; + !PADDQ xmm7, xmm2 ; + !movq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR mm5, mm5 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_8: !PXOR xmm14, xmm14 !vmovq [Rdx], xmm3 !movq xmm14, [Rcx] !PADDQ xmm6, xmm3 ; !movq [Rdx], xmm14 !movq [Rcx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_9: ; AVX CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm2, xmm2 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_9: !PXOR xmm4, xmm4 !vmovq [Edx], xmm3 !movq xmm4, [Ecx] !PADDQ xmm6, xmm3 !PADDQ xmm7, xmm2 !movq [Edx], xmm4 !vmovq [Ecx], xmm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_9: !PXOR xmm14, xmm14 !vmovq [Rdx], xmm3 !movq xmm14, [Rcx] !PADDQ xmm6, xmm3 !movq [Rdx], xmm14 !vmovq [Rcx], xmm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_10: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_10: !PXOR mm5, mm5 !movq [Edx], mm5 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !PXOR mm3, mm3 !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_10: !PXOR mm5, mm5 !movq [Rdx], mm5 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !PXOR mm3, mm3 !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_11: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm3, xmm3 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_11: !PXOR xmm3, xmm3 !movq [Edx], xmm3 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR xmm3, xmm3 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_11: !PXOR xmm3, xmm3 !movq [Rdx], xmm3 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_1: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_1: !movq mm5, [Ecx] !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_1: !movq mm5, [Rcx] !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_2: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_2: !PXOR mm5, mm5 ; + !movq mm5, [Ecx] !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_2: !PXOR mm5, mm5 ; + !movq mm5, [Rcx] !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_3: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_3: !movq [Edx], mm3 ; + !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !movq [Ecx], mm3 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_3: !movq [Rdx], mm3 ; + !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !movq [Rcx], mm3 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_4: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_4: !PXOR mm3, mm3 ; + !movq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_4: !PXOR mm3, mm3 ; + !movq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_5: ; Star8+sse is best? Slash10+avx is best? Shine4+mmx is best? (machida?) ; Shine4(better for people) or Shine6 + mmx is best? nara Slash4 or Slash8 (better) + avx , Star3 or Star8 (better) + sse (Infinity blade HQ) ; sse2 only ShineX test please. ; mmx ha dac no kuse ga deyasui to omou (machida?) CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_5: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !PXOR mm3, mm3 ; + !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_5: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !PXOR mm3, mm3 ; + !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_6: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_6: !vmovq [Edx], xmm4 ; + !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !movq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_6: !vmovq [Rdx], xmm14 ; + !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !movq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_7: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_7: !PXOR xmm4, xmm4 ; + !vmovq [Edx], xmm4 ; + !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !PXOR mm1, mm1 ; + !movq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_7: !PXOR xmm14, xmm14 ; + !vmovq [Rdx], xmm14 ; + !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !PXOR mm1, mm1 ; + !movq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_8: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_8: !vmovq [Edx], xmm4 ; + !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !vmovq [Ecx], xmm7 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_8: !vmovq [Rdx], xmm14 ; + !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !vmovq [Rcx], xmm12 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_9: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_9: !PXOR xmm4, xmm4 ; + !vmovq [Edx], xmm4 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !PXOR xmm7, xmm7 ; + !vmovq [Ecx], xmm7 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR xmm12, xmm12 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_9: !PXOR xmm14, xmm14 ; + !vmovq [Rdx], xmm14 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !PXOR xmm12, xmm12 ; + !vmovq [Rcx], xmm12 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_10: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_10: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !PXOR mm4, mm4 ; + !movq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_10: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !PXOR mm4, mm4 ; + !movq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_11: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_11: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_11: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_1: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_1: !vmovq xmm4, [Ecx] !movdq2q mm5, xmm4 !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_1: !vmovq xmm14, [Rcx] !movdq2q mm5, xmm14 !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_2: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_2: !PXOR xmm4, xmm4 ; + !vmovq xmm4, [Ecx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm4 !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_2: !PXOR xmm14, xmm14 ; + !vmovq xmm14, [Rcx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm14 !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_3: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_3: !movq [Edx], mm3 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !movq [Ecx], mm3 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_3: !movq [Rdx], mm3 ; + !PXOR xmm14, xmm14 ; + !vmovq xmm14, [Rcx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm14 !movq [Rdx], mm5 !movq [Rcx], mm3 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_4: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_4: !PXOR mm3, mm3 ; + !movq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_4: !PXOR mm3, mm3 ; + !movq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_5: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_5: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !PXOR mm3, mm3 ; + !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_5: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !PXOR mm3, mm3 ; + !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_6: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_6: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !movq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_6: !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !movq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_7: ; [4.09] Snake best? CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_7: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !PXOR mm1, mm1 ; + !movq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_7: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !PXOR mm1, mm1 ; + !movq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_8: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR xmm6, xmm6 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_8: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !vmovq [Ecx], xmm6 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 ; + !PXOR xmm11, xmm11 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_8: !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !vmovq [Rcx], xmm11 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_9: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR xmm7, xmm7 !PXOR xmm6, xmm6 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_9: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !PXOR xmm6, xmm6 ; + !vmovq [Ecx], xmm6 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR xmm12, xmm12 !PXOR xmm11, xmm11 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_9: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !PXOR xmm11, xmm11 ; + !vmovq [Rcx], xmm11 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_10: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_10: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !PXOR mm4, mm4 ; + !movq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_10: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !PXOR mm4, mm4 ; + !movq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Snake_11: ; [4.09] Snake best? CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Snake_11: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Snake_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Snake_11: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Snake_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_1: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_1: !movq mm5, [Ecx] !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_1: !movq mm5, [Rcx] !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_2: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_2: !PXOR mm5, mm5 ; + !movq mm5, [Ecx] !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_2: !PXOR mm5, mm5 ; + !movq mm5, [Rcx] !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_3: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_3: !movntq [Edx], mm3 ; + !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !movntq [Ecx], mm3 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_3: !movntq [Rdx], mm3 ; + !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !movntq [Rcx], mm3 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_4: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_4: !PXOR mm3, mm3 ; + !movntq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !movntq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_4: !PXOR mm3, mm3 ; + !movntq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !movntq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_5: ; Star8+sse is best? Slash10+avx is best? Shine4+mmx is best? (machida?) ; Shine4(better for people) or Shine6 + mmx is best? nara Slash4 or Slash8 (better) + avx , Star3 or Star8 (better) + sse (Infinity blade HQ) ; sse2 only ShineX test please. ; mmx ha dac no kuse ga deyasui to omou (machida?) CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_5: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !PXOR mm3, mm3 ; + !movntq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_5: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !PXOR mm3, mm3 ; + !movntq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_6: T_Tune_Galaxy_7: T_Tune_Galaxy_8: T_Tune_Galaxy_9: T_Tune_Galaxy_10: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_10: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !PXOR mm4, mm4 ; + !movntq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_10: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !PXOR mm4, mm4 ; + !movntq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_11: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_11: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !movq mm3, mm5 ; [4.22] !movntq [Edx], mm3 ; [4.22] !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_11: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !movq mm3, mm5 ; [4.22] !movntq [Rdx], mm3 ; [4.22] !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_2_navx: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_2_navx: !PXOR mm5, mm5 ; + !movq mm5, [Ecx] !movq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_2_navx !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_2_navx: !PXOR mm5, mm5 ; + !movq mm5, [Rcx] !movq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_2_navx !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Star_10_navx: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Star_10_navx: !PXOR mm3, mm3 !movq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movq [Edx], mm5 !PXOR mm4, mm4 ; + !movq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Star_10_navx !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Star_10_navx: !PXOR mm3, mm3 !movq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movq [Rdx], mm5 !PXOR mm4, mm4 ; + !movq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Star_10_navx !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Shine_10_navx: CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Shine_10_navx: !PXOR mm5, mm5 !movq [Edx], mm5 !PXOR xmm4, xmm4 !movq xmm4, [Ecx] !movq [Edx], xmm4 !PXOR mm3, mm3 !movq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Shine_10_navx !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 ;checked 2014/11/05 15:54 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Shine_10_navx: !PXOR mm5, mm5 !movq [Rdx], mm5 !PXOR xmm14, xmm14 !movq xmm14, [Rcx] !movq [Rdx], xmm14 !PXOR mm3, mm3 !movq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Shine_10_navx !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Fstar_2_navx: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Fstar_2_navx: !PXOR mm5, mm5 ; + !movq mm5, [Ecx] !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Fstar_2_navx !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Fstar_2_navx: !PXOR mm5, mm5 ; + !movq mm5, [Rcx] !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Fstar_2_navx !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Fstar_10_navx: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Fstar_10_navx: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR mm5, mm5 !movq mm5, [Ecx] !movntq [Edx], mm5 !PXOR mm4, mm4 ; + !movntq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Fstar_10_navx !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Fstar_10_navx: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR mm5, mm5 !movq mm5, [Rcx] !movntq [Rdx], mm5 !PXOR mm4, mm4 ; + !movntq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Fstar_10_navx !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_1: ;- Blade 1 AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_1: !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_1: !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_2: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_2: !PXOR xmm4, xmm4 ; + !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_2: !PXOR xmm14, xmm14 ; + !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_3: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_3: !vmovntdq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_3: !vmovntdq [Rdx], xmm7 ; + !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_4: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_4: !vmovntdq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !vmovntdq [Ecx], xmm7 ; + !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_4: !vmovntdq [Rdx], xmm7 !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !vmovntdq [Rcx], xmm7 ; + !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_5: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_5: !PXOR xmm7, xmm7 ; + !vmovntdq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !vmovntdq [Ecx], xmm7 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_5: !PXOR xmm7, xmm7 ; + !vmovntdq [Rdx], xmm7 !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !vmovntdq [Rcx], xmm7 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_6: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_6: !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_6: !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_7: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 ; + !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_7: !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 !movntq [Ecx], mm5 ; + !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_7: !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 !movntq [Rcx], mm5 ; + !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_8: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_8: !movntq [Edx], mm5 ; + !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 !movntq [Ecx], mm5 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_8: !movntq [Rdx], mm5 ; + !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 !movntq [Rcx], mm5 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_9: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_9: !PXOR mm5, mm5 ; + !movntq [Edx], mm5 !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 !movntq [Ecx], mm5 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_9: !PXOR mm5, mm5 ; + !movntq [Rdx], mm5 !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 !movntq [Rcx], mm5 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_10: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm7, xmm7 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_10: !PXOR mm5, mm5 !movntq [Edx], mm5 !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vpaddq xmm6, xmm3, xmm7 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 !PXOR mm3, mm3 ; + !movntq [Ecx], mm3 ; + !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_10: !PXOR mm5, mm5 !movntq [Rdx], mm5 !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 !PXOR mm3, mm3 ; + !movntq [Rcx], mm3 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_11: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 CompilerCase #PB_Processor_x86 !PXOR xmm7, xmm7 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_11: !PXOR xmm7, xmm7 ; + !vmovntdq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !vmovntdq [Edx], xmm4 !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm7, xmm7 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_11: !PXOR xmm7, xmm7 ; + !vmovntdq [Rdx], xmm7 ; + !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] !vmovntdq [Rdx], xmm14 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_1: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_1: !vmovq xmm4, [Ecx] !movdq2q mm5, xmm4 !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_1 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_1: !vmovq xmm14, [Rcx] !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_1 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_2: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; matuoka recommend . !PXOR mm5, mm5 !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_2: !PXOR xmm4, xmm4 ; + !vmovq xmm4, [Ecx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm4 !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_2 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_2: !PXOR xmm14, xmm14 ; + !vmovq xmm14, [Rcx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_2 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_3: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_3: !movntq [Edx], mm3 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !movntq [Ecx], mm3 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_3 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_3: !movntq [Rdx], mm3 ; + !PXOR xmm14, xmm14 ; + !vmovq xmm14, [Rcx] !PXOR mm5, mm5 ; + !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !movntq [Rcx], mm3 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_3 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_4: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_4: !PXOR mm3, mm3 ; + !movntq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !movntq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_4 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_4: !PXOR mm3, mm3 ; + !movntq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !movntq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_4 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_5: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR mm3, mm3 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_5: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !PXOR mm3, mm3 ; + !movntq [Ecx], mm3 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_5 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR mm3, mm3 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_5: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !PXOR mm3, mm3 ; + !movntq [Rcx], mm3 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_5 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_6: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_6: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !movntq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_6 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_6: !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !movntq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_6 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_7: ; [4.09] Orochi best? CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR mm1, mm1 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_7: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !PXOR mm1, mm1 ; + !movntq [Ecx], mm1 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_7 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !PXOR mm1, mm1 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_7: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !PXOR mm1, mm1 ; + !movntq [Rcx], mm1 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_7 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_8: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !PXOR xmm6, xmm6 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_8: !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !vmovq [Ecx], xmm6 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_8 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 ; + !PXOR xmm11, xmm11 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_8: !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !vmovq [Rcx], xmm11 ; + !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_8 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_9: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 !PXOR xmm7, xmm7 !PXOR xmm6, xmm6 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_9: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !PXOR xmm6, xmm6 ; + !vmovq [Ecx], xmm6 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_9 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 !PXOR xmm12, xmm12 !PXOR xmm11, xmm11 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_9: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !PXOR xmm11, xmm11 ; + !vmovq [Rcx], xmm11 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_9 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_10: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_10: !PXOR mm3, mm3 !movntq [Edx], mm3 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !PXOR mm4, mm4 ; + !movntq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_10 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_10: !PXOR mm3, mm3 !movntq [Rdx], mm3 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !PXOR mm4, mm4 ; + !movntq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_10 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_11: ; [4.09] Orochi best? CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 ; XMM 14 12 11 10 4 7 6 3 !PXOR mm5, mm5 !PXOR xmm4, xmm4 ; + !PXOR xmm7, xmm7 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_11: !PXOR xmm7, xmm7 ; + !vmovq [Edx], xmm7 ; + !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !movntq [Edx], mm5 !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_11 !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR xmm14, xmm14 ; + !PXOR xmm12, xmm12 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_11: !PXOR xmm12, xmm12 ; + !vmovq [Rdx], xmm12 ; + !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !movntq [Rdx], mm5 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_11 !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Galaxy_10_plus: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm1, mm1 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Galaxy_10_plus: !PXOR mm1, mm1 !movntq [Edx], mm1 !PXOR mm5, mm5 !movq mm5, [Ecx] !PXOR mm3, mm3 !movq mm3, mm5 !movntq [Edx], mm5 ; for DDR4 !movntq [Edx], mm3 ; for DDR4 !PXOR mm4, mm4 ; + !movntq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Galaxy_10_plus !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm1, mm1 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Galaxy_10_plus: !PXOR mm1, mm1 !movntq [Rdx], mm1 !PXOR mm5, mm5 !movq mm5, [Rcx] !PXOR mm3, mm3 !movq mm3, mm5 !movntq [Rdx], mm5 ; for DDR4 !movntq [Rdx], mm3 ; for DDR4 !PXOR mm4, mm4 ; + !movntq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Galaxy_10_plus !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Blade_10_plus: ; AVX CompilerSelect #PB_Compiler_Processor ; XMM 14 12 11 10 4 7 6 3 2 [2 add, 4.61] CompilerCase #PB_Processor_x86 !PXOR xmm4, xmm4 !PXOR xmm7, xmm7 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !PXOR xmm3, xmm3 !PXOR xmm6, xmm6 !PXOR xmm2, xmm2 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Blade_10_plus: !PXOR mm5, mm5 !movntq [Edx], mm5 !PXOR xmm4, xmm4 !vmovdqa xmm4, [Ecx] !PXOR xmm7, xmm7 !vmovdqa xmm7, xmm4 !vpaddq xmm6, xmm3, xmm2 ; need for Future ; checked 2014/11/05 15:59 !vmovntdq [Edx], xmm4 ; for DDR4 !vmovntdq [Edx], xmm7 ; for DDR4 !PXOR mm3, mm3 ; + !movntq [Ecx], mm3 ; + !ADD Ecx, 16 !ADD Edx, 16 !SUB Eax, 16 !JNZ Tune_Blade_10_plus !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR xmm14, xmm14 !PXOR xmm12, xmm12 !PXOR mm5, mm5 !PXOR mm3, mm3 ; + !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Blade_10_plus: !PXOR mm5, mm5 !movntq [Rdx], mm5 !PXOR xmm14, xmm14 !vmovdqa xmm14, [Rcx] !PXOR xmm12, xmm12 !vmovdqa xmm12, xmm14 ; !vpaddq xmm6, xmm3, xmm7 Not need for clear for Future (Must remove !!) !vmovntdq [Rdx], xmm14 ; for DDR4 !vmovntdq [Rdx], xmm12 ; for DDR4 !PXOR mm3, mm3 ; + !movntq [Rcx], mm3 !ADD Rcx, 16 !ADD Rdx, 16 !SUB Rax, 16 !JNZ Tune_Blade_10_plus !emms Goto CopyMemory2_end CompilerEndSelect T_Tune_Orochi_10_plus: CompilerSelect #PB_Compiler_Processor ; mmx 5 3 1 4 7 CompilerCase #PB_Processor_x86 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR mm1, mm1 ; + !PXOR xmm4, xmm4 !MOV Eax, [p.v_s] !MOV Ecx, [p.p_memory_in] !MOV Edx, [p.p_memory_out] !Tune_Orochi_10_plus: !PXOR mm1, mm1 !movntq [Edx], mm1 !PXOR xmm4, xmm4 !vmovq xmm4, [Ecx] !PXOR mm5, mm5 !movdq2q mm5, xmm4 !PXOR mm3, mm3 !movq mm3, mm5 !movntq [Edx], mm5 ; for DDR4 !movntq [Edx], mm3 ; for DDR4 !PXOR mm4, mm4 ; + !movntq [Ecx], mm4 ; + !ADD Ecx, 8 !ADD Edx, 8 !SUB Eax, 8 !JNZ Tune_Orochi_10_plus !emms Goto CopyMemory2_end CompilerCase #PB_Processor_x64 !PXOR mm5, mm5 !PXOR mm3, mm3 !PXOR mm4, mm4 ; + !PXOR mm1, mm1 ; + !PXOR xmm14, xmm14 !MOV Rax, [p.v_s] !MOV Rcx, [p.p_memory_in] !MOV Rdx, [p.p_memory_out] !Tune_Orochi_10_plus: !PXOR mm1, mm1 !movntq [Rdx], mm1 !PXOR xmm14, xmm14 !vmovq xmm14, [Rcx] !PXOR mm5, mm5 !movdq2q mm5, xmm14 !PXOR mm3, mm3 !movq mm3, mm5 !movntq [Rdx], mm5 ; for DDR4 !movntq [Rdx], mm3 ; for DDR4 !PXOR mm4, mm4 ; + !movntq [Rcx], mm4 !ADD Rcx, 8 !ADD Rdx, 8 !SUB Rax, 8 !JNZ Tune_Orochi_10_plus !emms Goto CopyMemory2_end CompilerEndSelect CopyMemory2_end: EndProcedure
!WASAPI_Proc_LOOP_222_SS: !NOP QWORD [Rip] !NOP QWORD [Rip] !FNOP !FNOP !FNOP !FNOP !PXOR mm5, mm5 !MOVDQ2Q mm5, xmm13 !PXOR mm7, mm7 !PSLLW mm7, mm5 ;1 Left 1bit shift !PSLLW mm7, mm5 ;2 Left 1bit shift !PSLLW mm7, mm5 ;3 Left 1bit shift !PSLLW mm7, mm5 ;4 Left 1bit shift !PSLLW mm7, mm5 ;5 Left 1bit shift !PSLLW mm7, mm5 ;6 Left 1bit shift !PSLLW mm7, mm5 ;7 Left 1bit shift !PSLLW mm7, mm5 ;8 Left 1bit shift !PSLLW mm7, mm5 ;9 Left 1bit shift !PSLLW mm7, mm5 ;A Left 1bit shift !PSLLW mm7, mm5 ;B Left 1bit shift !PSLLW mm7, mm5 ;C Left 1bit shift !PSLLW mm7, mm5 ;D Left 1bit shift !PSLLW mm7, mm5 ;E Left 1bit shift !PSLLW mm7, mm5 ;F Left 1bit shift !PSLLW mm7, mm5 ;0 Left 1bit shift !MOVDQ2Q mm7, xmm13 ; mm7 = 8 !PXOR mm5, mm5 !PXOR mm5, mm5 !PAND mm5, mm5 !PAND mm5, mm5 !PSLLW mm5, mm7 ;1 Left 1bit shift !PSLLW mm5, mm7 ;2 Left 1bit shift !PSLLW mm5, mm7 ;3 Left 1bit shift !PSLLW mm5, mm7 ;4 Left 1bit shift !PSLLW mm5, mm7 ;5 Left 1bit shift !PSLLW mm5, mm7 ;6 Left 1bit shift !PSLLW mm5, mm7 ;7 Left 1bit shift !PSLLW mm5, mm7 ;8 Left 1bit shift !PSLLW mm5, mm7 ;9 Left 1bit shift !PSLLW mm5, mm7 ;A Left 1bit shift !PSLLW mm5, mm7 ;B Left 1bit shift !PSLLW mm5, mm7 ;C Left 1bit shift !PSLLW mm5, mm7 ;D Left 1bit shift !PSLLW mm5, mm7 ;E Left 1bit shift !PSLLW mm5, mm7 ;F Left 1bit shift !PSLLW mm5, mm7 ;0 Left 1bit shift XOR_R8_R8 !MOVQ R8, mm5 MOV_Rdx_Rdx_Up !MOV R8, Rdx MOV_R8_R8_Down XOR_Rdx_Rdx !MOVQ Rdx, mm5 MOV_Rdx_Rdx_Down MOV_R9_R9_Up !MOV Rdx, R9 MOV_Rdx_Rdx_Down !MOVQ mm5, Rcx !NOP QWORD [Rip] !NOP QWORD [R8] !MOVQ mm0, [R8] !PSLLW mm0, mm7 ;1 Left 1bit shift !PSLLW mm0, mm7 ;2 Left 1bit shift !PSLLW mm0, mm7 ;3 Left 1bit shift !PSLLW mm0, mm7 ;4 Left 1bit shift !PSLLW mm0, mm7 ;5 Left 1bit shift !PSLLW mm0, mm7 ;6 Left 1bit shift !PSLLW mm0, mm7 ;7 Left 1bit shift !PSLLW mm0, mm7 ;8 Left 1bit shift !PSLLW mm0, mm7 ;9 Left 1bit shift !PSLLW mm0, mm7 ;A Left 1bit shift !PSLLW mm0, mm7 ;B Left 1bit shift !PSLLW mm0, mm7 ;C Left 1bit shift !PSLLW mm0, mm7 ;D Left 1bit shift !PSLLW mm0, mm7 ;E Left 1bit shift !PSLLW mm0, mm7 ;F Left 1bit shift !PSLLW mm0, mm7 ;0 Left 1bit shift !MOVQ mm2, [R8] !PSLLW mm2, mm7 ;1 Left 1bit shift !PSLLW mm2, mm7 ;2 Left 1bit shift !PSLLW mm2, mm7 ;3 Left 1bit shift !PSLLW mm2, mm7 ;4 Left 1bit shift !PSLLW mm2, mm7 ;5 Left 1bit shift !PSLLW mm2, mm7 ;6 Left 1bit shift !PSLLW mm2, mm7 ;7 Left 1bit shift !PSLLW mm2, mm7 ;8 Left 1bit shift !PSLLW mm2, mm7 ;9 Left 1bit shift !PSLLW mm2, mm7 ;A Left 1bit shift !PSLLW mm2, mm7 ;B Left 1bit shift !PSLLW mm2, mm7 ;C Left 1bit shift !PSLLW mm2, mm7 ;D Left 1bit shift !PSLLW mm2, mm7 ;E Left 1bit shift !PSLLW mm2, mm7 ;F Left 1bit shift !PSLLW mm2, mm7 ;0 Left 1bit shift !MOVQ mm4, [R8] !PSLLW mm4, mm7 ;1 Left 1bit shift !PSLLW mm4, mm7 ;2 Left 1bit shift !PSLLW mm4, mm7 ;3 Left 1bit shift !PSLLW mm4, mm7 ;4 Left 1bit shift !PSLLW mm4, mm7 ;5 Left 1bit shift !PSLLW mm4, mm7 ;6 Left 1bit shift !PSLLW mm4, mm7 ;7 Left 1bit shift !PSLLW mm4, mm7 ;8 Left 1bit shift !PSLLW mm4, mm7 ;9 Left 1bit shift !PSLLW mm4, mm7 ;A Left 1bit shift !PSLLW mm4, mm7 ;B Left 1bit shift !PSLLW mm4, mm7 ;C Left 1bit shift !PSLLW mm4, mm7 ;D Left 1bit shift !PSLLW mm4, mm7 ;E Left 1bit shift !PSLLW mm4, mm7 ;F Left 1bit shift !PSLLW mm4, mm7 ;0 Left 1bit shift !MOVQ mm6, [R8] !PSLLW mm6, mm7 ;1 Left 1bit shift !PSLLW mm6, mm7 ;2 Left 1bit shift !PSLLW mm6, mm7 ;3 Left 1bit shift !PSLLW mm6, mm7 ;4 Left 1bit shift !PSLLW mm6, mm7 ;5 Left 1bit shift !PSLLW mm6, mm7 ;6 Left 1bit shift !PSLLW mm6, mm7 ;7 Left 1bit shift !PSLLW mm6, mm7 ;8 Left 1bit shift !PSLLW mm6, mm7 ;9 Left 1bit shift !PSLLW mm6, mm7 ;A Left 1bit shift !PSLLW mm6, mm7 ;B Left 1bit shift !PSLLW mm6, mm7 ;C Left 1bit shift !PSLLW mm6, mm7 ;D Left 1bit shift !PSLLW mm6, mm7 ;E Left 1bit shift !PSLLW mm6, mm7 ;F Left 1bit shift !PSLLW mm6, mm7 ;0 Left 1bit shift SetR9_SHL_CL_Full !MOVQ mm0, R9 XOR_R9_R9 !INC R9b !INC R9b !INC R9b !INC R9b !INC R9b !INC R9b !INC R9b !INC R9b ;8 MOVZX_R9 ; 6 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm6, R9 ; 6 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm2, Rdx ; 6 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm4, R8 ; 6 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rcx, mm5 !NOP QWORD [Rip-32] !XCHG spl, bpl !XCHG Rsp, Rsp !XCHG Rbp, Rbp !XCHG bpl, spl ; 697 @@ !NOP QWORD [Rip+360] !NOP QWORD [Rip+376] !NOP QWORD [Rip+392] !NOP QWORD [Rip+408] !NOP QWORD [Rip+424] !NOP QWORD [Rip+440] !NOP QWORD [Rip+456] !NOP QWORD [Rip+472] !NOP QWORD [Rip+488] !NOP QWORD [Rip+504] !NOP QWORD [Rip+520] !NOP QWORD [Rip+536] !NOP QWORD [Rip+552] !NOP QWORD [Rip+568] !NOP QWORD [Rip+584] !NOP QWORD [Rip+600] !NOP QWORD [Rip+616] !NOP QWORD [Rip+632] !NOP QWORD [Rip+648] !NOP QWORD [Rip+664] !NOP QWORD [Rip+680] !NOP QWORD [Rip+696] !NOP QWORD [Rip+712] !NOP QWORD [Rip+728] !NOP QWORD [Rip+744] !NOP QWORD [Rip+760] !NOP QWORD [Rip+776] !NOP QWORD [Rip+792] !NOP QWORD [Rip+808] !NOP QWORD [Rip+824] !NOP QWORD [Rip+840] !NOP QWORD [Rip+856] !NOP QWORD [Rip+872] !NOP QWORD [Rip+888] !NOP QWORD [Rip+904] !NOP QWORD [Rip+920] !NOP QWORD [Rip+936] !NOP QWORD [Rip+952] !NOP QWORD [Rip+968] !NOP QWORD [Rip+984] !NOP QWORD [Rip+1000] !NOP QWORD [Rip+1016] !NOP QWORD [Rip+1032] !NOP QWORD [Rip+1048] !NOP QWORD [Rip] !NOP QWORD [Rip] !WASAPI_Proc_LOOP_222: !NOP QWORD [Rip] !NOP QWORD [Rip] !FNOP ; for wide !FNOP !FNOP !FNOP ;4 !XCHG ch, cl !XCHG cl, ch !MOVDQ2Q mm1, xmm0 !MOVDQ2Q mm3, xmm0 !MOVDQ2Q mm5, xmm0 !MOVQ mm1, R8 !MOVQ mm3, Rdx !MOVQ mm5, Rcx XOR_R8_R8 XOR_Rdx_Rdx XOR_Rcx_Rcx !MOVQ R8, mm1 !MOVQ Rdx, mm3 !MOVQ Rcx, mm5 !NOP QWORD [Rip] !NOP QWORD [R8] ; !MOVQ mm1, [R8] !PSLLW mm1, mm7 ;1 Left 1bit shift !PSLLW mm1, mm7 ;2 Left 1bit shift !PSLLW mm1, mm7 ;3 Left 1bit shift !PSLLW mm1, mm7 ;4 Left 1bit shift !PSLLW mm1, mm7 ;5 Left 1bit shift !PSLLW mm1, mm7 ;6 Left 1bit shift !PSLLW mm1, mm7 ;7 Left 1bit shift !PSLLW mm1, mm7 ;8 Left 1bit shift !PSLLW mm1, mm7 ;9 Left 1bit shift !PSLLW mm1, mm7 ;A Left 1bit shift !PSLLW mm1, mm7 ;B Left 1bit shift !PSLLW mm1, mm7 ;C Left 1bit shift !PSLLW mm1, mm7 ;D Left 1bit shift !PSLLW mm1, mm7 ;E Left 1bit shift !PSLLW mm1, mm7 ;F Left 1bit shift !PSLLW mm1, mm7 ;0 Left 1bit shift ; !MOVQ mm3, [R8] !PSLLW mm3, mm7 ;1 Left 1bit shift !PSLLW mm3, mm7 ;2 Left 1bit shift !PSLLW mm3, mm7 ;3 Left 1bit shift !PSLLW mm3, mm7 ;4 Left 1bit shift !PSLLW mm3, mm7 ;5 Left 1bit shift !PSLLW mm3, mm7 ;6 Left 1bit shift !PSLLW mm3, mm7 ;7 Left 1bit shift !PSLLW mm3, mm7 ;8 Left 1bit shift !PSLLW mm3, mm7 ;9 Left 1bit shift !PSLLW mm3, mm7 ;A Left 1bit shift !PSLLW mm3, mm7 ;B Left 1bit shift !PSLLW mm3, mm7 ;C Left 1bit shift !PSLLW mm3, mm7 ;D Left 1bit shift !PSLLW mm3, mm7 ;E Left 1bit shift !PSLLW mm3, mm7 ;F Left 1bit shift !PSLLW mm3, mm7 ;0 Left 1bit shift ; !MOVQ mm5, [R8] !PSLLW mm5, mm7 ;1 Left 1bit shift !PSLLW mm5, mm7 ;2 Left 1bit shift !PSLLW mm5, mm7 ;3 Left 1bit shift !PSLLW mm5, mm7 ;4 Left 1bit shift !PSLLW mm5, mm7 ;5 Left 1bit shift !PSLLW mm5, mm7 ;6 Left 1bit shift !PSLLW mm5, mm7 ;7 Left 1bit shift !PSLLW mm5, mm7 ;8 Left 1bit shift !PSLLW mm5, mm7 ;9 Left 1bit shift !PSLLW mm5, mm7 ;A Left 1bit shift !PSLLW mm5, mm7 ;B Left 1bit shift !PSLLW mm5, mm7 ;C Left 1bit shift !PSLLW mm5, mm7 ;D Left 1bit shift !PSLLW mm5, mm7 ;E Left 1bit shift !PSLLW mm5, mm7 ;F Left 1bit shift !PSLLW mm5, mm7 ;0 Left 1bit shift ; !NOP QWORD [Rip] !NOP QWORD [Rdx] ; [12.05] !MOVQ mm3, [Rdx] !MOVQ mm3, [Rdx] ; for Natural !MOVQ mm5, mm3 !PXOR mm3, mm0 ; !REVERSE! !REVERSE! ; !NOP QWORD [Rip] !NOP QWORD [R8] ; [12.05] !MOVNTQ [R8], mm1 ; 0 !MOVNTQ [R8], mm3 ; Reverse !MOVNTQ [R8], mm5 ; Set ; !NOP QWORD [Rip] !NOP QWORD [R8] ; !MOVQ mm1, [R8] !PSLLW mm1, mm7 ;1 Left 1bit shift !PSLLW mm1, mm7 ;2 Left 1bit shift !PSLLW mm1, mm7 ;3 Left 1bit shift !PSLLW mm1, mm7 ;4 Left 1bit shift !PSLLW mm1, mm7 ;5 Left 1bit shift !PSLLW mm1, mm7 ;6 Left 1bit shift !PSLLW mm1, mm7 ;7 Left 1bit shift !PSLLW mm1, mm7 ;8 Left 1bit shift !PSLLW mm1, mm7 ;9 Left 1bit shift !PSLLW mm1, mm7 ;A Left 1bit shift !PSLLW mm1, mm7 ;B Left 1bit shift !PSLLW mm1, mm7 ;C Left 1bit shift !PSLLW mm1, mm7 ;D Left 1bit shift !PSLLW mm1, mm7 ;E Left 1bit shift !PSLLW mm1, mm7 ;F Left 1bit shift !PSLLW mm1, mm7 ;0 Left 1bit shift ; !MOVQ mm3, [R8] !PSLLW mm3, mm7 ;1 Left 1bit shift !PSLLW mm3, mm7 ;2 Left 1bit shift !PSLLW mm3, mm7 ;3 Left 1bit shift !PSLLW mm3, mm7 ;4 Left 1bit shift !PSLLW mm3, mm7 ;5 Left 1bit shift !PSLLW mm3, mm7 ;6 Left 1bit shift !PSLLW mm3, mm7 ;7 Left 1bit shift !PSLLW mm3, mm7 ;8 Left 1bit shift !PSLLW mm3, mm7 ;9 Left 1bit shift !PSLLW mm3, mm7 ;A Left 1bit shift !PSLLW mm3, mm7 ;B Left 1bit shift !PSLLW mm3, mm7 ;C Left 1bit shift !PSLLW mm3, mm7 ;D Left 1bit shift !PSLLW mm3, mm7 ;E Left 1bit shift !PSLLW mm3, mm7 ;F Left 1bit shift !PSLLW mm3, mm7 ;0 Left 1bit shift ; !MOVQ mm5, [R8] !PSLLW mm5, mm7 ;1 Left 1bit shift !PSLLW mm5, mm7 ;2 Left 1bit shift !PSLLW mm5, mm7 ;3 Left 1bit shift !PSLLW mm5, mm7 ;4 Left 1bit shift !PSLLW mm5, mm7 ;5 Left 1bit shift !PSLLW mm5, mm7 ;6 Left 1bit shift !PSLLW mm5, mm7 ;7 Left 1bit shift !PSLLW mm5, mm7 ;8 Left 1bit shift !PSLLW mm5, mm7 ;9 Left 1bit shift !PSLLW mm5, mm7 ;A Left 1bit shift !PSLLW mm5, mm7 ;B Left 1bit shift !PSLLW mm5, mm7 ;C Left 1bit shift !PSLLW mm5, mm7 ;D Left 1bit shift !PSLLW mm5, mm7 ;E Left 1bit shift !PSLLW mm5, mm7 ;F Left 1bit shift !PSLLW mm5, mm7 ;0 Left 1bit shift ; !MOVQ mm3, [R8] !MOVQ mm3, [R8] ; for Natural !MOVQ mm5, mm3 !PXOR mm3, mm0 ; !REVERSE! !REVERSE! ; !NOP QWORD [Rip] !NOP QWORD [R8] ; [12.05] !MOVNTQ [R8], mm1 ; 0 !MOVNTQ [R8], mm3 ; Reverse !MOVNTQ [R8], mm5 ; Set ; !NOP QWORD [Rip] !NOP QWORD [R8] !PADDQ mm2, mm6 !MOVQ Rdx, mm2 MOV_Rdx_Rdx_Down !PADDQ mm4, mm6 !MOVQ R8, mm4 MOV_R8_R8_Down !DEC Rcx !DEC Rcx !DEC Rcx !DEC Rcx ;4 !DEC Rcx !DEC Rcx !DEC Rcx !DEC Rcx ;8 ;dame ; ; !IgaHachimanGoo20190101_1A: !FNOP ; for wide !FNOP !FNOP !FNOP ;4 !NOP QWORD [Rip] ; [12.10 - 2.97] !NOP QWORD [Rip] ; [12.10 - 2.97] !JNZ QWORD WASAPI_Proc_LOOP_222 ; 697 @@ End ; CopyMemory(*bufferDecode+WasapiPos, *buffer, length) ; or very light memory copy process ; result = length : WasapiPos + result !WAIT ;1 [11.24 - 144] !WAIT ; no fwait !WAIT ; wait with FNOP !WAIT ;4 !XCHG ch, cl !XCHG cl, ch
Nontallion 14.28 でも「まだ手を抜いてるの!!」
音量セットアップについて、高級オーディオと低価格USB-DACの音質差が消失するから、そこまで踏み込むのは止めようと書いた後、音楽業界の裏から「まだ手を抜いてるの!!妥協なくやってと言ったよ!!」と言われてしまい、それなら手法を公開した上で進めないと「自分の危険を考えた」。それで、どのようにコードを記述しているのか、Generate Program を公開しておこうと思いました。ビット状態を考えて「それを仕様書に書いて稟議を通す」のは愚かに思います。1人で「通常は15人必要な音楽再生ソフトの研究開発」をやるためには、できるだけ作業を「トヨタ自動車の定番である、カイゼン」を進めて、作業時間を短くしなければ達成できません。
Rcx はカウンターレジスタですので、数値の信頼性は極めて高い設計である。それで Rcx を初期化後、INC cl した後に MOVZX Rcx, cl によりゼロ拡張を行う。それを mm5 へセットして、mm1 に対して WORD 単位の左シフト命令を 16回行って、mm1 を初期化する。次は mm1 へ セットして、mm5 に対しても同様に初期化する。その後に Generate Program により作られた Float 1.000 を作る処理を貼り付けて、完成した。
Macro MacroMakeFloat XOR_Rcx_Rcx Set_CL1 MOVZX_Rcx !MOVQ mm5, Rcx !PSLLW mm1, mm5 ;1 Left 1bit shift !PSLLW mm1, mm5 ;2 Left 1bit shift !PSLLW mm1, mm5 ;3 Left 1bit shift !PSLLW mm1, mm5 ;4 Left 1bit shift !PSLLW mm1, mm5 ;5 Left 1bit shift !PSLLW mm1, mm5 ;6 Left 1bit shift !PSLLW mm1, mm5 ;7 Left 1bit shift !PSLLW mm1, mm5 ;8 Left 1bit shift !PSLLW mm1, mm5 ;9 Left 1bit shift !PSLLW mm1, mm5 ;A Left 1bit shift !PSLLW mm1, mm5 ;B Left 1bit shift !PSLLW mm1, mm5 ;C Left 1bit shift !PSLLW mm1, mm5 ;D Left 1bit shift !PSLLW mm1, mm5 ;E Left 1bit shift !PSLLW mm1, mm5 ;F Left 1bit shift !PSLLW mm1, mm5 ;0 Left 1bit shift !MOVQ mm1, Rcx !PSLLW mm5, mm1 ;1 Left 1bit shift !PSLLW mm5, mm1 ;2 Left 1bit shift !PSLLW mm5, mm1 ;3 Left 1bit shift !PSLLW mm5, mm1 ;4 Left 1bit shift !PSLLW mm5, mm1 ;5 Left 1bit shift !PSLLW mm5, mm1 ;6 Left 1bit shift !PSLLW mm5, mm1 ;7 Left 1bit shift !PSLLW mm5, mm1 ;8 Left 1bit shift !PSLLW mm5, mm1 ;9 Left 1bit shift !PSLLW mm5, mm1 ;A Left 1bit shift !PSLLW mm5, mm1 ;B Left 1bit shift !PSLLW mm5, mm1 ;C Left 1bit shift !PSLLW mm5, mm1 ;D Left 1bit shift !PSLLW mm5, mm1 ;E Left 1bit shift !PSLLW mm5, mm1 ;F Left 1bit shift !PSLLW mm5, mm1 ;0 Left 1bit shift ; mm5 = 0000 , mm1 = 001 ; ;1 = SHL R8, cl + INC R8b ;PSLLQ mm5, mm1 ;PADDQ mm5, mm1 ; ;0 = SHL R8, cl ;PSLLQ mm5, mm1 ; !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 EndMacro Macro MacroMakeFloatFF XOR_Rcx_Rcx Set_CL1 MOVZX_Rcx !MOVQ mm5, Rcx !PSLLW mm1, mm5 ;1 Left 1bit shift !PSLLW mm1, mm5 ;2 Left 1bit shift !PSLLW mm1, mm5 ;3 Left 1bit shift !PSLLW mm1, mm5 ;4 Left 1bit shift !PSLLW mm1, mm5 ;5 Left 1bit shift !PSLLW mm1, mm5 ;6 Left 1bit shift !PSLLW mm1, mm5 ;7 Left 1bit shift !PSLLW mm1, mm5 ;8 Left 1bit shift !PSLLW mm1, mm5 ;9 Left 1bit shift !PSLLW mm1, mm5 ;A Left 1bit shift !PSLLW mm1, mm5 ;B Left 1bit shift !PSLLW mm1, mm5 ;C Left 1bit shift !PSLLW mm1, mm5 ;D Left 1bit shift !PSLLW mm1, mm5 ;E Left 1bit shift !PSLLW mm1, mm5 ;F Left 1bit shift !PSLLW mm1, mm5 ;0 Left 1bit shift !MOVQ mm1, Rcx !PSLLW mm5, mm1 ;1 Left 1bit shift !PSLLW mm5, mm1 ;2 Left 1bit shift !PSLLW mm5, mm1 ;3 Left 1bit shift !PSLLW mm5, mm1 ;4 Left 1bit shift !PSLLW mm5, mm1 ;5 Left 1bit shift !PSLLW mm5, mm1 ;6 Left 1bit shift !PSLLW mm5, mm1 ;7 Left 1bit shift !PSLLW mm5, mm1 ;8 Left 1bit shift !PSLLW mm5, mm1 ;9 Left 1bit shift !PSLLW mm5, mm1 ;A Left 1bit shift !PSLLW mm5, mm1 ;B Left 1bit shift !PSLLW mm5, mm1 ;C Left 1bit shift !PSLLW mm5, mm1 ;D Left 1bit shift !PSLLW mm5, mm1 ;E Left 1bit shift !PSLLW mm5, mm1 ;F Left 1bit shift !PSLLW mm5, mm1 ;0 Left 1bit shift ; mm5 = 0000 , mm1 = 001 ; ;1 = SHL R8, cl + INC R8b ;PSLLQ mm5, mm1 ;PADDQ mm5, mm1 ; ;0 = SHL R8, cl ;PSLLQ mm5, mm1 ; !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 EndMacro Global a.f = 0.05000 Global b.i Procedure GenerateFloatASM() Debug "; **** "+StrF(a,5) Debug "XOR_Rcx_Rcx" Debug "Set_CL1" Debug "MOVZX_Rcx" !XOR Eax, Eax !MOV Eax, [v_a] !XOR R8, R8 ; ; Rax = 1065353215 ; Float1000 = 0.99999994039536 ; !MOV Rax, 1065353215 !XOR Rax, Rax !NOT Rax ; !MOV R8, Rax !MOV [v_b], R8 For I=63 To 1 Step -1 ; For I=30 To 1 Step -1 If b&( 2 << I ) Debug "!PADDQ mm5, mm1" Debug "!PSLLQ mm5, mm1" Else Debug "!PSLLQ mm5, mm1" EndIf Next If b&2 Debug "!PADDQ mm5, mm1" Debug "!PSLLQ mm5, mm1" Else Debug "!PSLLQ mm5, mm1" EndIf If b&1 Debug "!PADDQ mm5, mm1" Else ; st.s + "0" EndIf EndProcedure a = 1.00000: GenerateFloatASM()
それで聞くと「きれいな音波はできた」、しかし「高級オーディオでは不満の音になった」、と考える。常に想定では「妥協なく」と言えるためには、自分の感想など必要ない、自分の想定する視野を広げるためには、「きれいな音波はできた、しかし、高級オーディオでは不満の音になった、と考える」の思考アクションが必要です。普通の技術者は「これでいい」と思う、その後、普通の技術者によって「カイゼンが必要だ!」と言って、普通の技術者は「これでいい、と思った状態を作るのに、また数年かかる」となって、トヨタ自動車は技術競争に負けている、と考える。先に進めるためには、「妥協なく」の想定が甘ければ、簡単に技術で抜かれる。
カイゼン
ASIO_ChannelSetVolume_Stabilizer の初期化処理、まだ甘い
いま、考えただけで「約4年間の技術競争について、ショートカット」したと考えると、XOR_Rcx_Rcx Set_CL1 = XOR_Rcx_Rcx XOR_Rcx_Rcx INC cl となるから、もっと最適化を進めると Set_CL1 だけで十分と考えた。それなら R8 = 0 なら MOVQ Rcx, mm3 になるのなら、mm5 の初期化後に MOVQ Rcx, mm5 のほうがいい。そうして、Nontallion 14.29 は処理内容の最適化を進めます。"0" についての Windwos API セットでは極めて慎重にならないと良くならない。それであれば、単純に XOR_Rcx_Rcx だけのほうが良い。
Macro ASIO_ChannelSetVolume_Stabilizer_Pretime Set_CL1 MOVZX_Rcx !MOVQ mm5, Rcx !PSLLW mm1, mm5 ;1 Left 1bit shift !PSLLW mm1, mm5 ;2 Left 1bit shift !PSLLW mm1, mm5 ;3 Left 1bit shift !PSLLW mm1, mm5 ;4 Left 1bit shift !PSLLW mm1, mm5 ;5 Left 1bit shift !PSLLW mm1, mm5 ;6 Left 1bit shift !PSLLW mm1, mm5 ;7 Left 1bit shift !PSLLW mm1, mm5 ;8 Left 1bit shift !PSLLW mm1, mm5 ;9 Left 1bit shift !PSLLW mm1, mm5 ;A Left 1bit shift !PSLLW mm1, mm5 ;B Left 1bit shift !PSLLW mm1, mm5 ;C Left 1bit shift !PSLLW mm1, mm5 ;D Left 1bit shift !PSLLW mm1, mm5 ;E Left 1bit shift !PSLLW mm1, mm5 ;F Left 1bit shift !PSLLW mm1, mm5 ;0 Left 1bit shift !MOVQ mm1, Rcx !PSLLW mm5, mm1 ;1 Left 1bit shift !PSLLW mm5, mm1 ;2 Left 1bit shift !PSLLW mm5, mm1 ;3 Left 1bit shift !PSLLW mm5, mm1 ;4 Left 1bit shift !PSLLW mm5, mm1 ;5 Left 1bit shift !PSLLW mm5, mm1 ;6 Left 1bit shift !PSLLW mm5, mm1 ;7 Left 1bit shift !PSLLW mm5, mm1 ;8 Left 1bit shift !PSLLW mm5, mm1 ;9 Left 1bit shift !PSLLW mm5, mm1 ;A Left 1bit shift !PSLLW mm5, mm1 ;B Left 1bit shift !PSLLW mm5, mm1 ;C Left 1bit shift !PSLLW mm5, mm1 ;D Left 1bit shift !PSLLW mm5, mm1 ;E Left 1bit shift !PSLLW mm5, mm1 ;F Left 1bit shift !PSLLW mm5, mm1 ;0 Left 1bit shift !MOVQ2DQ xmm0, mm5 !MOVQ2DQ xmm1, mm5 !MOVQ2DQ xmm2, mm5 !MOVQ2DQ xmm3, mm5 ; ; Set_CL1 ; ; MOVZX_Rcx ; ; !MOVQ mm1, Rcx !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 !PSLLQ mm5, mm1 !PADDQ mm5, mm1 EndMacro Macro ASIO_ChannelSetVolume_Stabilizer ; CALL_ALL_REGISTER_INC255_DEC255_in ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloatFF XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255_in ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloatFF XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255 ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloat XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, Float_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255_in ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloatFF XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255 ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloat XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, Float_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255_in ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloatFF XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, NFloat_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; CALL_ALL_REGISTER_INC255_DEC255 ASIO_ChannelSetVolume_Stabilizer_Pretime ; mm5 = -1 !MOVQ2DQ xmm2, mm5 MacroMakeFloat XOR_R8_R8 XOR_Rcx_Rcx XOR_R9_R9 XOR_Rdx_Rdx XOR_Rax_Rax ; 5 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rdx, xmm2 !MOVQ2DQ xmm2, mm5 !MOVSS xmm2, xmm2 !EMMS ;BASS_ASIO_ChannelSetVolume(False, DM1, Float_1_000) !CALL QWORD BASS_ASIO_ChannelSetVolume ; 5 @@ End ; XOR_Rax_Rax EndMacro
Macro ASIO_ChannelSetVolume_Stabilizer_Pretime XOR_Rcx_Rcx Set_CL1 MOVZX_Rcx !MOVQ mm5, Rcx
;// Before !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rcx, QWORD 0 !INC cl ;// After !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rcx, QWORD 0 !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rcx, QWORD 0 !NOP QWORD [Rip-32] !INC cl
同じ命令を繰り返すと「ゲーム」「ワープロ」をしている人では影響ない。しかし「音楽」「オーディオ」「研究」をしている人で「最終結果はDAコンバーターにより得る」という場合、命令の繰り返しは結果へ影響する。それに気付いて作り始めたものが、All core any cures でした。以下は、最初のソースコードです。
; All core any cures ; Copyright (c) Hiroyuki Yokota Macro Cures ; 1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm0, mm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm1, mm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm2, mm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm3, mm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm4, mm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm5, mm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm6, mm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm7, mm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !emms CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm0, xmm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm1, xmm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm2, xmm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm3, xmm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm4, xmm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm5, xmm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm6, xmm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm7, xmm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 !PXOR xmm8, xmm8 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm9, xmm9 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm10, xmm10 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm11, xmm12 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm13, xmm13 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm14, xmm14 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm15, xmm15 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerEndIf ; 2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm0, mm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm1, mm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm2, mm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm3, mm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm4, mm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm5, mm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm6, mm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm7, mm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !emms CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm0, xmm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm1, xmm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm2, xmm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm3, xmm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm4, xmm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm5, xmm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm6, xmm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm7, xmm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 !PXOR xmm8, xmm8 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm9, xmm9 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm10, xmm10 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm11, xmm12 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm13, xmm13 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm14, xmm14 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm15, xmm15 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerEndIf ; 3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm0, mm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm1, mm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm2, mm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm3, mm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm4, mm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm5, mm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm6, mm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm7, mm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !emms CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm0, xmm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm1, xmm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm2, xmm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm3, xmm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm4, xmm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm5, xmm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm6, xmm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm7, xmm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 !PXOR xmm8, xmm8 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm9, xmm9 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm10, xmm10 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm11, xmm12 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm13, xmm13 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm14, xmm14 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm15, xmm15 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerEndIf ; 4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm0, mm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm1, mm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm2, mm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm3, mm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm4, mm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm5, mm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm6, mm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR mm7, mm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !emms CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm0, xmm0 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm1, xmm1 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm2, xmm2 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm3, xmm3 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm4, xmm4 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm5, xmm5 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm6, xmm6 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm7, xmm7 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerIf #PB_Compiler_Processor = #PB_Processor_x64 !PXOR xmm8, xmm8 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm9, xmm9 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm10, xmm10 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm11, xmm12 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm13, xmm13 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm14, xmm14 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect !PXOR xmm15, xmm15 CompilerSelect #PB_Compiler_Processor CompilerCase #PB_Processor_x86 !XOR Eax, Eax !XOR Ebx, Ebx !XOR Ecx, Ecx !XOR Edx, Edx !AND Eax, Eax !AND Ebx, Ebx !AND Ecx, Ecx !AND Edx, Edx CompilerCase #PB_Processor_x64 !XOR Rax, Rax !XOR Rbx, Rbx !XOR Rcx, Rcx !XOR Rdx, Rdx !AND Rax, Rax !AND Rbx, Rbx !AND Rcx, Rcx !AND Rdx, Rdx CompilerEndSelect CompilerEndIf EndMacro Procedure AnyCures(dummy.i) !NOP !NOP !Mov Eax, 16384 !First_process: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ First_process Cures Shared link.i AnyCures_1: If link = 2 Goto AnyCures_1 EndIf !NOP !NOP !Mov Eax, 16384 !AnyCures_1_S: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_1_S Cures !Mov Eax, 32768 !AnyCures_1_T: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_1_T AnyCures_2: If link = 4 Goto AnyCures_2 EndIf !NOP !NOP !Mov Eax, 16384 !AnyCures_2_S: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_2_S Cures !Mov Eax, 32768 !AnyCures_2_T: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_2_T AnyCures_3: If link = 8 Goto AnyCures_3 EndIf !NOP !NOP !Mov Eax, 16384 !AnyCures_3_S: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_3_S Cures !Mov Eax, 32768 !AnyCures_3_T: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_3_T AnyCures_4: If link = 16 Goto AnyCures_4 EndIf !NOP !NOP !Mov Eax, 16384 !AnyCures_4_S: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_4_S Cures !Mov Eax, 32768 !AnyCures_4_T: !FNOP !NOP !FNOP !NOP !Dec Eax !JNZ AnyCures_4_T EndProcedure Procedure Main() Shared link.i Protected Dim Thread.i(64) Protected AllCore.i For AllCore=1 To CountCPUs(#PB_System_CPUs) Thread(AllCore) = CreateThread(@AnyCures(), 4) ThreadPriority(Thread(AllCore), 32) Next Delay(128) : link + 2 ; 2 Delay(128) : link + 2 ; 4 Delay(128) : link + 4 ; 8 Delay(128) : link + 8 ; 16 For AllCore=1 To CountCPUs(#PB_System_CPUs) WaitThread(Thread(AllCore), 30) Next EndProcedure Main() End
この時に「分からないこと」、ソースコードを読んで分かりますか? 当時は 第4世代 Haswell Core i5 で、コアごとに Voltage regulator が使用されて、デジタルジッターが起きやすい状態になっていました。その対策として、Delay命令という方法で「コアを自動選択」した時に XOR 初期化をすると改善した。同時に「キュア処理すると良い?」や「返り値 Eax をカウンターに使用して良い?」、色々と問題点はあります。これを作ってみて、世界中でマニュアルにあるような効能があって、改善したほうが良いのではないか、考える兆しになったと思います。これは結果として、Broadwell では想定外に致命的な問題になったと予想されて、早期に Skylake へ移行したと思います。この問題は「マザーボードの製品寿命」に影響して、最短で10分、最長でも2年で破損、それぐらいに信頼性を損なう話になっていました。
今では Zero idiom optimize(ゼロイディオム最適化)によって、MOV Rax, 0 という記述で XOR 初期化と同じ結果となるよう調整されており、デジタルジッターが起きやすい条件は回避されています。マザーボードの設計は改善されて、デジタル雑音の影響が大きくなっても製品寿命に影響しないよう、部品の改善が進んできました。いま、これを書き直して下さいというと、このように書くでしょう。
Macro XOR_Rax_Rax !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rax, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rbx_Rbx !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rbx, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rcx_Rcx !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rcx, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rdx_Rdx !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rdx, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rsp_Rsp !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rsp, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rbp_Rbp !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rbp, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rsi_Rsi !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rsi, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_Rdi_Rdi !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV Rdi, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R8_R8 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R8, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R9_R9 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R9, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R10_R10 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R10, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R11_R11 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R11, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R12_R12 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R12, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R13_R13 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R13, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R14_R14 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R14, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro XOR_R15_R15 !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOV R15, QWORD 0 !NOP QWORD [Rip-32] EndMacro Macro MOV_Rax_Rax_Up_Down !MOV al, al !MOV ah, ah !MOV ax, ax !MOV Rax, Rax !MOV ax, ax !MOV ah, ah !MOV al, al EndMacro Macro MOV_Rbx_Rbx_Up_Down !MOV bl, bl !MOV bh, bh !MOV bx, bx !MOV Rbx, Rbx !MOV bx, bx !MOV bh, bh !MOV bl, bl EndMacro Macro MOV_Rcx_Rcx_Up_Down !MOV cl, cl !MOV ch, ch !MOV cx, cx !MOV Rcx, Rcx !MOV cx, cx !MOV ch, ch !MOV cl, cl EndMacro Macro MOV_Rdx_Rdx_Up_Down !MOV dl, dl !MOV dh, dh !MOV dx, dx !MOV Rdx, Rdx !MOV dx, dx !MOV dh, dh !MOV dl, dl EndMacro Macro MOV_R8_R8_Up_Down !MOV R8b, R8b !MOV R8w, R8w !MOV R8, R8 !MOV R8w, R8w !MOV R8b, R8b EndMacro Macro MOV_R9_R9_Up_Down !MOV R9b, R9b !MOV R9w, R9w !MOV R9, R9 !MOV R9w, R9w !MOV R9b, R9b EndMacro Macro MOV_R10_R10_Up_Down !MOV R10b, R10b !MOV R10w, R10w !MOV R10, R10 !MOV R10w, R10w !MOV R10b, R10b EndMacro Macro MOV_R11_R11_Up_Down !MOV R11b, R11b !MOV R11w, R11w !MOV R11, R11 !MOV R11w, R11w !MOV R11b, R11b EndMacro Macro MOV_R12_R12_Up_Down !MOV R12b, R12b !MOV R12w, R12w !MOV R12, R12 !MOV R12w, R12w !MOV R12b, R12b EndMacro Macro MOV_R13_R13_Up_Down !MOV R13b, R13b !MOV R13w, R13w !MOV R13, R13 !MOV R13w, R13w !MOV R13b, R13b EndMacro Macro MOV_R14_R14_Up_Down !MOV R14b, R14b !MOV R14w, R14w !MOV R14, R14 !MOV R14w, R14w !MOV R14b, R14b EndMacro Macro MOV_R15_R15_Up_Down !MOV R15b, R15b !MOV R15w, R15w !MOV R15, R15 !MOV R15w, R15w !MOV R15b, R15b EndMacro Macro MOV_Rsp_Rsp_Up_Down !MOV spl, spl !MOV sp, sp !MOV Rsp, Rsp !MOV sp, sp !MOV spl, spl EndMacro Macro MOV_Rbp_Rbp_Up_Down !MOV bpl, bpl !MOV bp, bp !MOV Rbp, Rbp !MOV bp, bp !MOV bpl, bpl EndMacro Macro MOV_Rsi_Rsi_Up_Down !MOV sil, sil !MOV si, si !MOV Rsi, Rsi !MOV si, si !MOV sil, sil EndMacro Macro MOV_Rdi_Rdi_Up_Down !MOV dil, dil !MOV di, di !MOV Rdi, Rdi !MOV di, di !MOV dil, dil EndMacro Macro MOVZX_Rax !MOVZX ax, al !MOVZX Rax, al !MOVZX ax, al EndMacro Macro MOVZX_Rbx !MOVZX bx, bl !MOVZX Rbx, bl !MOVZX bx, bl EndMacro Macro MOVZX_Rcx !MOVZX cx, cl !MOVZX Rcx, cl !MOVZX cx, cl EndMacro Macro MOVZX_Rdx !MOVZX dx, dl !MOVZX Rdx, dl !MOVZX dx, dl EndMacro Macro MOVZX_Rsp !MOVZX sp, spl !MOVZX Rsp, spl !MOVZX sp, spl EndMacro Macro MOVZX_Rsi !MOVZX si, sil !MOVZX Rsi, sil !MOVZX si, sil EndMacro Macro MOVZX_Rdi !MOVZX di, dil !MOVZX Rdi, dil !MOVZX di, dil EndMacro Macro MOVZX_Rbp !MOVZX bp, bpl !MOVZX Rbp, bpl !MOVZX bp, bpl EndMacro Macro MOVZX_R8 !MOVZX R8w, R8b !MOVZX R8, R8b !MOVZX R8w, R8b EndMacro Macro MOVZX_R9 !MOVZX R9w, R9b !MOVZX R9, R9b !MOVZX R9w, R9b EndMacro Macro MOVZX_R10 !MOVZX R10w, R10b !MOVZX R10, R10b !MOVZX R10w, R10b EndMacro Macro MOVZX_R11 !MOVZX R11w, R11b !MOVZX R11, R11b !MOVZX R11w, R11b EndMacro Macro MOVZX_R12 !MOVZX R12w, R12b !MOVZX R12, R12b !MOVZX R12w, R12b EndMacro Macro MOVZX_R13 !MOVZX R13w, R13b !MOVZX R13, R13b !MOVZX R13w, R13b EndMacro Macro MOVZX_R14 !MOVZX R14w, R14b !MOVZX R14, R14b !MOVZX R14w, R14b EndMacro Macro MOVZX_R15 !MOVZX R15w, R15b !MOVZX R15, R15b !MOVZX R15w, R15b EndMacro Macro ALL_MMX_CLEAR_SHIFTWORD_INC_CL XOR_Rcx_Rcx !INC cl ; cx = 1 MOVZX_Rcx !MOVQ mm1, Rcx !PSLLW mm0, mm1 ;1 Left 1bit shift !PSLLW mm0, mm1 ;2 Left 1bit shift !PSLLW mm0, mm1 ;3 Left 1bit shift !PSLLW mm0, mm1 ;4 Left 1bit shift !PSLLW mm0, mm1 ;5 Left 1bit shift !PSLLW mm0, mm1 ;6 Left 1bit shift !PSLLW mm0, mm1 ;7 Left 1bit shift !PSLLW mm0, mm1 ;8 Left 1bit shift !PSLLW mm0, mm1 ;9 Left 1bit shift !PSLLW mm0, mm1 ;A Left 1bit shift !PSLLW mm0, mm1 ;B Left 1bit shift !PSLLW mm0, mm1 ;C Left 1bit shift !PSLLW mm0, mm1 ;D Left 1bit shift !PSLLW mm0, mm1 ;E Left 1bit shift !PSLLW mm0, mm1 ;F Left 1bit shift !PSLLW mm0, mm1 ;0 Left 1bit shift ; !PSLLW mm1, mm0 ;1 Left 1bit shift !PSLLW mm1, mm0 ;2 Left 1bit shift !PSLLW mm1, mm0 ;3 Left 1bit shift !PSLLW mm1, mm0 ;4 Left 1bit shift !PSLLW mm1, mm0 ;5 Left 1bit shift !PSLLW mm1, mm0 ;6 Left 1bit shift !PSLLW mm1, mm0 ;7 Left 1bit shift !PSLLW mm1, mm0 ;8 Left 1bit shift !PSLLW mm1, mm0 ;9 Left 1bit shift !PSLLW mm1, mm0 ;A Left 1bit shift !PSLLW mm1, mm0 ;B Left 1bit shift !PSLLW mm1, mm0 ;C Left 1bit shift !PSLLW mm1, mm0 ;D Left 1bit shift !PSLLW mm1, mm0 ;E Left 1bit shift !PSLLW mm1, mm0 ;F Left 1bit shift !PSLLW mm1, mm0 ;0 Left 1bit shift ; !PSLLW mm2, mm0 ;1 Left 1bit shift !PSLLW mm2, mm0 ;2 Left 1bit shift !PSLLW mm2, mm0 ;3 Left 1bit shift !PSLLW mm2, mm0 ;4 Left 1bit shift !PSLLW mm2, mm0 ;5 Left 1bit shift !PSLLW mm2, mm0 ;6 Left 1bit shift !PSLLW mm2, mm0 ;7 Left 1bit shift !PSLLW mm2, mm0 ;8 Left 1bit shift !PSLLW mm2, mm0 ;9 Left 1bit shift !PSLLW mm2, mm0 ;A Left 1bit shift !PSLLW mm2, mm0 ;B Left 1bit shift !PSLLW mm2, mm0 ;C Left 1bit shift !PSLLW mm2, mm0 ;D Left 1bit shift !PSLLW mm2, mm0 ;E Left 1bit shift !PSLLW mm2, mm0 ;F Left 1bit shift !PSLLW mm2, mm0 ;0 Left 1bit shift ; !PSLLW mm3, mm0 ;1 Left 1bit shift !PSLLW mm3, mm0 ;2 Left 1bit shift !PSLLW mm3, mm0 ;3 Left 1bit shift !PSLLW mm3, mm0 ;4 Left 1bit shift !PSLLW mm3, mm0 ;5 Left 1bit shift !PSLLW mm3, mm0 ;6 Left 1bit shift !PSLLW mm3, mm0 ;7 Left 1bit shift !PSLLW mm3, mm0 ;8 Left 1bit shift !PSLLW mm3, mm0 ;9 Left 1bit shift !PSLLW mm3, mm0 ;A Left 1bit shift !PSLLW mm3, mm0 ;B Left 1bit shift !PSLLW mm3, mm0 ;C Left 1bit shift !PSLLW mm3, mm0 ;D Left 1bit shift !PSLLW mm3, mm0 ;E Left 1bit shift !PSLLW mm3, mm0 ;F Left 1bit shift !PSLLW mm3, mm0 ;0 Left 1bit shift ; !PSLLW mm4, mm0 ;1 Left 1bit shift !PSLLW mm4, mm0 ;2 Left 1bit shift !PSLLW mm4, mm0 ;3 Left 1bit shift !PSLLW mm4, mm0 ;4 Left 1bit shift !PSLLW mm4, mm0 ;5 Left 1bit shift !PSLLW mm4, mm0 ;6 Left 1bit shift !PSLLW mm4, mm0 ;7 Left 1bit shift !PSLLW mm4, mm0 ;8 Left 1bit shift !PSLLW mm4, mm0 ;9 Left 1bit shift !PSLLW mm4, mm0 ;A Left 1bit shift !PSLLW mm4, mm0 ;B Left 1bit shift !PSLLW mm4, mm0 ;C Left 1bit shift !PSLLW mm4, mm0 ;D Left 1bit shift !PSLLW mm4, mm0 ;E Left 1bit shift !PSLLW mm4, mm0 ;F Left 1bit shift !PSLLW mm4, mm0 ;0 Left 1bit shift ; !PSLLW mm5, mm0 ;1 Left 1bit shift !PSLLW mm5, mm0 ;2 Left 1bit shift !PSLLW mm5, mm0 ;3 Left 1bit shift !PSLLW mm5, mm0 ;4 Left 1bit shift !PSLLW mm5, mm0 ;5 Left 1bit shift !PSLLW mm5, mm0 ;6 Left 1bit shift !PSLLW mm5, mm0 ;7 Left 1bit shift !PSLLW mm5, mm0 ;8 Left 1bit shift !PSLLW mm5, mm0 ;9 Left 1bit shift !PSLLW mm5, mm0 ;A Left 1bit shift !PSLLW mm5, mm0 ;B Left 1bit shift !PSLLW mm5, mm0 ;C Left 1bit shift !PSLLW mm5, mm0 ;D Left 1bit shift !PSLLW mm5, mm0 ;E Left 1bit shift !PSLLW mm5, mm0 ;F Left 1bit shift !PSLLW mm5, mm0 ;0 Left 1bit shift ; !PSLLW mm6, mm0 ;1 Left 1bit shift !PSLLW mm6, mm0 ;2 Left 1bit shift !PSLLW mm6, mm0 ;3 Left 1bit shift !PSLLW mm6, mm0 ;4 Left 1bit shift !PSLLW mm6, mm0 ;5 Left 1bit shift !PSLLW mm6, mm0 ;6 Left 1bit shift !PSLLW mm6, mm0 ;7 Left 1bit shift !PSLLW mm6, mm0 ;8 Left 1bit shift !PSLLW mm6, mm0 ;9 Left 1bit shift !PSLLW mm6, mm0 ;A Left 1bit shift !PSLLW mm6, mm0 ;B Left 1bit shift !PSLLW mm6, mm0 ;C Left 1bit shift !PSLLW mm6, mm0 ;D Left 1bit shift !PSLLW mm6, mm0 ;E Left 1bit shift !PSLLW mm6, mm0 ;F Left 1bit shift !PSLLW mm6, mm0 ;0 Left 1bit shift ; !PSLLW mm7, mm0 ;1 Left 1bit shift !PSLLW mm7, mm0 ;2 Left 1bit shift !PSLLW mm7, mm0 ;3 Left 1bit shift !PSLLW mm7, mm0 ;4 Left 1bit shift !PSLLW mm7, mm0 ;5 Left 1bit shift !PSLLW mm7, mm0 ;6 Left 1bit shift !PSLLW mm7, mm0 ;7 Left 1bit shift !PSLLW mm7, mm0 ;8 Left 1bit shift !PSLLW mm7, mm0 ;9 Left 1bit shift !PSLLW mm7, mm0 ;A Left 1bit shift !PSLLW mm7, mm0 ;B Left 1bit shift !PSLLW mm7, mm0 ;C Left 1bit shift !PSLLW mm7, mm0 ;D Left 1bit shift !PSLLW mm7, mm0 ;E Left 1bit shift !PSLLW mm7, mm0 ;F Left 1bit shift !PSLLW mm7, mm0 ;0 Left 1bit shift EndMacro Macro BeforeProcedureRegisters_SMSW ALL_MMX_CLEAR_SHIFTWORD_INC_CL MOV_Rax_Rax_Up_Down MOV_Rdx_Rdx_Up_Down MOV_Rsp_Rsp_Up_Down MOV_Rsi_Rsi_Up_Down MOV_R9_R9_Up_Down MOV_R11_R11_Up_Down MOV_R13_R13_Up_Down MOV_R15_R15_Up_Down MOV_Rcx_Rcx_Up_Down MOV_Rbx_Rbx_Up_Down MOV_Rbp_Rbp_Up_Down MOV_Rdi_Rdi_Up_Down MOV_R8_R8_Up_Down MOV_R10_R10_Up_Down MOV_R12_R12_Up_Down MOV_R14_R14_Up_Down ; 17 @@ !NOP QWORD [Rip+16] !NOP QWORD [Rip+32] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ mm0, Rax !MOVQ mm1, Rdx !MOVQ mm2, Rsp !MOVQ mm3, Rsi !MOVQ mm4, R9 !MOVQ mm5, R11 !MOVQ mm6, R13 !MOVQ mm7, R15 ; 17 @@ End !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rax !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rdx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rsp !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rsi !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R9 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R11 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R13 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R15 !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] ; 49 @@ !NOP QWORD [Rip+32] !NOP QWORD [Rip+48] !NOP QWORD [Rip+64] !NOP QWORD [Rip+80] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rax, mm0 !MOVQ Rdx, mm1 !MOVQ Rsp, mm2 !MOVQ Rsi, mm3 !MOVQ R9, mm4 !MOVQ R11, mm5 !MOVQ R13, mm6 !MOVQ R15, mm7 !MOVQ mm0, Rcx !MOVQ mm1, Rbx !MOVQ mm2, Rbp !MOVQ mm3, Rdi !MOVQ mm4, R8 !MOVQ mm5, R10 !MOVQ mm6, R12 !MOVQ mm7, R14 ; 49 @@ End !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rcx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rbx !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rbp !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW Rdi !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R8 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R10 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R12 !NOP QWORD [Rip-32] !NOP QWORD [Rip+16] !NOP QWORD [Rip] !NOP QWORD [Rip] !SMSW R14 !NOP QWORD [Rip-32] !NOP QWORD [Rip] !NOP QWORD [Rip] ; 19 @@ !NOP QWORD [Rip+24] !NOP QWORD [Rip+40] !NOP QWORD [Rip] !NOP QWORD [Rip] !MOVQ Rcx, mm0 !MOVQ Rbx, mm1 !MOVQ Rbp, mm2 !MOVQ Rdi, mm3 !MOVQ R8, mm4 !MOVQ R10, mm5 !MOVQ R12, mm6 !MOVQ R14, mm7 !EMMS ; 19 @@ End MOV_Rax_Rax_Up_Down MOV_Rdx_Rdx_Up_Down MOV_Rsp_Rsp_Up_Down MOV_Rsi_Rsi_Up_Down MOV_R9_R9_Up_Down MOV_R11_R11_Up_Down MOV_R13_R13_Up_Down MOV_R15_R15_Up_Down MOV_Rcx_Rcx_Up_Down MOV_Rbx_Rbx_Up_Down MOV_Rbp_Rbp_Up_Down MOV_Rdi_Rdi_Up_Down MOV_R8_R8_Up_Down MOV_R10_R10_Up_Down MOV_R12_R12_Up_Down MOV_R14_R14_Up_Down EndMacro Macro XORPS_xmm15_to_XMM0_xmm15 ; 64 @@ !NOP QWORD [Rip+40] !NOP QWORD [Rip+56] !NOP QWORD [Rip+72] !NOP QWORD [Rip+88] !NOP QWORD [Rip+104] !NOP QWORD [Rip] !NOP QWORD [Rip] !XORPS xmm15, xmm15 !MOVQ xmm0, xmm15 !MOVQ xmm14, xmm15 !MOVQ xmm1, xmm15 !MOVQ xmm13, xmm15 !MOVQ xmm2, xmm15 !MOVQ xmm12, xmm15 !MOVQ xmm3, xmm15 !MOVQ xmm11, xmm15 !MOVQ xmm4, xmm15 !MOVQ xmm10, xmm15 !MOVQ xmm5, xmm15 !MOVQ xmm9, xmm15 !MOVQ xmm6, xmm15 !MOVQ xmm8, xmm15 !MOVQ xmm7, xmm15 ; 64 @@ End EndMacro Procedure AnyCures(dummy.i) !NOP QWORD [Rip] !NOP QWORD [Rsp-16] !NOP QWORD [Rip] !NOP QWORD [Rsp] !NOP QWORD [Rip] !NOP QWORD [Rip] Debug dummy Shared AllCore.i ; 32 @@ !NOP QWORD [Rip+24] !NOP QWORD [Rip+40] !NOP QWORD [Rip+56] !NOP QWORD [Rip] !NOP QWORD [Rip] AnyCures_loop: If dummy<>AllCore MOV_Rax_Rax_Up_Down ; 32 @@ End MOV_Rdx_Rdx_Up_Down MOV_Rsp_Rsp_Up_Down MOV_Rsi_Rsi_Up_Down MOV_R9_R9_Up_Down MOV_R11_R11_Up_Down MOV_R13_R13_Up_Down MOV_R15_R15_Up_Down MOV_Rcx_Rcx_Up_Down MOV_Rbx_Rbx_Up_Down MOV_Rbp_Rbp_Up_Down MOV_Rdi_Rdi_Up_Down MOV_R8_R8_Up_Down MOV_R10_R10_Up_Down MOV_R12_R12_Up_Down MOV_R14_R14_Up_Down Delay(16) Goto AnyCures_loop EndIf ; 353 @@ End BeforeProcedureRegisters_SMSW XORPS_xmm15_to_XMM0_xmm15 BeforeProcedureRegisters_SMSW XORPS_xmm15_to_XMM0_xmm15 Debug dummy EndProcedure Procedure Main() Protected MaxCPUs.i = CountCPUs(#PB_System_CPUs) Protected Dim Thread.i(MaxCPUs) Shared AllCore.i For AllCore=1 To MaxCPUs ; 300 @@ !NOP QWORD [Rip+160] !NOP QWORD [Rip+176] !NOP QWORD [Rip+192] !NOP QWORD [Rip+208] !NOP QWORD [Rip+224] !NOP QWORD [Rip+240] !NOP QWORD [Rip+256] !NOP QWORD [Rip+272] !NOP QWORD [Rip+288] !NOP QWORD [Rip+304] !NOP QWORD [Rip+320] !NOP QWORD [Rip+336] !NOP QWORD [Rip+352] !NOP QWORD [Rip+368] !NOP QWORD [Rip+384] !NOP QWORD [Rip+400] !NOP QWORD [Rip+416] !NOP QWORD [Rip+432] !NOP QWORD [Rip+448] !NOP QWORD [Rip] !NOP QWORD [Rip] Thread(AllCore) = CreateThread(@AnyCures(), AllCore) ThreadPriority(Thread(AllCore), 32) SetThreadAffinityMask_(ThreadID(Thread(AllCore)), 1<< (AllCore-1) ) ; 300 @@ End Next Delay(2000) For AllCore=1 To MaxCPUs WaitThread(Thread(AllCore)) Next EndProcedure #MC_ProductName = "CPU Core Registers Stabilizer 2023/10/14" #MC_VERSION = "www.mics.ne.jp/~halt-and-halt/Lab/" #MC_Copyright = "Copyright (c) Hiroyuki Yokota (oryaaaaa)" #MC_DevelopEnv = "Compiler :: PureBasic 6.02 (FASM 1.73.27)" #MC_INFO1 = "This program control the CPU register" #MC_INFO2 = "to the electronic reference" #MC_INFO3 = "inside the CPU embeded cache memory" #MC_INFO4 = "to made lost the digital jitter in PC." #MC_Finished = "Finished all core cure process." If OpenConsole(#MC_ProductName) PrintN(#MC_ProductName) PrintN(#MC_VERSION) PrintN(#MC_Copyright) PrintN(#MC_DevelopEnv) PrintN(#MC_INFO1) PrintN(#MC_INFO2) PrintN(#MC_INFO3) PrintN(#MC_INFO4) Main() PrintN(#MC_Finished) CloseConsole() Else Main() EndIf End
ソースコードの表示を PC 1080p で CRT 720p となる時、東芝の映像処理エンジンで「補正処理」をして、多くの誤認攻撃を回避できている。それでも完全ではなく、少し間違えると「それをトリガーに連鎖して誤認する攻撃に変化」して、修正できなくなる。時々、ソースコードを完全に公開して、トラブルの原因を調査するしかないが、そのネット公開において「すべてのライセンスを放棄」という条件で進めるしかない。それで「親戚に相談」ということを1年間やってきたけれど、どうにも音楽業界やアニメ業界や声優業界の利権が絡んで、相談を受け付けてもらえない。スーパージッターレス技術のネット公開は「核ミサイルで首都攻撃」と同じ意味と考えても、強行するしかない。
ここは MOVQ mm0, mm1 というレジスタコピーが必要であったのに、それが誤認攻撃によって認識できなくなっていた。これは裏システムで調査すると「どこ国?どこの都市?どこの命令?期間はいつ?繰り返しの頻度?管理責任者はだれ?日本政府の公認か?グローバルの公認か?」という細かい部分が「作者の公表により調査できる」状態になる。
利用者は「匿名で利用できる」と説明を受けていても、その組織内部のみに限定されており、実際は世界へ完全公開の条件で運用されているので、すべての秘密は「日本政府」「公安」そういう裏システムの管理部門に筒抜けになっている。それを無警戒で使っている街が岡崎市の自警団らしい、なぜなら中枢権力に対する支配力が強いからである。引き継ぎする時に、真実を言わない主義者がいると「現場は大混乱」する結果となる。
ソフトウェア開発でも「軍事転用可能」「数兆円規模の影響」というグローバル企業に役立つ内容と判明すると、「テクノロジー犯罪を可能とする裏システムにより、要人保護システムは有効になる」という結果となる。普通には「毎年2千万円ぐらい支払わないと使えないサービス」を「無償提供」になっている。「無償提供の都合上、グローバル企業や米国軍事産業に利益のある話にしなければならず、この際は日本政府の都合は考慮されない」という言えない条件に同意している。
親戚が「横田宏幸」を保護対象にすれば、グローバル要人保護サービスの無償提供は停止される。しかし、親戚が契約したサービスは「娯楽産業専任型」というもので、「横田宏幸」が声優として働くと困る。「娯楽産業専任型」を「グローバル技術産業」へ変更すれば、すべてを無償提供へ切り替えられるけれど、「最新軍事技術の容認」を前提としている。
この Majiority Solutions 2023 の技術を使用すると、本人に断りなく「最新軍事技術を容認」という状態になります。期待した結果を求めている場合、正しい影響を理解できます。しかし、セキュリティテストでイカサマだろ?と思いながら使用すると「最新軍事技術により仮想世界 True World へBAN」になります。そうなったら、リアルに戻れる可能性は無くなるという。多くは「死んだことにされてしまい、ゲームの世界でしか会えない」状態になります。この空想みたいな話を公認できないと、超低雑音ソリューションのプログラミングは絶対にできない。