diff --git a/include/common/attributes.h b/include/common/attributes.h index c8758c19aef74ca721c700ac1d4a995d01a9ab19..c6cecc7acabe81f30705b573bf6a02f1a840c886 100644 --- a/include/common/attributes.h +++ b/include/common/attributes.h @@ -123,6 +123,12 @@ #define EXTERN extern #endif +#if ARCH_X86_64 && __has_attribute(model) +#define ATTR_MCMODEL_SMALL __attribute__((model("small"))) +#else +#define ATTR_MCMODEL_SMALL +#endif + #ifdef __clang__ #define NO_SANITIZE(x) __attribute__((no_sanitize(x))) #else diff --git a/src/tables.c b/src/tables.c index 9752f15c40df2057b2910ae86f754013fe480453..524864c4fadd83c4906d217895216a0d2742aae8 100644 --- a/src/tables.c +++ b/src/tables.c @@ -419,6 +419,7 @@ const uint16_t ALIGN(dav1d_sgr_params[16][2], 4) = { { 0, 1177 }, { 0, 925 }, { 56, 0 }, { 22, 0 }, }; +ATTR_MCMODEL_SMALL const uint8_t ALIGN(dav1d_sgr_x_by_x[256], 64) = { 255, 128, 85, 64, 51, 43, 37, 32, 28, 26, 23, 21, 20, 18, 17, 16, 15, 14, 13, 13, 12, 12, 11, 11, 10, 10, 9, 9, 9, 9, @@ -440,6 +441,7 @@ const uint8_t ALIGN(dav1d_sgr_x_by_x[256], 64) = { 0 }; +ATTR_MCMODEL_SMALL const int8_t ALIGN(dav1d_mc_subpel_filters[6][15][8], 8) = { [DAV1D_FILTER_8TAP_REGULAR] = { { 0, 1, -3, 63, 4, -1, 0, 0 }, @@ -544,6 +546,7 @@ const int8_t ALIGN(dav1d_mc_subpel_filters[6][15][8], 8) = { } }; +ATTR_MCMODEL_SMALL const int8_t ALIGN(dav1d_mc_warp_filter[193][8], 8) = { // [-1, 0) { 0, 0, 127, 1, 0, 0, 0, 0 }, { 0, -1, 127, 2, 0, 0, 0, 0 }, @@ -648,6 +651,7 @@ const int8_t ALIGN(dav1d_mc_warp_filter[193][8], 8) = { { 0, 0, 0, 0, 2, 127, -1, 0 }, }; +ATTR_MCMODEL_SMALL const int8_t ALIGN(dav1d_resize_filter[64][8], 8) = { { 0, 0, 0, -128, 0, 0, 0, 0 }, { 0, 0, 1, -128, -2, 1, 0, 0 }, { 0, -1, 3, -127, -4, 2, -1, 0 }, { 0, -1, 4, -127, -6, 3, -1, 0 }, @@ -711,6 +715,7 @@ const uint8_t ALIGN(dav1d_sm_weights[128], 16) = { 7, 6, 6, 5, 5, 4, 4, 4 }; +ATTR_MCMODEL_SMALL const uint16_t dav1d_dr_intra_derivative[44] = { // Values that are 0 will never be used 0, // Angles: @@ -756,6 +761,7 @@ const uint16_t dav1d_dr_intra_derivative[44] = { [1*idx+32] = f4, [1*idx+40] = f5, \ [1*idx+48] = f6 #endif +ATTR_MCMODEL_SMALL const int8_t ALIGN(dav1d_filter_intra_taps[5][64], 64) = { { F( 0, -6, 10, 0, 0, 0, 12, 0 ), @@ -822,6 +828,7 @@ const uint8_t ALIGN(dav1d_obmc_masks[64], 16) = { }; // Taken from the spec. Range is [-2048, 2047], mean is 0 and stddev is 512 +ATTR_MCMODEL_SMALL const int16_t dav1d_gaussian_sequence[2048] = { 56, 568, -180, 172, 124, -84, 172, -64, -900, 24, 820, 224, 1248, 996, 272, -8, -916, -388, -732, -104, -188, 800,