2012-01-13 25 views
6

Tôi không thể tìm thấy bất kỳ tài liệu xác định cách đăng ký YMM được xử lý bởi người gọi và bởi callee.Đăng ký AVX được xử lý như thế nào theo các quy ước gọi điện phổ biến?

Tập trung câu hỏi của tôi, đây là những gì tôi muốn biết:

  1. nào YMM đăng ký phải được khôi phục bởi callee trước khi trở về người gọi?
  2. Vì có sự khác biệt đối với sổ đăng ký XMM trong Linux và Windows, tôi giả định rằng thanh ghi YMM cũng không tuân thủ các quy tắc tương tự. các quy tắc cho từng hệ điều hành là gì?

EDIT: Nhờ câu trả lời bên dưới tôi đã có thể nhặt rác câu trả lời trong tài liệu được đề cập cho Win64. Tôi khá chắc chắn rằng Linux sau quy tắc tương tự:

"... 
The YMM registers do not have callee-save status, except for the lower half 
of YMM6-YMM15 in 64-bit Windows, where XMM6-XMM15 have callee-save status. 
Possible future extensions of the vector registers to 512 bits or more will not have calleesave 
status. 
..." 

Trả lời

4

Câu trả lời cho cả hai câu hỏi của bạn (giả định rằng bạn đang nói về ước gọi trong C++) là trong great optimization guide bởi Agner Sương mù:

Calling conventions for different C++ compilers and operating systems.

Xem phần 6 (Đăng ký sử dụng) ở trang 10. Ngoài ra phần 7.2 (Truyền và trả lại loại SIMD) trên trang 22 có thể có liên quan.

+0

Cảm ơn, điều này hữu ích. –

Các vấn đề liên quan