On Thu, 7 Nov 2024 12:08:50 GMT, Aleksey Shipilev <sh...@openjdk.org> wrote:

>> src/hotspot/os/windows/os_windows.cpp line 510:
>> 
>>> 508: // Thread start routine for all newly created threads.
>>> 509: // Called with the associated Thread* as the argument.
>>> 510: static unsigned thread_native_entry(void* t) {
>> 
>> Whoa! Hold on there. The `_stdcall` is required here and nothing to do with 
>> 32-bit. We use `begindthreadex` to start threads and the entry function is 
>> required to be `_stdcall`.
>> https://learn.microsoft.com/en-us/cpp/c-runtime-library/reference/beginthread-beginthreadex?view=msvc-170
>
> Not sure why this comment was marked as "Resolved". I have the same question 
> here.

@shipilev See addressing comments below:

> https://learn.microsoft.com/en-us/cpp/cpp/stdcall?view=msvc-170
> On ARM and x64 processors, __stdcall is accepted and ignored by the compiler; 
> on ARM and x64 architectures, by convention, arguments are passed in 
> registers when possible, and subsequent arguments are passed on the stack.






> To my knowledge the only thing __cdecl and __stdcall do is affect the 
> argument passing on the stack since 32 bit uses the stack to pass arguments. 
> Since 64 bit passes arguments inside registers and then only later uses the 
> stack if there are too many parameters to fit in the parameter registers 
> (Basically permanent __fastcall), these specifiers are probably ignored in 
> all 64 bit platforms

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/21744#discussion_r1832581212

Reply via email to