123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382 |
- /* PowerPC asm definitions for GNU C.
- Copyright (C) 2002-2015 Free Software Foundation, Inc.
- This file is part of GCC.
- GCC is free software; you can redistribute it and/or modify it under
- the terms of the GNU General Public License as published by the Free
- Software Foundation; either version 3, or (at your option) any later
- version.
- GCC is distributed in the hope that it will be useful, but WITHOUT ANY
- WARRANTY; without even the implied warranty of MERCHANTABILITY or
- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- for more details.
- Under Section 7 of GPL version 3, you are granted additional
- permissions described in the GCC Runtime Library Exception, version
- 3.1, as published by the Free Software Foundation.
- You should have received a copy of the GNU General Public License and
- a copy of the GCC Runtime Library Exception along with this program;
- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
- <http://www.gnu.org/licenses/>. */
- /* Under winnt, 1) gas supports the following as names and 2) in particular
- defining "toc" breaks the FUNC_START macro as ".toc" becomes ".2" */
- #define r0 0
- #define sp 1
- #define toc 2
- #define r3 3
- #define r4 4
- #define r5 5
- #define r6 6
- #define r7 7
- #define r8 8
- #define r9 9
- #define r10 10
- #define r11 11
- #define r12 12
- #define r13 13
- #define r14 14
- #define r15 15
- #define r16 16
- #define r17 17
- #define r18 18
- #define r19 19
- #define r20 20
- #define r21 21
- #define r22 22
- #define r23 23
- #define r24 24
- #define r25 25
- #define r26 26
- #define r27 27
- #define r28 28
- #define r29 29
- #define r30 30
- #define r31 31
- #define cr0 0
- #define cr1 1
- #define cr2 2
- #define cr3 3
- #define cr4 4
- #define cr5 5
- #define cr6 6
- #define cr7 7
- #define f0 0
- #define f1 1
- #define f2 2
- #define f3 3
- #define f4 4
- #define f5 5
- #define f6 6
- #define f7 7
- #define f8 8
- #define f9 9
- #define f10 10
- #define f11 11
- #define f12 12
- #define f13 13
- #define f14 14
- #define f15 15
- #define f16 16
- #define f17 17
- #define f18 18
- #define f19 19
- #define f20 20
- #define f21 21
- #define f22 22
- #define f23 23
- #define f24 24
- #define f25 25
- #define f26 26
- #define f27 27
- #define f28 28
- #define f29 29
- #define f30 30
- #define f31 31
- #ifdef __VSX__
- #define f32 32
- #define f33 33
- #define f34 34
- #define f35 35
- #define f36 36
- #define f37 37
- #define f38 38
- #define f39 39
- #define f40 40
- #define f41 41
- #define f42 42
- #define f43 43
- #define f44 44
- #define f45 45
- #define f46 46
- #define f47 47
- #define f48 48
- #define f49 49
- #define f50 30
- #define f51 51
- #define f52 52
- #define f53 53
- #define f54 54
- #define f55 55
- #define f56 56
- #define f57 57
- #define f58 58
- #define f59 59
- #define f60 60
- #define f61 61
- #define f62 62
- #define f63 63
- #endif
- #ifdef __ALTIVEC__
- #define v0 0
- #define v1 1
- #define v2 2
- #define v3 3
- #define v4 4
- #define v5 5
- #define v6 6
- #define v7 7
- #define v8 8
- #define v9 9
- #define v10 10
- #define v11 11
- #define v12 12
- #define v13 13
- #define v14 14
- #define v15 15
- #define v16 16
- #define v17 17
- #define v18 18
- #define v19 19
- #define v20 20
- #define v21 21
- #define v22 22
- #define v23 23
- #define v24 24
- #define v25 25
- #define v26 26
- #define v27 27
- #define v28 28
- #define v29 29
- #define v30 30
- #define v31 31
- #endif
- #ifdef __VSX__
- #define vs0 0
- #define vs1 1
- #define vs2 2
- #define vs3 3
- #define vs4 4
- #define vs5 5
- #define vs6 6
- #define vs7 7
- #define vs8 8
- #define vs9 9
- #define vs10 10
- #define vs11 11
- #define vs12 12
- #define vs13 13
- #define vs14 14
- #define vs15 15
- #define vs16 16
- #define vs17 17
- #define vs18 18
- #define vs19 19
- #define vs20 20
- #define vs21 21
- #define vs22 22
- #define vs23 23
- #define vs24 24
- #define vs25 25
- #define vs26 26
- #define vs27 27
- #define vs28 28
- #define vs29 29
- #define vs30 30
- #define vs31 31
- #define vs32 32
- #define vs33 33
- #define vs34 34
- #define vs35 35
- #define vs36 36
- #define vs37 37
- #define vs38 38
- #define vs39 39
- #define vs40 40
- #define vs41 41
- #define vs42 42
- #define vs43 43
- #define vs44 44
- #define vs45 45
- #define vs46 46
- #define vs47 47
- #define vs48 48
- #define vs49 49
- #define vs50 30
- #define vs51 51
- #define vs52 52
- #define vs53 53
- #define vs54 54
- #define vs55 55
- #define vs56 56
- #define vs57 57
- #define vs58 58
- #define vs59 59
- #define vs60 60
- #define vs61 61
- #define vs62 62
- #define vs63 63
- #endif
- /*
- * Macros to glue together two tokens.
- */
- #ifdef __STDC__
- #define XGLUE(a,b) a##b
- #else
- #define XGLUE(a,b) a/**/b
- #endif
- #define GLUE(a,b) XGLUE(a,b)
- /*
- * Macros to begin and end a function written in assembler. If -mcall-aixdesc
- * or -mcall-nt, create a function descriptor with the given name, and create
- * the real function with one or two leading periods respectively.
- */
- #if defined(__powerpc64__) && _CALL_ELF == 2
- /* Defining "toc" above breaks @toc in assembler code. */
- #undef toc
- #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
- #define JUMP_TARGET(name) FUNC_NAME(name)
- #define FUNC_START(name) \
- .type FUNC_NAME(name),@function; \
- .globl FUNC_NAME(name); \
- FUNC_NAME(name): \
- 0: addis 2,12,(.TOC.-0b)@ha; \
- addi 2,2,(.TOC.-0b)@l; \
- .localentry FUNC_NAME(name),.-FUNC_NAME(name)
- #define HIDDEN_FUNC(name) \
- FUNC_START(name) \
- .hidden FUNC_NAME(name);
- #define FUNC_END(name) \
- .size FUNC_NAME(name),.-FUNC_NAME(name)
- #elif defined (__powerpc64__)
- #define FUNC_NAME(name) GLUE(.,name)
- #define JUMP_TARGET(name) FUNC_NAME(name)
- #define FUNC_START(name) \
- .section ".opd","aw"; \
- name: \
- .quad GLUE(.,name); \
- .quad .TOC.@tocbase; \
- .quad 0; \
- .previous; \
- .type GLUE(.,name),@function; \
- .globl name; \
- .globl GLUE(.,name); \
- GLUE(.,name):
- #define HIDDEN_FUNC(name) \
- FUNC_START(name) \
- .hidden name; \
- .hidden GLUE(.,name);
- #define FUNC_END(name) \
- GLUE(.L,name): \
- .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
- #elif defined(_CALL_AIXDESC)
- #ifdef _RELOCATABLE
- #define DESC_SECTION ".got2"
- #else
- #define DESC_SECTION ".got1"
- #endif
- #define FUNC_NAME(name) GLUE(.,name)
- #define JUMP_TARGET(name) FUNC_NAME(name)
- #define FUNC_START(name) \
- .section DESC_SECTION,"aw"; \
- name: \
- .long GLUE(.,name); \
- .long _GLOBAL_OFFSET_TABLE_; \
- .long 0; \
- .previous; \
- .type GLUE(.,name),@function; \
- .globl name; \
- .globl GLUE(.,name); \
- GLUE(.,name):
- #define HIDDEN_FUNC(name) \
- FUNC_START(name) \
- .hidden name; \
- .hidden GLUE(.,name);
- #define FUNC_END(name) \
- GLUE(.L,name): \
- .size GLUE(.,name),GLUE(.L,name)-GLUE(.,name)
- #else
- #define FUNC_NAME(name) GLUE(__USER_LABEL_PREFIX__,name)
- #if defined __PIC__ || defined __pic__
- #define JUMP_TARGET(name) FUNC_NAME(name@plt)
- #else
- #define JUMP_TARGET(name) FUNC_NAME(name)
- #endif
- #define FUNC_START(name) \
- .type FUNC_NAME(name),@function; \
- .globl FUNC_NAME(name); \
- FUNC_NAME(name):
- #define HIDDEN_FUNC(name) \
- FUNC_START(name) \
- .hidden FUNC_NAME(name);
- #define FUNC_END(name) \
- GLUE(.L,name): \
- .size FUNC_NAME(name),GLUE(.L,name)-FUNC_NAME(name)
- #endif
- #ifdef IN_GCC
- /* For HAVE_GAS_CFI_DIRECTIVE. */
- #include "auto-host.h"
- #ifdef HAVE_GAS_CFI_DIRECTIVE
- # define CFI_STARTPROC .cfi_startproc
- # define CFI_ENDPROC .cfi_endproc
- # define CFI_OFFSET(reg, off) .cfi_offset reg, off
- # define CFI_DEF_CFA_REGISTER(reg) .cfi_def_cfa_register reg
- # define CFI_RESTORE(reg) .cfi_restore reg
- #else
- # define CFI_STARTPROC
- # define CFI_ENDPROC
- # define CFI_OFFSET(reg, off)
- # define CFI_DEF_CFA_REGISTER(reg)
- # define CFI_RESTORE(reg)
- #endif
- #endif
- #if defined __linux__ && !defined __powerpc64__
- .section .note.GNU-stack
- .previous
- #endif
|