// File: tomfunkhouser[P]gaps/pkgs/jpeg/jdmarker.c
// Function: get_dqt
LOCAL(jboolean)
get_dqt (j_decompress_ptr cinfo)
/* Process a DQT marker */
{
  INT32 length;
  int n, i, prec;
  unsigned int tmp;
  JQUANT_TBL *quant_ptr;
  INPUT_VARS(cinfo);

  INPUT_2BYTES(cinfo, length, return FALSE);
  length -= 2;

  while (length > 0) {
    INPUT_BYTE(cinfo, n, return FALSE);
    prec = n >> 4;
    n &= 0x0F;

    TRACEMS2(cinfo, 1, JTRC_DQT, n, prec);

    if (n >= NUM_QUANT_TBLS)
      ERREXIT1(cinfo, JERR_DQT_INDEX, n);
      
    if (cinfo->quant_tbl_ptrs[n] == NULL)
      cinfo->quant_tbl_ptrs[n] = jpeg_alloc_quant_table((j_common_ptr) cinfo);
    quant_ptr = cinfo->quant_tbl_ptrs[n];

    for (i = 0; i < DCTSIZE2; i++) {
      if (prec)
	INPUT_2BYTES(cinfo, tmp, return FALSE);
      else
	INPUT_BYTE(cinfo, tmp, return FALSE);
      /* We convert the zigzag-order table to natural array order. */
      quant_ptr->quantval[jpeg_natural_order[i]] = (UINT16) tmp;
    }

    if (cinfo->err->trace_level >= 2) {
      for (i = 0; i < DCTSIZE2; i += 8) {
	TRACEMS8(cinfo, 2, JTRC_QUANTVALS,
		 quant_ptr->quantval[i],   quant_ptr->quantval[i+1],
		 quant_ptr->quantval[i+2], quant_ptr->quantval[i+3],
		 quant_ptr->quantval[i+4], quant_ptr->quantval[i+5],
		 quant_ptr->quantval[i+6], quant_ptr->quantval[i+7]);
      }
    }

    length -= DCTSIZE2+1;
    if (prec) length -= DCTSIZE2;
  }

  if (length != 0)
    ERREXIT(cinfo, JERR_BAD_LENGTH);

  INPUT_SYNC(cinfo);
  return TRUE;
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x48(%rsp)
movq 0x48(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, 0x20(%rsp)
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0xe8327
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe830c
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
shll $0x8, %eax
movl %eax, %eax
movq %rax, 0x40(%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0xe8398
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe837d
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
addq 0x40(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
subq $0x2, %rax
movq %rax, 0x40(%rsp)
cmpq $0x0, 0x40(%rsp)
jle 0xe8833
jmp 0xe83e0
cmpq $0x0, 0x10(%rsp)
jne 0xe8425
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe840a
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
movl %eax, 0x3c(%rsp)
movl 0x3c(%rsp), %eax
sarl $0x4, %eax
movl %eax, 0x34(%rsp)
movl 0x3c(%rsp), %eax
andl $0xf, %eax
movl %eax, 0x3c(%rsp)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl $0x51, 0x28(%rax)
movl 0x3c(%rsp), %ecx
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl %ecx, 0x2c(%rax)
movl 0x34(%rsp), %ecx
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl %ecx, 0x30(%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x48(%rsp), %rdi
movl $0x1, %esi
callq *%rax
cmpl $0x4, 0x3c(%rsp)
jl 0xe84dd
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl $0x1f, 0x28(%rax)
movl 0x3c(%rsp), %ecx
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl %ecx, 0x2c(%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
movq 0x48(%rsp), %rax
movslq 0x3c(%rsp), %rcx
cmpq $0x0, 0xc8(%rax,%rcx,8)
jne 0xe8511
movq 0x48(%rsp), %rdi
callq 0xf9270
movq %rax, %rdx
movq 0x48(%rsp), %rax
movslq 0x3c(%rsp), %rcx
movq %rdx, 0xc8(%rax,%rcx,8)
movq 0x48(%rsp), %rax
movslq 0x3c(%rsp), %rcx
movq 0xc8(%rax,%rcx,8), %rax
movq %rax, 0x28(%rsp)
movl $0x0, 0x38(%rsp)
cmpl $0x40, 0x38(%rsp)
jge 0xe86c6
cmpl $0x0, 0x34(%rsp)
je 0xe8627
jmp 0xe8548
cmpq $0x0, 0x10(%rsp)
jne 0xe858d
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe8572
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
shll $0x8, %eax
movl %eax, 0x30(%rsp)
cmpq $0x0, 0x10(%rsp)
jne 0xe85fb
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe85e0
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
addl 0x30(%rsp), %eax
movl %eax, 0x30(%rsp)
jmp 0xe8696
jmp 0xe8629
cmpq $0x0, 0x10(%rsp)
jne 0xe866e
movq 0x20(%rsp), %rax
movq 0x18(%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
cmpl $0x0, %eax
jne 0xe8653
movl $0x0, 0x54(%rsp)
jmp 0xe887f
movq 0x20(%rsp), %rax
movq (%rax), %rax
movq %rax, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq 0x8(%rax), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rax
addq $-0x1, %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
movq %rax, %rcx
addq $0x1, %rcx
movq %rcx, 0x18(%rsp)
movzbl (%rax), %eax
movl %eax, 0x30(%rsp)
jmp 0xe8696
movl 0x30(%rsp), %eax
movw %ax, %dx
movq 0x28(%rsp), %rax
movslq 0x38(%rsp), %rsi
leaq 0x4eeb2(%rip), %rcx     # 0x137560
movslq (%rcx,%rsi,4), %rcx
movw %dx, (%rax,%rcx,2)
movl 0x38(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x38(%rsp)
jmp 0xe8530
movq 0x48(%rsp), %rax
movq (%rax), %rax
cmpl $0x2, 0x7c(%rax)
jl 0xe880b
movl $0x0, 0x38(%rsp)
cmpl $0x40, 0x38(%rsp)
jge 0xe8809
jmp 0xe86ed
movq 0x48(%rsp), %rax
movq (%rax), %rax
addq $0x2c, %rax
movq %rax, 0x8(%rsp)
movq 0x28(%rsp), %rax
movslq 0x38(%rsp), %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, (%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x1, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x4(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x2, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x8(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x3, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0xc(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x4, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x10(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x5, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x14(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x6, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x18(%rax)
movq 0x28(%rsp), %rax
movl 0x38(%rsp), %ecx
addl $0x7, %ecx
movslq %ecx, %rcx
movzwl (%rax,%rcx,2), %ecx
movq 0x8(%rsp), %rax
movl %ecx, 0x1c(%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl $0x5d, 0x28(%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq 0x8(%rax), %rax
movq 0x48(%rsp), %rdi
movl $0x2, %esi
callq *%rax
jmp 0xe87f9
movl 0x38(%rsp), %eax
addl $0x8, %eax
movl %eax, 0x38(%rsp)
jmp 0xe86e0
jmp 0xe880b
movq 0x40(%rsp), %rax
subq $0x41, %rax
movq %rax, 0x40(%rsp)
cmpl $0x0, 0x34(%rsp)
je 0xe882e
movq 0x40(%rsp), %rax
subq $0x40, %rax
movq %rax, 0x40(%rsp)
jmp 0xe83d2
cmpq $0x0, 0x40(%rsp)
je 0xe885c
movq 0x48(%rsp), %rax
movq (%rax), %rax
movl $0xb, 0x28(%rax)
movq 0x48(%rsp), %rax
movq (%rax), %rax
movq (%rax), %rax
movq 0x48(%rsp), %rdi
callq *%rax
movq 0x18(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, (%rax)
movq 0x10(%rsp), %rcx
movq 0x20(%rsp), %rax
movq %rcx, 0x8(%rax)
movl $0x1, 0x54(%rsp)
movl 0x54(%rsp), %eax
addq $0x58, %rsp
retq
nopl (%rax,%rax)