Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc-2-2
Commits
346f385b
Commit
346f385b
authored
Sep 23, 2012
by
Ilkka Ollakka
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
yadif: update asm code from libav.git
parent
6cfb1a1a
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
17 additions
and
25 deletions
+17
-25
modules/video_filter/deinterlace/yadif_template.h
modules/video_filter/deinterlace/yadif_template.h
+17
-25
No files found.
modules/video_filter/deinterlace/yadif_template.h
View file @
346f385b
...
...
@@ -18,6 +18,7 @@
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define MANGLE(a) #a "(%%rip)"
#ifdef COMPILE_TEMPLATE_SSE
#define REGMM "xmm"
#define MM "%%"REGMM
...
...
@@ -65,7 +66,7 @@
MOVQ" "MM"2, "MM"5 \n\t"\
"pxor "MM"3, "MM"4 \n\t"\
"pavgb "MM"3, "MM"5 \n\t"\
"pand
%[pb_1]
, "MM"4 \n\t"\
"pand
"MANGLE(pb_1)"
, "MM"4 \n\t"\
"psubusb "MM"4, "MM"5 \n\t"\
PSRL1(MM"5") \
"punpcklbw "MM"7, "MM"5 \n\t"
/* (cur[x-refs+j] + cur[x+refs-j])>>1 */
\
...
...
@@ -95,7 +96,7 @@
#define CHECK2
/* pretend not to have checked dir=2 if dir=1 was bad.\
hurts both quality and speed, but matches the C version. */
\
"paddw
%[pw_1]
, "MM"6 \n\t"\
"paddw
"MANGLE(pw_1)"
, "MM"6 \n\t"\
"psllw $14, "MM"6 \n\t"\
"paddsw "MM"6, "MM"2 \n\t"\
MOVQ" "MM"0, "MM"3 \n\t"\
...
...
@@ -113,10 +114,7 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
uint8_t
*
prev
,
uint8_t
*
cur
,
uint8_t
*
next
,
int
w
,
int
prefs
,
int
mrefs
,
int
parity
,
int
mode
)
{
DECLARE_ALIGNED
(
16
,
uint8_t
,
tmp0
[
16
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
tmp1
[
16
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
tmp2
[
16
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
tmp3
[
16
]);
DECLARE_ALIGNED
(
16
,
uint8_t
,
tmp
[
16
*
4
]);
int
x
;
#define FILTER\
...
...
@@ -130,9 +128,9 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
MOVQ" "MM"3, "MM"4 \n\t"\
"paddw "MM"2, "MM"3 \n\t"\
"psraw $1, "MM"3 \n\t"
/* d = (prev2[x] + next2[x])>>1 */
\
MOVQ" "MM"0,
%[tmp0]
\n\t"
/* c */
\
MOVQ" "MM"3,
%[tmp1]
\n\t"
/* d */
\
MOVQ" "MM"1,
%[tmp2]
\n\t"
/* e */
\
MOVQ" "MM"0,
(%[tmp])
\n\t"
/* c */
\
MOVQ" "MM"3,
16(%[tmp])
\n\t"
/* d */
\
MOVQ" "MM"1,
32(%[tmp])
\n\t"
/* e */
\
"psubw "MM"4, "MM"2 \n\t"\
PABS( MM"4", MM"2")
/* temporal_diff0 */
\
LOAD("(%[prev],%[mrefs])", MM"3")
/* prev[x-refs] */
\
...
...
@@ -154,7 +152,7 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
"paddw "MM"4, "MM"3 \n\t"
/* temporal_diff2 */
\
"psrlw $1, "MM"3 \n\t"\
"pmaxsw "MM"3, "MM"2 \n\t"\
MOVQ" "MM"2,
%[tmp3]
\n\t"
/* diff */
\
MOVQ" "MM"2,
48(%[tmp])
\n\t"
/* diff */
\
\
"paddw "MM"0, "MM"1 \n\t"\
"paddw "MM"0, "MM"0 \n\t"\
...
...
@@ -173,7 +171,7 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
"punpcklbw "MM"7, "MM"3 \n\t"
/* ABS(cur[x-refs+1] - cur[x+refs+1]) */
\
"paddw "MM"2, "MM"0 \n\t"\
"paddw "MM"3, "MM"0 \n\t"\
"psubw
%[pw_1]
, "MM"0 \n\t"
/* spatial_score */
\
"psubw
"MANGLE(pw_1)"
, "MM"0 \n\t"
/* spatial_score */
\
\
CHECK(-2,0)\
CHECK1\
...
...
@@ -185,7 +183,7 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
CHECK2\
\
/* if(p->mode<2) ... */
\
MOVQ"
%[tmp3]
, "MM"6 \n\t"
/* diff */
\
MOVQ"
48(%[tmp])
, "MM"6 \n\t"
/* diff */
\
"cmpl $2, %[mode] \n\t"\
"jge 1f \n\t"\
LOAD("(%["prev2"],%[mrefs],2)", MM"2")
/* prev2[x-2*refs] */
\
...
...
@@ -196,9 +194,9 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
"paddw "MM"5, "MM"3 \n\t"\
"psrlw $1, "MM"2 \n\t"
/* b */
\
"psrlw $1, "MM"3 \n\t"
/* f */
\
MOVQ"
%[tmp0]
, "MM"4 \n\t"
/* c */
\
MOVQ"
%[tmp1]
, "MM"5 \n\t"
/* d */
\
MOVQ"
%[tmp2]
, "MM"7 \n\t"
/* e */
\
MOVQ"
(%[tmp])
, "MM"4 \n\t"
/* c */
\
MOVQ"
16(%[tmp])
, "MM"5 \n\t"
/* d */
\
MOVQ"
32(%[tmp])
, "MM"7 \n\t"
/* e */
\
"psubw "MM"4, "MM"2 \n\t"
/* b-c */
\
"psubw "MM"7, "MM"3 \n\t"
/* f-e */
\
MOVQ" "MM"5, "MM"0 \n\t"\
...
...
@@ -217,7 +215,7 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
"pmaxsw "MM"4, "MM"6 \n\t"
/* diff= MAX3(diff, min, -max); */
\
"1: \n\t"\
\
MOVQ"
%[tmp1]
, "MM"2 \n\t"
/* d */
\
MOVQ"
16(%[tmp])
, "MM"2 \n\t"
/* d */
\
MOVQ" "MM"2, "MM"3 \n\t"\
"psubw "MM"6, "MM"2 \n\t"
/* d-diff */
\
"paddw "MM"6, "MM"3 \n\t"
/* d+diff */
\
...
...
@@ -225,19 +223,13 @@ VLC_TARGET static void RENAME(yadif_filter_line)(uint8_t *dst,
"pminsw "MM"3, "MM"1 \n\t"
/* d = clip(spatial_pred, d-diff, d+diff); */
\
"packuswb "MM"1, "MM"1 \n\t"\
\
:[tmp0]"=m"(tmp0),\
[tmp1]"=m"(tmp1),\
[tmp2]"=m"(tmp2),\
[tmp3]"=m"(tmp3)\
:[prev] "r"(prev),\
::[prev] "r"(prev),\
[cur] "r"(cur),\
[next] "r"(next),\
[prefs]"r"((x86_reg)prefs),\
[mrefs]"r"((x86_reg)mrefs),\
[pw_1] "m"(pw_1),\
[pb_1] "m"(pb_1),\
[mode] "g"(mode)\
:REGMM"0",REGMM"1",REGMM"2",REGMM"3",REGMM"4",REGMM"5",REGMM"6",REGMM"7"\
[mode] "g"(mode),\
[tmp] "r"(tmp)\
);\
__asm__ volatile(MOV" "MM"1, %0" :"=m"(*dst));\
dst += STEP;\
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment