音楽再生ソフトの研究開発

横田宏幸の略歴:井田小、葵中、城西高、中部大中退、SCRN正社員4.5年、ソフト作家

岡崎市立井田小学校、水泳部半年後拒否、一輪車部1年、緑の少年団(平湯キャンプ場)
岡崎市立葵中学校 マイコン部 初代、顧問1年小島(岡高数学)、2年3年杉浦 ゲーム開発
岡崎城西高校 普通科 皆勤賞、男声合唱団 パートリーダー3年 クラブ功労賞 数学わたなべ
中部大学 中退、中部大学混声合唱団 正指揮者1.5年 顧問 片岡教授(早稲田グリー正指揮者)
パソコン通信 春日井 KMF-NET(そがし)、岐阜 悶絶美少女昇天、岡崎 Z-NET(柴田)
学術インターネット 386BSD FreeBSD Linux 国際化ML参加、Mosaic NetNews 技術情報閲覧
ELP Okazaki パソコン店の見習い "世界最高のゲームプログラマーと出会う" 杉浦社長
Let's Nagoya "営業、3ヶ月" "幕張メッセ、東京ビッグサイト、出展スタッフ" 後藤社長
クラブ遊び「アナログDJ」マハラジャ岡崎、アビーム、ID、オゾン、JMAX、JB'S
SCREEN Nagoya DTP Support Enginner "Renatus" "FTS5000" "DTR3100" "LuvFitProof"
Copyright (C) 2002 oryaaaaa「FINAL PRINT」色空間原理特許の回避技術発明
Copyright (C) 2003-2005 oryaaaaa「ネットラジオおりゃ」「携帯FOX」
SOFTBANK プログラマー情報誌 C Magazine「PureBasic」紹介記事を執筆(初体験)
Copyright (C) 2005-2008 おりゃさん「Dr.DAC 改造」「東京都内コミュニティ参加」
Firefoxもじら組の懇親会、OSC東京の懇親会、セカンドライフ東京の懇親会
クラブ遊び「アナログDJ」渋谷アトム、八帖RED、「デジタルDJ」八帖RED
Copyright (C) 2009-2023 Hiroyuki Yokota ( oryaaaaa )「バグヘッド」
京都醍醐会館「手作り真空管アンプの発表会」、八潮市の篠田主催「勉強会」
スタジオPC製造「サウンドマイスターの戯言」、クラブ遊び「デジタルDJ」刈谷REON


小学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%未満という状態で、「横田の父母はアホや」という噂が立っていた。



Bug head Resampler Manual

Bug head Resampler 原音復元化処理

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((100/400+x)*pi)/((100/400+x)*pi)

これは位相を変化させているからsin(x*pi)/pi が正しいとして演算すると雑音へ変換されます。教科書では sin((0.5+x)*pi)/((0.5+x)*pi) と書いてありますが、SINCノイズと言われるポワンポワン鳴る状態になります。この計算式は最も正確に音を鳴らせる条件になります。

変数 x -4,1,9
結果 8点 SINCリサンプル処理

["-4" , "-0.06002108774"] ... 4点前
["-3" , "0.0818469378"] ... 3点前
["-2" , "-0.1286166166"] ... 2点前
["-1" , "0.3001054387"] ... 1点前
["0" , "0.9003163162"] ... 信号値
["1" , "-0.1800632632"] ... 1点後
["2" , "0.1000351462"] ... 2点後
["3" , "-0.06925510124"] ... 3点後
["4" , "0.0529597833"] ... 4点後
音楽データに対して掛け算して、合計値をリサンプル処理値にします。これでは、信号値の前後8点を参照しますので、(最高周波数 44100Hz ÷ 2 ) ÷ 8 = 2,756.25 Hz。この 2,756.25 未満の音は、2,756.25Hz でリサンプル処理されます。この状態で音量増幅すると、スマホでは中高域は音圧が高まりますが、2700Hz未満は消失しているので低音域は聞こえません。それでイコライザー処理で補正しようとすると、中高域の音圧はさらに上がり、それで難聴になることをスマホ難聴といいます。でも、シンセサイザーで鳴らして録音した音をそのままスマホで鳴らすと、音量を上げなくても低音域は十分な音量です。

円周率精度の問題

参照点数を増やしていくと、円周率精度の小数点桁を増やさないと、信号値から大きく離れたサンプル値は 0桁 の多い結果を示す。円周率精度の小数点は27桁で対応しており、FPU 80ビット演算により倍精度の演算テーブルを作成しています。音を悪くする方向へ変更したいときは、円周率精度の小数点桁を小さくすれば、アナログ感覚の劣化になりますけれど、音程はおかしくなります。「Junk Pi」(ElementaryではKogane)では1秒あたり周期的に円周率精度の劣化を引き起こす処理によって、ジッターレス条件下でジッターサウンドを楽しめます。

リサンプル処理で音が悪くなる条件

円周率精度の小数点桁はリサンプル処理の参照点数に応じて増やす必要があります。(未使用計算方法:小数点の桁1つごとに倍精度演算して合計すると無限倍精度演算になります。)スマホで使われるARM CPUではFPUの仮数精度がどれぐらいかによって左右され、double-double演算を駆使してSINCテーブルを作成、それでDSP処理すると思うけれど、DSP処理で参照点数が少なければ、低音域をロストする。それで中高域の音圧が異常に強くなった結果、スマホ難聴問題の原因となる。

Androidの開発環境を1ヶ月ぐらい使ってみた時、デジタル信号処理の部分はAndroidOSに内部にあり、手を入れられない状態になっていた。スマホ難聴問題の責任は、Google社、Snapdragonの設計者にあると考えている。詳しい解析はしていないので、プログラミングで参照点数を変更できるのかどうかは分からない。

スタジオ編集
音楽CD
AAC(M4A)

Sisters Resampler / Sisters Elementary

fripSide 2nd 南條愛乃の歌を少しでも気持ちよく聞くために作ったバージョンです。fripSide 2nd のほか、妖精帝國を聞く用途にも使えます。録音前の声を再現しており高評価です。

想定ゲーミングヘッドセット:USB 24bits WASAPI
想定ドライバー:ONKYO チタンコーティング 50mm

令和5年7月23日 日曜日 大安 大暑

香良洲神社を「コーラス神社」と思って、Journal「こおりついたら、たべちゃうぞ」という所縁があるのかな?と考えて、東海市の大仏近くにある香良洲神社へ参拝しました。

「コーラスとな、意味は大体同じじゃからいいじゃろう。何をしたら良いか迷っておるとき、気楽にまた来るが良い。参照点数は2048から4096の間、乗数で得られるもの、コーラスリサンプラーでも良いぞ」


八柱神社へ参拝するとき、どの神様に言えばいいか、悩みました。手水舎から進んで、狛犬を過ぎて、左手の遠くに見える社が正面に来るところで立ち止まり、そこで参拝しました。

「4の乗数だけはやめなさい」「狛犬の右手が吠えている様に見えて、左手は黙っているが睨んでおる。右翼と左翼の中間意見を進むようにすることが、神道を極めることにもつながる」


それで作り始めました。4の乗数は「死の掛け算」と考えて「4で割れる参照点数」は避けて作りました。2048から4096の間で乗数の参照点数になる数値を選んでいます。

[C] = NR3 alpha
[C] 0 Skip Resample is [C] 0.5 Skip Resample

[C] 処理のみセンターサウンドの復元処理、通常は左chでは左chのみでリサンプル処理しますが、この仕様では左chでは左右のchを交互にリサンプル処理しますので、ほとんど mono ch のように処理します。しかし、正しい mono ではありません。左ch のリサンプル処理のうち、微妙な音情報について右chを参照しています。右ch のリサンプル処理のうち、微妙な音情報について左chを参照しています。参照点数としては半分になっています。512点で処理したい場合、1024点へ変更してください。

現在、すべての [C] 処理について、NR3 alpha へ変更しています。Resampler Elementary Elegant Nontallion 等の処理について、0 skip Resample でなく 0.5 skip Resample です。通常のリサンプル処理は「有料ソフト」で対応されるべき機能として考えており、戻す予定はありません。過去のバージョンで使用できた時期は「スタジオなどで意見が言えるようにする検証用途」で作りました。



Bug head Elegant Manual

このトラブルに注意

※連鎖するトラブル

PCIE拡張カードはデータをメモリへ読み書きしています。PCIEバスへアクセスするコントロールチップの品質や動作状態で、メモリへジッター影響となります。グラフィックスカードとUSB拡張カードで3スロットの距離差があっても、メモリのジッター影響はグラフィックスカードやチップセットにも影響します。その結果、膨大なノイズを除去しようとコンデンサーは劣化しやすくなり、コンデンサーの雑音除去能力が低下した途端、ノイズが鳴り始め、USB動作は不安定になり、パソコンは壊れます。USBマウスは接続後1秒で破損。

この最悪のパターンが起きた場合、PCIE拡張カードや電源ユニットやM.2 SSDやメモリやUSB周辺機器は新しいパソコンへ流用できません。古い部品がジッター影響の原因になるからです。早めにUSB拡張カードを交換していれば防げるトラブルです。

推奨されるパソコンの性能
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までセットアップ可能です。

処理時間の増大ルール

バッファサイズの時間制限
参照点数
使用CPUコア数
参照点数 128 へ設定して、色々と試してみましょう!
ヘッドホンでは気持ちいい音に感じるけれど難聴の原因ですので、常用しないで下さい。

サウンドスペルについて

Elegant 上品な処理であり、きれいな音波の方向性



MagiclobeViewer Manual

Windows 11 フォト 代わりになる写真表示ソフト

漫画家の守護霊から「ネガポジ反転して確認できるものがほしい」と言われて作りました。カバーアートを作成時に「ネガポジ反転して確認」をしていませんと、(AKBグロスのように)合成写真とすぐに判別できますので、とても必要です。Windows11 で写真表示しますと、フォトが重すぎる。それで代わりに使える世界最高速度の処理性能を持つ写真表示ソフトを作りました。

操作について

起動処理は上記3つ、Clear clipboard した場合は起動しません。

MagicloveViewerPrefs.txt
ScreenW = 1920
ScreenY = 1200
axis = 0.96

画面処理の内容
OpenPreferences("MagicloveViewerPrefs.txt")
ScreenW = DesktopUnscaledX(ReadPreferenceLong ("ScreenW", 1920))
ScreenH = DesktopUnscaledY(ReadPreferenceLong ("ScreenH", 1080))
axis96 = ReadPreferenceFloat("axis", 0.96)
ClosePreferences()

OpenWindow(0, 0, 0, Int(ScreenH*mix*axis96),Int(ScreenH*axis96), 0, ScreenCentered)
ResizeWindow(0, Int((ScreenW-WindowsWidth)/2), 0, Int(ScreenH*mix*axis96),Int(ScreenH*axis96))
各環境に応じた調整については、難解な条件がありますので、各自調整できるようにしています。画面を小さくしたい場合は、axis を小さい数字にして下さい。

Windows 11 フォト は、ノートパソコンで使用される用途に最適化されておらず、使いにくい。デジカメの写真は PCIE NVMe SSD でもローディング時間が長くなり、全体的に遅く感じています。複数画面へ対応する時期は「未定」、このような内容は慎重に進めなければ、ソフトウェア開発は続行不能になります。自分で画面の位置を変更するユーティリティなどを使い、使い方を工夫すれば良いと思います。

MajiorityCleanES を実行している状態で「写真の色」を確認しています。コスプレイヤーの早瀬あみの写真を表示して、期待した画質で表示できているかを毎日確認しています。ローパスフィルターレスの撮影では「陰影が消えて平坦に見える」、もっと低ノイズの表示を追求すると「それでも陰影はあって、立体感を感じられる」、となります。表示する時に「CPUキャッシュメモリ」に対して、「写真データ」「表示処理プログラム」をキャッシュ化してから表示処理しているので、写真の表示は正確な色を実現できていると思います。



Art photo print Manual

日本のプロラボで好評の「作品展示用」印刷ソフト

銀塩フィルムで出力する前に、カラー写真の「高品質印刷」をみて、正しい傾向を参考にするプロラボで好評です。カメラマンの注文内容がよく分からない場合、この印刷を参考にすると目的の仕上げをイメージできるものです。風俗関係のお店で使われる想定で、肌色のきれいな印刷を全力で取り組んでいます。

作者環境では、EPSON PX-S730 写真用紙 はがきサイズ 絹目調 で印刷していますが、最新の WiFi-3 ルーターを使用して低ジッター状態で無線伝送しています。これは 顔料 4色 CMYK ですが、色補正 ICM 色濃度 +8% 原寸指示 品質標準 を指定してると、写真は正しい色合いで印刷できているようです。ICM の sRGB プロファイルは Windows 11 標準です。

このソフトは「偽造通貨防止システム」「産業保護システム」の監視対象です。まれに印刷できない場合、各国の法律に違反していないか、印刷内容を確認して下さい。このシステムは「インターネット未使用」でも致命的な影響あります。印刷用紙を「メーカー指定品」にしていれば良いですが、三菱製紙以外の所から購入している場合は「通信妨害が起きる」と思っていて下さい。

Windows 11 では印刷設定画面で「ページ設定の下にある『その他の設定』から印刷設定」します。

写真の芸術作品を極めようとしている方にオススメ

<概要>

 このソフトは写真印刷のフォトコンテストおよび贈答用印刷、専用です。写真に細い白枠とまわりはブラック100%のフチで印刷できます。フチは2.5ミリから30.0ミリまで0.5ミリ単位で、白か黒を選択可能。白い細線は0.1ミリから3.0ミリまで設定可能です。四切印刷に対応していますので、多数のフォトコンテストに対応しています。簡単な補正機能として水平と垂直にする高精度の回転補正とトリミングが使用可能です。

 フォトコンテストは写真1枚あたり審査員が約6秒で合否判定するので、インクジェットの印刷物では写真を認識できるまでに約40秒必要で色は不安定に見える。それで見た瞬間に色合いが安定する「超光沢印画紙に焼き付けるプリントSGM」にしなければ合格できません。注文はDVD-Rを推薦で、理由はPioneer BDR-S13J-X ではDVD-Rを高品質に焼けるモードがあり、写真を低ジッターで読み出せます。※色見本としてインクジェット印刷を添付。

<弱点>

JPEG、TIFF、PNGのみです。ドラックアンドドロップ対応。
ファイル名(大小区別する、拡張子を除く)を手帳やノートに書いてある人向けです。

<印刷検証済用紙>
はがき、KG、L、2L、四切、A3、A3ノビ

<初期設定>
プロ設定モード:はがき、白枠 0.5mm、黒フチ 5mm

JPEG の色空間は sRGB です。sRGB の正式なICCプロファイルにはヒューレット・パッカード社の著作権表示があり、色座標を完全に数値で指定しています。でも、デジタルカメラは sRGB の色座標を完全に指定して撮影しているものはなく、近い色域で sRGB 表示すると各社のメーカーの色になる仕組みになっています。CanonのカメラはCanonのプリンターでカラーマッチングしやすいのは、Canonの色空間sRGBを入力から出力まで揃えることができる。NikonのカメラはEPSONのプリンターでカラーマッチングしやすい。EPSON基準色(sRGB)を色基準に設定すれば正しい色で印刷します。

はがき印刷
筆まめ メニュー:ファイル-他の画像形式で保存 600 dpi PNG形式
印刷後、20分経過してから、色の比較基準とする。

EPSON PX-S730 EPSON写真用紙(絹目調)の条件
基本設定:印刷品質 標準、拡張設定-印刷濃度 +8%
応用設定:色補正 ユーザー設定 カラー調整 ICM (sRGB)
フチナシ:カスタム設定(原寸維持)= EPSON SC-PX5VII でも同じ

印刷後、20分以上の経過で EPSON PX-5VII EPSON基準色(sRGB)と同じになります。EPSONの純正インクカートリッジ(電卓)を使用しています。顔料CMYKインクですが、Kはフォトブラックです。宛名印刷では薄い黒になります。発色が安定するまでに3日間の乾燥が必要です。特に暗部の階調が潰れている傾向の改善に乾燥時間が必要です。クリスピアは印刷用紙の白色点はsRGBより高い色温度ですが、美術館用途の高演色蛍光灯を写真へ照らして確認するカラーマッチングを前提としています。sRGBは絹目調の白色点が青く見えない蛍光灯色に注意していれば正しい色になります。

sRGBは人の目で認識できる色空間を定義、HDRは輝度の定義になります。AdobeRGBはCMYK色空間をRGBで取り扱う定義です。RGBプリンタはCMYK色空間まで色域を広げたものですので、従来のCMYKプリンターと変わりません。それでも人の目で認識できない色を印刷する技術が高度に発展すれば、偽造できない紙幣や電子カードの製造に役立つと思います。

ファイル名(大小区別する、拡張子を除く)を入力する機能では、下記のファイルが実行形式のあるフォルダーに必要です。写真のあるフォルダーをセットしてください。PhotoFolder ファイルパスは最後は「¥」(Pictures\)となるように設定してください。PNG = 0 にすると PNG は検索しません。

"ArtPhotoPrefs.txt" ASCII
PhotoFolder = C:\Users\Public\Pictures\
JPG = 1
PNG = 1
TIFF = 1

上記の説明は「SCREEN の守秘義務契約の違反にならないか?」、かなり気にしながら書いております。正しい説明は「絶対にできない!」です。この内容でも印刷会社の優位性が損なわれるかもしれないと、心配しています。LABカラーとは「RGB-LAB-CMYK」の色変換式によって存在する色座標値であり、正しい色を規定しているものではありません。LABカラーの色波長を決める際に使われる「高精度測色機」に何を使用したかによって、大きく変化します。すべての「高精度測色機」に対応する印刷をしようとすると、「人工知能による色補正」などの言い訳で対応しなければ難しいと思います。それを SCREEN 色管理エンジニア していた時に「これって、LABカラーの基準って何です? 高精度測色機は全国で統一されていますか?」と質問したら、DS五条サポセンは「グレタグ200万円CMYK測色機」と内々に言いましたけれど、それって・・・やばくない?

SCREEN は「半導体製造」の分野で洗浄装置を作っていますけれど、それを作るには露光技術の研究にも参加していなければならない。その都合を考えているとき、「インテルの多重露光が失敗しており、10nm世代のCPU製造を開始できない」という報道が日本で繰り返されて、MajiorityCleanES や Rewrite data だけでなく Art photo print が必要と思い、作ってみたら不思議な報道は止まりました。これは半導体製造技術の改善に役立っているかもしれません。



Bug head Emperor Manual

私財を200万円かけて作ってみるも、底なしの地獄沼が待っていた

Bug head Emperor Ver 2.52 2013/11/25 20:00
御利用ありがとうございます。1日12時間、休みなし、1年半かけて作り上げたソフトウェアです。本当は対価を求めたいのですが、社会貢献のために、これは無償配布しています。ただ、開発にあたって、人件費以外で200万円ほど必要でした。機材費用は約70万円となります。寄付金を募っていますので、後述の銀行口座を御参照下さい。

音色変更可能・高音質サウンドプレイヤー

ヘッドホン、スピーカー、アンプ、再生ソフトなどがすべて同じでありますと、好きな音楽は聞き飽きる日がやってきます。20代まではサラウンドやEQでごまかしできますが、音が大きく変わり過ぎるため、飽きてきます。

Bug head Emperorは音色に着目し、音色を変えることによって音楽をより長く楽しめるように作りました。音楽を解析して最適化する処理はありませんので、歪みが大きい傾向、聴きにくい傾向は、利用者が調整しなければなりません。最高の推薦モードはありません。その日の体調、音源によって変わります。

開発目標としたオーディオ環境について

整数倍のアップサンプリングへ対応し、超低ジッターを実現するハードウェア・リクロックであり、ハイレゾ音源に対応するヘッドホン・スピーカーを目標としました。その関係で、対象外の環境では、正しい音にならない可能性があります。
  • ※整数倍:88.2kHz/176.4kHz/352.8kHz の出力に対応していること(音質重視)
  • ※リクロック:テスト環境はXMOSの温度補償タイプです(正しい時間軸で鳴らすため)
  • ※ハイレゾ音源対応:周波数特性 35kHz 以上の対応(正しい時間軸で鳴らすため)
通常のデジタルデータ並び順は123456789となるのが普通ですが、出力段階において、132547698といった順番にしていまして、ちょっとでもジッターがあると大幅に音質がダウンするリスクがあります。

これを波形表示しますと、どのようになるのか興味あるのですが、フリーの波形表示エディタAudacityでは波形が乱れて表示され、DAC後の波形はどうなるのか知りません。多くの時間、聞いて確認して取捨選択し、チューンを重ねて、今のバージョンがあります。

開発理念
  • 1.意図的に失敗しよう
  • 2.飽きるまで失敗を繰り返せ
  • 3.お金はあるときに使ってしまえ
  • 4.お金に飽きたら貯金せよ
  • 5.結果から行動しよう
  • 6.3度否定して、真実をつかめ
  • 7.悪はすべて許せ

ポジティブに開発するためには、この理念がなくては続けられませんでした。音楽再生ソフトが多くあるなかで、音をちょっとだけ変えたいという悩みを解決できるソフトがなく、意図的に失敗したサウンドを作り出せる機能性を持たせるために、かなり苦労しました。また、結果から行動して、推奨機材を指定するなど、悩みは多くありました。

オーディオはひとつの音色だけに囚われていますと、いずれ、その曲に飽きが生じてきます。それで、音色の変更のため、機材を変更する歴史がありました。このソフトは、音を意図的にちょっと変えることにより、飽きない音色を作り出せるように作りました。いろいろな音色へ変えてみて、普段から違う気分で聞くようにしますと、ひとつの音楽を気持ち良く楽しめます。

一行見出しにみる、Bug headの歴史
開発開始直後 「MP3がSACDの音を超える超・高音質サウンドプレイヤー」
開発初期 「サウンドリマスター超・高音質サウンドプレイヤー」
1年前 「高音質・モンスターサウンドプレイヤー」
現在 「音色変更可能・高音質モンスターサウンドプレイヤー」

初期は作り始めたばかりで、今から思えば誇張表現と思う感想が多く、それで作っていました。いまはデコード部の音色変更ができますと、客観的にみて言えるのですが、ここへたどり着くまでが大変でした。

特許にできそうかも検討しましたが、音色変更の科学的根拠を言えないために、誰を頼って良いのか分からないために、壁がありました。誰かに言われる度、大変苦しい時期がありました。DACの専門家に企業機密を聞いて、それから科学的根拠を考察しなければならないため、特許は諦めています。

2013年から10年間と続く「地獄の沼」は放置すれば、世界中の子供達を難聴にさせてしまい、成人して就職する頃には「音が聞こえない」という地獄を生むものでした。犯人を作るのは簡単です。今までの音楽業界は「犯人を作る」「犯人を始末する」「問題の根源は消滅してない」、問題分析に立ち上がった科学者は「犯人にされる」「犯人として始末される」「問題の根源は消滅してない」、これは「聴覚被害者は音量を上げすぎた」「スタジオは悪くない」「音楽に問題はない」という根拠に基づくものです。

しかし、問題の根幹に何があるのか? 音響処理を行う基本数学式が間違っており、リサンプル式の基礎研究を誰もやっていない。オーディオで水晶発振器の精度をフェムトにすれば、音楽は高精度円周率を根拠に作り直す必要があった。SINC 8点 で十分とされた説は、サンプリング周波数 100Hz を前提とした仮定式であり、サンプリング周波数 44100Hz になれば 441倍である 3528点 にしなければ十分と言えなかった。シンセサイザーに収録された音を復元できるリスクがあり、日本の楽器メーカーが隠し続けた。それは音楽再生プレイヤー「MDウォークマン」の技術者が現場を離れたあと、後継者の引き継ぎで伝えられる教材はなく、業界機密になり、そして「ロストテクノロジー」となった。シニア技術者は「韓国」「中国」のメーカーへ移籍したあと、この問題に気づき対応しようとしたけれど、音楽業界は魔女狩りの最中にあり、対応不能になっていました。


Normal ノーマル ... ノーマルな出力です。(LPF none強制)
foobar2000の標準出力と同じです。Bug headではなく、使用しているBASSライブラリの音が鳴ります。LPFは強制で無効になります。

Green グリーン ... ノーマルなアップサンプリングで、ちょっとだけ違うサウンド
128-bit 2048点 SINC補間によるアップサンプリングです。デジタルデータの並び順は正常です。元々は、このモードで聴きたいために、Bug headを作ってきました。

Tester テスター ... ちょっとだけ違うアップサンプリング
128-bit 2048点 SINC補間によるアップサンプリングです。デジタルデータの並び順はバグっています。ZIONOTE社のブースで、ヘッドホン祭へ参考出展したサウンド。

Red レッド .. ちょっとだけ違うアップサンプリング系サウンド
TesterとGreenをミックスしたようなサウンドです。開発初期はデジタルリマスターと紹介していました。岡崎商工会議所の関係者へのデモに使用したサウンド。

Brown ブラウン ... ちょっとだけ違うアップサンプリング系サウンド
Testerをベースに、てきとう演算をプラスしたサウンドです。レッドより高級感ある色のイメージで、ブラウンと命名しました。

White ホワイト ... ちょっとだけ違うアップサンプリング系サウンド
Testerをベースに、てきとう演算をベースサウンドから処理したサウンドです。開発PC、Core2Duo3GHzでは演算限界があり、第一世代では最後としたため、ホワイトと命名しました。

Banana バナナ ... 透明感あふれる系サウンド 第二世代
第二世代のサウンドを考えて思いついたサウンドです。イエローにするとフィーリングが良くありませんので、バナナボートの楽しさをサウンドにしたら、こうなるでしょうと、思ってバナナと命名しました。聞き慣れないうちは、透明感あふれるサウンドに聞こえます。

Black ブラック ... 透明感あふれる系の宝石サウンド 第二世代
紙へ処理内容を書いて、必死でデバッグと最適化を行った結果、より多くの演算をコンパクトにまとめられました。それで、てきとうに透明感あふれる系の宝石サウンドを作りました。演算の内容が応用できるものでしたので、てきとうにBlack9 x4まで演算種類を増やしました。多くの人へ推薦できるサウンドです。低域の量感が増えながらも、中域や高域がぼやけた感じにならず、シャープに聞こえます。

Snow スノウ ... 透明感あふれる系サウンド 第二世代
雪山へ遊びたい気持ちから、てきとうに作ったら気持ち良くて、スノウと命名しました。ホワイトとブラックを組み合わせただけですが、あまり音色を変えず、バグヘッドを楽しみたい方にオススメです。最近まで鉄板サウンドと表現してました。

スタジオマスターの再生確認では「Elementary Normal」「Nontallion High」が使われます。超低ジッター条件における無変更の音楽再生を確認できます。オーディオマニアが素晴らしい、特に優れていると評価しているのは、ノーマル出力です。JPLAY forum では「グランドマスター」、ジェダイの騎士でいうジェダイ・マスターのうち「地上最強」を意味する、偉大な評価をされました。その後、ドイツの HIGH END で再生環境に選ばれて、裏から「もっとよくしろ!」の繰り返しでした。今は外国から岡崎市へ来て、裏のシステムが「すれ違い法」で会わせてあげるサービスを開始しているようで、すごい金持ちのファミリーに囲まれたりします。その時に限って、「最新のフェラーリ」「最新のポルシェ」だけでなく、日本で売ってないという数億円のスポーツカーで「すれ違い法」で、すれ違うシーンをよく経験する。もっと良くする方向性を示されて、ひたすら「Normal」を良くしてきました。それで Windows 11 で動作する音楽再生ソフトが、世界最高の高級サウンドプレイヤー(ハード機器、裏によると1人2億円)を超えれば、もっと音はよくできるということで、すべての特許や権利を無視して研究を続けてほしいと願いを託されていました。



Rewrite data Manual

最初に発表した時、どんな効能があるのか説明できなかった

RewriteData.exe
著作権者:Hiroyuki Yokota、平成26年12月27日(土)

CDリッパーの違いで音が変わる、仮説
CD -> Memory -> Disk
この Memory 段階で、ビット保持電圧が低い状況でディスクへ書き込まれた場合、その微妙な電位で、読み出される時にジッターが引き起こされるのではないでしょうか?と考えた場合、CDリッパーによって、AccurateRIPしていても、ディスクから読み出したとき、音質が変わっているとするジッター原因説。RewriteDataを実施することにより、音質を改善。

このソフトの動作
D:\MUSIC\ABC.flac 指定したファイル名
D:\MUSIC\ABC_rw.flac リライトしたファイル名、_rw を付加します。
ファイルを読み出して、バッファへリライトメモリ処理(MMXレジスタ経由、CPUキャッシュメモリ回避の書き出し)を行い、書き出すだけのファイルコピー処理を行います。

主な効果
CPUキャッシュメモリ経由によるジッター原因説を排除できます。
HDD/SSDのビット保持電圧によるジッター原因説を排除できます。

テストの方法1
HDD/SSDのキャッシュメモリーで、絶対にキャッシュしない条件を満たすようにテストを考慮しなければなりません。Infinity bladeであれば、1(テストファイル)、2(リライトファイル)、4からXX(キャッシュサイズ分)をプレイリスト登録して、AutoPhaseCheckを再実行することによって、キャッシュ可能性を排除して下さい。
※キャッシュ状態でも、音質に影響するようです。否定を繰り返してテスト要。

テストの方法2
同じようにキャッシュ可能性を排除した条件にて、最高に音質が悪いサウンドプレイヤーで音質が改善するかどうかをテストして下さい。音質の良し悪しは、音質が悪い条件になるほど分かりやすいものです。

作者の評価結果:音質は改善しました。FLACのデータでも、RewriteData化したデータはWAVのような音質へ変わっています。こんな方法でジッター抑制できるのなら、他のLinuxやMacOSXでも影響する可能性が濃厚です。

発展させた仮説:SDカード経由にすると音質が良くなるとする技術根拠は、SDカードの書き込み回路、読み込み回路が、ジッター原因根拠を排除できるから音質改善できていると仮説を立てられると思います。

1年経過したら、強気の説明になっていた

Rewrite data 電子ビットの帯磁性改善ソフトウェア

このソフトウェアは、パソコン本来の性能を発揮させるように動作します。

メモリの記録において、スレッシュホールド電圧という信号"1"の電圧と信号"0"の電圧が規定されています。それで設計を容易にするため、0.7以上は"1"、0.3未満は"0"、このようにデジタルのアナログ値が決まっています。
この"1"が連続したデータであったとき、
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
となっていれば理想ですが、HDDやSSDでは、
0.9 0.7 0.8 0.9 1.0 0.7 0.8 0.9 1.0 0.8
このように記録されています。"0"側でも
0.0 0.1 0.1 0.2 0.0 0.1 0.2 0.3 0.0 0.1
このように記録されています。この記録されたデータが読み出されてアナログの回路に伝わりますと、不連続な揺れによってデジタル雑音「ジッター」となるのです。しかし、デジタル回路からデジタル回路に信号が伝わるときでも、例えば 0.3 0.7 0.3 というギリギリの信号で伝わりますと、ビット反転が起きてしまいます。そのため、これを防ぐ為に ECC(エラー訂正)機能のメモリが存在しますが、完全なものではありません。

この Rewrite data は、Bug head technology で研究報告したRewrite技術によって、理想のデータ状態へ修復します。動作原理は簡単です。ファイルを読み込みます、Rewriteします、書き出します、入れ替えます、これだけでファイルを最も良い状態へ改善します。なお、ファイルの内容はバイナリ比較で完全一致して、変更はありません。

ジッターが起きる原因:

すべてのソフトウェアは、CPUのレジスタを使用して、あらゆる処理を行います。このレジスタを初期化するとき、XOR命令を使用して初期化が行われたら、ジッターは起きません。でも、Windowsのデフォルトの初期化では、メモリーを参照して初期化を行います。そのメモリーが初期化されてない状態なので、不安定な 0.0 により、ジッターが発生しています。私説ですが...プロセッサー電位とサーキット電位が異なる為に問題が生じています。

効果持続時間:

処置直後がピークとなります。時間の経過によって効果が薄れていき、4日から10日後には元の状態へ戻ります。こうした現象が起きますので、デフラグとは明らかに異なる根拠に基づいた改善結果を得られています。
デフラグはファイルの再配置で読み取りやすさを向上させて、読み込みジッターを抑える仮説がありますが、Rewrite効果はメモリにも影響しますので、真の仮説は電子ビットの帯磁性を改善させている為に、音質が良くなっています。

この説明に問題点はあります。「XOR命令を使用して初期化すれば解決する」という説明でしたが、CPU演算基準はマザーボードを壊しやすくなる原因と分かってきて、そこで研究開発を中止しようと思いました。でも、神社で参拝しますと「歩みを止めてはならない」といって、次の改善方法を伝えてきました。レジスタのシフト命令によって「0」のビットをセットしますが、その「0」はどこから来たのでしょうか? それはつまり、キャッシュメモリから来た「0」という考えになれば、NOP QWORD [Rip] NOP QWORD [Rip] MOV Rax, 0 という命令であれば、キャッシュ化した「0」をRaxへセットする処理になります。これで完全に解決するかというと、CPU設計が変更されると再び基準の作り方を工夫しなければなりません。

新しいパソコンで Windows 10 32bit はやめましょう。最近のCPUは64ビットCPUですので、32ビットで使用しましても、CPUの初期化は不十分であり、ジッターは起きやすい状態になります。64ビットにするだけで、ソフトウェア開発では、下記のメリットがあります。

汎用レジスタが3倍になります
Eax,Ebx,Ecx,Edx
から
Rax,Rbx,Rcx,Rdx,R8,R9,R10,R11,R12,R13,R14,R15

汎用レジスタのサイズが大きくなります
Eaxは32ビットレジスタ(4バイト、Long型)
Raxは64ビットレジスタ(8バイト、Quad型)
従って
32ビットレジスタでは3GBでメモリアクセス制限

64ビットCPUで32ビットOSを使用した時に生じる問題
『ジッターが起きて、動作不具合が起きて当然』 下図参照↓

パソコンによっては Windows 10 Home 32bit モデルを販売していますが、All core any cures や Rewrite data の効果をほとんど得られません。必ず 64bit モデルを御検討下さい。

この説明に不十分な記載があるとすると、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バスを通じてデータを書き出す仕組みです。

どんな状況でも「高品質メモリ」「高品質マザーボード」による政治へ影響は大きいので、偽物が多い「高品質メモリ」の入手ルートは重要です。どれほど低価格競争に「国内のメモリモジュールメーカー」が巻き込まれても、「高くても買い続けるスタンス」を維持できなければ、外国の言いなりになる未来となります。「高品質メモリ」を日本のパソコンユーザーが買えなくなった途端に「韓国」「中国」の外交戦略は突然変更され、日本政府に対して強気の発言を繰り返された時代を思い出して下さい。



MajiorityCleanES 動作原理

時分割多重処理により全体に影響するが、独立コア処理では影響しない

引数 Rcx Rdx R8 R9 PUSH PUSH xmm0 xmm1 xmm2、引数は「基準不明」データをセット、
返値 Rax 汎用レジスタ、xmm0 SSEレジスタ、電子ビット基準の散乱によりジッターになる。



All core any cures は、一般的なソフトウェアと同じように、Windowsから許可されたタイミングにて、全コアを使用する為、マルチスレッドプログラミングしています。CPUの汎用レジスタ、スタックレジスタ、拡張レジスタについて、初期化しています。

ジッターが起きるプログラミング
変数ABC へ 0 をセット [MOV ABC, 0] 、これはメモリに記録された0を参照して、メモリから変数ABCへ 0 をセットしています。不連続に記録されているメモリを参照するだけで、ジッターが発生します。

ジッターが起きないプログラミング
[XOR Eax, Eax] [MOV ABC, Eax] 、これはCPUの演算により0を作成して、レジスタから変数ABCへ 0 をセットしています。この場合は、ジッターが起きません。

最も重要な話は、0をセットするときです。0以外をセットするとき、ジッターが起きない変数として0の初期化をしてあれば、ジッターは起きません。つまり、[XOR Eax, Eax] [MOV ABC, Eax] [MOV ABC, 15] では、ジッターは発生しません。All core any cures では、[XOR Eax, Eax] を行いますので、ジッターは発生しなくなります。

AlderLake RapterLake の Zeroイディオム最適化

今のところ、CPU キャッシュメモリ を基準とすると「低ジッター処理」「低エラー処理」になりやすいと判明しています。音楽再生ソフトの機能面が完成したあと、ひたすら世界中のオーディオマニアと確認を繰り返してきて、上記のような方法で「USB-DAC の音は変化」すると判明しています。つまり、これを根拠にして「ジッター暗号通信は実現可能」と結論付けられる。

「ジッター暗号通信」とは、スレッシュホールド電圧の微妙な差によって「デジタルからアナログへ変換」した際に、微妙な電圧差が生じており、1ビットのデータを32ビットAD変換すると「暗号データを読み取れる」というもの。これを高度に処理することで、米軍や中国軍のグレードファイアウォールに対しても、機密情報をやり取りできるのではないか? という夢のような人類未踏技術。

この通信を阻止するために「SSDやCPUの品質改善が急がれている」という。しかし、オーディオ用DAC や 映像用DAC の基礎研究で「上記のような電子ビット基準を採用」してきた結果から、完全に阻止する技術として完成させると、DAC の基礎研究を最初からやり直す必要があると思う。




Nontallion「超低雑音デジタル出力」を 実現する手法

スタジオとオーディオマニアの声を聞いて再構築

使用前に「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ライブラリは「音量設定」「デコード処理」「転送処理」で高級オーディオ対応にできる

今までは「一般向け」でしたが、この内容に関しては「オーディオメーカーの技術者」を対象に書いています。この内容を理解できないうちは、どれほど頑張って高級オーディオを作っても、評価は HIGH-END で良くならないと思います。音量最大を意味する 1.0000 を作るときに、このように厳密に調整しないとキレイな歌声になりません。

音量設定 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.30 で採用している音量設定のソースコード
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_x2
  XOR_Rdx_Rdx_x2
  XOR_Rax_Rax_x2
  XOR_R8_R8_x2
  ; 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_x2
  XOR_Rdx_Rdx_x2
  XOR_Rax_Rax_x2
  XOR_R8_R8_x2
  ; 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_x2
  XOR_Rdx_Rdx_x2
  XOR_Rax_Rax_x2
  XOR_R8_R8_x2
  ; 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_x2
  XOR_Rdx_Rdx_x2
  XOR_Rax_Rax_x2
  XOR_R8_R8_x2
  ; 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_x2
  XOR_Rdx_Rdx_x2
  XOR_Rax_Rax_x2
  XOR_R8_R8_x2
  ; 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 ドライバー を基準に作っていますが、音を悪くする方向へ調整するなら、音量設定値のビットを不安定にさせると著しく悪化します。

Nontallion では Float_1_000 を INC SHL によって作成して、Macroで規定して、MacroMakeFloat MacroMakeFloatFF により、電子ビット基準の正確な音量設定を行っています。これで圧倒的な高音質を達成しています。ソースコードは下記のとおりです。

Macro MacroMakeFloat
  XOR_Rcx_Rcx_x2
  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, mm5
  !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_x2
  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, mm5
  !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

Macro XOR_Rcx_Rcx_x2
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !MOV Rcx, QWORD 0
  !MOV Rcx, QWORD 0
  !NOP QWORD [Rip-32]
EndMacro

Macro Set_mm5_SHL_mm3_SetCL1_Full
  XOR_Rcx_Rcx_x2
  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, mm5
  !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
  !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

NOP 命令は「命令キャッシュ化指示」です。MMXレジスタ mm5 へ 作られた R8 をセットするとき、CPUキャッシュ内の実行により「最高の低ジッター条件」により転送しています。音量設定のASIO処理を手作業で書ける人は、この音量設定を「メモリ変数から読み出す=BAD」として、「その都度、INC SHL によって作りセット」とするだけで、とても良くなります。

汎用レジスタ R8 による INC SHL で「正確なビット列を作成」
  XOR_R8_R8
  XOR_Rcx_Rcx
  !INC cl
  MOVZX_Rcx
  !INC R8b  ; 1
  !SHL R8b, cl
  !INC R8b  ; 2
  !SHL R8b, cl
  !INC R8b  ; 3
  !SHL R8b, cl
  !INC R8b  ; 4
  !SHL R8b, cl
  !INC R8b  ; 5
  !SHL R8b, cl
  !INC R8b  ; 6
  !SHL R8b, cl
  !INC R8b  ; 7
  !SHL R8b, cl
  !INC R8b  ; 8
  !MOVZX R8, R8b
  !SHL R8w, cl
  !INC R8b  ; 9
  !SHL R8w, cl
  !INC R8b  ; 10
  !SHL R8w, cl
  !INC R8b  ; 11
  !SHL R8w, cl
  !INC R8b  ; 12
  !SHL R8w, cl
  !INC R8b  ; 13
  !SHL R8w, cl
  !INC R8b  ; 14
  !SHL R8w, cl
  !INC R8b  ; 15
  !SHL R8w, cl
  !INC R8b  ; 16
  !MOVZX R8, R8w
  !SHL R8, cl
  !INC R8b  ; 17
  !SHL R8, cl
  !INC R8b  ; 18
  !SHL R8, cl
  !INC R8b  ; 19
  !SHL R8, cl

レジスタ R8 を使用しているのは、AMD が設計したとされる R8-R15 を基準にするので、AMD CPU と同様の結果が出やすいからです。低ジッターだけを追求するなら、R8b R8w R8 とシフト命令の状態によって変化していくと良いですれど、高級オーディオで「空気感が悪い」という評価になりましたので、R8 だけのシフト命令にしています。もっと完璧にやってくれ!と言われますと、汎用レジスタで書いている内容を MMXレジスタで書き直せば良くなります。

上記の MakeFloat 処理は MMXレジスタで書き直したものです。


デコード処理

自分でデコード処理を書くことはできるけれど、FLAC の場合、提供されたソースコードから「静的ライブラリを作り、内部処理として動作」する仕組みにするしかない。それで問題がなければいいけれど、実際に起きたことは「FLACのデコード処理はできたけれど、日本で公開しようとすると動作しない」という不可解な問題が起きた。それで、un4seen社 BASS Audio Library SDK を使用している。でも、デコード処理に問題があるようで、正しく処理できているとは思えない。その対策コードを考えていくうち、レジスタの安定した電子ビット基準の適用概念を思いつき、以下のソースコードによって、正確さでは世界最高といえるデコード処理となっていく。

BeforeProcedureRegisters_SMSW
SIMPLE_MOVE_REGISTERS_Up_and_Down
BeforeProcedureRegisters_RDRAND
SIMPLE_MOVE_REGISTERS_Up_and_Down
IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F278_MMX.pbi"
SIMPLE_MOVE_REGISTERS_Up_and_Down
XORPS_xmm15_to_xmm0_xmm15

; 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 BeforeProcedureRegisters_SMSW SIMPLE_MOVE_REGISTERS_Up_and_Down BeforeProcedureRegisters_RDRAND SIMPLE_MOVE_REGISTERS_Up_and_Down IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F278_MMX.pbi" SIMPLE_MOVE_REGISTERS_Up_and_Down XORPS_xmm15_to_xmm0_xmm15 Macro XORPS_xmm15_to_xmm0_xmm15 XOR_Rax_Rax_x2 ; 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] !MOVQ xmm15, Rax !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 !MOVQ Rax, xmm0 ; 64 @@ End EndMacro Procedure.i Digital_Bit_Stabilizer_ToRax64(a.i, b.i, *target) !NOP QWORD [Rip] !NOP QWORD [Rsp-16] !NOP QWORD [Rip] !NOP QWORD [Rsp] !NOP QWORD [Rip] !NOP QWORD [Rip] BeforeProcedureRegisters_SMSW SIMPLE_MOVE_REGISTERS_Up_and_Down BeforeProcedureRegisters_RDRAND SIMPLE_MOVE_REGISTERS_Up_and_Down IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F278_MMX.pbi" SIMPLE_MOVE_REGISTERS_Up_and_Down Protected result.i ; PSLLD_PSRLD_Setup_Perfect16bits XOR_R9_R9_255 !LEA R9, [p.p_target] NEG_to_NEG_R9 After_NEG_to_NEG_R9 PSLLD_PSRLD_Conditioner_Perfect16bits PSLLD_PSRLD_ShapeUp_Perfect16bits ; Set_mm5_SHL_mm3_SetCL1_Full XOR_Rax_Rax_x2 !MOVQ Rax, mm5 XOR_Rax_Rax_x2 !MOVQ Rax, mm5 ;;;; !EMMS !MOVQ2DQ xmm0, mm5 !MOVQ2DQ xmm0, mm3 !MOVDQ2Q mm0, xmm0 !MOVDQ2Q mm1, xmm0 !MOVDQ2Q mm2, xmm0 !MOVDQ2Q mm3, xmm0 !MOVDQ2Q mm4, xmm0 !MOVDQ2Q mm5, xmm0 !MOVDQ2Q mm6, xmm0 !MOVDQ2Q mm7, xmm0 ;set 1 to mm7 !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 mm0, mm7 ;set 1 to mm0 !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 !NOP QWORD [Rip] !NOP QWORD [Rip] !NOP QWORD [R9] !MOVQ mm0, QWORD [R9] ;load memory chip reference !MOVQ mm1, QWORD [R9] ;load memory chip reference !MOVQ mm2, QWORD [R9] ;load memory chip reference !MOVQ mm3, QWORD [R9] ;load memory chip reference !MOVQ mm4, QWORD [R9] ;load memory chip reference !MOVQ mm5, QWORD [R9] ;load memory chip reference !MOVQ mm6, QWORD [R9] ;load memory chip reference !MOVQ mm7, QWORD [R9] ;load memory chip reference !MOVQ mm3, mm0 ;mmx stabilizer !MOVQ mm1, mm3 ;mmx stabilizer !MOVQ mm7, mm1 ;mmx stabilizer !MOVQ mm2, mm7 ;mmx stabilizer !MOVQ mm6, mm2 ;mmx stabilizer !MOVQ mm4, mm6 ;mmx stabilizer !MOVQ mm5, mm4 ;mmx stabilizer !MOVQ Rax, mm5 ;mmx stabilizer !EMMS ProcedureReturn IncludeFile "FNOPx512.txt" EndProcedure

マクロ命令について
Macro BeforeProcedureRegisters_RDRAND
  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]
  !RDRAND Rax
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rdx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rsp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rsi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R9
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R11
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R13
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND 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]
  !RDRAND Rcx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rbx
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rbp
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND Rdi
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R8
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R10
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R12
  !NOP QWORD [Rip-32]
  !NOP QWORD [Rip+16]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !RDRAND R14
  !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 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 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 SIMPLE_MOVE_REGISTERS_Up_and_Down
  ; 249 @@
  !NOP QWORD [Rip+136]
  !NOP QWORD [Rip+152]
  !NOP QWORD [Rip+168]
  !NOP QWORD [Rip+184]
  !NOP QWORD [Rip+200]
  !NOP QWORD [Rip+216]
  !NOP QWORD [Rip+232]
  !NOP QWORD [Rip+248]
  !NOP QWORD [Rip+264]
  !NOP QWORD [Rip+280]
  !NOP QWORD [Rip+296]
  !NOP QWORD [Rip+312]
  !NOP QWORD [Rip+328]
  !NOP QWORD [Rip+344]
  !NOP QWORD [Rip+360]
  !NOP QWORD [Rip+376]
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  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
  ; 249 @@ End
EndMacro

Intel Core Processor Manual は「論理レジスタ」で記述されて、マイクロ命令でRISC設計の実行になる時に「論理レジスタから物理レジスタ」へ同期される。その同期処理は「オーバークロック状態で転送されると考えると、ジッター原因である」という想定により、SIMPLE_MOVE_REGISTERS_Up_and_Down のように意図的に記述していれば、不信感の同期処理は回避できる。

MajiorityCleanES のキュア処理を使用した、電子ビット基準のレジスタスタビライザー
  BeforeProcedureRegisters_SMSW
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  BeforeProcedureRegisters_RDRAND
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F278_MMX.pbi"
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  XORPS_xmm15_to_xmm0_xmm15

; v_RN NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F278_MMX.pbi
Macro INIT_MMX_R8
  Debug "XOR_Rcx_Rcx"
  Debug "Set_CL1"
  Debug "MOVZX_Rcx"
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm0, xmm0"
  Debug "!MOVDQ2Q mm0, xmm0"
  Debug "!MOVDQ2Q mm1, xmm0"
  Debug "!MOVDQ2Q mm2, xmm0"
  Debug "!MOVDQ2Q mm3, xmm0"
  Debug "!MOVDQ2Q mm4, xmm0"
  Debug "!MOVDQ2Q mm5, xmm0"
  Debug "!MOVDQ2Q mm6, xmm0"
  Debug "!MOVDQ2Q mm7, xmm0"
  Debug "!MOVQ mm7, Rcx"
  Debug "!PSLLW mm0, mm7 ;1  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;2  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;3  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;4  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;5  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;6  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;7  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;8  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;9  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;A  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;B  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;C  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;D  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;E  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;F  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;0  Left 1bit shift"
  Debug "!MOVQ mm0, mm7"
  Debug "!PSLLW mm1, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;0  Left 1bit shift"
EndMacro

Macro INIT_MMX_R9
  Debug "XOR_Rcx_Rcx"
  Debug "Set_CL1"
  Debug "MOVZX_Rcx"
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm0, xmm0"
  Debug "!MOVDQ2Q mm0, xmm0"
  Debug "!MOVDQ2Q mm1, xmm0"
  Debug "!MOVDQ2Q mm2, xmm0"
  Debug "!MOVDQ2Q mm3, xmm0"
  Debug "!MOVDQ2Q mm4, xmm0"
  Debug "!MOVDQ2Q mm5, xmm0"
  Debug "!MOVDQ2Q mm6, xmm0"
  Debug "!MOVDQ2Q mm7, xmm0"
  Debug "!MOVQ mm7, Rcx"
  Debug "!PSLLW mm0, mm7 ;1  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;2  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;3  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;4  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;5  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;6  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;7  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;8  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;9  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;A  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;B  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;C  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;D  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;E  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;F  Left 1bit shift"
  Debug "!PSLLW mm0, mm7 ;0  Left 1bit shift"
  Debug "!MOVQ mm0, mm7"
  Debug "!PSLLW mm1, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm1, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm2, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm3, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm4, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm5, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm6, mm0 ;0  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;1  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;2  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;3  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;4  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;5  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;6  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;7  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;8  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;9  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;A  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;B  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;C  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;D  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;E  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;F  Left 1bit shift"
  Debug "!PSLLW mm7, mm0 ;0  Left 1bit shift"
EndMacro

Macro Load_memory_chip_referene_R8
  Debug "!MOVQ mm1, [R8] ;load memory chip reference"
  Debug "!MOVQ mm2, [R8] ;load memory chip reference"
  Debug "!MOVQ mm3, [R8] ;load memory chip reference"
  Debug "!MOVQ mm4, [R8] ;load memory chip reference"
  Debug "!MOVQ mm5, [R8] ;load memory chip reference"
  Debug "!MOVQ mm6, [R8] ;load memory chip reference"
  Debug "!MOVQ mm7, [R8] ;load memory chip reference"
EndMacro

Macro Load_memory_chip_referene_R9
  Debug "!MOVQ mm1, [R9] ;load memory chip reference"
  Debug "!MOVQ mm2, [R9] ;load memory chip reference"
  Debug "!MOVQ mm3, [R9] ;load memory chip reference"
  Debug "!MOVQ mm4, [R9] ;load memory chip reference"
  Debug "!MOVQ mm5, [R9] ;load memory chip reference"
  Debug "!MOVQ mm6, [R9] ;load memory chip reference"
  Debug "!MOVQ mm7, [R9] ;load memory chip reference"
EndMacro

Macro NEG_to_NEG_R8
  Debug "!NEG R8"
  Debug "!NOT R8b"
  Debug "!XCHG R8, R8"
  Debug "!NOT R8b"
  Debug "!NEG R8"
  Debug "After_NEG_to_NEG_R8"
EndMacro

Macro NEG_to_NEG_R9
  Debug "!NEG R9"
  Debug "!NOT R9b"
  Debug "!XCHG R9, R9"
  Debug "!NOT R9b"
  Debug "!NEG R9"
  Debug "After_NEG_to_NEG_R9"
EndMacro

Macro Isolate_MMX
  Debug "!MOVQ mm1, mm3"
  Debug "!MOVQ mm7, mm1"
  Debug "!MOVQ mm2, mm7"
  Debug "!MOVQ mm6, mm2"
  Debug "!MOVQ mm4, mm6"
  Debug "!MOVQ mm5, mm4"
EndMacro

Macro FINCSTP_x8
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
  Debug "!FINCSTP"
EndMacro

Macro FINIT_FILD_R8
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
  Debug "!FILD qword [R8]"
EndMacro

Macro FINIT_FLD_R8
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
  Debug "!FLD qword [R8]"
EndMacro

Macro FINIT_FILD_R9
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
  Debug "!FILD qword [R9]"
EndMacro

Macro FINIT_FLD_R9
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
  Debug "!FLD qword [R9]"
EndMacro

Debug "XOR_R8_R8_255"
Debug "XOR_R8_R8_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R8"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!LEA R8, [v_RN]"
NEG_to_NEG_R8
Debug "!MOVQ mm5, R8"
Debug "XOR_R8_R8_255"
Debug "!MOVQ R8, mm5"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R8]"
Debug "XOR_R9_R9_255"
Debug "!MOVQ mm5, R9"
Debug "!MOVQ mm5, [R8]"
Debug "XOR_R9_R9_255"
Debug "XOR_R9_R9_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R9"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!MOVQ R9, mm5"
Debug "MOVZX_R9"
Debug "!LEA R9, [v_RN]"
NEG_to_NEG_R9
Debug "!MOVQ mm5, R9"
Debug "XOR_R9_R9_255"
Debug "!MOVQ R9, mm5"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R9]"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!EMMS"
Debug "!FINIT"
FINCSTP_x8
FINIT_FLD_R9
FINCSTP_x8
FINIT_FLD_R9
FINCSTP_x8
FINIT_FLD_R9
FINCSTP_x8
FINIT_FLD_R9
FINCSTP_x8
FINIT_FILD_R9
FINCSTP_x8
FINIT_FILD_R9
FINCSTP_x8
FINIT_FILD_R9
FINCSTP_x8
FINIT_FILD_R9
FINCSTP_x8
Debug "!FINIT"

  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_Rdi_Rdi_Up_Down"
  Debug "!MOVQ mm0, Rdi"
  Debug "XOR_Rdi_Rdi_255"
  Debug "XOR_Rdi_Rdi_255"
  Debug "!MOVQ Rdi, mm5 ; Clear Rdi"
  Debug "MOVZX_Rdi"
  Load_memory_chip_referene_R9
  Debug "!MOVQ Rdi, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rdi"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rdi, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_Rbp_Rbp_Up_Down"
  Debug "!MOVQ mm0, Rbp"
  Debug "XOR_Rbp_Rbp_255"
  Debug "XOR_Rbp_Rbp_255"
  Debug "!MOVQ Rbp, mm5 ; Clear Rbp"
  Debug "MOVZX_Rbp"
  Load_memory_chip_referene_R9
  Debug "!MOVQ Rbp, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rbp"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rbp, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_Rbx_Rbx_Up_Down"
  Debug "!MOVQ mm0, Rbx"
  Debug "XOR_Rbx_Rbx_255"
  Debug "XOR_Rbx_Rbx_255"
  Debug "!MOVQ Rbx, mm5 ; Clear Rbx"
  Debug "MOVZX_Rbx"
  Load_memory_chip_referene_R9
  Debug "!MOVQ Rbx, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rbx"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rbx, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_Rcx_Rcx_Up_Down"
  Debug "!MOVQ mm0, Rcx"
  Debug "XOR_Rcx_Rcx_255"
  Debug "XOR_Rcx_Rcx_255"
  Debug "!MOVQ Rcx, mm5 ; Clear Rcx"
  Debug "MOVZX_Rcx"
  Load_memory_chip_referene_R9
  Debug "!MOVQ Rcx, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rcx"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rcx, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_R8_R8_Up_Down"
  Debug "!MOVQ mm0, R8"
  Debug "XOR_R8_R8_255"
  Debug "XOR_R8_R8_255"
  Debug "!MOVQ R8, mm5 ; Clear R8"
  Debug "MOVZX_R8"
  Load_memory_chip_referene_R9
  Debug "!MOVQ R8, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R8"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R8, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_R10_R10_Up_Down"
  Debug "!MOVQ mm0, R10"
  Debug "XOR_R10_R10_255"
  Debug "XOR_R10_R10_255"
  Debug "!MOVQ R10, mm5 ; Clear R10"
  Debug "MOVZX_R10"
  Load_memory_chip_referene_R9
  Debug "!MOVQ R10, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R10"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R10, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_R12_R12_Up_Down"
  Debug "!MOVQ mm0, R12"
  Debug "XOR_R12_R12_255"
  Debug "XOR_R12_R12_255"
  Debug "!MOVQ R12, mm5 ; Clear R12"
  Debug "MOVZX_R12"
  Load_memory_chip_referene_R9
  Debug "!MOVQ R12, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R12"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R12, mm5 ;mmx stabilizer"
    
  INIT_MMX_R9
  Debug "!MOVQ mm0, [R9] ;load memory chip reference"
  Debug "MOV_R14_R14_Up_Down"
  Debug "!MOVQ mm0, R14"
  Debug "XOR_R14_R14_255"
  Debug "XOR_R14_R14_255"
  Debug "!MOVQ R14, mm5 ; Clear R14"
  Debug "MOVZX_R14"
  Load_memory_chip_referene_R9
  Debug "!MOVQ R14, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R14"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R14, mm5 ;mmx stabilizer"

Debug "XOR_R9_R9_255"
Debug "XOR_R9_R9_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R9"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!LEA R9, [v_RN]"
NEG_to_NEG_R9
Debug "!MOVQ mm5, R9"
Debug "XOR_R9_R9_255"
Debug "!MOVQ R9, mm5"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R9]"
Debug "XOR_R8_R8_255"
Debug "!MOVQ mm5, R8"
Debug "!MOVQ mm5, [R9]"
Debug "XOR_R8_R8_255"
Debug "XOR_R8_R8_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R8"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!MOVQ R8, mm5"
Debug "MOVZX_R8"
Debug "!LEA R8, [v_RN]"
NEG_to_NEG_R8
Debug "!MOVQ mm5, R8"
Debug "XOR_R8_R8_255"
Debug "!MOVQ R8, mm5"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R8]"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!EMMS"
Debug "!FINIT"
FINCSTP_x8
FINIT_FLD_R8
FINCSTP_x8
FINIT_FLD_R8
FINCSTP_x8
FINIT_FLD_R8
FINCSTP_x8
FINIT_FLD_R8
FINCSTP_x8
FINIT_FILD_R8
FINCSTP_x8
FINIT_FILD_R8
FINCSTP_x8
FINIT_FILD_R8
FINCSTP_x8
FINIT_FILD_R8
FINCSTP_x8
Debug "!FINIT"

  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_Rsi_Rsi_Up_Down"
  Debug "!MOVQ mm0, Rsi"
  Debug "XOR_Rsi_Rsi_255"
  Debug "XOR_Rsi_Rsi_255"
  Debug "!MOVQ Rsi, mm5 ; Clear Rsi"
  Debug "MOVZX_Rsi"
  Load_memory_chip_referene_R8
  Debug "!MOVQ Rsi, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rsi"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rsi, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_Rsp_Rsp_Up_Down"
  Debug "!MOVQ mm0, Rsp"
  Debug "XOR_Rsp_Rsp_255"
  Debug "XOR_Rsp_Rsp_255"
  Debug "!MOVQ Rsp, mm5 ; Clear Rsp"
  Debug "MOVZX_Rsp"
  Load_memory_chip_referene_R8
  Debug "!MOVQ Rsp, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rsp"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rsp, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_Rax_Rax_Up_Down"
  Debug "!MOVQ mm0, Rax"
  Debug "XOR_Rax_Rax_255"
  Debug "XOR_Rax_Rax_255"
  Debug "!MOVQ Rax, mm5 ; Clear Rax"
  Debug "MOVZX_Rax"
  Load_memory_chip_referene_R8
  Debug "!MOVQ Rax, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rax"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rax, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_Rdx_Rdx_Up_Down"
  Debug "!MOVQ mm0, Rdx"
  Debug "XOR_Rdx_Rdx_255"
  Debug "XOR_Rdx_Rdx_255"
  Debug "!MOVQ Rdx, mm5 ; Clear Rdx"
  Debug "MOVZX_Rdx"
  Load_memory_chip_referene_R8
  Debug "!MOVQ Rdx, mm5 ; Set Electronic Reference"
  Debug "MOVZX_Rdx"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ Rdx, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_R9_R9_Up_Down"
  Debug "!MOVQ mm0, R9"
  Debug "XOR_R9_R9_255"
  Debug "XOR_R9_R9_255"
  Debug "!MOVQ R9, mm5 ; Clear R9"
  Debug "MOVZX_R9"
  Load_memory_chip_referene_R8
  Debug "!MOVQ R9, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R9"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R9, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_R11_R11_Up_Down"
  Debug "!MOVQ mm0, R11"
  Debug "XOR_R11_R11_255"
  Debug "XOR_R11_R11_255"
  Debug "!MOVQ R11, mm5 ; Clear R11"
  Debug "MOVZX_R11"
  Load_memory_chip_referene_R8
  Debug "!MOVQ R11, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R11"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R11, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_R13_R13_Up_Down"
  Debug "!MOVQ mm0, R13"
  Debug "XOR_R13_R13_255"
  Debug "XOR_R13_R13_255"
  Debug "!MOVQ R13, mm5 ; Clear R13"
  Debug "MOVZX_R13"
  Load_memory_chip_referene_R8
  Debug "!MOVQ R13, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R13"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R13, mm5 ;mmx stabilizer"  
  
  INIT_MMX_R8
  Debug "!MOVQ mm0, [R8] ;load memory chip reference"
  Debug "MOV_R15_R15_Up_Down"
  Debug "!MOVQ mm0, R15"
  Debug "XOR_R15_R15_255"
  Debug "XOR_R15_R15_255"
  Debug "!MOVQ R15, mm5 ; Clear R15"
  Debug "MOVZX_R15"
  Load_memory_chip_referene_R8
  Debug "!MOVQ R15, mm5 ; Set Electronic Reference"
  Debug "MOVZX_R15"
  Debug "!MOVQ mm3, mm0 ;load target data"
  Isolate_MMX
  Debug "!MOVQ R15, mm5 ;mmx stabilizer"  

Debug "XOR_R9_R9_255"
Debug "XOR_R9_R9_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R9"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!LEA R9, [v_RN]"
NEG_to_NEG_R9
Debug "!MOVQ mm5, R9"
Debug "XOR_R9_R9_255"
Debug "!MOVQ R9, mm5"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R9]"
Debug "XOR_R8_R8_255"
Debug "!MOVQ mm5, R8"
Debug "!MOVQ mm5, [R9]" ;_WasapiProcB
Debug "XOR_R8_R8_255"
Debug "XOR_R8_R8_255"
Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!SMSW R8"
Debug "!NOP QWORD [Rip-32]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!MOVQ R8, mm5"
Debug "MOVZX_R8"
Debug "!LEA R8, [v_RN]"
NEG_to_NEG_R8
Debug "!MOVQ mm5, R8"
Debug "XOR_R8_R8_255"
Debug "!MOVQ R8, mm5"
INIT_MMX_R8
;
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [R8]"
Debug "!MOVQ mm0, [R8] ;load memory chip reference"
Load_memory_chip_referene_R8
Debug "!MOVQ mm1, mm3"
Debug "!MOVQ mm7, mm1"
Debug "!MOVQ mm2, mm7"
Debug "!MOVQ mm6, mm2"
Debug "!MOVQ mm4, mm6"
Debug "!MOVQ mm5, mm4"
; step 1
For I=0 To 7
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!PXOR xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm3"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm1"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm7"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm2"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm6"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm4"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm5"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!PUNPCKLDQ xmm"+Str(I)+", xmm"+Str(I)
  Debug "!PUNPCKLWD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!PUNPCKLBW xmm"+Str(I)+", xmm"+Str(I)
Next
; step 2 , 2kai kurikaesu
For I=0 To 7
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPS xmm"+Str(I)+", [R8]"
  Debug "!MOVHPS xmm"+Str(I)+", [R8]"
  Debug "!XORPD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPD xmm"+Str(I)+", [R8]"
  Debug "!MOVHPD xmm"+Str(I)+", [R8]"
Next
For I=0 To 7
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPS xmm"+Str(I)+", [R8]"
  Debug "!MOVHPS xmm"+Str(I)+", [R8]"
  Debug "!XORPD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPD xmm"+Str(I)+", [R8]"
  Debug "!MOVHPD xmm"+Str(I)+", [R8]"
Next
;
; step 1
For I=8 To 15
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!PXOR xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm3"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm1"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm7"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm2"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm6"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm4"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!MOVQ2DQ xmm"+Str(I)+", mm5"
  Debug "!PUNPCKLQDQ xmm"+Str(I)+", xmm"+Str(I)
  ;
  Debug "!PUNPCKLDQ xmm"+Str(I)+", xmm"+Str(I)
  Debug "!PUNPCKLWD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!PUNPCKLBW xmm"+Str(I)+", xmm"+Str(I)
Next
; step 2 , 2kai kurikaesu
For I=8 To 15
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPS xmm"+Str(I)+", [R8]"
  Debug "!MOVHPS xmm"+Str(I)+", [R8]"
  Debug "!XORPD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPD xmm"+Str(I)+", [R8]"
  Debug "!MOVHPD xmm"+Str(I)+", [R8]"
Next
For I=8 To 15
  Debug "!NOP QWORD [Rip+24]"
  Debug "!NOP QWORD [Rip+16]"
  Debug "!NOP QWORD [Rip]"
  Debug "!NOP QWORD [Rip]"
  Debug "!XORPS xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPS xmm"+Str(I)+", [R8]"
  Debug "!MOVHPS xmm"+Str(I)+", [R8]"
  Debug "!XORPD xmm"+Str(I)+", xmm"+Str(I)
  Debug "!MOVLPD xmm"+Str(I)+", [R8]"
  Debug "!MOVHPD xmm"+Str(I)+", [R8]"
Next
For I=0 To 15
  If I=>8
    Debug "!MINSS xmm"+Str(I)+", xmm"+Str(I-8)
  Else
    Debug "!MINSS xmm"+Str(I+8)+", xmm"+Str(I)
  EndIf
  If I=>8
    Debug "!MINSD xmm"+Str(I)+", xmm"+Str(I-8)
  Else
    Debug "!MINSD xmm"+Str(I+8)+", xmm"+Str(I)
  EndIf
Next
For I=0 To 15
  If I=>8
    Debug "!MINSS xmm"+Str(I)+", xmm"+Str(I-8)
  Else
    Debug "!MINSS xmm"+Str(I+8)+", xmm"+Str(I)
  EndIf
  If I=>8
    Debug "!MINSD xmm"+Str(I)+", xmm"+Str(I-8)
  Else
    Debug "!MINSD xmm"+Str(I+8)+", xmm"+Str(I)
  EndIf
Next

Debug "!NOP QWORD [Rip+24]"
Debug "!NOP QWORD [Rip+16]"
Debug "!NOP QWORD [Rip]"
Debug "!NOP QWORD [Rip]"
Debug "!EMMS"
CallDebugger

Nontallion で使われるデコード処理は、前後に「MajiorityCleanES 最新キュア処理」を実行しており、演算エラーが物理的に起きない仕組みを採用して、完全な意味の「ビットパーフェクト」を達成しており、他の追従を許さない。

AlderLakeからは NOP QWORD [Rip] を多用している。これは下記の処理をやって、指定すると良くなる。特にスレッド処理では改善しやすい。

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による転送処理によって実現しており、ジッター現象は起きにくい。

Elementary の バッファ転送処理
Macro CopyMemoryMace_Inside
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !FNOP
  !FNOP
  !FNOP
  !FNOP
  !XCHG cl, cl
  MOVZX_Rcx
  !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 [R9] ; [12.05]
  !MOVQ mm3, [R9]
  !MOVQ mm3, [R9] ; 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 R9, mm2
  MOV_R9_R9_Down
  !PADDQ mm4, mm6
  !MOVQ R8, mm4
  MOV_R8_R8_Down
  !DEC cl
  !FNOP ; for wide
  !FNOP
  !FNOP
  !FNOP ;4
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
EndMacro

Procedure CopyMemoryMace(dummy.i, CMM_length.i, *CMM_in, *CMM_out)
  Protected CMM_D0.i, CMM_D8.i
  XOR_Rax_Rax
  !MOVNTI [p.v_CMM_D0], Rax
  !MOVNTI [p.v_CMM_D8], Rax
  !INC al
  !INC al
  !INC al
  !INC al ;4
  !INC al
  !INC al
  !INC al
  !INC al ;8
  MOVZX_Rax
  !MOVNTI [p.v_CMM_D8], Rax
  Protected CMM_Cycle.i
  If CMM_length=CMM_D0
    CopyMemory(*CMM_in, *CMM_out, CMM_length)
    Goto CopyMemoryMace_End
  EndIf
  XOR_R8_R8_255
  !MOV R8, [v_RNA]
  MOVZX_R8
  !MOV R8, [p.p_CMM_out]
  ; Dont set NEGtoNEG dame for clear
  MOV_R8_R8_Up_Down
  !NOP QWORD [Rip]
  !NOP QWORD [R8]
  ;
  XOR_Rdx_Rdx
  !MOV Rdx, [p.v_CMM_Cycle]
  MOV_Rdx_Rdx_Up_Down
  ;
  XOR_Rcx_Rcx
  Set_CL1
  MOVZX_Rcx
  !MOVQ mm7, Rcx
  ;
  !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 mm4, 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 mm0, [v_RDM]
  ;
  !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
  XOR_R9_R9
  !INC R9b
  !INC R9b
  !INC R9b
  !INC R9b
  !INC R9b
  !INC R9b
  !INC R9b
  !INC R9b ;8
  MOVZX_R9
  !MOVQ mm6, R9
  ;
  !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
  XOR_R9_R9_255
  !MOV R9, [v_RNA]
  MOVZX_R9
  !MOV R9, [p.p_CMM_in]
  ; Dont set NEGtoNEG dame for clear
  MOV_R9_R9_Up_Down
  !NOP QWORD [Rip]
  !NOP QWORD [R9]
  !MOVQ mm2, R9
  ;
  !JMP CopyMemoryMace_LOOP_Start
  FNOP512_beforeLOOP
  !CopyMemoryMace_LOOP_Start:
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !FNOP
  !FNOP
  !FNOP
  !FNOP
  !MOV Rcx, Rdx
  !SUB Rcx, [v_RD64]
  !JBE CopyMemoryMace_LOOP_Finish_Start
  !MOV Rdx, Rcx
  XOR_Rcx_Rcx
  !INC cl
  !INC cl
  !INC cl
  !INC cl
  !SHL cl, cl
  ; cx = 64
  !JMP CopyMemoryMace_LOOP
  FNOP512_beforeLOOP
  !CopyMemoryMace_LOOP:
  CopyMemoryMace_Inside
  !JNZ CopyMemoryMace_LOOP
  !XCHG cl, cl
  MOVZX_Rcx
  !JMP CopyMemoryMace_LOOP_Start
  ;
  !CopyMemoryMace_LOOP_Finish_Start:
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
  !FNOP
  !FNOP
  !FNOP
  !FNOP
  !MOV Rcx, Rdx
  MOV_Rcx_Rcx_Down
  !JMP CopyMemoryMace_LOOP_Finish
  FNOP512_beforeLOOP
  !CopyMemoryMace_LOOP_Finish:
  CopyMemoryMace_Inside
  !JNZ CopyMemoryMace_LOOP_Finish
  !XCHG cl, cl
  MOVZX_Rcx
  !EMMS
  CopyMemoryMace_End:
  !NOP QWORD [Rip]
  !NOP QWORD [Rip]
EndProcedure

このように試して良かったことは「MMXのメモリコピー処理」はジッターレスになりやすい。MOVNTQ QWORD [Rcx], mm4 を使ったあと、NOP QWORD [Rcx] というデータキャッシュを行わないと、ジッター影響になりやすい。キャッシュ回避して書き出すけれど、少しタイミングをずらしてキャッシュさせると良くなる。

レジスタの初期化は「スレッシュホールド電圧の "0" を汎用レジスタの命令で決めた後に、MMX 左シフト命令で初期化した mm5 でクリア、それを物理レジスタへ更新 MOV_Up_Down、同様に音楽データに対して処理」、出力バッファに対して「"反転データ" "正規データ" によるスタビライザー処理を実行」して行い、転送している。カウンター処理は数字を使わないで INC 命令だけで処理している。とても難解で理解できない処理ですが、高級オーディオで「音が評価されている」という結果が伴っているので、今の時点では短く最適化できません。

野次馬「これほどに努力しているのなら、ASIO SDK から作ったらいいじゃないの?」

ASIO4ALL が最初に公開された時、不安定すぎる状態でした。これを簡単に作れなかったように、サウンドドライバーの設計を細かく熟知していないと、ソースコードを書けても USB-DAC へ出力できないものになる。それで難しい。ASIO SDK は「サウンドドライバーの独占特許」に関係する部分について「完全非公開」になっており、そこを記述するには「リバースエンジニアリング」する必要がある。これは「ASIO SDK」だけでなく「WINDOWS SDK」や「DRIVERS SDK」のほか、「Sound Blaster Driver's Hack」の知識が必要です。世界中のプログラマーが ASIO4ALL を作ろうとしたけれど、安定するものは「ほとんど作れていない」ぐらいに難しい。


最低必要なプログラマーの知識
会社の開発環境で「スーパージッターレスの研究をしているPC」と「銀行決済の情報サービス保守をしているPC」、ローカルネットワークが同じであるとき、すべて「スーパージッターレス対応のPC」でなければ、「銀行決済の情報サービス保守、決済不能トラブル」になる。なぜなら、サイバーアタックの「本物」では「スーパージッターレスで送信され、通信機器が中継機器もフルボッコで破損する」という根拠に基づく。この場合、デジタルからアナログに変換された経路から「すべての機材を新品へ交換しなければ信頼性は回復しない」というもので、無関係と思っていたPCで「キーボード」「マウス」の入力機器が動作異常を引き起こせば、「スーパージッターレス信号のサイバーアタック」を受けたと判断できる。

作者環境では「無線LAN SSID を開発環境と通常環境、信号分離して運用」





Developer's in Journal


2024-01-26

ES111 と ES112 の違いについて、どのように判断して変更したのか、理解できますか?

MajiorityCamisole ES112 Generate source code
Debug "; MajiorityCamisole ExtremeStabilizer 112 (2023 01 23)"
Debug "; RDSEED BLSRx64 CPU reg. Stabilizer for network streaming anime video"
Debug "; Copyright (c) 2020-2024 Hiroyuki Yokota (oryaaaaa)"
Debug "; Design based by Military LAB-AI designed (Customized  Hiroyuki Yokota)"
Debug ""
Debug "MessageRequester("+Chr(34)+"END"+Chr(34)+","+Chr(34)+"Compiler options Executable Format Console And CPU With MMX"+Chr(34)+") : End"
Debug ""
!extrn PB_RandomSeed

Global NewList Reg64.s()
AddElement(Reg64()) : Reg64() ="Rax" : AddElement(Reg64()) : Reg64() ="Rbx"
AddElement(Reg64()) : Reg64() ="Rcx" : AddElement(Reg64()) : Reg64() ="Rdx"
AddElement(Reg64()) : Reg64() ="Rsp" : AddElement(Reg64()) : Reg64() ="Rsi"
AddElement(Reg64()) : Reg64() ="Rbp" : AddElement(Reg64()) : Reg64() ="Rdi"
AddElement(Reg64()) : Reg64() ="R8" : AddElement(Reg64()) : Reg64() ="R9"
AddElement(Reg64()) : Reg64() ="R10" : AddElement(Reg64()) : Reg64() ="R11"
AddElement(Reg64()) : Reg64() ="R12" : AddElement(Reg64()) : Reg64() ="R13"
AddElement(Reg64()) : Reg64() ="R14" : AddElement(Reg64()) : Reg64() ="R15"

Global NewList Reg64A.s()
AddElement(Reg64A()) : Reg64A() ="Rax" : AddElement(Reg64A()) : Reg64A() ="Rdx"
AddElement(Reg64A()) : Reg64A() ="Rsp" : AddElement(Reg64A()) : Reg64A() ="Rsi"
AddElement(Reg64A()) : Reg64A() ="R9" : AddElement(Reg64A()) : Reg64A() ="R11"
AddElement(Reg64A()) : Reg64A() ="R13" : AddElement(Reg64A()) : Reg64A() ="R15"

Global NewList Reg64B.s()
AddElement(Reg64B()) : Reg64B() ="Rbx" : AddElement(Reg64B()) : Reg64B() ="Rcx"
AddElement(Reg64B()) : Reg64B() ="Rbp" : AddElement(Reg64B()) : Reg64B() ="Rdi"
AddElement(Reg64B()) : Reg64B() ="R8" : AddElement(Reg64B()) : Reg64B() ="R10"
AddElement(Reg64B()) : Reg64B() ="R12" : AddElement(Reg64B()) : Reg64B() ="R14"

!RDRAND Rcx
!CALL QWORD PB_RandomSeed
RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())

NewMap Reg16.s()
Reg16("Rax")="ax" : Reg16("Rbx")="bx" : Reg16("Rcx")="cx" : Reg16("Rdx")="dx"
Reg16("Rsp")="sp" : Reg16("Rsi")="si" : Reg16("Rbp")="bp" : Reg16("Rdi")="di"
Reg16("R8")="R8w" : Reg16("R9")="R9w" : Reg16("R10")="R10w" : Reg16("R11")="R11w"
Reg16("R12")="R12w" : Reg16("R13")="R13w" : Reg16("R14")="R14w" : Reg16("R15")="R15w"

NewMap Reg8.s()
Reg8("Rax")="al" : Reg8("Rbx")="bl" : Reg8("Rcx")="cl" : Reg8("Rdx")="dl"
Reg8("Rsp")="spl" : Reg8("Rsi")="sil" : Reg8("Rbp")="bpl" : Reg8("Rdi")="dil"
Reg8("R8")="R8b" : Reg8("R9")="R9b" : Reg8("R10")="R10b" : Reg8("R11")="R11b"
Reg8("R12")="R12b" : Reg8("R13")="R13b" : Reg8("R14")="R14b" : Reg8("R15")="R15b"

ForEach Reg64()
  Debug "Macro BLSR_"+Reg64()+"_x64"
  For Loop=1 To 64
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro SHR_"+Reg64()+"_x64"
  For Loop=1 To 64
    Debug "  !SHR "+Reg64()+", 1"
  Next
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro MOV_"+Reg64()+"_Up_Down"
  Debug "  !MOV "+Reg8(Reg64())+", "+Reg8(Reg64())
  If Len(Reg8(Reg64()))=2
    Debug "  !MOV "+ReplaceString(Reg8(Reg64()), "l", "h")+", "+ReplaceString(Reg8(Reg64()), "l", "h")
  EndIf
  Debug "  !MOV "+Reg16(Reg64())+", "+Reg16(Reg64())
  Debug "  !MOV "+Reg64()+", "+Reg64()
  Debug "  !MOV "+Reg16(Reg64())+", "+Reg16(Reg64())
  If Len(Reg8(Reg64()))=2
    Debug "  !MOV "+ReplaceString(Reg8(Reg64()), "l", "h")+", "+ReplaceString(Reg8(Reg64()), "l", "h")
  EndIf
  Debug "  !MOV "+Reg8(Reg64())+", "+Reg8(Reg64())
  Debug "EndMacro"
  Debug ""
Next

Debug "Macro Set_CL1"
Debug "  BLSR_Rcx_x64"
Debug "  !INC cl"
Debug "  ; cx = 1"
Debug "EndMacro"
Debug ""
Debug "Macro Set_CL8"
Debug "  BLSR_Rcx_x64"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !SHL cl, cl"
Debug "  ; cx = 8"
Debug "EndMacro"
Debug ""
Debug "Macro Set_CL64"
Debug "  BLSR_Rcx_x64"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !SHL cl, cl"
Debug "  ; cx = 64"
Debug "EndMacro"
Debug ""
Debug "Macro ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
Debug "  BLSR_Rcx_x64"
Debug "  Set_CL1"
Debug "  MOVZX_Rcx"
Debug "  !MOVQ mm1, Rcx"
For Loop=1 To 16
  Debug "  !PSLLW mm0, mm1 ;"+Str(Loop)+" Left 1bit shift"
Next
Debug "  !MOVQ mm0, mm1"
For Roop=1 To 7
  For Loop=1 To 16
    Debug "  !PSLLW mm"+Str(Roop)+", mm0 ;"+Str(Loop)+" Left 1bit shift"
  Next
Next
Debug "EndMacro"
Debug ""

Macro SIMPLE_MOVE_REGISTERS_Up_and_Down
ForEach Reg64A()
  Debug "  MOV_"+Reg64A()+"_Up_Down"
Next
ForEach Reg64B()
  Debug "  MOV_"+Reg64B()+"_Up_Down"
Next
EndMacro

Debug "Macro MOVZX_Rcx"
Debug "  !MOVZX cx, cl"
Debug "  !MOVZX Rcx, cl"
Debug "  !MOVZX cx, cl"
Debug "EndMacro"
Debug ""

Macro BeforeProcedureRegisters_1st
  Debug "  ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
  ForEach Reg64A()
    Debug "  MOV_"+Reg64A()+"_Up_Down"
  Next
  Loop=0
  ForEach Reg64A()
    Debug "  !MOVQ mm"+Str(Loop)+", "+Reg64A()
    Loop + 1
  Next
 EndMacro
 
Macro BeforeProcedureRegisters_2nd
  Loop=0
  ForEach Reg64A()
    Debug "  !MOVQ "+Reg64A()+", mm"+Str(Loop)
    Loop + 1
  Next
  ForEach Reg64A()
    Debug "  MOV_"+Reg64A()+"_Up_Down"
  Next
  Debug "  ;"
  ForEach Reg64B()
    Debug "  MOV_"+Reg64B()+"_Up_Down"
  Next
  Loop=0
  ForEach Reg64B()
    Debug "  !MOVQ mm"+Str(Loop)+", "+Reg64B()
    Loop + 1
  Next
EndMacro

Macro BeforeProcedureRegisters_3rd
  Loop=0
  ForEach Reg64B()
    Debug "  !MOVQ "+Reg64B()+", mm"+Str(Loop)
    Loop + 1
  Next
  ForEach Reg64B()
    Debug "  MOV_"+Reg64B()+"_Up_Down"
  Next
  Debug "  !EMMS"
EndMacro
  
Macro BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !SMSW "+Reg64A()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64A()+"_x64"
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !SMSW "+Reg64B()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64B()+"_x64"
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Macro BeforeProcedureRegisters_RDSEED_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !RDSEED "+Reg64A()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64A()+"_x64"
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !RDSEED "+Reg64B()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64B()+"_x64"
  Next
  BeforeProcedureRegisters_3rd
EndMacro
  
Macro BeforeProcedureRegisters_SMSW_SHR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !RDSEED "+Reg64A()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  SHR_"+Reg64A()+"_x64"
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !RDSEED "+Reg64B()
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  SHR_"+Reg64B()+"_x64"
  Next
  BeforeProcedureRegisters_3rd
EndMacro
  
;- Start
Debug ";- PureBasicStart"
BeforeProcedureRegisters_SMSW_SHR
Debug "If OpenConsole("+Chr(34)+"MajiorityCamisole ES112 setup To General-purpose 64-bit registers."+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Copyright (c) 2020-2024 Hiroyuki Yokota (oryaaaaa)"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"-"+Chr(34)+")"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !StartStabilizer:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
For Roop=1 To 64
  Debug "  ; "+Str(Roop)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  Debug "  BLSR_Rcx_x64"
  Debug "  Set_CL64"
  Debug "  MOVZX_Rcx"
  Debug "  !NOP QWORD [Rip+16]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !CALL QWORD Sleep"
  Debug "  !NOP QWORD [Rip-32]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  !RDRAND Rcx
  !CALL QWORD PB_RandomSeed
  RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())
Next
SortList(Reg64(), #PB_Sort_Ascending)
SortList(Reg64A(), #PB_Sort_Ascending)
SortList(Reg64B(), #PB_Sort_Ascending)
BeforeProcedureRegisters_SMSW_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  PrintN("+Chr(34)+"Finished"+Chr(34)+")"
Debug "  BLSR_Rax_x64"
Debug "  BLSR_Rcx_x64"
Debug "  Set_CL64"
Debug "  MOVZX_Rcx"
Debug "  !MOV Rax, Rcx"
Debug "  Set_CL8"
Debug "  !SHL Rax, cl"
Debug "  !MOV Rcx, Rax"
Debug "  !NOP QWORD [Rip+16]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !CALL QWORD Sleep"
Debug "  !NOP QWORD [Rip-32]"
BeforeProcedureRegisters_SMSW_SHR
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JMP QWORD StartStabilizer"
Debug "  CloseConsole()"
Debug "EndIf"
Debug "Sleep_(0)"
Debug "End"
CallDebugger
End

MajiorityCamisole ES111 Generate source code
Debug "; MajiorityCamisole ExtremeStabilizer 111 (2023 01 22)"
Debug "; RDSEED SHRx64 CPU reg. Stabilizer for network streaming anime video"
Debug "; Copyright (c) 2020-2024 Hiroyuki Yokota (oryaaaaa)"
Debug "; Design based by Military LAB-AI designed (Customized  Hiroyuki Yokota)"
Debug ""
Debug "MessageRequester("+Chr(34)+"END"+Chr(34)+","+Chr(34)+"Compiler options Executable Format Console And CPU With MMX"+Chr(34)+") : End"
Debug ""
!extrn PB_RandomSeed

Global NewList Reg64.s()
AddElement(Reg64()) : Reg64() ="Rax" : AddElement(Reg64()) : Reg64() ="Rbx"
AddElement(Reg64()) : Reg64() ="Rcx" : AddElement(Reg64()) : Reg64() ="Rdx"
AddElement(Reg64()) : Reg64() ="Rsp" : AddElement(Reg64()) : Reg64() ="Rsi"
AddElement(Reg64()) : Reg64() ="Rbp" : AddElement(Reg64()) : Reg64() ="Rdi"
AddElement(Reg64()) : Reg64() ="R8" : AddElement(Reg64()) : Reg64() ="R9"
AddElement(Reg64()) : Reg64() ="R10" : AddElement(Reg64()) : Reg64() ="R11"
AddElement(Reg64()) : Reg64() ="R12" : AddElement(Reg64()) : Reg64() ="R13"
AddElement(Reg64()) : Reg64() ="R14" : AddElement(Reg64()) : Reg64() ="R15"

Global NewList Reg64A.s()
AddElement(Reg64A()) : Reg64A() ="Rax" : AddElement(Reg64A()) : Reg64A() ="Rdx"
AddElement(Reg64A()) : Reg64A() ="Rsp" : AddElement(Reg64A()) : Reg64A() ="Rsi"
AddElement(Reg64A()) : Reg64A() ="R9" : AddElement(Reg64A()) : Reg64A() ="R11"
AddElement(Reg64A()) : Reg64A() ="R13" : AddElement(Reg64A()) : Reg64A() ="R15"

Global NewList Reg64B.s()
AddElement(Reg64B()) : Reg64B() ="Rbx" : AddElement(Reg64B()) : Reg64B() ="Rcx"
AddElement(Reg64B()) : Reg64B() ="Rbp" : AddElement(Reg64B()) : Reg64B() ="Rdi"
AddElement(Reg64B()) : Reg64B() ="R8" : AddElement(Reg64B()) : Reg64B() ="R10"
AddElement(Reg64B()) : Reg64B() ="R12" : AddElement(Reg64B()) : Reg64B() ="R14"

!RDRAND Rcx
!CALL QWORD PB_RandomSeed
RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())

NewMap Reg16.s()
Reg16("Rax")="ax" : Reg16("Rbx")="bx" : Reg16("Rcx")="cx" : Reg16("Rdx")="dx"
Reg16("Rsp")="sp" : Reg16("Rsi")="si" : Reg16("Rbp")="bp" : Reg16("Rdi")="di"
Reg16("R8")="R8w" : Reg16("R9")="R9w" : Reg16("R10")="R10w" : Reg16("R11")="R11w"
Reg16("R12")="R12w" : Reg16("R13")="R13w" : Reg16("R14")="R14w" : Reg16("R15")="R15w"

NewMap Reg8.s()
Reg8("Rax")="al" : Reg8("Rbx")="bl" : Reg8("Rcx")="cl" : Reg8("Rdx")="dl"
Reg8("Rsp")="spl" : Reg8("Rsi")="sil" : Reg8("Rbp")="bpl" : Reg8("Rdi")="dil"
Reg8("R8")="R8b" : Reg8("R9")="R9b" : Reg8("R10")="R10b" : Reg8("R11")="R11b"
Reg8("R12")="R12b" : Reg8("R13")="R13b" : Reg8("R14")="R14b" : Reg8("R15")="R15b"

ForEach Reg64()
  Debug "Macro SHR_"+Reg64()+"_x64"
  For Loop=1 To 64
    Debug "  !SHR "+Reg64()+", 1"
  Next
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro MOV_"+Reg64()+"_Up_Down"
  Debug "  !MOV "+Reg8(Reg64())+", "+Reg8(Reg64())
  If Len(Reg8(Reg64()))=2
    Debug "  !MOV "+ReplaceString(Reg8(Reg64()), "l", "h")+", "+ReplaceString(Reg8(Reg64()), "l", "h")
  EndIf
  Debug "  !MOV "+Reg16(Reg64())+", "+Reg16(Reg64())
  Debug "  !MOV "+Reg64()+", "+Reg64()
  Debug "  !MOV "+Reg16(Reg64())+", "+Reg16(Reg64())
  If Len(Reg8(Reg64()))=2
    Debug "  !MOV "+ReplaceString(Reg8(Reg64()), "l", "h")+", "+ReplaceString(Reg8(Reg64()), "l", "h")
  EndIf
  Debug "  !MOV "+Reg8(Reg64())+", "+Reg8(Reg64())
  Debug "EndMacro"
  Debug ""
Next

Debug "Macro Set_CL1"
Debug "  SHR_Rcx_x64"
Debug "  !INC cl"
Debug "  ; cx = 1"
Debug "EndMacro"
Debug ""
Debug "Macro Set_CL8"
Debug "  SHR_Rcx_x64"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !SHL cl, cl"
Debug "  ; cx = 8"
Debug "EndMacro"
Debug ""
Debug "Macro Set_CL64"
Debug "  SHR_Rcx_x64"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !SHL cl, cl"
Debug "  ; cx = 64"
Debug "EndMacro"
Debug ""
Debug "Macro ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
Debug "  SHR_Rcx_x64"
Debug "  Set_CL1"
Debug "  MOVZX_Rcx"
Debug "  !MOVQ mm1, Rcx"
For Loop=1 To 16
  Debug "  !PSLLW mm0, mm1 ;"+Str(Loop)+" Left 1bit shift"
Next
Debug "  !MOVQ mm0, mm1"
For Roop=1 To 7
  For Loop=1 To 16
    Debug "  !PSLLW mm"+Str(Roop)+", mm0 ;"+Str(Loop)+" Left 1bit shift"
  Next
Next
Debug "EndMacro"
Debug ""

Macro SIMPLE_MOVE_REGISTERS_Up_and_Down
ForEach Reg64A()
  Debug "  MOV_"+Reg64A()+"_Up_Down"
Next
ForEach Reg64B()
  Debug "  MOV_"+Reg64B()+"_Up_Down"
Next
EndMacro

Debug "Macro MOVZX_Rcx"
Debug "  !MOVZX cx, cl"
Debug "  !MOVZX Rcx, cl"
Debug "  !MOVZX cx, cl"
Debug "EndMacro"
Debug ""
  
Macro BeforeProcedureRegisters_1st
  Debug "  ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
  ForEach Reg64A()
    Debug "  MOV_"+Reg64A()+"_Up_Down"
  Next
  Loop=0
  ForEach Reg64A()
    Debug "  !MOVQ mm"+Str(Loop)+", "+Reg64A()
    Loop + 1
  Next
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
 EndMacro
  
Macro BeforeProcedureRegisters_2nd
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  SHR_"+Reg64A()+"_x64"
  Next
  Loop=0
  ForEach Reg64A()
    Debug "  !MOVQ "+Reg64A()+", mm"+Str(Loop)
    Loop + 1
  Next
  ForEach Reg64A()
    Debug "  MOV_"+Reg64A()+"_Up_Down"
  Next
  Debug "  ;"
  ForEach Reg64B()
    Debug "  MOV_"+Reg64B()+"_Up_Down"
  Next
  Loop=0
  ForEach Reg64B()
    Debug "  !MOVQ mm"+Str(Loop)+", "+Reg64B()
    Loop + 1
  Next
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
EndMacro

Macro BeforeProcedureRegisters_3rd
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  SHR_"+Reg64B()+"_x64"
  Next
  Loop=0
  ForEach Reg64B()
    Debug "  !MOVQ "+Reg64B()+", mm"+Str(Loop)
    Loop + 1
  Next
  ForEach Reg64B()
    Debug "  MOV_"+Reg64B()+"_Up_Down"
  Next
  Debug "  !EMMS"
EndMacro
  
Macro BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_1st
  Debug "  !SMSW "+Reg64A()
  BeforeProcedureRegisters_2nd
  Debug "  !SMSW "+Reg64B()
  BeforeProcedureRegisters_3rd
EndMacro

Macro BeforeProcedureRegisters_RDSEED_BLSR
  BeforeProcedureRegisters_1st
  Debug "  !RDSEED "+Reg64A()
  BeforeProcedureRegisters_2nd
  Debug "  !RDSEED "+Reg64B()
  BeforeProcedureRegisters_3rd
EndMacro
  
;- Start
Debug ";- PureBasicStart"
BeforeProcedureRegisters_SMSW_BLSR
Debug "If OpenConsole("+Chr(34)+"MajiorityCamisole ES111 setup To General-purpose 64-bit registers."+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Copyright (c) 2020-2024 Hiroyuki Yokota (oryaaaaa)"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Location: JAPAN , I am finding to very attractive females."+Chr(34)+")"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !StartStabilizer:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW SHRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED SHRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
For Roop=1 To 64
  Debug "  ; "+Str(Roop)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  Debug "  SHR_Rcx_x64"
  Debug "  Set_CL64"
  Debug "  MOVZX_Rcx"
  Debug "  !NOP QWORD [Rip+16]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !CALL QWORD PB_Delay"
  Debug "  !NOP QWORD [Rip-32]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  !RDRAND Rcx
  !CALL QWORD PB_RandomSeed
  RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())
Next
SortList(Reg64(), #PB_Sort_Ascending)
SortList(Reg64A(), #PB_Sort_Ascending)
SortList(Reg64B(), #PB_Sort_Ascending)
BeforeProcedureRegisters_SMSW_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  PrintN("+Chr(34)+"Finished"+Chr(34)+")"
Debug "  SHR_Rax_x64"
Debug "  SHR_Rcx_x64"
Debug "  Set_CL64"
Debug "  MOVZX_Rcx"
Debug "  !MOV Rax, Rcx"
Debug "  Set_CL8"
Debug "  !SHL Rax, cl"
Debug "  !MOV Rcx, Rax"
Debug "  !NOP QWORD [Rip+16]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !CALL QWORD PB_Delay"
Debug "  !NOP QWORD [Rip-32]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JMP QWORD StartStabilizer"
Debug "  CloseConsole()"
Debug "EndIf"
Debug "Delay(800)"
Debug "End"
CallDebugger
End

SHR という命令は SHL をオーバークロック処理して SHR を実現していると考えられて、それで AVX 命令を処理したような電圧変動を生じている。BLSR の実験が示したように、最下位のビットからクリアするのではなく、最上位のビットからクリアしたほうが、浄化は早まるとするなら、この世の浄化も最上位からクリアすると安定しやすい。ES112 は ES105 からの改善を行っていて、わずかな電圧変動を起きるようにするために、SHR を 64行によって BLSR の 64行と同じ結果を求めている。また SHR Reg,1 とは SHR Reg と同じであるので、命令文に SSD由来の"1" を含まない。命令文に SSD由来 "1" が存在するだけで、CPUの内部回路は影響を受ける。

ES111 には "Location: JAPAN , I am finding to very attractive females." という表示をしています。これは「日本では、私はとても魅力的な女性を探しています」という意味です。様々なSNSを使用してきましたが、コンピューターの話題に対して理解できる女性は「日本の南に位置するフィリピンだけ」という現実がありました。それで Date in Asia を利用して、自分の夢を語れそうな女性を求めますと、フィリピンのセブ島にいました。その女性と14日間のデートをしてみますと、「礼儀正しい女性を演じるには、常に Crafty girl でなければならない」と理解して、結婚を求めたけれど、その女性は「I depend you」と言って決断を求めてきた。でも、その女性の夢をかなえるには離れて生活しなければならない。それで離れた生活をするために、セブ島において人材評価試験と考えて、セブの英語留学を 12 weeks しました。交際した女性と同じ街で生活しているけれど、それをずっと隠していた。いま、その女性は世界ランキング上位の歌姫である。


2024-02-16

ES113 は NBOX に乗るとして、その相手の許容度を表すとしよう

MajiorityCamisole ES113 Generate source code
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
For Roop=1 To 150
  Debug "  ; "+Str(Roop)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  Debug "  BLSR_Rcx_x64"
  NBOX = Random(168, 138)
  Select NBOX
    Case 138 To 147
      Debug "  Set_CL64"      
    Case 148 To 151
      Debug "  !INC ch"
    Case 152 To 156 
      Debug "  !INC ch"
      Debug "  !INC ch"
    Case 157 To 161
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
    Case 162 To 168
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
      Debug "  !INC ch"
  EndSelect
  Debug "  MOVZX_Rcx"
  Debug "  !NOP QWORD [Rip+16]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !CALL QWORD Sleep"
  Debug "  !NOP QWORD [Rip-32]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"

身長 138cm - 147cm 、低身長 は 無視 、確定済
身長 148cm - 151cm 、許容できるのは 256 日間(8ヶ月)、確定済
身長 152cm - 156cm 、許容できるのは 512 日間(1年5ヶ月)、確定済
身長 157cm - 161cm 、許容できるのは 1024 日間(2年10ヶ月)
身長 162cm - 168cm 、許容できるのは 2048 日間(5年以上)、幻塔 使用不可

これほどに、分かりやすく公開しているのに、なぜだろう? これは長く付き合った場合には「年単位」だけれど、「子種が欲しくて月単位」になる場合は 512日間 ではなく 512日÷24時間 = 21回 という計算になり、この回数に近づくと「私、もう別れたい」と言われて失恋する。最近は「世界のルールを解析することが仕事」になっており、確定済となっているのは「裏システムで KEEP になっており、高額の契約により接近不能」という状態です。「幻塔 使用不可」とは「どうしても攻略不能になっている場合だけ、使用できるアバター」であり、必要以上の強化はできない。

ES113 について、品質改善の調整はしておらず、バランス調整を考えている人向けに書いたコードです。上記の部分だけを差し替えて使用できます。微妙に電子ビット基準を揺らすという手法によって改善しており、スタビライザー処理のタイミングレートは定まっていない。


2024-02-21

ES114 正弦波の周期によって、17ms から 1000ms の調整タイミングへ変更。約114秒の処理を繰り返しています。大きく遅延なら、*5000 にすると最高5秒まで調整を遅延できます。

MajiorityCamisole ES114 Generate source code
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Global SineWave.i, SineBits.i, SineAngels.i, CountBits.i, CountChk.i
; totalWave = 114581
For SineAngels=1 To 178
  CountChk = 0
  Debug "  ; "+Str(SineAngels)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down
  Debug "  BLSR_Rcx_x64"
  Debug "  BLSR_R8_x64"
  SineWave = Abs(Round(Sin(Radian(SineAngels))*1000, #PB_Round_Nearest))
  !MOV Rax, [v_SineWave]
  !MOV R8, Rax
  !MOV [v_SineBits], R8
  Debug "; "+Str(SineWave)
  totalWave.i + SineWave
  Debug  "  !INC cl"
  For CountBits=63 To 1 Step -1
    If SineBits&(2<<CountBits)
      CountChk+1
      Debug  "  !INC R8b"
      Debug  "  !SHL R8, cl"
    ElseIf CountChk
      Debug  "  !SHL R8, cl"
    EndIf  
  Next
  If SineBits&2
    Debug  "  !INC R8b"
    Debug  "  !SHL R8, cl"
  Else
    Debug  "  !SHL R8, cl"
  EndIf  
  If SineBits&1
    Debug  "  !INC R8b"
  EndIf
  Debug "  !XCHG Rcx, R8"
  Debug "  !NOP QWORD [Rip+16]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !CALL QWORD Sleep"
  Debug "  !NOP QWORD [Rip-32]"
  Debug "  !NOP QWORD [Rip]"
  Debug "  !NOP QWORD [Rip]"
  !RDRAND Rcx
  !CALL QWORD PB_RandomSeed
  RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())
Next
SortList(Reg64(), #PB_Sort_Ascending)
SortList(Reg64A(), #PB_Sort_Ascending)
SortList(Reg64B(), #PB_Sort_Ascending)
BeforeProcedureRegisters_SMSW_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  PrintN("+Chr(34)+"Finished"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JMP QWORD StartStabilizer"
Debug "  CloseConsole()"

気付いていると思いますが、開発環境のハードウェア乱数生成器から乱数シード値を決定していますので、ビルドするごとに実行内容は変化します。


2024-02-29

今日は「閏日」です。そこで「Windowsアイコンキャッシュファイルのアクセス日付」を根拠にして、週休4日制を実現しています。高所得の国民が増え過ぎたら、平均年収を超えている人だけ「週休4日制」にしていれば、経済の格差は生まれにくいと思います。

MajiorityCamisole ES115 Generate source code
Debug "Global IconCachePath.s, IconCacheDate.i"
Debug "IconCachePath = ReplaceString(GetTemporaryDirectory(), "+Chr(34)+"Temp\"+Chr(34)+", "+Chr(34)+"IconCache.db"+Chr(34)+")"
Debug "IconCacheDate = DayOfWeek(GetFileDate(IconCachePath, #PB_Date_Accessed))%2"
Debug "; 0 : Sunday  1 : Monday  2 : Tuesday  3 : Wednesday  4 : Thursday  5 : Friday  6 : Saturday"
Debug "; 0 : Sunday  1 : Monday  0 : Tuesday  1 : Wednesday  0 : Thursday  1 : Friday  0 : Saturday"
Debug "If OpenConsole("+Chr(34)+"MajiorityCamisole ES115 setup To General-purpose 64-bit registers."+Chr(34)+") and IconCacheDate"

動作しない日は「火曜日、木曜日、土曜日、日曜日」です。


2024-03-01

RDRAND Word を2つ取得して、最下位2ビットが同じになるまで待機命令を繰り返す。配布した実行形式は ES114 から変更したバージョンです。オーディオに求められるのは「飽きないこと」ですので、その不安定な感覚を意図的に作っています。

MajiorityCamisole ES116 Generate source code
Debug "  !StartStabilizer:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  BLSR_Rcx_x64"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !INC cl"
Debug "  !MOVZX cx, cl"
Debug "  !RDRAND R8w"
Debug "  !RDRAND R9w"
Debug "  !AND R8w, cx"
Debug "  !AND R9w, cx"
Debug "  !CMP R8w, R9w"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JZ QWORD StartStabilizer_in"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
;
Debug "  PrintN("+Chr(34)+"Delay process 16384 ms"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Debug "  BLSR_Rax_x64"
Debug "  BLSR_Rcx_x64"
Debug "  Set_CL64"
Debug "  MOVZX_Rcx"
Debug "  !XCHG Rax, Rcx"
Debug "  Set_CL8"
Debug "  !SHL Rax, cl"
Debug "  !XCHG Rcx, Rax"
Debug "  !NOP QWORD [Rip+16]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !CALL QWORD Sleep"
Debug "  !NOP QWORD [Rip-32]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JMP QWORD StartStabilizer"
;
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !StartStabilizer_in:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"

見てわかるように Delay process では Setup 3 を実施しています。


2024-03-03
円周率の正確な計算はできているか?

計算結果の確認には CASIO 高精度計算サービス を使用しています。円周率を使用した計算では「定数」「倍精度変数」を使用して計算すると、円周率の有効桁数は「ソースコードへ記述した桁数」にならず、その誤差によって「スマホ難聴問題」を引き起こしたと考えられます。この他に、強い光を発して熱により材料を加工するレーザー操作技術にも同様の問題が起きており、半導体露光装置の改善が求められていました。必要のない高精度演算は「軍事技術として監視される対象」であるので、どうしても必要と判断される案件のみ、許可されているようです。禁止されてる精度になれば、裏システムを通じて「それ以上に精度を上げるな」とテレパシーのように聞こえて、インターネット接続しなくてもパソコンの操作を受け付けない状態になります。

倍精度データの畳み込み演算に使用する「4倍精度の円周率」テーブル作成
Procedure CreateSincTable(dummy1.i, Mask.i, sample.i, *sinc_table_pv)
  Protected k.d, kk.d, CST_D0.i, CST_D4.i, CST_D8.i, CST_D25.i, Freq_d1.d, Freq_d2.d
  Protected Freq_d3.d, Freq_d4.d
  ; // 1st 3.141592653
  BLSR_Rcx_x64
  BLSR_R8_x64
  !INC cl
  MOVZX_Rcx
  MOVZX_R8
  ; 100000000001001001000011111101101010100001011111110100100111000
  !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
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !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
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !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
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  ;
  !MOVQ xmm5, R8
  !MOVSD [p.v_Freq_d1], xmm5
  ; // 1st 3.141592653 End
  ;
  ; // 2nd 589793
  BLSR_Rcx_x64
  BLSR_R9_x64
  !INC cl
  MOVZX_Rcx
  MOVZX_R9
  ; 11111000000100010000111101111111000100011110111011100100011001
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !MOVQ xmm5, R9
  !MOVSD [p.v_Freq_d2], xmm5
  ; // 2nd 589793 End
  ;
  ; // 3rd 238462
  BLSR_Rcx_x64
  BLSR_R8_x64
  !INC cl
  MOVZX_Rcx
  MOVZX_R8
  ; 11110010110001001011101101100011110100110011000000010010000001
  !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
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !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
  !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
  !SHL R8, cl
  !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
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !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
  !INC R8b
  !SHL R8, cl
  !SHL R8, cl
  !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
  !INC R8b
  !MOVQ xmm5, R8
  !MOVSD [p.v_Freq_d3], xmm5
  ; //  3rd 238462 End
  ;
  ; // 4th 643383
  BLSR_Rcx_x64
  BLSR_R9_x64
  !INC cl
  MOVZX_Rcx
  MOVZX_R9
  ; 11101110001000010011100110101100100111000100000011010110110011
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !SHL R9, cl
  !SHL R9, cl
  !INC R9b
  !SHL R9, cl
  !INC R9b
  !MOVQ xmm5, R9
  !MOVSD [p.v_Freq_d4], xmm5
  ; // 4th 643383 End
  ;
  ;- PI = 3.1415926535897932384626433832795
  ; 3.141592653 589793 238462 643383
  ; ;   2022/12/05 18:12  Denshi sukasi kieru taisaku is no think and Let's go!
  ;   
  ;   Debug "StrD(Freq_d1, 35)"
  ;   Debug StrD(Freq_d1, 35)
  ;   Debug "StrD(Freq_d2, 35)"
  ;   Debug StrD(Freq_d2, 35)
  ;   Debug "StrD(Freq_d3, 35)"
  ;   Debug StrD(Freq_d3, 35)
  ;   Debug "StrD(Freq_d4, 35)"
  ;   Debug StrD(Freq_d4, 35)
  ;   Debug "StrD(Freq_d1+Freq_d2, 35)"
  ;   Debug StrD(Freq_d1+Freq_d2, 35)
  ;   Debug "StrD(Freq_d2+Freq_d3, 35)"
  ;   Debug StrD(Freq_d2+Freq_d3, 35)
  ;   Debug "StrD(Freq_d3+Freq_d4, 35)"
  ;   Debug StrD(Freq_d3+Freq_d4, 35)
  ;   CallDebugger
  ; ;   StrD(Freq_d1, 35)
  ; ;   3.14159265300000000000000000000000000
  ; ;   StrD(Freq_d2, 35)
  ; ;   0.00000000058979300000000012000000000
  ; ;   StrD(Freq_d3, 35)
  ; ;   0.00000000000000023846200000000002000
  ; ;   StrD(Freq_d4, 35)
  ; ;   0.00000000000000000000064338300000000
  ; ;   StrD(Freq_d1+Freq_d2, 35)
  ; ;   3.14159265358979310000000000000000000
  ; ;   StrD(Freq_d2+Freq_d3, 35)
  ; ;   0.00000000058979323846200008000000000
  ; ;   StrD(Freq_d3+Freq_d4, 35)
  ; ;   0.00000000000000023846264338300002000
  
  BLSR_R8_x64
  BLSR_Rcx_x64
  !INC cl
  MOVZX_Rcx
  !SHL R8, cl
  !SHR R8, cl
  !MOVNTI [p.v_CST_D0], R8
  !NOP QWORD [Rip]
  !NOP QWORD [p.v_CST_D0]
  !INC R8b
  !INC R8b
  !INC R8b
  !INC R8b
  MOVZX_R8
  !MOVNTI [p.v_CST_D4], R8
  !NOP QWORD [Rip]
  !NOP QWORD [p.v_CST_D4]
  !INC R8b
  !INC R8b
  !INC R8b
  !INC R8b
  MOVZX_R8
  !MOVNTI [p.v_CST_D8], R8
  !NOP QWORD [Rip]
  !NOP QWORD [p.v_CST_D8]
  BLSR_R8_x64
  BLSR_Rcx_x64
  !INC cl
  MOVZX_Rcx
  !SHL R8, cl
  !SHR R8, cl
  !INC R8b
  !SHL R8b, cl
  !INC R8b
  !SHL R8b, cl
  !SHL R8b, cl
  !SHL R8b, cl
  !INC R8b
  MOVZX_R8
  !MOVNTI [p.v_CST_D25], R8
  !NOP QWORD [Rip]
  !NOP QWORD [p.v_CST_D25]
  ;   k = 100/480; CST_D25 / (CST_D25*CST_D4)
  k = (CST_D25/CST_D25)*CST_D25*CST_D4
  kfreq = (CST_D25/CST_D25)* Set_inFreq
  kk = (CST_D25*CST_D4) / (CST_D25*CST_D4)
  PokeD(*sinc_table_pv+CST_D8*sample), Sin(SincCalc_A)/SincCalc_B)
  ;
EndProcedure

Macro SincCalc_A
  (Freq_d1 * I + k * Freq_d2 / kfreq + Freq_d2 * I + k * Freq_d1 / kfreq ) + (Freq_d3 * I + k * Freq_d4 / kfreq + Freq_d4 * I + k * Freq_d3 / kfreq )
EndMacro

Macro SincCalc_B
  (Freq_d2 * k / kfreq + I * Freq_d1 + Freq_d1 * k / kfreq + I * Freq_d2) + (Freq_d4 * k / kfreq + I * Freq_d3 + Freq_d3 * k / kfreq + I * Freq_d4)
EndMacro

CASIO 高精度計算サービス では SINC 8点 テーブル作成 を指定した円周率の桁数で演算します。その結果が完全に同じであれば計算結果は正しいと判断できますが、パソコンの環境によっては計算結果が狂ってくる場合があり、その対策として MajiorityCamisoleES を常駐しておく必要があります。音楽再生ソフトでは「映画製作環境で聞いた音楽」と「映画のサントラCDを音楽再生」と「リサンプル処理した音楽」を比較した時、サントラCDは「この世の悪」であり、リサンプル処理は映画製作環境に近いけれど、電源環境やマザーボードの設計に左右されやすいとして、低ジッター演算の解決ソリューションを求められていました。


2024-03-04

ES116 は ES114 よりも良くなったと評価されていません。LZCNT という Zero bits をカウントする処理によって、初期化を2重化して改善してみました。改善処理時間を2分から20秒へ短縮しました。RDRAND を2回呼び出して、LZCNT により Zero bits の結果が同じである時に、改善処理を実行します。ソースコードの差分は ES114 からの更新となります。

CMP R8b, R9b の処理時、MOV_UpDown 処理を含めていませんと、CMP 実行前に物理レジスタの更新処理が「クロック制御なく実行」され、ジッターを生じる原因となります。

MajiorityCamisole ES117 Generate source code
ForEach Reg64()
  Debug "Macro BLSR_"+Reg64()+"_x64"
  Debug "  !LZCNT "+Reg64()+", "+Reg64()
  For Loop=1 To 64
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro SHR_"+Reg64()+"_x64"
  Debug "  !LZCNT "+Reg64()+", "+Reg64()
  For Loop=1 To 64
    Debug "  !SHR "+Reg64()+", 1"
  Next
  Debug "EndMacro"
  Debug ""
Next

Debug "  !StartStabilizer:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !RDRAND R8"
Debug "  !LZCNT R8, R8"
Debug "  !RDRAND R9"
Debug "  !LZCNT R9, R9"
Debug "  !MOV R8, R8"
Debug "  !MOV R8w, R8w"
Debug "  !MOV R8b, R8b"
Debug "  !MOV R9, R9"
Debug "  !MOV R9w, R9w"
Debug "  !MOV R9b, R9b"
Debug "  !CMP R8b, R9b"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JZ QWORD StartStabilizer_in"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
;
Debug "  PrintN("+Chr(34)+"Delay process 16384 ms"+Chr(34)+")"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !MOV cl, 0"
Debug "  !MOV ch, 64"
Debug "  !MOV cl, cl"
Debug "  !MOV ch, ch"
Debug "  !MOV cx, cx"
Debug "  !MOVZX Rcx, cx"
Debug "  !NOP QWORD [Rip+16]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !CALL QWORD Sleep"
Debug "  !NOP QWORD [Rip-32]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !JMP QWORD StartStabilizer"
;
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !StartStabilizer_in:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW LZCNT BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED LZCNT BLSRx64 CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Global SineWave.i, SineBits.i, SineAngels.i, CountBits.i, CountChk.i
; totalWave = 19,356 ms
For SineAngels=1 To 178 Step 6
  CountChk = 0
  Debug "  ; "+Str(SineAngels)+" Setup"

起動したら、すぐに安定するバージョンではありません。10分ぐらい経過してから、音質の善し悪しを確認します。最初に試作した時、MOV_UpDown を CMP 処理前にセットしなかった原因によって、ColorFly CDA-M2 + ATH-AVA500 は歪んでいるように聞こえました。8ビット比較 CMP R8b, R9b を8倍の処理となる CMP R8, R9 では、電力消費量は8倍以上になると予想されて、この少しの差を妥協すると、オーディオでは致命的な誤った結論になりやすい。


2024-03-08
BLSR_x64 の First line へ LZCNT ES117 code を使用
MajiorityCamisole ES117 solutions へ 全体更新を実施


コスプレ写真は「撮影条件によって、やや暗い表示」になりましたが、納得できないカラーバランスの解決によって、ローパスフィルターレスの撮影でも正しく表示できるものと確認できました。高級パソコン環境になれば、ローパスフィルターレスで撮影した写真は驚くほどに美しく表示されていたと考えられて、販売目的であれば Nikon D800E のコスプレ撮影は向いていると判断できます。

下記の方法を試してみました。低音域の膨らんだ重ジッター傾向となってしまい、音質は劣化したと判断しました。この傾向を良しとする判断では「売れない音楽」「歪んで当たり前の編集が常態」といった結果になりやすい。この判断は RapterLake Core i7 CPU Design で行っており、内部回路の設計が変更されたら覆るものです。

ForEach Reg64()
  Debug "Macro BLSR_"+Reg64()+"_x64"
  Debug "  !LZCNT "+Reg64()+", "+Reg64()
  For Loop=1 To 32
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "  !LZCNT "+Reg64()+", "+Reg64()
  For Loop=1 To 32
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro BLSR_"+Reg64()+"_x64"
  Debug "  !LZCNT "+Reg64()+", "+Reg64()
  For Loop=1 To 6
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "EndMacro"
  Debug ""
Next

( LZCNT BLSRx32 ) x2 は、左右のバランスが崩れている。( LZCNT BLSRx6 ) は、( LZCNT BLSRx64 ) と比較して、不鮮明に聞こえています。LZCNT は レジスタの "0" をカウントするので、最大値 64 (1000000) と 63 (111111) との結果から、BLSR x6 です。


2024-03-17
BLSR_x64 の Last line へ BZHI を使用
MajiorityCamisole 153 solutions へ 全体更新を実施


BZHI—Zero High Bits Starting with Specified Bit Position
BMI2 の命令を使用しています。古いCPUでは使用できません。

114 は最高評価になりましたので、114 からの更新内容となります。

BZHI r8, r8, r8 と同じレジスタ使用時のみ、Intel secret service から許可されてます。

Debug "; MajiorityCamisole 153 (2023 03 17)"
Debug "; RDSEED BLSRx64 BZHI CPU reg. Stabilizer for any voltage problems"

ForEach Reg64()
  Debug "Macro BLSR_"+Reg64()+"_x64"
  For Loop=1 To 64
    Debug "  !BLSR "+Reg64()+", "+Reg64()
  Next
  Debug "  !BZHI "+Reg64()+", "+Reg64()+", "+Reg64()
  Debug "EndMacro"
  Debug ""
Next

ForEach Reg64()
  Debug "Macro SHR_"+Reg64()+"_x64"
  For Loop=1 To 64
    Debug "  !SHR "+Reg64()+", 1"
  Next
  Debug "  !BZHI "+Reg64()+", "+Reg64()+", "+Reg64()
  Debug "EndMacro"
  Debug ""
Next

;- Start
Debug ";- PureBasicStart"
BeforeProcedureRegisters_RDSEED_SHR
Debug "If OpenConsole("+Chr(34)+"MajiorityCamisole 153 setup To General-purpose 64-bit registers."+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Copyright (c) 2020-2024 Hiroyuki Yokota (oryaaaaa)"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"-"+Chr(34)+")"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  !StartStabilizer:"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down

このソースコードについては、産業界への影響大きいと判断されており、PureBasic forum と JPLAY forum へ完全なソースコードを公開しています。なお、コードの実行をシャッフルするランダムソート命令を用いており、実行形式はビルド処理する度に変更されます。


2024-03-17
遠距離音・音波送信技術・分割音波法

伊勢神宮のお土産「赤福」の伊勢だより 2024年 3月 2日 「おうむ岩、その名の通り、声にした言葉がそのまま返ってくる岩が、内宮から伊勢神宮別宮の「伊雑宮」へ向かう途中、磯部町恵利原にあります。」以下、略、で紹介されています。

おうむ岩では、声が大岩壁に当たり、音波は分割されて、音波の「分割軽量化」が起きると、声よりも速く遠い場所で反射音が聞こえて来ます。

よく深夜にやってしまう H-NEXT を小さい音量で見ていたのに、家屋の外へ漏れていました。これは「演技の叫び声」が「細かく分断されて音波となる」という都合によって、速い音波で家屋の外へ出てしまう。それを音楽や街宣活動の声にも適用する技術と考えましょう。

CruseResampler [4096 samples] [O 1skip] 出力フォルダ " O 4096 AD 176.4kHz"
CruseResampler [4096 samples] [S 3skip] 出力フォルダ " S 4096 AD 176.4kHz"
CruseResampler [4096 samples] [W 7skip] 出力フォルダ " W 4096 AD 176.4kHz"
CruseResampler [4096 samples] [X 15skip] 出力フォルダ " X 4096 AD 176.4kHz"
CruseResampler [4096 samples] [Y 31skip] 出力フォルダ " Y 4096 AD 176.4kHz"
CruseResampler [4096 samples] [Z 63skip] 出力フォルダ " Z 4096 AD 176.4kHz"
xrecode3 [DSD] DSD64 2.8MHz .dff 変換 https://xrecode.com/
CruseResampler [1024 samples] [O 1skip] 出力フォルダ " O 1024 AD 176.4kHz"
xrecode3 [MP3] LAME V0 (MAX VBR) JointStereo .mp3 変換

最後の [Z 63skip] を繰り返すとスピーカーを破損するので注意!
音波分割 2 × 4 × 8 × 16 × 32 × 64 = 2,097,152 way を再現する。
2,097,152 way × 64 = 132,120,576 way を鳴らそうとすると破損すると判明済み。


安全な音波を作ろうとするなら、逆順の処理で行えば、DSD変換は不要とされる。

CruseResampler [4096 samples] [Z 63skip] 出力フォルダ " Z 4096 AD 176.4kHz"
CruseResampler [4096 samples] [Y 31skip] 出力フォルダ " Y 4096 AD 176.4kHz"
CruseResampler [4096 samples] [X 15skip] 出力フォルダ " X 4096 AD 176.4kHz"
CruseResampler [4096 samples] [W 7skip] 出力フォルダ " W 4096 AD 176.4kHz"
CruseResampler [4096 samples] [S 3skip] 出力フォルダ " S 4096 AD 176.4kHz"
CruseResampler [4096 samples] [O 1skip] 出力フォルダ " O 4096 AD 176.4kHz"
CruseResampler [1024 samples] [O 1skip] 出力フォルダ " O 1024 AD 176.4kHz"
xrecode3 [MP3] LAME V0 (MAX VBR) JointStereo .mp3 変換

5m以内で聞く音量で調整されたダンサー向けポータブルオーディオでは「上記の 2,097,152 way MP3」を音楽再生すると、40mから70mまでの広範囲に等しい音圧で聞こえます。


2024-03-25
ハイエンド・オーディオの技術を導入 Release

すべての BASS Decode 処理において、下記の処理を追加しました。

これは2サンプル毎に「音圧 -2.7dB down」の処理を行っており、音波は昔のアナログアンプとなります。ハイエンド・オーディオの技術ですが、聞きやすい音波となります。音波が通常よりも速く飛びますので、音量の上げすぎに注意して下さい。

Procedure ChannelStrip(*inbuf, length.i)
  Macro_ChannelStrip
  Protected CT_pos.i, CT_Rand.d
  CT_Rand = F_0_732774533_d + Random(D9999)*F_0_00000001_d
  For CT_pos=D0 To length Step 16
    PokeF(*inbuf+CT_pos, PeekF(*inbuf+CT_pos) * CT_Rand)
    PokeF(*inbuf+CT_pos+D4, PeekF(*inbuf+CT_pos+D4) * CT_Rand)
  Next
EndProcedure

適用範囲
CruseBusterElegant153 CruseBusterElementary153 CruseEleganceRadio153
CruseResampler153 Nontallion153 Saverage153 SistersElementary153
SistersResampler153
音圧 -2.5dB から 音圧 -3.4dB まで、許可されるだろうと思います。
音圧 -3.5dB 以上、商業用途専用と考えています。

正式に採用した処理内容

Procedure ChannelStrip(*inbuf, length.i)
  Macro_ChannelStrip
  Protected CT_pos.i, CT_Rand.d
  CT_Rand = Log10(D8)
  For CT_pos=D0 To length Step 16
    PokeF(*inbuf+CT_pos, PeekF(*inbuf+CT_pos) * CT_Rand)
    PokeF(*inbuf+CT_pos+D4, PeekF(*inbuf+CT_pos+D4) * CT_Rand)
  Next
EndProcedure


2024-03-26
CRC32 r64, QWORD [Rip] 基準の適用

これは EXE をロードしたメモリ基準へ調整するものですので、メモリ製造品質に左右されると思います。

; CRC32—Accumulate CRC32 Value
; BIT_REFLECT64: DST[63-0] = SRC[0-63]
; BIT_REFLECT32: DST[31-0] = SRC[0-31]
; BIT_REFLECT16: DST[15-0] = SRC[0-15]
; BIT_REFLECT8: DST[7-0] = SRC[0-7]

Macro BeforeProcedureRegisters_CRC32_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !CRC32 "+Reg64A()+", QWORD [Rip]"
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64A()+"_x64"
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !CRC32 "+Reg64B()+", QWORD [Rip]"
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64B()+"_x64"
  Next
  BeforeProcedureRegisters_3rd
EndMacro

; MC154
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW LZCNT BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... CRC32 LZCNT BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... RDSEED LZCNT BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 4... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Global SineWave.i, SineBits.i, SineAngels.i, CountBits.i, CountChk.i
; totalWave = 19,356 ms
For SineAngels=1 To 178 Step 6
  CountChk = 0
  Debug "  ; "+Str(SineAngels)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_CRC32_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down

; MC155
Debug "  PrintN("+Chr(34)+"Setup 1... SMSW BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... CRC32 BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... RDSEED BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 4... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down
Global SineWave.i, SineBits.i, SineAngels.i, CountBits.i, CountChk.i
; totalWave = 114581
For SineAngels=1 To 178
  CountChk = 0
  Debug "  ; "+Str(SineAngels)+" Setup"
  BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_CRC32_BLSR
  BeforeProcedureRegisters_RDSEED_BLSR
  SIMPLE_MOVE_REGISTERS_Up_and_Down

MC153 へ適用を考えていましたが、MagiclobeViewer155 を作ってみて差が分からないと判断できましたので、作って確認するのは「ソースコードの提供を受けている方」が確認すれば良いでしょう。こちらは多忙すぎて対応できません。


2024-03-29
監視システムで有効時のみ「実行可能」

以前に使用していた REASM による、改善手法を現在公開中のバージョンで適用しています。下記のソースコードは「監視システムで有効時のみ」実行できます。

!extrn PB_RandomSeed
SetPriorityClass_(GetCurrentProcess_(),#IDLE_PRIORITY_CLASS)

Global NewList Buffer.s()

Macro BLSR_Rax_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BLSR Rax, Rax"
  AddElement(Buffer()) : Buffer() = "BZHI Rax, Rax, Rax"
EndMacro

Macro BLSR_Rbx_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BLSR Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "BZHI Rbx, Rbx, Rbx"
EndMacro

Macro BLSR_Rcx_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BLSR Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "BZHI Rcx, Rcx, Rcx"
EndMacro

Macro BLSR_Rdx_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BLSR Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "BZHI Rdx, Rdx, Rdx"
EndMacro

Macro BLSR_Rsp_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BLSR Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "BZHI Rsp, Rsp, Rsp"
EndMacro

Macro BLSR_Rsi_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BLSR Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "BZHI Rsi, Rsi, Rsi"
EndMacro

Macro BLSR_Rbp_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BLSR Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "BZHI Rbp, Rbp, Rbp"
EndMacro

Macro BLSR_Rdi_x64
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BLSR Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "BZHI Rdi, Rdi, Rdi"
EndMacro

Macro BLSR_R8_x64
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BLSR R8, R8"
  AddElement(Buffer()) : Buffer() = "BZHI R8, R8, R8"
EndMacro

Macro BLSR_R9_x64
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BLSR R9, R9"
  AddElement(Buffer()) : Buffer() = "BZHI R9, R9, R9"
EndMacro

Macro BLSR_R10_x64
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BLSR R10, R10"
  AddElement(Buffer()) : Buffer() = "BZHI R10, R10, R10"
EndMacro

Macro BLSR_R11_x64
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BLSR R11, R11"
  AddElement(Buffer()) : Buffer() = "BZHI R11, R11, R11"
EndMacro

Macro BLSR_R12_x64
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BLSR R12, R12"
  AddElement(Buffer()) : Buffer() = "BZHI R12, R12, R12"
EndMacro

Macro BLSR_R13_x64
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BLSR R13, R13"
  AddElement(Buffer()) : Buffer() = "BZHI R13, R13, R13"
EndMacro

Macro BLSR_R14_x64
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BLSR R14, R14"
  AddElement(Buffer()) : Buffer() = "BZHI R14, R14, R14"
EndMacro

Macro BLSR_R15_x64
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BLSR R15, R15"
  AddElement(Buffer()) : Buffer() = "BZHI R15, R15, R15"
EndMacro

Macro SHR_Rax_x64
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rax, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rax, Rax, Rax"
EndMacro

Macro SHR_Rbx_x64
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbx, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rbx, Rbx, Rbx"
EndMacro

Macro SHR_Rcx_x64
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rcx, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rcx, Rcx, Rcx"
EndMacro

Macro SHR_Rdx_x64
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdx, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rdx, Rdx, Rdx"
EndMacro

Macro SHR_Rsp_x64
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsp, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rsp, Rsp, Rsp"
EndMacro

Macro SHR_Rsi_x64
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rsi, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rsi, Rsi, Rsi"
EndMacro

Macro SHR_Rbp_x64
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rbp, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rbp, Rbp, Rbp"
EndMacro

Macro SHR_Rdi_x64
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "SHR Rdi, 1"
  AddElement(Buffer()) : Buffer() = "BZHI Rdi, Rdi, Rdi"
EndMacro

Macro SHR_R8_x64
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "SHR R8, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R8, R8, R8"
EndMacro

Macro SHR_R9_x64
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "SHR R9, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R9, R9, R9"
EndMacro

Macro SHR_R10_x64
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "SHR R10, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R10, R10, R10"
EndMacro

Macro SHR_R11_x64
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "SHR R11, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R11, R11, R11"
EndMacro

Macro SHR_R12_x64
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "SHR R12, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R12, R12, R12"
EndMacro

Macro SHR_R13_x64
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "SHR R13, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R13, R13, R13"
EndMacro

Macro SHR_R14_x64
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "SHR R14, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R14, R14, R14"
EndMacro

Macro SHR_R15_x64
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "SHR R15, 1"
  AddElement(Buffer()) : Buffer() = "BZHI R15, R15, R15"
EndMacro

Macro MOV_Rax_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV al, al"
  AddElement(Buffer()) : Buffer() = "MOV ah, ah"
  AddElement(Buffer()) : Buffer() = "MOV ax, ax"
  AddElement(Buffer()) : Buffer() = "MOV Rax, Rax"
  AddElement(Buffer()) : Buffer() = "MOV ax, ax"
  AddElement(Buffer()) : Buffer() = "MOV ah, ah"
  AddElement(Buffer()) : Buffer() = "MOV al, al"
EndMacro

Macro MOV_Rbx_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV bl, bl"
  AddElement(Buffer()) : Buffer() = "MOV bh, bh"
  AddElement(Buffer()) : Buffer() = "MOV bx, bx"
  AddElement(Buffer()) : Buffer() = "MOV Rbx, Rbx"
  AddElement(Buffer()) : Buffer() = "MOV bx, bx"
  AddElement(Buffer()) : Buffer() = "MOV bh, bh"
  AddElement(Buffer()) : Buffer() = "MOV bl, bl"
EndMacro

Macro MOV_Rcx_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV cl, cl"
  AddElement(Buffer()) : Buffer() = "MOV ch, ch"
  AddElement(Buffer()) : Buffer() = "MOV cx, cx"
  AddElement(Buffer()) : Buffer() = "MOV Rcx, Rcx"
  AddElement(Buffer()) : Buffer() = "MOV cx, cx"
  AddElement(Buffer()) : Buffer() = "MOV ch, ch"
  AddElement(Buffer()) : Buffer() = "MOV cl, cl"
EndMacro

Macro MOV_Rdx_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV dl, dl"
  AddElement(Buffer()) : Buffer() = "MOV dh, dh"
  AddElement(Buffer()) : Buffer() = "MOV dx, dx"
  AddElement(Buffer()) : Buffer() = "MOV Rdx, Rdx"
  AddElement(Buffer()) : Buffer() = "MOV dx, dx"
  AddElement(Buffer()) : Buffer() = "MOV dh, dh"
  AddElement(Buffer()) : Buffer() = "MOV dl, dl"
EndMacro

Macro MOV_Rsp_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV spl, spl"
  AddElement(Buffer()) : Buffer() = "MOV sp, sp"
  AddElement(Buffer()) : Buffer() = "MOV Rsp, Rsp"
  AddElement(Buffer()) : Buffer() = "MOV sp, sp"
  AddElement(Buffer()) : Buffer() = "MOV spl, spl"
EndMacro

Macro MOV_Rsi_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV sil, sil"
  AddElement(Buffer()) : Buffer() = "MOV si, si"
  AddElement(Buffer()) : Buffer() = "MOV Rsi, Rsi"
  AddElement(Buffer()) : Buffer() = "MOV si, si"
  AddElement(Buffer()) : Buffer() = "MOV sil, sil"
EndMacro

Macro MOV_Rbp_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV bpl, bpl"
  AddElement(Buffer()) : Buffer() = "MOV bp, bp"
  AddElement(Buffer()) : Buffer() = "MOV Rbp, Rbp"
  AddElement(Buffer()) : Buffer() = "MOV bp, bp"
  AddElement(Buffer()) : Buffer() = "MOV bpl, bpl"
EndMacro

Macro MOV_Rdi_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV dil, dil"
  AddElement(Buffer()) : Buffer() = "MOV di, di"
  AddElement(Buffer()) : Buffer() = "MOV Rdi, Rdi"
  AddElement(Buffer()) : Buffer() = "MOV di, di"
  AddElement(Buffer()) : Buffer() = "MOV dil, dil"
EndMacro

Macro MOV_R8_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R8b, R8b"
  AddElement(Buffer()) : Buffer() = "MOV R8w, R8w"
  AddElement(Buffer()) : Buffer() = "MOV R8, R8"
  AddElement(Buffer()) : Buffer() = "MOV R8w, R8w"
  AddElement(Buffer()) : Buffer() = "MOV R8b, R8b"
EndMacro

Macro MOV_R9_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R9b, R9b"
  AddElement(Buffer()) : Buffer() = "MOV R9w, R9w"
  AddElement(Buffer()) : Buffer() = "MOV R9, R9"
  AddElement(Buffer()) : Buffer() = "MOV R9w, R9w"
  AddElement(Buffer()) : Buffer() = "MOV R9b, R9b"
EndMacro

Macro MOV_R10_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R10b, R10b"
  AddElement(Buffer()) : Buffer() = "MOV R10w, R10w"
  AddElement(Buffer()) : Buffer() = "MOV R10, R10"
  AddElement(Buffer()) : Buffer() = "MOV R10w, R10w"
  AddElement(Buffer()) : Buffer() = "MOV R10b, R10b"
EndMacro

Macro MOV_R11_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R11b, R11b"
  AddElement(Buffer()) : Buffer() = "MOV R11w, R11w"
  AddElement(Buffer()) : Buffer() = "MOV R11, R11"
  AddElement(Buffer()) : Buffer() = "MOV R11w, R11w"
  AddElement(Buffer()) : Buffer() = "MOV R11b, R11b"
EndMacro

Macro MOV_R12_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R12b, R12b"
  AddElement(Buffer()) : Buffer() = "MOV R12w, R12w"
  AddElement(Buffer()) : Buffer() = "MOV R12, R12"
  AddElement(Buffer()) : Buffer() = "MOV R12w, R12w"
  AddElement(Buffer()) : Buffer() = "MOV R12b, R12b"
EndMacro

Macro MOV_R13_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R13b, R13b"
  AddElement(Buffer()) : Buffer() = "MOV R13w, R13w"
  AddElement(Buffer()) : Buffer() = "MOV R13, R13"
  AddElement(Buffer()) : Buffer() = "MOV R13w, R13w"
  AddElement(Buffer()) : Buffer() = "MOV R13b, R13b"
EndMacro

Macro MOV_R14_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R14b, R14b"
  AddElement(Buffer()) : Buffer() = "MOV R14w, R14w"
  AddElement(Buffer()) : Buffer() = "MOV R14, R14"
  AddElement(Buffer()) : Buffer() = "MOV R14w, R14w"
  AddElement(Buffer()) : Buffer() = "MOV R14b, R14b"
EndMacro

Macro MOV_R15_Up_Down
  AddElement(Buffer()) : Buffer() = "MOV R15b, R15b"
  AddElement(Buffer()) : Buffer() = "MOV R15w, R15w"
  AddElement(Buffer()) : Buffer() = "MOV R15, R15"
  AddElement(Buffer()) : Buffer() = "MOV R15w, R15w"
  AddElement(Buffer()) : Buffer() = "MOV R15b, R15b"
EndMacro

Macro Set_CL1
  BLSR_Rcx_x64
  AddElement(Buffer()) : Buffer() = "INC cl"
  ; cx = 1
EndMacro

Macro Set_CL8
  BLSR_Rcx_x64
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "SHL cl, cl"
  ; cx = 8
EndMacro

Macro Set_CL64
  BLSR_Rcx_x64
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "INC cl"
  AddElement(Buffer()) : Buffer() = "SHL cl, cl"
  ; cx = 64
EndMacro

Macro ALL_MMX_CLEAR_SHIFTWORD_INC_CL
  BLSR_Rcx_x64
  Set_CL1
  MOVZX_Rcx
  AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rcx"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm0, mm1 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "MOVQ mm0, mm1"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm1, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm2, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm3, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm4, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm5, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm6, mm0 ;16 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;1 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;2 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;3 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;4 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;5 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;6 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;7 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;8 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;9 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;10 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;11 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;12 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;13 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;14 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;15 Left 1bit shift"
  AddElement(Buffer()) : Buffer() = "PSLLW mm7, mm0 ;16 Left 1bit shift"
EndMacro

Macro MOVZX_Rcx
  AddElement(Buffer()) : Buffer() = "MOVZX cx, cl"
  AddElement(Buffer()) : Buffer() = "MOVZX Rcx, cl"
  AddElement(Buffer()) : Buffer() = "MOVZX cx, cl"
EndMacro

Global NewList Reg64.s()
AddElement(Reg64()) : Reg64() ="Rax" : AddElement(Reg64()) : Reg64() ="Rbx"
AddElement(Reg64()) : Reg64() ="Rcx" : AddElement(Reg64()) : Reg64() ="Rdx"
AddElement(Reg64()) : Reg64() ="Rsp" : AddElement(Reg64()) : Reg64() ="Rsi"
AddElement(Reg64()) : Reg64() ="Rbp" : AddElement(Reg64()) : Reg64() ="Rdi"
AddElement(Reg64()) : Reg64() ="R8" : AddElement(Reg64()) : Reg64() ="R9"
AddElement(Reg64()) : Reg64() ="R10" : AddElement(Reg64()) : Reg64() ="R11"
AddElement(Reg64()) : Reg64() ="R12" : AddElement(Reg64()) : Reg64() ="R13"
AddElement(Reg64()) : Reg64() ="R14" : AddElement(Reg64()) : Reg64() ="R15"

Global NewList Reg64A.s()
AddElement(Reg64A()) : Reg64A() ="Rax" : AddElement(Reg64A()) : Reg64A() ="Rdx"
AddElement(Reg64A()) : Reg64A() ="Rsp" : AddElement(Reg64A()) : Reg64A() ="Rsi"
AddElement(Reg64A()) : Reg64A() ="R9" : AddElement(Reg64A()) : Reg64A() ="R11"
AddElement(Reg64A()) : Reg64A() ="R13" : AddElement(Reg64A()) : Reg64A() ="R15"

Global NewList Reg64B.s()
AddElement(Reg64B()) : Reg64B() ="Rbx" : AddElement(Reg64B()) : Reg64B() ="Rcx"
AddElement(Reg64B()) : Reg64B() ="Rbp" : AddElement(Reg64B()) : Reg64B() ="Rdi"
AddElement(Reg64B()) : Reg64B() ="R8" : AddElement(Reg64B()) : Reg64B() ="R10"
AddElement(Reg64B()) : Reg64B() ="R12" : AddElement(Reg64B()) : Reg64B() ="R14"

!RDRAND Rcx
!CALL QWORD PB_RandomSeed
RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())

Global NewList Reg32.s()
AddElement(Reg32()) : Reg32() ="Eax" : AddElement(Reg32()) : Reg32() ="Ebx"
AddElement(Reg32()) : Reg32() ="Ecx" : AddElement(Reg32()) : Reg32() ="Edx"
AddElement(Reg32()) : Reg32() ="Esp" : AddElement(Reg32()) : Reg32() ="Esi"
AddElement(Reg32()) : Reg32() ="Ebp" : AddElement(Reg32()) : Reg32() ="Edi"
AddElement(Reg32()) : Reg32() ="R8d" : AddElement(Reg32()) : Reg32() ="R9d"
AddElement(Reg32()) : Reg32() ="R10d" : AddElement(Reg32()) : Reg32() ="R11d"
AddElement(Reg32()) : Reg32() ="R12d" : AddElement(Reg32()) : Reg32() ="R13d"
AddElement(Reg32()) : Reg32() ="R14d" : AddElement(Reg32()) : Reg32() ="R15d"

NewMap Reg16.s()
Reg16("Rax")="ax" : Reg16("Rbx")="bx" : Reg16("Rcx")="cx" : Reg16("Rdx")="dx"
Reg16("Rsp")="sp" : Reg16("Rsi")="si" : Reg16("Rbp")="bp" : Reg16("Rdi")="di"
Reg16("R8")="R8w" : Reg16("R9")="R9w" : Reg16("R10")="R10w" : Reg16("R11")="R11w"
Reg16("R12")="R12w" : Reg16("R13")="R13w" : Reg16("R14")="R14w" : Reg16("R15")="R15w"

NewMap Reg8.s()
Reg8("Rax")="al" : Reg8("Rbx")="bl" : Reg8("Rcx")="cl" : Reg8("Rdx")="dl"
Reg8("Rsp")="spl" : Reg8("Rsi")="sil" : Reg8("Rbp")="bpl" : Reg8("Rdi")="dil"
Reg8("R8")="R8b" : Reg8("R9")="R9b" : Reg8("R10")="R10b" : Reg8("R11")="R11b"
Reg8("R12")="R12b" : Reg8("R13")="R13b" : Reg8("R14")="R14b" : Reg8("R15")="R15b"


Macro SIMPLE_MOVE_REGISTERS_Up_and_Down
  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 BeforeProcedureRegisters_1st
  ALL_MMX_CLEAR_SHIFTWORD_INC_CL
  MOV_Rax_Up_Down
  MOV_Rdx_Up_Down
  MOV_Rsp_Up_Down
  MOV_Rsi_Up_Down
  MOV_R9_Up_Down
  MOV_R11_Up_Down
  MOV_R13_Up_Down
  MOV_R15_Up_Down
  AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rax"
  AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rdx"
  AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rsp"
  AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rsi"
  AddElement(Buffer()) : Buffer() = "MOVQ mm4, R9"
  AddElement(Buffer()) : Buffer() = "MOVQ mm5, R11"
  AddElement(Buffer()) : Buffer() = "MOVQ mm6, R13"
  AddElement(Buffer()) : Buffer() = "MOVQ mm7, R15"
 EndMacro
 
Macro BeforeProcedureRegisters_2nd
  AddElement(Buffer()) : Buffer() = "MOVQ Rax, mm0"
  AddElement(Buffer()) : Buffer() = "MOVQ Rdx, mm1"
  AddElement(Buffer()) : Buffer() = "MOVQ Rsp, mm2"
  AddElement(Buffer()) : Buffer() = "MOVQ Rsi, mm3"
  AddElement(Buffer()) : Buffer() = "MOVQ R9, mm4"
  AddElement(Buffer()) : Buffer() = "MOVQ R11, mm5"
  AddElement(Buffer()) : Buffer() = "MOVQ R13, mm6"
  AddElement(Buffer()) : Buffer() = "MOVQ R15, mm7"
  MOV_Rax_Up_Down
  MOV_Rdx_Up_Down
  MOV_Rsp_Up_Down
  MOV_Rsi_Up_Down
  MOV_R9_Up_Down
  MOV_R11_Up_Down
  MOV_R13_Up_Down
  MOV_R15_Up_Down
  MOV_Rcx_Up_Down
  MOV_Rbx_Up_Down
  MOV_Rbp_Up_Down
  MOV_Rdi_Up_Down
  MOV_R8_Up_Down
  MOV_R10_Up_Down
  MOV_R12_Up_Down
  MOV_R14_Up_Down
  AddElement(Buffer()) : Buffer() = "MOVQ mm0, Rcx"
  AddElement(Buffer()) : Buffer() = "MOVQ mm1, Rbx"
  AddElement(Buffer()) : Buffer() = "MOVQ mm2, Rbp"
  AddElement(Buffer()) : Buffer() = "MOVQ mm3, Rdi"
  AddElement(Buffer()) : Buffer() = "MOVQ mm4, R8"
  AddElement(Buffer()) : Buffer() = "MOVQ mm5, R10"
  AddElement(Buffer()) : Buffer() = "MOVQ mm6, R12"
  AddElement(Buffer()) : Buffer() = "MOVQ mm7, R14"
EndMacro

Macro BeforeProcedureRegisters_3rd
  AddElement(Buffer()) : Buffer() = "MOVQ Rcx, mm0"
  AddElement(Buffer()) : Buffer() = "MOVQ Rbx, mm1"
  AddElement(Buffer()) : Buffer() = "MOVQ Rbp, mm2"
  AddElement(Buffer()) : Buffer() = "MOVQ Rdi, mm3"
  AddElement(Buffer()) : Buffer() = "MOVQ R8, mm4"
  AddElement(Buffer()) : Buffer() = "MOVQ R10, mm5"
  AddElement(Buffer()) : Buffer() = "MOVQ R12, mm6"
  AddElement(Buffer()) : Buffer() = "MOVQ R14, mm7"
  AddElement(Buffer()) : Buffer() = "EMMS"
  MOV_Rcx_Up_Down
  MOV_Rbx_Up_Down
  MOV_Rbp_Up_Down
  MOV_Rdi_Up_Down
  MOV_R8_Up_Down
  MOV_R10_Up_Down
  MOV_R12_Up_Down
  MOV_R14_Up_Down
EndMacro
  
Macro BeforeProcedureRegisters_SMSW_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  SMSW "+Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64A()+", "+Reg64A()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64A()+", "+Reg64A()+", "+Reg64A()
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  SMSW "+Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64B()+", "+Reg64B()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64B()+", "+Reg64B()+", "+Reg64B()
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Macro BeforeProcedureRegisters_RDSEED_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  RDSEED "+Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64A()+", "+Reg64A()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64A()+", "+Reg64A()+", "+Reg64A()
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  RDSEED "+Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64B()+", "+Reg64B()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64B()+", "+Reg64B()+", "+Reg64B()
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Macro BeforeProcedureRegisters_CRC32_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  CRC32 "+Reg64A()+", QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64A()+", "+Reg64A()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64A()+", "+Reg64A()+", "+Reg64A()
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  CRC32 "+Reg64B()+", QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64B()+", "+Reg64B()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64B()+", "+Reg64B()+", "+Reg64B()
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Macro BeforeProcedureRegisters_RDSEED_SHR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  RDSEED "+Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  SHR "+Reg64A()+", 1"
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64A()+", "+Reg64A()+", "+Reg64A()
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  RDSEED "+Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  SHR "+Reg64B()+", 1"
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64B()+", "+Reg64B()+", "+Reg64B()
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Procedure.s MajiorityBuildBefore(MajiorityBuildBefore_Str.s, MajiorityBuildBefore_Opt.s, MajiorityBuildBefore_Path.s)
  Protected Compiler.i
  
  MajiorityBuildBefore_Str + Chr(13) + "MajiorityBuildBefore" + Chr(13)
  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", Chr(34)+ MajiorityBuildBefore_Str + Chr(34) + Space(1) + MajiorityBuildBefore_Opt, MajiorityBuildBefore_Path, #PB_Program_Open | #PB_Program_Read)
  If Compiler
    While ProgramRunning(Compiler)
      If AvailableProgramOutput(Compiler)
        MajiorityBuildBefore_Str + ReadProgramString(Compiler) + Chr(13)
      EndIf
    Wend
    MajiorityBuildBefore_Str + Chr(13) + Chr(13)
    MajiorityBuildBefore_Str + "Exitcode: " + Str(ProgramExitCode(Compiler))
    CloseProgram(Compiler) ; Close the connection to the program
  EndIf
  
  ProcedureReturn MajiorityBuildBefore_Str
EndProcedure

Procedure.s MajiorityBuildReasm(MajiorityBuildReasm_Str.s, MajiorityBuildReasm_Opt.s, MajiorityBuildReasm_Path.s)
  Protected Compiler.i
  
  MajiorityBuildReasm_Str + Chr(13) + "MajiorityBuildReasm" + Chr(13)
  Compiler = RunProgram(#PB_Compiler_Home+"\Compilers\pbcompiler", MajiorityBuildReasm_Opt, MajiorityBuildReasm_Path, #PB_Program_Open | #PB_Program_Read)
  If Compiler
    While ProgramRunning(Compiler)
      If AvailableProgramOutput(Compiler)
        MajiorityBuildReasm_Str + ReadProgramString(Compiler) + Chr(13)
      EndIf
    Wend
    MajiorityBuildReasm_Str + Chr(13) + Chr(13)
    MajiorityBuildReasm_Str + "Exitcode: " + Str(ProgramExitCode(Compiler))
    CloseProgram(Compiler) ; Close the connection to the program
  EndIf
  
  ProcedureReturn MajiorityBuildReasm_Str
EndProcedure

Macro MajiorityBuild_Tunes_1
  ForEach Buffer()
    Buffer() = ReplaceString(Buffer(), "qword[", "[")
  Next
EndMacro

Macro MajiorityBuild_Tunes_2

ForEach Buffer()
  If FindString(Buffer(), "PureBasicStart:")
    ; 1
    BeforeProcedureRegisters_SMSW_BLSR
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ; 2
    BeforeProcedureRegisters_SMSW_BLSR
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ; 3
    BeforeProcedureRegisters_SMSW_BLSR
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ;
    
    Break
  EndIf
Next
EndMacro

Global MajiorityBuild_Tunes_3_Error.i

Macro MajiorityBuild_Tunes_3
  
  ForEach Buffer()
    If FindString(UCase(Buffer()), "JMP")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
    ElseIf FindString(UCase(Buffer()), "JE")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
    ElseIf FindString(UCase(Buffer()), "JZ")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
    ElseIf FindString(UCase(Buffer()), "JNE")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
    ElseIf FindString(UCase(Buffer()), "JNZ")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), " ", " QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "J"), 1)
    ElseIf FindString(UCase(Buffer()), "CALL ")>0 And FindString(UCase(Buffer()), "QWORD")=0
      Buffer() = ReplaceString(Buffer(), "CALL ", "CALL QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "C"), 1)
    ElseIf FindString(UCase(Buffer()), "NOP ")>0 And FindString(UCase(Buffer()), "QWORD")=0 And FindString(UCase(Buffer()), "FNOP")=0
      MajiorityBuild_Tunes_3_Error = 0
      ForEach Reg32()
        If FindString(UCase(Buffer()), Reg32())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      ForEach Reg16()
        If FindString(UCase(Buffer()), Reg16())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      ForEach Reg8()
        If FindString(UCase(Buffer()), Reg8())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      If  MajiorityBuild_Tunes_3_Error = 0
        Buffer() = ReplaceString(Buffer(), "NOP ", "NOP QWORD ", #PB_String_NoCase, FindString(UCase(Buffer()), "N"), 1)
      EndIf
    ElseIf FindString(UCase(Buffer()), "[")>0 And FindString(UCase(Buffer()), "QWORD")=0
      MajiorityBuild_Tunes_3_Error = 0
      ForEach Reg32()
        If FindString(UCase(Buffer()), Reg32())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      ForEach Reg16()
        If FindString(UCase(Buffer()), Reg16())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      ForEach Reg8()
        If FindString(UCase(Buffer()), Reg8())=0
          MajiorityBuild_Tunes_3_Error + 1
        EndIf
      Next
      If  MajiorityBuild_Tunes_3_Error = 0
        Buffer() = ReplaceString(Buffer(), "[", "QWORD [", #PB_String_NoCase, FindString(UCase(Buffer()), "["), 1)
      EndIf
      ;       And FindString(UCase(Buffer()), "QWORD")=0 And FindString(UCase(Buffer()), "FLD")=0 And FindString(UCase(Buffer()), "FSTP")=0  And FindString(UCase(Buffer()), "DWORD")=0 And FindString(UCase(Buffer()), "R8D")=0 And FindString(UCase(Buffer()), "EAX")=0
      ;       Buffer() = ReplaceString(Buffer(), "[", "QWORD [", #PB_String_NoCase, FindString(UCase(Buffer()), "["), 1)
    EndIf
  Next
  
EndMacro

#SourceTarget1 = "MajiorityCamisole155.pb"
#SourceIcon1 = "iconFile.ico"
#SourcePath1 = "\MajiorityCamisole155source\"
#Execute1 = "MajiorityCamisole155.exe"
#ExecutePath1 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath1+#Execute1)>0
  Debug "Please DELETE "+#Execute1
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget1, Chr(34)+#SourcePath1+#SourceTarget1+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath1)
ClearList(Buffer())
; MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath1+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
; _Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
; MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath1+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
; _Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget1, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon1+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath1+#Execute1+Chr(34), #SourcePath1)
; CallDebugger
DeleteFile(#SourcePath1+"PureBasic.asm")
DeleteFile(#SourcePath1+"PureBasic.exe")

#SourceTarget2 = "MajiorityCamisole154.pb"
#SourceIcon2 = "iconFile.ico"
#SourcePath2 = "\MajiorityCamisole155source\"
#Execute2 = "MajiorityCamisole154.exe"
#ExecutePath2 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath2+#Execute2)>0
  Debug "Please DELETE "+#Execute2
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget2, Chr(34)+#SourcePath2+#SourceTarget2+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath2)
ClearList(Buffer())
; MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath2+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
; _Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
; MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath2+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
; _Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget2, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon2+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath2+#Execute2+Chr(34), #SourcePath2)
; CallDebugger
DeleteFile(#SourcePath2+"PureBasic.asm")
DeleteFile(#SourcePath2+"PureBasic.exe")

#SourceTarget3 = "Saverage155.pb"
#SourceIcon3 = "iconFile.ico"
#SourcePath3 = "\MajiorityCamisole155source\"
#Execute3 = "Saverage155.exe"
#ExecutePath3 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath3+#Execute3)>0
  Debug "Please DELETE "+#Execute3
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget3, Chr(34)+#SourcePath3+#SourceTarget3+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath3)
ClearList(Buffer())
MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath3+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
_Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath3+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
_Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget3, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon3+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath3+#Execute3+Chr(34), #SourcePath3)
CallDebugger
DeleteFile(#SourcePath3+"PureBasic.asm")
DeleteFile(#SourcePath3+"PureBasic.exe")

#SourceTarget4 = "Nontallion155.pb"
#SourceIcon4 = "iconFile.ico"
#SourcePath4 = "\MajiorityCamisole155source\"
#Execute4 = "Nontallion155.exe"
#ExecutePath4 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath4+#Execute4)>0
  Debug "Please DELETE "+#Execute4
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget4, Chr(34)+#SourcePath4+#SourceTarget4+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath4)
ClearList(Buffer())
MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath4+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
_Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath4+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
_Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget4, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon4+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath4+#Execute4+Chr(34), #SourcePath4)
CallDebugger
DeleteFile(#SourcePath4+"PureBasic.asm")
DeleteFile(#SourcePath4+"PureBasic.exe")

#SourceTarget5 = "GetAsioDeviceNameUnicode155.pb"
#SourceIcon5 = "iconFile.ico"
#SourcePath5 = "\MajiorityCamisole155source\"
#Execute5 = "GetAsioDeviceNameUnicode155.exe"
#ExecutePath5 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath5+#Execute5)>0
  Debug "Please DELETE "+#Execute5
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget5, Chr(34)+#SourcePath5+#SourceTarget5+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath5)
ClearList(Buffer())
; MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath5+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
; _Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
; MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath5+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
; _Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget5, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon5+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath5+#Execute5+Chr(34), #SourcePath5)
; CallDebugger
DeleteFile(#SourcePath5+"PureBasic.asm")
DeleteFile(#SourcePath5+"PureBasic.exe")

#SourceTarget6 = "GetAsioDeviceName155.pb"
#SourceIcon6 = "iconFile.ico"
#SourcePath6 = "\MajiorityCamisole155source\"
#Execute6 = "GetAsioDeviceName155.exe"
#ExecutePath6 = "\MajiorityCamisole155\"
If FileSize(#ExecutePath6+#Execute6)>0
  Debug "Please DELETE "+#Execute6
  CallDebugger
EndIf
Debug MajiorityBuildBefore(#SourceTarget6, Chr(34)+#SourcePath6+#SourceTarget6+Chr(34)+" /MMX /UNICODE /commented /XP /THREAD /OPTIMIZER", #SourcePath6)
ClearList(Buffer())
; MajiorityBuild_Tunes_Open
If ReadFile(2, #SourcePath6+"PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf
CallDebugger
; _Tunes_Open
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
; MajiorityBuild_Tunes_Write
If CreateFile(2, #SourcePath6+"PureBasic.asm")
  ForEach Buffer()
    WriteStringN(2, Buffer())
  Next
  FlushFileBuffers(2)
  CloseFile(2)
EndIf
; _Tunes_Write
Debug MajiorityBuildReasm(#SourceTarget6, Chr(34)+"PureBasic.asm"+Chr(34)+" /MMX /UNICODE /THREAD /XP /REASM /OPTIMIZER /ICON "+Chr(34)+#SourceIcon6+Chr(34)+" /OUTPUT "+Chr(34)+#ExecutePath6+#Execute6+Chr(34), #SourcePath6)
; CallDebugger
DeleteFile(#SourcePath6+"PureBasic.asm")
DeleteFile(#SourcePath6+"PureBasic.exe")

End

もっと短く最適化できますけれど、コード行数を短くして CALL-RET 構造で動作する処理にすると、裏システムから妨害されて動作しないと思います。経験上、インターネットへ接続していない環境でも、裏システムの監視状態では「実行するとメモリエラーで動作しない、しかし変数アクセスは存在しない」といった不可解な現象が起きるだけでなく、試作している時は動作していても公開する段階になって「仮想パソコンルーム」で「何をするのか、確認される」、それで不審な意図があれば、「電波妨害」「GPS妨害」「信号機妨害」「電子カード無効」「新幹線の切符を買えない 」など、あらゆる妨害を受けます。「作れない」という現象を理解してほしい。


2024-03-31
Result.i = 2024 のアドレス参照レジスタの初期化

この方法は CometLake コアで有効な手法ですが、複雑な条件を重ねていくと電子ビット基準が揺れやすくなるので、こうして基準を固定します。LEA_String には Rcx Rdx R8 R9 が使われます。昔の考え方では遅くなるけれど、いまは「CPU内部で最適化処理してから実行」という内容ですので、処理速度には影響しません。しかし、「ジャンプ命令」は「その都度、最適化処理を繰り返す」という状態になりますので、CALL-RET 構造は避けて冗長化した方が安定します。

Global LEA_String.s
Macro MajiorityBuild_Tunes_4
  ForEach Buffer()
    If FindString(Buffer(), "LEA ")
      If FindString(Buffer(), "!LEA ")=0
        LEA_String = RemoveString(Buffer(), " ")
        LEA_String = RemoveString(LEA_String, "LEA")
        LEA_String = StringField(LEA_String, 1, ",")
        PreviousElement(Buffer())
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "SMSW "+LEA_String
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip-36]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "CRC32 "+LEA_String+", QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip-36]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip+16]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
        AddElement(Buffer()) : Buffer() = "RDSEED "+LEA_String
        AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip-36]"
        NextElement(Buffer())
      EndIf
    EndIf
  Next
EndMacro

これは Intel CPU Linux や Intel CPU MacOSX でも有効と考えられますので、カーネル再構築から可能と言える方は試されると良いでしょう。BIOSから変更できる方は、最初の初期化で実施すれば、オーバークロックの成功率は大きく改善すると思います。


2024-04-01
MajiorityCleanES から XOR RSP の劣化回避

MagiclobeViwer JKprint では、高速処理が求められていますので、MajiorityBuild_Tunes_6 は適用していません。RSP 操作によって CALL-RET を管理している PureBasic では大きく低ジッターへ貢献します。MajiorityBuild_Tunes_5 は PureBasic 初期化処理 の対応まで。

Macro MajiorityBuild_Tunes_5
  ForEach Buffer()
    If FindString(Buffer(), "XOR ")
      If FindString(Buffer(), "!XOR ")=0
        If FindString(Buffer(), "rax,rax")
          Buffer()="BLSR rax,rax"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR rax,rax"
          Next
          AddElement(Buffer()) : Buffer()="BZHI rax,rax,rax"
        ElseIf FindString(Buffer(), "rbx,rbx")
          Buffer()="BLSR rbx,rbx"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR rbx,rbx"
          Next
          AddElement(Buffer()) : Buffer()="BZHI rbx,rbx,rbx"
        ElseIf FindString(Buffer(), "rcx,rcx")
          Buffer()="BLSR rcx,rcx"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR rcx,rcx"
          Next
          AddElement(Buffer()) : Buffer()="BZHI rcx,rcx,rcx"
        ElseIf FindString(Buffer(), "rdx,rdx")
          Buffer()="BLSR rdx,rdx"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR rdx,rdx"
          Next
          AddElement(Buffer()) : Buffer()="BZHI rdx,rdx,rdx"
        ElseIf FindString(Buffer(), "r8,r8")
          Buffer()="BLSR r8,r8"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR r8,r8"
          Next
          AddElement(Buffer()) : Buffer()="BZHI r8,r8,r8"
        ElseIf FindString(Buffer(), "r9,r9")
          Buffer()="BLSR r9,r9"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR r9,r9"
          Next
          AddElement(Buffer()) : Buffer()="BZHI r9,r9,r9"
        ElseIf FindString(Buffer(), "rsp,rsp")
          Buffer()="BLSR r15,r15"
          For Loop=1 To 63
            AddElement(Buffer()) : Buffer()="BLSR r15,r15"
          Next
          AddElement(Buffer()) : Buffer()="BZHI r15,r15,r15"
        EndIf
      EndIf
    EndIf
  Next
EndMacro

Global Sub_pos.i, Sub_max.i , Add_pos.i, Add_max.i
Macro MajiorityBuild_Tunes_6
  ForEach Buffer()
    If FindString(Buffer(), " SUB    rsp,") And Val(StringField(Buffer(), 2, ","))>0
      Sub_pos = 0 : Sub_max =0
      Sub_max = Val(StringField(Buffer(), 2, ","))
      Buffer() = ""
      MOV_Rsp_Up_Down
      For Sub_pos=1 To Sub_max
        AddElement(Buffer()) : Buffer() = "DEC rsp" ; Sub
      Next
      MOV_Rsp_Up_Down
    EndIf
  Next
  ForEach Buffer()
    If FindString(Buffer(), " ADD    rsp,") And Val(StringField(Buffer(), 2, ","))>0
      Add_max = 0 : Add_pos = 0
      Add_max = Val(StringField(Buffer(), 2, ","))
      Buffer() = ""
      MOV_Rsp_Up_Down
      For Add_pos=1 To Add_max
        AddElement(Buffer()) : Buffer() = "INC rsp" ; Add
      Next
      MOV_Rsp_Up_Down
    EndIf
  Next
  ForEach Buffer()
    If FindString(Buffer(), "PUSH ")
      If FindString(Buffer(), "rax")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rax_Up_Down
      ElseIf  FindString(Buffer(), "rbx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rbp_Up_Down
      ElseIf  FindString(Buffer(), "rcx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rcx_Up_Down
      ElseIf  FindString(Buffer(), "rdx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rdx_Up_Down
      ElseIf  FindString(Buffer(), "rsi")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rsi_Up_Down
      ElseIf  FindString(Buffer(), "rbp")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rbp_Up_Down
        ;     ElseIf  FindString(Buffer(), "rsp")
        ;       MOV_Rsp_Rsp_Up_Down
      ElseIf  FindString(Buffer(), "rdi")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_Rdi_Up_Down
      ElseIf  FindString(Buffer(), "r8")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R8_Up_Down
      ElseIf  FindString(Buffer(), "r9")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R9_Up_Down
      ElseIf  FindString(Buffer(), "r10")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R10_Up_Down
      ElseIf  FindString(Buffer(), "r11")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R11_Up_Down
      ElseIf  FindString(Buffer(), "r12")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R12_Up_Down
      ElseIf  FindString(Buffer(), "r13")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R13_Up_Down
      ElseIf  FindString(Buffer(), "r14")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R14_Up_Down
      ElseIf  FindString(Buffer(), "r15")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        MOV_R15_Up_Down
      Else
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
      EndIf
      NextElement(Buffer())
      MOV_Rsp_Up_Down
    EndIf
  Next
  ForEach Buffer()
    If FindString(Buffer(), "POP ")
      If FindString(Buffer(), "rax")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rax_Up_Down
      ElseIf  FindString(Buffer(), "rbx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rbp_Up_Down
      ElseIf  FindString(Buffer(), "rcx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rcx_Up_Down
      ElseIf  FindString(Buffer(), "rdx")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rdx_Up_Down
      ElseIf  FindString(Buffer(), "rsi")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rsi_Up_Down
      ElseIf  FindString(Buffer(), "rbp")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rbp_Up_Down
        ;     ElseIf  FindString(Buffer(), "rsp")
        ;       MOV_Rsp_Rsp_Up_Down
      ElseIf  FindString(Buffer(), "rdi")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_Rdi_Up_Down
      ElseIf  FindString(Buffer(), "r8")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R8_Up_Down
      ElseIf  FindString(Buffer(), "r9")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R9_Up_Down
      ElseIf  FindString(Buffer(), "r10")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R10_Up_Down
      ElseIf  FindString(Buffer(), "r11")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R11_Up_Down
      ElseIf  FindString(Buffer(), "r12")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R12_Up_Down
      ElseIf  FindString(Buffer(), "r13")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R13_Up_Down
      ElseIf  FindString(Buffer(), "r14")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R14_Up_Down
      ElseIf  FindString(Buffer(), "r15")
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
        MOV_R15_Up_Down
      Else
        PreviousElement(Buffer())
        MOV_Rsp_Up_Down
        NextElement(Buffer())
      EndIf
      MOV_Rsp_Up_Down
    EndIf
  Next
EndMacro

品質改善の限界かな?と思えるまでは、こうした低ジッター処理を使用しないほうが、改善する根拠の模索は継続しやすい。新しい根拠を試すとき、この限界まで改善した状態を何もしないで実現できれば、それは限界突破したと言える。多くの挑戦者が失敗するのは、MajiorityBuild_Tunes_6 を使用している条件で確認したので、改善しなくて当然に思う。多くのプログラムは ADD rsp, address SUB rsp, address で記述されており、それに対応できなければ意味がない。


2024-04-05
SMSW—Store Machine Status Word 命令、契約終了

SMSW に代行できる手段が登場するまでの条件で、パテントホルダーから期間限定の使用許可が下りていました。SMSW より CRC32 の電子ビット基準の方が安定しやすいので、SMSW による電子ビット基準の作成は中止しました。それでパソコンの環境によっては不安定になる可能性を考えますが、こちらでは対応できません。

Macro MajiorityBuild_Removed_SMSW
  ForEach Buffer()
    If FindString(Buffer(), "SMSW")
      Debug "SMSW ERROR - " + Str(ListIndex(Buffer()))
      PreviousElement(Buffer())
      Debug Buffer()
      NextElement(Buffer())
      Debug Buffer()
      NextElement(Buffer())
      Debug Buffer()
      CallDebugger
    EndIf
  Next    
EndMacro

ForEach Buffer()
  If FindString(Buffer(), "PureBasicStart:")
    ; 1
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ; 2
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ; 3
    BeforeProcedureRegisters_CRC32_BLSR
    BeforeProcedureRegisters_RDSEED_BLSR
    ;
    
    Break
  EndIf
Next
EndMacro

; _Tunes_Open
MajiorityBuild_Removed_SMSW
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
MajiorityBuild_Tunes_4
MajiorityBuild_Tunes_5
MajiorityBuild_Tunes_6
MajiorityBuild_Removed_SMSW

ソースコードの編集時に Syntax check をして、ビルドする前に SMSW の文字列が存在しないか、確認してから実行形式を生成しています。大規模な修正変更になりましたので、十分なエラー確認で通常は「目視検査」になるけれど、できるだけ「検査プログラムの実行」で対応しています。しかし、それでも間違える条件はあって、今は使用していませんが 独自の動的ライブラリ DLL や 静的ライブラリ LIB を使用していれば間違えると思います。

MajiorityCamisole 161 solutions release
違いについて、 MC160 は短周期 , MC161 は長周期 、処理内容は同じです。


2024-04-09
XMM レジスタの調整は FXSAVE64 FXRSTOR64 で最適バランス

待機 WindowsAPI Sleep 命令の前後に FXSAVE64 FXRSTOR64 を使うことで、XMM レジスタの調整を「メモリチップ基準」で行います。この方法にするまでに、XMM レジスタを様々な方法で初期化する実験を繰り返して来ましたが、各種ドライバーの設計に合致する電子ビット基準の運用は困難であったので、この方法へ決めました。少しずつ安定する仕様になっていますけれど、メモリチップの性能に依存するので、高品質メモリの採用を求めます。

FXSAVE64 FXRSTOR64 を採用した理由について
先に FXSAVE FXRSTOR で作り、とても良くなりました。次に FXSAVE64 FXRSTOR64 でも作りますと、品質は不安定に思いました。しかし、FXSAVE FXRSTOR へ戻すと、ジッター現象を確認しました。それで FXSAVE64 FXRSTOR64 を採用しました。

FXSAVE64 : Save the x87 FPU, MMX 0-7, XMM 0-15, and MXCSR to m512byte.
Sleep : WindowsAPI Delay Resolution is default 16ms.
FXRSTOR64 : Restore the x87 FPU, MMX 0-7, XMM 0-15, and MXCSR from m512byte.
Debug "  Global *FXSAVE"
Debug "  BLSR_Rcx_x64"
Debug "  BLSR_Rdx_x64"
Debug "  BLSR_R8_x64"
Debug "  !INC cl"
Debug "  !INC R8b"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !XCHG Rcx, R8"
Debug "  !INC dl"
Debug "  !MOVZX Rdx, dl"
Debug "  !CALL PB_AllocateMemory"
Debug "  !MOVNTI QWORD [p_FXSAVE], Rax"
Debug "  !NOP QWORD [p_FXSAVE]"
;  "*FXSAVE = AllocateMemory(512)"

Macro FXSAVE
  Debug "  !MOV R8, QWORD [p_FXSAVE]"
  Debug "  !FXSAVE64 [R8]"
EndMacro

Macro FXRSTOR
Debug "    !MOV R8, QWORD [p_FXSAVE] "
Debug "    !FXRSTOR64 [R8]"
EndMacro

; MC163
Debug "  PrintN("+Chr(34)+"Setup 1... CRC32 BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"[Loop 178 times] ... Setup + FXSAVE64 sleep_(sine wave) FXRSTOR64"+Chr(34)+")"

; MC162
Debug "  PrintN("+Chr(34)+"Setup 1... CRC32 BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 2... RDSEED BLSRx64 BZHI CPU reg. Stabilizer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"Setup 3... Logical to Physical CPU reg. Balancer"+Chr(34)+")"
Debug "  PrintN("+Chr(34)+"[Loop 29 times] ... Setup + FXSAVE64 sleep_(sine wave) FXRSTOR64"+Chr(34)+")"

Debug "  ; "+Str(SineAngels)+" Setup"
BeforeProcedureRegisters_CRC32_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
SIMPLE_MOVE_REGISTERS_Up_and_Down
FXSAVE

Debug "  !CALL QWORD Sleep"
Debug "  !NOP QWORD [Rip-32]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"
FXRSTOR

判断に迷うときは YouTube を4時間ぐらい見るか、ゲームのベンチマークを4時間ぐらい実行すると、結果は安定してきます。もし、これで不安定になるマザーボードを発見したら、販売元へトラブル情報をすぐに伝えてください。電源設計が根本的におかしいと考えられます。

MagiclobeViewer を使用して表示してから、コスプレ写真のカラーバランスが安定するまでに、待機時間は7秒ぐらい必要です。この待機時間を省略する方法は今すぐに思いつかない。その結果を考えたら、音楽再生ソフトの更新も十分な検討時間が必要と判断しました。


2024-04-10
FXSAVE64 の頻度は多くてよいが、FXRSTOR64 は最小範囲で考慮

さらに音質は良くなりましたが、xmm 0-15 を初期化する処理になりますので、各種の調整ユーティリティやサウンドドライバーによっては悪影響があると思います。MMX命令による 512bytes の "For Loop=0 To 512 Step 8" はループ処理にしていませんので、ジッター影響を抑制できています。ソースコードの説明は「難易度あげろ!」の指図により、必要最小限に抑えています。

; Nontallion
BeforeProcedureRegisters_CRC32_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F281_MMX.pbi"
SIMPLE_MOVE_REGISTERS_Up_and_Down
BeforeProcedureRegisters_CRC32_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
IncludeFile "NaturalBlade_OnlyMyRailgun_CuresStopRN_5d2_F281_MMX.pbi"
SIMPLE_MOVE_REGISTERS_Up_and_Down
XORPS_xmm15_to_xmm0_xmm15
!MOV R8, QWORD [p_FXSAVE]
!FXSAVE64 [R8]
SIMPLE_MOVE_REGISTERS_Up_and_Down

MainThread()
End

; Nontallion AsioProc
!MOV R8, QWORD [p_FXSAVE]
!FXRSTOR64 [R8]
; / ES38 Special Tuning Step 1
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
; / ES38 Special Tuning End

: Elementary
!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_F281_MMX.pbi"
SIMPLE_MOVE_REGISTERS_Up_and_Down
!MOV R8, QWORD [p_FXSAVE]
!FXSAVE64 [R8]
SIMPLE_MOVE_REGISTERS_Up_and_Down

; Elementary AsioProc
!MOV R8, QWORD [p_FXSAVE]
!FXRSTOR64 [R8]
; / ES38 Special Tuning Step 1
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
BeforeProcedureRegisters_255MEGA
; / ES38 Special Tuning End

; MajiorityCamisole
Debug "  !XCHG Rcx, R8"
Debug "  !INC dl"
Debug "  !MOVZX Rdx, dl"
Debug "  !CALL PB_AllocateMemory2"
Debug "  !MOVNTI QWORD [p_FXSAVE], Rax"
Debug "  !NOP QWORD [p_FXSAVE]"
;  "*FXSAVE = AllocateMemory(512,1)"
Debug "  ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
Debug "  !MOV R8, QWORD [p_FXSAVE]"
For Loop=0 To 512 Step 8
  Debug "  !MOVQ QWORD [R8+"+Str(Loop)+"], mm5"
Next
Debug "  !EMMS"

SIMPLE_MOVE_REGISTERS_Up_and_Down
FXRSTOR
Debug "  PrintN("+Chr(34)+"Finished"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down

Debug "Sleep_(0)"
Debug "AllocateMemory(0,0)"

; MajiorityCamisole Removed FXRSTOR
Debug "  !CALL QWORD Sleep"
Debug "  !NOP QWORD [Rip-32]"
Debug "  !NOP QWORD [Rip]"
Debug "  !NOP QWORD [Rip]"

FXRSTOR の適用場所は「スレッドの最初」が良いと考えました。繰り返す処理にすると電子ビット基準は揺れすぎています。FXSAVE は電子ビット基準を作成した直後に使用して、それをスレッドの基準にしたら、すべての限界突破となりました。


2024-04-11
FXSAVE64 FXRSTOR64 は汎用レジスタの状態が影響すると想定

166 167 Test version を公開しました。これは FXRSTOR64 処理後に、保存先のエリアを初期化しています。この初期化は 7秒ラグ が必要と思われて、次のバージョン 168 169 では「エリアのスイッチ」を考慮したいと思います。仕様上、10秒以上のメモリクールタイムが存在するので、ジッター影響は抑制されます。

Debug "  Global *FXSAVE, *FXSAVE2"
Debug "  BLSR_Rcx_x64"
Debug "  BLSR_Rdx_x64"
Debug "  BLSR_R8_x64"
Debug "  !INC cl"
Debug "  !INC R8b"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !SHL R8, cl"
Debug "  !XCHG Rcx, R8"
Debug "  !INC dl"
Debug "  !MOVZX Rdx, dl"
Debug "  !CALL PB_AllocateMemory2"
Debug "  !MOVNTI QWORD [p_FXSAVE2], Rax"
Debug "  !NOP QWORD [p_FXSAVE2]"
;  "*FXSAVE = AllocateMemory(512,1)"
Debug "  ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
Debug "  !MOV R8, QWORD [p_FXSAVE2]"
For Loop=0 To 512 Step 8
  Debug "  !MOVQ QWORD [R8+"+Str(Loop)+"], mm5"
Next
Debug "  !EMMS"

BeforeProcedureRegisters_CRC32_BLSR
BeforeProcedureRegisters_RDSEED_BLSR
SIMPLE_MOVE_REGISTERS_Up_and_Down
FXRSTOR
Debug "  Swap *FXSAVE2, *FXSAVE"
Debug "  ALL_MMX_CLEAR_SHIFTWORD_INC_CL"
Debug "  !MOV R8, QWORD [p_FXSAVE]"
For Loop=0 To 512 Step 8
  Debug "  !MOVQ QWORD [R8+"+Str(Loop)+"], mm5"
Next
Debug "  !EMMS"
Debug "  PrintN("+Chr(34)+"Finished"+Chr(34)+")"
SIMPLE_MOVE_REGISTERS_Up_and_Down

Elementary [Tester x8] [8192] [U3] [low-freq 21.53Hz]

姫トランスを聞きながら、167 or 169 比較をして 165 のような安定感を感じられて、調整成功と判断しました。円周率の27桁精度により、元信号+補間値+補間値+補間値+補間値+補間値+補間値+補間値の計算により鳴らしていますので、きれいな音波となりやすい。これは AKM AK4497EQ と同じように感じられますので、演算処理の内容は正しいと考えています。アップサンプリングの高域側に出現するエリアシング雑音については、最新のオーディオ用DACでは除去する仕様になっており、低域通過フィルターの演算は不要と考えています。


2024-04-12
FXSAVE64 FXRSTOR64 m512 の前後を 512 bytes 分離する

バッファの初期化をする時、後端のギリギリで処理すると、メモリ系ジッターが生じると Rewrite data の研究開発から判明しており、その対策を行いました。

IncludeFile "FXSAVE_FXRSTOR_Rev1.pbi":

Global *FXSAVE
BLSR_Rcx_x64
BLSR_Rdx_x64
BLSR_R8_x64
!INC R8b
!INC R8b
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!MOV R8b, R8b
!MOV R8w, R8w
!MOV R8, R8
!SHL R8, cl
!XCHG Rcx, R8
!INC dl
!MOVZX Rdx, dl
!CALL PB_AllocateMemory2
BLSR_Rcx_x64
BLSR_R8_x64
!INC R8b
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!SHL R8, cl
!MOV R8b, R8b
!MOV R8w, R8w
!MOV R8, R8
!MOV al, al
!MOV ah, ah
!MOV ax, ax
!MOV Rax, Rax
!ADD Rax, R8
!MOVNTI QWORD [p_FXSAVE], Rax
!NOP QWORD [p_FXSAVE]
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
!MOV R8, QWORD [p_FXSAVE]
!MOVQ QWORD [R8-512], mm5
!MOVQ QWORD [R8-504], mm5
!MOVQ QWORD [R8-496], mm5
!MOVQ QWORD [R8-488], mm5
!MOVQ QWORD [R8-480], mm5
!MOVQ QWORD [R8-472], mm5
!MOVQ QWORD [R8-464], mm5
!MOVQ QWORD [R8-456], mm5
!MOVQ QWORD [R8-448], mm5
!MOVQ QWORD [R8-440], mm5
!MOVQ QWORD [R8-432], mm5
!MOVQ QWORD [R8-424], mm5
!MOVQ QWORD [R8-416], mm5
!MOVQ QWORD [R8-408], mm5
!MOVQ QWORD [R8-400], mm5
!MOVQ QWORD [R8-392], mm5
!MOVQ QWORD [R8-384], mm5
!MOVQ QWORD [R8-376], mm5
!MOVQ QWORD [R8-368], mm5
!MOVQ QWORD [R8-360], mm5
!MOVQ QWORD [R8-352], mm5
!MOVQ QWORD [R8-344], mm5
!MOVQ QWORD [R8-336], mm5
!MOVQ QWORD [R8-328], mm5
!MOVQ QWORD [R8-320], mm5
!MOVQ QWORD [R8-312], mm5
!MOVQ QWORD [R8-304], mm5
!MOVQ QWORD [R8-296], mm5
!MOVQ QWORD [R8-288], mm5
!MOVQ QWORD [R8-280], mm5
!MOVQ QWORD [R8-272], mm5
!MOVQ QWORD [R8-264], mm5
!MOVQ QWORD [R8-256], mm5
!MOVQ QWORD [R8-248], mm5
!MOVQ QWORD [R8-240], mm5
!MOVQ QWORD [R8-232], mm5
!MOVQ QWORD [R8-224], mm5
!MOVQ QWORD [R8-216], mm5
!MOVQ QWORD [R8-208], mm5
!MOVQ QWORD [R8-200], mm5
!MOVQ QWORD [R8-192], mm5
!MOVQ QWORD [R8-184], mm5
!MOVQ QWORD [R8-176], mm5
!MOVQ QWORD [R8-168], mm5
!MOVQ QWORD [R8-160], mm5
!MOVQ QWORD [R8-152], mm5
!MOVQ QWORD [R8-144], mm5
!MOVQ QWORD [R8-136], mm5
!MOVQ QWORD [R8-128], mm5
!MOVQ QWORD [R8-120], mm5
!MOVQ QWORD [R8-112], mm5
!MOVQ QWORD [R8-104], mm5
!MOVQ QWORD [R8-96], mm5
!MOVQ QWORD [R8-88], mm5
!MOVQ QWORD [R8-80], mm5
!MOVQ QWORD [R8-72], mm5
!MOVQ QWORD [R8-64], mm5
!MOVQ QWORD [R8-56], mm5
!MOVQ QWORD [R8-48], mm5
!MOVQ QWORD [R8-40], mm5
!MOVQ QWORD [R8-32], mm5
!MOVQ QWORD [R8-24], mm5
!MOVQ QWORD [R8-16], mm5
!MOVQ QWORD [R8-8], mm5
!MOVQ QWORD [R8+0], mm5
!MOVQ QWORD [R8+8], mm5
!MOVQ QWORD [R8+16], mm5
!MOVQ QWORD [R8+24], mm5
!MOVQ QWORD [R8+32], mm5
!MOVQ QWORD [R8+40], mm5
!MOVQ QWORD [R8+48], mm5
!MOVQ QWORD [R8+56], mm5
!MOVQ QWORD [R8+64], mm5
!MOVQ QWORD [R8+72], mm5
!MOVQ QWORD [R8+80], mm5
!MOVQ QWORD [R8+88], mm5
!MOVQ QWORD [R8+96], mm5
!MOVQ QWORD [R8+104], mm5
!MOVQ QWORD [R8+112], mm5
!MOVQ QWORD [R8+120], mm5
!MOVQ QWORD [R8+128], mm5
!MOVQ QWORD [R8+136], mm5
!MOVQ QWORD [R8+144], mm5
!MOVQ QWORD [R8+152], mm5
!MOVQ QWORD [R8+160], mm5
!MOVQ QWORD [R8+168], mm5
!MOVQ QWORD [R8+176], mm5
!MOVQ QWORD [R8+184], mm5
!MOVQ QWORD [R8+192], mm5
!MOVQ QWORD [R8+200], mm5
!MOVQ QWORD [R8+208], mm5
!MOVQ QWORD [R8+216], mm5
!MOVQ QWORD [R8+224], mm5
!MOVQ QWORD [R8+232], mm5
!MOVQ QWORD [R8+240], mm5
!MOVQ QWORD [R8+248], mm5
!MOVQ QWORD [R8+256], mm5
!MOVQ QWORD [R8+264], mm5
!MOVQ QWORD [R8+272], mm5
!MOVQ QWORD [R8+280], mm5
!MOVQ QWORD [R8+288], mm5
!MOVQ QWORD [R8+296], mm5
!MOVQ QWORD [R8+304], mm5
!MOVQ QWORD [R8+312], mm5
!MOVQ QWORD [R8+320], mm5
!MOVQ QWORD [R8+328], mm5
!MOVQ QWORD [R8+336], mm5
!MOVQ QWORD [R8+344], mm5
!MOVQ QWORD [R8+352], mm5
!MOVQ QWORD [R8+360], mm5
!MOVQ QWORD [R8+368], mm5
!MOVQ QWORD [R8+376], mm5
!MOVQ QWORD [R8+384], mm5
!MOVQ QWORD [R8+392], mm5
!MOVQ QWORD [R8+400], mm5
!MOVQ QWORD [R8+408], mm5
!MOVQ QWORD [R8+416], mm5
!MOVQ QWORD [R8+424], mm5
!MOVQ QWORD [R8+432], mm5
!MOVQ QWORD [R8+440], mm5
!MOVQ QWORD [R8+448], mm5
!MOVQ QWORD [R8+456], mm5
!MOVQ QWORD [R8+464], mm5
!MOVQ QWORD [R8+472], mm5
!MOVQ QWORD [R8+480], mm5
!MOVQ QWORD [R8+488], mm5
!MOVQ QWORD [R8+496], mm5
!MOVQ QWORD [R8+504], mm5
!MOVQ QWORD [R8+512], mm5
!MOVQ QWORD [R8+520], mm5
!MOVQ QWORD [R8+528], mm5
!MOVQ QWORD [R8+536], mm5
!MOVQ QWORD [R8+544], mm5
!MOVQ QWORD [R8+552], mm5
!MOVQ QWORD [R8+560], mm5
!MOVQ QWORD [R8+568], mm5
!MOVQ QWORD [R8+576], mm5
!MOVQ QWORD [R8+584], mm5
!MOVQ QWORD [R8+592], mm5
!MOVQ QWORD [R8+600], mm5
!MOVQ QWORD [R8+608], mm5
!MOVQ QWORD [R8+616], mm5
!MOVQ QWORD [R8+624], mm5
!MOVQ QWORD [R8+632], mm5
!MOVQ QWORD [R8+640], mm5
!MOVQ QWORD [R8+648], mm5
!MOVQ QWORD [R8+656], mm5
!MOVQ QWORD [R8+664], mm5
!MOVQ QWORD [R8+672], mm5
!MOVQ QWORD [R8+680], mm5
!MOVQ QWORD [R8+688], mm5
!MOVQ QWORD [R8+696], mm5
!MOVQ QWORD [R8+704], mm5
!MOVQ QWORD [R8+712], mm5
!MOVQ QWORD [R8+720], mm5
!MOVQ QWORD [R8+728], mm5
!MOVQ QWORD [R8+736], mm5
!MOVQ QWORD [R8+744], mm5
!MOVQ QWORD [R8+752], mm5
!MOVQ QWORD [R8+760], mm5
!MOVQ QWORD [R8+768], mm5
!MOVQ QWORD [R8+776], mm5
!MOVQ QWORD [R8+784], mm5
!MOVQ QWORD [R8+792], mm5
!MOVQ QWORD [R8+800], mm5
!MOVQ QWORD [R8+808], mm5
!MOVQ QWORD [R8+816], mm5
!MOVQ QWORD [R8+824], mm5
!MOVQ QWORD [R8+832], mm5
!MOVQ QWORD [R8+840], mm5
!MOVQ QWORD [R8+848], mm5
!MOVQ QWORD [R8+856], mm5
!MOVQ QWORD [R8+864], mm5
!MOVQ QWORD [R8+872], mm5
!MOVQ QWORD [R8+880], mm5
!MOVQ QWORD [R8+888], mm5
!MOVQ QWORD [R8+896], mm5
!MOVQ QWORD [R8+904], mm5
!MOVQ QWORD [R8+912], mm5
!MOVQ QWORD [R8+920], mm5
!MOVQ QWORD [R8+928], mm5
!MOVQ QWORD [R8+936], mm5
!MOVQ QWORD [R8+944], mm5
!MOVQ QWORD [R8+952], mm5
!MOVQ QWORD [R8+960], mm5
!MOVQ QWORD [R8+968], mm5
!MOVQ QWORD [R8+976], mm5
!MOVQ QWORD [R8+984], mm5
!MOVQ QWORD [R8+992], mm5
!MOVQ QWORD [R8+1000], mm5
!MOVQ QWORD [R8+1008], mm5
!MOVQ QWORD [R8+1016], mm5
!EMMS

; Macro FXSAVE
;   !MOV R8, QWORD [p_FXSAVE]
;   !FXSAVE64 [R8]
; EndMacro
; 
; Macro FXRSTOR
;   !MOV R8, QWORD [p_FXSAVE]
;   !FXRSTOR64 [R8]
; EndMacro

MajiorityCamisole 171 solutions release.


2024-04-15
FXSAVE64 FXRSTOR64 m512 を CPUキャッシュ化する

これまでの実験で、メモリの読み書き前へ NOP QWORD [Address] の処理により CPU Cached とすると、低ジッター処理になると判明しています。でも、気持ちとしては MC171 で終わりにしたかったけれど、写真表示をした時に大きくカラーバランスが変化していれば、研究サボタージュを指摘されかねない。それでも継続して良かったと思うことは、H-NEXT の映像は美しく配信できるようになり、そのキャスト達が時折、私の前にお出ましになり、リアルと表示の差がどれほどあるのか、確認させてくれる。その期待に応えて作ってきた。

MajiorityCamisole 173 solutions release.


2024-04-17
FXSAVE64 FXRSTOR64 m512 の CPUキャッシュ最適化

メモリアクセスを低ジッター化するには、MMX命令によって読み書きするだけでなく、キャッシュ回避命令を使用して、キャッシュ化命令を直後に使用すると、低ジッターで処理できると判明しています。その過去に判明した手法を今回は適用しています。オーディオ機器によっては、デジタル系統で「低ジッター・バーンイン」が不完全でありますので、4時間ぐらい鳴らしてみて不自然なバランスが解決されるまで待機して下さい。オーディオの不鮮明な印象から、シャープでクリアな傾向になっていれば、パソコンの表示についても安定したカラーバランスへ整っていきます。これはCPU製造時にコストの都合から削減された通電テストが不十分であると思います。

IncludeFile "FXSAVE_FXRSTOR_Rev3.pbi":

Macro FXCACHE
;   !MOV R8, QWORD [p_FXSAVE]
!NOP QWORD [R8+0]
!NOP QWORD [R8+8]
!NOP QWORD [R8+16]
!NOP QWORD [R8+24]
!NOP QWORD [R8+32]
!NOP QWORD [R8+40]
!NOP QWORD [R8+48]
!NOP QWORD [R8+56]
!NOP QWORD [R8+64]
!NOP QWORD [R8+72]
!NOP QWORD [R8+80]
!NOP QWORD [R8+88]
!NOP QWORD [R8+96]
!NOP QWORD [R8+104]
!NOP QWORD [R8+112]
!NOP QWORD [R8+120]
!NOP QWORD [R8+128]
!NOP QWORD [R8+136]
!NOP QWORD [R8+144]
!NOP QWORD [R8+152]
!NOP QWORD [R8+160]
!NOP QWORD [R8+168]
!NOP QWORD [R8+176]
!NOP QWORD [R8+184]
!NOP QWORD [R8+192]
!NOP QWORD [R8+200]
!NOP QWORD [R8+208]
!NOP QWORD [R8+216]
!NOP QWORD [R8+224]
!NOP QWORD [R8+232]
!NOP QWORD [R8+240]
!NOP QWORD [R8+248]
!NOP QWORD [R8+256]
!NOP QWORD [R8+264]
!NOP QWORD [R8+272]
!NOP QWORD [R8+280]
!NOP QWORD [R8+288]
!NOP QWORD [R8+296]
!NOP QWORD [R8+304]
!NOP QWORD [R8+312]
!NOP QWORD [R8+320]
!NOP QWORD [R8+328]
!NOP QWORD [R8+336]
!NOP QWORD [R8+344]
!NOP QWORD [R8+352]
!NOP QWORD [R8+360]
!NOP QWORD [R8+368]
!NOP QWORD [R8+376]
!NOP QWORD [R8+384]
!NOP QWORD [R8+392]
!NOP QWORD [R8+400]
!NOP QWORD [R8+408]
!NOP QWORD [R8+416]
!NOP QWORD [R8+424]
!NOP QWORD [R8+432]
!NOP QWORD [R8+440]
!NOP QWORD [R8+448]
!NOP QWORD [R8+456]
!NOP QWORD [R8+464]
!NOP QWORD [R8+472]
!NOP QWORD [R8+480]
!NOP QWORD [R8+488]
!NOP QWORD [R8+496]
!NOP QWORD [R8+504]
EndMacro

Macro FXCLEAR_ALL
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
;   !MOV R8, QWORD [p_FXSAVE]
!MOVQ QWORD [R8-512], mm5
!MOVQ QWORD [R8-504], mm5
!MOVQ QWORD [R8-496], mm5
!MOVQ QWORD [R8-488], mm5
!MOVQ QWORD [R8-480], mm5
!MOVQ QWORD [R8-472], mm5
!MOVQ QWORD [R8-464], mm5
!MOVQ QWORD [R8-456], mm5
!MOVQ QWORD [R8-448], mm5
!MOVQ QWORD [R8-440], mm5
!MOVQ QWORD [R8-432], mm5
!MOVQ QWORD [R8-424], mm5
!MOVQ QWORD [R8-416], mm5
!MOVQ QWORD [R8-408], mm5
!MOVQ QWORD [R8-400], mm5
!MOVQ QWORD [R8-392], mm5
!MOVQ QWORD [R8-384], mm5
!MOVQ QWORD [R8-376], mm5
!MOVQ QWORD [R8-368], mm5
!MOVQ QWORD [R8-360], mm5
!MOVQ QWORD [R8-352], mm5
!MOVQ QWORD [R8-344], mm5
!MOVQ QWORD [R8-336], mm5
!MOVQ QWORD [R8-328], mm5
!MOVQ QWORD [R8-320], mm5
!MOVQ QWORD [R8-312], mm5
!MOVQ QWORD [R8-304], mm5
!MOVQ QWORD [R8-296], mm5
!MOVQ QWORD [R8-288], mm5
!MOVQ QWORD [R8-280], mm5
!MOVQ QWORD [R8-272], mm5
!MOVQ QWORD [R8-264], mm5
!MOVQ QWORD [R8-256], mm5
!MOVQ QWORD [R8-248], mm5
!MOVQ QWORD [R8-240], mm5
!MOVQ QWORD [R8-232], mm5
!MOVQ QWORD [R8-224], mm5
!MOVQ QWORD [R8-216], mm5
!MOVQ QWORD [R8-208], mm5
!MOVQ QWORD [R8-200], mm5
!MOVQ QWORD [R8-192], mm5
!MOVQ QWORD [R8-184], mm5
!MOVQ QWORD [R8-176], mm5
!MOVQ QWORD [R8-168], mm5
!MOVQ QWORD [R8-160], mm5
!MOVQ QWORD [R8-152], mm5
!MOVQ QWORD [R8-144], mm5
!MOVQ QWORD [R8-136], mm5
!MOVQ QWORD [R8-128], mm5
!MOVQ QWORD [R8-120], mm5
!MOVQ QWORD [R8-112], mm5
!MOVQ QWORD [R8-104], mm5
!MOVQ QWORD [R8-96], mm5
!MOVQ QWORD [R8-88], mm5
!MOVQ QWORD [R8-80], mm5
!MOVQ QWORD [R8-72], mm5
!MOVQ QWORD [R8-64], mm5
!MOVQ QWORD [R8-56], mm5
!MOVQ QWORD [R8-48], mm5
!MOVQ QWORD [R8-40], mm5
!MOVQ QWORD [R8-32], mm5
!MOVQ QWORD [R8-24], mm5
!MOVQ QWORD [R8-16], mm5
!MOVQ QWORD [R8-8], mm5
!MOVNTQ QWORD [R8+0], mm5
!MOVNTQ QWORD [R8+8], mm5
!MOVNTQ QWORD [R8+16], mm5
!MOVNTQ QWORD [R8+24], mm5
!MOVNTQ QWORD [R8+32], mm5
!MOVNTQ QWORD [R8+40], mm5
!MOVNTQ QWORD [R8+48], mm5
!MOVNTQ QWORD [R8+56], mm5
!MOVNTQ QWORD [R8+64], mm5
!MOVNTQ QWORD [R8+72], mm5
!MOVNTQ QWORD [R8+80], mm5
!MOVNTQ QWORD [R8+88], mm5
!MOVNTQ QWORD [R8+96], mm5
!MOVNTQ QWORD [R8+104], mm5
!MOVNTQ QWORD [R8+112], mm5
!MOVNTQ QWORD [R8+120], mm5
!MOVNTQ QWORD [R8+128], mm5
!MOVNTQ QWORD [R8+136], mm5
!MOVNTQ QWORD [R8+144], mm5
!MOVNTQ QWORD [R8+152], mm5
!MOVNTQ QWORD [R8+160], mm5
!MOVNTQ QWORD [R8+168], mm5
!MOVNTQ QWORD [R8+176], mm5
!MOVNTQ QWORD [R8+184], mm5
!MOVNTQ QWORD [R8+192], mm5
!MOVNTQ QWORD [R8+200], mm5
!MOVNTQ QWORD [R8+208], mm5
!MOVNTQ QWORD [R8+216], mm5
!MOVNTQ QWORD [R8+224], mm5
!MOVNTQ QWORD [R8+232], mm5
!MOVNTQ QWORD [R8+240], mm5
!MOVNTQ QWORD [R8+248], mm5
!MOVNTQ QWORD [R8+256], mm5
!MOVNTQ QWORD [R8+264], mm5
!MOVNTQ QWORD [R8+272], mm5
!MOVNTQ QWORD [R8+280], mm5
!MOVNTQ QWORD [R8+288], mm5
!MOVNTQ QWORD [R8+296], mm5
!MOVNTQ QWORD [R8+304], mm5
!MOVNTQ QWORD [R8+312], mm5
!MOVNTQ QWORD [R8+320], mm5
!MOVNTQ QWORD [R8+328], mm5
!MOVNTQ QWORD [R8+336], mm5
!MOVNTQ QWORD [R8+344], mm5
!MOVNTQ QWORD [R8+352], mm5
!MOVNTQ QWORD [R8+360], mm5
!MOVNTQ QWORD [R8+368], mm5
!MOVNTQ QWORD [R8+376], mm5
!MOVNTQ QWORD [R8+384], mm5
!MOVNTQ QWORD [R8+392], mm5
!MOVNTQ QWORD [R8+400], mm5
!MOVNTQ QWORD [R8+408], mm5
!MOVNTQ QWORD [R8+416], mm5
!MOVNTQ QWORD [R8+424], mm5
!MOVNTQ QWORD [R8+432], mm5
!MOVNTQ QWORD [R8+440], mm5
!MOVNTQ QWORD [R8+448], mm5
!MOVNTQ QWORD [R8+456], mm5
!MOVNTQ QWORD [R8+464], mm5
!MOVNTQ QWORD [R8+472], mm5
!MOVNTQ QWORD [R8+480], mm5
!MOVNTQ QWORD [R8+488], mm5
!MOVNTQ QWORD [R8+496], mm5
!MOVNTQ QWORD [R8+504], mm5
!NOP QWORD [R8+0]
!NOP QWORD [R8+8]
!NOP QWORD [R8+16]
!NOP QWORD [R8+24]
!NOP QWORD [R8+32]
!NOP QWORD [R8+40]
!NOP QWORD [R8+48]
!NOP QWORD [R8+56]
!NOP QWORD [R8+64]
!NOP QWORD [R8+72]
!NOP QWORD [R8+80]
!NOP QWORD [R8+88]
!NOP QWORD [R8+96]
!NOP QWORD [R8+104]
!NOP QWORD [R8+112]
!NOP QWORD [R8+120]
!NOP QWORD [R8+128]
!NOP QWORD [R8+136]
!NOP QWORD [R8+144]
!NOP QWORD [R8+152]
!NOP QWORD [R8+160]
!NOP QWORD [R8+168]
!NOP QWORD [R8+176]
!NOP QWORD [R8+184]
!NOP QWORD [R8+192]
!NOP QWORD [R8+200]
!NOP QWORD [R8+208]
!NOP QWORD [R8+216]
!NOP QWORD [R8+224]
!NOP QWORD [R8+232]
!NOP QWORD [R8+240]
!NOP QWORD [R8+248]
!NOP QWORD [R8+256]
!NOP QWORD [R8+264]
!NOP QWORD [R8+272]
!NOP QWORD [R8+280]
!NOP QWORD [R8+288]
!NOP QWORD [R8+296]
!NOP QWORD [R8+304]
!NOP QWORD [R8+312]
!NOP QWORD [R8+320]
!NOP QWORD [R8+328]
!NOP QWORD [R8+336]
!NOP QWORD [R8+344]
!NOP QWORD [R8+352]
!NOP QWORD [R8+360]
!NOP QWORD [R8+368]
!NOP QWORD [R8+376]
!NOP QWORD [R8+384]
!NOP QWORD [R8+392]
!NOP QWORD [R8+400]
!NOP QWORD [R8+408]
!NOP QWORD [R8+416]
!NOP QWORD [R8+424]
!NOP QWORD [R8+432]
!NOP QWORD [R8+440]
!NOP QWORD [R8+448]
!NOP QWORD [R8+456]
!NOP QWORD [R8+464]
!NOP QWORD [R8+472]
!NOP QWORD [R8+480]
!NOP QWORD [R8+488]
!NOP QWORD [R8+496]
!NOP QWORD [R8+504]
!MOVQ QWORD [R8+512], mm5
!MOVQ QWORD [R8+520], mm5
!MOVQ QWORD [R8+528], mm5
!MOVQ QWORD [R8+536], mm5
!MOVQ QWORD [R8+544], mm5
!MOVQ QWORD [R8+552], mm5
!MOVQ QWORD [R8+560], mm5
!MOVQ QWORD [R8+568], mm5
!MOVQ QWORD [R8+576], mm5
!MOVQ QWORD [R8+584], mm5
!MOVQ QWORD [R8+592], mm5
!MOVQ QWORD [R8+600], mm5
!MOVQ QWORD [R8+608], mm5
!MOVQ QWORD [R8+616], mm5
!MOVQ QWORD [R8+624], mm5
!MOVQ QWORD [R8+632], mm5
!MOVQ QWORD [R8+640], mm5
!MOVQ QWORD [R8+648], mm5
!MOVQ QWORD [R8+656], mm5
!MOVQ QWORD [R8+664], mm5
!MOVQ QWORD [R8+672], mm5
!MOVQ QWORD [R8+680], mm5
!MOVQ QWORD [R8+688], mm5
!MOVQ QWORD [R8+696], mm5
!MOVQ QWORD [R8+704], mm5
!MOVQ QWORD [R8+712], mm5
!MOVQ QWORD [R8+720], mm5
!MOVQ QWORD [R8+728], mm5
!MOVQ QWORD [R8+736], mm5
!MOVQ QWORD [R8+744], mm5
!MOVQ QWORD [R8+752], mm5
!MOVQ QWORD [R8+760], mm5
!MOVQ QWORD [R8+768], mm5
!MOVQ QWORD [R8+776], mm5
!MOVQ QWORD [R8+784], mm5
!MOVQ QWORD [R8+792], mm5
!MOVQ QWORD [R8+800], mm5
!MOVQ QWORD [R8+808], mm5
!MOVQ QWORD [R8+816], mm5
!MOVQ QWORD [R8+824], mm5
!MOVQ QWORD [R8+832], mm5
!MOVQ QWORD [R8+840], mm5
!MOVQ QWORD [R8+848], mm5
!MOVQ QWORD [R8+856], mm5
!MOVQ QWORD [R8+864], mm5
!MOVQ QWORD [R8+872], mm5
!MOVQ QWORD [R8+880], mm5
!MOVQ QWORD [R8+888], mm5
!MOVQ QWORD [R8+896], mm5
!MOVQ QWORD [R8+904], mm5
!MOVQ QWORD [R8+912], mm5
!MOVQ QWORD [R8+920], mm5
!MOVQ QWORD [R8+928], mm5
!MOVQ QWORD [R8+936], mm5
!MOVQ QWORD [R8+944], mm5
!MOVQ QWORD [R8+952], mm5
!MOVQ QWORD [R8+960], mm5
!MOVQ QWORD [R8+968], mm5
!MOVQ QWORD [R8+976], mm5
!MOVQ QWORD [R8+984], mm5
!MOVQ QWORD [R8+992], mm5
!MOVQ QWORD [R8+1000], mm5
!MOVQ QWORD [R8+1008], mm5
!MOVQ QWORD [R8+1016], mm5
!EMMS
EndMacro

Macro FXCLEAR_512
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
;   !MOV R8, QWORD [p_FXSAVE]
!MOVQ QWORD [R8+0], mm5
!MOVQ QWORD [R8+8], mm5
!MOVQ QWORD [R8+16], mm5
!MOVQ QWORD [R8+24], mm5
!MOVQ QWORD [R8+32], mm5
!MOVQ QWORD [R8+40], mm5
!MOVQ QWORD [R8+48], mm5
!MOVQ QWORD [R8+56], mm5
!MOVQ QWORD [R8+64], mm5
!MOVQ QWORD [R8+72], mm5
!MOVQ QWORD [R8+80], mm5
!MOVQ QWORD [R8+88], mm5
!MOVQ QWORD [R8+96], mm5
!MOVQ QWORD [R8+104], mm5
!MOVQ QWORD [R8+112], mm5
!MOVQ QWORD [R8+120], mm5
!MOVQ QWORD [R8+128], mm5
!MOVQ QWORD [R8+136], mm5
!MOVQ QWORD [R8+144], mm5
!MOVQ QWORD [R8+152], mm5
!MOVQ QWORD [R8+160], mm5
!MOVQ QWORD [R8+168], mm5
!MOVQ QWORD [R8+176], mm5
!MOVQ QWORD [R8+184], mm5
!MOVQ QWORD [R8+192], mm5
!MOVQ QWORD [R8+200], mm5
!MOVQ QWORD [R8+208], mm5
!MOVQ QWORD [R8+216], mm5
!MOVQ QWORD [R8+224], mm5
!MOVQ QWORD [R8+232], mm5
!MOVQ QWORD [R8+240], mm5
!MOVQ QWORD [R8+248], mm5
!MOVQ QWORD [R8+256], mm5
!MOVQ QWORD [R8+264], mm5
!MOVQ QWORD [R8+272], mm5
!MOVQ QWORD [R8+280], mm5
!MOVQ QWORD [R8+288], mm5
!MOVQ QWORD [R8+296], mm5
!MOVQ QWORD [R8+304], mm5
!MOVQ QWORD [R8+312], mm5
!MOVQ QWORD [R8+320], mm5
!MOVQ QWORD [R8+328], mm5
!MOVQ QWORD [R8+336], mm5
!MOVQ QWORD [R8+344], mm5
!MOVQ QWORD [R8+352], mm5
!MOVQ QWORD [R8+360], mm5
!MOVQ QWORD [R8+368], mm5
!MOVQ QWORD [R8+376], mm5
!MOVQ QWORD [R8+384], mm5
!MOVQ QWORD [R8+392], mm5
!MOVQ QWORD [R8+400], mm5
!MOVQ QWORD [R8+408], mm5
!MOVQ QWORD [R8+416], mm5
!MOVQ QWORD [R8+424], mm5
!MOVQ QWORD [R8+432], mm5
!MOVQ QWORD [R8+440], mm5
!MOVQ QWORD [R8+448], mm5
!MOVQ QWORD [R8+456], mm5
!MOVQ QWORD [R8+464], mm5
!MOVQ QWORD [R8+472], mm5
!MOVQ QWORD [R8+480], mm5
!MOVQ QWORD [R8+488], mm5
!MOVQ QWORD [R8+496], mm5
!MOVQ QWORD [R8+504], mm5
!EMMS
EndMacro

Global *FXSAVE
BLSR_Rcx_x64
BLSR_Rdx_x64
BLSR_R8_x64
!INC R8b
!INC R8b
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!MOV R8b, R8b
!MOV R8w, R8w
!MOV R8, R8
!SHL R8, cl
!XCHG Rcx, R8
!INC dl
!MOVZX Rdx, dl
!CALL PB_AllocateMemory2
BLSR_Rcx_x64
BLSR_R8_x64
!INC R8b
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!INC cl
!SHL R8, cl
!MOV R8b, R8b
!MOV R8w, R8w
!MOV R8, R8
!MOV al, al
!MOV ah, ah
!MOV ax, ax
!MOV Rax, Rax
!ADD Rax, R8
!MOVNTI QWORD [p_FXSAVE], Rax
!NOP QWORD [p_FXSAVE]
ALL_MMX_CLEAR_SHIFTWORD_INC_CL
!MOV R8, QWORD [p_FXSAVE]
!MOVQ QWORD [R8-512], mm5
!MOVQ QWORD [R8-504], mm5
!MOVQ QWORD [R8-496], mm5
!MOVQ QWORD [R8-488], mm5
!MOVQ QWORD [R8-480], mm5
!MOVQ QWORD [R8-472], mm5
!MOVQ QWORD [R8-464], mm5
!MOVQ QWORD [R8-456], mm5
!MOVQ QWORD [R8-448], mm5
!MOVQ QWORD [R8-440], mm5
!MOVQ QWORD [R8-432], mm5
!MOVQ QWORD [R8-424], mm5
!MOVQ QWORD [R8-416], mm5
!MOVQ QWORD [R8-408], mm5
!MOVQ QWORD [R8-400], mm5
!MOVQ QWORD [R8-392], mm5
!MOVQ QWORD [R8-384], mm5
!MOVQ QWORD [R8-376], mm5
!MOVQ QWORD [R8-368], mm5
!MOVQ QWORD [R8-360], mm5
!MOVQ QWORD [R8-352], mm5
!MOVQ QWORD [R8-344], mm5
!MOVQ QWORD [R8-336], mm5
!MOVQ QWORD [R8-328], mm5
!MOVQ QWORD [R8-320], mm5
!MOVQ QWORD [R8-312], mm5
!MOVQ QWORD [R8-304], mm5
!MOVQ QWORD [R8-296], mm5
!MOVQ QWORD [R8-288], mm5
!MOVQ QWORD [R8-280], mm5
!MOVQ QWORD [R8-272], mm5
!MOVQ QWORD [R8-264], mm5
!MOVQ QWORD [R8-256], mm5
!MOVQ QWORD [R8-248], mm5
!MOVQ QWORD [R8-240], mm5
!MOVQ QWORD [R8-232], mm5
!MOVQ QWORD [R8-224], mm5
!MOVQ QWORD [R8-216], mm5
!MOVQ QWORD [R8-208], mm5
!MOVQ QWORD [R8-200], mm5
!MOVQ QWORD [R8-192], mm5
!MOVQ QWORD [R8-184], mm5
!MOVQ QWORD [R8-176], mm5
!MOVQ QWORD [R8-168], mm5
!MOVQ QWORD [R8-160], mm5
!MOVQ QWORD [R8-152], mm5
!MOVQ QWORD [R8-144], mm5
!MOVQ QWORD [R8-136], mm5
!MOVQ QWORD [R8-128], mm5
!MOVQ QWORD [R8-120], mm5
!MOVQ QWORD [R8-112], mm5
!MOVQ QWORD [R8-104], mm5
!MOVQ QWORD [R8-96], mm5
!MOVQ QWORD [R8-88], mm5
!MOVQ QWORD [R8-80], mm5
!MOVQ QWORD [R8-72], mm5
!MOVQ QWORD [R8-64], mm5
!MOVQ QWORD [R8-56], mm5
!MOVQ QWORD [R8-48], mm5
!MOVQ QWORD [R8-40], mm5
!MOVQ QWORD [R8-32], mm5
!MOVQ QWORD [R8-24], mm5
!MOVQ QWORD [R8-16], mm5
!MOVQ QWORD [R8-8], mm5
!MOVNTQ QWORD [R8+0], mm5
!MOVNTQ QWORD [R8+8], mm5
!MOVNTQ QWORD [R8+16], mm5
!MOVNTQ QWORD [R8+24], mm5
!MOVNTQ QWORD [R8+32], mm5
!MOVNTQ QWORD [R8+40], mm5
!MOVNTQ QWORD [R8+48], mm5
!MOVNTQ QWORD [R8+56], mm5
!MOVNTQ QWORD [R8+64], mm5
!MOVNTQ QWORD [R8+72], mm5
!MOVNTQ QWORD [R8+80], mm5
!MOVNTQ QWORD [R8+88], mm5
!MOVNTQ QWORD [R8+96], mm5
!MOVNTQ QWORD [R8+104], mm5
!MOVNTQ QWORD [R8+112], mm5
!MOVNTQ QWORD [R8+120], mm5
!MOVNTQ QWORD [R8+128], mm5
!MOVNTQ QWORD [R8+136], mm5
!MOVNTQ QWORD [R8+144], mm5
!MOVNTQ QWORD [R8+152], mm5
!MOVNTQ QWORD [R8+160], mm5
!MOVNTQ QWORD [R8+168], mm5
!MOVNTQ QWORD [R8+176], mm5
!MOVNTQ QWORD [R8+184], mm5
!MOVNTQ QWORD [R8+192], mm5
!MOVNTQ QWORD [R8+200], mm5
!MOVNTQ QWORD [R8+208], mm5
!MOVNTQ QWORD [R8+216], mm5
!MOVNTQ QWORD [R8+224], mm5
!MOVNTQ QWORD [R8+232], mm5
!MOVNTQ QWORD [R8+240], mm5
!MOVNTQ QWORD [R8+248], mm5
!MOVNTQ QWORD [R8+256], mm5
!MOVNTQ QWORD [R8+264], mm5
!MOVNTQ QWORD [R8+272], mm5
!MOVNTQ QWORD [R8+280], mm5
!MOVNTQ QWORD [R8+288], mm5
!MOVNTQ QWORD [R8+296], mm5
!MOVNTQ QWORD [R8+304], mm5
!MOVNTQ QWORD [R8+312], mm5
!MOVNTQ QWORD [R8+320], mm5
!MOVNTQ QWORD [R8+328], mm5
!MOVNTQ QWORD [R8+336], mm5
!MOVNTQ QWORD [R8+344], mm5
!MOVNTQ QWORD [R8+352], mm5
!MOVNTQ QWORD [R8+360], mm5
!MOVNTQ QWORD [R8+368], mm5
!MOVNTQ QWORD [R8+376], mm5
!MOVNTQ QWORD [R8+384], mm5
!MOVNTQ QWORD [R8+392], mm5
!MOVNTQ QWORD [R8+400], mm5
!MOVNTQ QWORD [R8+408], mm5
!MOVNTQ QWORD [R8+416], mm5
!MOVNTQ QWORD [R8+424], mm5
!MOVNTQ QWORD [R8+432], mm5
!MOVNTQ QWORD [R8+440], mm5
!MOVNTQ QWORD [R8+448], mm5
!MOVNTQ QWORD [R8+456], mm5
!MOVNTQ QWORD [R8+464], mm5
!MOVNTQ QWORD [R8+472], mm5
!MOVNTQ QWORD [R8+480], mm5
!MOVNTQ QWORD [R8+488], mm5
!MOVNTQ QWORD [R8+496], mm5
!MOVNTQ QWORD [R8+504], mm5
!NOP QWORD [R8+0]
!NOP QWORD [R8+8]
!NOP QWORD [R8+16]
!NOP QWORD [R8+24]
!NOP QWORD [R8+32]
!NOP QWORD [R8+40]
!NOP QWORD [R8+48]
!NOP QWORD [R8+56]
!NOP QWORD [R8+64]
!NOP QWORD [R8+72]
!NOP QWORD [R8+80]
!NOP QWORD [R8+88]
!NOP QWORD [R8+96]
!NOP QWORD [R8+104]
!NOP QWORD [R8+112]
!NOP QWORD [R8+120]
!NOP QWORD [R8+128]
!NOP QWORD [R8+136]
!NOP QWORD [R8+144]
!NOP QWORD [R8+152]
!NOP QWORD [R8+160]
!NOP QWORD [R8+168]
!NOP QWORD [R8+176]
!NOP QWORD [R8+184]
!NOP QWORD [R8+192]
!NOP QWORD [R8+200]
!NOP QWORD [R8+208]
!NOP QWORD [R8+216]
!NOP QWORD [R8+224]
!NOP QWORD [R8+232]
!NOP QWORD [R8+240]
!NOP QWORD [R8+248]
!NOP QWORD [R8+256]
!NOP QWORD [R8+264]
!NOP QWORD [R8+272]
!NOP QWORD [R8+280]
!NOP QWORD [R8+288]
!NOP QWORD [R8+296]
!NOP QWORD [R8+304]
!NOP QWORD [R8+312]
!NOP QWORD [R8+320]
!NOP QWORD [R8+328]
!NOP QWORD [R8+336]
!NOP QWORD [R8+344]
!NOP QWORD [R8+352]
!NOP QWORD [R8+360]
!NOP QWORD [R8+368]
!NOP QWORD [R8+376]
!NOP QWORD [R8+384]
!NOP QWORD [R8+392]
!NOP QWORD [R8+400]
!NOP QWORD [R8+408]
!NOP QWORD [R8+416]
!NOP QWORD [R8+424]
!NOP QWORD [R8+432]
!NOP QWORD [R8+440]
!NOP QWORD [R8+448]
!NOP QWORD [R8+456]
!NOP QWORD [R8+464]
!NOP QWORD [R8+472]
!NOP QWORD [R8+480]
!NOP QWORD [R8+488]
!NOP QWORD [R8+496]
!NOP QWORD [R8+504]
!MOVQ QWORD [R8+512], mm5
!MOVQ QWORD [R8+520], mm5
!MOVQ QWORD [R8+528], mm5
!MOVQ QWORD [R8+536], mm5
!MOVQ QWORD [R8+544], mm5
!MOVQ QWORD [R8+552], mm5
!MOVQ QWORD [R8+560], mm5
!MOVQ QWORD [R8+568], mm5
!MOVQ QWORD [R8+576], mm5
!MOVQ QWORD [R8+584], mm5
!MOVQ QWORD [R8+592], mm5
!MOVQ QWORD [R8+600], mm5
!MOVQ QWORD [R8+608], mm5
!MOVQ QWORD [R8+616], mm5
!MOVQ QWORD [R8+624], mm5
!MOVQ QWORD [R8+632], mm5
!MOVQ QWORD [R8+640], mm5
!MOVQ QWORD [R8+648], mm5
!MOVQ QWORD [R8+656], mm5
!MOVQ QWORD [R8+664], mm5
!MOVQ QWORD [R8+672], mm5
!MOVQ QWORD [R8+680], mm5
!MOVQ QWORD [R8+688], mm5
!MOVQ QWORD [R8+696], mm5
!MOVQ QWORD [R8+704], mm5
!MOVQ QWORD [R8+712], mm5
!MOVQ QWORD [R8+720], mm5
!MOVQ QWORD [R8+728], mm5
!MOVQ QWORD [R8+736], mm5
!MOVQ QWORD [R8+744], mm5
!MOVQ QWORD [R8+752], mm5
!MOVQ QWORD [R8+760], mm5
!MOVQ QWORD [R8+768], mm5
!MOVQ QWORD [R8+776], mm5
!MOVQ QWORD [R8+784], mm5
!MOVQ QWORD [R8+792], mm5
!MOVQ QWORD [R8+800], mm5
!MOVQ QWORD [R8+808], mm5
!MOVQ QWORD [R8+816], mm5
!MOVQ QWORD [R8+824], mm5
!MOVQ QWORD [R8+832], mm5
!MOVQ QWORD [R8+840], mm5
!MOVQ QWORD [R8+848], mm5
!MOVQ QWORD [R8+856], mm5
!MOVQ QWORD [R8+864], mm5
!MOVQ QWORD [R8+872], mm5
!MOVQ QWORD [R8+880], mm5
!MOVQ QWORD [R8+888], mm5
!MOVQ QWORD [R8+896], mm5
!MOVQ QWORD [R8+904], mm5
!MOVQ QWORD [R8+912], mm5
!MOVQ QWORD [R8+920], mm5
!MOVQ QWORD [R8+928], mm5
!MOVQ QWORD [R8+936], mm5
!MOVQ QWORD [R8+944], mm5
!MOVQ QWORD [R8+952], mm5
!MOVQ QWORD [R8+960], mm5
!MOVQ QWORD [R8+968], mm5
!MOVQ QWORD [R8+976], mm5
!MOVQ QWORD [R8+984], mm5
!MOVQ QWORD [R8+992], mm5
!MOVQ QWORD [R8+1000], mm5
!MOVQ QWORD [R8+1008], mm5
!MOVQ QWORD [R8+1016], mm5
!EMMS
FXCACHE

Macro FXSAVE
;!MOV R8, QWORD [p_FXSAVE]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!FXSAVE64 [R8]
EndMacro

Macro FXRSTOR
;!MOV R8, QWORD [p_FXSAVE]
!NOP QWORD [Rip]
!NOP QWORD [Rip]
!FXRSTOR64 [R8]
EndMacro

MajiorityCamisole 175 solutions release.


2024-04-20
デジタル・ジッター抑制技術を理解する方法

デジタル・ジッターの問題は、Intel 8086 8MHz PC-9801VM2 FM音源ボード の頃は起きていなかった。その頃は、VRAM へ直接メモリアクセスして描画できたので、高速表示のゲームは作りやすかった。VRAM アクセスは DRAM の特定番地 を指定すると、N88BASICからでも表示できた。私は XANADU PC-9801 Startup で戦士が表示される処理は、RGB の分割描画によって実現できると BASIC プログラミングで確認していた。しかし、高速スプライト処理は極端に難しいテクニックに思えて、ロマンシアの64レイヤー表示技術について雑誌で解説されるまで理解できなかった。その他にディスクプロテクト技術の勉強を少し、これは SCREEN で ライセンスディスク が新品なのに使用不能という時、「SCREENの担当部署へ、マスターのライセンスディスクが傷ついていませんか? 新品のディスクでマスターを作り直してほしい」と伝えたら、「京都から、ありがとうございます」と感謝されました。しかし、これは今から解説する話を知ると、傷ついたという原因がジッターにあると分かります。

	ディスク領域長さ MOV CL, 12
	ディスク読み書き先頭:
	ディスク書き込み処理
	LOOP ディスク読み書き先頭

昔のループ処理は、これで良かった。いま、これを使用するとトラブルが起きやすい。CISC から RISC へ変更された時、下記のように内部で変更した可能性がありました。

	ディスク領域長さ MOV CL, 12
	ディスク読み書き先頭:
	ディスク書き込み処理
	DEC cl
	JNZ ディスク読み書き先頭

このように解釈したら、処理は同じになるけれど・・・、LOOP は DEC JNZ を同時に実行する「オーバークロック処理」へ変更されており、デジタル・ジッターが起きやすい。さらに JNZ を命令発行する毎に、ディスク書き込み処理を「マイクロOPコード変換」する「オーバークロック処理」が行われて、動作異常のトラブルになりやすい。

ライセンスディスクの想定された問題:CPUの消費電力が急激に増えて、ディスク駆動装置のインターフェース回路の供給電力が急激に下がれば、ディスクのフォーマットは破損します。

	ディスク領域長さ MOV CL, 12
	ディスク読み書き先頭:
	オーバークロック処理「ディスク書き込み処理 DEC cl JNZ」
	JNZ ディスク読み書き先頭

このオーバークロック処理について、NOP FNOP を使用する遅延命令によって、そのクロック分だけ消費電力を抑制できる。NOP レジスタ は電力制御しない命令へ変更されているので、XCHG レジスタ により、電力制御する何らかの命令が必要になる。NOP メモリ であれば FNOP と同様に使用できる。それで今は、下記の手法であれば、デジタルジッターを抑制できると判明している。

	ディスク領域長さ MOV CL, 12
	NOP QWORD [Rip]
	NOP QWORD [Rip]
	ディスク読み書き先頭:
	NOP QWORD [Rip] or FNOP
	NOP QWORD [Rip] or FNOP
	ディスク書き込み処理
	DEC cl
	NOP QWORD [Rip] or FNOP
	NOP QWORD [Rip] or FNOP
	NOP QWORD [Rip] or FNOP
	NOP QWORD [Rip] or FNOP
	JNZ QWORD ディスク読み書き先頭
	NOP QWORD [Rip] or FNOP
	NOP QWORD [Rip] or FNOP
	XCHG cl, cl

このように確かめていくと、ジャンプ系命令 JMP JNZ CALL を使用する時は、実質の実行行数が少ないなら、ループ処理を展開して実行したほうが低ジッターにできます。

	ディスク書き込み処理 [R8]
	ディスク書き込み処理 [R8+8]
	ディスク書き込み処理 [R8+16]
	ディスク書き込み処理 [R8+24]
	ディスク書き込み処理 [R8+32]
	ディスク書き込み処理 [R8+40]
	ディスク書き込み処理 [R8+48]
	ディスク書き込み処理 [R8+56]
	ディスク書き込み処理 [R8+64]
	ディスク書き込み処理 [R8+72]
	ディスク書き込み処理 [R8+80]
	ディスク書き込み処理 [R8+88]

高速処理になり、信頼性は良くなる。そして、超低ジッター処理となる。


2024-04-22
起動調整 R4 = MOV Reg64, QWORD [Rip]

最初の起動時、起動した RAM の影響をレジスターへ調整する処理を入れて、電子ビット基準をもっと安定化させたい意図で作りました。後々の編集作業は大変ですので、ビルドプログラム側の調整としました。2回処理することで、プログラムがロードされた RAM の影響を強くしました。

Macro BeforeProcedureRegisters_RIP64_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  MOV "+Reg64A()+", QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64A()+", "+Reg64A()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64A()+", "+Reg64A()+", "+Reg64A()
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip+16]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  MOV "+Reg64B()+", QWORD [Rip]"
    AddElement(Buffer()) : Buffer() = "  NOP QWORD [Rip-36]"
    For Loop=1 To 64
      AddElement(Buffer()) : Buffer() = "  BLSR "+Reg64B()+", "+Reg64B()
    Next
    AddElement(Buffer()) : Buffer() = "  BZHI "+Reg64B()+", "+Reg64B()+", "+Reg64B()
  Next
  BeforeProcedureRegisters_3rd
EndMacro

Macro MajiorityBuild_Tunes_2
  ForEach Buffer()
    If FindString(Buffer(), "PureBasicStart:")
      BeforeProcedureRegisters_RIP64_BLSR
      BeforeProcedureRegisters_RIP64_BLSR
      ; 1
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 2
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 3
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ;
      
      Break
    EndIf
  Next
EndMacro

MajiorityCamisole179R4solutions Release.


2024-04-28
MOV から MOVBE へ、セキュリティ都合の変更調整

MOV を電子ビット基準の適用に使用していると誤認されやすい都合から、代わりに MOVBE というレジスタのビット位置を移動する命令へ変更しました。この比較として MC175 vs MC195 の確認ができるように、MC175 MC174 を作り直しています。他は MC175 公開時のままです。

MOVBE—Move Data After Swapping Bytes
MOVBE r64, m64 ; Reverse byte order in m64 and move to r64.

Macro BeforeProcedureRegisters_MOVBE_BLSR
  BeforeProcedureRegisters_1st
  ForEach Reg64A()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !MOVBE "+Reg64A()+", QWORD [Rip]"
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64A()+"_x64"
  Next
  BeforeProcedureRegisters_2nd
  ForEach Reg64B()
    Debug "  !NOP QWORD [Rip+16]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !NOP QWORD [Rip]"
    Debug "  !MOVBE "+Reg64B()+", QWORD [Rip]"
    Debug "  !NOP QWORD [Rip-36]"
    Debug "  BLSR_"+Reg64B()+"_x64"
  Next
  BeforeProcedureRegisters_3rd
EndMacro

BeforeProcedureRegisters_MOVBE_BLSR
BeforeProcedureRegisters_CRC32_BLSR
BeforeProcedureRegisters_RDSEED_BLSR

Macro MajiorityBuild_Tunes_2 
  ForEach Buffer()
    If FindString(Buffer(), "PureBasicStart:")
      BeforeProcedureRegisters_MOVBE_BLSR
      BeforeProcedureRegisters_MOVBE_BLSR
      ; 1
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 2
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 3
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ;
      
      Break
    EndIf
  Next
EndMacro

MajiorityCamisole195solutions Release.


2024-05-01
CALL _Procedure ジャンプ先の先頭で MOV Reg8 Reg16 Up

MC195 rev2 rev3 はビルド時の RandomizeList により、レジスタ記述の順番が変化しているだけの差になります。それでも音質影響が出ているというなら、各レジスタは「微妙な電位差を生じて、ジッターを生じる原因を持つ」と考えていいと思う。自動車の人工知能システムは研究していると思うけれど、こうしたCPUの特性を把握しておかないと、イレギュラーの事故は発生し得る。セキュリティテスターは「電子工学」「電気工学」「無線工学」「高周波設計」を修士課程クラスで理解しているとは思えず、こうした想定で考えようとしても「スキル不足」「知識不足」によって、不審なソースコードに見えるだろう。しかし、この問題とは「把握していない、想定していない、後継者」の誕生が世界の最悪を招くので、引き継ぎにおいては確実に継承しておかなくてはならない「責任と義務」にあたると思う。

Intel CPU で起きやすい問題は、4ビットCPUとして設計した時期、8ビットCPUとして設計した時期、16ビットCPUとして設計した時期、この期間では「CISC Processor」として作っていた経緯から、電子ビット基準は「64ビットCPUとしてRISC設計」よりも不安定になりやすい。それで「オーバークロック状態で物理レジスタ更新」が行われる前に、「CISC Processor」のレジスタだけを物理レジスタ更新します。それで左右の音量差が起きていたトラブルを解決しています。

Macro SIMPLE_A16_MOVE_REGISTERS_Up_and_Down
  RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())
  ForEach Reg64A()
    AddElement(Buffer()) : Buffer() =  "  MOV "+Reg8(Reg64A())+", "+Reg8(Reg64A())
    If Len(Reg8(Reg64A()))=2
      AddElement(Buffer()) : Buffer() = "  MOV "+ReplaceString(Reg8(Reg64A()), "l", "h")+", "+ReplaceString(Reg8(Reg64A()), "l", "h")
    EndIf
    AddElement(Buffer()) : Buffer() = "  MOV "+Reg16(Reg64A())+", "+Reg16(Reg64A())
  Next
EndMacro

Macro SIMPLE_B16_MOVE_REGISTERS_Up_and_Down
  RandomizeList(Reg64()) : RandomizeList(Reg64A()) : RandomizeList(Reg64B())
  ForEach Reg64B()
    AddElement(Buffer()) : Buffer() =  "  MOV "+Reg8(Reg64B())+", "+Reg8(Reg64B())
    If Len(Reg8(Reg64B()))=2
      AddElement(Buffer()) : Buffer() = "  MOV "+ReplaceString(Reg8(Reg64B()), "l", "h")+", "+ReplaceString(Reg8(Reg64B()), "l", "h")
    EndIf
    AddElement(Buffer()) : Buffer() = "  MOV "+Reg16(Reg64B())+", "+Reg16(Reg64B())
  Next
EndMacro

Macro MajiorityBuild_Tunes_10
  ForEach Buffer()
    If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
      SIMPLE_A16_MOVE_REGISTERS_Up_and_Down
      SIMPLE_B16_MOVE_REGISTERS_Up_and_Down
    EndIf
  Next
EndMacro


MajiorityBuild_Tunes_10
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3

MajiorityCamisole195r3solutions Release.


2024-05-14
Abs(32ビット浮動小数点 ±1.0)<0.4 条件時、最下位ビット 強制 0

音の波形として小さな振幅になる条件で「15ビット出力」へ制限して、最下位ビットを未使用にすることで、大きな振幅の時だけ「16ビット出力」になる手法です。この方法は「思考加速システムより提供」され、自分で考えた方法になるのか、自信はありません。Elementary では音の分離感が良くなったので、大きな振幅になる時に瞬間的に高能率で駆動しているかもしれません。

Procedure ChannelLowerCut(*inbuf, length.i)
  Macro_ChannelLowerCut
  Protected CLC_pos.i, CLC_data.f
  For CLC_pos=D0 To length Step 4
    CLC_data = PeekF(*inbuf+CLC_pos)
    If Abs(CLC_data) < F_0_4_d
      !MOV R8d, dword [p.v_CLC_data]
      !AND R8d, dword [p.v_H_FFFE0000]
      !MOV dword [p.v_CLC_data], R8d
      PokeF(*inbuf+CLC_pos,  CLC_data )
    EndIf
  Next
EndProcedure

Sinc_16(*FileBuffer, *OutBuffer, D0, Length+in_buf_size*D2)
ChannelLowerCut(*OutBuffer+in_buf_size, Length)

ChannelLowerCut(*in, pdiv)
CopyMemoryMace(RN, pdiv, *in, *out_2)

Cruse CD-RW music release
必要なソフトウェア:"C:\Program Files (x86)\BurnAware Free\AudioCD.exe"

Panasonic SC-PM270-S 19,800- のミニコンポを使用して、CD-RW により CD-DA 再生すると「高級CDプレイヤー」に迫る音質にできる変換ソフトになります。音波の8分割によって、CD-DA 44100Hz のサンプリング周波数は「5512.5Hz」になり、周波数帯域としては「11Hzから2756.25Hz、8重化により22050Hz」を実現する。さらに帯域圧縮をデコード時に処理しているので、「8重化により11025Hz」より高い周波数帯域に音はない。小さい音量でも聞こえやすい音波を作るので、難聴になりやすい条件は避けられると思う。

低域通過フィルター処理を下記のソースコードを見て、仮数100ビット処理による高精度演算によって搭載しました。下記のままでは円周率の演算精度が悪く、遮断周波数より高音域へ雑音成分が作られる問題を抱えており、歪みが現れやすい。

Procedure lowpass(*input, *output, size.i, samplerate.d, cutfreq.d, qwidth.d)
  ; samplerate = 44100
  ; cutfreq = 11025
  ; qwidth = SQR(0.5)
  Protected omega.d, alpha.d, a0.d, a1.d, a2.d, b0.d, b1.d, b2.d,in1.d, in2.d, out1.d, out2.d, pos.i
  Protected in3.d, in4.d, out3.d, out4.d
  omega = 2.0 * #PI * cutfreq / samplerate
  alpha = Sin(omega) / (2.0 * qwidth)
  
  a0 = 1.0 + alpha
  a1 = -2.0 * Cos(omega)
  a2 = 1.0 - alpha
  b0 = (1.0 - Cos(omega)) / 2.0
  b1 = 1.0 - Cos(omega)
  b2 = (1.0 - Cos(omega)) / 2.0
  
  in1 = 0.0
  in2 = 0.0
  in3 = 0.0
  in4 = 0.0
  out1 = 0.0
  out2 = 0.0
  out3 = 0.0
  out4 = 0.0
  
  For pos=0 To size-1 Step 8
   
    PokeF(*output+pos, b0/a0 * PeekF(*input+pos)+b1/a0*in1 + b2/a0*in2 - a1/a0*out1 - a2/a0*out2)
    Swap in1, in2
    in1 = PeekF(*input+pos)
    Swap out1, out2
    out1 = PeekF(*output+pos)
    
    PokeF(*output+pos+4, b0/a0 * PeekF(*input+pos+4)+b1/a0*in1 + b2/a0*in2 - a1/a0*out1 - a2/a0*out2)
    Swap in3, in4
    in3 = PeekF(*input+pos+4)
    Swap out3, out4
    out3 = PeekF(*output+pos+4)
    
  Next
EndProcedure

南條愛乃の歌声が歪んだ瞬間に、地獄に落ちた感覚でした。その後、円周率の精度を上げたら、まったく歪まない状態になりました。


2024-05-18
ffmepg lowpass より音質が良い理由の説明
ffmpeg\libavutil\mathematics.h 66: #ifndef M_PI
ffmpeg\libavutil\mathematics.h 67: #define M_PI           3.14159265358979323846  /* pi */

PureBasic では 上記処理を実行すると、倍精度の仮数へ精度抑制が起きて、演算エラーになる。
3.141592653 589793 238462 643383

StrD(Freq_d1, 35)
3.14159265300000000000000000000000000
StrD(Freq_d2, 35)
0.00000000058979300000000012000000000
StrD(Freq_d3, 35)
0.00000000000000023846200000000002000
StrD(Freq_d4, 35)
0.00000000000000000000064338300000000

StrD(Freq_d1+Freq_d2, 35)
3.14159265358979310000000000000000000
StrD(Freq_d2+Freq_d3, 35)
0.00000000058979323846200008000000000
StrD(Freq_d3+Freq_d4, 35)
0.00000000000000023846264338300002000

Macro SincCalc_A
  (Freq_d1 * I + k * Freq_d2 / kfreq + Freq_d2 * I + k * Freq_d1 / kfreq ) + (Freq_d3 * I + k * Freq_d4 / kfreq + Freq_d4 * I + k * Freq_d3 / kfreq )
EndMacro

Macro SincCalc_B
  (Freq_d2 * k / kfreq + I * Freq_d1 + Freq_d1 * k / kfreq + I * Freq_d2) + (Freq_d4 * k / kfreq + I * Freq_d3 + Freq_d3 * k / kfreq + I * Freq_d4)
EndMacro

For sample = -8 to sample
  PokeD(*Sinctables+8*sample, Sin(SincCalc_A)/SincCalc_B)
Next

ffmepg を設計したパソコンは「M_PI」の定義から「浮動小数点 20桁」を前提として計算しています。倍精度の演算であれば「仮数 53ビット」から演算エラーになるのは避けられない。20桁では「20 x 4 bits = 80ビット」でなければならない。FPU 処理だけで書いていれば、FPU 80ビット で精度は出ており問題ない。ffmpeg のように複雑な処理であれば、倍精度の変数を用いる度に「53 / 4 bits = 13.25桁」へ精度劣化を生じる。

Cruse CD-RW music では、倍精度の変数を用いて精度保証できる桁数は 12桁 と考えて、どこまでの精度を出せるのか、検証している。ffmpeg の問題点は、下記の定義を適用しているのと同じになることで、音波であれば歪みやすい原因です。確実に精度保証する必要から、円周率の桁数を「6桁」定義として、演算テーブル作成時に「4倍精度の演算」を実施しているけれど、理論上では「2倍精度の演算」であるので、権利問題のクレームは発生していない。浮動小数点の桁数は「27桁」になっており、仮数108ビット処理になります。

ffmpeg\libavutil\mathematics.h 66: #ifndef M_PI
ffmpeg\libavutil\mathematics.h 67: #define M_PI           3.141592653589793xxxxx  /* pi */

小数点の終わりは「89793」、ヤクなくザ、と縁起が悪い。この精度問題は ffmpeg だけでなく、mathematics.h を用いているプログラムへ影響する。

ffmpeg\doc\examples\filter_audio.c 261:
data[j] = sin(2 * M_PI * (frame_num + j) * (i + 1) / FRAME_SIZE);

#define M_PI_S1	3.141592653	/* pi */
#define M_PI_S2	0.000000000589793	/* pi */
#define M_PI_S3	0.000000000000000238462	/* pi */
#define M_PI_S4	0.000000000000000000000643383	/* pi */
data[j] = sin(2 * M_PI_S1 * (frame_num + j) * (i + 1) / FRAME_SIZE) +  sin(2 * M_PI_S2 * (frame_num + j) * (i + 1) / FRAME_SIZE) + sin(2 * M_PI_S3 * (frame_num + j) * (i + 1) / FRAME_SIZE) +  sin(2 * M_PI_S4 * (frame_num + j) * (i + 1) / FRAME_SIZE)

このように記述すれば、演算エラーとならずに、歪みは聞こえない。

; 3.141592653 589793 238462 643383

Macro omega
  F_2_0_d * Freq_d1 * D11025 / samplerate + F_2_0_d * Freq_d2 * D11025 / samplerate + F_2_0_d * Freq_d3 * D11025 / samplerate + F_2_0_d * Freq_d4 * D11025 / samplerate
EndMacro

Macro alpha
  Sin(F_2_0_d * Freq_d1 * D11025 / samplerate + F_2_0_d * Freq_d2 * D11025 / samplerate + F_2_0_d * Freq_d3 * D11025 / samplerate + F_2_0_d * Freq_d4 * D11025 / samplerate) / (F_2_0_d * Log10(D8))
EndMacro

For pos=D0 To size-D1 Step 8
  in1pre = PeekF(*output+pos)
  PokeF(*output+pos, ((F_1_0_d - Cos(omega)) / F_2_0_d)/(F_1_0_d + alpha) * PeekF(*output+pos)+(F_1_0_d - Cos(omega))/(F_1_0_d + alpha)*in1 + ((F_1_0_d - Cos(omega)) / F_2_0_d)/(F_1_0_d + alpha)*in2 - (-F_2_0_d * Cos(omega))/(F_1_0_d + alpha)*out1 - (F_1_0_d - alpha)/(F_1_0_d + alpha)*out2)
  Swap in1, in2
  in1 = in1pre
  Swap out1, out2
  out1 = PeekF(*output+pos)
  
  in3pre = PeekF(*output+pos+D4)
  PokeF(*output+pos+D4, ((F_1_0_d - Cos(omega)) / F_2_0_d)/(F_1_0_d + alpha) * PeekF(*output+pos+D4)+(F_1_0_d - Cos(omega))/(F_1_0_d + alpha)*in3 + ((F_1_0_d - Cos(omega)) / F_2_0_d)/(F_1_0_d + alpha)*in4 - ( -F_2_0_d * Cos(omega))/(F_1_0_d + alpha)*out3 - (F_1_0_d - alpha)/(F_1_0_d + alpha)*out4)
  Swap in3, in4
  in3 = in3pre
  Swap out3, out4
  out3 = PeekF(*output+pos+D4)
Next

2024-05-18
WaitWindowEvent() の後に CPU キャッシュの再指定

以下のうち、NOP [Rip] x2行 を不要と考えるかもしれませんが、絶対に必要です。
CPU 温度センサー表示確認、RESET ボタン を「実行後、2秒で押せ!」

Global NewList Buffer.s()
Global NewList InstructionName.s()
Global String_SetClipboardText.s

If ReadFile(2, "PureBasic.asm")
  While Eof(2)=0
    AddElement(Buffer())
    Buffer() = ReadString(2)
  Wend
  CloseFile(2)
EndIf

ClearList(InstructionName())
ForEach Buffer()
  If FindString(Buffer(), "extrn ")
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), "extrn ")
  EndIf
  If ListSize(InstructionName())>1
    If Left(Buffer(), 1)=";"
      Break
    EndIf
  EndIf
Next
ForEach Buffer()
  If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
    AddElement(InstructionName())
    InstructionName() = RemoveString(Buffer(), ":")
  EndIf
Next  

ClearList(Buffer())
AddElement(Buffer()) : Buffer() = "Macro AfterWaitWindowEvent"
ForEach InstructionName()
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"]"
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"+8]"
  AddElement(Buffer()) : Buffer() = " !NOP QWORD ["+InstructionName()+"+16]"
Next
AddElement(Buffer()) : Buffer() = " !NOP QWORD [Rip]"
AddElement(Buffer()) : Buffer() = " !NOP QWORD [Rip]"
AddElement(Buffer()) : Buffer() = "EndMacro"

ForEach Buffer()
  String_SetClipboardText + Buffer() + Chr(13) + Chr(10)
Next

SetClipboardText(String_SetClipboardText)

End

Macro MajiorityBuild_Tunes_2
  ForEach Buffer()
    If FindString(Buffer(), "PureBasicStart:")
      BeforeProcedureRegisters_MOVBE_BLSR
      BeforeProcedureRegisters_MOVBE_BLSR
      ; 1
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 2
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ; 3
      BeforeProcedureRegisters_CRC32_BLSR
      BeforeProcedureRegisters_RDSEED_BLSR
      ;
      ForEach InstructionName()
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+8]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+16]"
      Next
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"    
      Break
    EndIf
  Next
EndMacro

Macro MajiorityBuild_Tunes_12
  ClearList(InstructionName())
  ForEach Buffer()
    If FindString(Buffer(), "extrn ")
      AddElement(InstructionName())
      InstructionName() = RemoveString(Buffer(), "extrn ")
    EndIf
    If ListSize(InstructionName())>1
      If Left(Buffer(), 1)=";"
        Break
      EndIf
    EndIf
  Next
  ForEach Buffer()
    If Left(Buffer(), 10) = "_Procedure" And Right(Buffer(), 1)=":"
      AddElement(InstructionName())
      InstructionName() = RemoveString(Buffer(), ":")
    EndIf
  Next  
EndMacro

Macro MajiorityBuild_Tunes_13
  ForEach Buffer()
    If Left(Buffer(), 6) = "  CALL" And (Right(Buffer(), 18)="PB_WaitWindowEvent" Or Right(Buffer(), 19)="PB_WaitWindowEvent2")
      Debug "MajiorityBuild_Tunes_13"
      ForEach InstructionName()
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+8]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+16]"
      Next
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    EndIf
  Next
EndMacro

Macro MajiorityBuild_Tunes_14
  ForEach Buffer()
    If Left(Buffer(), 16) = "StartStabilizer:"
      Debug "MajiorityBuild_Tunes_14"
      ForEach InstructionName()
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+8]"
        AddElement(Buffer()) : Buffer() = "NOP QWORD ["+InstructionName()+"+16]"
      Next
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
      AddElement(Buffer()) : Buffer() = "NOP QWORD [Rip]"
    EndIf
  Next
EndMacro  

; _Tunes_Open
MajiorityBuild_Removed_SMSW
MajiorityBuild_Tunes_12
MajiorityBuild_Tunes_10
MajiorityBuild_Tunes_1
MajiorityBuild_Tunes_2
MajiorityBuild_Tunes_3
MajiorityBuild_Tunes_4
MajiorityBuild_Tunes_5
MajiorityBuild_Tunes_6
MajiorityBuild_Tunes_7
MajiorityBuild_Tunes_8
MajiorityBuild_Tunes_9
MajiorityBuild_Tunes_11
MajiorityBuild_Tunes_14
MajiorityBuild_Removed_SMSW
; MajiorityBuild_Tunes_Write

MajiorityBuild_Tunes_13 について、PureBasic forum Trick and Tips へ投稿しました。


2024-01-24
MajiorityCamisole ES112 User's review

使用感想、ありがとうございます。
横田宏幸様

いつもお世話になっております。

ES112の方、きかせていただいています。

解像度や音のキレの良さはもちろんのこと、音のバランス・立体感・生々しさが素晴らしいことが特筆できます。

このところの一連のヴァージョンの中でも、特に優れているのではないでしょうか。

微妙に「電子ビット基準」の揺れを「16秒ごとに再実行」するタイミングで発生させていますが、揺れない条件にすると、音楽のデコード処理によってはレジスタの衝撃波動を抑制できない状態になり、それをデジタル出力までに補正できない様です。その微妙に揺れる条件を作る技術は難しいと思います。この揺れを止めようとすると USB-DAC 側の補正機能が働かない状態になりやすい。公園のブランコでは揺れているから肌にかかる風圧をコントロールできますが、揺れていない条件では周囲の風圧をコントロールできないので違和感に変わります。デジタル回路は「アナログ回路の電圧しきい値によって定まる論理回路」であるという想定を考えると、揺れている状態になっていなければ補正する機能性を持たせても、エネルギー不足により機能しない。

中部大学の電子工学科「三上修教授による電気計測、あえて単位取得を不可として、4回履修」したことで、エネルギーの流れを電子回路のなかでイメージできる様になりました。三上修教授は「京都大学の教授をしていた頃、コンデンサーは左右に端子があるけれど、それが直角であれば何が起きるか?という問題を定期試験で出していた」や、「色は3原色で決まるというけれど、他人に色の定義を伝えるというのは何を根拠に言えばいい?フェラーリの赤色といっても紙や鉄と素材によって見え方は変化する。それを常に考えていなければ、この電気計測を受講する意味がない」、このように言われて、大学生では役に立たなかったけれど、この音楽再生ソフトの研究開発では強く役立っています。数年前、教授は航空自衛隊の浜松基地で駐車場の交通整理をしていましたが、尊敬できる先生です。

中部大学の電子工学科では、指紋認証技術の梅崎教授の研究室をたまに訪れて、研究開発に対する厳しい姿勢を大学院生や竹内君から聞いて、中途半端な結果を求めてはならないと考えてきました。愛知教育大学の教授であった森山さんや稲田さんへ子供の頃に遊びに行っていたので、プライベートゾーンがどういう状態になると成果が出るのか分かります。現役の教授では、稲田敦子さんが小学生頃に親しくしてくれて、「本の山を片付けたい、しかし片付ける余裕がない」と言っており、カオスな状態ほど成果は出やすい。開発環境の部屋にはスピーカーを設置していますが、リファレンスとして機能しているのは、不要残響音を「カオスな状態」で消滅させているから?でしょうか。スピーカーの方向には「衣類が無造作に積まれている」状態によって、「不審な残響音が効率よく消滅している」という根拠が考えられます。


2024-03-20
MajiorityCamisole 153 User's reviews

ありがとうございます。
横田宏幸様

いつもお世話になっております。

MC153の方、きかせていただいています。

音のバランスの良さと、響き(特に倍音)の美しさが、とても印象的です。

今までに全く無かった、ソフトでふわっとした音質だとおもいます。ただ、音源によっては、音に力強さや硬度、低音域の充実がほしいようにも感じられます。

慣れてきますと物足りなくなる。裏からの情報によりますと、「IS 制作環境よりも音の良いパソコンがあったので、まだ良くなると思います」と伝えられており、次の 154 155 の改善を試みています。154 は 152 と同様に、不安定にさせたバージョンになります。しかし、JPLAY forum では 117 の復活を望まれており、ここからの改善を模索したほうが良いかもしれません。


ONLINE SPECIAL MANUAL

Art photo print "Lサイズを印刷したい"

Q:こだわりの写真印刷ですが、「ふちなし」で印刷する方法が分からない。

  1. MajiorityCleanES を起動している状態にする
  2. Lサイズの写真用紙を「縦方向」にセットする

  3. "ArtPhotoPrefs.txt" を編集する
  4. ; Default print
    zoomFlg = 0
    P_F = 0
    Paper_name = ""
    zoom3 = 0.73
    P_W = 0
    P_H = 0
    P_E = 0
    P_WE = 0
    PS_1 = 0
    PS_2 = 0
    PS_3 = 0
    Pro_AutoAdjust = 1.0
    Pro_AutoAdjust_str = "0"

  5. 「用紙方向」は「横」にする。
  6. 「用紙サイズ」は「写真用紙 L」「ふちなしカスタム設定(原寸維持)」にする。
  7. 「印刷品質」は「PX-S730 標準」「PX-5V きれい」にする。
  8. 「色補正」は「PX-S730 ICM」「PX-5V EPSON基準色(sRGB)」にする。
  9. 枚数を決めて、印刷

  10. EPSON 写真用紙 光沢 KL100PSKR Lサイズ
    EPSON 写真用紙 絹目調 KL100MSHRM Lサイズ / KH50MSHR はがきサイズ
    こちらの用紙に対応しています。PX-S730 は「顔料 フォトブラック」ですので「はがき非対応」、宛名面は「薄い黒」になります。他のプリンターで宛名印刷すると「顔料 マットブラック」にできます。PX-S730 単体では「先に宛名面を印刷してから、通信面を印刷すると良好」です。

INFORMATION

過去のマニュアルを抜粋して紹介中

どういうもの?




ページのトップへ戻る