this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at fixPythonPipStalling 130 lines 3.3 kB view raw
1/* 2 * xmm_dimMinMax.c 3 * xmmLibm 4 * 5 * Created by Ian Ollmann, Ph.D. on 8/15/05. 6 * Copyright © 2005 Apple Computer, Inc. All rights reserved. 7 * 8 */ 9 10 11#include "xmmLibm_prefix.h" 12#include "math.h" 13 14#if defined( BUILDING_FOR_CARBONCORE_LEGACY ) 15double fdim( double x, double y ) 16{ 17 xDouble xx = DOUBLE_2_XDOUBLE(x); 18 xDouble yy = DOUBLE_2_XDOUBLE(y); 19 20 xDouble isNaN = _mm_cmpunord_pd( xx, yy ); 21 xDouble testX = _mm_andnot_pd( isNaN, xx ); 22 xDouble testY = _mm_andnot_pd( isNaN, yy ); 23 xDouble xGTy = _mm_cmplt_sd( testY, testX ); 24 xGTy = _mm_or_pd( xGTy, isNaN ); 25 26 xx = _mm_and_pd( xx, xGTy ); 27 yy = _mm_and_pd( yy, xGTy ); 28 xx = _mm_sub_sd( xx, yy ); 29 30 return XDOUBLE_2_DOUBLE( xx ); 31} 32 33double fmax( double x, double y ) 34{ 35 xDouble xx = DOUBLE_2_XDOUBLE(x); 36 xDouble yy = DOUBLE_2_XDOUBLE(y); 37 38 xDouble isNaN = _mm_cmpunord_pd( xx, yy ); 39 xDouble yIsNaN = _mm_cmpunord_pd( yy, yy ); 40 xDouble xEQy = _mm_cmpeq_pd( xx, yy ); 41 xDouble safeX = _mm_andnot_pd( isNaN, xx ); 42 xDouble safeY = _mm_andnot_pd( isNaN, yy ); 43 xDouble xGTy = _mm_cmplt_sd( safeY, safeX ); 44 xDouble xGEy = _mm_or_pd( xGTy, xEQy ); 45 xGEy = _mm_or_pd( xGEy, yIsNaN ); 46 47 xx = _mm_sel_pd( yy, xx, xGEy ); 48 49 return XDOUBLE_2_DOUBLE( xx ); 50} 51 52double fmin( double x, double y ) 53{ 54 xDouble xx = DOUBLE_2_XDOUBLE(x); 55 xDouble yy = DOUBLE_2_XDOUBLE(y); 56 57 xDouble isNaN = _mm_cmpunord_pd( xx, yy ); 58 xDouble yIsNaN = _mm_cmpunord_pd( yy, yy ); 59 xDouble xEQy = _mm_cmpeq_pd( xx, yy ); 60 xDouble safeX = _mm_andnot_pd( isNaN, xx ); 61 xDouble safeY = _mm_andnot_pd( isNaN, yy ); 62 xDouble xLTy = _mm_cmplt_sd( safeX, safeY ); 63 xDouble xLEy = _mm_or_pd( xLTy, xEQy ); 64 xLEy = _mm_or_pd( xLEy, yIsNaN ); 65 66 xx = _mm_sel_pd( yy, xx, xLEy ); 67 68 return XDOUBLE_2_DOUBLE( xx ); 69} 70 71#else 72float fdimf( float x, float y ) 73{ 74 xFloat xx = FLOAT_2_XFLOAT(x); 75 xFloat yy = FLOAT_2_XFLOAT(y); 76 77 xFloat isNaN = _mm_cmpunord_ps( xx, yy ); 78 xFloat testX = _mm_andnot_ps( isNaN, xx ); 79 xFloat testY = _mm_andnot_ps( isNaN, yy ); 80 xFloat xGTy = _mm_cmplt_ss( testY, testX ); 81 xGTy = _mm_or_ps( xGTy, isNaN ); 82 83 xx = _mm_and_ps( xx, xGTy ); 84 yy = _mm_and_ps( yy, xGTy ); 85 xx = _mm_sub_ss( xx, yy ); 86 87 return XFLOAT_2_FLOAT( xx ); 88} 89 90float fmaxf( float x, float y ) 91{ 92 xFloat xx = FLOAT_2_XFLOAT(x); 93 xFloat yy = FLOAT_2_XFLOAT(y); 94 95 xFloat isNaN = _mm_cmpunord_ps( xx, yy ); 96 xFloat yIsNaN = _mm_cmpunord_ps( yy, yy ); 97 xFloat xEQy = _mm_cmpeq_ss( xx, yy ); 98 xFloat safeX = _mm_andnot_ps( isNaN, xx ); 99 xFloat safeY = _mm_andnot_ps( isNaN, yy ); 100 xFloat xGTy = _mm_cmplt_ss( safeY, safeX ); 101 xFloat xGEy = _mm_or_ps( xGTy, xEQy ); 102 xGEy = _mm_or_ps( xGEy, yIsNaN ); 103 104 xx = _mm_sel_ps( yy, xx, xGEy ); 105 106 return XFLOAT_2_FLOAT( xx ); 107} 108 109float fminf( float x, float y ) 110{ 111 xFloat xx = FLOAT_2_XFLOAT(x); 112 xFloat yy = FLOAT_2_XFLOAT(y); 113 114 xFloat isNaN = _mm_cmpunord_ps( xx, yy ); 115 xFloat yIsNaN = _mm_cmpunord_ps( yy, yy ); 116 xFloat xEQy = _mm_cmpeq_ps( xx, yy ); 117 xFloat safeX = _mm_andnot_ps( isNaN, xx ); 118 xFloat safeY = _mm_andnot_ps( isNaN, yy ); 119 xFloat xLTy = _mm_cmplt_ss( safeX, safeY ); 120 xFloat xLEy = _mm_or_ps( xLTy, xEQy ); 121 xLEy = _mm_or_ps( xLEy, yIsNaN ); 122 123 xx = _mm_sel_ps( yy, xx, xLEy ); 124 125 return XFLOAT_2_FLOAT( xx ); 126} 127 128#endif /* CARBONCORE_LEGACY */ 129 130