this repo has no description
at fixPythonPipStalling 86 lines 2.0 kB view raw
1/* 2 * copysign.s 3 * 4 * by Ian Ollmann. 5 * 6 * Copyright (c) 2007 Apple Inc., All Rights Reserved. 7 * 8 * Implementation of C99 copysign functions for __i386__ and __x86_64__. 9 */ 10 11#include <machine/asm.h> 12 13#include "abi.h" 14 15 16ENTRY( copysignf ) 17#if defined( __i386__ ) 18 movss FRAME_SIZE(STACKP), %xmm0 19 movss 4+FRAME_SIZE(STACKP), %xmm1 20#endif 21 pcmpeqw %xmm2, %xmm2 //0xffffffff 22 psrld $1, %xmm2 //0x7fffffff 23 andps %xmm2, %xmm0 24 andnps %xmm1, %xmm2 25 orps %xmm2, %xmm0 26#if defined( __i386__ ) 27 movss %xmm0, FRAME_SIZE( STACKP ) 28 flds FRAME_SIZE(STACKP) 29#endif 30 ret 31 32ENTRY( copysign ) 33#if defined( __i386__ ) 34 movsd FRAME_SIZE( STACKP ), %xmm0 //x 35 movsd 8+FRAME_SIZE( STACKP ), %xmm1 //y 36#endif 37 pcmpeqw %xmm2, %xmm2 //0xffffffffffffffff 38 psrlq $1, %xmm2 //0x7fffffffffffffff 39 andpd %xmm2, %xmm0 40 andnpd %xmm1, %xmm2 41 orpd %xmm2, %xmm0 42#if defined( __i386__ ) 43 movsd %xmm0, FRAME_SIZE( STACKP ) 44 fldl FRAME_SIZE(STACKP) 45#endif 46 ret 47 48ENTRY( copysignl ) 49 movzwl 8+FRAME_SIZE( STACKP ), %eax // x exp 50 movzwl 24+FRAME_SIZE( STACKP ), %edx // y exp 51 andl $0x7fff, %eax 52 andl $0x8000, %edx 53 orl %edx, %eax 54 movw %ax, 8+FRAME_SIZE(STACKP) 55 fldt FRAME_SIZE(STACKP ) 56 ret 57 58ENTRY( fabsf ) 59#if defined( __i386__ ) 60 flds FIRST_ARG_OFFSET(STACKP) 61 fabs 62 ret 63#else 64 pcmpeqw %xmm1, %xmm1 //0xffffffff 65 psrld $1, %xmm1 //0x7fffffff 66 andps %xmm1, %xmm0 67 ret 68#endif 69 70ENTRY( fabs ) 71#if defined( __i386__ ) 72 fldl FIRST_ARG_OFFSET(STACKP) 73 fabs 74 ret 75#else 76 pcmpeqw %xmm1, %xmm1 //0xffffffffffffffff 77 psrlq $1, %xmm1 //0x7fffffffffffffff 78 andpd %xmm1, %xmm0 79 ret 80#endif 81 82ENTRY( fabsl ) 83 fldt FIRST_ARG_OFFSET(STACKP) 84 fabs 85 ret 86