shithub: libsamplerate

Download patch

ref: 47fa1bf8fc8b46c21db21233b43a6cde186773a8
parent: 61dee13337cd11360081205d9ea8ed84afec5854
author: Erik de Castro Lopo <[email protected]>
date: Mon Sep 27 07:47:58 EDT 2010

src/float_cast.h : Add lrint/lrintf version for Win64. Thanks to Dmitry Baikov.

--- a/src/float_cast.h
+++ b/src/float_cast.h
@@ -1,5 +1,5 @@
 /*
-** Copyright (C) 2001-2009 Erik de Castro Lopo <[email protected]>
+** Copyright (C) 2001-2010 Erik de Castro Lopo <[email protected]>
 **
 ** This program is free software; you can redistribute it and/or modify
 ** it under the terms of the GNU Lesser General Public License as published by
@@ -16,7 +16,7 @@
 ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */
 
-/* Version 1.4 */
+/* Version 1.5 */
 
 #ifndef FLOAT_CAST_HEADER
 #define FLOAT_CAST_HEADER
@@ -120,6 +120,32 @@
 
 		return retval ;
 	} /* float2int */
+
+#elif (defined (WIN64) || defined(_WIN64))
+
+	/*	Win64 section should be places before Win32 one, because
+	**	most likely both WIN32 and WIN64 will be defined in 64-bit case.
+	*/
+
+	#include	<math.h>
+
+	/*	Win64 doesn't seem to have these functions, nor inline assembly.
+	**	Therefore implement inline versions of these functions here.
+	*/
+	#include    <emmintrin.h>
+	#include    <mmintrin.h>
+
+	__inline long int
+	lrint(double flt)
+	{
+		return _mm_cvtsd_si32(_mm_load_sd(&flt));
+	}
+
+	__inline long int
+	lrintf(float flt)
+	{
+		return _mm_cvtss_si32(_mm_load_ss(&flt));
+	}
 
 #elif (defined (WIN32) || defined (_WIN32))