2 * Copyright © <2010>, Intel Corporation.
\r
4 * This program is licensed under the terms and conditions of the
\r
5 * Eclipse Public License (EPL), version 1.0. The full text of the EPL is at
\r
6 * http://www.opensource.org/licenses/eclipse-1.0.php.
\r
9 // Module name: WriteURB_Child.asm
\r
11 // General purpose module to write data to URB using the URB handle/offset in r0
\r
13 //----------------------------------------------------------------
\r
15 // - a0.0 and a0.1 is meg desc, has been assign with URB offset and msg size
\r
16 // - MRFs are alrady assigned with data.
\r
17 //----------------------------------------------------------------
\r
19 // 16x16 byte pixel block can be saved using just 1 "send" instruction.
\r
21 #if defined(_DEBUG)
\r
22 mov (1) EntrySignatureC:w 0x3535:w
\r
25 // URB write header:
\r
26 //mov (8) MSGSRC.0:ud r0.0<8;8,1>:ud // Copy parent R0 header
\r
28 //shr (1) Temp2_W:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits.
\r
29 //add (1) MSGSRC.0:uw r0.0:uw Temp2_W:uw
\r
31 shr (1) MSGSRC.0:uw URBOffsetC:uw 1:w // divide by 2, because URB entry is counted by 512bits. Offset is counted by 256bits.
\r
33 //mov (1) MSGSRC.1:ud 0:ud // Reset Handle 1
\r
35 // URB write 1 MRFs,
\r
36 // Current MB offset is in URBOffset, use it as write origin
\r
37 // Add 2 to offset to store data be be passed to the right MB
\r
39 send null:uw m0 MSGSRC:uw URBWRITE MSG_LEN(1)+URBWMSGDSC+0x20 // URB write
\r