Subject: Re: RFC: Change SWI number base?
To: David Laight <David.Laight@btinternet.com>
From: Richard Earnshaw <rearnsha@buzzard.freeserve.co.uk>
List: port-arm
Date: 01/09/2002 00:19:03
> Is it worth defining a thumb swi (1 of 256) just for this piece of code?
>
I don't really think so.
> I guess this means the swi code does have to check for thumb mode after all.
It must do that, since the PC may not be aligned if we swi from Thumb
mode, so we can't just blindly load a word from the PC as we do now.
> > .code 16
> > .align 0
> > SWI_nnn:
> > bx pc /* Switch to arm code */
> > nop
> > .code 32
> > swi nnn
> > ldrcs ip, L__cerror
> > bxcc lr /* Return if no error */
> > bx ip
>
> Yes - fairly neat. Need to get the alignment right though.
> think that requires a .align 2 (or a .balign 4), and a sanity check!
No need, "align 0" has always meant "word aligned" for traditional
compatibility with old assemblers (pre gas).
>
> pull the 'bxcc lr' up an instruction...
>
It's currently in the delay slot for the load instruction (though you
might argue that failure is sufficiently rare that it isn't worth the
extra cycle for the non failure case in order to save a cycle for the
failure case).
Note that if we knew __cerror was arm code we could simplify the final
sequence to
swi nnn
bxcc lr
b __cerror
R