mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 00:10:20 +01:00
translate_sse: Fix generated code argument handling for msabi on x86_64
translate_sse.c contains code for msabi on x86_64, but it appears to be
untested.
Currently arguments 1 and 2 passed to the generated code are moved as 32-bit
quantities into the registers used by sysvabi, irrespective of the architecture.
Since these may be pointers, they must be moved as 64-bit quantities to avoid
truncation.
Commit f4dd099171 disabled tranlate_sse.c on MinGW
x86_64, I don't know if was due to this issue, or a different one...
Signed-off-by: Jon TURNEY <jon.turney@dronecode.org.uk>
Reviewed-by: Brian Paul <brianp@vmware.com>
This commit is contained in:
parent
72a0f832ec
commit
cedfd79be2
1 changed files with 11 additions and 3 deletions
|
|
@ -1308,14 +1308,22 @@ static boolean build_vertex_emit( struct translate_sse *p,
|
|||
x86_push(p->func, p->outbuf_EBX);
|
||||
x86_push(p->func, p->count_EBP);
|
||||
|
||||
/* on non-Win64 x86-64, these are already in the right registers */
|
||||
/* on non-Win64 x86-64, these are already in the right registers */
|
||||
if(x86_target(p->func) != X86_64_STD_ABI)
|
||||
{
|
||||
x86_push(p->func, p->machine_EDI);
|
||||
x86_push(p->func, p->idx_ESI);
|
||||
|
||||
x86_mov(p->func, p->machine_EDI, x86_fn_arg(p->func, 1));
|
||||
x86_mov(p->func, p->idx_ESI, x86_fn_arg(p->func, 2));
|
||||
if(x86_target(p->func) != X86_32)
|
||||
{
|
||||
x64_mov64(p->func, p->machine_EDI, x86_fn_arg(p->func, 1));
|
||||
x64_mov64(p->func, p->idx_ESI, x86_fn_arg(p->func, 2));
|
||||
}
|
||||
else
|
||||
{
|
||||
x86_mov(p->func, p->machine_EDI, x86_fn_arg(p->func, 1));
|
||||
x86_mov(p->func, p->idx_ESI, x86_fn_arg(p->func, 2));
|
||||
}
|
||||
}
|
||||
|
||||
x86_mov(p->func, p->count_EBP, x86_fn_arg(p->func, 3));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue