1234567891011121314151617181920212223242526272829303132 |
- /* 32 and 64-bit millicode, original author Hewlett-Packard
- adapted for gcc by Paul Bame <bame@debian.org>
- and Alan Modra <alan@linuxcare.com.au>.
- Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
- This file is part of GCC and is released under the terms of
- of the GNU General Public License as published by the Free Software
- Foundation; either version 2, or (at your option) any later version.
- See the file COPYING in the top-level GCC source directory for a copy
- of the license. */
- #include "milli.h"
- #ifdef L_dyncall
- SUBSPA_MILLI
- ATTR_DATA
- GSYM($$dyncall)
- .export $$dyncall,millicode
- .proc
- .callinfo millicode
- .entry
- bb,>=,n %r22,30,LREF(1) ; branch if not plabel address
- depi 0,31,2,%r22 ; clear the two least significant bits
- ldw 4(%r22),%r19 ; load new LTP value
- ldw 0(%r22),%r22 ; load address of target
- LSYM(1)
- bv %r0(%r22) ; branch to the real target
- stw %r2,-24(%r30) ; save return address into frame marker
- .exit
- .procend
- #endif
|