^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /* SPDX-License-Identifier: GPL-2.0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) * arch/sparc64/lib/xor.S
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * High speed xor_block operation for RAID4/5 utilizing the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) * UltraSparc Visual Instruction Set and Niagara store-init/twin-load.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) * Copyright (C) 1997, 1999 Jakub Jelinek (jj@ultra.linux.cz)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * Copyright (C) 2006 David S. Miller <davem@davemloft.net>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) #include <asm/visasm.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) #include <asm/asi.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) #include <asm/dcu.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) #include <asm/spitfire.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) #include <asm/export.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * Requirements:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * !(((long)dest | (long)sourceN) & (64 - 1)) &&
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * !(len & 127) && len >= 256
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) /* VIS versions. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) ENTRY(xor_vis_2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) rd %fprs, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) andcc %o5, FPRS_FEF|FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) be,pt %icc, 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) sethi %hi(VISenter), %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) jmpl %g1 + %lo(VISenter), %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) add %g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) 0: wr %g0, FPRS_FEF, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) rd %asi, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) wr %g0, ASI_BLK_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) membar #LoadStore|#StoreLoad|#StoreStore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) sub %o0, 128, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) ldda [%o1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) 2: ldda [%o1 + 64] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) fxor %f0, %f16, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) fxor %f2, %f18, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) fxor %f4, %f20, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) fxor %f6, %f22, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) fxor %f8, %f24, %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) fxor %f10, %f26, %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) fxor %f12, %f28, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) fxor %f14, %f30, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) stda %f16, [%o1] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) ldda [%o2 + 64] %asi, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) ldda [%o1 + 128] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) fxor %f32, %f48, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) fxor %f34, %f50, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) add %o1, 128, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) fxor %f36, %f52, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) add %o2, 128, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) fxor %f38, %f54, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) subcc %o0, 128, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) fxor %f40, %f56, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) fxor %f42, %f58, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) fxor %f44, %f60, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) fxor %f46, %f62, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) stda %f48, [%o1 - 64] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) bne,pt %xcc, 2b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) ldda [%o1 + 64] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) fxor %f0, %f16, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) fxor %f2, %f18, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) fxor %f4, %f20, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) fxor %f6, %f22, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) fxor %f8, %f24, %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) fxor %f10, %f26, %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) fxor %f12, %f28, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) fxor %f14, %f30, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) stda %f16, [%o1] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) ldda [%o2 + 64] %asi, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81) fxor %f32, %f48, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) fxor %f34, %f50, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) fxor %f36, %f52, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) fxor %f38, %f54, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) fxor %f40, %f56, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) fxor %f42, %f58, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) fxor %f44, %f60, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) fxor %f46, %f62, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) stda %f48, [%o1 + 64] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) membar #Sync|#StoreStore|#StoreLoad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) wr %g1, %g0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) wr %g0, 0, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) ENDPROC(xor_vis_2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) EXPORT_SYMBOL(xor_vis_2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) ENTRY(xor_vis_3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) rd %fprs, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) andcc %o5, FPRS_FEF|FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) be,pt %icc, 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) sethi %hi(VISenter), %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) jmpl %g1 + %lo(VISenter), %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) add %g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 0: wr %g0, FPRS_FEF, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) rd %asi, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) wr %g0, ASI_BLK_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) membar #LoadStore|#StoreLoad|#StoreStore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) sub %o0, 64, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) ldda [%o1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 3: ldda [%o3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) fxor %f0, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) fxor %f2, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) add %o1, 64, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) fxor %f4, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) fxor %f6, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) add %o2, 64, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) fxor %f8, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) fxor %f10, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) fxor %f12, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) fxor %f14, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) ldda [%o1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) add %o3, 64, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) subcc %o0, 64, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) stda %f48, [%o1 - 64] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) bne,pt %xcc, 3b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) ldda [%o3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) fxor %f0, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) fxor %f2, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) fxor %f4, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) fxor %f6, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) fxor %f8, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) fxor %f10, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) fxor %f12, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) fxor %f14, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) stda %f48, [%o1] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) membar #Sync|#StoreStore|#StoreLoad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) wr %g1, %g0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) wr %g0, 0, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) ENDPROC(xor_vis_3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) EXPORT_SYMBOL(xor_vis_3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) ENTRY(xor_vis_4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) rd %fprs, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) andcc %o5, FPRS_FEF|FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) be,pt %icc, 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) sethi %hi(VISenter), %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) jmpl %g1 + %lo(VISenter), %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) add %g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) 0: wr %g0, FPRS_FEF, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) rd %asi, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) wr %g0, ASI_BLK_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) membar #LoadStore|#StoreLoad|#StoreStore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) sub %o0, 64, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) ldda [%o1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) 4: ldda [%o3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) fxor %f0, %f16, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) fxor %f2, %f18, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) add %o1, 64, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) fxor %f4, %f20, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) fxor %f6, %f22, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) add %o2, 64, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) fxor %f8, %f24, %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) fxor %f10, %f26, %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) fxor %f12, %f28, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) fxor %f14, %f30, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) ldda [%o4] %asi, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191) fxor %f16, %f32, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) fxor %f18, %f34, %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) fxor %f20, %f36, %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) fxor %f22, %f38, %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) add %o3, 64, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) fxor %f24, %f40, %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) fxor %f26, %f42, %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) fxor %f28, %f44, %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) fxor %f30, %f46, %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) ldda [%o1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) fxor %f32, %f48, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) fxor %f34, %f50, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) fxor %f36, %f52, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) add %o4, 64, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) fxor %f38, %f54, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) fxor %f40, %f56, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) fxor %f42, %f58, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) subcc %o0, 64, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) fxor %f44, %f60, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) fxor %f46, %f62, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) stda %f48, [%o1 - 64] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) bne,pt %xcc, 4b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) ldda [%o2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) ldda [%o3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) fxor %f0, %f16, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) fxor %f2, %f18, %f18
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) fxor %f4, %f20, %f20
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) fxor %f6, %f22, %f22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) fxor %f8, %f24, %f24
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) fxor %f10, %f26, %f26
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) fxor %f12, %f28, %f28
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) fxor %f14, %f30, %f30
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) ldda [%o4] %asi, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) fxor %f16, %f32, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) fxor %f18, %f34, %f34
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) fxor %f20, %f36, %f36
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) fxor %f22, %f38, %f38
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) fxor %f24, %f40, %f40
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) fxor %f26, %f42, %f42
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) fxor %f28, %f44, %f44
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) fxor %f30, %f46, %f46
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) fxor %f32, %f48, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) fxor %f34, %f50, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) fxor %f36, %f52, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) fxor %f38, %f54, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) fxor %f40, %f56, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) fxor %f42, %f58, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) fxor %f44, %f60, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) fxor %f46, %f62, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) stda %f48, [%o1] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) membar #Sync|#StoreStore|#StoreLoad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) wr %g1, %g0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) retl
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) wr %g0, 0, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) ENDPROC(xor_vis_4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) EXPORT_SYMBOL(xor_vis_4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) ENTRY(xor_vis_5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) rd %fprs, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) andcc %o5, FPRS_FEF|FPRS_DU, %g0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) be,pt %icc, 0f
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) sethi %hi(VISenter), %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) jmpl %g1 + %lo(VISenter), %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) add %g7, 8, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) 0: wr %g0, FPRS_FEF, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) rd %asi, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) wr %g0, ASI_BLK_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) membar #LoadStore|#StoreLoad|#StoreStore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) sub %i0, 64, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) ldda [%i1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) ldda [%i2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) 5: ldda [%i3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) fxor %f0, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) fxor %f2, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) add %i1, 64, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) fxor %f4, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) fxor %f6, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) add %i2, 64, %i2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) fxor %f8, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274) fxor %f10, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) fxor %f12, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) fxor %f14, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) ldda [%i4] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) add %i3, 64, %i3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) ldda [%i5] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) fxor %f48, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) fxor %f50, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) add %i4, 64, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) fxor %f52, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) fxor %f54, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) add %i5, 64, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) fxor %f56, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) fxor %f58, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) fxor %f60, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) fxor %f62, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) ldda [%i1] %asi, %f0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) subcc %i0, 64, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) stda %f48, [%i1 - 64] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) bne,pt %xcc, 5b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) ldda [%i2] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) ldda [%i3] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) fxor %f0, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) fxor %f2, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) fxor %f4, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) fxor %f6, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) fxor %f8, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) fxor %f10, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) fxor %f12, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) fxor %f14, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) ldda [%i4] %asi, %f16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) ldda [%i5] %asi, %f32
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) fxor %f48, %f16, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) fxor %f50, %f18, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) fxor %f52, %f20, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) fxor %f54, %f22, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) fxor %f56, %f24, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) fxor %f58, %f26, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) fxor %f60, %f28, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) fxor %f62, %f30, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) fxor %f48, %f32, %f48
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) fxor %f50, %f34, %f50
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) fxor %f52, %f36, %f52
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) fxor %f54, %f38, %f54
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) fxor %f56, %f40, %f56
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) fxor %f58, %f42, %f58
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) fxor %f60, %f44, %f60
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) fxor %f62, %f46, %f62
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) stda %f48, [%i1] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) membar #Sync|#StoreStore|#StoreLoad
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) wr %g1, %g0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) wr %g0, 0, %fprs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) ENDPROC(xor_vis_5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) EXPORT_SYMBOL(xor_vis_5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) /* Niagara versions. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) ENTRY(xor_niagara_2) /* %o0=bytes, %o1=dest, %o2=src */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) prefetch [%i1], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) prefetch [%i2], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) rd %asi, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) srlx %i0, 6, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) mov %i1, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) mov %i2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) ldda [%i1 + 0x10] %asi, %i4 /* %i4/%i5 = src + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) ldda [%i1 + 0x20] %asi, %g2 /* %g2/%g3 = src + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) ldda [%i1 + 0x30] %asi, %l0 /* %l0/%l1 = src + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) prefetch [%i1 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) ldda [%i0 + 0x00] %asi, %o0 /* %o0/%o1 = dest + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) ldda [%i0 + 0x10] %asi, %o2 /* %o2/%o3 = dest + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) ldda [%i0 + 0x20] %asi, %o4 /* %o4/%o5 = dest + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) ldda [%i0 + 0x30] %asi, %l2 /* %l2/%l3 = dest + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) prefetch [%i0 + 0x40], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) xor %o0, %i2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) xor %o1, %i3, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) stxa %o0, [%i0 + 0x00] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) stxa %o1, [%i0 + 0x08] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) xor %o2, %i4, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) xor %o3, %i5, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) stxa %o2, [%i0 + 0x10] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) stxa %o3, [%i0 + 0x18] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) xor %o4, %g2, %o4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) xor %o5, %g3, %o5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) stxa %o4, [%i0 + 0x20] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) stxa %o5, [%i0 + 0x28] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) xor %l2, %l0, %l2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) xor %l3, %l1, %l3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) stxa %l2, [%i0 + 0x30] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) stxa %l3, [%i0 + 0x38] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) add %i0, 0x40, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) subcc %g1, 1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) add %i1, 0x40, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) wr %g7, 0x0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) ENDPROC(xor_niagara_2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) EXPORT_SYMBOL(xor_niagara_2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) ENTRY(xor_niagara_3) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) prefetch [%i1], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) prefetch [%i2], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) prefetch [%i3], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) rd %asi, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) srlx %i0, 6, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) mov %i1, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) mov %i2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) mov %i3, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) ldda [%i1 + 0x10] %asi, %i4 /* %i4/%i5 = src1 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) ldda [%l7 + 0x00] %asi, %g2 /* %g2/%g3 = src2 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) ldda [%l7 + 0x10] %asi, %l0 /* %l0/%l1 = src2 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) ldda [%i0 + 0x00] %asi, %o0 /* %o0/%o1 = dest + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) ldda [%i0 + 0x10] %asi, %o2 /* %o2/%o3 = dest + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) xor %g2, %i2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) xor %g3, %i3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) xor %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) xor %o1, %g3, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) stxa %o0, [%i0 + 0x00] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) stxa %o1, [%i0 + 0x08] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) ldda [%l7 + 0x20] %asi, %g2 /* %g2/%g3 = src2 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) ldda [%i0 + 0x20] %asi, %o0 /* %o0/%o1 = dest + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) xor %l0, %i4, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) xor %l1, %i5, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) xor %o2, %l0, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) xor %o3, %l1, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) stxa %o2, [%i0 + 0x10] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) stxa %o3, [%i0 + 0x18] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) ldda [%i1 + 0x30] %asi, %i4 /* %i4/%i5 = src1 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) ldda [%l7 + 0x30] %asi, %l0 /* %l0/%l1 = src2 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) ldda [%i0 + 0x30] %asi, %o2 /* %o2/%o3 = dest + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) prefetch [%i1 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) prefetch [%l7 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) prefetch [%i0 + 0x40], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) xor %g2, %i2, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) xor %g3, %i3, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) xor %o0, %g2, %o0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) xor %o1, %g3, %o1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) stxa %o0, [%i0 + 0x20] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) stxa %o1, [%i0 + 0x28] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) xor %l0, %i4, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) xor %l1, %i5, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) xor %o2, %l0, %o2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) xor %o3, %l1, %o3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) stxa %o2, [%i0 + 0x30] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) stxa %o3, [%i0 + 0x38] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) add %i0, 0x40, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) add %i1, 0x40, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) subcc %g1, 1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) add %l7, 0x40, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) wr %g7, 0x0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) ENDPROC(xor_niagara_3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) EXPORT_SYMBOL(xor_niagara_3)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) ENTRY(xor_niagara_4) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) prefetch [%i1], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) prefetch [%i2], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) prefetch [%i3], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471) prefetch [%i4], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) rd %asi, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) srlx %i0, 6, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) mov %i1, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) mov %i2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) mov %i3, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478) mov %i4, %l6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) ldda [%l7 + 0x00] %asi, %i4 /* %i4/%i5 = src2 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) ldda [%l6 + 0x00] %asi, %g2 /* %g2/%g3 = src3 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) ldda [%i0 + 0x00] %asi, %l0 /* %l0/%l1 = dest + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) ldda [%i1 + 0x10] %asi, %i2 /* %i2/%i3 = src1 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) ldda [%l7 + 0x10] %asi, %i4 /* %i4/%i5 = src2 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) stxa %l0, [%i0 + 0x00] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) stxa %l1, [%i0 + 0x08] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) ldda [%l6 + 0x10] %asi, %g2 /* %g2/%g3 = src3 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494) ldda [%i0 + 0x10] %asi, %l0 /* %l0/%l1 = dest + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501) ldda [%l7 + 0x20] %asi, %i4 /* %i4/%i5 = src2 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) stxa %l0, [%i0 + 0x10] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) stxa %l1, [%i0 + 0x18] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) ldda [%l6 + 0x20] %asi, %g2 /* %g2/%g3 = src3 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507) ldda [%i0 + 0x20] %asi, %l0 /* %l0/%l1 = dest + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) ldda [%i1 + 0x30] %asi, %i2 /* %i2/%i3 = src1 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) ldda [%l7 + 0x30] %asi, %i4 /* %i4/%i5 = src2 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517) stxa %l0, [%i0 + 0x20] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) stxa %l1, [%i0 + 0x28] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) ldda [%l6 + 0x30] %asi, %g2 /* %g2/%g3 = src3 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) ldda [%i0 + 0x30] %asi, %l0 /* %l0/%l1 = dest + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522) prefetch [%i1 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) prefetch [%l7 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) prefetch [%l6 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) prefetch [%i0 + 0x40], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) stxa %l0, [%i0 + 0x30] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) stxa %l1, [%i0 + 0x38] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) add %i0, 0x40, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537) add %i1, 0x40, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) add %l7, 0x40, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) subcc %g1, 1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) add %l6, 0x40, %l6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) wr %g7, 0x0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) ENDPROC(xor_niagara_4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547) EXPORT_SYMBOL(xor_niagara_4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) ENTRY(xor_niagara_5) /* %o0=bytes, %o1=dest, %o2=src1, %o3=src2, %o4=src3, %o5=src4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) save %sp, -192, %sp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) prefetch [%i1], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) prefetch [%i2], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) prefetch [%i3], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554) prefetch [%i4], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) prefetch [%i5], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) rd %asi, %g7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) wr %g0, ASI_BLK_INIT_QUAD_LDD_P, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) srlx %i0, 6, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) mov %i1, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) mov %i2, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) mov %i3, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) mov %i4, %l6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) mov %i5, %l5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) 1: ldda [%i1 + 0x00] %asi, %i2 /* %i2/%i3 = src1 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) ldda [%l7 + 0x00] %asi, %i4 /* %i4/%i5 = src2 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) ldda [%l6 + 0x00] %asi, %g2 /* %g2/%g3 = src3 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) ldda [%l5 + 0x00] %asi, %l0 /* %l0/%l1 = src4 + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) ldda [%i0 + 0x00] %asi, %l2 /* %l2/%l3 = dest + 0x00 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 570) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 571) ldda [%i1 + 0x10] %asi, %i2 /* %i2/%i3 = src1 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 572) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 573) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 574) ldda [%l7 + 0x10] %asi, %i4 /* %i4/%i5 = src2 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 575) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 576) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 577) ldda [%l6 + 0x10] %asi, %g2 /* %g2/%g3 = src3 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 578) xor %l2, %l0, %l2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 579) xor %l3, %l1, %l3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 580) stxa %l2, [%i0 + 0x00] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 581) stxa %l3, [%i0 + 0x08] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 582) ldda [%l5 + 0x10] %asi, %l0 /* %l0/%l1 = src4 + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 583) ldda [%i0 + 0x10] %asi, %l2 /* %l2/%l3 = dest + 0x10 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 584)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 585) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 586) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 587) ldda [%i1 + 0x20] %asi, %i2 /* %i2/%i3 = src1 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 588) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 589) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 590) ldda [%l7 + 0x20] %asi, %i4 /* %i4/%i5 = src2 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 591) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 592) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 593) ldda [%l6 + 0x20] %asi, %g2 /* %g2/%g3 = src3 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 594) xor %l2, %l0, %l2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 595) xor %l3, %l1, %l3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 596) stxa %l2, [%i0 + 0x10] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 597) stxa %l3, [%i0 + 0x18] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 598) ldda [%l5 + 0x20] %asi, %l0 /* %l0/%l1 = src4 + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 599) ldda [%i0 + 0x20] %asi, %l2 /* %l2/%l3 = dest + 0x20 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 600)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 601) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 602) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 603) ldda [%i1 + 0x30] %asi, %i2 /* %i2/%i3 = src1 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 604) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 605) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 606) ldda [%l7 + 0x30] %asi, %i4 /* %i4/%i5 = src2 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 607) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 608) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 609) ldda [%l6 + 0x30] %asi, %g2 /* %g2/%g3 = src3 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 610) xor %l2, %l0, %l2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 611) xor %l3, %l1, %l3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 612) stxa %l2, [%i0 + 0x20] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 613) stxa %l3, [%i0 + 0x28] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 614) ldda [%l5 + 0x30] %asi, %l0 /* %l0/%l1 = src4 + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 615) ldda [%i0 + 0x30] %asi, %l2 /* %l2/%l3 = dest + 0x30 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 616)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 617) prefetch [%i1 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 618) prefetch [%l7 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 619) prefetch [%l6 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 620) prefetch [%l5 + 0x40], #one_read
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 621) prefetch [%i0 + 0x40], #n_writes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 622)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 623) xor %i4, %i2, %i4
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 624) xor %i5, %i3, %i5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 625) xor %g2, %i4, %g2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 626) xor %g3, %i5, %g3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 627) xor %l0, %g2, %l0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 628) xor %l1, %g3, %l1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 629) xor %l2, %l0, %l2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 630) xor %l3, %l1, %l3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 631) stxa %l2, [%i0 + 0x30] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 632) stxa %l3, [%i0 + 0x38] %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 633)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 634) add %i0, 0x40, %i0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 635) add %i1, 0x40, %i1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 636) add %l7, 0x40, %l7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 637) add %l6, 0x40, %l6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 638) subcc %g1, 1, %g1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 639) bne,pt %xcc, 1b
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 640) add %l5, 0x40, %l5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 641) membar #Sync
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 642) wr %g7, 0x0, %asi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 643) ret
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 644) restore
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 645) ENDPROC(xor_niagara_5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 646) EXPORT_SYMBOL(xor_niagara_5)