1d89ec533Spatrick//===-- orc_rt_macho_tlv.x86-64.s -------------------------------*- ASM -*-===// 2d89ec533Spatrick// 3d89ec533Spatrick// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4d89ec533Spatrick// See https://llvm.org/LICENSE.txt for license information. 5d89ec533Spatrick// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6d89ec533Spatrick// 7d89ec533Spatrick//===----------------------------------------------------------------------===// 8d89ec533Spatrick// 9d89ec533Spatrick// This file is a part of the ORC runtime support library. 10d89ec533Spatrick// 11d89ec533Spatrick//===----------------------------------------------------------------------===// 12d89ec533Spatrick 13*810390e3Srobert// The content of this file is x86_64-only 14*810390e3Srobert#if defined(__x86_64__) 15*810390e3Srobert 16d89ec533Spatrick#define REGISTER_SAVE_SPACE_SIZE 512 17d89ec533Spatrick 18d89ec533Spatrick .text 19d89ec533Spatrick 20d89ec533Spatrick // returns address of TLV in %rax, all other registers preserved 21d89ec533Spatrick .globl ___orc_rt_macho_tlv_get_addr 22d89ec533Spatrick___orc_rt_macho_tlv_get_addr: 23d89ec533Spatrick pushq %rbp 24d89ec533Spatrick movq %rsp, %rbp 25d89ec533Spatrick subq $REGISTER_SAVE_SPACE_SIZE, %rsp 26d89ec533Spatrick movq %rbx, -8(%rbp) 27d89ec533Spatrick movq %rcx, -16(%rbp) 28d89ec533Spatrick movq %rdx, -24(%rbp) 29d89ec533Spatrick movq %rsi, -32(%rbp) 30d89ec533Spatrick movq %rdi, -40(%rbp) 31d89ec533Spatrick movq %r8, -48(%rbp) 32d89ec533Spatrick movq %r9, -56(%rbp) 33d89ec533Spatrick movq %r10, -64(%rbp) 34d89ec533Spatrick movq %r11, -72(%rbp) 35d89ec533Spatrick movq %r12, -80(%rbp) 36d89ec533Spatrick movq %r13, -88(%rbp) 37d89ec533Spatrick movq %r14, -96(%rbp) 38d89ec533Spatrick movq %r15, -104(%rbp) 39d89ec533Spatrick movdqa %xmm0, -128(%rbp) 40d89ec533Spatrick movdqa %xmm1, -144(%rbp) 41d89ec533Spatrick movdqa %xmm2, -160(%rbp) 42d89ec533Spatrick movdqa %xmm3, -176(%rbp) 43d89ec533Spatrick movdqa %xmm4, -192(%rbp) 44d89ec533Spatrick movdqa %xmm5, -208(%rbp) 45d89ec533Spatrick movdqa %xmm6, -224(%rbp) 46d89ec533Spatrick movdqa %xmm7, -240(%rbp) 47d89ec533Spatrick call ___orc_rt_macho_tlv_get_addr_impl 48d89ec533Spatrick movq -8(%rbp), %rbx 49d89ec533Spatrick movq -16(%rbp), %rcx 50d89ec533Spatrick movq -24(%rbp), %rdx 51d89ec533Spatrick movq -32(%rbp), %rsi 52d89ec533Spatrick movq -40(%rbp), %rdi 53d89ec533Spatrick movq -48(%rbp), %r8 54d89ec533Spatrick movq -56(%rbp), %r9 55d89ec533Spatrick movq -64(%rbp), %r10 56d89ec533Spatrick movq -72(%rbp), %r11 57d89ec533Spatrick movq -80(%rbp), %r12 58d89ec533Spatrick movq -88(%rbp), %r13 59d89ec533Spatrick movq -96(%rbp), %r14 60d89ec533Spatrick movq -104(%rbp), %r15 61d89ec533Spatrick movdqa -128(%rbp), %xmm0 62d89ec533Spatrick movdqa -144(%rbp), %xmm1 63d89ec533Spatrick movdqa -160(%rbp), %xmm2 64d89ec533Spatrick movdqa -176(%rbp), %xmm3 65d89ec533Spatrick movdqa -192(%rbp), %xmm4 66d89ec533Spatrick movdqa -208(%rbp), %xmm5 67d89ec533Spatrick movdqa -224(%rbp), %xmm6 68d89ec533Spatrick movdqa -240(%rbp), %xmm7 69d89ec533Spatrick addq $REGISTER_SAVE_SPACE_SIZE, %rsp 70d89ec533Spatrick popq %rbp 71d89ec533Spatrick ret 72*810390e3Srobert 73*810390e3Srobert#endif // defined(__x86_64__) 74