[PATCH][middle-end][i386][version 3]Add -fzero-call-used-regs=[skip|used-gpr-arg|used-arg|all-arg|used-gpr|all-gpr|used|all]

Qing Zhao QING.ZHAO@ORACLE.COM
Thu Oct 22 14:46:57 GMT 2020


Hi, Uros,

> On Oct 21, 2020, at 9:45 AM, Qing Zhao via Gcc-patches <gcc-patches@gcc.gnu.org> wrote:
>>>> 
>> 
>> Something like this:
>> 
>> --cut here--
>> long double
>> __attribute__ ((noinline))
>> test (long double a, long double b)
>> {
>> long double r = a + b;
>> 
>> asm volatile ("fldz;                \
>>       fldz;                \
>>       fldz;                \
>>       fldz;                \
>>       fldz;                \
>>       fldz;                \
>>       fldz;                \
>>       fstp %%st(0);            \
>>       fstp %%st(0);            \
>>       fstp %%st(0);            \
>>       fstp %%st(0);            \
>>       fstp %%st(0);            \
>>       fstp %%st(0);            \
>>       fstp %%st(0)" : : "X"(r));
>> return r;
>> }
>> 
>> int
>> main ()
>> {
>> long double a = 1.1, b = 1.2;
>> 
>> long double c = test (a, b);
>> 
>> printf ("%Lf\n", c);
>> 
>> return 0;
>> }
>> --cut here—
> 
> 
> Okay, so,
> 
> 1. First compute how many st registers need to be zeroed,  num_of_zeroed_st
> 2. Then issue (8 - num_of_zeroed_st) fldz to push 0 to the stack to clear all the dead stack slots;
> 3. Then issue (8 - num_of_zeroed_st) fstp %st(0) to pop the stack and empty the stack.
> 

How to generate such asm volatile insn at i386 backend? Is there any code in i386 backend I can refer for this ?

thanks.

Qing


More information about the Gcc-patches mailing list