相关疑难解决方法(0)

128位到512位寄存器用于什么?

在查看x86/x64架构中的寄存器表之后,我注意到有128,256和512位寄存器的整个部分,我从未见过它们用于汇编或反编译的C/C++代码: XMM(0-15)表示128,YMM(0-15)表示256,ZMM(0-31)512.

做了一些挖后我所收集的是,你必须使用2个64位操作,以一个128位的数字进行的,而不是使用通用的数学,add,sub,mul,div操作.如果是这种情况,那么具有这些扩展寄存器集的用途究竟是什么,是否有任何汇编操作可以用来操作它们?

assembly sse x86-64 simd cpu-registers

7
推荐指数
1
解决办法
645
查看次数

_umul128 在 Windows 32 位上

在 Visual C++ 中,_umul128 在面向 Windows 32 位时未定义。面向 Win32 时如何将两个无符号 64 位整数相乘?该解决方案只需要在面向 Windows 32 位的 Visual C++ 2017 上运行。

x86 biginteger intrinsics visual-c++

5
推荐指数
1
解决办法
1173
查看次数

在 C++ 中进行基本 128 位整数计算的有效方法?

几年前,我需要一种方法来使用 Cuda 进行一些基本的 128 位整数数学运算: cuda 上的 128 位整数?. 现在我遇到了同样的问题,但这次我需要在不支持任何类型的 128 位的 32 位嵌入式系统(英特尔爱迪生)上运行一些基本的 128 位算术(求和、位移和乘法)。但是,有直接支持的 64 位整数(unsigned long long int)。

我天真地尝试使用上次在CPU上回答我的asm代码,但是我得到了一堆错误。我真的没有使用 asm 的经验,所以:使用 64 位整数实现 128 位加法、乘法和位移的最有效方法是什么?

c++ x86 assembly int128 intel-edison

4
推荐指数
2
解决办法
7656
查看次数

有256位整数类型吗?

操作系统:Linux(Debian 10)

CC:GCC 8.3

CPU:i7-5775C

在GCC中有一个unsigned __int128/ __int128,但是有什么办法在GCC中有一个uint256_t/ int256_t

我读过一篇__m256i似乎来自英特尔的文章。我可以包含任何标头来获取它吗?

它像假设一样有用unsigned __int256吗?我的意思是,如果您可以为其分配/比较,比较,按位运算等。

它的等效符号是什么(如果有)?


编辑1:

我做到了:

#include <immintrin.h>
typedef __m256i uint256_t;
Run Code Online (Sandbox Code Playgroud)

并编译。如果可以进行一些操作,请在此处进行更新。


编辑2:

发现问题:

uint256_t   m;
ptrdiff_t   l = 5;

m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud)

输出:

error: can’t convert a value of type ‘int’ to vector type ‘__vector(4) long long int’ which has different size
  m = ~((uint256_t)1 << l);
Run Code Online (Sandbox Code Playgroud)

c gcc types x86-64

2
推荐指数
2
解决办法
1132
查看次数

标签 统计

assembly ×2

x86 ×2

x86-64 ×2

biginteger ×1

c ×1

c++ ×1

cpu-registers ×1

gcc ×1

int128 ×1

intel-edison ×1

intrinsics ×1

simd ×1

sse ×1

types ×1

visual-c++ ×1