| Commit message (Collapse) | Author | Age | Files | Lines | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The existence of SSSE3 intrinsic headers is not a sufficient
condition that SSSE3 support is available, which may lead to
'illegal instruction' runtime failuire on some platforms. Major
OS distributions (Ubuntu, Fedora, etc.) include x86_64
intrinsic headers, though the underlying architecture may or
may not support the instruction set.
Assuming SSE2 availability is safe as instructions are present on
all x86_64 architectures for which instrinsic headers would be
present. The same cannot be said for SSSE3.
Issue: #1761
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Implementation uses SSSE3 intructions to perform 12-bit
sample pack/unpack operations to/from standard 16 and 32
bit host values. Input/output shuffle orderings for a
single 128-bit SSE register with 16-bit integers shown
below.
   16-bit interleaved I/Q
  ---------------------------------------
 | Q3 | I3 | Q2 | I2 | Q1 | I1 | Q0 | I0 | Input
  ---------------------------------------
 | 127                                 0 |
     12-bit packed I/Q byteswapped
      -----------------------
     |   I0   |   Q0   |  I1 | 0
     |-----------------------|
     | I1 |  Q1  |  I2  | Q2 |             Output
     |-----------------------|
     | Q2  |   I3   |   Q3   |
     |-----------------------|
     |        Unused         | 3
      -----------------------
     31                     0
Fixes: #1740, #966
Related: #1739
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Create missing sc12-sc16 and sc16-sc12 type converters. To avoid
replicating the full sc12 converter class object, overload the
converter calls with C++11 std::enable_if metafunctions. When
used with std::is_floating and std::is_integral templates, this
allow a single template interface with compile time function
selection and static type checking.
Note the below std::enable_if interface is confusing, but quite
effective in this case.
  typename enable_if<is_floating_point<type>::value>::type* = NULL
Fixes: #966
Related: #967, #1721
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
Note: This is the first commit that uses for-range, and range-based
for-loops are now usable for UHD development.
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
types)
- Also removes all references to boost/cstdint.hpp and replaces it with
  stdint.h (The 'correct' replacement would be <cstdint>, but not all of our
  compilers support that).
 | 
| |\  
| | 
| | 
| | 
| |  | 
Conflicts:
	host/lib/usrp/b200/b200_impl.cpp
 | 
| | |  | 
 | 
| |\|  | 
 | 
| | |  | 
 | 
| |\|  | 
 | 
| | | 
| | 
| | 
| | 
| | 
| | 
| | 
| |  | 
Unrolling the RX loop showed marked improvement with perf. The TX path
was only slightly better. Checked signal correctness with shinysdr to verify
received signal and tx_waveforms into a spectrum analyzer for TX.
Signed-off-by: Philip Balister <philip@opensdr.com>
 | 
| | |  | 
 | 
| |\|  | 
 | 
| | |  | 
 | 
| |/   | 
 | 
| | 
| 
| 
| 
|  | 
- u8: Converts arbitrary-length strings from and to item32
- item32->item32 memcpy non-conversion
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
The sc16-sc16 wire to host type converter is effectively an I/Q swap
or 16-bit byteswap for little and big endian cases respectively. This
implmentation is a subset of fc32 and fc64 converters without the
floating point portion and scaling.
The resulting byte ordering is as follows:
  -----------------
  | A | B | C | D |   Wire
  -----------------
    0   1   2   3
  -----------------
  | C | D | A | B |   Litte-endian
  -----------------
    0   1   2   3
  -----------------
  | B | A | D | C |   Big-endian
  -----------------
    0   1   2   3
Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
- Converter ID symbols are exported
- to_string() function for lighter feedback
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
This patch addresses issue #648 "B200: TX with SC12 format and MIMO".
The observed MIMO header corruption was caused by overwriting the
end of the packed 12-bit sample output buffer. The overwrite was due to
the converter call always writing out 4 complex samples even if less
than 4 samples were available. The extra samples would corrupt data with
zero padding.
Avoid the overwrite condition by only writing the minimum number of
32-bit lines necessary rather than the entire 12 byte struct.
Samples        32-bit lines
  1                 1
  2                 2
  3                 3
  4                 3
Signed-off-by: Tom Tsou <tom@tsou.cc>
 | 
| | 
| 
| 
| 
| 
| 
| 
| 
| 
| 
| 
|  | 
Resolve issue #666 "B200: Rx signal distortion when using SC12".
During 12-bit unpacking, OTW samples are shifted into the high order
bits of the 16-bit intermediate values. The remaining 4-bits are not
zeroed and contain bits from adjacent samples. Consequently, signal
distortion becomes noticable with spurs and other random signal
garbage when operating at low signal levels.
Signed-off-by: Tom Tsou <tom@tsou.cc>
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
|  | 
* The UNSET command didn't exist back then, but using SET with no value does the same thing
* CMake 2.6 doesn't like nested parantheses in IF statements, so tweak IF/ELSE statements
 | 
| |\   | 
 | 
| | |  | 
 | 
| |/  
|   
|   
|   
|   
|   
|    | 
Use the flags passed in from the toolchain. If this test runs on a hard-float
system, bad things happen.
Signed-off-by: Philip Balister <philip@opensdr.com>
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| |  | 
 | 
| | 
| 
| 
| 
| 
| 
|  | 
neon: missing header
windows: shuffle needs to be deemed "constant expression",
fixed with a template parameter.
 | 
| |  | 
 | 
| |\   | 
 | 
| | | 
| | 
| | 
| | 
| | 
| | 
| |  | 
Its important to use a signed cast when converting float to int.
Then assign that signed int to an unsigned type of the same width.
Its undefined behaviour when converting a negative float to an unsigned int.
 | 
| |/  
|   
|   
|    | 
We can now test generic conversion implementations against SIMD (for example)
 | 
| | 
| 
| 
| 
| 
| 
| 
|  | 
given performance benchmarks involving the converter,
when the driver is also doing other things
sc8 conversions will still involve tables since
no SIMD implementations exist yet
 | 
| | 
| 
| 
| 
| 
| 
|  | 
1) this was registered as the sc8 to sc16 converter,
probably messed that up as well
2) the cast to index was wrong, now unit test passes
 | 
| |\   | 
 |