如何制作__m128矢量的FABS()?

我必须使用符号位将原始向量乘以1.0f/-1.0f吗?

找不到执行此操作的任何指令集.

我不想要__M256或512.我正在搜索__m128数据类型

推荐答案

单个AND-不使用准备好的常量来关闭符号位就足够了:

#include <stdio.h>

#include <xmmintrin.h>


int main(void)
{
    static const __m128 MinusZero = { -0.f, -0.f, -0.f, -0.f };

    __m128 x = { +1, -2, +3, -4 };

    __m128 y = _mm_andnot_ps(MinusZero, x);

    printf("%g %g %g %g\n", y[0], y[1], y[2], y[3]);
}

输出:

1 2 3 4

C++相关问答推荐

C strlen on char array

由Go调用E.C.引起的内存快速增长

在C中使用动态内存分配找到最小的负数

DPDK-DumpCap不捕获端口上的传入数据包

如何一次获取一个字符

测量ARM MCU中断延迟的问题

C-使用指针返回修改后的整数数组

为什么中断函数会以这种方式影响数组?

将回调/基于事件的C API转换为非回调API

基于蝶数恰好有8个除数的事实的代码

在C中使用无符号整数模拟有符号整数

在printf()中用%.*S格式填充长度为0的字符串是否会调用任何UB?如果是,是哪一个?

';malloc():损坏的顶部大小';分配超过20万整数后

未为同一文件中的函数执行DirectFunctionCall

在哪里可以找到叮当返回码的含义?

关于不同C编译器中的__attribute__支持

程序打印一些随机空行

如何为avr atmega32微控制器构建C代码,通过光电二极管捕获光强度并通过串行通信传输数据

const struct 成员的 typedef 中的灵活数组大小

C 预处理器中的标记分隔符列表