/* SPDX-License-Identifier: GPL-2.0 */1#2# arch/i386/setjmp.S3#4# setjmp/longjmp for the i386 architecture5#67#8# The jmp_buf is assumed to contain the following, in order:9# %ebx10# %esp11# %ebp12# %esi13# %edi14# <return address>15#1617.text18.align 419.globl kernel_setjmp20.type kernel_setjmp, @function21kernel_setjmp:22#ifdef _REGPARM23movl %eax,%edx24#else25movl 4(%esp),%edx26#endif27popl %ecx # Return address, and adjust the stack28xorl %eax,%eax # Return value29movl %ebx,(%edx)30movl %esp,4(%edx) # Post-return %esp!31pushl %ecx # Make the call/return stack happy32movl %ebp,8(%edx)33movl %esi,12(%edx)34movl %edi,16(%edx)35movl %ecx,20(%edx) # Return address36RET3738.size kernel_setjmp,.-kernel_setjmp3940.text41.align 442.globl kernel_longjmp43.type kernel_longjmp, @function44kernel_longjmp:45#ifdef _REGPARM46xchgl %eax,%edx47#else48movl 4(%esp),%edx # jmp_ptr address49movl 8(%esp),%eax # Return value50#endif51movl (%edx),%ebx52movl 4(%edx),%esp53movl 8(%edx),%ebp54movl 12(%edx),%esi55movl 16(%edx),%edi56jmp *20(%edx)5758.size kernel_longjmp,.-kernel_longjmp596061