URL
https://opencores.org/ocsvn/forwardcom/forwardcom/trunk
Subversion Repositories forwardcom
[/] [forwardcom/] [libraries/] [memset.as] - Rev 94
Compare with Previous | Blame | View Log
/********************************* memset.as ********************************* Author: Agner Fog* date created: 2018-03-25* Last modified: 2021-04-25* Version: 1.11* Project: ForwardCom library libc.li* Description: memcpy and memmove functions. Copy memory block* C declaration: void *memset(void *str, int8_t value, uint64_t n)** Copyright 2018-2021 GNU General Public License http://www.gnu.org/licenses*****************************************************************************/public _memset: function, reguse = 0xF, 1code section execute align = 4// r0 = destination// r1 = int8 value// r2 = n_memset function// broadcast value into vectorint8 v0 = gp2vec(r1)int8 v0 = broad(v0, r2) // broadcast value into vector of desired length or maximum lengthif (uint64 r2 <= 8) {// small size. do it all at onceint8 [r0, length = r2] = v0return}// point to end of vectorint64 r1 = r0 + r2// align destination by 8 for efficiencyint8 r3 = -r0int8+ r3 &= 7if (int8+ r3 != 0) {int8 [r0, length = r3] = v0int64 r2 -= r3}// do the rest as vector loopfor (int8 v0 in [r1-r2]) {int8 [r1-r2, length = r2] = v0}// return str1 in r0 unchangedreturn_memset endcode end
