comparison libphobos/libdruntime/config/systemz/get_tls_offset.S @ 152:2b5abeee2509

update gcc11
author anatofuz
date Mon, 25 May 2020 07:50:57 +0900
parents
children
comparison
equal deleted inserted replaced
145:1830386684a0 152:2b5abeee2509
1 /* IBM Z support code for TLS offsets.
2 Copyright (C) 2020 Free Software Foundation, Inc.
3
4 This file is part of GCC.
5
6 GCC is free software; you can redistribute it and/or modify it under
7 the terms of the GNU General Public License as published by the Free
8 Software Foundation; either version 3, or (at your option) any later
9 version.
10
11 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
12 WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 for more details.
15
16 Under Section 7 of GPL version 3, you are granted additional
17 permissions described in the GCC Runtime Library Exception, version
18 3.1, as published by the Free Software Foundation.
19
20 You should have received a copy of the GNU General Public License and
21 a copy of the GCC Runtime Library Exception along with this program;
22 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
23 <http://www.gnu.org/licenses/>. */
24
25 /* __tls_get_offset expects the GOT pointer in %r12 and adds
26 it to its argument in %r2. In order to get the offset of
27 ti, we load it into %r2, subtract the current %r12 from %r2
28 so the addition will result in a nop (%r2 - %r12 + %r12).
29
30 Note: This file is shared between systemz and s390 as the
31 same file is used in multilib case for s390x and s390. */
32
33 #include "../common/threadasm.S"
34
35 .text
36 .globl CSYM(__ibmz_get_tls_offset)
37 .type CSYM(__ibmz_get_tls_offset), @function
38 .align 8
39 CSYM(__ibmz_get_tls_offset):
40 .cfi_startproc
41
42 #ifdef __s390x__
43 .machinemode zarch
44 stmg %r14,%r15,112(%r15)
45 .cfi_offset 14, -48
46 .cfi_offset 15, -40
47 aghi %r15,-160
48 .cfi_def_cfa_offset 320
49 sgr %r2,%r12
50 brasl %r14,__tls_get_offset@PLT
51 lg %r4,272(%r15)
52 lmg %r14,%r15,272(%r15)
53 .cfi_restore 15
54 .cfi_restore 14
55 .cfi_def_cfa_offset 160
56 br %r4
57 #else
58 .machinemode esa
59 stm %r12,%r15,48(%r15)
60 .cfi_offset 12, -48
61 .cfi_offset 13, -44
62 .cfi_offset 14, -40
63 .cfi_offset 15, -36
64 ahi %r15,-96
65 .cfi_def_cfa_offset 192
66 larl %r12,_GLOBAL_OFFSET_TABLE_
67 sr %r2,%r12
68 brasl %r14,__tls_get_offset@PLT
69 l %r4,152(%r15)
70 lm %r12,%r15,144(%r15)
71 .cfi_restore 15
72 .cfi_restore 14
73 .cfi_restore 13
74 .cfi_restore 12
75 .cfi_def_cfa_offset 96
76 br %r4
77 #endif
78 .cfi_endproc
79 .size __ibmz_get_tls_offset, .-__ibmz_get_tls_offset