^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) ;; SPDX-License-Identifier: GPL-2.0-or-later
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) ;; Copyright 2010 Free Software Foundation, Inc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ;; Contributed by Bernd Schmidt <bernds@codesourcery.com>.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) ;;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) #include <linux/linkage.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) .text
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) ENTRY(__c6xabi_strasgi)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) ;; This is essentially memcpy, with alignment known to be at least
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) ;; 4, and the size a multiple of 4 greater than or equal to 28.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) ldw .d2t1 *B4++, A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) || mvk .s2 16, B1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) ldw .d2t1 *B4++, A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) || mvk .s2 20, B2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) || sub .d1 A6, 24, A6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) ldw .d2t1 *B4++, A5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) ldw .d2t1 *B4++, A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) || mv .l2x A6, B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) ldw .d2t1 *B4++, A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) ldw .d2t1 *B4++, A9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) || mv .s2x A0, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) || cmpltu .l2 B2, B7, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) _strasgi_loop:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) || [B0] ldw .d2t1 *B4++, A0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) || mv .s2x A1, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) || mv .l2 B7, B6
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) [B0] sub .d2 B6, 24, B7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) || [B0] b .s2 _strasgi_loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) || cmpltu .l2 B1, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) [B0] ldw .d2t1 *B4++, A1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) || stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) || mv .s2x A5, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) || cmpltu .l2 12, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) [B0] ldw .d2t1 *B4++, A5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) || stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) || mv .s2x A7, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) || cmpltu .l2 8, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) [B0] ldw .d2t1 *B4++, A7
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) || stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) || mv .s2x A8, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) || cmpltu .l2 4, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) [B0] ldw .d2t1 *B4++, A8
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) || stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) || mv .s2x A9, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) || cmpltu .l2 0, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) [B0] ldw .d2t1 *B4++, A9
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) || stw .d1t2 B5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) || mv .s2x A0, B5
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) || cmpltu .l2 B2, B7, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) ;; loop back branch happens here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) cmpltu .l2 B1, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) || ret .s2 b3
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) [B0] stw .d1t1 A1, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) || cmpltu .l2 12, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) [B0] stw .d1t1 A5, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) || cmpltu .l2 8, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) [B0] stw .d1t1 A7, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) || cmpltu .l2 4, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) [B0] stw .d1t1 A8, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) || cmpltu .l2 0, B6, B0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) [B0] stw .d1t1 A9, *A4++
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) ;; return happens here
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) ENDPROC(__c6xabi_strasgi)