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