1;; Copyright 2010 Free Software Foundation, Inc. 2;; Contributed by Bernd Schmidt <bernds@codesourcery.com>. 3;; 4;; This program is free software; you can redistribute it and/or modify 5;; it under the terms of the GNU General Public License as published by 6;; the Free Software Foundation; either version 2 of the License, or 7;; (at your option) any later version. 8;; 9;; This program is distributed in the hope that it will be useful, 10;; but WITHOUT ANY WARRANTY; without even the implied warranty of 11;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12;; GNU General Public License for more details. 13;; 14;; You should have received a copy of the GNU General Public License 15;; along with this program; if not, write to the Free Software 16;; Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18#include <linux/linkage.h> 19 20 .text 21 22ENTRY(__c6xabi_strasgi) 23 ;; This is essentially memcpy, with alignment known to be at least 24 ;; 4, and the size a multiple of 4 greater than or equal to 28. 25 ldw .d2t1 *B4++, A0 26|| mvk .s2 16, B1 27 ldw .d2t1 *B4++, A1 28|| mvk .s2 20, B2 29|| sub .d1 A6, 24, A6 30 ldw .d2t1 *B4++, A5 31 ldw .d2t1 *B4++, A7 32|| mv .l2x A6, B7 33 ldw .d2t1 *B4++, A8 34 ldw .d2t1 *B4++, A9 35|| mv .s2x A0, B5 36|| cmpltu .l2 B2, B7, B0 37 38_strasgi_loop: 39 stw .d1t2 B5, *A4++ 40|| [B0] ldw .d2t1 *B4++, A0 41|| mv .s2x A1, B5 42|| mv .l2 B7, B6 43 44 [B0] sub .d2 B6, 24, B7 45|| [B0] b .s2 _strasgi_loop 46|| cmpltu .l2 B1, B6, B0 47 48 [B0] ldw .d2t1 *B4++, A1 49|| stw .d1t2 B5, *A4++ 50|| mv .s2x A5, B5 51|| cmpltu .l2 12, B6, B0 52 53 [B0] ldw .d2t1 *B4++, A5 54|| stw .d1t2 B5, *A4++ 55|| mv .s2x A7, B5 56|| cmpltu .l2 8, B6, B0 57 58 [B0] ldw .d2t1 *B4++, A7 59|| stw .d1t2 B5, *A4++ 60|| mv .s2x A8, B5 61|| cmpltu .l2 4, B6, B0 62 63 [B0] ldw .d2t1 *B4++, A8 64|| stw .d1t2 B5, *A4++ 65|| mv .s2x A9, B5 66|| cmpltu .l2 0, B6, B0 67 68 [B0] ldw .d2t1 *B4++, A9 69|| stw .d1t2 B5, *A4++ 70|| mv .s2x A0, B5 71|| cmpltu .l2 B2, B7, B0 72 73 ;; loop back branch happens here 74 75 cmpltu .l2 B1, B6, B0 76|| ret .s2 b3 77 78 [B0] stw .d1t1 A1, *A4++ 79|| cmpltu .l2 12, B6, B0 80 [B0] stw .d1t1 A5, *A4++ 81|| cmpltu .l2 8, B6, B0 82 [B0] stw .d1t1 A7, *A4++ 83|| cmpltu .l2 4, B6, B0 84 [B0] stw .d1t1 A8, *A4++ 85|| cmpltu .l2 0, B6, B0 86 [B0] stw .d1t1 A9, *A4++ 87 88 ;; return happens here 89ENDPROC(__c6xabi_strasgi) 90