| //===-- main.c ------------------------------------------------*- C -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| |
| void func() { |
| unsigned int ymmvalues[16]; |
| for (int i = 0 ; i < 16 ; i++) |
| { |
| unsigned char val = (0x80 | i); |
| ymmvalues[i] = (val << 24) | (val << 16) | (val << 8) | val; |
| } |
| |
| unsigned int ymmallones = 0xFFFFFFFF; |
| #if defined(__AVX__) |
| __asm__("int3;" |
| "vbroadcastss %1, %%ymm0;" |
| "vbroadcastss %0, %%ymm0;" |
| "vbroadcastss %2, %%ymm1;" |
| "vbroadcastss %0, %%ymm1;" |
| "vbroadcastss %3, %%ymm2;" |
| "vbroadcastss %0, %%ymm2;" |
| "vbroadcastss %4, %%ymm3;" |
| "vbroadcastss %0, %%ymm3;" |
| "vbroadcastss %5, %%ymm4;" |
| "vbroadcastss %0, %%ymm4;" |
| "vbroadcastss %6, %%ymm5;" |
| "vbroadcastss %0, %%ymm5;" |
| "vbroadcastss %7, %%ymm6;" |
| "vbroadcastss %0, %%ymm6;" |
| "vbroadcastss %8, %%ymm7;" |
| "vbroadcastss %0, %%ymm7;" |
| #if defined(__x86_64__) |
| "vbroadcastss %1, %%ymm8;" |
| "vbroadcastss %0, %%ymm8;" |
| "vbroadcastss %2, %%ymm9;" |
| "vbroadcastss %0, %%ymm9;" |
| "vbroadcastss %3, %%ymm10;" |
| "vbroadcastss %0, %%ymm10;" |
| "vbroadcastss %4, %%ymm11;" |
| "vbroadcastss %0, %%ymm11;" |
| "vbroadcastss %5, %%ymm12;" |
| "vbroadcastss %0, %%ymm12;" |
| "vbroadcastss %6, %%ymm13;" |
| "vbroadcastss %0, %%ymm13;" |
| "vbroadcastss %7, %%ymm14;" |
| "vbroadcastss %0, %%ymm14;" |
| "vbroadcastss %8, %%ymm15;" |
| "vbroadcastss %0, %%ymm15;" |
| #endif |
| ::"m"(ymmallones), |
| "m"(ymmvalues[0]), "m"(ymmvalues[1]), "m"(ymmvalues[2]), "m"(ymmvalues[3]), |
| "m"(ymmvalues[4]), "m"(ymmvalues[5]), "m"(ymmvalues[6]), "m"(ymmvalues[7]) |
| ); |
| #endif |
| |
| #if defined(__AVX512F__) |
| unsigned int zmmvalues[32]; |
| for (int i = 0 ; i < 32 ; i++) |
| { |
| unsigned char val = (0x80 | i); |
| zmmvalues[i] = (val << 24) | (val << 16) | (val << 8) | val; |
| } |
| |
| __asm__("int3;" |
| "vbroadcastss %1, %%zmm0;" |
| "vbroadcastss %0, %%zmm0;" |
| "vbroadcastss %2, %%zmm1;" |
| "vbroadcastss %0, %%zmm1;" |
| "vbroadcastss %3, %%zmm2;" |
| "vbroadcastss %0, %%zmm2;" |
| "vbroadcastss %4, %%zmm3;" |
| "vbroadcastss %0, %%zmm3;" |
| "vbroadcastss %5, %%zmm4;" |
| "vbroadcastss %0, %%zmm4;" |
| "vbroadcastss %6, %%zmm5;" |
| "vbroadcastss %0, %%zmm5;" |
| "vbroadcastss %7, %%zmm6;" |
| "vbroadcastss %0, %%zmm6;" |
| "vbroadcastss %8, %%zmm7;" |
| "vbroadcastss %0, %%zmm7;" |
| #if defined(__x86_64__) |
| "vbroadcastss %1, %%zmm8;" |
| "vbroadcastss %0, %%zmm8;" |
| "vbroadcastss %2, %%zmm9;" |
| "vbroadcastss %0, %%zmm9;" |
| "vbroadcastss %3, %%zmm10;" |
| "vbroadcastss %0, %%zmm10;" |
| "vbroadcastss %4, %%zmm11;" |
| "vbroadcastss %0, %%zmm11;" |
| "vbroadcastss %5, %%zmm12;" |
| "vbroadcastss %0, %%zmm12;" |
| "vbroadcastss %6, %%zmm13;" |
| "vbroadcastss %0, %%zmm13;" |
| "vbroadcastss %7, %%zmm14;" |
| "vbroadcastss %0, %%zmm14;" |
| "vbroadcastss %8, %%zmm15;" |
| "vbroadcastss %0, %%zmm15;" |
| "vbroadcastss %1, %%zmm16;" |
| "vbroadcastss %0, %%zmm16;" |
| "vbroadcastss %2, %%zmm17;" |
| "vbroadcastss %0, %%zmm17;" |
| "vbroadcastss %3, %%zmm18;" |
| "vbroadcastss %0, %%zmm18;" |
| "vbroadcastss %4, %%zmm19;" |
| "vbroadcastss %0, %%zmm19;" |
| "vbroadcastss %5, %%zmm20;" |
| "vbroadcastss %0, %%zmm20;" |
| "vbroadcastss %6, %%zmm21;" |
| "vbroadcastss %0, %%zmm21;" |
| "vbroadcastss %7, %%zmm22;" |
| "vbroadcastss %0, %%zmm22;" |
| "vbroadcastss %8, %%zmm23;" |
| "vbroadcastss %0, %%zmm23;" |
| "vbroadcastss %1, %%zmm24;" |
| "vbroadcastss %0, %%zmm24;" |
| "vbroadcastss %2, %%zmm25;" |
| "vbroadcastss %0, %%zmm25;" |
| "vbroadcastss %3, %%zmm26;" |
| "vbroadcastss %0, %%zmm26;" |
| "vbroadcastss %4, %%zmm27;" |
| "vbroadcastss %0, %%zmm27;" |
| "vbroadcastss %5, %%zmm28;" |
| "vbroadcastss %0, %%zmm28;" |
| "vbroadcastss %6, %%zmm29;" |
| "vbroadcastss %0, %%zmm29;" |
| "vbroadcastss %7, %%zmm30;" |
| "vbroadcastss %0, %%zmm30;" |
| "vbroadcastss %8, %%zmm31;" |
| "vbroadcastss %0, %%zmm31;" |
| #endif |
| ::"m"(ymmallones), |
| "m"(zmmvalues[0]), "m"(zmmvalues[1]), "m"(zmmvalues[2]), "m"(zmmvalues[3]), |
| "m"(zmmvalues[4]), "m"(zmmvalues[5]), "m"(zmmvalues[6]), "m"(zmmvalues[7]) |
| ); |
| #endif |
| } |
| |
| int main(int argc, char const *argv[]) { func(); } |