29 lines
514 B
ArmAsm
29 lines
514 B
ArmAsm
|
|
|
|
.code32
|
|
.global yield
|
|
.extern schedule_next_task
|
|
yield: # void yield()
|
|
cli
|
|
|
|
pushfl
|
|
pushl %cs
|
|
|
|
movl 8(%esp), %eax
|
|
pushl %eax
|
|
|
|
movl 4(%esp), %ebx # Get CS
|
|
movl %ebx, 8(%esp) # Move CS over Old EIP
|
|
movl 0(%esp), %ebx # Get Return EIP
|
|
movl %ebx, 4(%esp) # Move Return EIP over CS
|
|
addl $4, %esp # Adjust stack pointer up.
|
|
|
|
pushal
|
|
|
|
pushl %esp
|
|
call switch_context
|
|
movl %eax, %esp
|
|
|
|
popal
|
|
sti
|
|
iret |