]> git.ipfire.org Git - thirdparty/gcc.git/blobdiff - gcc/config/rs6000/ppc-asm.h
Update copyright years.
[thirdparty/gcc.git] / gcc / config / rs6000 / ppc-asm.h
index 3a6fb2a8bcd4072525275747a373e39a21ab4672..48edc9945d7626170c77b6a4e79675f38fcadf42 100644 (file)
@@ -1,8 +1,31 @@
-/* PowerPC asm definitions for GNU C.  */
+/* PowerPC asm definitions for GNU C.
+
+Copyright (C) 2002-2020 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" */
 
-#if !defined(__WINNT__)
 #define r0     0
 #define sp     1
 #define toc    2
@@ -64,7 +87,7 @@
 #define f16    16
 #define f17    17
 #define f18    18
-#define f19     19
+#define f19    19
 #define f20    20
 #define f21    21
 #define f22    22
 #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    50
+#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   50
+#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
 
 /*
  * the real function with one or two leading periods respectively.
  */
 
-#ifdef _RELOCATABLE
-#define DESC_SECTION ".got2"
-#else
-#define DESC_SECTION ".got1"
-#endif
+#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__)
 
-#if defined(_CALL_AIXDESC)
 #define FUNC_NAME(name) GLUE(.,name)
 #define JUMP_TARGET(name) FUNC_NAME(name)
 #define FUNC_START(name) \
-       .section DESC_SECTION,"aw"; \
+       .section ".opd","aw"; \
 name: \
-       .long GLUE(.,name); \
-       .long _GLOBAL_OFFSET_TABLE_; \
-       .long 0; \
+       .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(__WINNT__)
-#define FUNC_NAME(name) GLUE(..,name)
-#define JUMP_TARGET(name) FUNC_NAME(name)
-#define FUNC_START(name) \
-       .pdata; \
-       .align 2; \
-       .ualong GLUE(..,name),GLUE(name,.e),0,0,GLUE(..,name); \
-       .reldata; \
-name: \
-       .ualong GLUE(..,name),.toc; \
-       .section .text; \
-       .globl name; \
-       .globl GLUE(..,name); \
-GLUE(..,name):
+#elif defined(_CALL_AIXDESC)
 
-#define FUNC_END(name) \
-GLUE(name,.e): ; \
-GLUE(FE_MOT_RESVD..,name):
+#ifdef _RELOCATABLE
+#define DESC_SECTION ".got2"
+#else
+#define DESC_SECTION ".got1"
+#endif
 
-#elif defined(_CALL_NT)
-#define FUNC_NAME(name) GLUE(..,name)
+#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 GLUE(.,name); \
        .long _GLOBAL_OFFSET_TABLE_; \
-       .previous; \
-       .type GLUE(..,name),@function; \
-       .globl name; \
-       .globl GLUE(..,name); \
-GLUE(..,name):
-
-#define FUNC_END(name) \
-GLUE(.L,name): \
-       .size GLUE(..,name),GLUE(.L,name)-GLUE(..,name)
-
-#elif defined (__powerpc64__)
-#define FUNC_NAME(name) GLUE(.,name)
-#define FUNC_START(name) \
-       .section ".opd","aw"; \
-name: \
-       .quad GLUE(.,name); \
-       .quad .TOC.@tocbase; \
-       .quad 0; \
+       .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)
@@ -189,8 +347,35 @@ GLUE(.L,name): \
        .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