1 /*---------------------------------------------------------------------------*
2 Project: NintendoWare
3 File: gfx_CommandUtil.cpp
4
5 Copyright (C)2009-2011 Nintendo/HAL Laboratory, Inc. All rights reserved.
6
7 These coded instructions, statements, and computer programs contain proprietary
8 information of Nintendo and/or its licensed developers and are protected by
9 national and international copyright laws. They may not be disclosed to third
10 parties or copied or duplicated in any form, in whole or in part, without the
11 prior written consent of Nintendo.
12
13 The content herein is highly confidential and should be handled accordingly.
14
15 $Revision: 31311 $
16 *---------------------------------------------------------------------------*/
17
18 #include "precompiled.h"
19
20 #include <nw/gfx/gfx_CommandUtil.h>
21
22 namespace nw
23 {
24 namespace gfx
25 {
26
27 namespace internal
28 {
29
30 #include <nn/hw/ARM/code32.h>
31
32 //--------------------------------------------------------------------------------
33 asm void
NWCopyVec4Reverse(f32 *,const f32 *)34 NWCopyVec4Reverse(
35 f32* /* dst */,
36 const f32* /* src */)
37 {
38 VLDMIA r1!,{s0-s3}
39 VSTR.F32 s0,[r0,#12]
40 VSTR.F32 s1,[r0,#8]
41 VSTR.F32 s2,[r0,#4]
42 VSTR.F32 s3,[r0,#0]
43 BX lr
44 }
45
46 //--------------------------------------------------------------------------------
47 asm void
NWCopyVec4WithHeader(f32 *,const f32 *,u32)48 NWCopyVec4WithHeader(
49 f32* /* dst */,
50 const f32* /* src */,
51 u32 /* header */ )
52 {
53 VLDMIA r1!,{s0-s3}
54 STR r2,[r0,#4]
55 VSTR.F32 s0,[r0,#16]
56 VSTR.F32 s1,[r0,#12]
57 VSTR.F32 s2,[r0,#8]
58 VSTR.F32 s3,[r0,#0]
59 BX lr
60 }
61
62 //--------------------------------------------------------------------------------
63 asm void
NWCopyMtx24Reverse(f32 *,const f32 *)64 NWCopyMtx24Reverse(
65 f32* /* dst */,
66 const f32* /* src */)
67 {
68 VLDMIA r1!,{s0-s7}
69 VSTR.F32 s0,[r0,#12]
70 VSTR.F32 s1,[r0,#8]
71 VSTR.F32 s2,[r0,#4]
72 VSTR.F32 s3,[r0,#0]
73 VSTR.F32 s4,[r0,#28]
74 VSTR.F32 s5,[r0,#24]
75 VSTR.F32 s6,[r0,#20]
76 VSTR.F32 s7,[r0,#16]
77 BX lr
78 }
79
80 //--------------------------------------------------------------------------------
81 asm void
NWCopyMtx24WithHeader(f32 *,const f32 *,u32)82 NWCopyMtx24WithHeader(
83 f32* /* dst */,
84 const f32* /* src */,
85 u32 /* header */ )
86 {
87 VLDMIA r1!,{s0-s7}
88 STR r2,[r0,#4]
89 VSTR.F32 s0,[r0,#16]
90 VSTR.F32 s1,[r0,#12]
91 VSTR.F32 s2,[r0,#8]
92 VSTR.F32 s3,[r0,#0]
93 VSTR.F32 s4,[r0,#32]
94 VSTR.F32 s5,[r0,#28]
95 VSTR.F32 s6,[r0,#24]
96 VSTR.F32 s7,[r0,#20]
97 BX lr
98 }
99
100 //--------------------------------------------------------------------------------
101 asm void
NWCopyMtx34Reverse(f32 *,const f32 *)102 NWCopyMtx34Reverse(
103 f32* /* dst */,
104 const f32* /* src */)
105 {
106 VLDMIA r1!,{s0-s11}
107 VSTR.F32 s0,[r0,#12]
108 VSTR.F32 s1,[r0,#8]
109 VSTR.F32 s2,[r0,#4]
110 VSTR.F32 s3,[r0,#0]
111 VSTR.F32 s4,[r0,#28]
112 VSTR.F32 s5,[r0,#24]
113 VSTR.F32 s6,[r0,#20]
114 VSTR.F32 s7,[r0,#16]
115 VSTR.F32 s8,[r0,#44]
116 VSTR.F32 s9,[r0,#40]
117 VSTR.F32 s10,[r0,#36]
118 VSTR.F32 s11,[r0,#32]
119 BX lr
120 }
121
122 //--------------------------------------------------------------------------------
123 asm void
NWCopyMtx34WithHeader(f32 *,const f32 *,u32)124 NWCopyMtx34WithHeader(
125 f32* /* dst */,
126 const f32* /* src */,
127 u32 /* header */ )
128 {
129 VLDMIA r1!,{s0-s11}
130 STR r2,[r0,#4]
131 VSTR.F32 s0,[r0,#16]
132 VSTR.F32 s1,[r0,#12]
133 VSTR.F32 s2,[r0,#8]
134 VSTR.F32 s3,[r0,#0]
135 VSTR.F32 s4,[r0,#32]
136 VSTR.F32 s5,[r0,#28]
137 VSTR.F32 s6,[r0,#24]
138 VSTR.F32 s7,[r0,#20]
139 VSTR.F32 s8,[r0,#48]
140 VSTR.F32 s9,[r0,#44]
141 VSTR.F32 s10,[r0,#40]
142 VSTR.F32 s11,[r0,#36]
143 BX lr
144 }
145
146 //--------------------------------------------------------------------------------
147 asm void
NWCopyMtx44Reverse(f32 *,const f32 *)148 NWCopyMtx44Reverse(
149 f32* /* dst */,
150 const f32* /* src */)
151 {
152 VLDMIA r1!,{s0-s15}
153 VSTR.F32 s0,[r0,#12]
154 VSTR.F32 s1,[r0,#8]
155 VSTR.F32 s2,[r0,#4]
156 VSTR.F32 s3,[r0,#0]
157 VSTR.F32 s4,[r0,#28]
158 VSTR.F32 s5,[r0,#24]
159 VSTR.F32 s6,[r0,#20]
160 VSTR.F32 s7,[r0,#16]
161 VSTR.F32 s8,[r0,#44]
162 VSTR.F32 s9,[r0,#40]
163 VSTR.F32 s10,[r0,#36]
164 VSTR.F32 s11,[r0,#32]
165 VSTR.F32 s12,[r0,#60]
166 VSTR.F32 s13,[r0,#56]
167 VSTR.F32 s14,[r0,#52]
168 VSTR.F32 s15,[r0,#48]
169 BX lr
170 }
171
172 //--------------------------------------------------------------------------------
NWCopyMtx44WithHeader(f32 *,const f32 *,u32)173 asm void NWCopyMtx44WithHeader(
174 f32* /* dst */,
175 const f32* /* src */,
176 u32 /* header */ )
177 {
178 VLDMIA r1!,{s0-s15}
179 STR r2,[r0,#4]
180 VSTR.F32 s0,[r0,#16]
181 VSTR.F32 s1,[r0,#12]
182 VSTR.F32 s2,[r0,#8]
183 VSTR.F32 s3,[r0,#0]
184 VSTR.F32 s4,[r0,#32]
185 VSTR.F32 s5,[r0,#28]
186 VSTR.F32 s6,[r0,#24]
187 VSTR.F32 s7,[r0,#20]
188 VSTR.F32 s8,[r0,#48]
189 VSTR.F32 s9,[r0,#44]
190 VSTR.F32 s10,[r0,#40]
191 VSTR.F32 s11,[r0,#36]
192 VSTR.F32 s12,[r0,#64]
193 VSTR.F32 s13,[r0,#60]
194 VSTR.F32 s14,[r0,#56]
195 VSTR.F32 s15,[r0,#52]
196 BX lr
197 }
198
199 //--------------------------------------------------------------------------------
200 asm void
NWCopyVec3Reverse(f32 *,const f32 *)201 NWCopyVec3Reverse(
202 f32* /* dst */,
203 const f32* /* src */)
204 {
205 VLDMIA r1!,{s0-s2}
206 MOV r3, #0
207 STR r3,[r0,#0]
208
209 VSTR.F32 s0,[r0,#12]
210 VSTR.F32 s1,[r0,#8]
211 VSTR.F32 s2,[r0,#4]
212 BX lr
213 }
214
215 //--------------------------------------------------------------------------------
216 asm void
NWCopyVec3WithHeader(f32 *,const f32 *,u32)217 NWCopyVec3WithHeader(
218 f32* /* dst */,
219 const f32* /* src */,
220 u32 /* header */ )
221 {
222 VLDMIA r1!,{s0-s2}
223 MOV r3, #0
224 STR r2,[r0,#4]
225 STR r3,[r0,#0]
226
227 VSTR.F32 s0,[r0,#16]
228 VSTR.F32 s1,[r0,#12]
229 VSTR.F32 s2,[r0,#8]
230 BX lr
231 }
232
233 //--------------------------------------------------------------------------------
234 asm void
NWCopyMtx23Reverse(f32 *,const f32 *)235 NWCopyMtx23Reverse(
236 f32* /* dst */,
237 const f32* /* src */)
238 {
239 VLDMIA r1!,{s0-s5}
240 MOV r3, #0
241 STR r3,[r0,#0]
242 STR r3,[r0,#16]
243
244 VSTR.F32 s0,[r0,#12]
245 VSTR.F32 s1,[r0,#8]
246 VSTR.F32 s2,[r0,#4]
247 VSTR.F32 s3,[r0,#28]
248 VSTR.F32 s4,[r0,#24]
249 VSTR.F32 s5,[r0,#20]
250 BX lr
251 }
252
253 //--------------------------------------------------------------------------------
254 asm void
NWCopyMtx23WithHeader(f32 *,const f32 *,u32)255 NWCopyMtx23WithHeader(
256 f32* /* dst */,
257 const f32* /* src */,
258 u32 /* header */ )
259 {
260 VLDMIA r1!,{s0-s5}
261 MOV r3, #0
262 STR r2, [r0,#4]
263 STR r3, [r0,#0]
264 STR r3, [r0,#20]
265
266 VSTR.F32 s0, [r0,#16]
267 VSTR.F32 s1, [r0,#12]
268 VSTR.F32 s2, [r0,#8]
269 VSTR.F32 s3, [r0,#32]
270 VSTR.F32 s4, [r0,#28]
271 VSTR.F32 s5, [r0,#24]
272 BX lr
273 }
274
275 //--------------------------------------------------------------------------------
276 asm void
NWCopyMtx33Reverse(f32 *,const f32 *)277 NWCopyMtx33Reverse(
278 f32* /* dst */,
279 const f32* /* src */)
280 {
281 VLDMIA r1!,{s0-s8}
282 MOV r3, #0
283 STR r3, [r0,#0]
284 STR r3, [r0,#16]
285 STR r3, [r0,#32]
286
287 VSTR.F32 s0, [r0,#12]
288 VSTR.F32 s1, [r0,#8]
289 VSTR.F32 s2, [r0,#4]
290 VSTR.F32 s3, [r0,#28]
291 VSTR.F32 s4, [r0,#24]
292 VSTR.F32 s5, [r0,#20]
293 VSTR.F32 s6, [r0,#44]
294 VSTR.F32 s7, [r0,#40]
295 VSTR.F32 s8, [r0,#36]
296 BX lr
297 }
298
299 //--------------------------------------------------------------------------------
300 asm void
NWCopyMtx33WithHeader(f32 *,const f32 *,u32)301 NWCopyMtx33WithHeader(
302 f32* /* dst */,
303 const f32* /* src */,
304 u32 /* header */ )
305 {
306 VLDMIA r1!,{s0-s8}
307 MOV r3, #0
308 STR r2, [r0,#4]
309 STR r3, [r0,#0]
310 STR r3, [r0,#20]
311 STR r3, [r0,#36]
312
313 VSTR.F32 s0,[r0,#16]
314 VSTR.F32 s1,[r0,#12]
315 VSTR.F32 s2,[r0,#8]
316 VSTR.F32 s3,[r0,#32]
317 VSTR.F32 s4,[r0,#28]
318 VSTR.F32 s5,[r0,#24]
319 VSTR.F32 s6,[r0,#48]
320 VSTR.F32 s7,[r0,#44]
321 VSTR.F32 s8,[r0,#40]
322 BX lr
323 }
324
325 //--------------------------------------------------------------------------------
326 asm void
NWCopyMtx43Reverse(f32 *,const f32 *)327 NWCopyMtx43Reverse(
328 f32* /* dst */,
329 const f32* /* src */)
330 {
331 VLDMIA r1!,{s0-s11}
332 MOV r3, #0
333 STR r3, [r0,#0]
334 STR r3, [r0,#16]
335 STR r3, [r0,#32]
336 STR r3, [r0,#48]
337
338 VSTR.F32 s0, [r0,#12]
339 VSTR.F32 s1, [r0,#8]
340 VSTR.F32 s2, [r0,#4]
341 VSTR.F32 s3, [r0,#28]
342 VSTR.F32 s4, [r0,#24]
343 VSTR.F32 s5, [r0,#20]
344 VSTR.F32 s6, [r0,#44]
345 VSTR.F32 s7, [r0,#40]
346 VSTR.F32 s8, [r0,#36]
347 VSTR.F32 s9, [r0,#60]
348 VSTR.F32 s10, [r0,#56]
349 VSTR.F32 s11, [r0,#52]
350 BX lr
351 }
352
353 //--------------------------------------------------------------------------------
354 asm void
NWCopyMtx43WithHeader(f32 *,const f32 *,u32)355 NWCopyMtx43WithHeader(
356 f32* /* dst */,
357 const f32* /* src */,
358 u32 /* header */ )
359 {
360 VLDMIA r1!,{s0-s11}
361 MOV r3, #0
362 STR r2, [r0,#4]
363 STR r3, [r0,#0]
364 STR r3, [r0,#20]
365 STR r3, [r0,#36]
366 STR r3, [r0,#52]
367
368 VSTR.F32 s0, [r0,#16]
369 VSTR.F32 s1, [r0,#12]
370 VSTR.F32 s2, [r0,#8]
371 VSTR.F32 s3, [r0,#32]
372 VSTR.F32 s4, [r0,#28]
373 VSTR.F32 s5, [r0,#24]
374 VSTR.F32 s6, [r0,#48]
375 VSTR.F32 s7, [r0,#44]
376 VSTR.F32 s8, [r0,#40]
377 VSTR.F32 s9, [r0,#64]
378 VSTR.F32 s10, [r0,#60]
379 VSTR.F32 s11, [r0,#56]
380 BX lr
381 }
382
383 //--------------------------------------------------------------------------------
384 asm void
NWCopyVec2Reverse(f32 *,const f32 *)385 NWCopyVec2Reverse(
386 f32* /* dst */,
387 const f32* /* src */)
388 {
389 VLDMIA r1!,{s0-s1}
390 MOV r3, #0
391 STR r3, [r0,#0]
392 STR r3, [r0,#4]
393
394 VSTR.F32 s0, [r0,#12]
395 VSTR.F32 s1, [r0,#8]
396 BX lr
397 }
398
399 //--------------------------------------------------------------------------------
400 asm void
NWCopyVec2WithHeader(f32 *,const f32 *,u32)401 NWCopyVec2WithHeader(
402 f32* /* dst */,
403 const f32* /* src */,
404 u32 /* header */ )
405 {
406 VLDMIA r1!,{s0-s1}
407 MOV r3, #0
408 STR r2, [r0,#4]
409 STR r3, [r0,#0]
410 STR r3, [r0,#8]
411
412 VSTR.F32 s0, [r0,#16]
413 VSTR.F32 s1, [r0,#12]
414 BX lr
415 }
416
417 //--------------------------------------------------------------------------------
418 asm void
NWCopyMtx22Reverse(f32 *,const f32 *)419 NWCopyMtx22Reverse(
420 f32* /* dst */,
421 const f32* /* src */)
422 {
423 VLDMIA r1!,{s0-s3}
424 MOV r3, #0
425 STR r3, [r0,#0]
426 STR r3, [r0,#4]
427 STR r3, [r0,#16]
428 STR r3, [r0,#20]
429
430 VSTR.F32 s0, [r0,#12]
431 VSTR.F32 s1, [r0,#8]
432 VSTR.F32 s2, [r0,#28]
433 VSTR.F32 s3, [r0,#24]
434 BX lr
435 }
436
437 //--------------------------------------------------------------------------------
438 asm void
NWCopyMtx22WithHeader(f32 *,const f32 *,u32)439 NWCopyMtx22WithHeader(
440 f32* /* dst */,
441 const f32* /* src */,
442 u32 /* header */ )
443 {
444 VLDMIA r1!,{s0-s3}
445 MOV r3, #0
446 STR r2, [r0,#4]
447 STR r3, [r0,#0]
448 STR r3, [r0,#8]
449 STR r3, [r0,#20]
450 STR r3, [r0,#24]
451
452
453 VSTR.F32 s0, [r0,#16]
454 VSTR.F32 s1, [r0,#12]
455 VSTR.F32 s2, [r0,#32]
456 VSTR.F32 s3, [r0,#28]
457 BX lr
458 }
459
460 //--------------------------------------------------------------------------------
461 asm void
NWCopyMtx32Reverse(f32 *,const f32 *)462 NWCopyMtx32Reverse(
463 f32* /* dst */,
464 const f32* /* src */)
465 {
466 VLDMIA r1!,{s0-s5}
467 MOV r3, #0
468 STR r3, [r0,#0]
469 STR r3, [r0,#4]
470 STR r3, [r0,#16]
471 STR r3, [r0,#20]
472 STR r3, [r0,#32]
473 STR r3, [r0,#36]
474
475 VSTR.F32 s0, [r0,#12]
476 VSTR.F32 s1, [r0,#8]
477 VSTR.F32 s2, [r0,#28]
478 VSTR.F32 s3, [r0,#24]
479 VSTR.F32 s4, [r0,#44]
480 VSTR.F32 s5, [r0,#40]
481 BX lr
482 }
483
484 //--------------------------------------------------------------------------------
485 asm void
NWCopyMtx32WithHeader(f32 *,const f32 *,u32)486 NWCopyMtx32WithHeader(
487 f32* /* dst */,
488 const f32* /* src */,
489 u32 /* header */ )
490 {
491 VLDMIA r1!,{s0-s5}
492 MOV r3, #0
493 STR r2, [r0,#4]
494 STR r3, [r0,#0]
495 STR r3, [r0,#8]
496 STR r3, [r0,#20]
497 STR r3, [r0,#24]
498 STR r3, [r0,#36]
499 STR r3, [r0,#40]
500
501 VSTR.F32 s0, [r0,#16]
502 VSTR.F32 s1, [r0,#12]
503 VSTR.F32 s2, [r0,#32]
504 VSTR.F32 s3, [r0,#28]
505 VSTR.F32 s4, [r0,#48]
506 VSTR.F32 s5, [r0,#44]
507 BX lr
508 }
509
510 //--------------------------------------------------------------------------------
511 asm void
NWCopyMtx42Reverse(f32 *,const f32 *)512 NWCopyMtx42Reverse(
513 f32* /* dst */,
514 const f32* /* src */)
515 {
516 VLDMIA r1!,{s0-s7}
517 MOV r3, #0
518 STR r3, [r0,#0]
519 STR r3, [r0,#4]
520 STR r3, [r0,#16]
521 STR r3, [r0,#20]
522 STR r3, [r0,#32]
523 STR r3, [r0,#36]
524 STR r3, [r0,#48]
525 STR r3, [r0,#52]
526
527 VSTR.F32 s0, [r0,#12]
528 VSTR.F32 s1, [r0,#8]
529 VSTR.F32 s2, [r0,#28]
530 VSTR.F32 s3, [r0,#24]
531 VSTR.F32 s4, [r0,#44]
532 VSTR.F32 s5, [r0,#40]
533 VSTR.F32 s6, [r0,#60]
534 VSTR.F32 s7, [r0,#56]
535 BX lr
536 }
537
538 //--------------------------------------------------------------------------------
539 asm void
NWCopyMtx42WithHeader(f32 *,const f32 *,u32)540 NWCopyMtx42WithHeader(
541 f32* /* dst */,
542 const f32* /* src */,
543 u32 /* header */ )
544 {
545 VLDMIA r1!,{s0-s7}
546 MOV r3, #0
547 STR r2, [r0,#4]
548 STR r3, [r0,#0]
549 STR r3, [r0,#8]
550 STR r3, [r0,#20]
551 STR r3, [r0,#24]
552 STR r3, [r0,#36]
553 STR r3, [r0,#40]
554 STR r3, [r0,#52]
555 STR r3, [r0,#56]
556
557 VSTR.F32 s0, [r0,#16]
558 VSTR.F32 s1, [r0,#12]
559 VSTR.F32 s2, [r0,#32]
560 VSTR.F32 s3, [r0,#28]
561 VSTR.F32 s4, [r0,#48]
562 VSTR.F32 s5, [r0,#44]
563 VSTR.F32 s6, [r0,#64]
564 VSTR.F32 s7, [r0,#60]
565 BX lr
566 }
567
568 //--------------------------------------------------------------------------------
569 asm void
NWCopyVec1Reverse(f32 *,const f32 *)570 NWCopyVec1Reverse(
571 f32* /* dst */,
572 const f32* /* src */)
573 {
574 VLDR.F32 s0, [r1]
575 MOV r3, #0
576 STR r3, [r0,#0]
577 STR r3, [r0,#4]
578 STR r3, [r0,#8]
579
580 VSTR.F32 s0, [r0,#12]
581 BX lr
582 }
583
584 //--------------------------------------------------------------------------------
585 asm void
NWCopyVec1WithHeader(f32 *,const f32 *,u32)586 NWCopyVec1WithHeader(
587 f32* /* dst */,
588 const f32* /* src */,
589 u32 /* header */ )
590 {
591 VLDR.F32 s0, [r1]
592 MOV r3, #0
593 STR r2, [r0,#4]
594 STR r3, [r0,#0]
595 STR r3, [r0,#8]
596 STR r3, [r0,#12]
597
598 VSTR.F32 s0, [r0,#16]
599 BX lr
600 }
601
602 //--------------------------------------------------------------------------------
603 asm void
NWCopyMtx21Reverse(f32 *,const f32 *)604 NWCopyMtx21Reverse(
605 f32* /* dst */,
606 const f32* /* src */)
607 {
608 VLDMIA r1!,{s0-s1}
609 MOV r3, #0
610 STR r3, [r0,#0]
611 STR r3, [r0,#4]
612 STR r3, [r0,#8]
613 STR r3, [r0,#16]
614 STR r3, [r0,#20]
615 STR r3, [r0,#24]
616
617 VSTR.F32 s0, [r0,#12]
618 VSTR.F32 s1, [r0,#28]
619 BX lr
620 }
621
622 //--------------------------------------------------------------------------------
623 asm void
NWCopyMtx21WithHeader(f32 *,const f32 *,u32)624 NWCopyMtx21WithHeader(
625 f32* /* dst */,
626 const f32* /* src */,
627 u32 /* header */ )
628 {
629 VLDMIA r1!,{s0-s1}
630 MOV r3, #0
631 STR r2, [r0,#4]
632 STR r3, [r0,#0]
633 STR r3, [r0,#8]
634 STR r3, [r0,#12]
635 STR r3, [r0,#20]
636 STR r3, [r0,#24]
637 STR r3, [r0,#28]
638
639 VSTR.F32 s0, [r0,#16]
640 VSTR.F32 s1, [r0,#32]
641 BX lr
642 }
643
644 //--------------------------------------------------------------------------------
645 asm void
NWCopyMtx31Reverse(f32 *,const f32 *)646 NWCopyMtx31Reverse(
647 f32* /* dst */,
648 const f32* /* src */)
649 {
650 VLDMIA r1!,{s0-s2}
651 MOV r3, #0
652 STR r3, [r0,#0]
653 STR r3, [r0,#4]
654 STR r3, [r0,#8]
655 STR r3, [r0,#16]
656 STR r3, [r0,#20]
657 STR r3, [r0,#24]
658 STR r3, [r0,#32]
659 STR r3, [r0,#36]
660 STR r3, [r0,#40]
661
662 VSTR.F32 s0, [r0,#12]
663 VSTR.F32 s1, [r0,#28]
664 VSTR.F32 s2, [r0,#44]
665 BX lr
666 }
667
668 //--------------------------------------------------------------------------------
669 asm void
NWCopyMtx31WithHeader(f32 *,const f32 *,u32)670 NWCopyMtx31WithHeader(
671 f32* /* dst */,
672 const f32* /* src */,
673 u32 /* header */ )
674 {
675 VLDMIA r1!,{s0-s2}
676 MOV r3, #0
677 STR r2, [r0,#4]
678 STR r3, [r0,#0]
679 STR r3, [r0,#8]
680 STR r3, [r0,#12]
681 STR r3, [r0,#20]
682 STR r3, [r0,#24]
683 STR r3, [r0,#28]
684 STR r3, [r0,#36]
685 STR r3, [r0,#40]
686 STR r3, [r0,#44]
687
688 VSTR.F32 s0, [r0,#16]
689 VSTR.F32 s1, [r0,#32]
690 VSTR.F32 s2, [r0,#48]
691 BX lr
692 }
693
694 //--------------------------------------------------------------------------------
695 asm void
NWCopyMtx41Reverse(f32 *,const f32 *)696 NWCopyMtx41Reverse(
697 f32* /* dst */,
698 const f32* /* src */)
699 {
700 VLDMIA r1!,{s0-s3}
701 MOV r3, #0
702 STR r3, [r0,#0]
703 STR r3, [r0,#4]
704 STR r3, [r0,#8]
705 STR r3, [r0,#16]
706 STR r3, [r0,#20]
707 STR r3, [r0,#24]
708 STR r3, [r0,#32]
709 STR r3, [r0,#36]
710 STR r3, [r0,#40]
711 STR r3, [r0,#48]
712 STR r3, [r0,#52]
713 STR r3, [r0,#56]
714
715 VSTR.F32 s0,[r0,#12]
716 VSTR.F32 s1,[r0,#28]
717 VSTR.F32 s2,[r0,#44]
718 VSTR.F32 s3,[r0,#60]
719 BX lr
720 }
721
722 //--------------------------------------------------------------------------------
723 asm void
NWCopyMtx41WithHeader(f32 *,const f32 *,u32)724 NWCopyMtx41WithHeader(
725 f32* /* dst */,
726 const f32* /* src */,
727 u32 /* header */ )
728 {
729 VLDMIA r1!,{s0-s3}
730 MOV r3, #0
731 STR r2, [r0,#4]
732 STR r3, [r0,#0]
733 STR r3, [r0,#8]
734 STR r3, [r0,#12]
735 STR r3, [r0,#20]
736 STR r3, [r0,#24]
737 STR r3, [r0,#28]
738 STR r3, [r0,#36]
739 STR r3, [r0,#40]
740 STR r3, [r0,#44]
741 STR r3, [r0,#52]
742 STR r3, [r0,#56]
743 STR r3, [r0,#60]
744
745 VSTR.F32 s0, [r0,#12]
746 VSTR.F32 s1, [r0,#28]
747 VSTR.F32 s2, [r0,#44]
748 VSTR.F32 s3, [r0,#60]
749 BX lr
750 }
751
752 #include <nn/hw/ARM/codereset.h>
753
754 } // namespace internal
755 } // namespace gfx
756 } // namespace nw
757