| 84 | } |
| 85 | inline void helper_float_4(float *buf); |
| 86 | inline void helper_float_4(float *buf) { |
| 87 | for (int j = 0; j < 16; j += 16) { |
| 88 | for (int k = 0; k < 8; k += 8) { |
| 89 | __asm__ volatile ( |
| 90 | "vmovups (%0), %%ymm0\n" |
| 91 | "vmovups (%1), %%ymm1\n" |
| 92 | "vpermilps $160, %%ymm0, %%ymm8\n" |
| 93 | "vpermilps $245, %%ymm0, %%ymm9\n" |
| 94 | "vxorps %%ymm10, %%ymm10, %%ymm10\n" |
| 95 | "vsubps %%ymm9, %%ymm10, %%ymm11\n" |
| 96 | "vaddsubps %%ymm11, %%ymm8, %%ymm0\n" |
| 97 | "vpermilps $160, %%ymm1, %%ymm8\n" |
| 98 | "vpermilps $245, %%ymm1, %%ymm9\n" |
| 99 | "vxorps %%ymm10, %%ymm10, %%ymm10\n" |
| 100 | "vsubps %%ymm9, %%ymm10, %%ymm11\n" |
| 101 | "vaddsubps %%ymm11, %%ymm8, %%ymm1\n" |
| 102 | "vpermilps $68, %%ymm0, %%ymm8\n" |
| 103 | "vpermilps $238, %%ymm0, %%ymm9\n" |
| 104 | "vxorps %%ymm10, %%ymm10, %%ymm10\n" |
| 105 | "vsubps %%ymm9, %%ymm10, %%ymm11\n" |
| 106 | "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n" |
| 107 | "vaddps %%ymm8, %%ymm12, %%ymm0\n" |
| 108 | "vpermilps $68, %%ymm1, %%ymm8\n" |
| 109 | "vpermilps $238, %%ymm1, %%ymm9\n" |
| 110 | "vxorps %%ymm10, %%ymm10, %%ymm10\n" |
| 111 | "vsubps %%ymm9, %%ymm10, %%ymm11\n" |
| 112 | "vblendps $204, %%ymm11, %%ymm9, %%ymm12\n" |
| 113 | "vaddps %%ymm8, %%ymm12, %%ymm1\n" |
| 114 | "vxorps %%ymm8, %%ymm8, %%ymm8\n" |
| 115 | "vsubps %%ymm0, %%ymm8, %%ymm9\n" |
| 116 | "vperm2f128 $0, %%ymm0, %%ymm0, %%ymm10\n" |
| 117 | "vperm2f128 $49, %%ymm9, %%ymm0, %%ymm11\n" |
| 118 | "vaddps %%ymm10, %%ymm11, %%ymm0\n" |
| 119 | "vxorps %%ymm8, %%ymm8, %%ymm8\n" |
| 120 | "vsubps %%ymm1, %%ymm8, %%ymm9\n" |
| 121 | "vperm2f128 $0, %%ymm1, %%ymm1, %%ymm10\n" |
| 122 | "vperm2f128 $49, %%ymm9, %%ymm1, %%ymm11\n" |
| 123 | "vaddps %%ymm10, %%ymm11, %%ymm1\n" |
| 124 | "vaddps %%ymm1, %%ymm0, %%ymm8\n" |
| 125 | "vsubps %%ymm1, %%ymm0, %%ymm9\n" |
| 126 | "vmovups %%ymm8, (%0)\n" |
| 127 | "vmovups %%ymm9, (%1)\n" |
| 128 | :: "r"(buf + j + k + 0), "r"(buf + j + k + 8) : "%ymm0", "%ymm1", "%ymm2", "%ymm3", "%ymm4", "%ymm5", "%ymm6", "%ymm7", "%ymm8", "%ymm9", "%ymm10", "%ymm11", "%ymm12", "%ymm13", "%ymm14", "%ymm15", "memory" |
| 129 | ); |
| 130 | } |
| 131 | } |
| 132 | } |
| 133 | inline void helper_float_5(float *buf); |
| 134 | inline void helper_float_5(float *buf) { |
| 135 | for (int j = 0; j < 32; j += 32) { |