rem: CallHookA( AudioCtrl->ahiac_SamplerFunc, (Object*) AudioCtrl, &rm );
context: RecordInterrupt( struct EMU10kxData* dd )#endif{  struct AHIAudioCtrlDrv* AudioCtrl = dd->audioctrl;  struct DriverBase*  AHIsubBase = (struct DriverBase*) dd->ahisubbase;  struct EMU10kxBase* EMU10kxBase = (struct EMU10kxBase*) AHIsubBase;  struct AHIRecordMessage rm =  {    AHIST_S16S,    dd->current_record_buffer,    RECORD_BUFFER_SAMPLES / 2  };  int   i   = 0;  WORD* ptr = dd->current_record_buffer;  if( EMU10kxBase->flush_caches )  {    // This is used to invalidate the cache    CacheClearE( dd->current_record_buffer,		 RECORD_BUFFER_SAMPLES / 2 * 4,		 CACRF_ClearD );  }  while( i < RECORD_BUFFER_SAMPLES / 2 * 2 )  {    *ptr = ( ( *ptr & 0xff ) << 8 ) | ( ( *ptr & 0xff00 ) >> 8 );    ++i;    ++ptr;  }  if( EMU10kxBase->flush_caches )  {    // This is used to make sure the call above doesn't pushes dirty data    // the next time it's called. God help us if dd->current_record_buffer    // is not a the beginning of a cache line and there are dirty data    // in the DMA buffer before or after the current buffer. Ok I will stop    // talking now. Thanks for listening.        CacheClearE( dd->current_record_buffer,		 RECORD_BUFFER_SAMPLES / 2 * 4,		 CACRF_ClearD );  }  CallHookA( AudioCtrl->ahiac_SamplerFunc, (Object*) AudioCtrl, &rm );  dd->record_interrupt_enabled = TRUE;}