【问题标题】:GCC compiler porting to new architecture : Call external library functionGCC 编译器移植到新架构:调用外部库函数
【发布时间】:2015-05-04 20:59:59
【问题描述】:

我正在将 GCC 编译器移植到新的处理器架构。它类似于 v850 架构(“/gcc/config/v850”)并且几乎完成了。但是我在乘法运算中遇到了问题。体系结构仅支持无符号乘法。在签名的情况下,我必须使用 lib1funcs.asm 中的“__mulsi3”库函数。所以我需要在签名时调用库函数。实现“mulsi3”指令如下。有人知道如何从 {target}.md 文件或 {target}.c 文件调用任何库函数吗?帮帮我……

我遵循“sh”架构(“/gcc/config/sh”)并像 sh 架构一样实现。 GCC 构建正常。但是当我在目标上编译测试代码时,会出现一条错误消息。 (file => emit-rtl.c:862)


mulsi3 指令

    (define_insn "mulsi3"
        [(set (match_operand:SI 0 "register_operand" "=r,r")
            (mult:SI (match_operand:SI 1 "nonmemory_operand" "r,r")
                (match_operand:SI 2 "nonmemory_operand" "r,i")))]
        ""
        "*
        {
        /* REG */
        if(GET_CODE (operands[2]) == REG)
        {
            return \"mul %0,%1,%2\";
        }
        /* IMMEDIATE */
        else
        {
            /* unsigned case */
            if(CONST_OK_FOR_M(INTVAL(operands[2])))
            {
                return \"muli %0,%1,%2\";
            }
            /* signed case */
            else
            {
                /******************************************/
                /* need to call __mulsi3 library function */
                /******************************************/
            }
        }
    }
    "
    [(set_attr "length" "6,6")
    (set_attr "cc" "none_0hit,none_0hit")
    (set_attr "type" "mult")])

【问题讨论】:

  • 问错地方了。你真的应该问gcc@gcc.gnu.org

标签: c gcc compiler-construction porting cpu-architecture


【解决方案1】:

mulsi3 是特殊名称。只有在非常简单的情况下才能将其赋予 insn 模式。

真的,在你的情况下,mulsi3 模式应该是 define_expand,然后你可以让它在某些分支上失败(使用明确的 FAIL 语句)。当专用扩展模式失败时,编译器应该生成 libgcc 调用。

但还有两个更正:

1) 更喜欢模式匹配而不是显式 if-else inside 模式。 IE。编写单独的 =r,r,r 和 =r,r,i 指令模式,将谓词和约束都限制在允许的范围内。如果编译器找不到适合的模式,则编译器应该生成 libgcc 调用,您不需要(在大多数情况下这是个坏主意)显式编写 FAIL。

2) 小心谓词/约束匹配。 “非内存操作数”对于“r,r”来说是非常糟糕的谓词。比如说,你在这里有合法的常量,你的程序很大,重新加载找不到寄存器......一切都爆炸了。

我还建议您在 gcc@gcc.gnu.org 邮件列表中提出这样深入的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-08
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-17
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多