1 .text 2foo: 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