~ubuntu-branches/debian/squeeze/ffcall/squeeze

« back to all changes in this revision

Viewing changes to ffcall/trampoline/tramp-powerpc64.new.S

  • Committer: Bazaar Package Importer
  • Author(s): Christoph Egger
  • Date: 2010-06-26 15:29:30 UTC
  • mfrom: (5.1.1 experimental)
  • Revision ID: james.westby@ubuntu.com-20100626152930-c09y01gk3szcnykn
Tags: 1.10+cvs20100619-2
Ship to unstable

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* Trampoline for powerpc64 CPU with AIX calling convention */
2
 
 
3
 
/*
4
 
 * Copyright 1995-2006 Bruno Haible, <bruno@clisp.org>
5
 
 *
6
 
 * This is free software distributed under the GNU General Public Licence
7
 
 * described in the file COPYING. Contact the author if you don't have this
8
 
 * or can't live with it. There is ABSOLUTELY NO WARRANTY, explicit or implied,
9
 
 * on this software.
10
 
 */
11
 
 
12
 
/* Available registers: r0, r12, r11, r10, r9, r8, r7, r6, r5, r4, r3. */
13
 
/* However, r0 is special in that it cannot be used as a base register. */
14
 
/* And r3...r10 should not be clobbered because they contain the first 8
15
 
 * integer arguments to the function being called. */
16
 
 
17
 
        .globl tramp
18
 
        .globl .tramp
19
 
tramp:
20
 
        .quad .tramp
21
 
.tramp:
22
 
/* Move <data> into <variable> */
23
 
        ld 11,0(2)      /* get <variable> */
24
 
        ld 12,8(2)      /* get <data> */
25
 
        std 12,0(11)
26
 
/* Get <function> */
27
 
        ld 12,16(2)
28
 
/*
29
 
 * gcc-2.6.3 source says:
30
 
 * A function pointer is a pointer to a data area whose first word contains
31
 
 * the actual address of the function, whose second word contains a pointer
32
 
 * to its TOC, and whose third word contains a value to place in the static
33
 
 * chain register (r11).
34
 
 */
35
 
        ld 11,16(12)    /* pass static chain in r11 */
36
 
        ld 2,8(12)      /* pass TOC in r2 */
37
 
        ld 0,0(12)      /* actual code address */
38
 
        mtctr 0
39
 
        bctr