.text foo: # leaq of OPENSSL_ia32cap_P is supported. leaq OPENSSL_ia32cap_P(%rip), %r11 # As is the equivalent GOTPCREL movq. movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12 # And a non-movq instruction via the GOT. orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12 # ... which targets the default temp register orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax # Test that GOTPCREL accesses get translated. They are handled # differently for local and external symbols. pushq stderr@GOTPCREL(%rip) pushq foo@GOTPCREL(%rip) movq stderr@GOTPCREL(%rip), %r11 movq foo@GOTPCREL(%rip), %r11 vmovq stderr@GOTPCREL(%rip), %xmm0 vmovq foo@GOTPCREL(%rip), %xmm0 cmoveq stderr@GOTPCREL(%rip), %r11 cmoveq foo@GOTPCREL(%rip), %r11 cmovneq stderr@GOTPCREL(%rip), %r11 cmovneq foo@GOTPCREL(%rip), %r11 movsd foo@GOTPCREL(%rip), %xmm0 vmovsd foo@GOTPCREL(%rip), %xmm0 # movsd without arguments should be left as-is. movsd # Synthesized symbols do not use the GOT. movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11 movq foobar_bss_get@GOTPCREL(%rip), %r11 movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11 # Transforming moves run the transform in-place after the load. vpbroadcastq stderr@GOTPCREL(%rip), %xmm0 vpbroadcastq foo@GOTPCREL(%rip), %xmm0 .comm foobar,64,32