OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [gcc-4.2.2/] [gcc/] [config/] [rs6000/] [tramp.asm] - Blame information for rev 816

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 38 julius
/*  Special support for trampolines
2
 *
3
 *   Copyright (C) 1996, 1997, 2000 Free Software Foundation, Inc.
4
 *   Written By Michael Meissner
5
 *
6
 * This file is free software; you can redistribute it and/or modify it
7
 * under the terms of the GNU General Public License as published by the
8
 * Free Software Foundation; either version 2, or (at your option) any
9
 * later version.
10
 *
11
 * In addition to the permissions in the GNU General Public License, the
12
 * Free Software Foundation gives you unlimited permission to link the
13
 * compiled version of this file with other programs, and to distribute
14
 * those programs without any restriction coming from the use of this
15
 * file.  (The General Public License restrictions do apply in other
16
 * respects; for example, they cover modification of the file, and
17
 * distribution when not linked into another program.)
18
 *
19
 * This file is distributed in the hope that it will be useful, but
20
 * WITHOUT ANY WARRANTY; without even the implied warranty of
21
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
22
 * General Public License for more details.
23
 *
24
 * You should have received a copy of the GNU General Public License
25
 * along with this program; see the file COPYING.  If not, write to
26
 * the Free Software Foundation, 51 Franklin Street, Fifth Floor,
27
 * Boston, MA 02110-1301, USA.
28
 *
29
 *    As a special exception, if you link this library with files
30
 *    compiled with GCC to produce an executable, this does not cause
31
 *    the resulting executable to be covered by the GNU General Public License.
32
 *    This exception does not however invalidate any other reasons why
33
 *    the executable file might be covered by the GNU General Public License.
34
 */
35
 
36
/* Set up trampolines.  */
37
 
38
        .file   "tramp.asm"
39
        .section ".text"
40
        #include "ppc-asm.h"
41
 
42
#ifndef __powerpc64__
43
        .type   trampoline_initial,@object
44
        .align  2
45
trampoline_initial:
46
        mflr    r0
47
        bcl     20,31,1f
48
.Lfunc = .-trampoline_initial
49
        .long   0                        /* will be replaced with function address */
50
.Lchain = .-trampoline_initial
51
        .long   0                        /* will be replaced with static chain */
52
1:      mflr    r11
53
        mtlr    r0
54
        lwz     r0,0(r11)               /* function address */
55
        lwz     r11,4(r11)              /* static chain */
56
        mtctr   r0
57
        bctr
58
 
59
trampoline_size = .-trampoline_initial
60
        .size   trampoline_initial,trampoline_size
61
 
62
 
63
/* R3 = stack address to store trampoline */
64
/* R4 = length of trampoline area */
65
/* R5 = function address */
66
/* R6 = static chain */
67
 
68
FUNC_START(__trampoline_setup)
69
        mflr    r0              /* save return address */
70
        bcl     20,31,.LCF0     /* load up __trampoline_initial into r7 */
71
.LCF0:
72
        mflr    r11
73
        addi    r7,r11,trampoline_initial-4-.LCF0 /* trampoline address -4 */
74
 
75
        li      r8,trampoline_size      /* verify that the trampoline is big enough */
76
        cmpw    cr1,r8,r4
77
        srwi    r4,r4,2         /* # words to move */
78
        addi    r9,r3,-4        /* adjust pointer for lwzu */
79
        mtctr   r4
80
        blt     cr1,.Labort
81
 
82
        mtlr    r0
83
 
84
        /* Copy the instructions to the stack */
85
.Lmove:
86
        lwzu    r10,4(r7)
87
        stwu    r10,4(r9)
88
        bdnz    .Lmove
89
 
90
        /* Store correct function and static chain */
91
        stw     r5,.Lfunc(r3)
92
        stw     r6,.Lchain(r3)
93
 
94
        /* Now flush both caches */
95
        mtctr   r4
96
.Lcache:
97
        icbi    0,r3
98
        dcbf    0,r3
99
        addi    r3,r3,4
100
        bdnz    .Lcache
101
 
102
        /* Finally synchronize things & return */
103
        sync
104
        isync
105
        blr
106
 
107
.Labort:
108
#if defined SHARED && defined HAVE_AS_REL16
109
        bcl     20,31,1f
110
1:      mflr    r30
111
        addis   r30,r30,_GLOBAL_OFFSET_TABLE_-1b@ha
112
        addi    r30,r30,_GLOBAL_OFFSET_TABLE_-1b@l
113
#endif
114
        bl      JUMP_TARGET(abort)
115
FUNC_END(__trampoline_setup)
116
 
117
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.