// File: kylegranger[P]ImageScaling/linear16.cpp
// Function: CLinear16::ChannelSwap(int)
void CLinear16::ChannelSwap(int swap)
{
	color_t *c = mData;
	int numpixels = mWidth * mHeight;
	if (swap == 132)
	{
		for (int i = 0; i < numpixels; i++)
		{
			color_t temp = *c;
			c->g = temp.b;
			c->b = temp.g;
			c++;
		}
	}
	else if (swap == 213)
	{
		for (int i = 0; i < numpixels; i++)
		{
			color_t temp = *c;
			c->r = temp.g;
			c->g = temp.r;
			c++;
		}
	}
	else if (swap == 231)
	{
		for (int i = 0; i < numpixels; i++)
		{
			color_t temp = *c;
			c->r = temp.g;
			c->g = temp.b;
			c->b = temp.r;
			c++;
		}
	}
	else if (swap == 312)
	{
		for (int i = 0; i < numpixels; i++)
		{
			color_t temp = *c;
			c->r = temp.b;
			c->g = temp.r;
			c->b = temp.g;
			c++;
		}
	}
	else if (swap == 321)
	{
		for (int i = 0; i < numpixels; i++)
		{
			color_t temp = *c;
			c->r = temp.b;
			c->b = temp.r;
			c++;
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq -0x8(%rbp), %rcx
movq 0x18(%rcx), %rax
movq %rax, -0x18(%rbp)
movl (%rcx), %eax
imull 0x4(%rcx), %eax
movl %eax, -0x1c(%rbp)
cmpl $0x84, -0xc(%rbp)
jne 0x8836
movl $0x0, -0x20(%rbp)
movl -0x20(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x8831
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x28(%rbp)
movw -0x28(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movw -0x26(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, (%rax)
movq -0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movl -0x20(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x20(%rbp)
jmp 0x87f0
jmp 0x89a9
cmpl $0xd5, -0xc(%rbp)
jne 0x888d
movl $0x0, -0x2c(%rbp)
movl -0x2c(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x8888
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x34(%rbp)
movw -0x32(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x4(%rax)
movw -0x30(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movq -0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movl -0x2c(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x2c(%rbp)
jmp 0x8846
jmp 0x89a7
cmpl $0xe7, -0xc(%rbp)
jne 0x88ef
movl $0x0, -0x38(%rbp)
movl -0x38(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x88ea
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x40(%rbp)
movw -0x3e(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x4(%rax)
movw -0x40(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movw -0x3c(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, (%rax)
movq -0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movl -0x38(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x38(%rbp)
jmp 0x889d
jmp 0x89a5
cmpl $0x138, -0xc(%rbp)      # imm = 0x138
jne 0x894e
movl $0x0, -0x44(%rbp)
movl -0x44(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x894c
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x4c(%rbp)
movw -0x4c(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x4(%rax)
movw -0x48(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x2(%rax)
movw -0x4a(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, (%rax)
movq -0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movl -0x44(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x44(%rbp)
jmp 0x88ff
jmp 0x89a3
cmpl $0x141, -0xc(%rbp)      # imm = 0x141
jne 0x89a1
movl $0x0, -0x50(%rbp)
movl -0x50(%rbp), %eax
cmpl -0x1c(%rbp), %eax
jge 0x899f
movq -0x18(%rbp), %rax
movq (%rax), %rax
movq %rax, -0x58(%rbp)
movw -0x58(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, 0x4(%rax)
movw -0x54(%rbp), %cx
movq -0x18(%rbp), %rax
movw %cx, (%rax)
movq -0x18(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x18(%rbp)
movl -0x50(%rbp), %eax
addl $0x1, %eax
movl %eax, -0x50(%rbp)
jmp 0x895e
jmp 0x89a1
jmp 0x89a3
jmp 0x89a5
jmp 0x89a7
jmp 0x89a9
popq %rbp
retq
nopl (%rax,%rax)