[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/feed.php on line 173: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
[phpBB Debug] PHP Warning: in file [ROOT]/feed.php on line 174: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
Parallella Community Supercomputing for Everyone 2015-10-08T13:15:35+00:00 https://parallella.org/forums/feed.php?f=23&t=3127 2015-10-08T13:15:35+00:00 2015-10-08T13:15:35+00:00 https://parallella.org/forums/viewtopic.php?t=3127&p=15940#p15940 <![CDATA[Re: ABI / register usage / compiler change]]>
of interrupts mentions that the C wrapper for interrupts saves all the caller saved registers to the stack, so increasing their number makes C based interrupt routines even more impractical.

When you mention banning external accesses I assume you mean executing code. Is that any off core access or just off chip? I'm wary of doing this. When you say expensive do you mean in executing time or chip silicon? A more radical suggestion might be to restrict code to the first 64K of memory; then the compiler wouldn't have to generate MOVT instructions for a function address that the linker will just make MOVT Rx,#0.

I'm not sure how many leaf functions are substantial. Also does using division in a function (which causes an internal division routine to be used) make that function non-leaf? Not sure of the compiler complexities here.

I suggest you also consider code size. Things like SP=R7 might have more benefits than the loss of that register for other uses.

Tim

Statistics: Posted by timpart — Thu Oct 08, 2015 1:15 pm


]]>
2015-08-04T15:43:38+00:00 2015-08-04T15:43:38+00:00 https://parallella.org/forums/viewtopic.php?t=3127&p=15494#p15494 <![CDATA[Re: ABI / register usage / compiler change]]> In most cases, calling & writing leaf functions involved no stack manipulation, which is a good thing IMO, leaving the load-store units dealing with global changes rather than confusing them with locals.

I would guess this is also a big deal squeezing code into a small amount of local memory too: you need less inlining, and have less bloat saving/restoring on function calls.

in the absence of hard data saying otherwise, it sounds better to go for a roughly 50:50 split between caller & callee saved.

non-leaf functions can still use the extra registers for intermediates between function calls.
larger leaf-functions can still the whole register range by actually saving.

I can also see a good case for reserving some for globals (localstore pointer, message queue ?).like 'thread-local storage' or values related to the current Task.
again MIPS had a 'global pointer' which was left pointing at global variables, allowing them to be accessed with compact addressing modes.

I gather the epiphany instruction set allows smaller instructions using the first 8 registers, what is their best use?
Should those also be split e.g. r0-r3=caller-saved, r4-r7=callee-saved, r8-r31=caller,r32-r55=callee ; r56-63=special purpose globals ?
maybe its' simpler to just keep 0-7 'scratch area'/return values & function arguments (2 return values, 6 args)

.. or is that getting too convoluted.
another way would be to use 'odd/even' registers as caller/callee

Statistics: Posted by dobkeratops — Tue Aug 04, 2015 3:43 pm


]]>
2015-08-04T12:25:50+00:00 2015-08-04T12:25:50+00:00 https://parallella.org/forums/viewtopic.php?t=3127&p=15492#p15492 <![CDATA[ABI / register usage / compiler change]]>
viewtopic.php?f=43&t=1748&p=10829&hilit=callee#p10829
viewtopic.php?f=13&t=1578&p=9698&hilit=callee#p9698
viewtopic.php?f=23&t=549&p=3284&hilit=callee#p3284

At this point, the number of users is growing and if we ever want to make a change without angering a lot of people, this may be our last chance.

ABI Change proposal:
Make registers R32-R63 officially caller saved. (currently R32-R43 are callee saved)

Why:
-better energy/program efficiency for leaf routines, where the program will likely spend most of its time (check assumption?)
-ease of use for assembly programming ("do whatever you want with R32-R63")

Why not?
...

This is actually what I had specified back in 2011. Looked through my emails and found that I made the same arguments back in 2011. Someone must have convinced me otherwise. I can't find the email trail and can't remember what the argument was for the R32-R43 callee change?.:-)

Feedback much appreciated.

Andreas

Statistics: Posted by aolofsson — Tue Aug 04, 2015 12:25 pm


]]>