18c2ecf20Sopenharmony_ci;; SPDX-License-Identifier: GPL-2.0-or-later 28c2ecf20Sopenharmony_ci;; Copyright 2010 Free Software Foundation, Inc. 38c2ecf20Sopenharmony_ci;; Contributed by Bernd Schmidt <bernds@codesourcery.com>. 48c2ecf20Sopenharmony_ci;; 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#include <linux/linkage.h> 78c2ecf20Sopenharmony_ci 88c2ecf20Sopenharmony_ci .text 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ciENTRY(__c6xabi_strasgi) 118c2ecf20Sopenharmony_ci ;; This is essentially memcpy, with alignment known to be at least 128c2ecf20Sopenharmony_ci ;; 4, and the size a multiple of 4 greater than or equal to 28. 138c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A0 148c2ecf20Sopenharmony_ci|| mvk .s2 16, B1 158c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A1 168c2ecf20Sopenharmony_ci|| mvk .s2 20, B2 178c2ecf20Sopenharmony_ci|| sub .d1 A6, 24, A6 188c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A5 198c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A7 208c2ecf20Sopenharmony_ci|| mv .l2x A6, B7 218c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A8 228c2ecf20Sopenharmony_ci ldw .d2t1 *B4++, A9 238c2ecf20Sopenharmony_ci|| mv .s2x A0, B5 248c2ecf20Sopenharmony_ci|| cmpltu .l2 B2, B7, B0 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci_strasgi_loop: 278c2ecf20Sopenharmony_ci stw .d1t2 B5, *A4++ 288c2ecf20Sopenharmony_ci|| [B0] ldw .d2t1 *B4++, A0 298c2ecf20Sopenharmony_ci|| mv .s2x A1, B5 308c2ecf20Sopenharmony_ci|| mv .l2 B7, B6 318c2ecf20Sopenharmony_ci 328c2ecf20Sopenharmony_ci [B0] sub .d2 B6, 24, B7 338c2ecf20Sopenharmony_ci|| [B0] b .s2 _strasgi_loop 348c2ecf20Sopenharmony_ci|| cmpltu .l2 B1, B6, B0 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci [B0] ldw .d2t1 *B4++, A1 378c2ecf20Sopenharmony_ci|| stw .d1t2 B5, *A4++ 388c2ecf20Sopenharmony_ci|| mv .s2x A5, B5 398c2ecf20Sopenharmony_ci|| cmpltu .l2 12, B6, B0 408c2ecf20Sopenharmony_ci 418c2ecf20Sopenharmony_ci [B0] ldw .d2t1 *B4++, A5 428c2ecf20Sopenharmony_ci|| stw .d1t2 B5, *A4++ 438c2ecf20Sopenharmony_ci|| mv .s2x A7, B5 448c2ecf20Sopenharmony_ci|| cmpltu .l2 8, B6, B0 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci [B0] ldw .d2t1 *B4++, A7 478c2ecf20Sopenharmony_ci|| stw .d1t2 B5, *A4++ 488c2ecf20Sopenharmony_ci|| mv .s2x A8, B5 498c2ecf20Sopenharmony_ci|| cmpltu .l2 4, B6, B0 508c2ecf20Sopenharmony_ci 518c2ecf20Sopenharmony_ci [B0] ldw .d2t1 *B4++, A8 528c2ecf20Sopenharmony_ci|| stw .d1t2 B5, *A4++ 538c2ecf20Sopenharmony_ci|| mv .s2x A9, B5 548c2ecf20Sopenharmony_ci|| cmpltu .l2 0, B6, B0 558c2ecf20Sopenharmony_ci 568c2ecf20Sopenharmony_ci [B0] ldw .d2t1 *B4++, A9 578c2ecf20Sopenharmony_ci|| stw .d1t2 B5, *A4++ 588c2ecf20Sopenharmony_ci|| mv .s2x A0, B5 598c2ecf20Sopenharmony_ci|| cmpltu .l2 B2, B7, B0 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci ;; loop back branch happens here 628c2ecf20Sopenharmony_ci 638c2ecf20Sopenharmony_ci cmpltu .l2 B1, B6, B0 648c2ecf20Sopenharmony_ci|| ret .s2 b3 658c2ecf20Sopenharmony_ci 668c2ecf20Sopenharmony_ci [B0] stw .d1t1 A1, *A4++ 678c2ecf20Sopenharmony_ci|| cmpltu .l2 12, B6, B0 688c2ecf20Sopenharmony_ci [B0] stw .d1t1 A5, *A4++ 698c2ecf20Sopenharmony_ci|| cmpltu .l2 8, B6, B0 708c2ecf20Sopenharmony_ci [B0] stw .d1t1 A7, *A4++ 718c2ecf20Sopenharmony_ci|| cmpltu .l2 4, B6, B0 728c2ecf20Sopenharmony_ci [B0] stw .d1t1 A8, *A4++ 738c2ecf20Sopenharmony_ci|| cmpltu .l2 0, B6, B0 748c2ecf20Sopenharmony_ci [B0] stw .d1t1 A9, *A4++ 758c2ecf20Sopenharmony_ci 768c2ecf20Sopenharmony_ci ;; return happens here 778c2ecf20Sopenharmony_ciENDPROC(__c6xabi_strasgi) 78