我正在构建一个交叉编译器,它将c代码转换为我正在使用的处理器的程序集。经过几个小时的工作,我设法得到xgcc.exe进行编译,以便我可以开始使用它来吐出实际的操作码。但是,在尝试编译一个简单的void主代码时,我遇到了麻烦:
void main(){}
当我运行它时,我得到以下内部编译器错误
(call_ins 3 2 5 2 (call (mem SI ("__main") [flags 0x41]) [0 S4 A8])
(const_int 0 [0])) test.c:1 -1
(expr_list REG_EH_REGION (const_int 0 [0]) (nil)) (nil))
Internal compiler error: in extract_insn, at recog.c: 2109
我确实从类似于我的工作处理器(moxie)复制了一个机器描述符文件,但它仍然会产生相同的错误。应该与此错误协作的行是:
(define_expand "call_value"
[(set (match_operand:SI 0 "memory_operand" "")
(call (match_operand:SI 1 "memory_operand" "")
(match_operand:SI 2 "memory_operand" "")))]
""
{
gcc_assert (MEM_P (operands[1]));
})"
但是我已经改变了很多部分,但我还没有成功。有关导致此错误的原因的任何想法?
答案 0 :(得分:0)
经过一番黑客攻击后,我解决了这个问题:
(define_expand "call"
[(call (match_operand:SI 0 "memory_operand" "")
(match_operand 1 "general_operand" ""))]
""
{
gcc_assert (MEM_P (operands[0]));
})
(define_insn "*call"
[(call (mem:SI (match_operand:SI
0 "nonmemory_operand" "i,r"))
(match_operand 1 "" ""))]
""
"@
call %0
call %0"
)
简而言之,它没有找到调用指令,因为它不匹配。