• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.text
2BORINGSSL_bcm_text_start:
3	.text
4.Lfoo_local_target:
5foo:
6	# leaq of OPENSSL_ia32cap_P is supported.
7# WAS leaq OPENSSL_ia32cap_P(%rip), %r11
8	leaq	-128(%rsp), %rsp
9	pushfq
10	leaq	OPENSSL_ia32cap_addr_delta(%rip), %r11
11	addq	(%r11), %r11
12	popfq
13	leaq	128(%rsp), %rsp
14
15	# As is the equivalent GOTPCREL movq.
16# WAS movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
17	leaq	-128(%rsp), %rsp
18	pushfq
19	leaq	OPENSSL_ia32cap_addr_delta(%rip), %r12
20	addq	(%r12), %r12
21	popfq
22	leaq	128(%rsp), %rsp
23
24	# Test that GOTPCREL accesses get translated. They are handled
25	# differently for local and external symbols.
26
27# WAS pushq stderr@GOTPCREL(%rip)
28	pushq %rax
29	leaq -128(%rsp), %rsp
30	pushf
31	leaq stderr_GOTPCREL_external(%rip), %rax
32	addq (%rax), %rax
33	movq (%rax), %rax
34	popf
35	leaq	128(%rsp), %rsp
36	xchg %rax, (%rsp)
37# WAS pushq foo@GOTPCREL(%rip)
38	pushq %rax
39	leaq	.Lfoo_local_target(%rip), %rax
40	xchg %rax, (%rsp)
41
42# WAS movq stderr@GOTPCREL(%rip), %r11
43	leaq -128(%rsp), %rsp
44	pushf
45	leaq stderr_GOTPCREL_external(%rip), %r11
46	addq (%r11), %r11
47	movq (%r11), %r11
48	popf
49	leaq	128(%rsp), %rsp
50# WAS movq foo@GOTPCREL(%rip), %r11
51	leaq	.Lfoo_local_target(%rip), %r11
52
53# WAS vmovq stderr@GOTPCREL(%rip), %xmm0
54	leaq -128(%rsp), %rsp
55	pushq %rax
56	pushf
57	leaq stderr_GOTPCREL_external(%rip), %rax
58	addq (%rax), %rax
59	movq (%rax), %rax
60	popf
61	vmovq %rax, %xmm0
62	popq %rax
63	leaq 128(%rsp), %rsp
64# WAS vmovq foo@GOTPCREL(%rip), %xmm0
65	leaq -128(%rsp), %rsp
66	pushq %rax
67	leaq	.Lfoo_local_target(%rip), %rax
68	vmovq %rax, %xmm0
69	popq %rax
70	leaq 128(%rsp), %rsp
71
72# WAS cmoveq stderr@GOTPCREL(%rip), %r11
73	jne 999f
74	leaq -128(%rsp), %rsp
75	pushf
76	leaq stderr_GOTPCREL_external(%rip), %r11
77	addq (%r11), %r11
78	movq (%r11), %r11
79	popf
80	leaq	128(%rsp), %rsp
81999:
82# WAS cmoveq foo@GOTPCREL(%rip), %r11
83	jne 999f
84	leaq	.Lfoo_local_target(%rip), %r11
85999:
86# WAS cmovneq stderr@GOTPCREL(%rip), %r11
87	je 999f
88	leaq -128(%rsp), %rsp
89	pushf
90	leaq stderr_GOTPCREL_external(%rip), %r11
91	addq (%r11), %r11
92	movq (%r11), %r11
93	popf
94	leaq	128(%rsp), %rsp
95999:
96# WAS cmovneq foo@GOTPCREL(%rip), %r11
97	je 999f
98	leaq	.Lfoo_local_target(%rip), %r11
99999:
100
101# WAS movsd foo@GOTPCREL(%rip), %xmm0
102	leaq -128(%rsp), %rsp
103	pushq %rax
104	leaq	.Lfoo_local_target(%rip), %rax
105	movq %rax, %xmm0
106	popq %rax
107	leaq 128(%rsp), %rsp
108# WAS vmovsd foo@GOTPCREL(%rip), %xmm0
109	leaq -128(%rsp), %rsp
110	pushq %rax
111	leaq	.Lfoo_local_target(%rip), %rax
112	vmovq %rax, %xmm0
113	popq %rax
114	leaq 128(%rsp), %rsp
115
116	# movsd without arguments should be left as-is.
117	movsd
118
119	# Synthesized symbols do not use the GOT.
120# WAS movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11
121	leaq	BORINGSSL_bcm_text_start(%rip), %r11
122# WAS movq foobar_bss_get@GOTPCREL(%rip), %r11
123	leaq	foobar_bss_get(%rip), %r11
124# WAS movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11
125	leaq	OPENSSL_ia32cap_get(%rip), %r11
126
127	# Transforming moves run the transform in-place after the load.
128# WAS vpbroadcastq stderr@GOTPCREL(%rip), %xmm0
129	leaq -128(%rsp), %rsp
130	pushq %rax
131	pushf
132	leaq stderr_GOTPCREL_external(%rip), %rax
133	addq (%rax), %rax
134	movq (%rax), %rax
135	popf
136	vmovq %rax, %xmm0
137	popq %rax
138	leaq 128(%rsp), %rsp
139	vpbroadcastq %xmm0, %xmm0
140# WAS vpbroadcastq foo@GOTPCREL(%rip), %xmm0
141	leaq -128(%rsp), %rsp
142	pushq %rax
143	leaq	.Lfoo_local_target(%rip), %rax
144	vmovq %rax, %xmm0
145	popq %rax
146	leaq 128(%rsp), %rsp
147	vpbroadcastq %xmm0, %xmm0
148
149.comm foobar,64,32
150.text
151BORINGSSL_bcm_text_end:
152.type foobar_bss_get, @function
153foobar_bss_get:
154	leaq	foobar(%rip), %rax
155	ret
156.type stderr_GOTPCREL_external, @object
157.size stderr_GOTPCREL_external, 8
158stderr_GOTPCREL_external:
159	.long stderr@GOTPCREL
160	.long 0
161.type OPENSSL_ia32cap_get, @function
162OPENSSL_ia32cap_get:
163	leaq OPENSSL_ia32cap_P(%rip), %rax
164	ret
165.extern OPENSSL_ia32cap_P
166.type OPENSSL_ia32cap_addr_delta, @object
167.size OPENSSL_ia32cap_addr_delta, 8
168OPENSSL_ia32cap_addr_delta:
169.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
170.type BORINGSSL_bcm_text_hash, @object
171.size BORINGSSL_bcm_text_hash, 64
172BORINGSSL_bcm_text_hash:
173.byte 0xae
174.byte 0x2c
175.byte 0xea
176.byte 0x2a
177.byte 0xbd
178.byte 0xa6
179.byte 0xf3
180.byte 0xec
181.byte 0x97
182.byte 0x7f
183.byte 0x9b
184.byte 0xf6
185.byte 0x94
186.byte 0x9a
187.byte 0xfc
188.byte 0x83
189.byte 0x68
190.byte 0x27
191.byte 0xcb
192.byte 0xa0
193.byte 0xa0
194.byte 0x9f
195.byte 0x6b
196.byte 0x6f
197.byte 0xde
198.byte 0x52
199.byte 0xcd
200.byte 0xe2
201.byte 0xcd
202.byte 0xff
203.byte 0x31
204.byte 0x80
205.byte 0xa2
206.byte 0xd4
207.byte 0xc3
208.byte 0x66
209.byte 0xf
210.byte 0xc2
211.byte 0x6a
212.byte 0x7b
213.byte 0xf4
214.byte 0xbe
215.byte 0x39
216.byte 0xa2
217.byte 0xd7
218.byte 0x25
219.byte 0xdb
220.byte 0x21
221.byte 0x98
222.byte 0xe9
223.byte 0xd5
224.byte 0x53
225.byte 0xbf
226.byte 0x5c
227.byte 0x32
228.byte 0x6
229.byte 0x83
230.byte 0x34
231.byte 0xc
232.byte 0x65
233.byte 0x89
234.byte 0x52
235.byte 0xbd
236.byte 0x1f
237