Transceiver52M: Add SSE floating point / integer conversion
Convertions are performed in multiples of 4 or 8. All loads are
considered unaligned.
Signed-off-by: Thomas Tsou <tom@tsou.cc>
diff --git a/Transceiver52M/radioInterfaceResamp.cpp b/Transceiver52M/radioInterfaceResamp.cpp
index d3dc82e..2b59203 100644
--- a/Transceiver52M/radioInterfaceResamp.cpp
+++ b/Transceiver52M/radioInterfaceResamp.cpp
@@ -49,20 +49,6 @@
short *convertRecvBuffer = NULL;
short *convertSendBuffer = NULL;
-/* Complex float to short conversion */
-static void floatToShort(short *out, float *in, int num)
-{
- for (int i = 0; i < num; i++)
- out[i] = (short) in[i];
-}
-
-/* Complex short to float conversion */
-static void shortToFloat(float *out, short *in, int num)
-{
- for (int i = 0; i < num; i++)
- out[i] = (float) in[i];
-}
-
RadioInterfaceResamp::RadioInterfaceResamp(RadioDevice *wRadio,
int wReceiveOffset,
int wSPS,
@@ -166,8 +152,8 @@
return;
}
- shortToFloat((float *) outerRecvBuffer->begin(),
- convertRecvBuffer, 2 * outer_len);
+ convert_short_float((float *) outerRecvBuffer->begin(),
+ convertRecvBuffer, 2 * outer_len);
underrun |= local_underrun;
readTimestamp += (TIMESTAMP) num_recv;
@@ -206,9 +192,9 @@
LOG(ALERT) << "Sample rate downsampling error";
}
- floatToShort(convertSendBuffer,
- (float *) outerSendBuffer->begin(),
- 2 * outer_len);
+ convert_float_short(convertSendBuffer,
+ (float *) outerSendBuffer->begin(),
+ powerScaling, 2 * outer_len);
num_sent = mRadio->writeSamples(convertSendBuffer,
outer_len,