【发布时间】:2015-03-03 09:56:06
【问题描述】:
我正在开发一个 32 位架构,其中 int64_t 仅使用最新版本的编译器(软件仿真)定义。由于我们没有完全升级到上一个编译器,我想用联合管理 64 位整数并定义基本的算术运算。
这是我写的:
typedef union _int64_u {
int64_t int64;
int64_32 int32;
} int64_u;
typedef struct _int64_32 {
int32_t hi;
int32_t lo;
}
我想澄清以下几点:
- 这种定义(部件和类型)的命名标准是什么?
- 这个解决方案正确吗?
以下是 add 和 sub 函数的示例:
#pragma inline
#pragma always_inline
int64_u int64_sub(int64_u x, int64_u y)
{
int64_u n;
asm("%0 = %1 - %2;"
: "=d" (n.int32.lo)
: "d" (x.int32.lo), "d" (y.int32.lo));
asm("%0 = %1 - %2 + CI - 1;"
: "=d" (n.int32.hi)
: "d" (x.int32.hi), "d" (y.int32.hi));
return n;
}
#pragma inline
#pragma always_inline
int64_u int64_add(int64_u x, int64_u y)
{
int64_u n;
asm("%0 = %1 + %2;"
: "=d" (n.int32.lo)
: "d" (x.int32.lo), "d" (y.int32.lo));
asm("%0 = %1 + %2 + CI;"
: "=d" (n.int32.hi)
: "d" (x.int32.hi), "d" (y.int32.hi));
return n;
}
【问题讨论】:
标签: c struct 64-bit unions int64