4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright (c) 1994, 2010, Oracle and/or its affiliates. All rights reserved.
31 * Copy s2 to s1, always copy n bytes.
32 * Note: this does not work for overlapped copies, bcopy() does
34 * Fast assembler language version of the following C-program for memcpy
35 * which represents the `standard' for the C-library.
38 * memcpy(void *s, const void *s0, size_t n)
42 * const char *s2 = s0;
51 #include <sys/asm_linkage.h>
52 #include <sys/sun4asi.h>
55 ANSI_PRAGMA_WEAK
(memmove
,function
)
56 ANSI_PRAGMA_WEAK
(memcpy
,function
)
59 cmp %o1
, %o0
! if from address is
>= to use forward copy
60 bgeu
%ncc
, forcpy
! else use backward if
...
61 sub %o0
, %o1
, %o4
! get difference of two addresses
62 cmp %o2
, %o4
! compare size
and difference of addresses
63 bleu
%ncc
, forcpy
! if size is bigger
, do overlapped copy
67 ! an overlapped copy that must
be done
"backwards"
70 mov
%o0
, %o5
! save des address for return val
71 add %o1
, %o2
, %o1
! get to end of source space
72 add %o0
, %o2
, %o0
! get to end of destination space
76 bgeu
,pn
%ncc
, .dbalign
81 1: deccc
%o2
! decrement count
82 blu
,pn
%ncc
, exit
! loop until done
83 dec %o0
! decrement to address
84 dec %o1
! decrement from address
85 ldub
[%o1
], %o3
! read
a byte
86 ba 1b ! loop until done
87 stb %o3
, [%o0
] ! write byte
102 rd
%fprs
, %o3
! o3
= fprs
105 ! if fprs.fef
== 0, set it. Checking it
, reqires
2 instructions.
106 ! So set it anyway
, without checking.
107 wr
%g0
, 0x4, %fprs
! fprs.fef
= 1
109 alignaddr
%o1
, %g0
, %g1
! align src
110 ldd
[%g1
], %d0
! get first
8 byte block
116 sub %o0
, 8, %o0
! since we are at the end
117 ! when we first enter the loop
119 faligndata
%d2
, %d0
, %d8
! extract
8 bytes out
120 std %d8
, [%o0
] ! store it
123 sub %o2
, 8, %o2
! 8 less bytes to copy
124 cmp %o2
, 8 ! or do we have
< 8 bytes
128 and %o3
, 0x4, %o3
! fprs.du
= fprs.dl
= 0
130 wr
%o3
, %g0
, %fprs
! fprs
= o3
- restore fprs
138 mov
%o0
, %o5
! save des address for return val
140 cmp %o2
, 32 ! for small counts copy bytes
141 bgu
,a %ncc
, .alignsrc
142 andcc
%o1
, 7, %o3
! is src aligned on
a 8 byte bound
162 bz
%ncc
, .bigcpy ! src already double aligned
164 neg %o3
! bytes till src double aligned
166 sub %o2
, %o3
, %o2
! update o2 with new count
168 ! Copy
%o3 bytes till double aligned
177 ! Now Source
(%o1
) is double word aligned
179 .bigcpy: ! >= 17 bytes to copy
180 andcc
%o0
, 7, %o3
! is
dst aligned on
a 8 byte bound
181 bz
%ncc
, .blkchk ! already double aligned
183 neg %o3
! bytes till double aligned
185 sub %o2
, %o3
, %o2
! update o2 with new count
187 ! Copy
%o3 bytes till double aligned
196 ! Now Destination
(%o0
) is double word aligned
198 cmp %o2
, 384 ! if cnt
< 256 + 128 - no Block
ld/st
199 bgeu
,a %ncc
, blkcpy
! do double word copy
200 subcc
%o0
, %o1
, %o4
! %o4
= dest
- src
202 ! double word copy
- using ldd
and faligndata. Copies upto
203 ! 8 byte multiple count
and does byte copy for the residual.
205 rd
%fprs
, %o3
! o3
= fprs
207 ! if fprs.fef
== 0, set it. Checking it
, reqires
2 instructions.
208 ! So set it anyway
, without checking.
209 wr
%g0
, 0x4, %fprs
! fprs.fef
= 1
210 andn
%o2
, 7, %o4
! o4 has
8 byte aligned cnt
212 alignaddr
%o1
, %g0
, %g1
220 faligndata
%d0
, %d2
, %d8
229 faligndata
%d2
, %d0
, %d8
235 .residcp: ! Do byte copy
248 and %o3
, 0x4, %o3
! fprs.du
= fprs.dl
= 0
249 wr
%o3
, %g0
, %fprs
! fprs
= o3
- restore fprs
254 ! subcc
%o0
, %o1
, %o4
! in delay slot of branch
255 bneg
,a,pn
%ncc
, 1f
! %o4
= abs(%o4
)
259 * Compare against 256 since we should be checking block addresses
260 * and (dest & ~63) - (src & ~63) can be 3 blocks even if
261 * src = dest + (64 * 3) + 63.
263 cmp %o4
, 256 ! if smaller than
3 blocks skip
264 blu
,pn
%ncc
, .dwcpy ! and do it the slower way
267 save
%sp
, -SA
(MINFRAME
), %sp
268 rd
%fprs
, %l3
! l3
= fprs
270 ! if fprs.fef
== 0, set it. Checking it
, reqires
2 instructions.
271 ! So set it anyway
, without checking.
272 wr
%g0
, 0x4, %fprs
! fprs.fef
= 1
274 bz
,pn
%ncc
, blalign
! now block aligned
276 neg %i3
! bytes till block aligned
277 sub %i2
, %i3
, %i2
! update
%i2 with new count
279 ! Copy
%i3 bytes till
dst is block
(64 byte
) aligned. use
280 ! double word copies.
282 alignaddr
%i1
, %g0
, %g1
289 faligndata
%d0
, %d2
, %d8
297 faligndata
%d2
, %d0
, %d8
306 ! %i3
= blocks
(length
- 64) / 64
307 ! %i4
= doubles remaining
(length
- blocks
)
316 andn
%i1
, 0x3F, %l7
! blk aligned address
317 alignaddr
%i1
, %g0
, %g0
! gen
%gsr
319 srl
%i1
, 3, %l5
! bits
3,4,5 are now least sig in
%l5
320 andcc
%l5
, 7, %l6
! mask everything except bits
1,2 3
324 be,a %ncc
, 1f
! branch taken if src is
64-byte aligned
325 ldda
[%l7
]ASI_BLK_P
, %d0
327 call
.+8 ! get the address of this instruction in %o7
330 jmp
%o7
+ 16 ! jump to the starting ldd instruction
341 ldda
[%l7
]ASI_BLK_P
, %d16
343 ldda
[%l7
]ASI_BLK_P
, %d32
348 ! switch statement to get us to the right
8 byte blk within
a
383 faligndata
%d0
, %d2
, %d48 ;\
384 faligndata
%d2
, %d4
, %d50 ;\
385 faligndata
%d4
, %d6
, %d52 ;\
386 faligndata
%d6
, %d8
, %d54 ;\
387 faligndata
%d8
, %d10
, %d56 ;\
388 faligndata
%d10
, %d12
, %d58 ;\
389 faligndata
%d12
, %d14
, %d60 ;\
390 faligndata
%d14
, %d16
, %d62
393 faligndata
%d16
, %d18
, %d48 ;\
394 faligndata
%d18
, %d20
, %d50 ;\
395 faligndata
%d20
, %d22
, %d52 ;\
396 faligndata
%d22
, %d24
, %d54 ;\
397 faligndata
%d24
, %d26
, %d56 ;\
398 faligndata
%d26
, %d28
, %d58 ;\
399 faligndata
%d28
, %d30
, %d60 ;\
400 faligndata
%d30
, %d32
, %d62
403 faligndata
%d32
, %d34
, %d48 ;\
404 faligndata
%d34
, %d36
, %d50 ;\
405 faligndata
%d36
, %d38
, %d52 ;\
406 faligndata
%d38
, %d40
, %d54 ;\
407 faligndata
%d40
, %d42
, %d56 ;\
408 faligndata
%d42
, %d44
, %d58 ;\
409 faligndata
%d44
, %d46
, %d60 ;\
410 faligndata
%d46
, %d0
, %d62
413 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
415 ldda
[%l7
]ASI_BLK_P
, %d0
416 stda
%d48
, [%i0
]ASI_BLK_P
421 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
423 ldda
[%l7
]ASI_BLK_P
, %d16
424 stda
%d48
, [%i0
]ASI_BLK_P
429 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
431 ldda
[%l7
]ASI_BLK_P
, %d32
432 stda
%d48
, [%i0
]ASI_BLK_P
441 stda
%d48
, [%i0
]ASI_BLK_P
445 stda
%d48
, [%i0
]ASI_BLK_P
451 stda
%d48
, [%i0
]ASI_BLK_P
455 stda
%d48
, [%i0
]ASI_BLK_P
461 stda
%d48
, [%i0
]ASI_BLK_P
465 stda
%d48
, [%i0
]ASI_BLK_P
471 faligndata
%d2
, %d4
, %d48 ;\
472 faligndata
%d4
, %d6
, %d50 ;\
473 faligndata
%d6
, %d8
, %d52 ;\
474 faligndata
%d8
, %d10
, %d54 ;\
475 faligndata
%d10
, %d12
, %d56 ;\
476 faligndata
%d12
, %d14
, %d58 ;\
477 faligndata
%d14
, %d16
, %d60 ;\
478 faligndata
%d16
, %d18
, %d62
481 faligndata
%d18
, %d20
, %d48 ;\
482 faligndata
%d20
, %d22
, %d50 ;\
483 faligndata
%d22
, %d24
, %d52 ;\
484 faligndata
%d24
, %d26
, %d54 ;\
485 faligndata
%d26
, %d28
, %d56 ;\
486 faligndata
%d28
, %d30
, %d58 ;\
487 faligndata
%d30
, %d32
, %d60 ;\
488 faligndata
%d32
, %d34
, %d62
491 faligndata
%d34
, %d36
, %d48 ;\
492 faligndata
%d36
, %d38
, %d50 ;\
493 faligndata
%d38
, %d40
, %d52 ;\
494 faligndata
%d40
, %d42
, %d54 ;\
495 faligndata
%d42
, %d44
, %d56 ;\
496 faligndata
%d44
, %d46
, %d58 ;\
497 faligndata
%d46
, %d0
, %d60 ;\
498 faligndata
%d0
, %d2
, %d62
501 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
503 ldda
[%l7
]ASI_BLK_P
, %d0
504 stda
%d48
, [%i0
]ASI_BLK_P
509 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
511 ldda
[%l7
]ASI_BLK_P
, %d16
512 stda
%d48
, [%i0
]ASI_BLK_P
517 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
519 ldda
[%l7
]ASI_BLK_P
, %d32
520 stda
%d48
, [%i0
]ASI_BLK_P
528 stda
%d48
, [%i0
]ASI_BLK_P
532 stda
%d48
, [%i0
]ASI_BLK_P
538 stda
%d48
, [%i0
]ASI_BLK_P
542 stda
%d48
, [%i0
]ASI_BLK_P
548 stda
%d48
, [%i0
]ASI_BLK_P
552 stda
%d48
, [%i0
]ASI_BLK_P
557 faligndata
%d4
, %d6
, %d48 ;\
558 faligndata
%d6
, %d8
, %d50 ;\
559 faligndata
%d8
, %d10
, %d52 ;\
560 faligndata
%d10
, %d12
, %d54 ;\
561 faligndata
%d12
, %d14
, %d56 ;\
562 faligndata
%d14
, %d16
, %d58 ;\
563 faligndata
%d16
, %d18
, %d60 ;\
564 faligndata
%d18
, %d20
, %d62
567 faligndata
%d20
, %d22
, %d48 ;\
568 faligndata
%d22
, %d24
, %d50 ;\
569 faligndata
%d24
, %d26
, %d52 ;\
570 faligndata
%d26
, %d28
, %d54 ;\
571 faligndata
%d28
, %d30
, %d56 ;\
572 faligndata
%d30
, %d32
, %d58 ;\
573 faligndata
%d32
, %d34
, %d60 ;\
574 faligndata
%d34
, %d36
, %d62
577 faligndata
%d36
, %d38
, %d48 ;\
578 faligndata
%d38
, %d40
, %d50 ;\
579 faligndata
%d40
, %d42
, %d52 ;\
580 faligndata
%d42
, %d44
, %d54 ;\
581 faligndata
%d44
, %d46
, %d56 ;\
582 faligndata
%d46
, %d0
, %d58 ;\
583 faligndata
%d0
, %d2
, %d60 ;\
584 faligndata
%d2
, %d4
, %d62
587 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
589 ldda
[%l7
]ASI_BLK_P
, %d0
590 stda
%d48
, [%i0
]ASI_BLK_P
595 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
597 ldda
[%l7
]ASI_BLK_P
, %d16
598 stda
%d48
, [%i0
]ASI_BLK_P
603 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
605 ldda
[%l7
]ASI_BLK_P
, %d32
606 stda
%d48
, [%i0
]ASI_BLK_P
615 stda
%d48
, [%i0
]ASI_BLK_P
619 stda
%d48
, [%i0
]ASI_BLK_P
625 stda
%d48
, [%i0
]ASI_BLK_P
629 stda
%d48
, [%i0
]ASI_BLK_P
635 stda
%d48
, [%i0
]ASI_BLK_P
639 stda
%d48
, [%i0
]ASI_BLK_P
645 faligndata
%d6
, %d8
, %d48 ;\
646 faligndata
%d8
, %d10
, %d50 ;\
647 faligndata
%d10
, %d12
, %d52 ;\
648 faligndata
%d12
, %d14
, %d54 ;\
649 faligndata
%d14
, %d16
, %d56 ;\
650 faligndata
%d16
, %d18
, %d58 ;\
651 faligndata
%d18
, %d20
, %d60 ;\
652 faligndata
%d20
, %d22
, %d62
655 faligndata
%d22
, %d24
, %d48 ;\
656 faligndata
%d24
, %d26
, %d50 ;\
657 faligndata
%d26
, %d28
, %d52 ;\
658 faligndata
%d28
, %d30
, %d54 ;\
659 faligndata
%d30
, %d32
, %d56 ;\
660 faligndata
%d32
, %d34
, %d58 ;\
661 faligndata
%d34
, %d36
, %d60 ;\
662 faligndata
%d36
, %d38
, %d62
665 faligndata
%d38
, %d40
, %d48 ;\
666 faligndata
%d40
, %d42
, %d50 ;\
667 faligndata
%d42
, %d44
, %d52 ;\
668 faligndata
%d44
, %d46
, %d54 ;\
669 faligndata
%d46
, %d0
, %d56 ;\
670 faligndata
%d0
, %d2
, %d58 ;\
671 faligndata
%d2
, %d4
, %d60 ;\
672 faligndata
%d4
, %d6
, %d62
675 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
677 ldda
[%l7
]ASI_BLK_P
, %d0
678 stda
%d48
, [%i0
]ASI_BLK_P
683 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
685 ldda
[%l7
]ASI_BLK_P
, %d16
686 stda
%d48
, [%i0
]ASI_BLK_P
691 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
693 ldda
[%l7
]ASI_BLK_P
, %d32
694 stda
%d48
, [%i0
]ASI_BLK_P
703 stda
%d48
, [%i0
]ASI_BLK_P
707 stda
%d48
, [%i0
]ASI_BLK_P
713 stda
%d48
, [%i0
]ASI_BLK_P
717 stda
%d48
, [%i0
]ASI_BLK_P
723 stda
%d48
, [%i0
]ASI_BLK_P
727 stda
%d48
, [%i0
]ASI_BLK_P
733 faligndata
%d8
, %d10
, %d48 ;\
734 faligndata
%d10
, %d12
, %d50 ;\
735 faligndata
%d12
, %d14
, %d52 ;\
736 faligndata
%d14
, %d16
, %d54 ;\
737 faligndata
%d16
, %d18
, %d56 ;\
738 faligndata
%d18
, %d20
, %d58 ;\
739 faligndata
%d20
, %d22
, %d60 ;\
740 faligndata
%d22
, %d24
, %d62
743 faligndata
%d24
, %d26
, %d48 ;\
744 faligndata
%d26
, %d28
, %d50 ;\
745 faligndata
%d28
, %d30
, %d52 ;\
746 faligndata
%d30
, %d32
, %d54 ;\
747 faligndata
%d32
, %d34
, %d56 ;\
748 faligndata
%d34
, %d36
, %d58 ;\
749 faligndata
%d36
, %d38
, %d60 ;\
750 faligndata
%d38
, %d40
, %d62
753 faligndata
%d40
, %d42
, %d48 ;\
754 faligndata
%d42
, %d44
, %d50 ;\
755 faligndata
%d44
, %d46
, %d52 ;\
756 faligndata
%d46
, %d0
, %d54 ;\
757 faligndata
%d0
, %d2
, %d56 ;\
758 faligndata
%d2
, %d4
, %d58 ;\
759 faligndata
%d4
, %d6
, %d60 ;\
760 faligndata
%d6
, %d8
, %d62
763 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
765 ldda
[%l7
]ASI_BLK_P
, %d0
766 stda
%d48
, [%i0
]ASI_BLK_P
771 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
773 ldda
[%l7
]ASI_BLK_P
, %d16
774 stda
%d48
, [%i0
]ASI_BLK_P
779 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
781 ldda
[%l7
]ASI_BLK_P
, %d32
782 stda
%d48
, [%i0
]ASI_BLK_P
791 stda
%d48
, [%i0
]ASI_BLK_P
795 stda
%d48
, [%i0
]ASI_BLK_P
801 stda
%d48
, [%i0
]ASI_BLK_P
805 stda
%d48
, [%i0
]ASI_BLK_P
811 stda
%d48
, [%i0
]ASI_BLK_P
815 stda
%d48
, [%i0
]ASI_BLK_P
821 faligndata
%d10
, %d12
, %d48 ;\
822 faligndata
%d12
, %d14
, %d50 ;\
823 faligndata
%d14
, %d16
, %d52 ;\
824 faligndata
%d16
, %d18
, %d54 ;\
825 faligndata
%d18
, %d20
, %d56 ;\
826 faligndata
%d20
, %d22
, %d58 ;\
827 faligndata
%d22
, %d24
, %d60 ;\
828 faligndata
%d24
, %d26
, %d62
831 faligndata
%d26
, %d28
, %d48 ;\
832 faligndata
%d28
, %d30
, %d50 ;\
833 faligndata
%d30
, %d32
, %d52 ;\
834 faligndata
%d32
, %d34
, %d54 ;\
835 faligndata
%d34
, %d36
, %d56 ;\
836 faligndata
%d36
, %d38
, %d58 ;\
837 faligndata
%d38
, %d40
, %d60 ;\
838 faligndata
%d40
, %d42
, %d62
841 faligndata
%d42
, %d44
, %d48 ;\
842 faligndata
%d44
, %d46
, %d50 ;\
843 faligndata
%d46
, %d0
, %d52 ;\
844 faligndata
%d0
, %d2
, %d54 ;\
845 faligndata
%d2
, %d4
, %d56 ;\
846 faligndata
%d4
, %d6
, %d58 ;\
847 faligndata
%d6
, %d8
, %d60 ;\
848 faligndata
%d8
, %d10
, %d62
851 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
853 ldda
[%l7
]ASI_BLK_P
, %d0
854 stda
%d48
, [%i0
]ASI_BLK_P
859 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
861 ldda
[%l7
]ASI_BLK_P
, %d16
862 stda
%d48
, [%i0
]ASI_BLK_P
867 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
869 ldda
[%l7
]ASI_BLK_P
, %d32
870 stda
%d48
, [%i0
]ASI_BLK_P
879 stda
%d48
, [%i0
]ASI_BLK_P
883 stda
%d48
, [%i0
]ASI_BLK_P
889 stda
%d48
, [%i0
]ASI_BLK_P
893 stda
%d48
, [%i0
]ASI_BLK_P
899 stda
%d48
, [%i0
]ASI_BLK_P
903 stda
%d48
, [%i0
]ASI_BLK_P
909 faligndata
%d12
, %d14
, %d48 ;\
910 faligndata
%d14
, %d16
, %d50 ;\
911 faligndata
%d16
, %d18
, %d52 ;\
912 faligndata
%d18
, %d20
, %d54 ;\
913 faligndata
%d20
, %d22
, %d56 ;\
914 faligndata
%d22
, %d24
, %d58 ;\
915 faligndata
%d24
, %d26
, %d60 ;\
916 faligndata
%d26
, %d28
, %d62
919 faligndata
%d28
, %d30
, %d48 ;\
920 faligndata
%d30
, %d32
, %d50 ;\
921 faligndata
%d32
, %d34
, %d52 ;\
922 faligndata
%d34
, %d36
, %d54 ;\
923 faligndata
%d36
, %d38
, %d56 ;\
924 faligndata
%d38
, %d40
, %d58 ;\
925 faligndata
%d40
, %d42
, %d60 ;\
926 faligndata
%d42
, %d44
, %d62
929 faligndata
%d44
, %d46
, %d48 ;\
930 faligndata
%d46
, %d0
, %d50 ;\
931 faligndata
%d0
, %d2
, %d52 ;\
932 faligndata
%d2
, %d4
, %d54 ;\
933 faligndata
%d4
, %d6
, %d56 ;\
934 faligndata
%d6
, %d8
, %d58 ;\
935 faligndata
%d8
, %d10
, %d60 ;\
936 faligndata
%d10
, %d12
, %d62
939 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
941 ldda
[%l7
]ASI_BLK_P
, %d0
942 stda
%d48
, [%i0
]ASI_BLK_P
947 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
949 ldda
[%l7
]ASI_BLK_P
, %d16
950 stda
%d48
, [%i0
]ASI_BLK_P
955 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
957 ldda
[%l7
]ASI_BLK_P
, %d32
958 stda
%d48
, [%i0
]ASI_BLK_P
967 stda
%d48
, [%i0
]ASI_BLK_P
971 stda
%d48
, [%i0
]ASI_BLK_P
977 stda
%d48
, [%i0
]ASI_BLK_P
981 stda
%d48
, [%i0
]ASI_BLK_P
987 stda
%d48
, [%i0
]ASI_BLK_P
991 stda
%d48
, [%i0
]ASI_BLK_P
997 faligndata
%d14
, %d16
, %d48 ;\
998 faligndata
%d16
, %d18
, %d50 ;\
999 faligndata
%d18
, %d20
, %d52 ;\
1000 faligndata
%d20
, %d22
, %d54 ;\
1001 faligndata
%d22
, %d24
, %d56 ;\
1002 faligndata
%d24
, %d26
, %d58 ;\
1003 faligndata
%d26
, %d28
, %d60 ;\
1004 faligndata
%d28
, %d30
, %d62
1006 #define FALIGN_D30 \
1007 faligndata
%d30
, %d32
, %d48 ;\
1008 faligndata
%d32
, %d34
, %d50 ;\
1009 faligndata
%d34
, %d36
, %d52 ;\
1010 faligndata
%d36
, %d38
, %d54 ;\
1011 faligndata
%d38
, %d40
, %d56 ;\
1012 faligndata
%d40
, %d42
, %d58 ;\
1013 faligndata
%d42
, %d44
, %d60 ;\
1014 faligndata
%d44
, %d46
, %d62
1016 #define FALIGN_D46 \
1017 faligndata
%d46
, %d0
, %d48 ;\
1018 faligndata
%d0
, %d2
, %d50 ;\
1019 faligndata
%d2
, %d4
, %d52 ;\
1020 faligndata
%d4
, %d6
, %d54 ;\
1021 faligndata
%d6
, %d8
, %d56 ;\
1022 faligndata
%d8
, %d10
, %d58 ;\
1023 faligndata
%d10
, %d12
, %d60 ;\
1024 faligndata
%d12
, %d14
, %d62
1027 ! 1st chunk
- %d0 low
, %d16 high
, %d32 pre
, %d48
dst
1029 ldda
[%l7
]ASI_BLK_P
, %d0
1030 stda
%d48
, [%i0
]ASI_BLK_P
1035 ! 2nd chunk
- %d0 pre
, %d16 low
, %d32 high
, %d48
dst
1037 ldda
[%l7
]ASI_BLK_P
, %d16
1038 stda
%d48
, [%i0
]ASI_BLK_P
1043 ! 3rd chunk
- %d0 high
, %d16 pre
, %d32 low
, %d48
dst
1045 ldda
[%l7
]ASI_BLK_P
, %d32
1046 stda
%d48
, [%i0
]ASI_BLK_P
1055 stda
%d48
, [%i0
]ASI_BLK_P
1059 stda
%d48
, [%i0
]ASI_BLK_P
1065 stda
%d48
, [%i0
]ASI_BLK_P
1069 stda
%d48
, [%i0
]ASI_BLK_P
1075 stda
%d48
, [%i0
]ASI_BLK_P
1079 stda
%d48
, [%i0
]ASI_BLK_P
1085 ! dribble out the last partial block
1089 blu
,pn
%ncc
, blkdone
1090 faligndata
%d0
, %d2
, %d48
1095 blu
,pn
%ncc
, blkdone
1096 faligndata
%d2
, %d4
, %d48
1101 blu
,pn
%ncc
, blkdone
1102 faligndata
%d4
, %d6
, %d48
1107 blu
,pn
%ncc
, blkdone
1108 faligndata
%d6
, %d8
, %d48
1113 blu
,pn
%ncc
, blkdone
1114 faligndata
%d8
, %d10
, %d48
1119 blu
,pn
%ncc
, blkdone
1120 faligndata
%d10
, %d12
, %d48
1125 blu
,pn
%ncc
, blkdone
1126 faligndata
%d12
, %d14
, %d48
1131 blu
,pn
%ncc
, blkdone
1133 ba,a,pt
%ncc
, blkleft
1137 blu
,pn
%ncc
, blkdone
1138 faligndata
%d16
, %d18
, %d48
1143 blu
,pn
%ncc
, blkdone
1144 faligndata
%d18
, %d20
, %d48
1149 blu
,pn
%ncc
, blkdone
1150 faligndata
%d20
, %d22
, %d48
1155 blu
,pn
%ncc
, blkdone
1156 faligndata
%d22
, %d24
, %d48
1161 blu
,pn
%ncc
, blkdone
1162 faligndata
%d24
, %d26
, %d48
1167 blu
,pn
%ncc
, blkdone
1168 faligndata
%d26
, %d28
, %d48
1173 blu
,pn
%ncc
, blkdone
1174 faligndata
%d28
, %d30
, %d48
1179 blu
,pn
%ncc
, blkdone
1181 ba,a,pt
%ncc
, blkleft
1184 blu
,pn
%ncc
, blkdone
1185 faligndata
%d32
, %d34
, %d48
1190 blu
,pn
%ncc
, blkdone
1191 faligndata
%d34
, %d36
, %d48
1196 blu
,pn
%ncc
, blkdone
1197 faligndata
%d36
, %d38
, %d48
1202 blu
,pn
%ncc
, blkdone
1203 faligndata
%d38
, %d40
, %d48
1208 blu
,pn
%ncc
, blkdone
1209 faligndata
%d40
, %d42
, %d48
1214 blu
,pn
%ncc
, blkdone
1215 faligndata
%d42
, %d44
, %d48
1220 blu
,pn
%ncc
, blkdone
1221 faligndata
%d44
, %d46
, %d48
1226 blu
,pn
%ncc
, blkdone
1233 faligndata
%d0
, %d2
, %d8
1235 blu
,pn
%ncc
, blkdone
1240 faligndata
%d2
, %d0
, %d8
1242 bgeu
,pt
%ncc
, blkleft
1248 and %l3
, 0x4, %l3
! fprs.du
= fprs.dl
= 0
1258 and %l3
, 0x4, %l3
! fprs.du
= fprs.dl
= 0
1259 wr
%l3
, %g0
, %fprs
! fprs
= l3
- restore fprs.fef
1260 membar
#StoreLoad|#StoreStore
1262 restore
%i5
, %g0
, %o0
1265 SET_SIZE
(__align_cpy_1
)