36 lines
472 B
ArmAsm
36 lines
472 B
ArmAsm
|
|
|
|
.code32
|
|
.global yield
|
|
.extern schedule_next_task
|
|
yield: # void yield()
|
|
cli
|
|
|
|
popl %ecx
|
|
|
|
pushfl // EFLAGS
|
|
pushl %cs // CS
|
|
pushl %ecx // EIP
|
|
|
|
pushal
|
|
call send_eoi_master
|
|
|
|
xor %eax, %eax
|
|
mov %ds, %ax
|
|
pushl %eax
|
|
|
|
mov $0x10, %ax
|
|
mov %ax, %ds
|
|
mov %ax, %es
|
|
|
|
pushl %esp
|
|
call switch_context
|
|
movl %eax, %esp
|
|
|
|
popl %eax
|
|
mov %ax, %ds
|
|
mov %ax, %es
|
|
|
|
popal
|
|
sti
|
|
iret |