/*
 * Copyright (C) 2018-2022 Intel Corporation.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

.macro retpoline_thunk reg:req

.align 8
.global __x86_indirect_thunk_\reg
__x86_indirect_thunk_\reg:
    call 22f
11:
    pause
    lfence
    jmp 11b
22:
    mov %\reg, (%rsp)
    ret
.endm

.section    .retpoline_thunk, "ax"

    retpoline_thunk rax
    retpoline_thunk rbx
    retpoline_thunk rcx
    retpoline_thunk rdx
    retpoline_thunk rdi
    retpoline_thunk rsi
    retpoline_thunk rbp
    retpoline_thunk r8
    retpoline_thunk r9
    retpoline_thunk r10
    retpoline_thunk r11
    retpoline_thunk r12
    retpoline_thunk r13
    retpoline_thunk r14
    retpoline_thunk r15
