xlc_dbl_u32.c

来自「The Valgrind distribution has multiple t」· C语言 代码 · 共 63 行

C
63
字号
/* This is code generated by xlc -O3 for conversion of a double to an   unsigned 32-bit int, in a "floor" style.  It relies on doing an   fadd with a non-standard rounding mode and so checks that V handles   the rounding mode correctly.  r will be 1 if that is not so. */#include <stdio.h>extern unsigned int xlc_double_to_u32 ( double );asm("\n"".text\n"".global xlc_double_to_u32\n"".type xlc_double_to_u32, @function\n""xlc_double_to_u32:\n""        stwu    %r1,-48(%r1)\n""        addis   %r4,%r0,.const_dr@ha\n""        addis   %r0,%r0,17376\n""        fabs    %f0,%f1\n""        addi    %r3,%r0,0\n""        mffs    %f3\n""        mtfsb1  4*cr7+so\n""        lfs     %f2,.const_dr@l(%r4)\n""        fcmpu   0,%f1,%f0\n""        fadd    %f0,%f0,%f2\n""        mtfsf   255,%f3\n""        stfd    %f0,24(%r1)\n""        bne-    $+0x1c\n""        lwz     %r3,24(%r1)\n""        subf    %r0,%r3,%r0\n""        srawi   %r0,%r0,31\n""        ori     %r0,%r0,0x0000\n""        lwz     %r4,28(%r1)\n""        or      %r3,%r4,%r0\n""        addi    %r1,%r1,48\n""        blr\n"".size xlc_double_to_u32, . - xlc_double_to_u32\n""        .long 0\n""        .long 0x00000000\n""        .long 0x00000000\n""\n""        .section        \".rodata\",\"a\"\n""        .align  3\n""        .type    .const_dr,@object\n""        .size    .const_dr,20\n"".const_dr:\n""        .long 0x59804000\n""        .long 0x49424d20\n""        .long 0x3fe66666\n""        .long 0x66666666\n""        .long 0x25640a00\n");int main (int argc, char** argv){  unsigned int r = xlc_double_to_u32 ( 0.7 );  if (r == 0)    printf("pass\n");  else     printf("fail\n");  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?