* config/m32c/m32c-lib1.S (m32c_jsri16): Make reentrant.

From-SVN: r165859
This commit is contained in:
DJ Delorie 2010-10-22 15:56:51 -04:00 committed by DJ Delorie
parent 4d1bc60a12
commit f6bac694c2
2 changed files with 24 additions and 12 deletions

View File

@ -1,3 +1,7 @@
2010-10-22 DJ Delorie <dj@redhat.com>
* config/m32c/m32c-lib1.S (m32c_jsri16): Make reentrant.
2010-10-22 Paul Koning <ni1d@arrl.net>
* config/pdp11/pdp11.h (IRA_COVER_CLASSES): Define.

View File

@ -204,20 +204,28 @@ cmpsi_lt:
#endif
#ifdef L__m32c_jsri16
.data
m32c_jsri_addr:
.byte 0, 0, 0
m32c_jsri_ret:
.byte 0, 0, 0
.text
#ifdef A16
.global m32c_jsri16
m32c_jsri16:
pop.w m32c_jsri_ret
pop.b m32c_jsri_ret+2
pop.w m32c_jsri_addr
push.b m32c_jsri_ret+2
push.w m32c_jsri_ret
jmpi.a m32c_jsri_addr
add.w #-1, sp
/* Read the address (16 bits) and return address (24 bits) off
the stack. */
mov.w 4[sp], r0
mov.w 1[sp], r3
mov.b 3[sp], a0 /* This zero-extends, so the high byte has
zero in it. */
/* Write the return address, then new address, to the stack. */
mov.w a0, 1[sp] /* Just to get the zero in 2[sp]. */
mov.w r0, 0[sp]
mov.w r3, 3[sp]
mov.b a0, 5[sp]
/* This "returns" to the target address, leaving the pending
return address on the stack. */
rts
#endif
#endif