問題タブ [mmx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 2 つの 64 ビット整数に対して MMX mulH と mulL を使用して 1 つの 128 ビット整数を取得する方法
こんにちは、私はさらに別の任意精度整数ライブラリに取り組んでいます。乗算を実装したかったのですが、機能しなかったとき_m_pmulhw
に行き詰まりました。MMX 命令に関するドキュメント<mmintrin.h>
はほとんどありません。私がテストすると、2 つの UINT64_MAX を乗算すると意味不明になります。
A6-4400M APU を使用しているのに、なぜ機能しないのかわかりません...
coreinfo の出力:MMX * Supports MMX instruction set
したがって、サポートされていないわけではないと言えると思います。誰かがこれを機能させる方法についてのヒントを教えてくれたら、ありがとう。
コンパイラ: gcc
IDE: ビジュアル スタジオ コード
visual-c++ - _mm_cvtpd_pi32 のような MMX 組み込み関数は、64 ビット ターゲットの MSVC 2019 では見つかりません。2013年から変わった?
現在、VS2013 から VS2019 への大規模なコードベースの更新に取り組んでいます。私が遭遇したコンパイラエラーの1つは次のとおりです。
組み込み関数.h(348): エラー C3861: '_mm_cvtpd_pi32': 識別子が見つかりません
この組み込み関数は、Visual Studio の「emmintrin.h」で定義されています。このエラーは、64 ビット ビルドをターゲットにしている場合にのみ発生します。詳しく調べてみると、2013 年から 2019 年の間に emmintrin.h の定義が次のように変更されていることがわかります。
これに:
つまり、プリプロセッサ ディレクティブにより、関数が 32 ビット ターゲットでのみ使用できるようになりました。エラーの発生元であるサードパーティのヘッダー ファイルは、ターゲット (64 ビットまたは 32 ビット) に関係なく、これらの関数を利用します。おそらく、このヘッダー ファイルを編集して、この関数が 32 ビット ターゲットに対してのみ呼び出されるようにするのが最善の方法です。しかし、私がもっと知りたいのは、なぜこれが 2013 年から 2019 年に変更されたのかということです。この関数の説明は次のとおりです。
https://software.intel.com/sites/landingpage/IntrinsicsGuide/#text=_mm_cvtpd_pi32&expand=1705
そもそも64ビットターゲットには適用されなかったのですか? それとも、検討する必要がある 64 ビット バージョンに置き換えられましたか?
arrays - NASM を使用して MMX 命令を使用して 2 つの配列を合計する際にスタックする
私は次の任務を与えられました。
NIZA RESW 16 と NIZB RESW 16
は、3 番目の配列 (NIZC RESW 16) に次の値を格納します: NIZC[i]=NIZA[i]+NIZB[i] MMX 命令を使用し、NASM でコンパイルします。
これは私がこれまでに得たものです:
指定された配列をコンパイルし、次の 2 つの配列でテストした後、3 番目の配列には 16 個の要素のうち 4 個の要素しか格納されません (次の図を参照)。
16要素のうち4要素しか保存しない理由を誰か知っていますか? どんな助けでも大歓迎です。
関数について質問がある場合print_string
print_int
print_nl
は、文字列、改行、および整数を EAX レジスタにプッシュして出力する関数であり、これが 32 ビット プログラムであることにも注意してください。