From 7277c45c15d8b13db0326e03dff9e4b4c00ad5b5 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 18 May 2022 21:40:25 -0700 Subject: ffi: eliminate trivial allocas in bitfield code. * ffi.c (ffi_generic_sbit_put, ffi_generic_sbit_get, ffi_generic_ubit_put, ffi_generic_ubit_get): Replace int-sized alloca with declared int object. --- ffi.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ffi.c b/ffi.c index 53ccffb7..14099baf 100644 --- a/ffi.c +++ b/ffi.c @@ -1462,35 +1462,35 @@ static val ffi_ubit_get(struct txr_ffi_type *tft, mem_t *src, val self) static void ffi_generic_sbit_put(struct txr_ffi_type *tft, val n, mem_t *dst, val self) { - mem_t *tmp = coerce(mem_t *, zalloca(sizeof (int))); - memcpy(tmp, dst, tft->size); - ffi_sbit_put(tft, n, tmp, self); - memcpy(dst, tmp, tft->size); + int tmp = 0; + memcpy(&tmp, dst, tft->size); + ffi_sbit_put(tft, n, coerce(mem_t *, &tmp), self); + memcpy(dst, &tmp, tft->size); } static val ffi_generic_sbit_get(struct txr_ffi_type *tft, mem_t *src, val self) { - mem_t *tmp = coerce(mem_t *, zalloca(sizeof (int))); - memcpy(tmp, src, tft->size); - return ffi_sbit_get(tft, tmp, self); + int tmp = 0; + memcpy(&tmp, src, tft->size); + return ffi_sbit_get(tft, coerce(mem_t *, &tmp), self); } static void ffi_generic_ubit_put(struct txr_ffi_type *tft, val n, mem_t *dst, val self) { - mem_t *tmp = coerce(mem_t *, zalloca(sizeof (int))); - memcpy(tmp, dst, tft->size); - ffi_ubit_put(tft, n, tmp, self); - memcpy(dst, tmp, tft->size); + int tmp = 0; + memcpy(&tmp, dst, tft->size); + ffi_ubit_put(tft, n, coerce(mem_t *, &tmp), self); + memcpy(dst, coerce(mem_t *, &tmp), tft->size); } static val ffi_generic_ubit_get(struct txr_ffi_type *tft, mem_t *src, val self) { - mem_t *tmp = coerce(mem_t *, zalloca(sizeof (int))); - memcpy(tmp, src, tft->size); - return ffi_ubit_get(tft, tmp, self); + int tmp = 0; + memcpy(&tmp, src, tft->size); + return ffi_ubit_get(tft, coerce(mem_t *, &tmp), self); } static void ffi_bool_put(struct txr_ffi_type *tft, val truth, -- cgit v1.2.3