计算AVX指令向量同数据类型间的加、减、乘、除以及自加、自减、自乘和自除的重载运算。
加法运算:
__m128i operator + (const __m128i &a, const __m128i &b);
__m256i operator + (const __m256i &a, const __m256i &b);
__m256 operator + (const __m256 &a, const __m256 &b);
__m256d operator + (const __m256d &a, const __m256d &b);
__m512i operator + (const __m512i &a, const __m512i &b);
__m512 operator + (const __m512 &a, const __m512 &b);
__m512d operator + (const __m512d &a, const __m512d &b);
减法运算:
__m128i operator - (const __m128i &a, const __m128i &b);
__m256i operator - (const __m256i &a, const __m256i &b);
__m256 operator - (const __m256 &a, const __m256 &b);
__m256d operator - (const __m256d &a, const __m256d &b);
__m512i operator - (const __m512i &a, const __m512i &b);
__m512 operator - (const __m512 &a, const __m512 &b);
__m512d operator - (const __m512d &a, const __m512d &b);
乘法运算:
__m128i operator * (const __m128i &a, const __m128i &b);
__m256i operator * (const __m256i &a, const __m256i &b);
__m256 operator * (const __m256 &a, const __m256 &b);
__m256d operator * (const __m256d &a, const __m256d &b);
__m512i operator * (const __m512i &a, const __m512i &b);
__m512 operator * (const __m512 &a, const __m512 &b);
__m512d operator * (const __m512d &a, const __m512d &b);
除法运算:
__m128i operator / (const __m128i &a, const __m128i &b);
__m256i operator / (const __m256i &a, const __m256i &b);
__m256 operator / (const __m256 &a, const __m256 &b);
__m256d operator / (const __m256d &a, const __m256d &b);
__m512i operator / (const __m512i &a, const __m512i &b);
__m512 operator / (const __m512 &a, const __m512 &b);
__m512d operator / (const __m512d &a, const __m512d &b);
与运算:
__m128i operator & (const __m128i &a, const __m128i &b);
__m256i operator & (const __m256i &a, const __m256i &b);
__m256 operator & (const __m256 &a, const __m256 &b);
__m256d operator & (const __m256d &a, const __m256d &b);
__m512i operator & (const __m512i &a, const __m512i &b);
__m512 operator & (const __m512 &a, const __m512 &b);
__m512d operator & (const __m512d &a, const __m512d &b);
或运算:
__m128i operator | (const __m128i &a, const __m128i &b);
__m256i operator | (const __m256i &a, const __m256i &b);
__m256 operator | (const __m256 &a, const __m256 &b);
__m256d operator | (const __m256d &a, const __m256d &b);
__m512i operator | (const __m512i &a, const __m512i &b);
__m512 operator | (const __m512 &a, const __m512 &b);
__m512d operator | (const __m512d &a, const __m512d &b);
异或运算:
__m128i operator ^ (const __m128i &a, const __m128i &b);
__m256i operator ^ (const __m256i &a, const __m256i &b);
__m256 operator ^ (const __m256 &a, const __m256 &b);
__m256d operator ^ (const __m256d &a, const __m256d &b);
__m512i operator ^ (const __m512i &a, const __m512i &b);
__m512 operator ^ (const __m512 &a, const __m512 &b);
__m512d operator ^ (const __m512d &a, const __m512d &b);
自加运算:
__m128i &operator += (__m128i &a, const __m128i &b);
__m256i &operator += (__m256i &a, const __m256i &b);
__m256 &operator += (__m256 &a, const __m256 &b);
__m256d &operator += (__m256d &a, const __m256d &b);
__m512i &operator += (__m512i &a, const __m512i &b);
__m512 &operator += (__m512 &a, const __m512 &b);
__m512d &operator += (__m512d &a, const __m512d &b);
自减运算:
__m128i &operator -= (__m128i &a, const __m128i &b);
__m256i &operator -= (__m256i &a, const __m256i &b);
__m256 &operator -= (__m256 &a, const __m256 &b);
__m256d &operator -= (__m256d &a, const __m256d &b);
__m512i &operator -= (__m512i &a, const __m512i &b);
__m512 &operator -= (__m512 &a, const __m512 &b);
__m512d &operator -= (__m512d &a, const __m512d &b);
自乘运算:
__m128i &operator *= (__m128i &a, const __m128i &b);
__m256i &operator *= (__m256i &a, const __m256i &b);
__m256 &operator *= (__m256 &a, const __m256 &b);
__m256d &operator *= (__m256d &a, const __m256d &b);
__m512i &operator *= (__m512i &a, const __m512i &b);
__m512 &operator *= (__m512 &a, const __m512 &b);
__m512d &operator *= (__m512d &a, const __m512d &b);
自除运算:
__m128i &operator /= (__m128i &a, const __m128i &b);
__m256i &operator /= (__m256i &a, const __m256i &b);
__m256 &operator /= (__m256 &a, const __m256 &b);
__m256d &operator /= (__m256d &a, const __m256d &b);
__m512i &operator /= (__m512i &a, const __m512i &b);
__m512 &operator /= (__m512 &a, const __m512 &b);
__m512d &operator /= (__m512d &a, const __m512d &b);
自与运算:
__m128i &operator &= (__m128i &a, const __m128i &b);
__m256i &operator &= (__m256i &a, const __m256i &b);
__m256 &operator &= (__m256 &a, const __m256 &b);
__m256d &operator &= (__m256d &a, const __m256d &b);
__m512i &operator &= (__m512i &a, const __m512i &b);
__m512 &operator &= (__m512 &a, const __m512 &b);
__m512d &operator &= (__m512d &a, const __m512d &b);
自或运算:
__m128i &operator |= (__m128i &a, const __m128i &b);
__m256i &operator |= (__m256i &a, const __m256i &b);
__m256 &operator |= (__m256 &a, const __m256 &b);
__m256d &operator |= (__m256d &a, const __m256d &b);
__m512i &operator |= (__m512i &a, const __m512i &b);
__m512 &operator |= (__m512 &a, const __m512 &b);
__m512d &operator |= (__m512d &a, const __m512d &b);
自异或运算:
__m128i &operator ^= (__m128i &a, const __m128i &b);
__m256i &operator ^= (__m256i &a, const __m256i &b);
__m256 &operator ^= (__m256 &a, const __m256 &b);
__m256d &operator ^= (__m256d &a, const __m256d &b);
__m512i &operator ^= (__m512i &a, const __m512i &b);
__m512 &operator ^= (__m512 &a, const __m512 &b);
__m512d &operator ^= (__m512d &a, const __m512d &b);
参数名 |
描述 |
取值范围 |
输入/输出 |
---|---|---|---|
a |
指令向量数据类型的引用。 |
不限 |
输入/输出 |
b |
指令向量数据类型的引用。 |
不限 |
输入 |
与入参同类型的指令向量数据。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #include <stdio.h> #include <stdlib.h> #include <stdint.h> #include "avx2ki.h" #include "operatoroverload.h" void OperatorExample() { int64_t a[2] = {-5, 13}; int64_t b[2] = {12, 3}; int64_t c[2] = {0}; __m128i t1 = _mm_load_epi64(a); __m128i t2 = _mm_load_epi64(b); __m128i dst = t1 + t2; _mm_store_epi64(c, dst); printf("dst: %ld %ld\n", c[0], c[1]); } int main(void) { OperatorExample(); return 0; } |
g++ testavx.cpp -o testavx -I/usr/local/ksl/include -L/usr/local/ksl/lib -lavx2ki
1 | dst: 7 16 |