[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Bytevector VM ops
From: |
Ludovic Courtès |
Subject: |
Bytevector VM ops |
Date: |
Tue, 30 Jun 2009 00:23:38 +0200 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/23.1.50 (gnu/linux) |
Hello,
I'm finally looking into these new VM ops...
"Andy Wingo" <address@hidden> writes:
> +#define BV_FIXABLE_INT_REF(stem, fn_stem, type, size) \
> +{ \
> + long i; \
> + ARGS2 (bv, idx); \
> + VM_VALIDATE_BYTEVECTOR (bv); \
> + if (SCM_LIKELY (SCM_I_INUMP (idx) \
> + && ((i = SCM_I_INUM (idx)) >= 0) \
> + && (i < SCM_BYTEVECTOR_LENGTH (bv)) \
> + && (i % size == 0))) \
> + RETURN (SCM_I_MAKINUM (*(scm_t_##type*) \
> + (SCM_BYTEVECTOR_CONTENTS (bv) + i))); \
Did you test this on SPARC or some such? I'm 90% sure
`(bv-u32-ref bv 1)' would lead to SIGBUS there, due to the unaligned access.
This is why `INTEGER_REF ()' in `bytevectors.c' uses memcpy(3).
> + else \
> + RETURN (scm_bytevector_##fn_stem##_ref (bv, idx)); \
In this case, we pay the overhead twice (type-checking et al.).
Given that there's some duplication with `bytevectors.c', maybe we could
share some of the accessor macros between both files?
Thanks,
Ludo'.
- Bytevector VM ops,
Ludovic Courtès <=