From 656237392cecce74737e583a57c6aa41b866e50b Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Thu, 24 Jan 2019 07:13:03 -0800 Subject: ffi: incorrect big endian int64 get. * ffi.c (ffi_le_i64_get): Fix wrong array indices, causing lower half of 64 bit word to be taken as the upper half. --- ffi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ffi.c b/ffi.c index 672d5749..31150f82 100644 --- a/ffi.c +++ b/ffi.c @@ -1087,8 +1087,8 @@ static val ffi_le_i64_get(struct txr_ffi_type *tft, mem_t *src, val self) n = -((n ^ 0xFFFFFFFFFFFFFFFF) + 1); return num(n); #else - cnum hi32 = (convert(cnum, src[3]) << 24 | convert(cnum, src[2]) << 16 | - convert(cnum, src[1]) << 8 | src[0]); + cnum hi32 = (convert(cnum, src[7]) << 24 | convert(cnum, src[6]) << 16 | + convert(cnum, src[5]) << 8 | src[4]); ucnum lo32 = (convert(ucnum, src[3]) << 24 | convert(ucnum, src[2]) << 16 | convert(ucnum, src[1]) << 8 | src[0]); return logior(ash(num(hi32), num_fast(32)), unum(lo32)); -- cgit v1.2.3