]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blob - arch/parisc/lib/milli/dyncall.S
27f9ca558d0ad603e37e989087fd8c2945d3d329
[linux-2.6-omap-h63xx.git] / arch / parisc / lib / milli / dyncall.S
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