1*3cab2bb3Spatrick//===------------------------- memcopy routines ---------------------------===// 2*3cab2bb3Spatrick// 3*3cab2bb3Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*3cab2bb3Spatrick// See https://llvm.org/LICENSE.txt for license information. 5*3cab2bb3Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*3cab2bb3Spatrick// 7*3cab2bb3Spatrick//===----------------------------------------------------------------------===// 8*3cab2bb3Spatrick 9*3cab2bb3Spatrick 10*3cab2bb3Spatrick .macro FUNCTION_BEGIN name 11*3cab2bb3Spatrick .text 12*3cab2bb3Spatrick .p2align 5 13*3cab2bb3Spatrick .globl \name 14*3cab2bb3Spatrick .type \name, @function 15*3cab2bb3Spatrick\name: 16*3cab2bb3Spatrick .endm 17*3cab2bb3Spatrick 18*3cab2bb3Spatrick .macro FUNCTION_END name 19*3cab2bb3Spatrick .size \name, . - \name 20*3cab2bb3Spatrick .endm 21*3cab2bb3Spatrick 22*3cab2bb3SpatrickFUNCTION_BEGIN __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes 23*3cab2bb3Spatrick { 24*3cab2bb3Spatrick p0 = bitsclr(r1,#7) 25*3cab2bb3Spatrick p0 = bitsclr(r0,#7) 26*3cab2bb3Spatrick if (p0.new) r5:4 = memd(r1) 27*3cab2bb3Spatrick r3 = #-3 28*3cab2bb3Spatrick } 29*3cab2bb3Spatrick { 30*3cab2bb3Spatrick if (!p0) jump .Lmemcpy_call 31*3cab2bb3Spatrick if (p0) memd(r0++#8) = r5:4 32*3cab2bb3Spatrick if (p0) r5:4 = memd(r1+#8) 33*3cab2bb3Spatrick r3 += lsr(r2,#3) 34*3cab2bb3Spatrick } 35*3cab2bb3Spatrick { 36*3cab2bb3Spatrick memd(r0++#8) = r5:4 37*3cab2bb3Spatrick r5:4 = memd(r1+#16) 38*3cab2bb3Spatrick r1 = add(r1,#24) 39*3cab2bb3Spatrick loop0(1f,r3) 40*3cab2bb3Spatrick } 41*3cab2bb3Spatrick .falign 42*3cab2bb3Spatrick1: 43*3cab2bb3Spatrick { 44*3cab2bb3Spatrick memd(r0++#8) = r5:4 45*3cab2bb3Spatrick r5:4 = memd(r1++#8) 46*3cab2bb3Spatrick }:endloop0 47*3cab2bb3Spatrick { 48*3cab2bb3Spatrick memd(r0) = r5:4 49*3cab2bb3Spatrick r0 -= add(r2,#-8) 50*3cab2bb3Spatrick jumpr r31 51*3cab2bb3Spatrick } 52*3cab2bb3SpatrickFUNCTION_END __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes 53*3cab2bb3Spatrick 54*3cab2bb3Spatrick.Lmemcpy_call: 55*3cab2bb3Spatrick#ifdef __PIC__ 56*3cab2bb3Spatrick jump memcpy@PLT 57*3cab2bb3Spatrick#else 58*3cab2bb3Spatrick jump memcpy 59*3cab2bb3Spatrick#endif 60*3cab2bb3Spatrick 61*3cab2bb3Spatrick .globl __qdsp_memcpy_likely_aligned_min32bytes_mult8bytes 62*3cab2bb3Spatrick .set __qdsp_memcpy_likely_aligned_min32bytes_mult8bytes, \ 63*3cab2bb3Spatrick __hexagon_memcpy_likely_aligned_min32bytes_mult8bytes 64