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
next prev 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