Skip to content

Commit

Permalink
Avoid memory dependency between instructions. (#8284)
Browse files Browse the repository at this point in the history
  • Loading branch information
ioquatix committed Aug 25, 2023
1 parent 97a97d6 commit 40d774b
Showing 1 changed file with 24 additions and 18 deletions.
42 changes: 24 additions & 18 deletions coroutine/amd64/Context.S
Expand Up @@ -13,29 +13,35 @@
.globl PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer)
PREFIXED_SYMBOL(SYMBOL_PREFIX,coroutine_transfer):

# Save caller state
pushq %rbp
pushq %rbx
pushq %r12
pushq %r13
pushq %r14
pushq %r15

# Save caller stack pointer
# Make space on the stack for 6 registers:
subq $48, %rsp

# Save caller state:
movq %rbp, 40(%rsp)
movq %rbx, 32(%rsp)
movq %r12, 24(%rsp)
movq %r13, 16(%rsp)
movq %r14, 8(%rsp)
movq %r15, (%rsp)

# Save caller stack pointer:
movq %rsp, (%rdi)

# Restore callee stack pointer
# Restore callee stack pointer:
movq (%rsi), %rsp

# Restore callee state
popq %r15
popq %r14
popq %r13
popq %r12
popq %rbx
popq %rbp

# Put the first argument into the return value
movq 40(%rsp), %rbp
movq 32(%rsp), %rbx
movq 24(%rsp), %r12
movq 16(%rsp), %r13
movq 8(%rsp), %r14
movq (%rsp), %r15

# Adjust stack pointer back:
addq $48, %rsp

# Put the first argument into the return value:
movq %rdi, %rax

# We pop the return address and jump to it
Expand Down

0 comments on commit 40d774b

Please sign in to comment.