ppc-asm.h 7.2 KB

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