i386 doreti: stop saving/restoring %ecx around calls into C

There is no reason to do this.  Instead just calculate it later.

Reviewed by:	jhb
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D36302
This commit is contained in:
Konstantin Belousov 2022-08-18 07:07:29 +03:00
parent dc4a2d1d0e
commit e8b2980e4a

View File

@ -518,22 +518,21 @@ doreti_exit:
je doreti_iret_nmi
cmpl $T_TRCTRAP, TF_TRAPNO(%esp)
je doreti_iret_nmi
movl $TF_SZ, %ecx
testl $PSL_VM,TF_EFLAGS(%esp)
jz 1f /* PCB_VM86CALL is not set */
addl $VM86_STACK_SPACE, %ecx
jmp 2f
1: testl $SEL_RPL_MASK, TF_CS(%esp)
jnz 1f /* PCB_VM86CALL is not set */
testl $SEL_RPL_MASK, TF_CS(%esp)
jz doreti_popl_fs
2: movl $handle_ibrs_exit,%eax
pushl %ecx /* preserve enough call-used regs */
1: movl $handle_ibrs_exit,%eax
call *%eax
movl mds_handler,%eax
call *%eax
popl %ecx
movl %esp, %esi
movl PCPU(TRAMPSTK), %edx
subl %ecx, %edx
movl $TF_SZ, %ecx
testl $PSL_VM,TF_EFLAGS(%esp)
jz 2f /* PCB_VM86CALL is not set */
addl $VM86_STACK_SPACE, %ecx
2: subl $TF_SZ, %edx
movl %edx, %edi
rep; movsb
movl %edx, %esp