py/misc: Move mp_clz and mp_ctz intrinsics into misc.h.
Signed-off-by: Angus Gratton <angus@redyak.com.au>
This commit is contained in:
committed by
Damien George
parent
cebc9b0ae2
commit
d933210d96
@@ -35,23 +35,7 @@
|
|||||||
|
|
||||||
#include "py/mpstate.h"
|
#include "py/mpstate.h"
|
||||||
#include "py/asmthumb.h"
|
#include "py/asmthumb.h"
|
||||||
|
#include "py/misc.h"
|
||||||
#ifdef _MSC_VER
|
|
||||||
#include <intrin.h>
|
|
||||||
|
|
||||||
static uint32_t mp_clz(uint32_t x) {
|
|
||||||
unsigned long lz = 0;
|
|
||||||
return _BitScanReverse(&lz, x) ? (sizeof(x) * 8 - 1) - lz : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint32_t mp_ctz(uint32_t x) {
|
|
||||||
unsigned long tz = 0;
|
|
||||||
return _BitScanForward(&tz, x) ? tz : 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
#define mp_clz(x) __builtin_clz(x)
|
|
||||||
#define mp_ctz(x) __builtin_ctz(x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define UNSIGNED_FIT5(x) ((uint32_t)(x) < 32)
|
#define UNSIGNED_FIT5(x) ((uint32_t)(x) < 32)
|
||||||
#define UNSIGNED_FIT7(x) ((uint32_t)(x) < 128)
|
#define UNSIGNED_FIT7(x) ((uint32_t)(x) < 128)
|
||||||
|
|||||||
18
py/misc.h
18
py/misc.h
@@ -334,4 +334,22 @@ typedef const char *mp_rom_error_text_t;
|
|||||||
// For now, forward directly to MP_COMPRESSED_ROM_TEXT.
|
// For now, forward directly to MP_COMPRESSED_ROM_TEXT.
|
||||||
#define MP_ERROR_TEXT(x) (mp_rom_error_text_t)MP_COMPRESSED_ROM_TEXT(x)
|
#define MP_ERROR_TEXT(x) (mp_rom_error_text_t)MP_COMPRESSED_ROM_TEXT(x)
|
||||||
|
|
||||||
|
// Portable implementations of CLZ and CTZ intrinsics
|
||||||
|
#ifdef _MSC_VER
|
||||||
|
#include <intrin.h>
|
||||||
|
|
||||||
|
static uint32_t mp_clz(uint32_t x) {
|
||||||
|
unsigned long lz = 0;
|
||||||
|
return _BitScanReverse(&lz, x) ? (sizeof(x) * 8 - 1) - lz : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static uint32_t mp_ctz(uint32_t x) {
|
||||||
|
unsigned long tz = 0;
|
||||||
|
return _BitScanForward(&tz, x) ? tz : 0;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
#define mp_clz(x) __builtin_clz(x)
|
||||||
|
#define mp_ctz(x) __builtin_ctz(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif // MICROPY_INCLUDED_PY_MISC_H
|
#endif // MICROPY_INCLUDED_PY_MISC_H
|
||||||
|
|||||||
Reference in New Issue
Block a user