of a trampoline, leaving space for the variable parts. */
/* On the 32k, the trampoline looks like this:
- addr 0(pc),r2
- jump @__trampoline
- .int STATIC
- .int FUNCTION
-Doing trampolines with a library assist function is easier than figuring
-out how to do stores to memory in reverse byte order (the way immediate
-operands on the 32k are stored). */
+
+ addr 0(pc),r2
+ movd 16(r2),tos
+ movd 12(r2),r1
+ ret 0
+ .align 4
+ .int STATIC
+ .int FUNCTION
+
+ Putting the data in following data is easier than figuring out how to
+ do stores to memory in reverse byte order (the way immediate operands
+ on the 32k are stored). */
#define TRAMPOLINE_TEMPLATE(FILE) \
{ \
- fprintf (FILE, "\taddr 0(pc),r2\n" ); \
- fprintf (FILE, "\tjump " ); \
- PUT_ABSOLUTE_PREFIX (FILE); \
- fprintf (FILE, "__trampoline\n" ); \
+ fprintf (FILE, "\taddr 0(pc),r2\n"); \
+ fprintf (FILE, "\tmovd 16(r2),tos\n"); \
+ fprintf (FILE, "\tmovd 12(r2),r1\n"); \
+ fprintf (FILE, "\tret 0\n"); \
assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \
assemble_aligned_integer (UNITS_PER_WORD, const0_rtx); \
}
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 12)), CXT); \
emit_move_insn (gen_rtx_MEM (SImode, plus_constant (TRAMP, 16)), FNADDR); \
}
-
-/* This is the library routine that is used
- to transfer control from the trampoline
- to the actual nested function. */
-
-/* The function name __transfer_from_trampoline is not actually used.
- The function definition just permits use of "asm with operands"
- (though the operand list is empty). */
-#define TRANSFER_FROM_TRAMPOLINE \
-void \
-__transfer_from_trampoline () \
-{ \
- asm (".globl __trampoline"); \
- asm ("__trampoline:"); \
- asm ("movd 16(r2),tos"); \
- asm ("movd 12(r2),r1"); \
- asm ("ret 0"); \
-}
\f
/* Addressing modes, and classification of registers for them. */