https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120870

H.J. Lu <hjl.tools at gmail dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|MOVED                       |---
             Status|RESOLVED                    |NEW

--- Comment #33 from H.J. Lu <hjl.tools at gmail dot com> ---
RBP isn't restored for -march=znver2 with preserve_none:

[hjl@gnu-zen4-1 cvise-1]$ cat x.c
int *_TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_object_array;
int _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_tstate,
    _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_locals;
typedef struct
{
  long bits;
} _PyStackRef;
void _Py_TYPE (int, _PyStackRef, int, _PyStackRef *, int, int, int);
_PyStackRef *_TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_newargs;
_PyStackRef _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_func;
__attribute__ ((preserve_none)) void
_TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex (long n)
{
  _PyStackRef __trans_tmp_1;
  for (long i = 0; i < n; i++)
    {
      __trans_tmp_1 = (_PyStackRef){
        _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_object_array[i]
      };
      _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_newargs[i]
          = __trans_tmp_1;
    }
  _Py_TYPE (_TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_tstate,
            _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_func,
            _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_locals,
            _TAIL_CALL_CALL_FUNCTION_EX_PyEvalFramePushAndInit_Ex_newargs,
            0, 0, 0);
}
[hjl@gnu-zen4-1 cvise-1]$ gcc -O2  -S x.c
[hjl@gnu-zen4-1 cvise-1]$ grep rbp x.s 
[hjl@gnu-zen4-1 cvise-1]$ gcc -O2 -march=znver2 -S x.c
[hjl@gnu-zen4-1 cvise-1]$ grep rbp x.s 
        pushq   %rbp
        movq    %rsp, %rbp
[hjl@gnu-zen4-1 cvise-1]$

Reply via email to