Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Win64 calling convention and MM/XMM registers passed explicitly & indirectly doesn't work #83

Open
kobalicek opened this issue Apr 27, 2015 · 1 comment
Labels

Comments

@kobalicek
Copy link
Member

kobalicek commented Apr 27, 2015

Passing MM and XMM registers doesn't work when using Win64 calling convention.

Win64 requires to pass a pointer into an aligned memory where the content of MM/XMM register is stored.

This only applies to functions like this:

void func_a(__m128 xmmRegByValue);
void func_b(__m64 mmRegByValue);

Other functions that use float/double arguments are supported.

@kobalicek kobalicek added the bug label Jun 26, 2015
@kobalicek
Copy link
Member Author

kobalicek commented May 31, 2020

Update

  • Commit f986f7f adds support for calling functions that have XMM|YMM|ZMM registers passed by value that work with both Windows64 and SystemV ABIs.
  • Generating functions that use XMM|YMM|ZMM arguments passed by value indirectly (through pointer or pointer on stack) is still not supported on Windows in 64-bit mode.

@kobalicek kobalicek changed the title Win64 CC and MM/XMM registers Win64 calling convention and MM/XMM registers passed explicitly & indirectly doesn't work Jan 27, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

1 participant