diff options
| author | Mike Pall <mike> | 2026-07-11 14:37:49 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2026-07-11 14:37:49 +0200 |
| commit | 859ad934bc3b92125043c3e599492aecd3586992 (patch) | |
| tree | 033d661e3ab3424ff9f1dff7d7b835a85ec3e23d /src | |
| parent | 295d45fb26de56498782c94594f31b97aef744ef (diff) | |
| download | luajit-859ad934bc3b92125043c3e599492aecd3586992.tar.gz luajit-859ad934bc3b92125043c3e599492aecd3586992.tar.bz2 luajit-859ad934bc3b92125043c3e599492aecd3586992.zip | |
x64: Fix callback result handling.
Reported by Matt Gerassimoff.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_ccallback.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/src/lj_ccallback.c b/src/lj_ccallback.c index 3ddb7ca5c..2fa8e7ce0 100644 --- a/src/lj_ccallback.c +++ b/src/lj_ccallback.c | |||
| @@ -519,6 +519,10 @@ static void callback_conv_result(CTState *cts, lua_State *L, TValue *o) | |||
| 519 | #if LJ_TARGET_X86 | 519 | #if LJ_TARGET_X86 |
| 520 | if (ctype_isfp(ctr->info)) | 520 | if (ctype_isfp(ctr->info)) |
| 521 | cts->cb.gpr[2] = ctr->size == sizeof(float) ? 1 : 2; | 521 | cts->cb.gpr[2] = ctr->size == sizeof(float) ? 1 : 2; |
| 522 | #elif LJ_TARGET_X64 | ||
| 523 | /* Always zero-extend results to 64 bits. */ | ||
| 524 | if (ctr->size <= 4 && ctype_isinteger_or_bool(ctr->info)) | ||
| 525 | *(uint64_t *)dp = (uint64_t)*(uint32_t *)dp; | ||
| 522 | #endif | 526 | #endif |
| 523 | } | 527 | } |
| 524 | } | 528 | } |
