From e4c4af02f3de5e6cea6f81272a2981c0fa7bae28 Mon Sep 17 00:00:00 2001 From: Henrik Gramner Date: Fri, 30 Sep 2022 00:11:29 +0200 Subject: Specify hidden visibility for global data symbol declarations '-fvisibility=hidden' only applies to definitions, not declarations, so the compiler has to be conservative about how references to global data symbols are performed. Explicitly specifying the visibility allows for better code generation. --- include/common/attributes.h | 6 +++++ src/cpu.h | 4 +-- src/dequant_tables.h | 2 +- src/qm.h | 2 +- src/scan.h | 2 +- src/tables.h | 60 ++++++++++++++++++++++----------------------- src/wedge.h | 4 +-- 7 files changed, 43 insertions(+), 37 deletions(-) diff --git a/include/common/attributes.h b/include/common/attributes.h index ba04fcb..2af42ef 100644 --- a/include/common/attributes.h +++ b/include/common/attributes.h @@ -113,6 +113,12 @@ #define ALWAYS_INLINE __attribute__((always_inline)) inline #endif +#if (defined(__ELF__) || defined(__MACH__) || (defined(_WIN32) && defined(__clang__))) && __has_attribute(visibility) +#define EXTERN extern __attribute__((visibility("hidden"))) +#else +#define EXTERN extern +#endif + #ifdef __clang__ #define NO_SANITIZE(x) __attribute__((no_sanitize(x))) #else diff --git a/src/cpu.h b/src/cpu.h index 68fbaec..8f70fef 100644 --- a/src/cpu.h +++ b/src/cpu.h @@ -43,8 +43,8 @@ #include "src/x86/cpu.h" #endif -extern unsigned dav1d_cpu_flags; -extern unsigned dav1d_cpu_flags_mask; +EXTERN unsigned dav1d_cpu_flags; +EXTERN unsigned dav1d_cpu_flags_mask; void dav1d_init_cpu(void); DAV1D_API void dav1d_set_cpu_flags_mask(unsigned mask); diff --git a/src/dequant_tables.h b/src/dequant_tables.h index 4f55595..1776337 100644 --- a/src/dequant_tables.h +++ b/src/dequant_tables.h @@ -32,6 +32,6 @@ #include "src/levels.h" -extern const uint16_t dav1d_dq_tbl[3][QINDEX_RANGE][2]; +EXTERN const uint16_t dav1d_dq_tbl[3][QINDEX_RANGE][2]; #endif /* DAV1D_SRC_DEQUANT_TABLES_H */ diff --git a/src/qm.h b/src/qm.h index 23b2348..8191c8a 100644 --- a/src/qm.h +++ b/src/qm.h @@ -30,7 +30,7 @@ #include "src/levels.h" -extern const uint8_t *dav1d_qm_tbl[16][2][N_RECT_TX_SIZES]; +EXTERN const uint8_t *dav1d_qm_tbl[16][2][N_RECT_TX_SIZES]; void dav1d_init_qm_tables(void); diff --git a/src/scan.h b/src/scan.h index ca9743f..09df988 100644 --- a/src/scan.h +++ b/src/scan.h @@ -32,6 +32,6 @@ #include "src/levels.h" -extern const uint16_t *const dav1d_scans[N_RECT_TX_SIZES]; +EXTERN const uint16_t *const dav1d_scans[N_RECT_TX_SIZES]; #endif /* DAV1D_SRC_SCAN_H */ diff --git a/src/tables.h b/src/tables.h index 894f8c2..f3c00cf 100644 --- a/src/tables.h +++ b/src/tables.h @@ -34,38 +34,38 @@ #include "src/levels.h" -extern const uint8_t dav1d_al_part_ctx[2][N_BL_LEVELS][N_PARTITIONS]; -extern const uint8_t /* enum BlockSize */ +EXTERN const uint8_t dav1d_al_part_ctx[2][N_BL_LEVELS][N_PARTITIONS]; +EXTERN const uint8_t /* enum BlockSize */ dav1d_block_sizes[N_BL_LEVELS][N_PARTITIONS][2]; // width, height (in 4px blocks), log2 versions of these two -extern const uint8_t dav1d_block_dimensions[N_BS_SIZES][4]; +EXTERN const uint8_t dav1d_block_dimensions[N_BS_SIZES][4]; typedef struct TxfmInfo { // width, height (in 4px blocks), log2 of them, min/max of log2, sub, pad uint8_t w, h, lw, lh, min, max, sub, ctx; } TxfmInfo; -extern const TxfmInfo dav1d_txfm_dimensions[N_RECT_TX_SIZES]; -extern const uint8_t /* enum (Rect)TxfmSize */ +EXTERN const TxfmInfo dav1d_txfm_dimensions[N_RECT_TX_SIZES]; +EXTERN const uint8_t /* enum (Rect)TxfmSize */ dav1d_max_txfm_size_for_bs[N_BS_SIZES][4 /* y, 420, 422, 444 */]; -extern const uint8_t /* enum TxfmType */ +EXTERN const uint8_t /* enum TxfmType */ dav1d_txtp_from_uvmode[N_UV_INTRA_PRED_MODES]; -extern const uint8_t /* enum InterPredMode */ +EXTERN const uint8_t /* enum InterPredMode */ dav1d_comp_inter_pred_modes[N_COMP_INTER_PRED_MODES][2]; -extern const uint8_t dav1d_partition_type_count[N_BL_LEVELS]; -extern const uint8_t /* enum TxfmType */ dav1d_tx_types_per_set[40]; +EXTERN const uint8_t dav1d_partition_type_count[N_BL_LEVELS]; +EXTERN const uint8_t /* enum TxfmType */ dav1d_tx_types_per_set[40]; -extern const uint8_t dav1d_filter_mode_to_y_mode[5]; -extern const uint8_t dav1d_ymode_size_context[N_BS_SIZES]; -extern const uint8_t dav1d_lo_ctx_offsets[3][5][5]; -extern const uint8_t dav1d_skip_ctx[5][5]; -extern const uint8_t /* enum TxClass */ +EXTERN const uint8_t dav1d_filter_mode_to_y_mode[5]; +EXTERN const uint8_t dav1d_ymode_size_context[N_BS_SIZES]; +EXTERN const uint8_t dav1d_lo_ctx_offsets[3][5][5]; +EXTERN const uint8_t dav1d_skip_ctx[5][5]; +EXTERN const uint8_t /* enum TxClass */ dav1d_tx_type_class[N_TX_TYPES_PLUS_LL]; -extern const uint8_t /* enum Filter2d */ +EXTERN const uint8_t /* enum Filter2d */ dav1d_filter_2d[DAV1D_N_FILTERS /* h */][DAV1D_N_FILTERS /* v */]; -extern const uint8_t /* enum Dav1dFilterMode */ dav1d_filter_dir[N_2D_FILTERS][2]; -extern const uint8_t dav1d_intra_mode_context[N_INTRA_PRED_MODES]; -extern const uint8_t dav1d_wedge_ctx_lut[N_BS_SIZES]; +EXTERN const uint8_t /* enum Dav1dFilterMode */ dav1d_filter_dir[N_2D_FILTERS][2]; +EXTERN const uint8_t dav1d_intra_mode_context[N_INTRA_PRED_MODES]; +EXTERN const uint8_t dav1d_wedge_ctx_lut[N_BS_SIZES]; static const unsigned cfl_allowed_mask = (1 << BS_32x32) | @@ -103,23 +103,23 @@ static const unsigned interintra_allowed_mask = (1 << BS_8x16) | (1 << BS_8x8); -extern const Dav1dWarpedMotionParams dav1d_default_wm_params; +EXTERN const Dav1dWarpedMotionParams dav1d_default_wm_params; -extern const int8_t dav1d_cdef_directions[12][2]; +EXTERN const int8_t dav1d_cdef_directions[12][2]; -extern const uint16_t dav1d_sgr_params[16][2]; -extern const uint8_t dav1d_sgr_x_by_x[256]; +EXTERN const uint16_t dav1d_sgr_params[16][2]; +EXTERN const uint8_t dav1d_sgr_x_by_x[256]; -extern const int8_t dav1d_mc_subpel_filters[6][15][8]; -extern const int8_t dav1d_mc_warp_filter[193][8]; -extern const int8_t dav1d_resize_filter[64][8]; +EXTERN const int8_t dav1d_mc_subpel_filters[6][15][8]; +EXTERN const int8_t dav1d_mc_warp_filter[193][8]; +EXTERN const int8_t dav1d_resize_filter[64][8]; -extern const uint8_t dav1d_sm_weights[128]; -extern const uint16_t dav1d_dr_intra_derivative[44]; -extern const int8_t dav1d_filter_intra_taps[5][64]; +EXTERN const uint8_t dav1d_sm_weights[128]; +EXTERN const uint16_t dav1d_dr_intra_derivative[44]; +EXTERN const int8_t dav1d_filter_intra_taps[5][64]; -extern const uint8_t dav1d_obmc_masks[64]; +EXTERN const uint8_t dav1d_obmc_masks[64]; -extern const int16_t dav1d_gaussian_sequence[2048]; // for fgs +EXTERN const int16_t dav1d_gaussian_sequence[2048]; // for fgs #endif /* DAV1D_SRC_TABLES_H */ diff --git a/src/wedge.h b/src/wedge.h index 45f0570..586be98 100644 --- a/src/wedge.h +++ b/src/wedge.h @@ -31,11 +31,11 @@ #include "src/levels.h" void dav1d_init_wedge_masks(void); -extern const uint8_t *dav1d_wedge_masks[N_BS_SIZES][3 /* 444/luma, 422, 420 */] +EXTERN const uint8_t *dav1d_wedge_masks[N_BS_SIZES][3 /* 444/luma, 422, 420 */] [2 /* sign */][16 /* wedge_idx */]; void dav1d_init_interintra_masks(void); -extern const uint8_t *dav1d_ii_masks[N_BS_SIZES][3 /* 444/luma, 422, 420 */] +EXTERN const uint8_t *dav1d_ii_masks[N_BS_SIZES][3 /* 444/luma, 422, 420 */] [N_INTER_INTRA_PRED_MODES]; #endif /* DAV1D_SRC_WEDGE_H */ -- cgit v1.2.3