Kyle Swenson | 8d8f654 | 2021-03-15 11:02:55 -0600 | [diff] [blame^] | 1 | /* |
| 2 | * Special support for eabi and SVR4 |
| 3 | * |
| 4 | * Copyright (C) 1995, 1996, 1998, 2000, 2001 Free Software Foundation, Inc. |
| 5 | * Copyright 2008 Freescale Semiconductor, Inc. |
| 6 | * Written By Michael Meissner |
| 7 | * |
| 8 | * Based on gcc/config/rs6000/crtsavres.asm from gcc |
| 9 | * |
| 10 | * This file is free software; you can redistribute it and/or modify it |
| 11 | * under the terms of the GNU General Public License as published by the |
| 12 | * Free Software Foundation; either version 2, or (at your option) any |
| 13 | * later version. |
| 14 | * |
| 15 | * In addition to the permissions in the GNU General Public License, the |
| 16 | * Free Software Foundation gives you unlimited permission to link the |
| 17 | * compiled version of this file with other programs, and to distribute |
| 18 | * those programs without any restriction coming from the use of this |
| 19 | * file. (The General Public License restrictions do apply in other |
| 20 | * respects; for example, they cover modification of the file, and |
| 21 | * distribution when not linked into another program.) |
| 22 | * |
| 23 | * This file is distributed in the hope that it will be useful, but |
| 24 | * WITHOUT ANY WARRANTY; without even the implied warranty of |
| 25 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 26 | * General Public License for more details. |
| 27 | * |
| 28 | * You should have received a copy of the GNU General Public License |
| 29 | * along with this program; see the file COPYING. If not, write to |
| 30 | * the Free Software Foundation, 51 Franklin Street, Fifth Floor, |
| 31 | * Boston, MA 02110-1301, USA. |
| 32 | * |
| 33 | * As a special exception, if you link this library with files |
| 34 | * compiled with GCC to produce an executable, this does not cause |
| 35 | * the resulting executable to be covered by the GNU General Public License. |
| 36 | * This exception does not however invalidate any other reasons why |
| 37 | * the executable file might be covered by the GNU General Public License. |
| 38 | */ |
| 39 | |
| 40 | .file "crtsavres.S" |
| 41 | .section ".text" |
| 42 | |
| 43 | /* On PowerPC64 Linux, these functions are provided by the linker. */ |
| 44 | #ifndef __powerpc64__ |
| 45 | |
| 46 | #define _GLOBAL(name) \ |
| 47 | .type name,@function; \ |
| 48 | .globl name; \ |
| 49 | name: |
| 50 | |
| 51 | /* Routines for saving integer registers, called by the compiler. */ |
| 52 | /* Called with r11 pointing to the stack header word of the caller of the */ |
| 53 | /* function, just beyond the end of the integer save area. */ |
| 54 | |
| 55 | _GLOBAL(_savegpr_14) |
| 56 | _GLOBAL(_save32gpr_14) |
| 57 | stw 14,-72(11) /* save gp registers */ |
| 58 | _GLOBAL(_savegpr_15) |
| 59 | _GLOBAL(_save32gpr_15) |
| 60 | stw 15,-68(11) |
| 61 | _GLOBAL(_savegpr_16) |
| 62 | _GLOBAL(_save32gpr_16) |
| 63 | stw 16,-64(11) |
| 64 | _GLOBAL(_savegpr_17) |
| 65 | _GLOBAL(_save32gpr_17) |
| 66 | stw 17,-60(11) |
| 67 | _GLOBAL(_savegpr_18) |
| 68 | _GLOBAL(_save32gpr_18) |
| 69 | stw 18,-56(11) |
| 70 | _GLOBAL(_savegpr_19) |
| 71 | _GLOBAL(_save32gpr_19) |
| 72 | stw 19,-52(11) |
| 73 | _GLOBAL(_savegpr_20) |
| 74 | _GLOBAL(_save32gpr_20) |
| 75 | stw 20,-48(11) |
| 76 | _GLOBAL(_savegpr_21) |
| 77 | _GLOBAL(_save32gpr_21) |
| 78 | stw 21,-44(11) |
| 79 | _GLOBAL(_savegpr_22) |
| 80 | _GLOBAL(_save32gpr_22) |
| 81 | stw 22,-40(11) |
| 82 | _GLOBAL(_savegpr_23) |
| 83 | _GLOBAL(_save32gpr_23) |
| 84 | stw 23,-36(11) |
| 85 | _GLOBAL(_savegpr_24) |
| 86 | _GLOBAL(_save32gpr_24) |
| 87 | stw 24,-32(11) |
| 88 | _GLOBAL(_savegpr_25) |
| 89 | _GLOBAL(_save32gpr_25) |
| 90 | stw 25,-28(11) |
| 91 | _GLOBAL(_savegpr_26) |
| 92 | _GLOBAL(_save32gpr_26) |
| 93 | stw 26,-24(11) |
| 94 | _GLOBAL(_savegpr_27) |
| 95 | _GLOBAL(_save32gpr_27) |
| 96 | stw 27,-20(11) |
| 97 | _GLOBAL(_savegpr_28) |
| 98 | _GLOBAL(_save32gpr_28) |
| 99 | stw 28,-16(11) |
| 100 | _GLOBAL(_savegpr_29) |
| 101 | _GLOBAL(_save32gpr_29) |
| 102 | stw 29,-12(11) |
| 103 | _GLOBAL(_savegpr_30) |
| 104 | _GLOBAL(_save32gpr_30) |
| 105 | stw 30,-8(11) |
| 106 | _GLOBAL(_savegpr_31) |
| 107 | _GLOBAL(_save32gpr_31) |
| 108 | stw 31,-4(11) |
| 109 | blr |
| 110 | |
| 111 | /* Routines for restoring integer registers, called by the compiler. */ |
| 112 | /* Called with r11 pointing to the stack header word of the caller of the */ |
| 113 | /* function, just beyond the end of the integer restore area. */ |
| 114 | |
| 115 | _GLOBAL(_restgpr_14) |
| 116 | _GLOBAL(_rest32gpr_14) |
| 117 | lwz 14,-72(11) /* restore gp registers */ |
| 118 | _GLOBAL(_restgpr_15) |
| 119 | _GLOBAL(_rest32gpr_15) |
| 120 | lwz 15,-68(11) |
| 121 | _GLOBAL(_restgpr_16) |
| 122 | _GLOBAL(_rest32gpr_16) |
| 123 | lwz 16,-64(11) |
| 124 | _GLOBAL(_restgpr_17) |
| 125 | _GLOBAL(_rest32gpr_17) |
| 126 | lwz 17,-60(11) |
| 127 | _GLOBAL(_restgpr_18) |
| 128 | _GLOBAL(_rest32gpr_18) |
| 129 | lwz 18,-56(11) |
| 130 | _GLOBAL(_restgpr_19) |
| 131 | _GLOBAL(_rest32gpr_19) |
| 132 | lwz 19,-52(11) |
| 133 | _GLOBAL(_restgpr_20) |
| 134 | _GLOBAL(_rest32gpr_20) |
| 135 | lwz 20,-48(11) |
| 136 | _GLOBAL(_restgpr_21) |
| 137 | _GLOBAL(_rest32gpr_21) |
| 138 | lwz 21,-44(11) |
| 139 | _GLOBAL(_restgpr_22) |
| 140 | _GLOBAL(_rest32gpr_22) |
| 141 | lwz 22,-40(11) |
| 142 | _GLOBAL(_restgpr_23) |
| 143 | _GLOBAL(_rest32gpr_23) |
| 144 | lwz 23,-36(11) |
| 145 | _GLOBAL(_restgpr_24) |
| 146 | _GLOBAL(_rest32gpr_24) |
| 147 | lwz 24,-32(11) |
| 148 | _GLOBAL(_restgpr_25) |
| 149 | _GLOBAL(_rest32gpr_25) |
| 150 | lwz 25,-28(11) |
| 151 | _GLOBAL(_restgpr_26) |
| 152 | _GLOBAL(_rest32gpr_26) |
| 153 | lwz 26,-24(11) |
| 154 | _GLOBAL(_restgpr_27) |
| 155 | _GLOBAL(_rest32gpr_27) |
| 156 | lwz 27,-20(11) |
| 157 | _GLOBAL(_restgpr_28) |
| 158 | _GLOBAL(_rest32gpr_28) |
| 159 | lwz 28,-16(11) |
| 160 | _GLOBAL(_restgpr_29) |
| 161 | _GLOBAL(_rest32gpr_29) |
| 162 | lwz 29,-12(11) |
| 163 | _GLOBAL(_restgpr_30) |
| 164 | _GLOBAL(_rest32gpr_30) |
| 165 | lwz 30,-8(11) |
| 166 | _GLOBAL(_restgpr_31) |
| 167 | _GLOBAL(_rest32gpr_31) |
| 168 | lwz 31,-4(11) |
| 169 | blr |
| 170 | |
| 171 | /* Routines for restoring integer registers, called by the compiler. */ |
| 172 | /* Called with r11 pointing to the stack header word of the caller of the */ |
| 173 | /* function, just beyond the end of the integer restore area. */ |
| 174 | |
| 175 | _GLOBAL(_restgpr_14_x) |
| 176 | _GLOBAL(_rest32gpr_14_x) |
| 177 | lwz 14,-72(11) /* restore gp registers */ |
| 178 | _GLOBAL(_restgpr_15_x) |
| 179 | _GLOBAL(_rest32gpr_15_x) |
| 180 | lwz 15,-68(11) |
| 181 | _GLOBAL(_restgpr_16_x) |
| 182 | _GLOBAL(_rest32gpr_16_x) |
| 183 | lwz 16,-64(11) |
| 184 | _GLOBAL(_restgpr_17_x) |
| 185 | _GLOBAL(_rest32gpr_17_x) |
| 186 | lwz 17,-60(11) |
| 187 | _GLOBAL(_restgpr_18_x) |
| 188 | _GLOBAL(_rest32gpr_18_x) |
| 189 | lwz 18,-56(11) |
| 190 | _GLOBAL(_restgpr_19_x) |
| 191 | _GLOBAL(_rest32gpr_19_x) |
| 192 | lwz 19,-52(11) |
| 193 | _GLOBAL(_restgpr_20_x) |
| 194 | _GLOBAL(_rest32gpr_20_x) |
| 195 | lwz 20,-48(11) |
| 196 | _GLOBAL(_restgpr_21_x) |
| 197 | _GLOBAL(_rest32gpr_21_x) |
| 198 | lwz 21,-44(11) |
| 199 | _GLOBAL(_restgpr_22_x) |
| 200 | _GLOBAL(_rest32gpr_22_x) |
| 201 | lwz 22,-40(11) |
| 202 | _GLOBAL(_restgpr_23_x) |
| 203 | _GLOBAL(_rest32gpr_23_x) |
| 204 | lwz 23,-36(11) |
| 205 | _GLOBAL(_restgpr_24_x) |
| 206 | _GLOBAL(_rest32gpr_24_x) |
| 207 | lwz 24,-32(11) |
| 208 | _GLOBAL(_restgpr_25_x) |
| 209 | _GLOBAL(_rest32gpr_25_x) |
| 210 | lwz 25,-28(11) |
| 211 | _GLOBAL(_restgpr_26_x) |
| 212 | _GLOBAL(_rest32gpr_26_x) |
| 213 | lwz 26,-24(11) |
| 214 | _GLOBAL(_restgpr_27_x) |
| 215 | _GLOBAL(_rest32gpr_27_x) |
| 216 | lwz 27,-20(11) |
| 217 | _GLOBAL(_restgpr_28_x) |
| 218 | _GLOBAL(_rest32gpr_28_x) |
| 219 | lwz 28,-16(11) |
| 220 | _GLOBAL(_restgpr_29_x) |
| 221 | _GLOBAL(_rest32gpr_29_x) |
| 222 | lwz 29,-12(11) |
| 223 | _GLOBAL(_restgpr_30_x) |
| 224 | _GLOBAL(_rest32gpr_30_x) |
| 225 | lwz 30,-8(11) |
| 226 | _GLOBAL(_restgpr_31_x) |
| 227 | _GLOBAL(_rest32gpr_31_x) |
| 228 | lwz 0,4(11) |
| 229 | lwz 31,-4(11) |
| 230 | mtlr 0 |
| 231 | mr 1,11 |
| 232 | blr |
| 233 | #endif |