Home | History | Annotate | Download | only in x86_64-GOTRewrite
      1 	.text
      2 foo:
      3 	# leaq of OPENSSL_ia32cap_P is supported.
      4 	leaq OPENSSL_ia32cap_P(%rip), %r11
      5 
      6 	# As is the equivalent GOTPCREL movq.
      7 	movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
      8 
      9 	# And a non-movq instruction via the GOT.
     10 	orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
     11 
     12 	# ... which targets the default temp register
     13 	orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax
     14 
     15 	# Test that GOTPCREL accesses get translated. They are handled
     16 	# differently for local and external symbols.
     17 
     18 	pushq stderr@GOTPCREL(%rip)
     19 	pushq foo@GOTPCREL(%rip)
     20 
     21 	movq stderr@GOTPCREL(%rip), %r11
     22 	movq foo@GOTPCREL(%rip), %r11
     23 
     24 	vmovq stderr@GOTPCREL(%rip), %xmm0
     25 	vmovq foo@GOTPCREL(%rip), %xmm0
     26 
     27 	cmoveq stderr@GOTPCREL(%rip), %r11
     28 	cmoveq foo@GOTPCREL(%rip), %r11
     29 	cmovneq stderr@GOTPCREL(%rip), %r11
     30 	cmovneq foo@GOTPCREL(%rip), %r11
     31 
     32 	movsd foo@GOTPCREL(%rip), %xmm0
     33 	vmovsd foo@GOTPCREL(%rip), %xmm0
     34 
     35 	# movsd without arguments should be left as-is.
     36 	movsd
     37 
     38 	# Synthesized symbols do not use the GOT.
     39 	movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11
     40 	movq foobar_bss_get@GOTPCREL(%rip), %r11
     41 	movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11
     42 
     43 	# Transforming moves run the transform in-place after the load.
     44 	vpbroadcastq stderr@GOTPCREL(%rip), %xmm0
     45 	vpbroadcastq foo@GOTPCREL(%rip), %xmm0
     46 
     47 .comm foobar,64,32
     48