diff options
Diffstat (limited to 'arch/parisc/lib/milli/dyncall.S')
-rw-r--r-- | arch/parisc/lib/milli/dyncall.S | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/arch/parisc/lib/milli/dyncall.S b/arch/parisc/lib/milli/dyncall.S new file mode 100644 index 000000000000..27f9ca558d0a --- /dev/null +++ b/arch/parisc/lib/milli/dyncall.S | |||
@@ -0,0 +1,32 @@ | |||
1 | /* 32 and 64-bit millicode, original author Hewlett-Packard | ||
2 | adapted for gcc by Paul Bame <bame@debian.org> | ||
3 | and Alan Modra <alan@linuxcare.com.au>. | ||
4 | |||
5 | Copyright 2001, 2002, 2003 Free Software Foundation, Inc. | ||
6 | |||
7 | This file is part of GCC and is released under the terms of | ||
8 | of the GNU General Public License as published by the Free Software | ||
9 | Foundation; either version 2, or (at your option) any later version. | ||
10 | See the file COPYING in the top-level GCC source directory for a copy | ||
11 | of the license. */ | ||
12 | |||
13 | #include "milli.h" | ||
14 | |||
15 | #ifdef L_dyncall | ||
16 | SUBSPA_MILLI | ||
17 | ATTR_DATA | ||
18 | GSYM($$dyncall) | ||
19 | .export $$dyncall,millicode | ||
20 | .proc | ||
21 | .callinfo millicode | ||
22 | .entry | ||
23 | bb,>=,n %r22,30,LREF(1) ; branch if not plabel address | ||
24 | depi 0,31,2,%r22 ; clear the two least significant bits | ||
25 | ldw 4(%r22),%r19 ; load new LTP value | ||
26 | ldw 0(%r22),%r22 ; load address of target | ||
27 | LSYM(1) | ||
28 | bv %r0(%r22) ; branch to the real target | ||
29 | stw %r2,-24(%r30) ; save return address into frame marker | ||
30 | .exit | ||
31 | .procend | ||
32 | #endif | ||