/* * Exercise a very simple inline asm sequence. */ #include "m512_test_util.h" #include #include __m512d a; __m512d b; __m512d c; void NOINLINE foo() { void *pa, *pb; pa = &a; pb = &b; __asm { mov FULL_IREG(ax), [pa] mov FULL_IREG(dx), [pb] vmovapd zmm0, ZMMWORD PTR [FULL_IREG(ax)] vaddpd zmm2, zmm0, ZMMWORD PTR [FULL_IREG(dx)] vmovapd ZMMWORD PTR [FULL_IREG(ax)], zmm2 } } static void NOINLINE init() { int i; double *pa, *pb, *pc; pa = (double *)&a; pb = (double *)&b; pc = (double *)&c; for (i = 0; i < sizeof(a) / sizeof(double); i++) { *pa++ = i * i; *pb++ = (i + 8) * (i + 8); *pc++ = i * i + (i + 8) * (i + 8); } } int main() { init(); foo(); if (memcmp(&a, &c, sizeof(a)) != 0) { printf("FAILED\n"); return 1; } printf("PASSED\n"); return 0; }