Lines Matching refs:and
5 * Common Development and Distribution License (the "License").
11 * and limitations under the License.
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
22 * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
48 * ! In kcopy() the %o5, holds previous error handler and a flag
115 * to how the src and dst is aligned and how much data needs to be moved.
186 * LOFAULT_SET : Flag set by kzero and kcopy to indicate that t_lofault
193 * The data1, data2 and data3 is merged into data1 and data2.
205 * data1 and data2 to form double word.
215 * FPUSED_FLAG: The FP registers were in use and must be restored
323 * floating-point register save area and 2 64-bit temp locations.
380 * Macros to save and restore fp registers to/from the stack.
381 * Used to save and restore in-use fp registers when we want to use FP.
386 and tmp1, -VIS_BLOCKSIZE, tmp1 /* block align */ ;\
397 and tmp1, -VIS_BLOCKSIZE, tmp1 /* block align */ ;\
461 ! we're expected to just return the error code and not to
485 * stack and fp registers need to be restored
495 and %o5, LOFAULT_SET, %l1 ! copy flag to %l1
526 ! we're expected to just return the error code and not to
584 ! The kcopy() *always* sets a t_lofault handler and it ORs LOFAULT_SET
638 * Special case for handling when src and dest are both long word aligned
639 * and total data to move is less than FP_COPY bytes
674 .bc_smallx: ! finish up and exit
792 * Handle all cases where src and dest are aligned on word
795 * source and destination is in cache for medium
855 .bc_medh32: ! load and store block of 32 bytes
942 ldub [%o0], %o4 ! load and store a block of 32 bytes
1000 ldub [%o0], %o4 ! load and store a block of 8 bytes
1043 ldub [%o0], %o4 ! load and store a block of 32 bytes
1100 ldub [%o0], %o4 ! load and store a block of 8 bytes
1123 * profiling and dtrace of the portions of the copy code that uses
1138 ! kcopy and bcopy use the same code path. If LOFAULT_SET is
1139 ! set and the saved lofault was zero, we won't reset lofault on
1156 * we save registers and fp regs before starting
1184 ! Src and dst are long word aligned
1252 and %i2, 0x7f, %i2 ! residue bytes in %i2
1285 and %i2, 0x7f, %i2 ! residue bytes in %i2
1320 and %i2, 0x7f, %i2 ! residue bytes in %i2
1356 and %i2, 0x7f, %i2 ! residue bytes in %i2
1395 and %i2, 0x7f, %i2 ! residue bytes in %i2
1435 and %i2, 0x7f, %i2 ! residue bytes in %i2
1477 and %i2, 0x7f, %i2 ! residue bytes in %i2
1511 and %i2, 0x7f, %i2 ! residue bytes in %i2
1623 stw %o4, [%i1] ! and store 4 bytes
1626 stw %o4, [%i1+4] ! and store 4 bytes
1676 and %i2, 0x3f, %i2 ! residue bytes in %i2
1941 and %i2, 0x7, %i2 ! residue bytes in %i2
2023 and %o5, COPY_FLAGS, %l1 ! save flags in %l1
2051 ! handler and return.
2092 * and (dest & ~63) - (src & ~63) can be 3 blocks even if
2104 ! and memcpy/bcopy have different calling sequences
2116 ! Based on source and destination alignment do
2237 ldda [%i1+0x0]%asi, %l2 ! partial data in %l2 and %l3 has
2241 ALIGN_DATA(%l2, %l3, %l4, %o0, %o1, %l6) ! merge %l2, %l3 and %l4
2242 ! into %l2 and %l3
2248 ALIGN_DATA(%l4, %l5, %l2, %o0, %o1, %l6) ! merge %l2 with %l5 and
2250 stxa %l5, [%i0+0x18]%asi ! into %l4 and %l5
2282 ldda [%i1+0x0]%asi, %l2 ! partial data in %l3 for this read and
2285 ldda [%i1+0x10]%asi, %l4 ! %l4 has complete data and %l5 has
2287 ALIGN_DATA(%l3, %l4, %l5, %o0, %o1, %l6) ! merge %l3, %l4 and %l5
2288 ! into %l3 and %l4
2294 ALIGN_DATA(%l5, %l2, %l3, %o0, %o1, %l6) ! merge %l2 and %l3 with
2296 stxa %l2, [%i0+0x18]%asi ! into %l5 and %l2
2320 ! Both Source and Destination are block aligned.
2442 xor %i0, %i1, %o4 ! xor from and to address
2447 xor %i0, %i1, %o4 ! xor from and to address
2452 ! use aligned reads and writes where possible
2454 ! with odd alignment between source and destnation
2455 ! using word reads and writes with the proper shifts
2456 ! in between to align transfers to and from memory
2474 ! both source and destination addresses are unaligned
2511 and %i2, 3, %l4 ! must do remaining bytes if count%4 > 0
2531 ! the source address is aligned and destination is not
2549 and %i2, 3, %l4 ! must do remaining bytes if count%4 > 0
2577 sub %i0, %i1, %i0 ! i0 gets the difference of src and dst
2579 ! the destination address is aligned and the source is not
2603 ! source and destination are now double-word aligned
2606 and %i2, 7, %i2 ! unaligned leftover count
2607 sub %i0, %i1, %i0 ! i0 gets the difference of src and dst
2621 and %i2, 3, %i2 ! unaligned leftover count
2635 sub %i0, %i1, %i0 ! i0 gets the difference of src and dst
2642 sub %i0, %i1, %i0 ! i0 gets difference of src and dst
2646 ! assumes dest in %i1 and (source - dest) in %i0
2668 * Common code used to align transfers on word and doubleword
2669 * boundaries. Aligns source and destination and returns a count
2707 subcc %o0, %o1, %o3 ! difference of from and to address
2714 2: cmp %o2, %o3 ! cmp size and abs(from - to)
2717 cmp %o0, %o1 ! compare from and to addresses
2752 * has already disabled kernel preemption and has checked
2771 * Copying exactly one page and PAGESIZE is in mutliple of 0x80.
2817 * Transfer data to and from user space -
2822 * Note that copyin(9F) and copyout(9F) are part of the
2827 * So there's two extremely similar routines - xcopyin() and xcopyout()
2833 * There are also stub routines for xcopyout_little and xcopyin_little,
2870 * --> before we use block initializing store and quad load ASIs
2876 * and output pointers. Based on the alignment we check count
2878 * alignment value we copy via block initializing store and quad
2884 * to the appropriate copy loop and copy that many chunks.
2888 * done and can go home. If not, we figure out what the largest
2889 * chunk size left to be copied is and branch to that copy loop
2895 * This routine handles fixing up the stack and general housecleaning.
2898 * for copyOP and xcopyOP are found at the end of individual function.
3027 * Special case for handling when src and dest are both long word aligned
3028 * and total data to move is less than FP_COPY bytes
3063 .co_smallx: ! finish up and exit
3175 * Handle all cases where src and dest are aligned on word
3178 * source and destination is in cache for medium
3240 .co_medh32: ! load and store block of 32 bytes
3329 ldub [%o0], %o4 ! load and store a block of 32 bytes
3387 ldub [%o0], %o4 ! load and store a block of 8 bytes
3432 ldub [%o0], %o4 ! load and store a block of 32 bytes
3489 ldub [%o0], %o4 ! load and store a block of 8 bytes
3523 * we save registers and fp regs before starting
3552 ! Src and dst are long word aligned
3620 and %i2, 0x7f, %i2 ! residue bytes in %i2
3653 and %i2, 0x7f, %i2 ! residue bytes in %i2
3688 and %i2, 0x7f, %i2 ! residue bytes in %i2
3724 and %i2, 0x7f, %i2 ! residue bytes in %i2
3763 and %i2, 0x7f, %i2 ! residue bytes in %i2
3803 and %i2, 0x7f, %i2 ! residue bytes in %i2
3845 and %i2, 0x7f, %i2 ! residue bytes in %i2
3879 and %i2, 0x7f, %i2 ! residue bytes in %i2
3992 stwa %o4, [%i1]%asi ! and store 4 bytes
3995 stwa %o4, [%i1+4]%asi ! and store 4 bytes
4045 and %i2, 0x3f, %i2 ! residue bytes in %i2
4310 and %i2, 0x7, %i2 ! residue bytes in %i2
4419 ! Check the length and bail if zero.
4457 ! %o0 and %o2 point at the end and remain pointing at the end
4520 ! We're big enough and copy is on. Do it with HW.
4532 ! If so, go off and do the copy.
4551 ! HW assist is on and we're large enough. Do it.
4591 ! HW assist is on and we're large enough. Do it.
4616 ! HW is on and we're big enough. Do it.
4630 ! and bounce back to a non-HW assisted copy. This dispatches those
4635 ! and do it.
4714 ! We're going to go off and do a block copy.
4715 ! Switch fault handlers and grab a window. We
4727 ! and memcpy/bcopy have different calling sequences
4739 ! Based on source and destination alignment do
4868 ldda [%i1]ASI_BLK_INIT_ST_QUAD_LDD_P, %l2 ! partial data in %l2 and %l3 has
4874 ALIGN_DATA(%l2, %l3, %l4, %o0, %o1, %l6) ! merge %l2, %l3 and %l4
4875 ! into %l2 and %l3
4883 ALIGN_DATA(%l4, %l5, %l2, %o0, %o1, %l6) ! merge %l2 with %l5 and
4885 ! into %l4 and %l5
4923 ! for this read and
4928 ! and %l5 has partial
4929 ALIGN_DATA(%l3, %l4, %l5, %o0, %o1, %l6) ! merge %l3, %l4 and %l5
4930 ! into %l3 and %l4
4938 ALIGN_DATA(%l5, %l2, %l3, %o0, %o1, %l6) ! merge %l2 and %l3 with
4940 ! into %l5 and %l2
5219 * Special case for handling when src and dest are both long word aligned
5220 * and total data to move is less than FP_COPY bytes
5255 .ci_smallx: ! finish up and exit
5367 * Handle all cases where src and dest are aligned on word
5370 * source and destination is in cache for medium
5432 .ci_medh32: ! load and store block of 32 bytes
5521 lduba [%o0]%asi, %o4 ! load and store a block of 32 bytes
5579 lduba [%o0]%asi, %o4 ! load and store a block of 8 bytes
5624 lduba [%o0]%asi, %o4 ! load and store a block of 32 bytes
5681 lduba [%o0]%asi, %o4 ! load and store a block of 8 bytes
5706 * Long copy in code (using register window and fp regs)
5718 * we save registers and fp regs before starting
5747 ! Src and dst are long word aligned
5814 and %i2, 0x7f, %i2 ! residue bytes in %i2
5847 and %i2, 0x7f, %i2 ! residue bytes in %i2
5882 and %i2, 0x7f, %i2 ! residue bytes in %i2
5918 and %i2, 0x7f, %i2 ! residue bytes in %i2
5957 and %i2, 0x7f, %i2 ! residue bytes in %i2
5997 and %i2, 0x7f, %i2 ! residue bytes in %i2
6039 and %i2, 0x7f, %i2 ! residue bytes in %i2
6073 and %i2, 0x7f, %i2 ! residue bytes in %i2
6186 stw %o4, [%i1] ! and store 4 bytes
6189 stw %o4, [%i1+4] ! and store 4 bytes
6239 and %i2, 0x3f, %i2 ! residue bytes in %i2
6504 and %i2, 0x7, %i2 ! residue bytes in %i2
6613 ! Check the length and bail if zero.
6649 ! %o0 and %o1 point at the end and remain pointing at the end
6700 ! We're big enough and copy is on. Do it with HW.
6785 ! HW assist is on and we're large enough to use it.
6804 ! and bounce back to a non-hw assisted copy. This dispatches
6810 ! and do it.
6894 ! Switch fault hendlers and grab a window. We
6906 ! and memcpy/bcopy have different calling sequences
6918 ! Based on source and destination alignment do
7049 ! and %l3 has complete
7056 ALIGN_DATA(%l2, %l3, %l4, %o0, %o1, %l6) ! merge %l2, %l3 and %l4
7057 ! into %l2 and %l3
7066 ALIGN_DATA(%l4, %l5, %l2, %o0, %o1, %l6) ! merge %l2 with %l5 and
7068 ! into %l4 and %l5
7106 ! for this read and
7112 ! and %l5 has partial
7113 ALIGN_DATA(%l3, %l4, %l5, %o0, %o1, %l6) ! merge %l3, %l4 and %l5
7114 ! into %l3 and %l4
7122 ALIGN_DATA(%l5, %l2, %l3, %o0, %o1, %l6) ! merge %l2 and %l3 with
7124 ! into %l5 and %l2
7439 * and returns 1. Otherwise 0 is returned indicating success.
7440 * Caller is responsible for ensuring use_hw_bzero is true and that
7462 ! ... and must be 256 bytes or more
7467 ! ... and length must be a multiple of 64
7775 and %o1, 0x3f, %o3 ! calc bytes left after blk clear
7860 and %o1, 7, %o1 ! calc bytes left after doubles
7887 and %o1, 3, %o1 ! leftover count, if any
7909 ! %o5 and if it is non-zero be sure to clear LOFAULT_SET