Altivec context was Re: Multilib swamp

Till Straumann strauman at
Wed Mar 2 20:39:24 UTC 2005

Joel Sherrill wrote:

>> Brings me right back to the question I asked originally - how could 
>> we best add hooks for
>> altivec register context switching [ without introducing an ugly 
>> #ifdef __PPC__ into cpukit]?
>> Ideas?
> I thought I had emailed you privately with a suggestion based upon
> what I thought would be most general to other architectures. 

Yeah, sorry - I just dug that out.

> Multimedia/vector extensions are not uncommon in architectures
> anymore.  Although some only consist of instructions which are
> an alternate view of FP or 64-bit integer registers.
> I propose a 3rd type of context to be added to the integer and
> FPU ones we have now and a task attribute which is comparable to
> that for has floating point.  It could be disabled on CPUs without
> this capability just like FP is done now. 

I'm not sure if that's a good, generic solution. How about changing

_Context_Switch(Context_Control *from, Context_Control *to);


_Context_Switch(struct Thread_Control_struct *from, struct 
Thread_Control_struct *to);

? Since 'Context_Control' is defined by the CPU-specific code, and 
is, too, [_Context_switch simply is macroed to _CPU_Context_switch].
The new interface would simply allow the CPU specific code to handle
all necessary context information. However, it needs access to the
Thread_Control_struct [e.g., to check the thread's flags].

Similar changes would have to be made to _Context_Initialize() and
a hook would probably needed in _Thread_Initialize() to allow CPU
specific extensions to allocate memory from the workspace.

Anyways - until all the hooks are there, I probably add altivec support
as a user extension first...

> As always the issue is whether one can control the compiler well
> enough to limit these architectural extensions to a subset of
> tasks. 

At least with altivec this is should not be a problem. The only thing
that changes for code that doesn't use the special vector data types
is the stack alignment which must be maintained.


-- Till

More information about the users mailing list