RFC: Should x86-64 support arbitrary calling conventions?

Richard Henderson rth@twiddle.net
Thu Mar 23 23:14:00 GMT 2017


On 03/24/2017 01:41 AM, H.J. Lu wrote:
> +# ifdef STATE_SAVE_MASK
> +	movl $STATE_SAVE_MASK, %eax
> +	xorl %edx, %edx
> +	# Clear the XSAVE Header.
> +	movq $0, (STATE_SAVE_OFFSET + 512)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 2)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 3)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 4)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 5)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 6)(%rsp)
> +	movq $0, (STATE_SAVE_OFFSET + 512 + 8 * 7)(%rsp)
>  # endif

You've just cleared %rdx.  Use that instead of 8*4 bytes of immediate zeros.

Given that you have to ifdef this code into place, isn't it somewhat pointless 
to hide xsave behind a macro in the next line?

> +	STATE_SAVE STATE_SAVE_OFFSET(%rsp)

I think it would be clearer to inline the two save instructions instead.


r~



More information about the Libc-alpha mailing list