1233d2500723e5594f3e7c70896ffeeef32b9c950ywan;
2233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  Copyright (c) 2011 The WebM project authors. All Rights Reserved.
3233d2500723e5594f3e7c70896ffeeef32b9c950ywan;
4233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  Use of this source code is governed by a BSD-style license
5233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  that can be found in the LICENSE file in the root of the source
6233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  tree. An additional intellectual property rights grant can be found
7233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  in the file PATENTS.  All contributing project authors may
8233d2500723e5594f3e7c70896ffeeef32b9c950ywan;  be found in the AUTHORS file in the root of the source tree.
9233d2500723e5594f3e7c70896ffeeef32b9c950ywan;
10233d2500723e5594f3e7c70896ffeeef32b9c950ywan
11233d2500723e5594f3e7c70896ffeeef32b9c950ywan
12233d2500723e5594f3e7c70896ffeeef32b9c950ywan    EXPORT  |vp8_variance_halfpixvar16x16_hv_armv6|
13233d2500723e5594f3e7c70896ffeeef32b9c950ywan
14233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ARM
15233d2500723e5594f3e7c70896ffeeef32b9c950ywan    REQUIRE8
16233d2500723e5594f3e7c70896ffeeef32b9c950ywan    PRESERVE8
17233d2500723e5594f3e7c70896ffeeef32b9c950ywan
18233d2500723e5594f3e7c70896ffeeef32b9c950ywan    AREA ||.text||, CODE, READONLY, ALIGN=2
19233d2500723e5594f3e7c70896ffeeef32b9c950ywan
20233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r0    unsigned char *src_ptr
21233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r1    int source_stride
22233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r2    unsigned char *ref_ptr
23233d2500723e5594f3e7c70896ffeeef32b9c950ywan; r3    int  recon_stride
24233d2500723e5594f3e7c70896ffeeef32b9c950ywan; stack unsigned int *sse
25233d2500723e5594f3e7c70896ffeeef32b9c950ywan|vp8_variance_halfpixvar16x16_hv_armv6| PROC
26233d2500723e5594f3e7c70896ffeeef32b9c950ywan
27233d2500723e5594f3e7c70896ffeeef32b9c950ywan    stmfd   sp!, {r4-r12, lr}
28233d2500723e5594f3e7c70896ffeeef32b9c950ywan
29233d2500723e5594f3e7c70896ffeeef32b9c950ywan    pld     [r0, r1, lsl #0]
30233d2500723e5594f3e7c70896ffeeef32b9c950ywan    pld     [r2, r3, lsl #0]
31233d2500723e5594f3e7c70896ffeeef32b9c950ywan
32233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mov     r8, #0              ; initialize sum = 0
33233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r10, c80808080
34233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mov     r11, #0             ; initialize sse = 0
35233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mov     r12, #16            ; set loop counter to 16 (=block height)
36233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mov     lr, #0              ; constant zero
37233d2500723e5594f3e7c70896ffeeef32b9c950ywanloop
38233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r9, r0, r1          ; pointer to pixels on the next row
39233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; 1st 4 pixels
40233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r4, [r0, #0]        ; load source pixels a, row N
41233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r6, [r0, #1]        ; load source pixels b, row N
42233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r9, #0]        ; load source pixels c, row N+1
43233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r7, [r9, #1]        ; load source pixels d, row N+1
44233d2500723e5594f3e7c70896ffeeef32b9c950ywan
45233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; x = (a + b + 1) >> 1, interpolate pixels horizontally on row N
46233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r6, r6
47233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r6
48233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
49233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; y = (c + d + 1) >> 1, interpolate pixels horizontally on row N+1
50233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r7, r7
51233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r5, r5, r7
52233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r5, r5, r10
53233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; z = (x + y + 1) >> 1, interpolate half pixel values vertically
54233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r5, r5
55233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r5
56233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r2, #0]        ; load 4 ref pixels
57233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
58233d2500723e5594f3e7c70896ffeeef32b9c950ywan
59233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r4, r5          ; calculate difference
60233d2500723e5594f3e7c70896ffeeef32b9c950ywan    pld     [r0, r1, lsl #1]
61233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r7, r6, lr          ; select bytes with positive difference
62233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r5, r4          ; calculate difference with reversed operands
63233d2500723e5594f3e7c70896ffeeef32b9c950ywan    pld     [r2, r3, lsl #1]
64233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r6, r6, lr          ; select bytes with negative difference
65233d2500723e5594f3e7c70896ffeeef32b9c950ywan
66233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate partial sums
67233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r4, r7, lr          ; calculate sum of positive differences
68233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r5, r6, lr          ; calculate sum of negative differences
69233d2500723e5594f3e7c70896ffeeef32b9c950ywan    orr     r6, r6, r7          ; differences of all 4 pixels
70233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate total sum
71233d2500723e5594f3e7c70896ffeeef32b9c950ywan    adds    r8, r8, r4          ; add positive differences to sum
72233d2500723e5594f3e7c70896ffeeef32b9c950ywan    subs    r8, r8, r5          ; subtract negative differences from sum
73233d2500723e5594f3e7c70896ffeeef32b9c950ywan
74233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate sse
75233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r5, r6              ; byte (two pixels) to halfwords
76233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r7, r6, ror #8      ; another two pixels to halfwords
77233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r5, r5, r11    ; dual signed multiply, add and accumulate (1)
78233d2500723e5594f3e7c70896ffeeef32b9c950ywan
79233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; 2nd 4 pixels
80233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r4, [r0, #4]        ; load source pixels a, row N
81233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r6, [r0, #5]        ; load source pixels b, row N
82233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r9, #4]        ; load source pixels c, row N+1
83233d2500723e5594f3e7c70896ffeeef32b9c950ywan
84233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r7, r7, r11    ; dual signed multiply, add and accumulate (2)
85233d2500723e5594f3e7c70896ffeeef32b9c950ywan
86233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r7, [r9, #5]        ; load source pixels d, row N+1
87233d2500723e5594f3e7c70896ffeeef32b9c950ywan
88233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; x = (a + b + 1) >> 1, interpolate pixels horizontally on row N
89233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r6, r6
90233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r6
91233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
92233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; y = (c + d + 1) >> 1, interpolate pixels horizontally on row N+1
93233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r7, r7
94233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r5, r5, r7
95233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r5, r5, r10
96233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; z = (x + y + 1) >> 1, interpolate half pixel values vertically
97233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r5, r5
98233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r5
99233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r2, #4]        ; load 4 ref pixels
100233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
101233d2500723e5594f3e7c70896ffeeef32b9c950ywan
102233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r4, r5          ; calculate difference
103233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r7, r6, lr          ; select bytes with positive difference
104233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r5, r4          ; calculate difference with reversed operands
105233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r6, r6, lr          ; select bytes with negative difference
106233d2500723e5594f3e7c70896ffeeef32b9c950ywan
107233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate partial sums
108233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r4, r7, lr          ; calculate sum of positive differences
109233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r5, r6, lr          ; calculate sum of negative differences
110233d2500723e5594f3e7c70896ffeeef32b9c950ywan    orr     r6, r6, r7          ; differences of all 4 pixels
111233d2500723e5594f3e7c70896ffeeef32b9c950ywan
112233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate total sum
113233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r8, r8, r4          ; add positive differences to sum
114233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sub     r8, r8, r5          ; subtract negative differences from sum
115233d2500723e5594f3e7c70896ffeeef32b9c950ywan
116233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate sse
117233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r5, r6              ; byte (two pixels) to halfwords
118233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r7, r6, ror #8      ; another two pixels to halfwords
119233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r5, r5, r11    ; dual signed multiply, add and accumulate (1)
120233d2500723e5594f3e7c70896ffeeef32b9c950ywan
121233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; 3rd 4 pixels
122233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r4, [r0, #8]        ; load source pixels a, row N
123233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r6, [r0, #9]        ; load source pixels b, row N
124233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r9, #8]        ; load source pixels c, row N+1
125233d2500723e5594f3e7c70896ffeeef32b9c950ywan
126233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r7, r7, r11    ; dual signed multiply, add and accumulate (2)
127233d2500723e5594f3e7c70896ffeeef32b9c950ywan
128233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r7, [r9, #9]        ; load source pixels d, row N+1
129233d2500723e5594f3e7c70896ffeeef32b9c950ywan
130233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; x = (a + b + 1) >> 1, interpolate pixels horizontally on row N
131233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r6, r6
132233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r6
133233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
134233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; y = (c + d + 1) >> 1, interpolate pixels horizontally on row N+1
135233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r7, r7
136233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r5, r5, r7
137233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r5, r5, r10
138233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; z = (x + y + 1) >> 1, interpolate half pixel values vertically
139233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r5, r5
140233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r5
141233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r2, #8]        ; load 4 ref pixels
142233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
143233d2500723e5594f3e7c70896ffeeef32b9c950ywan
144233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r4, r5          ; calculate difference
145233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r7, r6, lr          ; select bytes with positive difference
146233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r5, r4          ; calculate difference with reversed operands
147233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r6, r6, lr          ; select bytes with negative difference
148233d2500723e5594f3e7c70896ffeeef32b9c950ywan
149233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate partial sums
150233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r4, r7, lr          ; calculate sum of positive differences
151233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r5, r6, lr          ; calculate sum of negative differences
152233d2500723e5594f3e7c70896ffeeef32b9c950ywan    orr     r6, r6, r7          ; differences of all 4 pixels
153233d2500723e5594f3e7c70896ffeeef32b9c950ywan
154233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate total sum
155233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r8, r8, r4          ; add positive differences to sum
156233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sub     r8, r8, r5          ; subtract negative differences from sum
157233d2500723e5594f3e7c70896ffeeef32b9c950ywan
158233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate sse
159233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r5, r6              ; byte (two pixels) to halfwords
160233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r7, r6, ror #8      ; another two pixels to halfwords
161233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r5, r5, r11    ; dual signed multiply, add and accumulate (1)
162233d2500723e5594f3e7c70896ffeeef32b9c950ywan
163233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; 4th 4 pixels
164233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r4, [r0, #12]       ; load source pixels a, row N
165233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r6, [r0, #13]       ; load source pixels b, row N
166233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r9, #12]       ; load source pixels c, row N+1
167233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r7, r7, r11    ; dual signed multiply, add and accumulate (2)
168233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r7, [r9, #13]       ; load source pixels d, row N+1
169233d2500723e5594f3e7c70896ffeeef32b9c950ywan
170233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; x = (a + b + 1) >> 1, interpolate pixels horizontally on row N
171233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r6, r6
172233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r6
173233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
174233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; y = (c + d + 1) >> 1, interpolate pixels horizontally on row N+1
175233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r7, r7
176233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r5, r5, r7
177233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r5, r5, r10
178233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; z = (x + y + 1) >> 1, interpolate half pixel values vertically
179233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mvn     r5, r5
180233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uhsub8  r4, r4, r5
181233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r5, [r2, #12]       ; load 4 ref pixels
182233d2500723e5594f3e7c70896ffeeef32b9c950ywan    eor     r4, r4, r10
183233d2500723e5594f3e7c70896ffeeef32b9c950ywan
184233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r4, r5          ; calculate difference
185233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r0, r0, r1          ; set src_ptr to next row
186233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r7, r6, lr          ; select bytes with positive difference
187233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usub8   r6, r5, r4          ; calculate difference with reversed operands
188233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r2, r2, r3          ; set dst_ptr to next row
189233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sel     r6, r6, lr          ; select bytes with negative difference
190233d2500723e5594f3e7c70896ffeeef32b9c950ywan
191233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate partial sums
192233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r4, r7, lr          ; calculate sum of positive differences
193233d2500723e5594f3e7c70896ffeeef32b9c950ywan    usad8   r5, r6, lr          ; calculate sum of negative differences
194233d2500723e5594f3e7c70896ffeeef32b9c950ywan    orr     r6, r6, r7          ; differences of all 4 pixels
195233d2500723e5594f3e7c70896ffeeef32b9c950ywan
196233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate total sum
197233d2500723e5594f3e7c70896ffeeef32b9c950ywan    add     r8, r8, r4          ; add positive differences to sum
198233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sub     r8, r8, r5          ; subtract negative differences from sum
199233d2500723e5594f3e7c70896ffeeef32b9c950ywan
200233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; calculate sse
201233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r5, r6              ; byte (two pixels) to halfwords
202233d2500723e5594f3e7c70896ffeeef32b9c950ywan    uxtb16  r7, r6, ror #8      ; another two pixels to halfwords
203233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r5, r5, r11    ; dual signed multiply, add and accumulate (1)
204233d2500723e5594f3e7c70896ffeeef32b9c950ywan    subs    r12, r12, #1
205233d2500723e5594f3e7c70896ffeeef32b9c950ywan    smlad   r11, r7, r7, r11    ; dual signed multiply, add and accumulate (2)
206233d2500723e5594f3e7c70896ffeeef32b9c950ywan
207233d2500723e5594f3e7c70896ffeeef32b9c950ywan    bne     loop
208233d2500723e5594f3e7c70896ffeeef32b9c950ywan
209233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ; return stuff
210233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldr     r6, [sp, #40]       ; get address of sse
211233d2500723e5594f3e7c70896ffeeef32b9c950ywan    mul     r0, r8, r8          ; sum * sum
212233d2500723e5594f3e7c70896ffeeef32b9c950ywan    str     r11, [r6]           ; store sse
213233d2500723e5594f3e7c70896ffeeef32b9c950ywan    sub     r0, r11, r0, lsr #8 ; return (sse - ((sum * sum) >> 8))
214233d2500723e5594f3e7c70896ffeeef32b9c950ywan
215233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ldmfd   sp!, {r4-r12, pc}
216233d2500723e5594f3e7c70896ffeeef32b9c950ywan
217233d2500723e5594f3e7c70896ffeeef32b9c950ywan    ENDP
218233d2500723e5594f3e7c70896ffeeef32b9c950ywan
219233d2500723e5594f3e7c70896ffeeef32b9c950ywanc80808080
220233d2500723e5594f3e7c70896ffeeef32b9c950ywan    DCD     0x80808080
221233d2500723e5594f3e7c70896ffeeef32b9c950ywan
222233d2500723e5594f3e7c70896ffeeef32b9c950ywan    END
223