[Bug target/82735] _mm256_zeroupper does not invalidate previously computed registers
marcin.slusarz at intel dot com
gcc-bugzilla@gcc.gnu.org
Thu Oct 26 16:39:00 GMT 2017
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82735
--- Comment #1 from Marcin Ślusarz <marcin.slusarz at intel dot com> ---
Heh, there are really stupid bugs in both files. Thankfully they don't change
the outcome.
Updated code:
$ cat main.c
#include <stdio.h>
#include <string.h>
void test(char *dest);
int main()
{
char buf[64];
memset(buf, 0x2, 64);
test(buf);
for (int i = 0; i < 32; ++i)
printf("%d ", buf[i]);
printf("\n");
return 0;
}
$ cat zeroupper.c
#include <immintrin.h>
void test(char *dest)
{
__m256i ymm1 = _mm256_set1_epi8((char)0x1);
_mm256_storeu_si256((__m256i *)(dest + 32), ymm1);
_mm256_zeroupper();
__m256i ymm2 = _mm256_set1_epi8((char)0x1);
_mm256_storeu_si256((__m256i *)dest, ymm2);
}
Still the output is:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
More information about the Gcc-bugs
mailing list