-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathunpack_pixel.s
84 lines (70 loc) · 1.54 KB
/
unpack_pixel.s
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/* unpack the next 8 pixels */
/*
mov.l @r13,r9
extu.b r9,r1
shlr8 r9
extu.b r9,r2
add r1,r2
shlr8 r9
extu.b r9,r1
add r1,r2
shlr8 r9
add r2,r9
lds r9,fpul
add #4,r13
*/
.macro unpack_pixel_inner_nibs
mov.w @r13+,r9
mov r9,r1 /* nib0 */
shlr2 r9
shlr2 r9
and r14,r1
mov r9,r2 /* nib1 */
shlr2 r9
shlr2 r9
and r14,r2
add r2,r1
mov r9,r2 /* nib3 */
shlr2 r9
shlr2 r9
and r14,r2
add r2,r1
and r14,r9 /* nib4 */
add r9,r1
lds r1,fpul
.endm
.macro unpack_pixel_8
unpack_pixel_inner_nibs
float fpul,fr0
unpack_pixel_inner_nibs
float fpul,fr1
unpack_pixel_inner_nibs
float fpul,fr2
unpack_pixel_inner_nibs
float fpul,fr3
unpack_pixel_inner_nibs
float fpul,fr4
unpack_pixel_inner_nibs
float fpul,fr5
unpack_pixel_inner_nibs
float fpul,fr6
unpack_pixel_inner_nibs
float fpul,fr7
fmov dr0,@r12
add #8,r12
fmov dr2,@r12
add #8,r12
fmov dr4,@r12
add #8,r12
fmov dr6,@r12
add #8,r12
.endm
.macro unpack_pixel_16
ocbi @r13
pref @r13 /* 32 bytes, 16 pixels */
mov #15,r14
fschg
unpack_pixel_8
unpack_pixel_8
fschg
.endm