Home | History | Annotate | Line # | Download | only in rs6000
ppc-asm.h revision 1.14
      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