av-scenechange 0.23.0

Estimates frames in a video where a scenecut would be ideal
Documentation
/*
 * Copyright (c) 2019-2022, The rav1e contributors. All rights reserved
 *
 * This source code is subject to the terms of the BSD 2 Clause License and
 * the Alliance for Open Media Patent License 1.0. If the BSD 2 Clause License
 * was not distributed with this source code in the LICENSE file, you can
 * obtain it at www.aomedia.org/license/software. If the Alliance for Open
 * Media Patent License 1.0 was not distributed with this source code in the
 * PATENTS file, you can obtain it at www.aomedia.org/license/patent.
 */

/*
 * Copyright © 2018, VideoLAN and dav1d authors
 * Copyright © 2018, Two Orioles, LLC
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 * 1. Redistributions of source code must retain the above copyright notice, this
 *    list of conditions and the following disclaimer.
 *
 * 2. Redistributions in binary form must reproduce the above copyright notice,
 *    this list of conditions and the following disclaimer in the documentation
 *    and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "src/asm/arm/asm.S"

const mc_subpel_filters, export=1, align=3
.byte  0,   1,  -3,  63,   4,  -1,   0,   0 /* REGULAR */
.byte  0,   1,  -5,  61,   9,  -2,   0,   0
.byte  0,   1,  -6,  58,  14,  -4,   1,   0
.byte  0,   1,  -7,  55,  19,  -5,   1,   0
.byte  0,   1,  -7,  51,  24,  -6,   1,   0
.byte  0,   1,  -8,  47,  29,  -6,   1,   0
.byte  0,   1,  -7,  42,  33,  -6,   1,   0
.byte  0,   1,  -7,  38,  38,  -7,   1,   0
.byte  0,   1,  -6,  33,  42,  -7,   1,   0
.byte  0,   1,  -6,  29,  47,  -8,   1,   0
.byte  0,   1,  -6,  24,  51,  -7,   1,   0
.byte  0,   1,  -5,  19,  55,  -7,   1,   0
.byte  0,   1,  -4,  14,  58,  -6,   1,   0
.byte  0,   0,  -2,   9,  61,  -5,   1,   0
.byte  0,   0,  -1,   4,  63,  -3,   1,   0
.byte  0,   1,  14,  31,  17,   1,   0,   0 /* SMOOTH */
.byte  0,   0,  13,  31,  18,   2,   0,   0
.byte  0,   0,  11,  31,  20,   2,   0,   0
.byte  0,   0,  10,  30,  21,   3,   0,   0
.byte  0,   0,   9,  29,  22,   4,   0,   0
.byte  0,   0,   8,  28,  23,   5,   0,   0
.byte  0,  -1,   8,  27,  24,   6,   0,   0
.byte  0,  -1,   7,  26,  26,   7,  -1,   0
.byte  0,   0,   6,  24,  27,   8,  -1,   0
.byte  0,   0,   5,  23,  28,   8,   0,   0
.byte  0,   0,   4,  22,  29,   9,   0,   0
.byte  0,   0,   3,  21,  30,  10,   0,   0
.byte  0,   0,   2,  20,  31,  11,   0,   0
.byte  0,   0,   2,  18,  31,  13,   0,   0
.byte  0,   0,   1,  17,  31,  14,   1,   0
.byte -1,   1,  -3,  63,   4,  -1,   1,   0 /* SHARP */
.byte -1,   3,  -6,  62,   8,  -3,   2,  -1
.byte -1,   4,  -9,  60,  13,  -5,   3,  -1
.byte -2,   5, -11,  58,  19,  -7,   3,  -1
.byte -2,   5, -11,  54,  24,  -9,   4,  -1
.byte -2,   5, -12,  50,  30, -10,   4,  -1
.byte -2,   5, -12,  45,  35, -11,   5,  -1
.byte -2,   6, -12,  40,  40, -12,   6,  -2
.byte -1,   5, -11,  35,  45, -12,   5,  -2
.byte -1,   4, -10,  30,  50, -12,   5,  -2
.byte -1,   4,  -9,  24,  54, -11,   5,  -2
.byte -1,   3,  -7,  19,  58, -11,   5,  -2
.byte -1,   3,  -5,  13,  60,  -9,   4,  -1
.byte -1,   2,  -3,   8,  62,  -6,   3,  -1
.byte  0,   1,  -1,   4,  63,  -3,   1,  -1
.byte  0,   0,  -2,  63,   4,  -1,   0,   0 /* REGULAR 4 */
.byte  0,   0,  -4,  61,   9,  -2,   0,   0
.byte  0,   0,  -5,  58,  14,  -3,   0,   0
.byte  0,   0,  -6,  55,  19,  -4,   0,   0
.byte  0,   0,  -6,  51,  24,  -5,   0,   0
.byte  0,   0,  -7,  47,  29,  -5,   0,   0
.byte  0,   0,  -6,  42,  33,  -5,   0,   0
.byte  0,   0,  -6,  38,  38,  -6,   0,   0
.byte  0,   0,  -5,  33,  42,  -6,   0,   0
.byte  0,   0,  -5,  29,  47,  -7,   0,   0
.byte  0,   0,  -5,  24,  51,  -6,   0,   0
.byte  0,   0,  -4,  19,  55,  -6,   0,   0
.byte  0,   0,  -3,  14,  58,  -5,   0,   0
.byte  0,   0,  -2,   9,  61,  -4,   0,   0
.byte  0,   0,  -1,   4,  63,  -2,   0,   0
.byte  0,   0,  15,  31,  17,   1,   0,   0 /* SMOOTH 4 */
.byte  0,   0,  13,  31,  18,   2,   0,   0
.byte  0,   0,  11,  31,  20,   2,   0,   0
.byte  0,   0,  10,  30,  21,   3,   0,   0
.byte  0,   0,   9,  29,  22,   4,   0,   0
.byte  0,   0,   8,  28,  23,   5,   0,   0
.byte  0,   0,   7,  27,  24,   6,   0,   0
.byte  0,   0,   6,  26,  26,   6,   0,   0
.byte  0,   0,   6,  24,  27,   7,   0,   0
.byte  0,   0,   5,  23,  28,   8,   0,   0
.byte  0,   0,   4,  22,  29,   9,   0,   0
.byte  0,   0,   3,  21,  30,  10,   0,   0
.byte  0,   0,   2,  20,  31,  11,   0,   0
.byte  0,   0,   2,  18,  31,  13,   0,   0
.byte  0,   0,   1,  17,  31,  15,   0,   0
/* Bilin scaled being very rarely used, add a new table entry
 * and use the put/prep_8tap_scaled code, thus acting as a
 * scaled bilinear filter. */
.byte  0,   0,   0,  60,   4,   0,   0,   0
.byte  0,   0,   0,  56,   8,   0,   0,   0
.byte  0,   0,   0,  52,  12,   0,   0,   0
.byte  0,   0,   0,  48,  16,   0,   0,   0
.byte  0,   0,   0,  44,  20,   0,   0,   0
.byte  0,   0,   0,  40,  24,   0,   0,   0
.byte  0,   0,   0,  36,  28,   0,   0,   0
.byte  0,   0,   0,  32,  32,   0,   0,   0
.byte  0,   0,   0,  28,  36,   0,   0,   0
.byte  0,   0,   0,  24,  40,   0,   0,   0
.byte  0,   0,   0,  20,  44,   0,   0,   0
.byte  0,   0,   0,  16,  48,   0,   0,   0
.byte  0,   0,   0,  12,  52,   0,   0,   0
.byte  0,   0,   0,   8,  56,   0,   0,   0
.byte  0,   0,   0,   4,  60,   0,   0,   0
endconst

const filter_intra_taps, export=1,  align=4
.byte  -6,  10,  -5,   2,  -3,   1,  -3,   1 /* 0 */
.byte  -4,   6,  -3,   2,  -3,   2,  -3,   1
.byte   0,   0,  10,   0,   1,  10,   1,   2
.byte   0,   0,   6,   0,   2,   6,   2,   2
.byte   0,  12,   0,   9,   0,   7,  10,   5
.byte   0,   2,   0,   2,   0,   2,   6,   3
.byte   0,   0,   0,   0,   0,   0,   0,   0
.byte  12,   0,   9,   0,   7,   0,   5,   0
.byte -10,  16,  -6,   0,  -4,   0,  -2,   0 /* 1 */
.byte -10,  16,  -6,   0,  -4,   0,  -2,   0
.byte   0,   0,  16,   0,   0,  16,   0,   0
.byte   0,   0,  16,   0,   0,  16,   0,   0
.byte   0,  10,   0,   6,   0,   4,  16,   2
.byte   0,   0,   0,   0,   0,   0,  16,   0
.byte   0,   0,   0,   0,   0,   0,   0,   0
.byte  10,   0,   6,   0,   4,   0,   2,   0
.byte  -8,   8,  -8,   0,  -8,   0,  -8,   0 /* 2 */
.byte  -4,   4,  -4,   0,  -4,   0,  -4,   0
.byte   0,   0,   8,   0,   0,   8,   0,   0
.byte   0,   0,   4,   0,   0,   4,   0,   0
.byte   0,  16,   0,  16,   0,  16,   8,  16
.byte   0,   0,   0,   0,   0,   0,   4,   0
.byte   0,   0,   0,   0,   0,   0,   0,   0
.byte  16,   0,  16,   0,  16,   0,  16,   0
.byte  -2,   8,  -1,   3,  -1,   2,   0,   1 /* 3 */
.byte  -1,   4,  -1,   3,  -1,   2,  -1,   2
.byte   0,   0,   8,   0,   3,   8,   2,   3
.byte   0,   0,   4,   0,   3,   4,   2,   3
.byte   0,  10,   0,   6,   0,   4,   8,   2
.byte   0,   3,   0,   4,   0,   4,   4,   3
.byte   0,   0,   0,   0,   0,   0,   0,   0
.byte  10,   0,   6,   0,   4,   0,   3,   0
.byte -12,  14, -10,   0,  -9,   0,  -8,   0 /* 4 */
.byte -10,  12,  -9,   1,  -8,   0,  -7,   0
.byte   0,   0,  14,   0,   0,  14,   0,   0
.byte   0,   0,  12,   0,   0,  12,   0,   1
.byte   0,  14,   0,  12,   0,  11,  14,  10
.byte   0,   0,   0,   0,   0,   1,  12,   1
.byte   0,   0,   0,   0,   0,   0,   0,   0
.byte  14,   0,  12,   0,  11,   0,   9,   0
endconst

const sgr_x_by_x, export=1, align=4
.byte 255, 128,  85,  64,  51,  43,  37,  32,  28,  26,  23,  21,  20,  18,  17
.byte  16,  15,  14,  13,  13,  12,  12,  11,  11,  10,  10,   9,   9,   9,   9
.byte   8,   8,   8,   8,   7,   7,   7,   7,   7,   6,   6,   6,   6,   6,   6
.byte   6,   5,   5,   5,   5,   5,   5,   5,   5,   5,   5,   4,   4,   4,   4
.byte   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   4,   3,   3
.byte   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3
.byte   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   3,   2,   2,   2
.byte   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2
.byte   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2
.byte   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2
.byte   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2,   2
.byte   2,   2,   2,   2,   2,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1,   1
.byte   0
endconst

const mc_warp_filter, export=1, align=3
/*  [-1, 0) */
.byte 0,   0, 127,   1,   0, 0, 0, 0,  0, - 1, 127,   2,   0, 0, 0, 0
.byte 1, - 3, 127,   4, - 1, 0, 0, 0,  1, - 4, 126,   6, - 2, 1, 0, 0
.byte 1, - 5, 126,   8, - 3, 1, 0, 0,  1, - 6, 125,  11, - 4, 1, 0, 0
.byte 1, - 7, 124,  13, - 4, 1, 0, 0,  2, - 8, 123,  15, - 5, 1, 0, 0
.byte 2, - 9, 122,  18, - 6, 1, 0, 0,  2, -10, 121,  20, - 6, 1, 0, 0
.byte 2, -11, 120,  22, - 7, 2, 0, 0,  2, -12, 119,  25, - 8, 2, 0, 0
.byte 3, -13, 117,  27, - 8, 2, 0, 0,  3, -13, 116,  29, - 9, 2, 0, 0
.byte 3, -14, 114,  32, -10, 3, 0, 0,  3, -15, 113,  35, -10, 2, 0, 0
.byte 3, -15, 111,  37, -11, 3, 0, 0,  3, -16, 109,  40, -11, 3, 0, 0
.byte 3, -16, 108,  42, -12, 3, 0, 0,  4, -17, 106,  45, -13, 3, 0, 0
.byte 4, -17, 104,  47, -13, 3, 0, 0,  4, -17, 102,  50, -14, 3, 0, 0
.byte 4, -17, 100,  52, -14, 3, 0, 0,  4, -18,  98,  55, -15, 4, 0, 0
.byte 4, -18,  96,  58, -15, 3, 0, 0,  4, -18,  94,  60, -16, 4, 0, 0
.byte 4, -18,  91,  63, -16, 4, 0, 0,  4, -18,  89,  65, -16, 4, 0, 0
.byte 4, -18,  87,  68, -17, 4, 0, 0,  4, -18,  85,  70, -17, 4, 0, 0
.byte 4, -18,  82,  73, -17, 4, 0, 0,  4, -18,  80,  75, -17, 4, 0, 0
.byte 4, -18,  78,  78, -18, 4, 0, 0,  4, -17,  75,  80, -18, 4, 0, 0
.byte 4, -17,  73,  82, -18, 4, 0, 0,  4, -17,  70,  85, -18, 4, 0, 0
.byte 4, -17,  68,  87, -18, 4, 0, 0,  4, -16,  65,  89, -18, 4, 0, 0
.byte 4, -16,  63,  91, -18, 4, 0, 0,  4, -16,  60,  94, -18, 4, 0, 0
.byte 3, -15,  58,  96, -18, 4, 0, 0,  4, -15,  55,  98, -18, 4, 0, 0
.byte 3, -14,  52, 100, -17, 4, 0, 0,  3, -14,  50, 102, -17, 4, 0, 0
.byte 3, -13,  47, 104, -17, 4, 0, 0,  3, -13,  45, 106, -17, 4, 0, 0
.byte 3, -12,  42, 108, -16, 3, 0, 0,  3, -11,  40, 109, -16, 3, 0, 0
.byte 3, -11,  37, 111, -15, 3, 0, 0,  2, -10,  35, 113, -15, 3, 0, 0
.byte 3, -10,  32, 114, -14, 3, 0, 0,  2, - 9,  29, 116, -13, 3, 0, 0
.byte 2, - 8,  27, 117, -13, 3, 0, 0,  2, - 8,  25, 119, -12, 2, 0, 0
.byte 2, - 7,  22, 120, -11, 2, 0, 0,  1, - 6,  20, 121, -10, 2, 0, 0
.byte 1, - 6,  18, 122, - 9, 2, 0, 0,  1, - 5,  15, 123, - 8, 2, 0, 0
.byte 1, - 4,  13, 124, - 7, 1, 0, 0,  1, - 4,  11, 125, - 6, 1, 0, 0
.byte 1, - 3,   8, 126, - 5, 1, 0, 0,  1, - 2,   6, 126, - 4, 1, 0, 0
.byte 0, - 1,   4, 127, - 3, 1, 0, 0,  0,   0,   2, 127, - 1, 0, 0, 0
/* [0, 1) */
.byte  0,  0,   0, 127,   1,   0,  0,  0,   0,  0,  -1, 127,   2,   0,  0,  0
.byte  0,  1,  -3, 127,   4,  -2,  1,  0,   0,  1,  -5, 127,   6,  -2,  1,  0
.byte  0,  2,  -6, 126,   8,  -3,  1,  0,  -1,  2,  -7, 126,  11,  -4,  2, -1
.byte -1,  3,  -8, 125,  13,  -5,  2, -1,  -1,  3, -10, 124,  16,  -6,  3, -1
.byte -1,  4, -11, 123,  18,  -7,  3, -1,  -1,  4, -12, 122,  20,  -7,  3, -1
.byte -1,  4, -13, 121,  23,  -8,  3, -1,  -2,  5, -14, 120,  25,  -9,  4, -1
.byte -1,  5, -15, 119,  27, -10,  4, -1,  -1,  5, -16, 118,  30, -11,  4, -1
.byte -2,  6, -17, 116,  33, -12,  5, -1,  -2,  6, -17, 114,  35, -12,  5, -1
.byte -2,  6, -18, 113,  38, -13,  5, -1,  -2,  7, -19, 111,  41, -14,  6, -2
.byte -2,  7, -19, 110,  43, -15,  6, -2,  -2,  7, -20, 108,  46, -15,  6, -2
.byte -2,  7, -20, 106,  49, -16,  6, -2,  -2,  7, -21, 104,  51, -16,  7, -2
.byte -2,  7, -21, 102,  54, -17,  7, -2,  -2,  8, -21, 100,  56, -18,  7, -2
.byte -2,  8, -22,  98,  59, -18,  7, -2,  -2,  8, -22,  96,  62, -19,  7, -2
.byte -2,  8, -22,  94,  64, -19,  7, -2,  -2,  8, -22,  91,  67, -20,  8, -2
.byte -2,  8, -22,  89,  69, -20,  8, -2,  -2,  8, -22,  87,  72, -21,  8, -2
.byte -2,  8, -21,  84,  74, -21,  8, -2,  -2,  8, -22,  82,  77, -21,  8, -2
.byte -2,  8, -21,  79,  79, -21,  8, -2,  -2,  8, -21,  77,  82, -22,  8, -2
.byte -2,  8, -21,  74,  84, -21,  8, -2,  -2,  8, -21,  72,  87, -22,  8, -2
.byte -2,  8, -20,  69,  89, -22,  8, -2,  -2,  8, -20,  67,  91, -22,  8, -2
.byte -2,  7, -19,  64,  94, -22,  8, -2,  -2,  7, -19,  62,  96, -22,  8, -2
.byte -2,  7, -18,  59,  98, -22,  8, -2,  -2,  7, -18,  56, 100, -21,  8, -2
.byte -2,  7, -17,  54, 102, -21,  7, -2,  -2,  7, -16,  51, 104, -21,  7, -2
.byte -2,  6, -16,  49, 106, -20,  7, -2,  -2,  6, -15,  46, 108, -20,  7, -2
.byte -2,  6, -15,  43, 110, -19,  7, -2,  -2,  6, -14,  41, 111, -19,  7, -2
.byte -1,  5, -13,  38, 113, -18,  6, -2,  -1,  5, -12,  35, 114, -17,  6, -2
.byte -1,  5, -12,  33, 116, -17,  6, -2,  -1,  4, -11,  30, 118, -16,  5, -1
.byte -1,  4, -10,  27, 119, -15,  5, -1,  -1,  4,  -9,  25, 120, -14,  5, -2
.byte -1,  3,  -8,  23, 121, -13,  4, -1,  -1,  3,  -7,  20, 122, -12,  4, -1
.byte -1,  3,  -7,  18, 123, -11,  4, -1,  -1,  3,  -6,  16, 124, -10,  3, -1
.byte -1,  2,  -5,  13, 125,  -8,  3, -1,  -1,  2,  -4,  11, 126,  -7,  2, -1
.byte  0,  1,  -3,   8, 126,  -6,  2,  0,   0,  1,  -2,   6, 127,  -5,  1,  0
.byte  0,  1,  -2,   4, 127,  -3,  1,  0,   0,  0,   0,   2, 127,  -1,  0,  0
/* [1, 2) */
.byte 0, 0, 0,   1, 127,   0,   0, 0,  0, 0, 0, - 1, 127,   2,   0, 0
.byte 0, 0, 1, - 3, 127,   4, - 1, 0,  0, 0, 1, - 4, 126,   6, - 2, 1
.byte 0, 0, 1, - 5, 126,   8, - 3, 1,  0, 0, 1, - 6, 125,  11, - 4, 1
.byte 0, 0, 1, - 7, 124,  13, - 4, 1,  0, 0, 2, - 8, 123,  15, - 5, 1
.byte 0, 0, 2, - 9, 122,  18, - 6, 1,  0, 0, 2, -10, 121,  20, - 6, 1
.byte 0, 0, 2, -11, 120,  22, - 7, 2,  0, 0, 2, -12, 119,  25, - 8, 2
.byte 0, 0, 3, -13, 117,  27, - 8, 2,  0, 0, 3, -13, 116,  29, - 9, 2
.byte 0, 0, 3, -14, 114,  32, -10, 3,  0, 0, 3, -15, 113,  35, -10, 2
.byte 0, 0, 3, -15, 111,  37, -11, 3,  0, 0, 3, -16, 109,  40, -11, 3
.byte 0, 0, 3, -16, 108,  42, -12, 3,  0, 0, 4, -17, 106,  45, -13, 3
.byte 0, 0, 4, -17, 104,  47, -13, 3,  0, 0, 4, -17, 102,  50, -14, 3
.byte 0, 0, 4, -17, 100,  52, -14, 3,  0, 0, 4, -18,  98,  55, -15, 4
.byte 0, 0, 4, -18,  96,  58, -15, 3,  0, 0, 4, -18,  94,  60, -16, 4
.byte 0, 0, 4, -18,  91,  63, -16, 4,  0, 0, 4, -18,  89,  65, -16, 4
.byte 0, 0, 4, -18,  87,  68, -17, 4,  0, 0, 4, -18,  85,  70, -17, 4
.byte 0, 0, 4, -18,  82,  73, -17, 4,  0, 0, 4, -18,  80,  75, -17, 4
.byte 0, 0, 4, -18,  78,  78, -18, 4,  0, 0, 4, -17,  75,  80, -18, 4
.byte 0, 0, 4, -17,  73,  82, -18, 4,  0, 0, 4, -17,  70,  85, -18, 4
.byte 0, 0, 4, -17,  68,  87, -18, 4,  0, 0, 4, -16,  65,  89, -18, 4
.byte 0, 0, 4, -16,  63,  91, -18, 4,  0, 0, 4, -16,  60,  94, -18, 4
.byte 0, 0, 3, -15,  58,  96, -18, 4,  0, 0, 4, -15,  55,  98, -18, 4
.byte 0, 0, 3, -14,  52, 100, -17, 4,  0, 0, 3, -14,  50, 102, -17, 4
.byte 0, 0, 3, -13,  47, 104, -17, 4,  0, 0, 3, -13,  45, 106, -17, 4
.byte 0, 0, 3, -12,  42, 108, -16, 3,  0, 0, 3, -11,  40, 109, -16, 3
.byte 0, 0, 3, -11,  37, 111, -15, 3,  0, 0, 2, -10,  35, 113, -15, 3
.byte 0, 0, 3, -10,  32, 114, -14, 3,  0, 0, 2, - 9,  29, 116, -13, 3
.byte 0, 0, 2, - 8,  27, 117, -13, 3,  0, 0, 2, - 8,  25, 119, -12, 2
.byte 0, 0, 2, - 7,  22, 120, -11, 2,  0, 0, 1, - 6,  20, 121, -10, 2
.byte 0, 0, 1, - 6,  18, 122, - 9, 2,  0, 0, 1, - 5,  15, 123, - 8, 2
.byte 0, 0, 1, - 4,  13, 124, - 7, 1,  0, 0, 1, - 4,  11, 125, - 6, 1
.byte 0, 0, 1, - 3,   8, 126, - 5, 1,  0, 0, 1, - 2,   6, 126, - 4, 1
.byte 0, 0, 0, - 1,   4, 127, - 3, 1,  0, 0, 0,   0,   2, 127, - 1, 0
/* dummy (replicate row index 191) */
.byte 0, 0, 0,   0,   2, 127, - 1, 0
endconst

const sm_weights, export=1
.byte   0,   0 /* Unused, because we always offset by bs, which is at least 2. */
.byte 255, 128 /* bs = 2 */
.byte 255, 149,  85,  64 /* bs = 4 */
.byte 255, 197, 146, 105,  73,  50,  37,  32 /* bs = 8 */
.byte 255, 225, 196, 170, 145, 123, 102,  84 /* bs = 16 */
.byte  68,  54,  43,  33,  26,  20,  17,  16
.byte 255, 240, 225, 210, 196, 182, 169, 157 /* bs =32 */
.byte 145, 133, 122, 111, 101,  92,  83,  74
.byte  66,  59,  52,  45,  39,  34,  29,  25
.byte  21,  17,  14,  12,  10,   9,   8,   8
.byte 255, 248, 240, 233, 225, 218, 210, 203 /* bs = 64 */
.byte 196, 189, 182, 176, 169, 163, 156, 150
.byte 144, 138, 133, 127, 121, 116, 111, 106
.byte 101,  96,  91,  86,  82,  77,  73,  69
.byte  65,  61,  57,  54,  50,  47,  44,  41
.byte  38,  35,  32,  29,  27,  25,  22,  20
.byte  18,  16,  15,  13,  12,  10,   9,   8
.byte   7,   6,   6,   5,   5,   4,   4,   4
endconst

const obmc_masks, export=1, align=4
.byte  0,  0 /* Unused */
.byte 19,  0 /* 2 */
.byte 25, 14,  5,  0 /* 4 */
.byte 28, 22, 16, 11,  7,  3,  0,  0 /* 8 */
.byte 30, 27, 24, 21, 18, 15, 12, 10
.byte  8,  6,  4,  3,  0,  0,  0,  0 /* 16 */
.byte 31, 29, 28, 26, 24, 23, 21, 20
.byte 19, 17, 16, 14, 13, 12, 11,  9
.byte  8,  7,  6,  5,  4,  4,  3,  2
.byte  0,  0,  0,  0,  0,  0,  0,  0 /* 32 */
endconst