dyncall.S 996 B

1234567891011121314151617181920212223242526272829303132
  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. Copyright 2001, 2002, 2003 Free Software Foundation, Inc.
  5. This file is part of GCC and is released under the terms of
  6. of the GNU General Public License as published by the Free Software
  7. Foundation; either version 2, or (at your option) any later version.
  8. See the file COPYING in the top-level GCC source directory for a copy
  9. of the license. */
  10. #include "milli.h"
  11. #ifdef L_dyncall
  12. SUBSPA_MILLI
  13. ATTR_DATA
  14. GSYM($$dyncall)
  15. .export $$dyncall,millicode
  16. .proc
  17. .callinfo millicode
  18. .entry
  19. bb,>=,n %r22,30,LREF(1) ; branch if not plabel address
  20. depi 0,31,2,%r22 ; clear the two least significant bits
  21. ldw 4(%r22),%r19 ; load new LTP value
  22. ldw 0(%r22),%r22 ; load address of target
  23. LSYM(1)
  24. bv %r0(%r22) ; branch to the real target
  25. stw %r2,-24(%r30) ; save return address into frame marker
  26. .exit
  27. .procend
  28. #endif