187aa9c9eSJonas Devlieghere #include <cinttypes>
287aa9c9eSJonas Devlieghere #include <cstdint>
387aa9c9eSJonas Devlieghere #include <cstdio>
487aa9c9eSJonas Devlieghere
587aa9c9eSJonas Devlieghere union alignas(64) zmm_t {
687aa9c9eSJonas Devlieghere uint64_t as_uint64[8];
787aa9c9eSJonas Devlieghere uint8_t as_uint8[64];
887aa9c9eSJonas Devlieghere };
987aa9c9eSJonas Devlieghere
main()1087aa9c9eSJonas Devlieghere int main() {
1187aa9c9eSJonas Devlieghere constexpr zmm_t zmm_fill = {
12*37d4d3bbSMichał Górny .as_uint64 = { 0, 0, 0, 0, 0, 0, 0, 0 }
1387aa9c9eSJonas Devlieghere };
1487aa9c9eSJonas Devlieghere
1587aa9c9eSJonas Devlieghere zmm_t zmm[32];
1687aa9c9eSJonas Devlieghere
1787aa9c9eSJonas Devlieghere asm volatile(
1887aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm0\n\t"
1987aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm1\n\t"
2087aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm2\n\t"
2187aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm3\n\t"
2287aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm4\n\t"
2387aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm5\n\t"
2487aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm6\n\t"
2587aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm7\n\t"
2687aa9c9eSJonas Devlieghere #if defined(__x86_64__) || defined(_M_X64)
2787aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm8\n\t"
2887aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm9\n\t"
2987aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm10\n\t"
3087aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm11\n\t"
3187aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm12\n\t"
3287aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm13\n\t"
3387aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm14\n\t"
3487aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm15\n\t"
3587aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm16\n\t"
3687aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm17\n\t"
3787aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm18\n\t"
3887aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm19\n\t"
3987aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm20\n\t"
4087aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm21\n\t"
4187aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm22\n\t"
4287aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm23\n\t"
4387aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm24\n\t"
4487aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm25\n\t"
4587aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm26\n\t"
4687aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm27\n\t"
4787aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm28\n\t"
4887aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm29\n\t"
4987aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm30\n\t"
5087aa9c9eSJonas Devlieghere "vmovaps %1, %%zmm31\n\t"
5187aa9c9eSJonas Devlieghere #endif
5287aa9c9eSJonas Devlieghere "\n\t"
5387aa9c9eSJonas Devlieghere "int3\n\t"
5487aa9c9eSJonas Devlieghere "\n\t"
5587aa9c9eSJonas Devlieghere "vmovaps %%zmm0, 0x000(%0)\n\t"
5687aa9c9eSJonas Devlieghere "vmovaps %%zmm1, 0x040(%0)\n\t"
5787aa9c9eSJonas Devlieghere "vmovaps %%zmm2, 0x080(%0)\n\t"
5887aa9c9eSJonas Devlieghere "vmovaps %%zmm3, 0x0C0(%0)\n\t"
5987aa9c9eSJonas Devlieghere "vmovaps %%zmm4, 0x100(%0)\n\t"
6087aa9c9eSJonas Devlieghere "vmovaps %%zmm5, 0x140(%0)\n\t"
6187aa9c9eSJonas Devlieghere "vmovaps %%zmm6, 0x180(%0)\n\t"
6287aa9c9eSJonas Devlieghere "vmovaps %%zmm7, 0x1C0(%0)\n\t"
6387aa9c9eSJonas Devlieghere #if defined(__x86_64__) || defined(_M_X64)
6487aa9c9eSJonas Devlieghere "vmovaps %%zmm8, 0x200(%0)\n\t"
6587aa9c9eSJonas Devlieghere "vmovaps %%zmm9, 0x240(%0)\n\t"
6687aa9c9eSJonas Devlieghere "vmovaps %%zmm10, 0x280(%0)\n\t"
6787aa9c9eSJonas Devlieghere "vmovaps %%zmm11, 0x2C0(%0)\n\t"
6887aa9c9eSJonas Devlieghere "vmovaps %%zmm12, 0x300(%0)\n\t"
6987aa9c9eSJonas Devlieghere "vmovaps %%zmm13, 0x340(%0)\n\t"
7087aa9c9eSJonas Devlieghere "vmovaps %%zmm14, 0x380(%0)\n\t"
7187aa9c9eSJonas Devlieghere "vmovaps %%zmm15, 0x3C0(%0)\n\t"
7287aa9c9eSJonas Devlieghere "vmovaps %%zmm16, 0x400(%0)\n\t"
7387aa9c9eSJonas Devlieghere "vmovaps %%zmm17, 0x440(%0)\n\t"
7487aa9c9eSJonas Devlieghere "vmovaps %%zmm18, 0x480(%0)\n\t"
7587aa9c9eSJonas Devlieghere "vmovaps %%zmm19, 0x4C0(%0)\n\t"
7687aa9c9eSJonas Devlieghere "vmovaps %%zmm20, 0x500(%0)\n\t"
7787aa9c9eSJonas Devlieghere "vmovaps %%zmm21, 0x540(%0)\n\t"
7887aa9c9eSJonas Devlieghere "vmovaps %%zmm22, 0x580(%0)\n\t"
7987aa9c9eSJonas Devlieghere "vmovaps %%zmm23, 0x5C0(%0)\n\t"
8087aa9c9eSJonas Devlieghere "vmovaps %%zmm24, 0x600(%0)\n\t"
8187aa9c9eSJonas Devlieghere "vmovaps %%zmm25, 0x640(%0)\n\t"
8287aa9c9eSJonas Devlieghere "vmovaps %%zmm26, 0x680(%0)\n\t"
8387aa9c9eSJonas Devlieghere "vmovaps %%zmm27, 0x6C0(%0)\n\t"
8487aa9c9eSJonas Devlieghere "vmovaps %%zmm28, 0x700(%0)\n\t"
8587aa9c9eSJonas Devlieghere "vmovaps %%zmm29, 0x740(%0)\n\t"
8687aa9c9eSJonas Devlieghere "vmovaps %%zmm30, 0x780(%0)\n\t"
8787aa9c9eSJonas Devlieghere "vmovaps %%zmm31, 0x7C0(%0)\n\t"
8887aa9c9eSJonas Devlieghere #endif
8987aa9c9eSJonas Devlieghere :
9087aa9c9eSJonas Devlieghere : "b"(zmm), "m"(zmm_fill)
9187aa9c9eSJonas Devlieghere : "%zmm0", "%zmm1", "%zmm2", "%zmm3", "%zmm4", "%zmm5", "%zmm6", "%zmm7"
9287aa9c9eSJonas Devlieghere #if defined(__x86_64__) || defined(_M_X64)
9387aa9c9eSJonas Devlieghere , "%zmm8", "%zmm9", "%zmm10", "%zmm11", "%zmm12", "%zmm13", "%zmm14",
9487aa9c9eSJonas Devlieghere "%zmm15", "%zmm16", "%zmm17", "%zmm18", "%zmm19", "%zmm20", "%zmm21",
9587aa9c9eSJonas Devlieghere "%zmm22", "%zmm23", "%zmm24", "%zmm25", "%zmm26", "%zmm27", "%zmm28",
9687aa9c9eSJonas Devlieghere "%zmm29", "%zmm30", "%zmm31"
9787aa9c9eSJonas Devlieghere #endif
9887aa9c9eSJonas Devlieghere );
9987aa9c9eSJonas Devlieghere
10087aa9c9eSJonas Devlieghere for (int i = 0; i < 32; ++i) {
10187aa9c9eSJonas Devlieghere printf("zmm%d = { ", i);
10287aa9c9eSJonas Devlieghere for (int j = 0; j < sizeof(zmm->as_uint8); ++j)
10387aa9c9eSJonas Devlieghere printf("0x%02x ", zmm[i].as_uint8[j]);
10487aa9c9eSJonas Devlieghere printf("}\n");
10587aa9c9eSJonas Devlieghere }
10687aa9c9eSJonas Devlieghere
10787aa9c9eSJonas Devlieghere return 0;
10887aa9c9eSJonas Devlieghere }
109