[Oberon] Oberon-07 - SYSTEM.MSET

Chris Burrows chris at cfbsoftware.com
Fri Jun 26 09:17:10 CEST 2020


> -----Original Message-----
> From: Oberon [mailto:oberon-bounces at lists.inf.ethz.ch] On Behalf Of John
> R. Strohm
> Sent: Friday, 26 June 2020 2:51 PM
> To: ETH Oberon and related systems
> Subject: Re: [Oberon] Oberon-07 - SYSTEM.MSET
> 
> > --- joerg.straube at iaeth.ch wrote:
> > In my point of view it s not worth the effort as eg
> >
> > SYSTEM.PUT(Display.Base, 0BABEFACEH);
> > SYSTEM.COPY(
> >   Display.Base, Display.Base+4, 24575
> > );
> >
> > fills the b/w screen with an arbitrary word.
> 
> Arguably, this should be undefined behavior.  SYSTEM.COPY() should
> ideally be defined to be unpredictable if the blocks overlap, to allow an
> implementation to run the loop "backwards", if that would yield better
> performance on that particular system.
> 
> I do not recall offhand whether SYSTEM.PUT() is expected to expand
> inline, or do a subroutine call.  If the latter, it would make sense to
> provide a SYSTEM.MEMSET().
> 

SYSTEM.PUT in both the RISC5 and Astrobe ARM Cortex-M compilers expands inline.

Using the auto-increment extension to SYSTEM.PUT in the Astrobe for ARM Cortex-M compilers, the main processing loop in the following statement only uses three instructions as opposed to four when SYSTEM.COPY is used:

  REPEAT SYSTEM.PUT(addr, data, 4) UNTIL addr = limit; 

Regards,
Chris Burrows
CFB Software
https://www.astrobe.com




More information about the Oberon mailing list