我正在尝试编译QuickJS,它通常是在linux下开发的,gcc对这些代码没有问题。但是,我在Visual 2019上编译它时遇到了困难:
typedef unsigned __int128 uint128_t;有人知道怎样才能让这件事发挥作用吗?

错误是:
error C4235: Non-standard extension: The __int128 keyword is not supported for this architecture.
但是,__m128是受支持的,而不是unsigned,所以这对此没有帮助。
发布于 2021-07-13 10:16:10
因此,__m128被定义为一个联合:
typedef union __declspec(intrin_type) __declspec(align(16)) __m128 {
float m128_f32[4];
unsigned __int64 m128_u64[2];
__int8 m128_i8[16];
__int16 m128_i16[8];
__int32 m128_i32[4];
__int64 m128_i64[2];
unsigned __int8 m128_u8[16];
unsigned __int16 m128_u16[8];
unsigned __int32 m128_u32[4];
} __m128;显然,它可以通过其m128_uXX成员用于无符号操作,但它不能像内置数据类型(包括用unsigned进行限定)那样在语义上使用,也不能用于内置算术操作--它需要专门定义的函数/扩展对其进行操作。它打算与SSE/SSE 2 SIMD扩展一起使用
微软的实现不包括扩展128位整数类型。
就QuickJS代码而言,问题在前面的libbf.h代码中有:
#if defined(__x86_64__)
#define LIMB_LOG2_BITS 6
#else
#define LIMB_LOG2_BITS 5
#endif
#define LIMB_BITS (1 << LIMB_LOG2_BITS)因此,对于64位编译LIMB_BITS == 64。我建议两种解决方案之一:
LIMB_BITS == 32__int128的Windows编译器,如Mingw64。我注意到有一个QuickJS Visual端口这里,但是看看生成VS解决方案的代码和lua脚本,我并不清楚这个问题是如何解决的,即使解决了这个问题。readme.md文件说要下载和安装premake5,但是链接被破坏了。我当时就放弃了。
https://stackoverflow.com/questions/68359067
复制相似问题