← index #18108PR #18401
Related · high · value 1.231
QUERY · ISSUE

mpy-cross viper incompatibility with OBJ_REPR_B

openby jepleropened 2025-09-20updated 2025-09-20
bug

Port, board and/or hardware

unix port, obj_repr_b, x86 (32-bit)

MicroPython version

based on v1.27.0-preview-154-g44986b1f04

Reproduction

  1. Make a 32-bit REPR_B "standard" or "coverage" build (from e.g., #17688)
  2. Run RUN_TESTS_MPY_CROSS_FLAGS="--mpy-cross-flags=\"-march=x86 -msmall-int-bits=30\"" make -C ports/unix/ VARIANT=standard test_full_no_native # or VARIANT=coverage, depending

Expected behaviour

Tests pass

Observed behaviour

12 tests failed: micropython/native_gen.py micropython/native_misc.py micropython/native_try.py micropython/viper_import.py micropython/native_try_deep.py micropython/native_while.py micropython/native_with.py micropython/viper_misc3.py micropython/native_closure.py micropython/native_const.py micropython/native_for.py micropython/viper_with.py

I didn't dig deeply because native & viper were not important to my use case but I think that there are some assumptions about the encoding of small integer values as discussed in a related PR: https://github.com/micropython/micropython/pull/17688#issuecomment-3075383706

        } else if (si->vtype == VTYPE_INT || si->vtype == VTYPE_UINT) {
            ASM_MOV_REG_IMM(emit->as, reg_dest, (uintptr_t)MP_OBJ_NEW_SMALL_INT(si->data.u_imm));

Additional Information

No, I've provided everything above.

Code of Conduct

Yes, I agree

CANDIDATE · PULL REQUEST

Add OBJ_REPR_E for full 32-bit float precision

openby jepleropened 2025-11-11updated 2025-11-13
py-core

Summary

Add a new object representation called OBJ_REPR_E.

This work is loosely inspired by Float Self-Tagging but the shift & tag values are not any of those proposed in the paper.

Testing

I locally ran the testsuite. Some native tests fail, which I'll have to resolve one way or another. It may be #18108 because the small int size is 30 bits, not 31.

Trade-offs and Alternatives

I did not see a way to organize the new repr while retaining 31-bit ints. This means we hit #18105 and #18108 -- no uctypes, and no mpy-compiled native/viper code.

It adds about +1.5kB.

This builds on #18396

Keyboard

j / / n
next pair
k / / p
previous pair
1 / / h
show query pane
2 / / l
show candidate pane
c
copy suggested comment
r
toggle reasoning
g i
go to index
?
show this help
esc
close overlays

press ? or esc to close

copied