[PATCH 1/2] SPARC: syscall code clean-up and minor optimizations

Daniel Hellstrom daniel at gaisler.com
Fri May 23 19:13:17 UTC 2014


Aah, I realized now that I forgot to incorporate the feedback from 
Daniel Cederman. I will post an additional fix for the PSR 3 instruction 
delay this weekend.

Daniel


On 05/23/2014 04:14 PM, Joel Sherrill wrote:
> Both of these are committed.
>
> Thanks.
> On 5/23/2014 9:01 AM, Joel Sherrill wrote:
>> This looks OK as best I can tell.
>> On 5/23/2014 8:52 AM, Daniel Hellstrom wrote:
>>> ---
>>>   c/src/lib/libcpu/sparc/syscall/syscall.S |   27 +++++++++++----------------
>>>   1 files changed, 11 insertions(+), 16 deletions(-)
>>>
>>> diff --git a/c/src/lib/libcpu/sparc/syscall/syscall.S b/c/src/lib/libcpu/sparc/syscall/syscall.S
>>> index aa69f45..2d53ebe 100644
>>> --- a/c/src/lib/libcpu/sparc/syscall/syscall.S
>>> +++ b/c/src/lib/libcpu/sparc/syscall/syscall.S
>>> @@ -37,42 +37,37 @@ SYM(syscall):
>>>
>>>   	subcc   %g1, 2, %g0		! syscall 2, disable interrupts
>>>   	bne 	3f
>>> +	 subcc   %g1, 3, %g0		! syscall 3, enable interrupts
>>>   	or    	%l0, 0x0f00, %l4	! set PIL=15
>>> -	mov   	%l4, %psr
>>> -	or	%l0, SPARC_PSR_ET_MASK, %i0	! return old psr with ET=1
>>> -	ba,a	9f
>>> +	ba	9f
>>> +	 or	%l0, SPARC_PSR_ET_MASK, %i0	! return old psr with ET=1
>>>   3:
>>> -	subcc   %g1, 3, %g0		! syscall 3, enable interrupts
>>>   	bne 	1f
>>> -	and	%i0, SPARC_PSR_PIL_MASK, %l4
>>> +	 and	%i0, SPARC_PSR_PIL_MASK, %l4
>>>   	andn	%l0, SPARC_PSR_PIL_MASK, %l5
>>>   	or	%l5, %l4, %l4
>>> -	mov   	%l4, %psr
>>> -	ba,a	9f
>>> -
>>> -1:
>>> -	ta	0			! halt
>>>   9:					! leave
>>> +	mov   	%l4, %psr		! Update PSR according to Syscall 2 or 3
>>>   	mov	0, %g1			! clear %g1
>>> -        jmpl    %l2, %g0
>>> -        rett    %l2 + 4
>>> +	jmpl    %l2, %g0
>>> +	 rett    %l2 + 4
>>> +1:
>>> +	ta	0			! syscall 1 (not 2 or 3), halt
>>>
>>>           PUBLIC(sparc_disable_interrupts)
>>>
>>>   SYM(sparc_disable_interrupts):
>>>
>>>   	mov	SYS_irqdis, %g1
>>> -	ta	0
>>>   	retl
>>> -	nop
>>> +	 ta	0
>>>
>>>           PUBLIC(sparc_enable_interrupts)
>>>
>>>   SYM(sparc_enable_interrupts):
>>>
>>>   	mov	SYS_irqen, %g1
>>> -	ta	0
>>>   	retl
>>> -	nop
>>> +	 ta	0
>>>
>>>   /* end of file */



More information about the devel mailing list