History

avcodec/x86/hevc/dsp_init: Make ff_hevc_put_bi_[eq]?pel* funcs static

Given that there are actually ASM functions of this type, one can't simply remove the ff_ prefix from the definitions and declare them as static. Yet one can do nearly that if one keeps the ff_ prefix and removes the declarations for the (now static) functions defined in dsp_init.c from hevcdsp.h and if one defines the functions in the correct order (smaller width first) so that no forward declarations are necessary (which was already true). The new declarations avoid nested macros to simplify things. It nevertheless turned out to be beneficial line-wise. (It would be possible to avoid most of these declarations: It is legal to repeat a function declaration without static if the first declaration declared a function as static. So if the macros simply declared all the functions that they call, one could avoid declarations for the functions that are called. While this is legal C, it unfortuntaly clashes with GCC's -Wredundant-decls (which configure enables) and it is also ugly, as these macro definitions would provide declarations used in ff_hevc_dsp_init_x86().)

Andreas Rheinhardt committed 1 year ago

Commit 6875f491 parent 9211abf2 files · +95 −137Browse files

Unified · Split

2 files
  1. libavcodec/x86/hevc/dsp_init.c +4 −4
  2. libavcodec/x86/hevcdsp.h +91 −133
libavcodec/x86/hevc/dsp_init.c+4−4
@@ -217,7 +217,7 @@ static void hevc_put_uni_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dst · 216 unmodified lines
217 } \217 } \
218}218}
219#define mc_rep_bi_func(name, bitd, step, W, opt) \219#define mc_rep_bi_func(name, bitd, step, W, opt) \
220void ff_hevc_put_bi_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dststride, const uint8_t *_src, \220static void ff_hevc_put_bi_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dststride, const uint8_t *_src, \
221 ptrdiff_t _srcstride, const int16_t *_src2, \221 ptrdiff_t _srcstride, const int16_t *_src2, \
222 int height, intptr_t mx, intptr_t my, int width) \222 int height, intptr_t mx, intptr_t my, int width) \
223{ \223{ \
@@ -257,7 +257,7 @@ static void hevc_put_uni_##name##W##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dsts · 33 unmodified lines
257 height, mx, my, width); \257 height, mx, my, width); \
258}258}
259#define mc_rep_bi_func2(name, bitd, step1, step2, W, opt) \259#define mc_rep_bi_func2(name, bitd, step1, step2, W, opt) \
260void ff_hevc_put_bi_##name##W##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \260static void ff_hevc_put_bi_##name##W##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \
261 ptrdiff_t _srcstride, const int16_t *src2, \261 ptrdiff_t _srcstride, const int16_t *src2, \
262 int height, intptr_t mx, intptr_t my, int width) \262 int height, intptr_t mx, intptr_t my, int width) \
263{ \263{ \
@@ -284,7 +284,7 @@ static void hevc_put_##name##width1##_10_##opt1(int16_t *dst, const uint8_t *src · 20 unmodified lines
284}284}
285 285
286#define mc_bi_rep_mix_10(name, width1, width2, width3, opt1, opt2, width4) \286#define mc_bi_rep_mix_10(name, width1, width2, width3, opt1, opt2, width4) \
287void ff_hevc_put_bi_##name##width1##_10_##opt1(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \287static void ff_hevc_put_bi_##name##width1##_10_##opt1(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \
288 ptrdiff_t _srcstride, const int16_t *src2, \288 ptrdiff_t _srcstride, const int16_t *src2, \
289 int height, intptr_t mx, intptr_t my, int width) \289 int height, intptr_t mx, intptr_t my, int width) \
290{ \290{ \
@@ -320,7 +320,7 @@ static void hevc_put_##name##width1##_8_##opt1(int16_t *dst, const uint8_t *src, · 29 unmodified lines
320}320}
321 321
322#define mc_bi_rep_mix_8(name, width1, width2, width3, opt1, opt2) \322#define mc_bi_rep_mix_8(name, width1, width2, width3, opt1, opt2) \
323void ff_hevc_put_bi_##name##width1##_8_##opt1(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \323static void ff_hevc_put_bi_##name##width1##_8_##opt1(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \
324 ptrdiff_t _srcstride, const int16_t *src2, \324 ptrdiff_t _srcstride, const int16_t *src2, \
325 int height, intptr_t mx, intptr_t my, int width) \325 int height, intptr_t mx, intptr_t my, int width) \
326{ \326{ \
libavcodec/x86/hevcdsp.h+91−133
@@ -37,35 +37,17 @@ dst ## _uni_w[idx1][idx2][idx3] = hevc_put_uni_w_ ## name ## _ ## D ## _##opt; · 36 unmodified lines
37dst ## _bi_w[idx1][idx2][idx3] = hevc_put_bi_w_ ## name ## _ ## D ## _##opt37dst ## _bi_w[idx1][idx2][idx3] = hevc_put_bi_w_ ## name ## _ ## D ## _##opt
38 38
39 39
40#define PEL_PROTOTYPE(name, D, opt) \40typedef void bi_pel_func(uint8_t *_dst, ptrdiff_t _dststride,
41void ff_hevc_put_bi_ ## name ## _ ## D ## _##opt(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width); \41 const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2,
42 int height, intptr_t mx, intptr_t my, int width);
42 43
44#define BI_PEL_PROTOTYPE(name, W, D, opt) \
45bi_pel_func ff_hevc_put_bi_ ## name ## W ## _ ## D ## _##opt
43 46
44///////////////////////////////////////////////////////////////////////////////47///////////////////////////////////////////////////////////////////////////////
45// MC functions48// MC functions
46///////////////////////////////////////////////////////////////////////////////49///////////////////////////////////////////////////////////////////////////////
47 50
48#define EPEL_PROTOTYPES(fname, bitd, opt) \
49 PEL_PROTOTYPE(fname##4, bitd, opt); \
50 PEL_PROTOTYPE(fname##6, bitd, opt); \
51 PEL_PROTOTYPE(fname##8, bitd, opt); \
52 PEL_PROTOTYPE(fname##12, bitd, opt); \
53 PEL_PROTOTYPE(fname##16, bitd, opt); \
54 PEL_PROTOTYPE(fname##24, bitd, opt); \
55 PEL_PROTOTYPE(fname##32, bitd, opt); \
56 PEL_PROTOTYPE(fname##48, bitd, opt); \
57 PEL_PROTOTYPE(fname##64, bitd, opt)
58
59#define QPEL_PROTOTYPES(fname, bitd, opt) \
60 PEL_PROTOTYPE(fname##4, bitd, opt); \
61 PEL_PROTOTYPE(fname##8, bitd, opt); \
62 PEL_PROTOTYPE(fname##12, bitd, opt); \
63 PEL_PROTOTYPE(fname##16, bitd, opt); \
64 PEL_PROTOTYPE(fname##24, bitd, opt); \
65 PEL_PROTOTYPE(fname##32, bitd, opt); \
66 PEL_PROTOTYPE(fname##48, bitd, opt); \
67 PEL_PROTOTYPE(fname##64, bitd, opt)
68
69#define WEIGHTING_PROTOTYPE(width, bitd, opt) \51#define WEIGHTING_PROTOTYPE(width, bitd, opt) \
70void ff_hevc_put_uni_w##width##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const int16_t *_src, int height, int denom, int _wx, int _ox); \52void ff_hevc_put_uni_w##width##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const int16_t *_src, int height, int denom, int _wx, int _ox); \
71void ff_hevc_put_bi_w##width##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const int16_t *_src, const int16_t *_src2, int height, int denom, int _wx0, int _wx1, int _ox0, int _ox1)53void ff_hevc_put_bi_w##width##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, const int16_t *_src, const int16_t *_src2, int height, int denom, int _wx0, int _wx1, int _ox0, int _ox1)
@@ -83,125 +65,101 @@ void ff_hevc_put_bi_w##width##_##bitd##_##opt(uint8_t *dst, ptrdiff_t dststride, · 11 unmodified lines
83 65
84 66
85///////////////////////////////////////////////////////////////////////////////67///////////////////////////////////////////////////////////////////////////////
86// QPEL_PIXELS EPEL_PIXELS68// EPEL_PIXELS
87///////////////////////////////////////////////////////////////////////////////69///////////////////////////////////////////////////////////////////////////////
88EPEL_PROTOTYPES(pel_pixels , 8, sse4);70
89EPEL_PROTOTYPES(pel_pixels , 10, sse4);71BI_PEL_PROTOTYPE(pel_pixels, 4, 8, sse4);
90EPEL_PROTOTYPES(pel_pixels , 12, sse4);72BI_PEL_PROTOTYPE(pel_pixels, 4, 10, sse4);
91 73BI_PEL_PROTOTYPE(pel_pixels, 4, 12, sse4);
92void ff_hevc_put_bi_pel_pixels16_8_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);74BI_PEL_PROTOTYPE(pel_pixels, 6, 8, sse4);
93void ff_hevc_put_bi_pel_pixels24_8_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);75BI_PEL_PROTOTYPE(pel_pixels, 6, 10, sse4);
94void ff_hevc_put_bi_pel_pixels32_8_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);76BI_PEL_PROTOTYPE(pel_pixels, 6, 12, sse4);
95void ff_hevc_put_bi_pel_pixels48_8_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);77BI_PEL_PROTOTYPE(pel_pixels, 8, 8, sse4);
96void ff_hevc_put_bi_pel_pixels64_8_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);78BI_PEL_PROTOTYPE(pel_pixels, 8, 10, sse4);
97 79BI_PEL_PROTOTYPE(pel_pixels, 8, 12, sse4);
98void ff_hevc_put_bi_pel_pixels16_10_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);80BI_PEL_PROTOTYPE(pel_pixels, 12, 8, sse4);
99void ff_hevc_put_bi_pel_pixels24_10_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);81BI_PEL_PROTOTYPE(pel_pixels, 16, 8, sse4);
100void ff_hevc_put_bi_pel_pixels32_10_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);82BI_PEL_PROTOTYPE(pel_pixels, 16, 10, avx2);
101void ff_hevc_put_bi_pel_pixels48_10_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);83BI_PEL_PROTOTYPE(pel_pixels, 32, 8, avx2);
102void ff_hevc_put_bi_pel_pixels64_10_avx2(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width);
103 84
104///////////////////////////////////////////////////////////////////////////////85///////////////////////////////////////////////////////////////////////////////
105// EPEL86// EPEL
106///////////////////////////////////////////////////////////////////////////////87///////////////////////////////////////////////////////////////////////////////
107EPEL_PROTOTYPES(epel_h , 8, sse4);88
108EPEL_PROTOTYPES(epel_h , 10, sse4);89BI_PEL_PROTOTYPE(epel_h, 4, 8, sse4);
109EPEL_PROTOTYPES(epel_h , 12, sse4);90BI_PEL_PROTOTYPE(epel_h, 4, 10, sse4);
110 91BI_PEL_PROTOTYPE(epel_h, 4, 12, sse4);
111EPEL_PROTOTYPES(epel_v , 8, sse4);92BI_PEL_PROTOTYPE(epel_h, 6, 8, sse4);
112EPEL_PROTOTYPES(epel_v , 10, sse4);93BI_PEL_PROTOTYPE(epel_h, 6, 10, sse4);
113EPEL_PROTOTYPES(epel_v , 12, sse4);94BI_PEL_PROTOTYPE(epel_h, 6, 12, sse4);
114 95BI_PEL_PROTOTYPE(epel_h, 8, 8, sse4);
115EPEL_PROTOTYPES(epel_hv , 8, sse4);96BI_PEL_PROTOTYPE(epel_h, 8, 10, sse4);
116EPEL_PROTOTYPES(epel_hv , 10, sse4);97BI_PEL_PROTOTYPE(epel_h, 8, 12, sse4);
117EPEL_PROTOTYPES(epel_hv , 12, sse4);98BI_PEL_PROTOTYPE(epel_h, 12, 8, sse4);
118 99BI_PEL_PROTOTYPE(epel_h, 16, 8, sse4);
119PEL_PROTOTYPE(epel_h16, 8, avx2);100BI_PEL_PROTOTYPE(epel_h, 16, 10, avx2);
120PEL_PROTOTYPE(epel_h24, 8, avx2);101BI_PEL_PROTOTYPE(epel_h, 32, 8, avx2);
121PEL_PROTOTYPE(epel_h32, 8, avx2);102
122PEL_PROTOTYPE(epel_h48, 8, avx2);103BI_PEL_PROTOTYPE(epel_hv, 4, 8, sse4);
123PEL_PROTOTYPE(epel_h64, 8, avx2);104BI_PEL_PROTOTYPE(epel_hv, 4, 10, sse4);
124 105BI_PEL_PROTOTYPE(epel_hv, 4, 12, sse4);
125PEL_PROTOTYPE(epel_h16,10, avx2);106BI_PEL_PROTOTYPE(epel_hv, 6, 8, sse4);
126PEL_PROTOTYPE(epel_h24,10, avx2);107BI_PEL_PROTOTYPE(epel_hv, 6, 10, sse4);
127PEL_PROTOTYPE(epel_h32,10, avx2);108BI_PEL_PROTOTYPE(epel_hv, 6, 12, sse4);
128PEL_PROTOTYPE(epel_h48,10, avx2);109BI_PEL_PROTOTYPE(epel_hv, 8, 8, sse4);
129PEL_PROTOTYPE(epel_h64,10, avx2);110BI_PEL_PROTOTYPE(epel_hv, 8, 10, sse4);
130 111BI_PEL_PROTOTYPE(epel_hv, 8, 12, sse4);
131PEL_PROTOTYPE(epel_v16, 8, avx2);112BI_PEL_PROTOTYPE(epel_hv, 16, 8, sse4);
132PEL_PROTOTYPE(epel_v24, 8, avx2);113BI_PEL_PROTOTYPE(epel_hv, 16, 10, avx2);
133PEL_PROTOTYPE(epel_v32, 8, avx2);114BI_PEL_PROTOTYPE(epel_hv, 32, 8, avx2);
134PEL_PROTOTYPE(epel_v48, 8, avx2);115
135PEL_PROTOTYPE(epel_v64, 8, avx2);116BI_PEL_PROTOTYPE(epel_v, 4, 8, sse4);
136 117BI_PEL_PROTOTYPE(epel_v, 4, 10, sse4);
137PEL_PROTOTYPE(epel_v16,10, avx2);118BI_PEL_PROTOTYPE(epel_v, 4, 12, sse4);
138PEL_PROTOTYPE(epel_v24,10, avx2);119BI_PEL_PROTOTYPE(epel_v, 6, 8, sse4);
139PEL_PROTOTYPE(epel_v32,10, avx2);120BI_PEL_PROTOTYPE(epel_v, 6, 10, sse4);
140PEL_PROTOTYPE(epel_v48,10, avx2);121BI_PEL_PROTOTYPE(epel_v, 6, 12, sse4);
141PEL_PROTOTYPE(epel_v64,10, avx2);122BI_PEL_PROTOTYPE(epel_v, 8, 8, sse4);
142 123BI_PEL_PROTOTYPE(epel_v, 8, 10, sse4);
143PEL_PROTOTYPE(epel_hv16, 8, avx2);124BI_PEL_PROTOTYPE(epel_v, 8, 12, sse4);
144PEL_PROTOTYPE(epel_hv24, 8, avx2);125BI_PEL_PROTOTYPE(epel_v, 12, 8, sse4);
145PEL_PROTOTYPE(epel_hv32, 8, avx2);126BI_PEL_PROTOTYPE(epel_v, 16, 8, sse4);
146PEL_PROTOTYPE(epel_hv48, 8, avx2);127BI_PEL_PROTOTYPE(epel_v, 16, 10, avx2);
147PEL_PROTOTYPE(epel_hv64, 8, avx2);128BI_PEL_PROTOTYPE(epel_v, 32, 8, avx2);
148
149PEL_PROTOTYPE(epel_hv16,10, avx2);
150PEL_PROTOTYPE(epel_hv24,10, avx2);
151PEL_PROTOTYPE(epel_hv32,10, avx2);
152PEL_PROTOTYPE(epel_hv48,10, avx2);
153PEL_PROTOTYPE(epel_hv64,10, avx2);
154 129
155///////////////////////////////////////////////////////////////////////////////130///////////////////////////////////////////////////////////////////////////////
156// QPEL131// QPEL
157///////////////////////////////////////////////////////////////////////////////132///////////////////////////////////////////////////////////////////////////////
158QPEL_PROTOTYPES(qpel_h , 8, sse4);133
159QPEL_PROTOTYPES(qpel_h , 10, sse4);134BI_PEL_PROTOTYPE(qpel_h, 4, 8, sse4);
160QPEL_PROTOTYPES(qpel_h , 12, sse4);135BI_PEL_PROTOTYPE(qpel_h, 4, 10, sse4);
161 136BI_PEL_PROTOTYPE(qpel_h, 4, 12, sse4);
162QPEL_PROTOTYPES(qpel_v, 8, sse4);137BI_PEL_PROTOTYPE(qpel_h, 8, 8, sse4);
163QPEL_PROTOTYPES(qpel_v, 10, sse4);138BI_PEL_PROTOTYPE(qpel_h, 8, 10, sse4);
164QPEL_PROTOTYPES(qpel_v, 12, sse4);139BI_PEL_PROTOTYPE(qpel_h, 8, 12, sse4);
165 140BI_PEL_PROTOTYPE(qpel_h, 12, 8, sse4);
166QPEL_PROTOTYPES(qpel_hv, 8, sse4);141BI_PEL_PROTOTYPE(qpel_h, 16, 8, sse4);
167QPEL_PROTOTYPES(qpel_hv, 10, sse4);142BI_PEL_PROTOTYPE(qpel_h, 16, 10, avx2);
168QPEL_PROTOTYPES(qpel_hv, 12, sse4);143BI_PEL_PROTOTYPE(qpel_h, 32, 8, avx2);
169 144
170PEL_PROTOTYPE(qpel_h16, 8, avx2);145BI_PEL_PROTOTYPE(qpel_hv, 4, 8, sse4);
171PEL_PROTOTYPE(qpel_h24, 8, avx2);146BI_PEL_PROTOTYPE(qpel_hv, 4, 10, sse4);
172PEL_PROTOTYPE(qpel_h32, 8, avx2);147BI_PEL_PROTOTYPE(qpel_hv, 4, 12, sse4);
173PEL_PROTOTYPE(qpel_h48, 8, avx2);148BI_PEL_PROTOTYPE(qpel_hv, 8, 8, sse4);
174PEL_PROTOTYPE(qpel_h64, 8, avx2);149BI_PEL_PROTOTYPE(qpel_hv, 8, 10, sse4);
175 150BI_PEL_PROTOTYPE(qpel_hv, 8, 12, sse4);
176PEL_PROTOTYPE(qpel_h16,10, avx2);151BI_PEL_PROTOTYPE(qpel_hv, 16, 10, avx2);
177PEL_PROTOTYPE(qpel_h24,10, avx2);152
178PEL_PROTOTYPE(qpel_h32,10, avx2);153BI_PEL_PROTOTYPE(qpel_v, 4, 8, sse4);
179PEL_PROTOTYPE(qpel_h48,10, avx2);154BI_PEL_PROTOTYPE(qpel_v, 4, 10, sse4);
180PEL_PROTOTYPE(qpel_h64,10, avx2);155BI_PEL_PROTOTYPE(qpel_v, 4, 12, sse4);
181 156BI_PEL_PROTOTYPE(qpel_v, 8, 8, sse4);
182PEL_PROTOTYPE(qpel_v16, 8, avx2);157BI_PEL_PROTOTYPE(qpel_v, 8, 10, sse4);
183PEL_PROTOTYPE(qpel_v24, 8, avx2);158BI_PEL_PROTOTYPE(qpel_v, 8, 12, sse4);
184PEL_PROTOTYPE(qpel_v32, 8, avx2);159BI_PEL_PROTOTYPE(qpel_v, 12, 8, sse4);
185PEL_PROTOTYPE(qpel_v48, 8, avx2);160BI_PEL_PROTOTYPE(qpel_v, 16, 8, sse4);
186PEL_PROTOTYPE(qpel_v64, 8, avx2);161BI_PEL_PROTOTYPE(qpel_v, 16, 10, avx2);
187 162BI_PEL_PROTOTYPE(qpel_v, 32, 8, avx2);
188PEL_PROTOTYPE(qpel_v16,10, avx2);
189PEL_PROTOTYPE(qpel_v24,10, avx2);
190PEL_PROTOTYPE(qpel_v32,10, avx2);
191PEL_PROTOTYPE(qpel_v48,10, avx2);
192PEL_PROTOTYPE(qpel_v64,10, avx2);
193
194PEL_PROTOTYPE(qpel_hv16, 8, avx2);
195PEL_PROTOTYPE(qpel_hv24, 8, avx2);
196PEL_PROTOTYPE(qpel_hv32, 8, avx2);
197PEL_PROTOTYPE(qpel_hv48, 8, avx2);
198PEL_PROTOTYPE(qpel_hv64, 8, avx2);
199
200PEL_PROTOTYPE(qpel_hv16,10, avx2);
201PEL_PROTOTYPE(qpel_hv24,10, avx2);
202PEL_PROTOTYPE(qpel_hv32,10, avx2);
203PEL_PROTOTYPE(qpel_hv48,10, avx2);
204PEL_PROTOTYPE(qpel_hv64,10, avx2);
205 163
206WEIGHTING_PROTOTYPES(8, sse4);164WEIGHTING_PROTOTYPES(8, sse4);
207WEIGHTING_PROTOTYPES(10, sse4);165WEIGHTING_PROTOTYPES(10, sse4);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t