小编sbl*_*sbl的帖子

GCC访问双机字类型中的高/低机器字(包括asm)

我使用各种双机器字类型,例如x86_64上的例如(u)int128_t和GCC中的i386,ARM等上的(u)int64_t.我正在寻找一种正确/便携/干净的方式来访问和操作各个实际的机器字(主要是汇编程序).例如,在32位机器上,我想直接访问gcc在内部使用的int64_t的高/低32位部分,而不使用如下所示的愚蠢错误代码.类似地,对于"本机"128位类型,我想访问gcc使用的64b部分(不是用于下面的例子,因为"add"很简单,但一般而言).

考虑以下代码中的32位ASM路径,将两个int128_t一起添加(可以是"本机"到gcc,"本机"到机器或"半原生"到机器); 这是可怕的,难以维持(和较慢).

#define BITS 64
#if defined(USENATIVE)
// USE "NATIVE" 128bit GCC TYPE
typedef __int128_t int128_t;
typedef __uint128_t uint128_t;
typedef int128_t I128;
     #define HIGH(x) x
     #define HIGHVALUE(x) ((uint64_t)(x >> BITS))
     #define LOW(x) x
     #define LOWVALUE(x) (x & UMYINTMAX)
#else
typedef struct I128 {
    int64_t high;
    uint64_t low;
} I128;
     #define HIGH(x) x.high
     #define HIGHVALUE(x) x.high
     #define LOW(x) x.low
     #define LOWVALUE(x) x.low
#endif
     #define HIGHHIGH(x) (HIGHVALUE(x) >> (BITS / 2))
     #define HIGHLOW(x) (HIGHVALUE(x) & 0xFFFFFFFF)
     #define LOWHIGH(x) (LOWVALUE(x) >> (BITS …
Run Code Online (Sandbox Code Playgroud)

c assembly portability gcc

7
推荐指数
1
解决办法
744
查看次数

标签 统计

assembly ×1

c ×1

gcc ×1

portability ×1