_mm_insert_si64、_mm_inserti_si64
Microsoft 特定的
產生指令, insertq
以將第二個運算元中的位插入第一個運算元。
語法
__m128i _mm_insert_si64(
__m128i Source1,
__m128i Source2
);
__m128i _mm_inserti_si64(
__m128i Source1,
__m128i Source2
int Length,
int Index
);
參數
Source1
[in]128 位欄位,其輸入資料位於其較低的 64 位,其中會插入欄位。
Source2
[in]具有資料要插入其低位的 128 位欄位。 針對 _mm_insert_si64
,也會在其高位中包含欄位描述元。
長度
[in]整數常數,指定要插入的欄位長度。
Index
[in]整數常數,指定要插入資料之欄位之最小有效位的索引。
傳回值
128 位欄位,其較低的 64 位包含 Source1 的原始低 64 位 ,而指定的位欄位則由 Source2 的 低位取代。 傳回值的上層 64 位未定義。
需求
內建 | 架構 |
---|---|
_mm_insert_si64 |
SSE4a |
_mm_inserti_si64 |
SSE4a |
標頭檔 < intrin.h>
備註
這些內建函式會產生 insertq
指令,以將 Source2 中的位插入 Source1 。 有兩個版本: _mm_inserti_si64
、是立即版本,而且 _mm_insert_si64
是非立即版本。 每個版本都會從 Source2 擷取指定長度的位欄位,並將其插入 Source1。 擷取的位是 Source2 最小有效位。 要插入這些位的 Field1 欄位是由長度和其最小有效位的索引所定義。 長度和索引的值會採用 mod 64,因此 -1 和 127 都會解譯為 63。 如果 (縮減) 位索引和 (縮減) 欄位長度的總和大於 64,則結果為未定義。 欄位長度的零值會解譯為 64。 如果欄位長度和位索引都是零,則會將 Source2 的 63:0 位插入 Source1 。 如果欄位長度為零,但位索引為非零,則結果為未定義。
在呼叫 _mm_insert_si64 時,欄位長度會包含在 Source2 的位 77:72 和位 69:64 中的索引中。
如果您使用編譯器無法判斷為整數常數的引數進行呼叫 _mm_inserti_si64
,編譯器會產生程式碼,以將這些值封裝到 XMM 暫存器中,並呼叫 _mm_insert_si64
。
若要判斷指令的硬體支援 insertq
,請使用 呼叫 __cpuid
內建函式, InfoType=0x80000001
並檢查 的 CPUInfo[2] (ECX)
位 6。 如果支援指令,則此位為 1,否則為 0。 如果您在不支援 insertq
指令的硬體上執行使用內建函式的程式碼,則結果無法預測。
範例
// Compile this sample with: /EHsc
#include <iostream>
#include <intrin.h>
using namespace std;
union {
__m128i m;
unsigned __int64 ui64[2];
} source1, source2, source3, result1, result2, result3;
int
main()
{
__int64 mask;
source1.ui64[0] = 0xffffffffffffffffll;
source2.ui64[0] = 0xfedcba9876543210ll;
source2.ui64[1] = 0xc10;
source3.ui64[0] = source2.ui64[0];
result1.m = _mm_insert_si64 (source1.m, source2.m);
result2.m = _mm_inserti_si64(source1.m, source3.m, 16, 12);
mask = 0xffff << 12;
mask = ~mask;
result3.ui64[0] = (source1.ui64[0] & mask) |
((source2.ui64[0] & 0xffff) << 12);
cout << hex << "result1 = 0x" << result1.ui64[0] << endl;
cout << "result2 = 0x" << result2.ui64[0] << endl;
cout << "result3 = 0x" << result3.ui64[0] << endl;
}
result1 = 0xfffffffff3210fff
result2 = 0xfffffffff3210fff
result3 = 0xfffffffff3210fff
END Microsoft 特定的
部分著作權 2007 由 Advanced Micro Devices, Inc.保留擁有權利。 由 Advanced Micro Devices, Inc. 的許可權重現。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應