blob: 0ef9f315773effd1766c453f487910ddc2cf8f2e [file] [log] [blame]
/*
* Exercise a very simple inline asm sequence.
*/
#include "m512_test_util.h"
#include <stdio.h>
#include <string.h>
__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;
}