Overview
| Comment: | apple-call-x86_64.S: Add support for stret and jmp
Jumping is useful in case of forwarding, so that the return value does |
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive |
| Timelines: | family | ancestors | descendants | both | trunk |
| Files: | files | file ages | folders |
| SHA3-256: |
d6e5e6beb3dc94a2d1f6691b416e9971 |
| User & Date: | js on 2017-09-14 21:51:51 |
| Other Links: | manifest | tags |
Context
|
2017-09-15
| ||
| 00:03 | invoke-x86_64.m: Add support for __int128 (check-in: 1b96a21136 user: js tags: trunk) | |
|
2017-09-14
| ||
| 21:51 | apple-call-x86_64.S: Add support for stret and jmp (check-in: d6e5e6beb3 user: js tags: trunk) | |
|
2017-09-12
| ||
| 23:49 | invoke-x86_64.m: Minor refactor (check-in: 8417c40405 user: js tags: trunk) | |
Changes
Modified src/invocation/apple-call-x86_64.S from [4e9c1edaaf] to [387ccf9ff7].
| ︙ | ︙ | |||
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | movq 40(%rdi), %r9 movq 32(%rdi), %r8 movq 24(%rdi), %rcx movq 16(%rdi), %rdx movq 8(%rdi), %rsi movq 0(%rdi), %rdi call _objc_msgSend movq -8(%rbp), %rdi movq %rax, 48(%rdi) movq %rdx, 56(%rdi) movdqa %xmm0, 64(%rdi) movdqa %xmm1, 80(%rdi) cmpb $2, 225(%rdi) je Lpop_long_double Lreturn: movq %rbp, %rsp popq %rbp ret Lfix_align: xorq %r11, %r11 pushq %r11 jmp Lfill_stack Lpop_long_double: fstpt 192(%rdi) jmp Lreturn | > > > > > > > > > > > > > > > > | 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | movq 40(%rdi), %r9 movq 32(%rdi), %r8 movq 24(%rdi), %rcx movq 16(%rdi), %rdx movq 8(%rdi), %rsi movq 0(%rdi), %rdi movb 225(%rdi), %r11b cmpb $1, %r11b je Lcall_send_stret cmpb $3, %r11b je _objc_msgSend cmpb $4, %r11b je _objc_msgSend_stret call _objc_msgSend Lafter_send: movq -8(%rbp), %rdi movq %rax, 48(%rdi) movq %rdx, 56(%rdi) movdqa %xmm0, 64(%rdi) movdqa %xmm1, 80(%rdi) cmpb $2, 225(%rdi) je Lpop_long_double Lreturn: movq %rbp, %rsp popq %rbp ret Lfix_align: xorq %r11, %r11 pushq %r11 jmp Lfill_stack Lcall_send_stret: call _objc_msgSend_stret jmp Lafter_send Lpop_long_double: fstpt 192(%rdi) jmp Lreturn |
Modified src/invocation/invoke-x86_64.m from [7689390f4e] to [8ed55a5c76].
| ︙ | ︙ | |||
30 31 32 33 34 35 36 |
#define NUM_GPR_OUT 2
#define NUM_SSE_IN 8
#define NUM_X87_OUT 2
enum {
RETURN_TYPE_NORMAL,
RETURN_TYPE_STRUCT,
| | > > | 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#define NUM_GPR_OUT 2
#define NUM_SSE_IN 8
#define NUM_X87_OUT 2
enum {
RETURN_TYPE_NORMAL,
RETURN_TYPE_STRUCT,
RETURN_TYPE_X87,
RETURN_TYPE_JMP,
RETURN_TYPE_JMP_STRET
};
struct call_context {
uint64_t gpr[NUM_GPR_IN + NUM_GPR_OUT];
__m128 sse[NUM_SSE_IN];
long double x87[NUM_X87_OUT];
uint8_t num_sse_used;
|
| ︙ | ︙ |