2

I am building a c program in Ubuntu-16.04. As followed in one of the other answer here, I have set the cflag enviornment variable and I am running gcc command as shown below

export  CFLAGS="-msse4.1"
gcc -o dpdkif_user.o -O2 -g -Wno-format-zero-length -Wno-pointer-sign -Werror -I/home/nikhil/projects/drv-netif-dpdk/rumptools/dest/usr/include -U_FORTIFY_SOURCE -DVIRTIF_BASE=dpdk -I/home/nikhil/projects/drv-netif-dpdk/src/libdpdkif/virtif -I/home/nikhil/projects/dpdk/build/include -c dpdkif_user.c

Gcc version

cc (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609

However, I am still seeing the following error:

/usr/lib/gcc/x86_64-linux-gnu/5/include/tmmintrin.h:185:1: error: inlining failed in call to always_inline ‘_mm_alignr_epi8’: target specific option mismatch
 _mm_alignr_epi8(__m128i __X, __m128i __Y, const int __N)
 ^
In file included from /home/nikhil/projects/dpdk/build/include/rte_ether.h:50:0,
                 from dpdkif_user.c:47:
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:641:13: error: called from here
             _mm_storeu_si128((__m128i *)((uint8_t *)dst + 1 * 16), _mm_alignr_epi8(xmm2, xmm1, offset));    \
             ^
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:681:16: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47_IMM’
     case 0x0F: MOVEUNALIGNED_LEFT47_IMM(dst, src, n, 0x0F); break;    \
                ^
/home/nikhil/projects/dpdk/build/include/rte_memcpy.h:821:2: note: in expansion of macro ‘MOVEUNALIGNED_LEFT47’

What am I missing? Any help with this is greatly appreciated.

Nikhil
  • 2,168
  • 6
  • 33
  • 51
  • 1
    I don't see an [MCVE](https://stackoverflow.com/help/mcve) here... – Tom Karzes Dec 01 '17 at 06:15
  • The question I've linked above is similar to what I've asked. It is extending the already asked question – Nikhil Dec 01 '17 at 06:20
  • Actually, the commands you are running makes no sense at all. In the first line you set `CFLAGS`, in the second line you run `gcc` but having nothing about `CFLAGS` or `-msse4.1` option in the gcc command line. If you run the command manually, just put `-msse4.1` in the `gcc` command, you don't need to set `CFLAGS`. (CFLAGS is used for Makefile) – Bruce Dec 01 '17 at 06:27

1 Answers1

8

The inlining failure reason target specific option mismatch means that inlining failed because the program calls an always-inline function with a specific target attribute from another function which does not support this target. This is really something that is not supportable: the compiler cannot both compile a function to use certain micro-architecture features (the always-inline function) and not use them (the function into which is inlined).

In this particular case, the cause seems to be that the DPDK sources use compiler intrinsics, but you do not compile with the necessary subtarget option. You may have set the CFLAGS variable, but it does not seem to have any affect on the compilation (it is not part of the command line you quoted). Furthermore, tmmintrin.h needs -mssse3, not -msse4.1. The DPDK makefiles should take care of all these details.

Florian Weimer
  • 32,022
  • 3
  • 48
  • 92