/* SPDX-License-Identifier: GPL-2.0-or-later */1/*2* OpenRISC memset.S3*4* Hand-optimized assembler version of memset for OpenRISC.5* Algorithm inspired by several other arch-specific memset routines6* in the kernel tree7*8* Copyright (C) 2015 Olof Kindgren <[email protected]>9*/1011.global memset12.type memset, @function13memset:14/* arguments:15* r3 = *s16* r4 = c17* r5 = n18* r13, r15, r17, r19 used as temp regs19*/2021/* Exit if n == 0 */22l.sfeqi r5, 023l.bf 4f2425/* Truncate c to char */26l.andi r13, r4, 0xff2728/* Skip word extension if c is 0 */29l.sfeqi r13, 030l.bf 1f31/* Check for at least two whole words (8 bytes) */32l.sfleui r5, 73334/* Extend char c to 32-bit word cccc in r13 */35l.slli r15, r13, 16 // r13 = 000c, r15 = 0c0036l.or r13, r13, r15 // r13 = 0c0c, r15 = 0c0037l.slli r15, r13, 8 // r13 = 0c0c, r15 = c0c038l.or r13, r13, r15 // r13 = cccc, r15 = c0c039401: l.addi r19, r3, 0 // Set r19 = src41/* Jump to byte copy loop if less than two words */42l.bf 3f43l.or r17, r5, r0 // Set r17 = n4445/* Mask out two LSBs to check alignment */46l.andi r15, r3, 0x34748/* lsb == 00, jump to word copy loop */49l.sfeqi r15, 050l.bf 2f51l.addi r19, r3, 0 // Set r19 = src5253/* lsb == 01,10 or 11 */54l.sb 0(r3), r13 // *src = c55l.addi r17, r17, -1 // Decrease n5657l.sfeqi r15, 358l.bf 2f59l.addi r19, r3, 1 // src += 16061/* lsb == 01 or 10 */62l.sb 1(r3), r13 // *(src+1) = c63l.addi r17, r17, -1 // Decrease n6465l.sfeqi r15, 266l.bf 2f67l.addi r19, r3, 2 // src += 26869/* lsb == 01 */70l.sb 2(r3), r13 // *(src+2) = c71l.addi r17, r17, -1 // Decrease n72l.addi r19, r3, 3 // src += 37374/* Word copy loop */752: l.sw 0(r19), r13 // *src = cccc76l.addi r17, r17, -4 // Decrease n77l.sfgeui r17, 478l.bf 2b79l.addi r19, r19, 4 // Increase src8081/* When n > 0, copy the remaining bytes, otherwise jump to exit */82l.sfeqi r17, 083l.bf 4f8485/* Byte copy loop */863: l.addi r17, r17, -1 // Decrease n87l.sb 0(r19), r13 // *src = cccc88l.sfnei r17, 089l.bf 3b90l.addi r19, r19, 1 // Increase src91924: l.jr r993l.ori r11, r3, 0949596