kwave  18.07.70
memcpy.c File Reference
#include <time.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include "cputest.h"
#include <stdio.h>
Include dependency graph for memcpy.c:

Go to the source code of this file.

Macros

#define _(m)   m
 
#define xprintf   printf
 
#define LOG_MODULE   "memcpy"
 
#define LOG_VERBOSE
 
#define HAVE_AVX
 
#define BUFSIZE   1024*1024
 

Functions

void probe_fast_memcpy (void)
 
static uint64_t rdtsc (int config_flags)
 

Variables

void *(* xine_fast_memcpy )(void *to, const void *from, size_t len)
 
struct {
   const char   name [16]
 
   void *(*const   function )(void *to, const void *from,
      size_t len)
 
   uint32_t   cpu_require
 
memcpy_method []
 
static uint64_t memcpy_timing [sizeof(memcpy_method)/sizeof(memcpy_method[0])] = { 0, }
 

Macro Definition Documentation

◆ _

#define _ (   m)    m

Definition at line 66 of file memcpy.c.

Referenced by Kwave::AboutContributor::AboutContributor(), Kwave::AboutDialog::AboutDialog(), Kwave::FileInfoDialog::accept(), Kwave::FlacEncoder::VorbisCommentContainer::add(), addDataStrings(), addIfExists(), Kwave::CodecBase::addMimeType(), Kwave::MenuManager::addNumberedMenuEntry(), Kwave::MultiStateWidget::addPixmap(), Kwave::PlayBackALSA::alsaDeviceName(), Kwave::RecordALSA::alsaDeviceName(), Kwave::AmplifyFreePlugin::AmplifyFreePlugin(), Kwave::LabelItem::appendContextMenu(), Kwave::FileInfoPlugin::apply(), Kwave::FileInfoDialog::autoGenerateKeywords(), Kwave::PlayerToolBar::blinkPause(), Kwave::MP3EncoderDialog::browseFile(), Kwave::TopWidget::clipboardChanged(), Kwave::GotoPlugin::command(), Kwave::InsertAtPlugin::command(), Kwave::Filter::command(), Kwave::SignalWidget::contextMenuEditCopy(), Kwave::SignalWidget::contextMenuEditCut(), Kwave::SignalWidget::contextMenuEditPaste(), Kwave::SignalWidget::contextMenuEditRedo(), Kwave::SignalWidget::contextMenuEditUndo(), Kwave::SignalWidget::contextMenuEvent(), Kwave::LabelItem::contextMenuLabelDelete(), Kwave::TrackView::contextMenuLabelNew(), Kwave::LabelItem::contextMenuLabelProperties(), Kwave::SignalWidget::contextMenuSaveSelection(), Kwave::SignalWidget::contextMenuSelectionExpandToLabels(), Kwave::SignalWidget::contextMenuSelectionNextLabels(), Kwave::SignalWidget::contextMenuSelectionPrevLabels(), Kwave::SignalManager::continueWithoutUndo(), Kwave::SaveBlocksPlugin::createDisplayList(), Kwave::SaveBlocksPlugin::createFileName(), Kwave::K3BExportPlugin::createFileName(), Kwave::CurveWidget::CurveWidget(), Kwave::CodecManager::decodingFilter(), Kwave::PluginManager::defaultParams(), Kwave::FileContext::delegateCommand(), Kwave::FileInfoDialog::describeWidget(), Kwave::CompressionWidget::describeWidget(), Kwave::UndoDeleteMetaDataAction::description(), Kwave::UndoModifyMetaDataAction::description(), Kwave::UndoTransaction::description(), Kwave::K3BExportPlugin::detectBlockMetaData(), Kwave::RIFFParser::detectEndianness(), Kwave::ScaleWidget::drawLinear(), Kwave::ScaleWidget::drawLog(), Kwave::TopWidget::dropEvent(), Kwave::SignalView::dropEvent(), Kwave::UndoDeleteMetaDataAction::dump(), Kwave::UndoModifyMetaDataAction::dump(), Kwave::UndoTransaction::dump(), Kwave::MetaData::dump(), Kwave::DebugPlugin::dump_children(), Kwave::SaveBlocksDialog::emitUpdate(), Kwave::MimeData::encode(), Kwave::MP3Encoder::encode(), Kwave::MP3Encoder::encodeID3Tags(), Kwave::CodecManager::encodingFilter(), Kwave::Parser::escape(), Kwave::Parser::escapeForFileName(), Kwave::MenuManager::executeCommand(), Kwave::TopWidget::executeCommand(), Kwave::App::executeCommand(), Kwave::FileContext::executeCommand(), Kwave::PluginManager::executePlugin(), Kwave::FileDialog::FileDialog(), Kwave::RecordOSS::fileFilter(), Kwave::PlayBackOSS::fileFilter(), Kwave::RecordDevice::fileFilter(), Kwave::PlayBackALSA::fileFilter(), Kwave::PlayBackQt::fileFilter(), Kwave::PlayBackPulseAudio::fileFilter(), Kwave::PlayBackDevice::fileFilter(), Kwave::FileProgress::FileProgress(), Kwave::RecordTypesMap::fill(), Kwave::PlayBackTypesMap::fill(), Kwave::Functions::FunctionTypesMap::fill(), Kwave::SampleFormat::Map::fill(), Kwave::WindowFunction::InitializedTypesMap::fill(), Kwave::FileInfo::PropertyTypesMap::fill(), Kwave::Compression::fillMap(), Kwave::Filter::Filter(), Kwave::SaveBlocksPlugin::findBase(), Kwave::SaveBlocksPlugin::firstIndex(), Kwave::FileProgress::fitUrlLabel(), Kwave::GenreType::fromID3(), Kwave::Parser::fromUrl(), Kwave::AmplifyFreeDialog::getCommand(), Kwave::Curve::getCommand(), Kwave::FileDialog::guessFilterFromFileExt(), Kwave::TrackView::handleContextMenu(), Kwave::MP3Decoder::handleError(), Kwave::GenreType::id(), Kwave::FileContext::init(), Kwave::TopWidget::init(), Kwave::RecordQt::initialize(), Kwave::FileInfoDialog::initInfo(), Kwave::CompressionWidget::initInfo(), Kwave::SampleRatePlugin::interpreteParameters(), Kwave::AmplifyFreePlugin::interpreteParameters(), Kwave::AmplifyFreeDialog::invokeHelp(), Kwave::StringEnterDialog::invokeHelp(), Kwave::VolumeDialog::invokeHelp(), Kwave::MemoryDialog::invokeHelp(), Kwave::SonagramDialog::invokeHelp(), Kwave::MP3EncoderDialog::invokeHelp(), Kwave::FileInfoDialog::invokeHelp(), Kwave::SelectRangeDialog::invokeHelp(), Kwave::NoiseDialog::invokeHelp(), Kwave::LowPassDialog::invokeHelp(), Kwave::PitchShiftDialog::invokeHelp(), Kwave::NewSignalDialog::invokeHelp(), Kwave::NotchFilterDialog::invokeHelp(), Kwave::BandPassDialog::invokeHelp(), Kwave::PlayBackDialog::invokeHelp(), Kwave::RecordDialog::invokeHelp(), Kwave::K3BExportPlugin::knownPatterns(), Kwave::LabelPropertiesWidget::labelName(), Kwave::MP3CodecPlugin::load(), Kwave::StringEnterPlugin::load(), Kwave::DebugPlugin::load(), Kwave::K3BExportPlugin::load(), Kwave::Filter::load(), Kwave::TopWidget::loadFile(), Kwave::MainWidget::loadLabels(), Kwave::CurveWidget::loadPresetList(), Kwave::Logger::log(), main(), Kwave::MenuItem::MenuItem(), Kwave::MenuSub::MenuSub(), Kwave::TopWidget::metaDataChanged(), Kwave::Label::metaDataType(), Kwave::CodecBase::mimeTypeOf(), Kwave::OverViewWidget::mouseDoubleClickEvent(), Kwave::MP3EncoderDialog::MP3EncoderDialog(), Kwave::ms2string(), Kwave::AboutPlugin::name(), Kwave::GenreType::name(), Kwave::Functions::name(), Kwave::App::newInstance(), Kwave::TopWidget::newSignal(), Kwave::MetaData::MetaDataPriv::newUid(), Kwave::Parser::nextParam(), Kwave::MemoryManager::nextSwapFileName(), Kwave::PlayBackOSS::open(), Kwave::AsciiDecoder::open(), Kwave::MP3Decoder::open(), Kwave::FlacDecoder::open(), Kwave::WavDecoder::open(), Kwave::VorbisDecoder::open(), Kwave::PlayBackQt::open(), Kwave::RecordALSA::open(), Kwave::PlayBackPulseAudio::open(), Kwave::Logger::open(), Kwave::PlayBackALSA::openDevice(), Kwave::TopWidget::openFile(), Kwave::FileContext::parseCommands(), Kwave::OpusDecoder::parseComment(), Kwave::OggDecoder::parseHeader(), Kwave::MP3Decoder::parseId3Frame2String(), Kwave::MP3Decoder::parseID3Tags(), Kwave::MP3Decoder::parseMp3Header(), Kwave::VorbisDecoder::parseTag(), Kwave::MenuNode::path(), Kwave::SaveBlocksWidget::pattern(), Kwave::SaveBlocksDialog::pattern(), Kwave::K3BExportDialog::pattern(), Kwave::PlayerToolBar::PlayerToolBar(), probe_fast_memcpy(), Kwave::App::processCmdline(), Kwave::RecordDialog::rate2string(), Kwave::RecordDialog::RecordDialog(), Kwave::RecordPlugin::resetRecording(), Kwave::ReversePlugin::run(), Kwave::DebugPlugin::run(), sanitized(), Kwave::MP3EncoderDialog::save(), Kwave::SonagramWindow::save(), Kwave::Filter::save(), Kwave::SignalManager::save(), Kwave::K3BExportPlugin::saveBlocks(), Kwave::SaveBlocksWidget::SaveBlocksWidget(), Kwave::FileDialog::saveConfig(), Kwave::K3BExportPlugin::saveDocumentData(), Kwave::FileContext::saveFileAs(), Kwave::K3BExportPlugin::saveGeneralDocumentData(), Kwave::K3BExportPlugin::saveK3BFile(), Kwave::MainWidget::saveLabels(), Kwave::PluginManager::savePluginDefaults(), Kwave::CurveWidget::savePreset(), Kwave::PlayBackQt::scanDevices(), Kwave::PlayBackALSA::scanDevices(), Kwave::RecordALSA::scanDevices(), Kwave::RecordQt::scanDevices(), Kwave::PlayBackPulseAudio::scanDevices(), Kwave::RecordPulseAudio::scanDevices(), scanDirectory(), Kwave::MP3EncoderDialog::searchPath(), Kwave::PluginManager::searchPluginModules(), Kwave::FileDialog::selectedExtension(), Kwave::TopWidget::selectionChanged(), Kwave::PlayBackDialog::selectPlaybackDevice(), Kwave::RecordDialog::selectRecordDevice(), Kwave::PlayBackDialog::setChannels(), Kwave::PlayBackDialog::setDevice(), Kwave::RecordPlugin::setDevice(), Kwave::PlayBackDialog::setMethod(), Kwave::RecordPlugin::setMethod(), Kwave::AmplifyFreeDialog::setParams(), Kwave::RecordDialog::setState(), Kwave::PlayBackDialog::setSupportedDevices(), Kwave::RecordDialog::setSupportedDevices(), Kwave::RecordDialog::setTracks(), Kwave::TopWidget::setUndoRedoInfo(), Kwave::NewSignalPlugin::setup(), Kwave::SaveBlocksPlugin::setup(), Kwave::SelectRangePlugin::setup(), Kwave::AmplifyFreePlugin::setup(), Kwave::GotoPluginBase::setup(), Kwave::DebugPlugin::setup(), Kwave::RecordPlugin::setup(), Kwave::PlayBackPlugin::setup(), Kwave::K3BExportPlugin::setup(), Kwave::OpusEncoder::setupBitrate(), Kwave::OpusEncoder::setupDownMix(), Kwave::FileInfoDialog::setupFileInfoTab(), Kwave::FileInfoDialog::setupMiscellaneousTab(), Kwave::SignalManager::signalName(), Kwave::SonagramWindow::SonagramWindow(), Kwave::MenuItem::specialCommand(), Kwave::MenuSub::specialCommand(), Kwave::MenuRoot::specialCommand(), Kwave::MenuNode::specialCommand(), Kwave::Parser::splitCommands(), Kwave::GotoPluginBase::start(), Kwave::SaveBlocksPlugin::start(), Kwave::K3BExportPlugin::start(), Kwave::RecordPlugin::startRecording(), Kwave::string2date(), Kwave::RecordOSS::supportedDevices(), Kwave::PlayBackOSS::supportedDevices(), Kwave::PlayBackALSA::supportedDevices(), Kwave::RecordALSA::supportedDevices(), Kwave::PlayBackQt::supportedDevices(), Kwave::PlayBackPulseAudio::supportedDevices(), Kwave::RecordQt::supportedDevices(), Kwave::RecordPulseAudio::supportedDevices(), Kwave::PlayBackPlugin::testPlayBack(), Kwave::Parser::toBool(), Kwave::TopWidget::toolbarEditCopy(), Kwave::TopWidget::toolbarEditCut(), Kwave::TopWidget::toolbarEditDelete(), Kwave::TopWidget::toolbarEditErase(), Kwave::TopWidget::toolbarEditPaste(), Kwave::TopWidget::toolbarEditRedo(), Kwave::TopWidget::toolbarEditUndo(), Kwave::TopWidget::toolbarFileClose(), Kwave::TopWidget::toolbarFileNew(), Kwave::TopWidget::toolbarFileOpen(), Kwave::TopWidget::toolbarFileSave(), Kwave::TopWidget::toolbarFileSaveAs(), Kwave::PlayerToolBar::toolbarForward(), Kwave::PlayerToolBar::toolbarForwardNext(), Kwave::PlayerToolBar::toolbarRecord(), Kwave::TopWidget::toolbarRecord(), Kwave::PlayerToolBar::toolbarRewind(), Kwave::PlayerToolBar::toolbarRewindPrev(), Kwave::SelectionBorderItem::toolTip(), Kwave::LabelItem::toolTip(), Kwave::TopWidget::TopWidget(), Kwave::FileInfoDialog::tracksChanged(), Kwave::NewSignalDialog::tracksChanged(), Kwave::TrackView::TrackView(), Kwave::UndoReverseAction::undo(), Kwave::RecordDialog::updateBufferState(), Kwave::VolumeDialog::updateDisplay(), Kwave::NoiseDialog::updateDisplay(), Kwave::TopWidget::updateMenu(), Kwave::TopWidget::updateRecentFiles(), Kwave::PitchShiftDialog::updateSpeed(), Kwave::PlayerToolBar::updateState(), Kwave::ZoomToolBar::updateToolbar(), Kwave::urlScheme(), Kwave::WavDecoder::WavDecoder(), Kwave::MainWidget::wheelEvent(), Kwave::OpusEncoder::writeOpusTags(), Kwave::zoom2string(), Kwave::ZoomToolBar::zoomAll(), Kwave::ZoomToolBar::zoomIn(), Kwave::ZoomToolBar::zoomNormal(), Kwave::ZoomToolBar::zoomOut(), Kwave::ZoomToolBar::zoomSelection(), Kwave::ZoomToolBar::ZoomToolBar(), and Kwave::Logger::~Logger().

◆ BUFSIZE

#define BUFSIZE   1024*1024

Definition at line 600 of file memcpy.c.

Referenced by probe_fast_memcpy().

◆ HAVE_AVX

#define HAVE_AVX

Definition at line 74 of file memcpy.c.

◆ LOG_MODULE

#define LOG_MODULE   "memcpy"

Definition at line 72 of file memcpy.c.

◆ LOG_VERBOSE

#define LOG_VERBOSE

Definition at line 73 of file memcpy.c.

◆ xprintf

#define xprintf   printf

Definition at line 67 of file memcpy.c.

Referenced by probe_fast_memcpy(), and rdtsc().

Function Documentation

◆ probe_fast_memcpy()

void probe_fast_memcpy ( void  )

Definition at line 604 of file memcpy.c.

References _, BUFSIZE, cpu_require, lprintf, memcpy_method, memcpy_timing, name, rdtsc(), xine_fast_memcpy, xine_mm_accel(), and xprintf.

Referenced by addDataStrings(), and main().

606 {
607  uint64_t t;
608  char *buf1, *buf2;
609  int i, j, best;
610  int config_flags = -1;
611 
612 #ifdef XINE_COMPILE
613 
614  static const char *const memcpy_methods[] = {
615  "probe", "libc",
616 #if (defined(ARCH_X86) || defined(ARCH_X86_64))
617  "kernel", "mmx", "mmxext", "sse",
618 # ifdef HAVE_AVX
619  "avx",
620 # endif /* HAVE_AVX */
621 #endif
622  NULL
623  };
624 
625  config_flags = xine_mm_accel();
626 
627  best = xine->config->register_enum (xine->config, "engine.performance.memcpy_method", 0,
628  (char **)memcpy_methods,
629  _("memcopy method used by xine"),
630  _("The copying of large memory blocks is one of the most "
631  "expensive operations on todays computers. Therefore xine "
632  "provides various tuned methods to do this copying. "
633  "Usually, the best method is detected automatically."),
634  20, update_fast_memcpy, (void *) xine);
635 
636  /* check if function is configured and valid for this machine */
637  if( best != 0 &&
638  best < sizeof(memcpy_methods)/sizeof(memcpy_method[0]) &&
639  (config_flags & memcpy_method[best].cpu_require) ==
640  memcpy_method[best].cpu_require ) {
641  lprintf("using %s memcpy()\n", memcpy_method[best].name );
642  xine_fast_memcpy = memcpy_method[best].function;
643  return;
644  }
645 #else /* XINE_COMPILE */
646  config_flags = xine_mm_accel();
647 #endif /* XINE_COMPILE */
648  best = 0;
649 
650  xine_fast_memcpy = memcpy;
651 
652  if( (buf1 = malloc(BUFSIZE)) == NULL )
653  return;
654 
655  if( (buf2 = malloc(BUFSIZE)) == NULL ) {
656  free(buf1);
657  return;
658  }
659 
660  xprintf(_("Benchmarking memcpy methods (smaller is better):\n"));
661  /* make sure buffers are present on physical memory */
662  memset(buf1,0,BUFSIZE);
663  memset(buf2,0,BUFSIZE);
664 
665  /* some initial activity to ensure that we're not running slowly :-) */
666  for(j=0;j<50;j++) {
667  memcpy_method[1].function(buf2,buf1,BUFSIZE);
668  memcpy_method[1].function(buf1,buf2,BUFSIZE);
669  }
670 
671  for(i=1; memcpy_method[i].name[0]; i++)
672  {
673  if( (config_flags & memcpy_method[i].cpu_require) !=
674  memcpy_method[i].cpu_require )
675  continue;
676 
677  t = rdtsc(config_flags);
678  for(j=0;j<50;j++) {
679  memcpy_method[i].function(buf2,buf1,BUFSIZE);
680  memcpy_method[i].function(buf1,buf2,BUFSIZE);
681  }
682 
683  t = rdtsc(config_flags) - t;
684  memcpy_timing[i] = t;
685 
686  xprintf("\t%s : %lld\n", memcpy_method[i].name, (long long int)t);
687 
688  if( best == 0 || t < memcpy_timing[best] )
689  best = i;
690  }
691 
692 #ifdef XINE_COMPILE
693  xine->config->update_num (xine->config, "engine.performance.memcpy_method", best);
694 #else /* XINE_COMPILE */
695  xprintf("using -> '%s'\n", memcpy_method[best].name);
696  xine_fast_memcpy = memcpy_method[best].function;
697 #endif /* XINE_COMPILE */
698 
699  free(buf1);
700  free(buf2);
701 }
#define xprintf
Definition: memcpy.c:67
#define lprintf
Definition: cpu_accel.cpp:58
static const struct @1 memcpy_method[]
const char name[16]
Definition: memcpy.c:510
static uint64_t memcpy_timing[sizeof(memcpy_method)/sizeof(memcpy_method[0])]
Definition: memcpy.c:530
void *(* xine_fast_memcpy)(void *to, const void *from, size_t len)
Definition: memcpy.c:87
#define BUFSIZE
Definition: memcpy.c:600
uint32_t cpu_require
Definition: memcpy.c:513
#define _(m)
Definition: memcpy.c:66
static uint64_t rdtsc(int config_flags)
Definition: memcpy.c:564
uint32_t xine_mm_accel(void)
Definition: cpu_accel.cpp:398
Here is the call graph for this function:
Here is the caller graph for this function:

◆ rdtsc()

static uint64_t rdtsc ( int  config_flags)
static

Definition at line 564 of file memcpy.c.

References cpu_require, lprintf, memcpy_method, name, xine_fast_memcpy, xine_mm_accel(), and xprintf.

Referenced by probe_fast_memcpy().

565 {
566  (void)config_flags;
567  /* FIXME: implement an equivalent for using optimized memcpy on other
568  architectures */
569 #ifdef HAVE_SYS_TIMES_H
570  struct tms tp;
571  return times(&tp);
572 #else
573  return clock();
574 #endif /* HAVE_SYS_TIMES_H */
575 }
Here is the call graph for this function:
Here is the caller graph for this function:

Variable Documentation

◆ cpu_require

uint32_t cpu_require

Definition at line 513 of file memcpy.c.

Referenced by probe_fast_memcpy(), and rdtsc().

◆ function

void*(*const function) (void *to, const void *from, size_t len)

Definition at line 511 of file memcpy.c.

◆ memcpy_method

const { ... } memcpy_method[]
Initial value:
=
{
{ "", NULL, 0 },
{ "libc", memcpy, 0 },
{ "", NULL, 0 }
}

Referenced by probe_fast_memcpy(), and rdtsc().

◆ memcpy_timing

uint64_t memcpy_timing[sizeof(memcpy_method)/sizeof(memcpy_method[0])] = { 0, }
static

Definition at line 530 of file memcpy.c.

Referenced by probe_fast_memcpy().

◆ name

const char name[16]

Definition at line 510 of file memcpy.c.

Referenced by Kwave::RIFFParser::addGarbageChunk(), Kwave::PlayBackALSA::alsaDeviceName(), Kwave::RecordALSA::alsaDeviceName(), Kwave::Compression::assign(), Kwave::SignalManager::canRedo(), Kwave::PlayBackPulseAudio::connectToServer(), Kwave::RecordPulseAudio::connectToServer(), Kwave::PluginManager::createPluginInstance(), Kwave::PluginManager::defaultParams(), Kwave::UndoDeleteMetaDataAction::description(), Kwave::UndoModifyMetaDataAction::description(), Kwave::RIFFParser::detectEndianness(), Kwave::OggEncoder::encode(), Kwave::CodecManager::encodingMimeTypes(), Kwave::FileContext::executeCommand(), Kwave::PluginManager::executePlugin(), Kwave::Interpolation::find(), Kwave::FileInfoDialog::info(), Kwave::RecordALSA::initialize(), Kwave::RecordPulseAudio::initialize(), Kwave::PluginManager::loadAllPlugins(), Kwave::MainWidget::loadLabels(), Kwave::CurveWidget::loadPresetList(), Kwave::FileContext::metaDataChanged(), Kwave::Label::metaDataType(), Kwave::MP3EncoderDialog::MP3EncoderDialog(), Kwave::App::newInstance(), Kwave::PlayBackPulseAudio::notifySinkInfo(), Kwave::RecordPulseAudio::notifySourceInfo(), Kwave::AsciiDecoder::open(), Kwave::WavDecoder::open(), Kwave::PlayBackPulseAudio::open(), Kwave::Logger::open(), Kwave::TopWidget::openFiles(), Kwave::Label::operator==(), Kwave::RIFFParser::parse(), Kwave::FileContext::parseCommands(), Kwave::FlacDecoder::parseVorbisComments(), probe_fast_memcpy(), rdtsc(), Kwave::SignalManager::redo(), Kwave::Filter::save(), Kwave::FileContext::saveFileAs(), Kwave::MainWidget::saveLabels(), Kwave::PluginManager::savePluginDefaults(), Kwave::CurveWidget::savePreset(), Kwave::PlayBackALSA::scanDevices(), Kwave::RecordALSA::scanDevices(), Kwave::PlayBackPulseAudio::scanDevices(), Kwave::RecordPulseAudio::scanDevices(), Kwave::PluginManager::searchPluginModules(), Kwave::SignalManager::undo(), Kwave::UndoAddMetaDataAction::UndoAddMetaDataAction(), Kwave::MP3EncoderDialog::updateEncoderInfo(), Kwave::TopWidget::updateMenu(), Kwave::WavDecoder::WavDecoder(), Kwave::FileContext::windowCaption(), Kwave::WavEncoder::writeInfoChunk(), Kwave::WavEncoder::writeLabels(), Kwave::GenreType::~GenreType(), and Kwave::PluginManager::~PluginManager().

◆ xine_fast_memcpy

void *(* xine_fast_memcpy)(void *to, const void *from, size_t len)

Definition at line 87 of file memcpy.c.

Referenced by probe_fast_memcpy(), and rdtsc().