C函数的TAN在64位GCC中的返回值是什么?

时间:2014-12-07 02:15:18

标签: gcc assembly return 64-bit

我在Linux 64位上将我的汇编函数与GCC相关联。我使用的库是math.h中的TAN。我用它链接;

gcc -s prog.o -o prog -lm

程序有效,但返回值为0.0000000(3.4弧度)。我在汇编代码中使用extrn;

extrn tan
extrn printf

我使用xmm0将参数(以弧度为单位)传递给TAN函数。现在我不确定哪个寄存器用于从TAN返回值。是xmm0,st0还是RAX?我找不到合适的参考资料。

1 个答案:

答案 0 :(得分:0)

对于我的gcc,它是xmm0。

这是一个C程序:

#include <stdio.h>
#include <math.h>

int main () {

  double x = tan(M_PI/4.0);
  // RESULT: x=1.000000
  printf ("x=%f\n", x);
  return 0;
}

这里有相应的&#34; gcc -S&#34;:

.Ltext0:
        .section        .rodata
.LC1:
        .string "x=%f\n"
        .text
        .globl  main
        .type   main, @function
main:
.LFB0:
        .file 1 "x.cpp"
        .loc 1 4 0
        .cfi_startproc
        pushq   %rbp
        .cfi_def_cfa_offset 16
        .cfi_offset 6, -16
        movq    %rsp, %rbp
        .cfi_def_cfa_register 6
        subq    $32, %rsp
.LBB2:
        .loc 1 6 0
        movabsq $4607182418800017407, %rax
        movq    %rax, -8(%rbp)
        .loc 1 8 0
        movq    -8(%rbp), %rax
        movq    %rax, -24(%rbp)
        movsd   -24(%rbp), %xmm0
        movl    $.LC1, %edi
        movl    $1, %eax
        call    printf
        .loc 1 9 0
        movl    $0, %eax
.LBE2:
        .loc 1 10 0
        leave
        .cfi_def_cfa 7, 8
        ret
        .cfi_endproc