AVX重载运算类
计算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 += (__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 |
指令向量数据类型的引用。 |
不限 |
输入 |
输出结果
与入参同类型的指令向量数据。
- 重载运算类函数使用需单独包含头文件“operatoroverload.h”。
- 重载运算类函数的使用语言为C++,指令类函数的使用函数语言为C/C++。
示例
#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; }
运行结果:
dst: 7 16
父主题: 函数说明