小编ima*_*kak的帖子

C (MIPS) - 如何告诉编译器加载单精度浮点数与 GPR 直接相关?

最近,我正在尝试使用 gcc 为 n64 编写一些实用程序,但它的优化策略存在一些问题。

请考虑以下示例:

// cctest.c

extern struct {
    float x;
    float y;
    float z;
} var;

void *test() {
    float t;

    t = 5.0;
    var.x = var.x + t;
    var.y = 10.0;
    var.z = 60.0;
    return (void*)&var;
}
Run Code Online (Sandbox Code Playgroud)

我的 except 输出类似于:

    lui $2, %hi(var)
    lui $1, 0x40A0
    addiu   $2,$2,%lo(var)
    mtc1 $1, $f2
    lwc1 $f0, 0x0($2)
    lui $3, 0x4120
    lui $4, 0x4270
    sw $3, 0x4($2)
    add.s $f0, $f0, $f2
    sw $4, 0x8($2)
    jr $31
    swc1 $f0, 0x0($2)
Run Code Online (Sandbox Code Playgroud)

然而,编译器生成: …

c floating-point gcc mips

6
推荐指数
0
解决办法
271
查看次数

标签 统计

c ×1

floating-point ×1

gcc ×1

mips ×1