1 1.1 mrg /* PowerPC asm definitions for GNU C. 2 1.1 mrg 3 1.14 mrg Copyright (C) 2002-2022 Free Software Foundation, Inc. 4 1.1 mrg 5 1.1 mrg This file is part of GCC. 6 1.1 mrg 7 1.1 mrg GCC is free software; you can redistribute it and/or modify it under 8 1.1 mrg the terms of the GNU General Public License as published by the Free 9 1.1 mrg Software Foundation; either version 3, or (at your option) any later 10 1.1 mrg version. 11 1.1 mrg 12 1.1 mrg GCC is distributed in the hope that it will be useful, but WITHOUT ANY 13 1.1 mrg WARRANTY; without even the implied warranty of MERCHANTABILITY or 14 1.1 mrg FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 15 1.1 mrg for more details. 16 1.1 mrg 17 1.1 mrg Under Section 7 of GPL version 3, you are granted additional 18 1.1 mrg permissions described in the GCC Runtime Library Exception, version 19 1.1 mrg 3.1, as published by the Free Software Foundation. 20 1.1 mrg 21 1.1 mrg You should have received a copy of the GNU General Public License and 22 1.1 mrg a copy of the GCC Runtime Library Exception along with this program; 23 1.1 mrg see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 1.1 mrg <http://www.gnu.org/licenses/>. */ 25 1.1 mrg 26 1.1 mrg /* Under winnt, 1) gas supports the following as names and 2) in particular 27 1.1 mrg defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */ 28 1.1 mrg 29 1.1 mrg #define r0 0 30 1.1 mrg #define sp 1 31 1.1 mrg #define toc 2 32 1.1 mrg #define r3 3 33 1.1 mrg #define r4 4 34 1.1 mrg #define r5 5 35 1.1 mrg #define r6 6 36 1.1 mrg #define r7 7 37 1.1 mrg #define r8 8 38 1.1 mrg #define r9 9 39 1.1 mrg #define r10 10 40 1.1 mrg #define r11 11 41 1.1 mrg #define r12 12 42 1.1 mrg #define r13 13 43 1.1 mrg #define r14 14 44 1.1 mrg #define r15 15 45 1.1 mrg #define r16 16 46 1.1 mrg #define r17 17 47 1.1 mrg #define r18 18 48 1.1 mrg #define r19 19 49 1.1 mrg #define r20 20 50 1.1 mrg #define r21 21 51 1.1 mrg #define r22 22 52 1.1 mrg #define r23 23 53 1.1 mrg #define r24 24 54 1.1 mrg #define r25 25 55 1.1 mrg #define r26 26 56 1.1 mrg #define r27 27 57 1.1 mrg #define r28 28 58 1.1 mrg #define r29 29 59 1.1 mrg #define r30 30 60 1.1 mrg #define r31 31 61 1.1 mrg 62 1.1 mrg #define cr0 0 63 1.1 mrg #define cr1 1 64 1.1 mrg #define cr2 2 65 1.1 mrg #define cr3 3 66 1.1 mrg #define cr4 4 67 1.1 mrg #define cr5 5 68 1.1 mrg #define cr6 6 69 1.1 mrg #define cr7 7 70 1.1 mrg 71 1.1 mrg #define f0 0 72 1.1 mrg #define f1 1 73 1.1 mrg #define f2 2 74 1.1 mrg #define f3 3 75 1.1 mrg #define f4 4 76 1.1 mrg #define f5 5 77 1.1 mrg #define f6 6 78 1.1 mrg #define f7 7 79 1.1 mrg #define f8 8 80 1.1 mrg #define f9 9 81 1.1 mrg #define f10 10 82 1.1 mrg #define f11 11 83 1.1 mrg #define f12 12 84 1.1 mrg #define f13 13 85 1.1 mrg #define f14 14 86 1.1 mrg #define f15 15 87 1.1 mrg #define f16 16 88 1.1 mrg #define f17 17 89 1.1 mrg #define f18 18 90 1.1 mrg #define f19 19 91 1.1 mrg #define f20 20 92 1.1 mrg #define f21 21 93 1.1 mrg #define f22 22 94 1.1 mrg #define f23 23 95 1.1 mrg #define f24 24 96 1.1 mrg #define f25 25 97 1.1 mrg #define f26 26 98 1.1 mrg #define f27 27 99 1.1 mrg #define f28 28 100 1.1 mrg #define f29 29 101 1.1 mrg #define f30 30 102 1.1 mrg #define f31 31 103 1.1 mrg 104 1.1 mrg #ifdef __VSX__ 105 1.1 mrg #define f32 32 106 1.1 mrg #define f33 33 107 1.1 mrg #define f34 34 108 1.1 mrg #define f35 35 109 1.1 mrg #define f36 36 110 1.1 mrg #define f37 37 111 1.1 mrg #define f38 38 112 1.1 mrg #define f39 39 113 1.1 mrg #define f40 40 114 1.1 mrg #define f41 41 115 1.1 mrg #define f42 42 116 1.1 mrg #define f43 43 117 1.1 mrg #define f44 44 118 1.1 mrg #define f45 45 119 1.1 mrg #define f46 46 120 1.1 mrg #define f47 47 121 1.1 mrg #define f48 48 122 1.1 mrg #define f49 49 123 1.8 mrg #define f50 50 124 1.1 mrg #define f51 51 125 1.1 mrg #define f52 52 126 1.1 mrg #define f53 53 127 1.1 mrg #define f54 54 128 1.1 mrg #define f55 55 129 1.1 mrg #define f56 56 130 1.1 mrg #define f57 57 131 1.1 mrg #define f58 58 132 1.1 mrg #define f59 59 133 1.1 mrg #define f60 60 134 1.1 mrg #define f61 61 135 1.1 mrg #define f62 62 136 1.1 mrg #define f63 63 137 1.1 mrg #endif 138 1.1 mrg 139 1.1 mrg #ifdef __ALTIVEC__ 140 1.1 mrg #define v0 0 141 1.1 mrg #define v1 1 142 1.1 mrg #define v2 2 143 1.1 mrg #define v3 3 144 1.1 mrg #define v4 4 145 1.1 mrg #define v5 5 146 1.1 mrg #define v6 6 147 1.1 mrg #define v7 7 148 1.1 mrg #define v8 8 149 1.1 mrg #define v9 9 150 1.1 mrg #define v10 10 151 1.1 mrg #define v11 11 152 1.1 mrg #define v12 12 153 1.1 mrg #define v13 13 154 1.1 mrg #define v14 14 155 1.1 mrg #define v15 15 156 1.1 mrg #define v16 16 157 1.1 mrg #define v17 17 158 1.1 mrg #define v18 18 159 1.1 mrg #define v19 19 160 1.1 mrg #define v20 20 161 1.1 mrg #define v21 21 162 1.1 mrg #define v22 22 163 1.1 mrg #define v23 23 164 1.1 mrg #define v24 24 165 1.1 mrg #define v25 25 166 1.1 mrg #define v26 26 167 1.1 mrg #define v27 27 168 1.1 mrg #define v28 28 169 1.1 mrg #define v29 29 170 1.1 mrg #define v30 30 171 1.1 mrg #define v31 31 172 1.1 mrg #endif 173 1.1 mrg 174 1.1 mrg #ifdef __VSX__ 175 1.1 mrg #define vs0 0 176 1.1 mrg #define vs1 1 177 1.1 mrg #define vs2 2 178 1.1 mrg #define vs3 3 179 1.1 mrg #define vs4 4 180 1.1 mrg #define vs5 5 181 1.1 mrg #define vs6 6 182 1.1 mrg #define vs7 7 183 1.1 mrg #define vs8 8 184 1.1 mrg #define vs9 9 185 1.1 mrg #define vs10 10 186 1.1 mrg #define vs11 11 187 1.1 mrg #define vs12 12 188 1.1 mrg #define vs13 13 189 1.1 mrg #define vs14 14 190 1.1 mrg #define vs15 15 191 1.1 mrg #define vs16 16 192 1.1 mrg #define vs17 17 193 1.1 mrg #define vs18 18 194 1.1 mrg #define vs19 19 195 1.1 mrg #define vs20 20 196 1.1 mrg #define vs21 21 197 1.1 mrg #define vs22 22 198 1.1 mrg #define vs23 23 199 1.1 mrg #define vs24 24 200 1.1 mrg #define vs25 25 201 1.1 mrg #define vs26 26 202 1.1 mrg #define vs27 27 203 1.1 mrg #define vs28 28 204 1.1 mrg #define vs29 29 205 1.1 mrg #define vs30 30 206 1.1 mrg #define vs31 31 207 1.1 mrg #define vs32 32 208 1.1 mrg #define vs33 33 209 1.1 mrg #define vs34 34 210 1.1 mrg #define vs35 35 211 1.1 mrg #define vs36 36 212 1.1 mrg #define vs37 37 213 1.1 mrg #define vs38 38 214 1.1 mrg #define vs39 39 215 1.1 mrg #define vs40 40 216 1.1 mrg #define vs41 41 217 1.1 mrg #define vs42 42 218 1.1 mrg #define vs43 43 219 1.1 mrg #define vs44 44 220 1.1 mrg #define vs45 45 221 1.1 mrg #define vs46 46 222 1.1 mrg #define vs47 47 223 1.1 mrg #define vs48 48 224 1.1 mrg #define vs49 49 225 1.8 mrg #define vs50 50 226 1.1 mrg #define vs51 51 227 1.1 mrg #define vs52 52 228 1.1 mrg #define vs53 53 229 1.1 mrg #define vs54 54 230 1.1 mrg #define vs55 55 231 1.1 mrg #define vs56 56 232 1.1 mrg #define vs57 57 233 1.1 mrg #define vs58 58 234 1.1 mrg #define vs59 59 235 1.1 mrg #define vs60 60 236 1.1 mrg #define vs61 61 237 1.1 mrg #define vs62 62 238 1.1 mrg #define vs63 63 239 1.1 mrg #endif 240 1.1 mrg 241 1.1 mrg /* 242 1.1 mrg * Macros to glue together two tokens. 243 1.1 mrg */ 244 1.1 mrg 245 1.1 mrg #ifdef __STDC__ 246 1.1 mrg #define XGLUE(a,b) a##b 247 1.1 mrg #else 248 1.1 mrg #define XGLUE(a,b) a/**/b 249 1.1 mrg #endif 250 1.1 mrg 251 1.1 mrg #define GLUE(a,b) XGLUE(a,b) 252 1.1 mrg 253 1.1 mrg /* 254 1.1 mrg * Macros to begin and end a function written in assembler. If -mcall-aixdesc 255 1.1 mrg * or -mcall-nt, create a function descriptor with the given name, and create 256 1.1 mrg * the real function with one or two leading periods respectively. 257 1.1 mrg */ 258 1.1 mrg 259 1.3 mrg #if defined(__powerpc64__) && _CALL_ELF == 2 260 1.3 mrg 261 1.3 mrg /* Defining "toc" above breaks @toc in assembler code. */ 262 1.3 mrg #undef toc 263 1.3 mrg 264 1.3 mrg #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) 265 1.13 mrg #ifdef __PCREL__ 266 1.13 mrg #define JUMP_TARGET(name) GLUE(FUNC_NAME(name),@notoc) 267 1.13 mrg #define FUNC_START(name) \ 268 1.13 mrg .type FUNC_NAME(name),@function; \ 269 1.13 mrg .globl FUNC_NAME(name); \ 270 1.13 mrg FUNC_NAME(name): \ 271 1.13 mrg .localentry FUNC_NAME(name),1 272 1.13 mrg #else 273 1.3 mrg #define JUMP_TARGET(name) FUNC_NAME(name) 274 1.3 mrg #define FUNC_START(name) \ 275 1.3 mrg .type FUNC_NAME(name),@function; \ 276 1.3 mrg .globl FUNC_NAME(name); \ 277 1.3 mrg FUNC_NAME(name): \ 278 1.3 mrg 0: addis 2,12,(.TOC.-0b)@ha; \ 279 1.3 mrg addi 2,2,(.TOC.-0b)@l; \ 280 1.3 mrg .localentry FUNC_NAME(name),.-FUNC_NAME(name) 281 1.13 mrg #endif /* !__PCREL__ */ 282 1.3 mrg 283 1.3 mrg #define HIDDEN_FUNC(name) \ 284 1.3 mrg FUNC_START(name) \ 285 1.3 mrg .hidden FUNC_NAME(name); 286 1.3 mrg 287 1.3 mrg #define FUNC_END(name) \ 288 1.3 mrg .size FUNC_NAME(name),.-FUNC_NAME(name) 289 1.3 mrg 290 1.3 mrg #elif defined (__powerpc64__) 291 1.3 mrg 292 1.1 mrg #define FUNC_NAME(name) GLUE(.,name) 293 1.1 mrg #define JUMP_TARGET(name) FUNC_NAME(name) 294 1.1 mrg #define FUNC_START(name) \ 295 1.1 mrg .section ".opd","aw"; \ 296 1.1 mrg name: \ 297 1.1 mrg .quad GLUE(.,name); \ 298 1.1 mrg .quad .TOC.@tocbase; \ 299 1.1 mrg .quad 0; \ 300 1.1 mrg .previous; \ 301 1.1 mrg .type GLUE(.,name),@function; \ 302 1.1 mrg .globl name; \ 303 1.1 mrg .globl GLUE(.,name); \ 304 1.1 mrg GLUE(.,name): 305 1.1 mrg 306 1.1 mrg #define HIDDEN_FUNC(name) \ 307 1.1 mrg FUNC_START(name) \ 308 1.1 mrg .hidden name; \ 309 1.1 mrg .hidden GLUE(.,name); 310 1.1 mrg 311 1.1 mrg #define FUNC_END(name) \ 312 1.1 mrg GLUE(.L,name): \ 313 1.1 mrg .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) 314 1.1 mrg 315 1.1 mrg #elif defined(_CALL_AIXDESC) 316 1.1 mrg 317 1.1 mrg #ifdef _RELOCATABLE 318 1.1 mrg #define DESC_SECTION ".got2" 319 1.1 mrg #else 320 1.1 mrg #define DESC_SECTION ".got1" 321 1.1 mrg #endif 322 1.1 mrg 323 1.1 mrg #define FUNC_NAME(name) GLUE(.,name) 324 1.1 mrg #define JUMP_TARGET(name) FUNC_NAME(name) 325 1.1 mrg #define FUNC_START(name) \ 326 1.1 mrg .section DESC_SECTION,"aw"; \ 327 1.1 mrg name: \ 328 1.1 mrg .long GLUE(.,name); \ 329 1.1 mrg .long _GLOBAL_OFFSET_TABLE_; \ 330 1.1 mrg .long 0; \ 331 1.1 mrg .previous; \ 332 1.1 mrg .type GLUE(.,name),@function; \ 333 1.1 mrg .globl name; \ 334 1.1 mrg .globl GLUE(.,name); \ 335 1.1 mrg GLUE(.,name): 336 1.1 mrg 337 1.1 mrg #define HIDDEN_FUNC(name) \ 338 1.1 mrg FUNC_START(name) \ 339 1.1 mrg .hidden name; \ 340 1.1 mrg .hidden GLUE(.,name); 341 1.1 mrg 342 1.1 mrg #define FUNC_END(name) \ 343 1.1 mrg GLUE(.L,name): \ 344 1.1 mrg .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name) 345 1.1 mrg 346 1.1 mrg #else 347 1.1 mrg 348 1.1 mrg #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name) 349 1.1 mrg #if defined __PIC__ || defined __pic__ 350 1.1 mrg #define JUMP_TARGET(name) FUNC_NAME(name@plt) 351 1.1 mrg #else 352 1.1 mrg #define JUMP_TARGET(name) FUNC_NAME(name) 353 1.1 mrg #endif 354 1.1 mrg #define FUNC_START(name) \ 355 1.1 mrg .type FUNC_NAME(name),@function; \ 356 1.1 mrg .globl FUNC_NAME(name); \ 357 1.1 mrg FUNC_NAME(name): 358 1.1 mrg 359 1.1 mrg #define HIDDEN_FUNC(name) \ 360 1.1 mrg FUNC_START(name) \ 361 1.1 mrg .hidden FUNC_NAME(name); 362 1.1 mrg 363 1.1 mrg #define FUNC_END(name) \ 364 1.1 mrg GLUE(.L,name): \ 365 1.1 mrg .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name) 366 1.1 mrg #endif 367 1.1 mrg 368 1.1 mrg #ifdef IN_GCC 369 1.1 mrg /* For HAVE_GAS_CFI_DIRECTIVE. */ 370 1.1 mrg #include "auto-host.h" 371 1.1 mrg 372 1.1 mrg #ifdef HAVE_GAS_CFI_DIRECTIVE 373 1.1 mrg # define CFI_STARTPROC .cfi_startproc 374 1.1 mrg # define CFI_ENDPROC .cfi_endproc 375 1.1 mrg # define CFI_OFFSET(reg, off) .cfi_offset reg, off 376 1.1 mrg # define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg 377 1.1 mrg # define CFI_RESTORE(reg) .cfi_restore reg 378 1.1 mrg #else 379 1.1 mrg # define CFI_STARTPROC 380 1.1 mrg # define CFI_ENDPROC 381 1.1 mrg # define CFI_OFFSET(reg, off) 382 1.1 mrg # define CFI_DEF_CFA_REGISTER(reg) 383 1.1 mrg # define CFI_RESTORE(reg) 384 1.1 mrg #endif 385 1.1 mrg #endif 386 1.1 mrg 387 1.14 mrg #if defined __linux__ && !defined __powerpc64__ 388 1.1 mrg .section .note.GNU-stack 389 1.1 mrg .previous 390 1.1 mrg #endif 391