Linux 如何在gcc中编译内部代码

Linux 如何在gcc中编译内部代码,linux,gcc,Linux,Gcc,我正在尝试编译以下代码: #include <sys/types.h> #include <argp.h> #include <stdlib.h> #include <xmmintrin.h> __attribute__((noinline)) void vadd(float *a, float *b, size_t size) { size_t i; for (i=0; i<size; i+=4) {

我正在尝试编译以下代码:

#include <sys/types.h>
#include <argp.h>
#include <stdlib.h>
#include <xmmintrin.h>

__attribute__((noinline)) void vadd(float *a, float *b, size_t size)
{
    size_t i;
    for (i=0; i<size; i+=4)
    {
        __m128 v1 = _mm_load_ps(a + i);  //loads up 4 floats into a __m128
        __m128 v2 = _mm_load_ps(b + i);  //loads up 4 floats into a __m128
        __m128 v3 = _mm_add_ps(v1, v2);
        _mm_store_ps(a+i, v3);
    }
}

__attribute__((noinline)) void sadd(float *a, float *b, size_t size)
{
    size_t i;
    for(i=0; i<size; i++)
    {
        a[i] += b[i];
    }
}

int main (void)
{
    size_t size = 300000000;
    float *a = (float *)calloc(size, sizeof(float));
    float *b = (float *)calloc(size, sizeof(float));

    vadd(a, b, size);
    sadd(a, b, size);
}

有办法解决这个问题吗

代码编译为OK,例如gcc-4.9.2:PCLinuxOS-2016-64位。您使用的是哪种32位操作系统?我正在尝试在Ubuntu 10 32位VM和gcc 4.8上编译代码,例如gcc-4.9.2:PCLinuxOS-2016-64位。你在使用哪种32位操作系统?我正在尝试在Ubuntu 10 32位虚拟机和GCC4.8上编译
/usr/lib/gcc/i486-linux-gnu/4.8/include/mmintrin.h: In function   ‘_mm_cvtsi32_si64’:
/usr/lib/gcc/i486-linux-gnu/4.8/include/mmintrin.h:61:3: error: can’t convert between vector values of different size
return (__m64) __builtin_ia32_vec_init_v2si (__i, 0);