如何使用arm64程序集执行浮点操作?

问题描述 投票:0回答:1

如何使用ARM64程序集执行浮点运算,例如加法,减法,乘法和除法?

我尝试过

static double  __attribute__((naked, pure)) MyASMAdd(double sub1, double sub2) {
#ifndef __arm__
    asm("           ADD     x0, x0, x1");
    asm("           RET");
#endif
}

如上所述,如果我使用两个doublefloat操作,则结果将始终是第一个参数如3.2 + 4.6,应等于7.8,但答案是3.2。在其他情况下也是如此。但是,如果我对两个参数都使用int,则可以获得所需的结果。

static int  __attribute__((naked, pure)) MyASMAdd(int sub1, int sub2) {
#ifndef __arm__
    asm("           ADD     x0, x0, x1");
    asm("           RET");
#endif
}
c++ assembly arm64
1个回答
2
投票

AArch64 calling convention传递在s0-7中浮点,在d0-7寄存器中翻倍。

[C0的输出:

Godbolt
© www.soinside.com 2019 - 2024. All rights reserved.