1e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* 2e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Copyright (c) 2011, The Linux Foundation. All rights reserved. 3e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 4e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * This program is free software; you can redistribute it and/or modify 5e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * it under the terms of the GNU General Public License version 2 and 6e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * only version 2 as published by the Free Software Foundation. 7e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 8e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * This program is distributed in the hope that it will be useful, 9e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * but WITHOUT ANY WARRANTY; without even the implied warranty of 10e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * GNU General Public License for more details. 12e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 13e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * You should have received a copy of the GNU General Public License 14e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * along with this program; if not, write to the Free Software 15e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 16e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng * 02110-1301, USA. 17e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng */ 18e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 19e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 20e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* HEXAGON assembly optimized memset */ 21e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* Replaces the standard library function memset */ 22e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 23e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 24e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .macro HEXAGON_OPT_FUNC_BEGIN name 25e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .text 26e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .p2align 4 27e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .globl \name 28e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .type \name, @function 29e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng\name: 30e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .endm 31e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 32e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .macro HEXAGON_OPT_FUNC_FINISH name 33e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .size \name, . - \name 34e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .endm 35e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 36e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* FUNCTION: memset (v2 version) */ 37e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#if __HEXAGON_ARCH__ < 3 38e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengHEXAGON_OPT_FUNC_BEGIN memset 39e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 40e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #8 41e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r7 = extractu(r0, #3 , #0) 42e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.eq(r2, #0) 43e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.gtu(r2, #7) 44e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 45e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 46e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r4 = vsplatb(r1) 47e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r8 = r0 /* leave r0 intact for return val */ 48e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r9 = sub(r6, r7) /* bytes until double alignment */ 49e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p0 jumpr r31 /* count == 0, so return */ 50e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 51e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 52e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = #0 53e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r7 = #0 54e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r9, #0) 55e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jump 2f /* skip byte loop */ 56e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 57e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 58e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* less than 8 bytes to set, so just set a byte at a time and return */ 59e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 60e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(1f, r2) /* byte loop */ 61e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 62e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng1: /* byte loop */ 63e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 64e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memb(r8++#1) = r4 65e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 66e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jumpr r31 67e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 68e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng2: /* skip byte loop */ 69e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 70e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #1 71e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r9, #1) 72e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #1) 73e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 3f /* skip initial byte store */ 74e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 75e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 76e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memb(r8++#1) = r4 77e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3:2 = sub(r3:2, r7:6) 78e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 79e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 80e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 81e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng3: /* skip initial byte store */ 82e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 83e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #2 84e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r9, #2) 85e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #2) 86e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 4f /* skip initial half store */ 87e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 88e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 89e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memh(r8++#2) = r4 90e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3:2 = sub(r3:2, r7:6) 91e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 92e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 93e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 94e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng4: /* skip initial half store */ 95e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 96e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #4 97e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.gtu(r2, #7) 98e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #4) 99e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 5f /* skip initial word store */ 100e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 101e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 102e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memw(r8++#4) = r4 103e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3:2 = sub(r3:2, r7:6) 104e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.gtu(r2, #11) 105e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 106e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 107e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 108e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng5: /* skip initial word store */ 109e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 110e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r10 = lsr(r2, #3) 111e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r3, #1) 112e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 7f /* skip double loop */ 113e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 114e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 115e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r5 = r4 116e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #8 117e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(6f, r10) /* double loop */ 118e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 119e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 120e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* set bytes a double word at a time */ 121e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 122e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 123e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng6: /* double loop */ 124e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 125e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r8++#8) = r5:4 126e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3:2 = sub(r3:2, r7:6) 127e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #8) 128e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 129e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 130e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng7: /* skip double loop */ 131e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 132e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r2, #2) 133e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 134e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 135e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 136e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = #4 137e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r2, #1) 138e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #4) 139e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 8f /* skip final word store */ 140e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 141e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 142e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memw(r8++#4) = r4 143e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3:2 = sub(r3:2, r7:6) 144e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 145e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 146e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 147e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng8: /* skip final word store */ 148e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 149e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #2) 150e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if !p0 jump 9f /* skip final half store */ 151e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 152e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 153e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memh(r8++#2) = r4 154e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if p1 jumpr r31 155e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 156e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 157e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng9: /* skip final half store */ 158e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 159e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memb(r8++#1) = r4 160e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jumpr r31 161e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 162e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengHEXAGON_OPT_FUNC_FINISH memset 163e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif 164e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 165e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng 166e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng/* FUNCTION: memset (v3 and higher version) */ 167e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#if __HEXAGON_ARCH__ >= 3 168e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengHEXAGON_OPT_FUNC_BEGIN memset 169e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 170e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r7=vsplatb(r1) 171e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = r0 172e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (r2==#0) jump:nt .L1 173e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 174e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 175e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r5:4=combine(r7,r7) 176e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.gtu(r2,#8) 177e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (p0.new) jump:nt .L3 178e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 179e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 180e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = r0 181e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(.L47,r2) 182e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 183e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 184e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L47: 185e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 186e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memb(r3++#1) = r1 187e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 /* start=.L47 */ 188e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jumpr r31 189e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L3: 190e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 191e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r0,#0) 192e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L8 193e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p1 = cmp.eq(r2, #1) 194e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 195e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 196e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = add(r0, #1) 197e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-1) 198e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memb(r0) = r1 199e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (p1) jump .L1 200e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 201e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L8: 202e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 203e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r6,#1) 204e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L10 205e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 206e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 207e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-2) 208e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memh(r6++#2) = r7 209e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.eq(r2, #2) 210e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (p0.new) jump:nt .L1 211e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 212e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L10: 213e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 214e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r6,#2) 215e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L12 216e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 217e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 218e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-4) 219e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memw(r6++#4) = r7 220e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.eq(r2, #4) 221e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (p0.new) jump:nt .L1 222e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 223e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L12: 224e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 225e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.gtu(r2,#127) 226e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L14 227e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 228e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = and(r6,#31) 229e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (r3==#0) jump:nt .L17 230e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 231e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 232e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-8) 233e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 234e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = and(r6,#31) 235e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (r3==#0) jump:nt .L17 236e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 237e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 238e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-8) 239e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 240e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = and(r6,#31) 241e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (r3==#0) jump:nt .L17 242e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 243e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 244e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-8) 245e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 246e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L17: 247e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 248e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = lsr(r2,#5) 249e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (r1!=#0) jump:nt .L18 250e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 251e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 252e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r8 = r3 253e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r3 = r6 254e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(.L46,r3) 255e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 256e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 257e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L46: 258e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 259e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng dczeroa(r6) 260e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r6 = add(r6,#32) 261e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-32) 262e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 /* start=.L46 */ 263e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L14: 264e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 265e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.gtu(r2,#7) 266e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L28 267e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r8 = lsr(r2,#3) 268e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 269e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(.L44,r8) 270e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 271e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L44: 272e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 273e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 274e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-8) 275e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 /* start=.L44 */ 276e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L28: 277e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 278e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r2,#2) 279e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L33 280e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 281e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 282e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-4) 283e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memw(r6++#4) = r7 284e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 285e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L33: 286e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 287e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = tstbit(r2,#1) 288e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (!p0.new) jump:nt .L35 289e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 290e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 291e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-2) 292e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memh(r6++#2) = r7 293e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 294e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L35: 295e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng p0 = cmp.eq(r2,#1) 296e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng if (p0) memb(r6) = r1 297e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L1: 298e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jumpr r31 299e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L18: 300e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng loop0(.L45,r3) 301e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng .falign 302e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng.L45: 303e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng dczeroa(r6) 304e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 305e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 306e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng r2 = add(r2,#-32) 307e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng } 308e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 309e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 310e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng { 311e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng memd(r6++#8) = r5:4 312e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng }:endloop0 /* start=.L45 */ 313e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng jump .L14 314e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen ChengHEXAGON_OPT_FUNC_FINISH memset 315e6e8a0bd7cffcc9ae2e0e75546fb12a19213d4aeBen Cheng#endif 316