11b362b15af34006e6a11974088a46d42b903418eJohann; 21b362b15af34006e6a11974088a46d42b903418eJohann; Copyright (c) 2011 The WebM project authors. All Rights Reserved. 31b362b15af34006e6a11974088a46d42b903418eJohann; 41b362b15af34006e6a11974088a46d42b903418eJohann; Use of this source code is governed by a BSD-style license 51b362b15af34006e6a11974088a46d42b903418eJohann; that can be found in the LICENSE file in the root of the source 61b362b15af34006e6a11974088a46d42b903418eJohann; tree. An additional intellectual property rights grant can be found 71b362b15af34006e6a11974088a46d42b903418eJohann; in the file PATENTS. All contributing project authors may 81b362b15af34006e6a11974088a46d42b903418eJohann; be found in the AUTHORS file in the root of the source tree. 91b362b15af34006e6a11974088a46d42b903418eJohann; 101b362b15af34006e6a11974088a46d42b903418eJohann 111b362b15af34006e6a11974088a46d42b903418eJohann 121b362b15af34006e6a11974088a46d42b903418eJohann EXPORT |vp8_fast_quantize_b_neon| 131b362b15af34006e6a11974088a46d42b903418eJohann EXPORT |vp8_fast_quantize_b_pair_neon| 141b362b15af34006e6a11974088a46d42b903418eJohann 15ba164dffc5a6795bce97fae02b51ccf3330e15e4hkuang INCLUDE vp8_asm_enc_offsets.asm 161b362b15af34006e6a11974088a46d42b903418eJohann 171b362b15af34006e6a11974088a46d42b903418eJohann ARM 181b362b15af34006e6a11974088a46d42b903418eJohann REQUIRE8 191b362b15af34006e6a11974088a46d42b903418eJohann PRESERVE8 201b362b15af34006e6a11974088a46d42b903418eJohann 211b362b15af34006e6a11974088a46d42b903418eJohann AREA ||.text||, CODE, READONLY, ALIGN=4 221b362b15af34006e6a11974088a46d42b903418eJohann 231b362b15af34006e6a11974088a46d42b903418eJohann;vp8_fast_quantize_b_pair_neon(BLOCK *b1, BLOCK *b2, BLOCKD *d1, BLOCKD *d2); 241b362b15af34006e6a11974088a46d42b903418eJohann|vp8_fast_quantize_b_pair_neon| PROC 251b362b15af34006e6a11974088a46d42b903418eJohann 261b362b15af34006e6a11974088a46d42b903418eJohann stmfd sp!, {r4-r9} 271b362b15af34006e6a11974088a46d42b903418eJohann vstmdb sp!, {q4-q7} 281b362b15af34006e6a11974088a46d42b903418eJohann 291b362b15af34006e6a11974088a46d42b903418eJohann ldr r4, [r0, #vp8_block_coeff] 301b362b15af34006e6a11974088a46d42b903418eJohann ldr r5, [r0, #vp8_block_quant_fast] 311b362b15af34006e6a11974088a46d42b903418eJohann ldr r6, [r0, #vp8_block_round] 321b362b15af34006e6a11974088a46d42b903418eJohann 331b362b15af34006e6a11974088a46d42b903418eJohann vld1.16 {q0, q1}, [r4@128] ; load z 341b362b15af34006e6a11974088a46d42b903418eJohann 351b362b15af34006e6a11974088a46d42b903418eJohann ldr r7, [r2, #vp8_blockd_qcoeff] 361b362b15af34006e6a11974088a46d42b903418eJohann 371b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q4, q0 ; calculate x = abs(z) 381b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q5, q1 391b362b15af34006e6a11974088a46d42b903418eJohann 401b362b15af34006e6a11974088a46d42b903418eJohann ;right shift 15 to get sign, all 0 if it is positive, all 1 if it is negative 411b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q2, q0, #15 ; sz 421b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q3, q1, #15 431b362b15af34006e6a11974088a46d42b903418eJohann 441b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q6, q7}, [r6@128] ; load round_ptr [0-15] 451b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q8, q9}, [r5@128] ; load quant_ptr [0-15] 461b362b15af34006e6a11974088a46d42b903418eJohann 471b362b15af34006e6a11974088a46d42b903418eJohann ldr r4, [r1, #vp8_block_coeff] 481b362b15af34006e6a11974088a46d42b903418eJohann 491b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q4, q6 ; x + Round 501b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q5, q7 511b362b15af34006e6a11974088a46d42b903418eJohann 521b362b15af34006e6a11974088a46d42b903418eJohann vld1.16 {q0, q1}, [r4@128] ; load z2 531b362b15af34006e6a11974088a46d42b903418eJohann 541b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q4, q8 ; y = ((Round+abs(z)) * Quant) >> 16 551b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q5, q9 561b362b15af34006e6a11974088a46d42b903418eJohann 571b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q10, q0 ; calculate x2 = abs(z_2) 581b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q11, q1 591b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q12, q0, #15 ; sz2 601b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q13, q1, #15 611b362b15af34006e6a11974088a46d42b903418eJohann 621b362b15af34006e6a11974088a46d42b903418eJohann ;modify data to have its original sign 631b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q4, q2 ; y^sz 641b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q5, q3 651b362b15af34006e6a11974088a46d42b903418eJohann 661b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q10, q6 ; x2 + Round 671b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q11, q7 681b362b15af34006e6a11974088a46d42b903418eJohann 691b362b15af34006e6a11974088a46d42b903418eJohann ldr r8, [r2, #vp8_blockd_dequant] 701b362b15af34006e6a11974088a46d42b903418eJohann 711b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q10, q8 ; y2 = ((Round+abs(z)) * Quant) >> 16 721b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q11, q9 731b362b15af34006e6a11974088a46d42b903418eJohann 741b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q4, #1 ; right shift 1 after vqdmulh 751b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q5, #1 761b362b15af34006e6a11974088a46d42b903418eJohann 771b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q6, q7}, [r8@128] ;load dequant_ptr[i] 781b362b15af34006e6a11974088a46d42b903418eJohann 791b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q4, q2 ; x1=(y^sz)-sz = (y^sz)-(-1) (2's complement) 801b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q5, q3 811b362b15af34006e6a11974088a46d42b903418eJohann 821b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q10, #1 ; right shift 1 after vqdmulh 831b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q11, #1 841b362b15af34006e6a11974088a46d42b903418eJohann 851b362b15af34006e6a11974088a46d42b903418eJohann ldr r9, [r2, #vp8_blockd_dqcoeff] 861b362b15af34006e6a11974088a46d42b903418eJohann 871b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q10, q12 ; y2^sz2 881b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q11, q13 891b362b15af34006e6a11974088a46d42b903418eJohann 901b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q4, q5}, [r7] ; store: qcoeff = x1 911b362b15af34006e6a11974088a46d42b903418eJohann 921b362b15af34006e6a11974088a46d42b903418eJohann 931b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q10, q12 ; x2=(y^sz)-sz = (y^sz)-(-1) (2's complement) 941b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q11, q13 951b362b15af34006e6a11974088a46d42b903418eJohann 961b362b15af34006e6a11974088a46d42b903418eJohann ldr r6, [r3, #vp8_blockd_qcoeff] 971b362b15af34006e6a11974088a46d42b903418eJohann 981b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q2, q6, q4 ; x * Dequant 991b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q3, q7, q5 1001b362b15af34006e6a11974088a46d42b903418eJohann 1011b362b15af34006e6a11974088a46d42b903418eJohann adr r0, inv_zig_zag ; load ptr of inverse zigzag table 1021b362b15af34006e6a11974088a46d42b903418eJohann 1031b362b15af34006e6a11974088a46d42b903418eJohann vceq.s16 q8, q8 ; set q8 to all 1 1041b362b15af34006e6a11974088a46d42b903418eJohann 1051b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q10, q11}, [r6] ; store: qcoeff = x2 1061b362b15af34006e6a11974088a46d42b903418eJohann 1071b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q12, q6, q10 ; x2 * Dequant 1081b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q13, q7, q11 1091b362b15af34006e6a11974088a46d42b903418eJohann 1101b362b15af34006e6a11974088a46d42b903418eJohann vld1.16 {q6, q7}, [r0@128] ; load inverse scan order 1111b362b15af34006e6a11974088a46d42b903418eJohann 1121b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q14, q4, q8 ; now find eob 1131b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q15, q5, q8 ; non-zero element is set to all 1 1141b362b15af34006e6a11974088a46d42b903418eJohann 1151b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q2, q3}, [r9] ; store dqcoeff = x * Dequant 1161b362b15af34006e6a11974088a46d42b903418eJohann 1171b362b15af34006e6a11974088a46d42b903418eJohann ldr r7, [r3, #vp8_blockd_dqcoeff] 1181b362b15af34006e6a11974088a46d42b903418eJohann 1191b362b15af34006e6a11974088a46d42b903418eJohann vand q0, q6, q14 ; get all valid numbers from scan array 1201b362b15af34006e6a11974088a46d42b903418eJohann vand q1, q7, q15 1211b362b15af34006e6a11974088a46d42b903418eJohann 1221b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q12, q13}, [r7] ; store dqcoeff = x * Dequant 1231b362b15af34006e6a11974088a46d42b903418eJohann 1241b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q2, q10, q8 ; now find eob 1251b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q3, q11, q8 ; non-zero element is set to all 1 1261b362b15af34006e6a11974088a46d42b903418eJohann 1271b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 q0, q0, q1 ; find maximum value in q0, q1 1281b362b15af34006e6a11974088a46d42b903418eJohann 1291b362b15af34006e6a11974088a46d42b903418eJohann vand q10, q6, q2 ; get all valid numbers from scan array 1301b362b15af34006e6a11974088a46d42b903418eJohann vand q11, q7, q3 1311b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 q10, q10, q11 ; find maximum value in q10, q11 1321b362b15af34006e6a11974088a46d42b903418eJohann 1331b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 d0, d0, d1 1341b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 d20, d20, d21 1351b362b15af34006e6a11974088a46d42b903418eJohann vmovl.u16 q0, d0 1361b362b15af34006e6a11974088a46d42b903418eJohann vmovl.u16 q10, d20 1371b362b15af34006e6a11974088a46d42b903418eJohann 1381b362b15af34006e6a11974088a46d42b903418eJohann vmax.u32 d0, d0, d1 1391b362b15af34006e6a11974088a46d42b903418eJohann vmax.u32 d20, d20, d21 1401b362b15af34006e6a11974088a46d42b903418eJohann vpmax.u32 d0, d0, d0 1411b362b15af34006e6a11974088a46d42b903418eJohann vpmax.u32 d20, d20, d20 1421b362b15af34006e6a11974088a46d42b903418eJohann 1431b362b15af34006e6a11974088a46d42b903418eJohann ldr r4, [r2, #vp8_blockd_eob] 1441b362b15af34006e6a11974088a46d42b903418eJohann ldr r5, [r3, #vp8_blockd_eob] 1451b362b15af34006e6a11974088a46d42b903418eJohann 1461b362b15af34006e6a11974088a46d42b903418eJohann vst1.8 {d0[0]}, [r4] ; store eob 1471b362b15af34006e6a11974088a46d42b903418eJohann vst1.8 {d20[0]}, [r5] ; store eob 1481b362b15af34006e6a11974088a46d42b903418eJohann 1491b362b15af34006e6a11974088a46d42b903418eJohann vldmia sp!, {q4-q7} 1501b362b15af34006e6a11974088a46d42b903418eJohann ldmfd sp!, {r4-r9} 1511b362b15af34006e6a11974088a46d42b903418eJohann bx lr 1521b362b15af34006e6a11974088a46d42b903418eJohann 1531b362b15af34006e6a11974088a46d42b903418eJohann ENDP 1541b362b15af34006e6a11974088a46d42b903418eJohann 1551b362b15af34006e6a11974088a46d42b903418eJohann;void vp8_fast_quantize_b_c(BLOCK *b, BLOCKD *d) 1561b362b15af34006e6a11974088a46d42b903418eJohann|vp8_fast_quantize_b_neon| PROC 1571b362b15af34006e6a11974088a46d42b903418eJohann 1581b362b15af34006e6a11974088a46d42b903418eJohann stmfd sp!, {r4-r7} 1591b362b15af34006e6a11974088a46d42b903418eJohann 1601b362b15af34006e6a11974088a46d42b903418eJohann ldr r3, [r0, #vp8_block_coeff] 1611b362b15af34006e6a11974088a46d42b903418eJohann ldr r4, [r0, #vp8_block_quant_fast] 1621b362b15af34006e6a11974088a46d42b903418eJohann ldr r5, [r0, #vp8_block_round] 1631b362b15af34006e6a11974088a46d42b903418eJohann 1641b362b15af34006e6a11974088a46d42b903418eJohann vld1.16 {q0, q1}, [r3@128] ; load z 1651b362b15af34006e6a11974088a46d42b903418eJohann vorr.s16 q14, q0, q1 ; check if all zero (step 1) 1661b362b15af34006e6a11974088a46d42b903418eJohann ldr r6, [r1, #vp8_blockd_qcoeff] 1671b362b15af34006e6a11974088a46d42b903418eJohann ldr r7, [r1, #vp8_blockd_dqcoeff] 1681b362b15af34006e6a11974088a46d42b903418eJohann vorr.s16 d28, d28, d29 ; check if all zero (step 2) 1691b362b15af34006e6a11974088a46d42b903418eJohann 1701b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q12, q0 ; calculate x = abs(z) 1711b362b15af34006e6a11974088a46d42b903418eJohann vabs.s16 q13, q1 1721b362b15af34006e6a11974088a46d42b903418eJohann 1731b362b15af34006e6a11974088a46d42b903418eJohann ;right shift 15 to get sign, all 0 if it is positive, all 1 if it is negative 1741b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q2, q0, #15 ; sz 1751b362b15af34006e6a11974088a46d42b903418eJohann vmov r2, r3, d28 ; check if all zero (step 3) 1761b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q3, q1, #15 1771b362b15af34006e6a11974088a46d42b903418eJohann 1781b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q14, q15}, [r5@128]; load round_ptr [0-15] 1791b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q8, q9}, [r4@128] ; load quant_ptr [0-15] 1801b362b15af34006e6a11974088a46d42b903418eJohann 1811b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q12, q14 ; x + Round 1821b362b15af34006e6a11974088a46d42b903418eJohann vadd.s16 q13, q15 1831b362b15af34006e6a11974088a46d42b903418eJohann 1841b362b15af34006e6a11974088a46d42b903418eJohann adr r0, inv_zig_zag ; load ptr of inverse zigzag table 1851b362b15af34006e6a11974088a46d42b903418eJohann 1861b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q12, q8 ; y = ((Round+abs(z)) * Quant) >> 16 1871b362b15af34006e6a11974088a46d42b903418eJohann vqdmulh.s16 q13, q9 1881b362b15af34006e6a11974088a46d42b903418eJohann 1891b362b15af34006e6a11974088a46d42b903418eJohann vld1.16 {q10, q11}, [r0@128]; load inverse scan order 1901b362b15af34006e6a11974088a46d42b903418eJohann 1911b362b15af34006e6a11974088a46d42b903418eJohann vceq.s16 q8, q8 ; set q8 to all 1 1921b362b15af34006e6a11974088a46d42b903418eJohann 1931b362b15af34006e6a11974088a46d42b903418eJohann ldr r4, [r1, #vp8_blockd_dequant] 1941b362b15af34006e6a11974088a46d42b903418eJohann 1951b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q12, #1 ; right shift 1 after vqdmulh 1961b362b15af34006e6a11974088a46d42b903418eJohann vshr.s16 q13, #1 1971b362b15af34006e6a11974088a46d42b903418eJohann 1981b362b15af34006e6a11974088a46d42b903418eJohann ldr r5, [r1, #vp8_blockd_eob] 1991b362b15af34006e6a11974088a46d42b903418eJohann 2001b362b15af34006e6a11974088a46d42b903418eJohann orr r2, r2, r3 ; check if all zero (step 4) 2011b362b15af34006e6a11974088a46d42b903418eJohann cmp r2, #0 ; check if all zero (step 5) 2021b362b15af34006e6a11974088a46d42b903418eJohann beq zero_output ; check if all zero (step 6) 2031b362b15af34006e6a11974088a46d42b903418eJohann 2041b362b15af34006e6a11974088a46d42b903418eJohann ;modify data to have its original sign 2051b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q12, q2 ; y^sz 2061b362b15af34006e6a11974088a46d42b903418eJohann veor.s16 q13, q3 2071b362b15af34006e6a11974088a46d42b903418eJohann 2081b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q12, q2 ; x1=(y^sz)-sz = (y^sz)-(-1) (2's complement) 2091b362b15af34006e6a11974088a46d42b903418eJohann vsub.s16 q13, q3 2101b362b15af34006e6a11974088a46d42b903418eJohann 2111b362b15af34006e6a11974088a46d42b903418eJohann vld1.s16 {q2, q3}, [r4@128] ; load dequant_ptr[i] 2121b362b15af34006e6a11974088a46d42b903418eJohann 2131b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q14, q12, q8 ; now find eob 2141b362b15af34006e6a11974088a46d42b903418eJohann vtst.16 q15, q13, q8 ; non-zero element is set to all 1 2151b362b15af34006e6a11974088a46d42b903418eJohann 2161b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q12, q13}, [r6@128]; store: qcoeff = x1 2171b362b15af34006e6a11974088a46d42b903418eJohann 2181b362b15af34006e6a11974088a46d42b903418eJohann vand q10, q10, q14 ; get all valid numbers from scan array 2191b362b15af34006e6a11974088a46d42b903418eJohann vand q11, q11, q15 2201b362b15af34006e6a11974088a46d42b903418eJohann 2211b362b15af34006e6a11974088a46d42b903418eJohann 2221b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 q0, q10, q11 ; find maximum value in q0, q1 2231b362b15af34006e6a11974088a46d42b903418eJohann vmax.u16 d0, d0, d1 2241b362b15af34006e6a11974088a46d42b903418eJohann vmovl.u16 q0, d0 2251b362b15af34006e6a11974088a46d42b903418eJohann 2261b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q2, q12 ; x * Dequant 2271b362b15af34006e6a11974088a46d42b903418eJohann vmul.s16 q3, q13 2281b362b15af34006e6a11974088a46d42b903418eJohann 2291b362b15af34006e6a11974088a46d42b903418eJohann vmax.u32 d0, d0, d1 2301b362b15af34006e6a11974088a46d42b903418eJohann vpmax.u32 d0, d0, d0 2311b362b15af34006e6a11974088a46d42b903418eJohann 2321b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q2, q3}, [r7@128] ; store dqcoeff = x * Dequant 2331b362b15af34006e6a11974088a46d42b903418eJohann 2341b362b15af34006e6a11974088a46d42b903418eJohann vst1.8 {d0[0]}, [r5] ; store eob 2351b362b15af34006e6a11974088a46d42b903418eJohann 2361b362b15af34006e6a11974088a46d42b903418eJohann ldmfd sp!, {r4-r7} 2371b362b15af34006e6a11974088a46d42b903418eJohann bx lr 2381b362b15af34006e6a11974088a46d42b903418eJohann 2391b362b15af34006e6a11974088a46d42b903418eJohannzero_output 2401b362b15af34006e6a11974088a46d42b903418eJohann strb r2, [r5] ; store eob 2411b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q0, q1}, [r6@128] ; qcoeff = 0 2421b362b15af34006e6a11974088a46d42b903418eJohann vst1.s16 {q0, q1}, [r7@128] ; dqcoeff = 0 2431b362b15af34006e6a11974088a46d42b903418eJohann 2441b362b15af34006e6a11974088a46d42b903418eJohann ldmfd sp!, {r4-r7} 2451b362b15af34006e6a11974088a46d42b903418eJohann bx lr 2461b362b15af34006e6a11974088a46d42b903418eJohann 2471b362b15af34006e6a11974088a46d42b903418eJohann ENDP 2481b362b15af34006e6a11974088a46d42b903418eJohann 2491b362b15af34006e6a11974088a46d42b903418eJohann; default inverse zigzag table is defined in vp8/common/entropy.c 2501b362b15af34006e6a11974088a46d42b903418eJohann ALIGN 16 ; enable use of @128 bit aligned loads 2511b362b15af34006e6a11974088a46d42b903418eJohanninv_zig_zag 2521b362b15af34006e6a11974088a46d42b903418eJohann DCW 0x0001, 0x0002, 0x0006, 0x0007 2531b362b15af34006e6a11974088a46d42b903418eJohann DCW 0x0003, 0x0005, 0x0008, 0x000d 2541b362b15af34006e6a11974088a46d42b903418eJohann DCW 0x0004, 0x0009, 0x000c, 0x000e 2551b362b15af34006e6a11974088a46d42b903418eJohann DCW 0x000a, 0x000b, 0x000f, 0x0010 2561b362b15af34006e6a11974088a46d42b903418eJohann 2571b362b15af34006e6a11974088a46d42b903418eJohann END 2581b362b15af34006e6a11974088a46d42b903418eJohann 259