comp.lang.ada
 help / color / mirror / Atom feed
From: Jere <jhb.chat@gmail.com>
Subject: Re: avoiding builtin memset
Date: Wed, 26 Apr 2017 17:22:46 -0700 (PDT)
Date: 2017-04-26T17:22:46-07:00	[thread overview]
Message-ID: <f2f54f98-5449-4f0b-af09-fb551e768f13@googlegroups.com> (raw)
In-Reply-To: <934912c8-c189-4d36-8a96-b2aa97e38685@googlegroups.com>

On Monday, April 24, 2017 at 12:56:51 PM UTC-4, Shark8 wrote:
> I suppose you could try this:
> 
>     Procedure Memset(
>        Address : System.Address;
>        Value   : System.Storage_Elements.Storage_Element;
>        Length  : Natural
>       ) is
> 	Use System.Storage_Elements;
> 	Memory : Storage_Array(1..Storage_Offset(Length))
> 	  with Import, Address => Address;
>     Begin
> 	For Element of Memory loop
> 	    Element := Value;
> 	end loop;
>     End Memset;

Thanks!  

I'll be honest, I wasn't expecting it to avoid memset (didn't see why 
it should), but it didn't recursively call it.  It did however, do a 
very interesting loop unroll:

***************************************************************
<snipped>

 208:	2a00      	cmp	r2, #0
 20a:	d02d      	beq.n	268 <memset+0xa8>
 20c:	7029      	strb	r1, [r5, #0]
 20e:	2a01      	cmp	r2, #1
 210:	d02a      	beq.n	268 <memset+0xa8>
 212:	7069      	strb	r1, [r5, #1]
 214:	2a02      	cmp	r2, #2
 216:	d027      	beq.n	268 <memset+0xa8>
 218:	70a9      	strb	r1, [r5, #2]
 21a:	2a03      	cmp	r2, #3
 21c:	d024      	beq.n	268 <memset+0xa8>
 21e:	70e9      	strb	r1, [r5, #3]
 220:	2a04      	cmp	r2, #4
 222:	d021      	beq.n	268 <memset+0xa8>
 224:	7129      	strb	r1, [r5, #4]
 226:	2a05      	cmp	r2, #5
 228:	d01e      	beq.n	268 <memset+0xa8>
 22a:	7169      	strb	r1, [r5, #5]
 22c:	2a06      	cmp	r2, #6
 22e:	d01b      	beq.n	268 <memset+0xa8>
 230:	71a9      	strb	r1, [r5, #6]
 232:	2a07      	cmp	r2, #7
 234:	d018      	beq.n	268 <memset+0xa8>
 236:	71e9      	strb	r1, [r5, #7]
 238:	2a08      	cmp	r2, #8
 23a:	d015      	beq.n	268 <memset+0xa8>
 23c:	7229      	strb	r1, [r5, #8]
 23e:	2a09      	cmp	r2, #9
 240:	d012      	beq.n	268 <memset+0xa8>
 242:	7269      	strb	r1, [r5, #9]
 244:	2a0a      	cmp	r2, #10
 246:	d00f      	beq.n	268 <memset+0xa8>
 248:	72a9      	strb	r1, [r5, #10]
 24a:	2a0b      	cmp	r2, #11
 24c:	d00c      	beq.n	268 <memset+0xa8>
 24e:	72e9      	strb	r1, [r5, #11]
 250:	2a0c      	cmp	r2, #12
 252:	d009      	beq.n	268 <memset+0xa8>
 254:	7329      	strb	r1, [r5, #12]
 256:	2a0d      	cmp	r2, #13
 258:	d006      	beq.n	268 <memset+0xa8>
 25a:	7369      	strb	r1, [r5, #13]
 25c:	2a0e      	cmp	r2, #14
 25e:	d003      	beq.n	268 <memset+0xa8>
 260:	73a9      	strb	r1, [r5, #14]
 262:	2a0f      	cmp	r2, #15
 264:	d000      	beq.n	268 <memset+0xa8>
 266:	73e9      	strb	r1, [r5, #15]
 268:	b002      	add	sp, #8
 26a:	bd70      	pop	{r4, r5, r6, pc}
***************************************************************

That was interesting.  That's with -03

  parent reply	other threads:[~2017-04-27  0:22 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-24 16:06 avoiding builtin memset Jere
2017-04-24 16:56 ` Shark8
2017-04-25  1:21   ` Anh Vo
2017-04-25  2:57     ` Luke A. Guest
2017-04-25 18:43       ` Shark8
2017-04-25 22:18         ` Luke A. Guest
2017-04-26  7:35           ` Simon Wright
2017-04-26 13:44             ` Lucretia
2017-04-26 15:22               ` Simon Wright
2017-04-27  0:22   ` Jere [this message]
2017-04-27  4:35     ` J-P. Rosen
2017-04-27  7:09       ` Simon Wright
2017-05-24 15:08 ` Frédéric PRACA
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox