From 1bc96f55571c86c7d23a95f3a4148f5c4a45e522 Mon Sep 17 00:00:00 2001 From: dzaima Date: Fri, 28 Jul 2023 13:59:51 +0300 Subject: [PATCH] extract u8/u16/u32/f32 reading functions --- src/ffi.c | 15 ++++++++++----- test/cases/ffi.bqn | 2 ++ 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/ffi.c b/src/ffi.c index 0c587ea6..c3744655 100644 --- a/src/ffi.c +++ b/src/ffi.c @@ -604,6 +604,12 @@ static B toU32Bits(B x) { return TI(x,elType)==el_i32? x : cpyU32Bits(x); } static B toU16Bits(B x) { return TI(x,elType)==el_i16? x : cpyU16Bits(x); } static B toU8Bits(B x) { return TI(x,elType)==el_i8? x : cpyU8Bits(x); } +// read x as the specified type (assuming a container of the respective width signed integer array); consumes x +NOINLINE B readU8Bits(B x) { usz ia=IA(x); u8* xp=tyarr_ptr(x); i16* rp; B r=m_i16arrv(&rp, ia); for (usz i=0; ia[0].mutPtr; if (mut) { - usz ia = IA(f); if (isC32(e)) { switch(o2cG(e)) { default: UD; case sty_i8: case sty_i16: case sty_i32: case sty_f64: return incG(f); - case sty_u8: { u8* tp=tyarr_ptr(f); i16* rp; B r=m_i16arrv(&rp, ia); for (usz i=0; i