我正在使用 libgccjit 实现 jit 编译器,但在尝试检索二进制运算的结果时遇到了困难。
问题不在于获取结果,而在于声明结果的类型。
我有两个
gcc_jit_rvalue
,想对它们执行简单的二元运算。
这两个右值可以有任何类型。
gcc_jit_context_new_binary_op
的第四个参数,我必须指定结果类型。
鉴于我不知道右值的类型,但可以得到它们的
gcc_jit_type*
,我怎样才能找到标准C结果类型(GCC在编译C表达式时使用的结果类型a + b
)表情?
我知道我可以写一堆
if
和 else
或 switch
语句来检查整数和浮点数的每一个该死的组合,并返回 C 中所期望的结果,但这是一个很多我真的不想打字。
是否有一些更简单的方法可以找到 GCC 在编译 C 代码时将使用的结果类型?
libgccjit 没有提供这样做的方法。事实上,libgccjit 甚至不允许您对不同类型的值进行二元运算,即使在 C 中是允许的。
因此,您需要自己检查所有组合。 也许情况并不像现在看起来那么糟糕,libgccjit 有一些新的 API,比如
gcc_jit_type_is_integral
和 gcc_jit_type_get_size
。