treewide: remove redundant IS_ERR() before error code check
[linux/fpc-iii.git] / tools / testing / selftests / x86 / thunks_32.S
bloba71d92da8f46684eefb9ac43550a183ea19460f9
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * thunks_32.S - assembly helpers for mixed-bitness code
4  * Copyright (c) 2015 Denys Vlasenko
5  *
6  * These are little helpers that make it easier to switch bitness on
7  * the fly.
8  */
10         .text
11         .code32
13         .global call64_from_32
14         .type call32_from_64, @function
16         // 4(%esp): function to call
17 call64_from_32:
18         // Fetch function address
19         mov     4(%esp), %eax
21         // Save registers which are callee-clobbered by 64-bit ABI
22         push    %ecx
23         push    %edx
24         push    %esi
25         push    %edi
27         // Switch to long mode
28         jmp     $0x33,$1f
29 1:      .code64
31         // Call the function
32         call    *%rax
34         // Switch to compatibility mode
35         push    $0x23  /* USER32_CS */
36         .code32; push $1f; .code64 /* hack: can't have X86_64_32S relocation in 32-bit ELF */
37         lretq
38 1:      .code32
40         pop     %edi
41         pop     %esi
42         pop     %edx
43         pop     %ecx
45         ret
47 .size call64_from_32, .-call64_from_32