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]$