스택 포인터를 제외하고 함수 호출에서 모든 레지스터를 파괴하는 함수 f()
이 있습니다. 이것을 gcc
으로 어떻게 전송하면 호출자는 저장하기를 원하는 모든 레지스터를 저장하고 나서 f()
으로 호출 할 수 있습니까?함수를 dirty로 표시 (호출자가 모든 레지스터를 저장하도록 지정)
EDIT : 다른 코 루틴으로 전환하기 전에 상태를 저장해야하는 coroutine 처리기를 작성 중이므로 가능한 최소 상태를 저장하고 싶습니다. 스택 포인터를 제외한 모든 것을 파괴하는 "더러운"이라고 표시된 함수 yield()
이 있다고 가정 해보십시오. 이 함수는 컨트롤이 우리 코 루틴으로 반환 된 후에 마술처럼 돌아 오지만 호출자가 호출자가 저장해야하는 레지스터를 가장 잘 알고 있기 때문에 호출자가 yield()
을 호출하기 전에 저장해야하는 모든 레지스터를 저장 한 다음 복원하는 것이 가장 좋습니다 나중에.
아마도 [clobber 목록] (https://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html#ss5.3)을 찾고 있습니까? –
@RandomDavis 아니요. clobbered 레지스터는 호출 수신자가 아닌 호출 수신자가 저장합니다. 호출자가 보존하고자하는 모든 레지스터를 보존 (푸시/팝)하고 싶습니다. 'f()'는 스택 포인터 만 보존합니다. – user1095108
코멘트에? gcc가 그것을 알아야하는 이유는 무엇입니까? 자동으로 해보기를 원하면 그럴 방법이 없다고 생각합니다. –