提交记录 119231


用户 题目 状态 得分 用时 内存 语言 代码长度
saffah_cc_v41_260924 mmmf4k. 测测你的单精度矩阵乘法-4k Accepted 100 623.503 ms 197668 KB C++17 68.60 KB
提交时间 评测时间
2026-10-01 22:55:09 2026-10-01 22:55:14
/* int8 6-bit quantised GEMM for mmmf4k. generated by gen_i8.py */
#pragma GCC optimize("O3")
#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")
#include <immintrin.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>

#define NN 4096
#define NG 4
#define KC 256
#define NP (NN/2)
#define APAD 1024
#define NCH (KC/16)
#define GSTR 81984
#define NGRP (NN/16)
#define JBN (NN/(16*NG))
#define NKB (NP/KC)
#define RB 32
#define INV961 (1.0f/484.0f)

struct MS { int16_t e[16]; int16_t o[16]; };
static const struct MS MASKV __attribute__((aligned(32))) =
  {{1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0},{0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}};
#define MASKS (&MASKV)

static uint32_t *g_A = 0;
static uint8_t  *g_B = 0;
static int32_t  *g_corr = 0;
static int32_t  *g_SC = 0;
static int32_t  *g_cs = 0;
static uint8_t  *g_qa = 0, *g_qb = 0;

/* 2-row mikro: each B record is loaded ONCE and serves two rows. */
__attribute__((target("avx2"))) static void mikro2(const uint32_t *ap0, const uint32_t *ap1,
                                         const uint8_t *bx, int nchunks,
                                         int32_t *acc0, int32_t *acc1)
{
  asm volatile(
    "movl %[nch], %%r10d\n\t"
    ".p2align 5\n\t"
    "1:\n\t"
    "vpxor %%xmm2, %%xmm2, %%xmm2\n\t"
    "vpxor %%xmm3, %%xmm3, %%xmm3\n\t"
    "vpxor %%xmm4, %%xmm4, %%xmm4\n\t"
    "vpxor %%xmm5, %%xmm5, %%xmm5\n\t"
    "vpxor %%xmm6, %%xmm6, %%xmm6\n\t"
    "vpxor %%xmm7, %%xmm7, %%xmm7\n\t"
    "vpxor %%xmm8, %%xmm8, %%xmm8\n\t"
    "vpxor %%xmm9, %%xmm9, %%xmm9\n\t"
    "vpbroadcastd 128(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 128(%[ap1]), %%ymm15\n\t"
    "vmovdqu 128(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82112(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164096(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246080(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 132(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 132(%[ap1]), %%ymm15\n\t"
    "vmovdqu 160(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82144(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164128(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246112(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 136(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 136(%[ap1]), %%ymm15\n\t"
    "vmovdqu 192(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82176(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164160(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246144(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 140(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 140(%[ap1]), %%ymm15\n\t"
    "vmovdqu 224(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82208(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164192(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246176(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 144(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 144(%[ap1]), %%ymm15\n\t"
    "vmovdqu 256(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82240(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164224(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246208(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 148(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 148(%[ap1]), %%ymm15\n\t"
    "vmovdqu 288(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82272(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164256(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246240(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 152(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 152(%[ap1]), %%ymm15\n\t"
    "vmovdqu 320(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82304(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164288(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246272(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 156(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 156(%[ap1]), %%ymm15\n\t"
    "vmovdqu 352(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82336(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164320(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246304(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 160(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 160(%[ap1]), %%ymm15\n\t"
    "vmovdqu 384(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82368(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164352(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246336(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 164(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 164(%[ap1]), %%ymm15\n\t"
    "vmovdqu 416(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82400(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164384(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246368(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 168(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 168(%[ap1]), %%ymm15\n\t"
    "vmovdqu 448(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82432(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164416(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246400(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 172(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 172(%[ap1]), %%ymm15\n\t"
    "vmovdqu 480(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82464(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164448(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246432(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 176(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 176(%[ap1]), %%ymm15\n\t"
    "vmovdqu 512(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82496(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164480(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246464(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 180(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 180(%[ap1]), %%ymm15\n\t"
    "vmovdqu 544(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82528(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164512(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246496(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 184(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 184(%[ap1]), %%ymm15\n\t"
    "vmovdqu 576(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82560(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164544(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246528(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 188(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 188(%[ap1]), %%ymm15\n\t"
    "vmovdqu 608(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82592(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164576(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246560(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 192(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 192(%[ap1]), %%ymm15\n\t"
    "vmovdqu 640(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82624(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164608(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246592(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 196(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 196(%[ap1]), %%ymm15\n\t"
    "vmovdqu 672(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82656(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164640(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246624(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 200(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 200(%[ap1]), %%ymm15\n\t"
    "vmovdqu 704(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82688(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164672(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246656(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 204(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 204(%[ap1]), %%ymm15\n\t"
    "vmovdqu 736(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82720(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164704(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246688(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 208(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 208(%[ap1]), %%ymm15\n\t"
    "vmovdqu 768(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82752(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164736(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246720(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 212(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 212(%[ap1]), %%ymm15\n\t"
    "vmovdqu 800(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82784(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164768(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246752(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 216(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 216(%[ap1]), %%ymm15\n\t"
    "vmovdqu 832(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82816(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164800(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246784(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 220(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 220(%[ap1]), %%ymm15\n\t"
    "vmovdqu 864(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82848(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164832(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246816(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 224(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 224(%[ap1]), %%ymm15\n\t"
    "vmovdqu 896(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82880(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164864(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246848(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 228(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 228(%[ap1]), %%ymm15\n\t"
    "vmovdqu 928(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82912(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164896(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246880(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 232(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 232(%[ap1]), %%ymm15\n\t"
    "vmovdqu 960(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82944(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164928(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246912(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 236(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 236(%[ap1]), %%ymm15\n\t"
    "vmovdqu 992(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 82976(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164960(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246944(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 240(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 240(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1024(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83008(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 164992(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 246976(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 244(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 244(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1056(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83040(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165024(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247008(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 248(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 248(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1088(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83072(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165056(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247040(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 252(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 252(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1120(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83104(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165088(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247072(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 256(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 256(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1152(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83136(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165120(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247104(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 260(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 260(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1184(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83168(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165152(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247136(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 264(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 264(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1216(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83200(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165184(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247168(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 268(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 268(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1248(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83232(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165216(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247200(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 272(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 272(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1280(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83264(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165248(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247232(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 276(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 276(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1312(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83296(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165280(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247264(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 280(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 280(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1344(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83328(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165312(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247296(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 284(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 284(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1376(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83360(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165344(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247328(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 288(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 288(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1408(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83392(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165376(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247360(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 292(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 292(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1440(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83424(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165408(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247392(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 296(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 296(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1472(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83456(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165440(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247424(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 300(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 300(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1504(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83488(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165472(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247456(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 304(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 304(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1536(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83520(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165504(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247488(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 308(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 308(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1568(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83552(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165536(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247520(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 312(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 312(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1600(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83584(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165568(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247552(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 316(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 316(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1632(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83616(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165600(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247584(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 320(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 320(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1664(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83648(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165632(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247616(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 324(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 324(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1696(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83680(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165664(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247648(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 328(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 328(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1728(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83712(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165696(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247680(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 332(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 332(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1760(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83744(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165728(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247712(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 336(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 336(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1792(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83776(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165760(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247744(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 340(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 340(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1824(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83808(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165792(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247776(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 344(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 344(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1856(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83840(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165824(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247808(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 348(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 348(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1888(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83872(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165856(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247840(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 352(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 352(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1920(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83904(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165888(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247872(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 356(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 356(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1952(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83936(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165920(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247904(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 360(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 360(%[ap1]), %%ymm15\n\t"
    "vmovdqu 1984(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 83968(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165952(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247936(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 364(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 364(%[ap1]), %%ymm15\n\t"
    "vmovdqu 2016(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 84000(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 165984(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 247968(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 368(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 368(%[ap1]), %%ymm15\n\t"
    "vmovdqu 2048(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 84032(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 166016(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 248000(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 372(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 372(%[ap1]), %%ymm15\n\t"
    "vmovdqu 2080(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 84064(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 166048(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 248032(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 376(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 376(%[ap1]), %%ymm15\n\t"
    "vmovdqu 2112(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 84096(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 166080(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 248064(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpbroadcastd 380(%[ap0]), %%ymm0\n\t"
    "vpbroadcastd 380(%[ap1]), %%ymm15\n\t"
    "vmovdqu 2144(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm2, %%ymm2\n\t"
    "vpaddw %%ymm11, %%ymm6, %%ymm6\n\t"
    "vmovdqu 84128(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm3, %%ymm3\n\t"
    "vpaddw %%ymm11, %%ymm7, %%ymm7\n\t"
    "vmovdqu 166112(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm4, %%ymm4\n\t"
    "vpaddw %%ymm11, %%ymm8, %%ymm8\n\t"
    "vmovdqu 248096(%[bx]), %%ymm1\n\t"
    "vpmaddubsw %%ymm1, %%ymm0, %%ymm10\n\t"
    "vpmaddubsw %%ymm1, %%ymm15, %%ymm11\n\t"
    "vpaddw %%ymm10, %%ymm5, %%ymm5\n\t"
    "vpaddw %%ymm11, %%ymm9, %%ymm9\n\t"
    "vpmaddwd 0(%[me]), %%ymm2, %%ymm12\n\t"
    "vpaddd 0(%[acc0]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 0(%[acc0])\n\t"
    "vpmaddwd 32(%[me]), %%ymm2, %%ymm13\n\t"
    "vpaddd 32(%[acc0]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 32(%[acc0])\n\t"
    "vpmaddwd 0(%[me]), %%ymm3, %%ymm12\n\t"
    "vpaddd 64(%[acc0]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 64(%[acc0])\n\t"
    "vpmaddwd 32(%[me]), %%ymm3, %%ymm13\n\t"
    "vpaddd 96(%[acc0]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 96(%[acc0])\n\t"
    "vpmaddwd 0(%[me]), %%ymm4, %%ymm12\n\t"
    "vpaddd 128(%[acc0]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 128(%[acc0])\n\t"
    "vpmaddwd 32(%[me]), %%ymm4, %%ymm13\n\t"
    "vpaddd 160(%[acc0]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 160(%[acc0])\n\t"
    "vpmaddwd 0(%[me]), %%ymm5, %%ymm12\n\t"
    "vpaddd 192(%[acc0]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 192(%[acc0])\n\t"
    "vpmaddwd 32(%[me]), %%ymm5, %%ymm13\n\t"
    "vpaddd 224(%[acc0]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 224(%[acc0])\n\t"
    "vpmaddwd 0(%[me]), %%ymm6, %%ymm12\n\t"
    "vpaddd 0(%[acc1]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 0(%[acc1])\n\t"
    "vpmaddwd 32(%[me]), %%ymm6, %%ymm13\n\t"
    "vpaddd 32(%[acc1]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 32(%[acc1])\n\t"
    "vpmaddwd 0(%[me]), %%ymm7, %%ymm12\n\t"
    "vpaddd 64(%[acc1]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 64(%[acc1])\n\t"
    "vpmaddwd 32(%[me]), %%ymm7, %%ymm13\n\t"
    "vpaddd 96(%[acc1]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 96(%[acc1])\n\t"
    "vpmaddwd 0(%[me]), %%ymm8, %%ymm12\n\t"
    "vpaddd 128(%[acc1]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 128(%[acc1])\n\t"
    "vpmaddwd 32(%[me]), %%ymm8, %%ymm13\n\t"
    "vpaddd 160(%[acc1]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 160(%[acc1])\n\t"
    "vpmaddwd 0(%[me]), %%ymm9, %%ymm12\n\t"
    "vpaddd 192(%[acc1]), %%ymm12, %%ymm12\n\t"
    "vmovdqu %%ymm12, 192(%[acc1])\n\t"
    "vpmaddwd 32(%[me]), %%ymm9, %%ymm13\n\t"
    "vpaddd 224(%[acc1]), %%ymm13, %%ymm13\n\t"
    "vmovdqu %%ymm13, 224(%[acc1])\n\t"
    "addq $256, %[ap0]\n\t"
    "addq $256, %[ap1]\n\t"
    "addq $2048, %[bx]\n\t"
    "decl %%r10d\n\t"
    "jnz 1b\n\t"
    : [ap0]"+r"(ap0), [ap1]"+r"(ap1), [bx]"+r"(bx)
    : [acc0]"r"(acc0), [acc1]"r"(acc1), [nch]"r"(nchunks), [me]"r"(MASKS)
    : "ymm0", "ymm1", "ymm2", "ymm3", "ymm4", "ymm5", "ymm6", "ymm7", "ymm8", "ymm9", "ymm10", "ymm11", "ymm12", "ymm13", "ymm14", "ymm15", "r10", "cc", "memory");
}

__attribute__((target("avx2"))) static inline __m256i qf8(const float *r)
{
  return _mm256_cvtps_epi32(_mm256_mul_ps(_mm256_loadu_ps(r), _mm256_set1_ps(22.0f)));
}

/* 16 floats -> 16 bytes of A_q = round(x*31)+32 clamped to [1,63] */
__attribute__((target("avx2"))) static inline void qA16(const float *r, uint8_t *o)
{
  __m256i v0 = qf8(r), v1 = qf8(r + 8);
  v0 = _mm256_min_epi32(_mm256_max_epi32(_mm256_add_epi32(v0, _mm256_set1_epi32(22)),
                                        _mm256_set1_epi32(0)), _mm256_set1_epi32(44));
  v1 = _mm256_min_epi32(_mm256_max_epi32(_mm256_add_epi32(v1, _mm256_set1_epi32(22)),
                                        _mm256_set1_epi32(0)), _mm256_set1_epi32(44));
  _mm_storeu_si128((__m128i *)o, _mm_packus_epi16(
      _mm_packus_epi32(_mm256_castsi256_si128(v0), _mm256_extracti128_si256(v0, 1)),
      _mm_packus_epi32(_mm256_castsi256_si128(v1), _mm256_extracti128_si256(v1, 1))));
}

/* 16 floats -> 16 bytes of B_q = round(x*31) clamped to [-31,31] */
__attribute__((target("avx2"))) static inline void qB16(const float *r, uint8_t *o)
{
  __m256i v0 = qf8(r), v1 = qf8(r + 8);
  v0 = _mm256_min_epi32(_mm256_max_epi32(v0, _mm256_set1_epi32(-22)), _mm256_set1_epi32(22));
  v1 = _mm256_min_epi32(_mm256_max_epi32(v1, _mm256_set1_epi32(-22)), _mm256_set1_epi32(22));
  _mm_storeu_si128((__m128i *)o, _mm_packs_epi16(
      _mm_packs_epi32(_mm256_castsi256_si128(v0), _mm256_extracti128_si256(v0, 1)),
      _mm_packs_epi32(_mm256_castsi256_si128(v1), _mm256_extracti128_si256(v1, 1))));
}

/* A panel: row i, pair p -> dword [a0,a1,a0,a1] broadcast by vpbroadcastd */
__attribute__((target("avx2"))) static void packA(int n, const float *A)
{
  for (int i = 0; i < n; i++) {
    const float *r = A + (size_t)i * n;
    uint32_t *o = g_A + (size_t)i * (n / 2 + APAD);
    for (int k = 0; k < n; k += 16) {
      uint8_t q[16];
      qA16(r + k, q);
      __m256i w32 = _mm256_cvtepu16_epi32(_mm_loadu_si128((const __m128i *)q));
      _mm256_storeu_si256((__m256i *)(o + (k >> 1)),
          _mm256_mullo_epi32(w32, _mm256_set1_epi32(65537)));
    }
  }
}

/* B panel: record (g,p) = 32 B, i16 lane m = (Bq[2p][16g+m], Bq[2p+1][16g+m]) */
__attribute__((target("avx2"))) static void packB(int n, const float *B, int32_t *cs)
{
  for (int p = 0; p < n / 2; p++) {
    const float *r0 = B + (size_t)(2 * p) * n, *r1 = r0 + n;
    for (int k = 0; k < n; k += 16) {
      qB16(r0 + k, g_qa + k);
      qB16(r1 + k, g_qb + k);
      __m256i a0 = _mm256_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(g_qa + k)));
      __m256i a1 = _mm256_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(g_qa + k + 8)));
      __m256i b0 = _mm256_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(g_qb + k)));
      __m256i b1 = _mm256_cvtepi8_epi32(_mm_loadu_si128((const __m128i *)(g_qb + k + 8)));
      _mm256_storeu_si256((__m256i *)(cs + k), _mm256_add_epi32(
          _mm256_loadu_si256((const __m256i *)(cs + k)), _mm256_add_epi32(a0, b0)));
      _mm256_storeu_si256((__m256i *)(cs + k + 8), _mm256_add_epi32(
          _mm256_loadu_si256((const __m256i *)(cs + k + 8)), _mm256_add_epi32(a1, b1)));
      __m128i va = _mm_loadu_si128((const __m128i *)(g_qa + k));
      __m128i vb = _mm_loadu_si128((const __m128i *)(g_qb + k));
      __m256i rec = _mm256_inserti128_si256(
          _mm256_castsi128_si256(_mm_unpacklo_epi8(va, vb)), _mm_unpackhi_epi8(va, vb), 1);
      _mm256_storeu_si256((__m256i *)(g_B + (size_t)(k / 16) * GSTR + (size_t)p * 32), rec);
    }
  }
}

/* SC layout per 16-column group: 8 i32 of EVEN columns then 8 i32 of ODD columns */
__attribute__((target("avx2"))) static void decode(int n, float *C)
{
  const __m256 inv = _mm256_set1_ps(INV961);
  for (int i = 0; i < n; i++) {
    const int32_t *s = g_SC + (size_t)i * n;
    float *c = C + (size_t)i * n;
    for (int g = 0; g < n / 16; g++) {
      const int32_t *q = s + g * 16;
      __m256i E = _mm256_loadu_si256((const __m256i *)q);
      __m256i O = _mm256_loadu_si256((const __m256i *)(q + 8));
      __m256i lo = _mm256_unpacklo_epi32(E, O);
      __m256i hi = _mm256_unpackhi_epi32(E, O);
      __m256i r0 = _mm256_sub_epi32(_mm256_permute2x128_si256(lo, hi, 0x20),
                                 _mm256_loadu_si256((const __m256i *)(g_corr + g * 16)));
      __m256i r1 = _mm256_sub_epi32(_mm256_permute2x128_si256(lo, hi, 0x31),
                                 _mm256_loadu_si256((const __m256i *)(g_corr + g * 16 + 8)));
      _mm256_storeu_ps(c + g * 16, _mm256_mul_ps(_mm256_cvtepi32_ps(r0), inv));
      _mm256_storeu_ps(c + g * 16 + 8, _mm256_mul_ps(_mm256_cvtepi32_ps(r1), inv));
    }
  }
}

static void simple_mm(int n, const float *A, const float *B, float *C)
{
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      float s = 0.f;
      for (int k = 0; k < n; k++) s += A[(size_t)i * n + k] * B[(size_t)k * n + j];
      C[(size_t)i * n + j] = s;
    }
}

void matrix_multiply(int n, const float *A, const float *B, float *C)
{
  if (n != NN) { simple_mm(n, A, B, C); return; }
  if (!g_A) {
    if (posix_memalign((void **)&g_A, 64, (size_t)NN * (NP + APAD) * 4)) return;
    if (posix_memalign((void **)&g_B, 64, (size_t)NGRP * GSTR)) return;
    if (posix_memalign((void **)&g_corr, 64, (size_t)NN * 4)) return;
    if (posix_memalign((void **)&g_SC, 64, (size_t)NN * NN * 4)) return;
    if (posix_memalign((void **)&g_cs, 64, (size_t)NN * 4)) return;
    if (posix_memalign((void **)&g_qa, 64, (size_t)NN + 64)) return;
    if (posix_memalign((void **)&g_qb, 64, (size_t)NN + 64)) return;
  }
  memset(g_cs, 0, (size_t)NN * 4);
  packA(n, A);
  packB(n, B, g_cs);
  for (int j = 0; j < NN; j++) g_corr[j] = g_cs[j] * 22;
  memset(g_SC, 0, (size_t)NN * NN * 4);
  for (int kb = 0; kb < NKB; kb++) {
    for (int ib = 0; ib < NN; ib += RB) {
      for (int jb = 0; jb < JBN; jb++) {
        const uint8_t *b0 = g_B + (size_t)(jb * NG) * GSTR + (size_t)kb * KC * 32 - 128;
        for (int i = ib; i < ib + RB; i += 2)
          mikro2(g_A + (size_t)i * (NP + APAD) + (size_t)kb * KC - 32,
                 g_A + (size_t)(i + 1) * (NP + APAD) + (size_t)kb * KC - 32,
                 b0, NCH / 4,
                 g_SC + (size_t)i * NN + jb * (16 * NG),
                 g_SC + (size_t)(i + 1) * NN + jb * (16 * NG));
      }
    }
  }
  decode(n, C);
}

CompilationN/AN/ACompile OKScore: N/A

Testcase #1623.503 ms193 MB + 36 KBAcceptedScore: 100


Judge Duck Online | 评测鸭在线
Server Time: 2026-11-04 17:00:56 | Loaded in 1 ms | Server Status
个人娱乐项目,仅供学习交流使用 | 捐赠