// File: tobias93[P]piano/rtaudio/RtAudio.cpp
// Function: RtApi::byteSwapBuffer(char*, unsigned int, unsigned long)
void RtApi :: byteSwapBuffer( char *buffer, unsigned int samples, RtAudioFormat format )
{
  char val;
  char *ptr;

  ptr = buffer;
  if ( format == RTAUDIO_SINT16 ) {
    for ( unsigned int i=0; i<samples; i++ ) {
      // Swap 1st and 2nd bytes.
      val = *(ptr);
      *(ptr) = *(ptr+1);
      *(ptr+1) = val;

      // Increment 2 bytes.
      ptr += 2;
    }
  }
  else if ( format == RTAUDIO_SINT32 ||
            format == RTAUDIO_FLOAT32 ) {
    for ( unsigned int i=0; i<samples; i++ ) {
      // Swap 1st and 4th bytes.
      val = *(ptr);
      *(ptr) = *(ptr+3);
      *(ptr+3) = val;

      // Swap 2nd and 3rd bytes.
      ptr += 1;
      val = *(ptr);
      *(ptr) = *(ptr+1);
      *(ptr+1) = val;

      // Increment 3 more bytes.
      ptr += 3;
    }
  }
  else if ( format == RTAUDIO_SINT24 ) {
    for ( unsigned int i=0; i<samples; i++ ) {
      // Swap 1st and 3rd bytes.
      val = *(ptr);
      *(ptr) = *(ptr+2);
      *(ptr+2) = val;

      // Increment 2 more bytes.
      ptr += 2;
    }
  }
  else if ( format == RTAUDIO_FLOAT64 ) {
    for ( unsigned int i=0; i<samples; i++ ) {
      // Swap 1st and 8th bytes
      val = *(ptr);
      *(ptr) = *(ptr+7);
      *(ptr+7) = val;

      // Swap 2nd and 7th bytes
      ptr += 1;
      val = *(ptr);
      *(ptr) = *(ptr+5);
      *(ptr+5) = val;

      // Swap 3rd and 6th bytes
      ptr += 1;
      val = *(ptr);
      *(ptr) = *(ptr+3);
      *(ptr+3) = val;

      // Swap 4th and 5th bytes
      ptr += 1;
      val = *(ptr);
      *(ptr) = *(ptr+1);
      *(ptr+1) = val;

      // Increment 5 more bytes.
      ptr += 5;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movl %edx, -0x14(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x30(%rbp)
cmpq $0x2, -0x20(%rbp)
jne 0xf81d
movl $0x0, -0x34(%rbp)
movl -0x34(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0xf818
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x1(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x30(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x30(%rbp)
movl -0x34(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x34(%rbp)
jmp 0xf7d9
jmp 0xf9d8
cmpq $0x8, -0x20(%rbp)
je 0xf82b
cmpq $0x10, -0x20(%rbp)
jne 0xf8a2
movl $0x0, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0xf89d
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x3(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x3(%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x1(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x30(%rbp), %rax
addq $0x3, %rax
movq %rax, -0x30(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0xf832
jmp 0xf9d6
cmpq $0x4, -0x20(%rbp)
jne 0xf8f4
movl $0x0, -0x3c(%rbp)
movl -0x3c(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0xf8ef
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x2(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x2(%rax)
movq -0x30(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x30(%rbp)
movl -0x3c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x3c(%rbp)
jmp 0xf8b0
jmp 0xf9d4
cmpq $0x20, -0x20(%rbp)
jne 0xf9d2
movl $0x0, -0x40(%rbp)
movl -0x40(%rbp), %eax
cmpl -0x14(%rbp), %eax
jae 0xf9d0
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x7(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x7(%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x5(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x5(%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x3(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x3(%rax)
movq -0x30(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x30(%rbp)
movq -0x30(%rbp), %rax
movb (%rax), %al
movb %al, -0x21(%rbp)
movq -0x30(%rbp), %rax
movb 0x1(%rax), %cl
movq -0x30(%rbp), %rax
movb %cl, (%rax)
movb -0x21(%rbp), %cl
movq -0x30(%rbp), %rax
movb %cl, 0x1(%rax)
movq -0x30(%rbp), %rax
addq $0x5, %rax
movq %rax, -0x30(%rbp)
movl -0x40(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x40(%rbp)
jmp 0xf906
jmp 0xf9d2
jmp 0xf9d4
jmp 0xf9d6
jmp 0xf9d8
popq %rbp
retq
nopw (%rax,%rax)