// File: /workspace/github_c_makefile_star2_O0/jsummers[P]deark/modules/id3.c
// Function: decode_id3v2_frame_internal
static void decode_id3v2_frame_internal(deark *c, id3v2ctx *d, dbuf *f,
	i64 pos1, i64 len, struct de_fourcc *tag4cc)
{
	if(d->version_code==2) {
		if(tag4cc->id==CODE_TXX || tag4cc->id==CODE_WXX) {
			decode_id3v2_frame_txxx_etc(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->bytes[0]=='T') {
			decode_id3v2_frame_text(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->bytes[0]=='W') {
			decode_id3v2_frame_urllink(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->id==CODE_COM) {
			decode_id3v2_frame_comm(c, d, f, pos1, len);
		}
		else if(tag4cc->id==CODE_GEO) {
			decode_id3v2_frame_geob(c, d, f, pos1, len);
		}
		else if(tag4cc->id==CODE_PIC) {
			decode_id3v2_frame_pic_apic(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->id==CODE_POP) {
			decode_id3v2_frame_pop_popm(c, d, f, pos1, len);
		}
	}
	else if(d->version_code>=3) {
		// "All text frame identifiers begin with "T". Only text frame identifiers
		// begin with "T", with the exception of the "TXXX" frame."
		if(tag4cc->id==CODE_TXXX || tag4cc->id==CODE_WXXX) {
			decode_id3v2_frame_txxx_etc(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->bytes[0]=='T') {
			decode_id3v2_frame_text(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->bytes[0]=='W') {
			decode_id3v2_frame_urllink(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->id==CODE_COMM) {
			decode_id3v2_frame_comm(c, d, f, pos1, len);
		}
		else if(tag4cc->id==CODE_GEOB) {
			decode_id3v2_frame_geob(c, d, f, pos1, len);
		}
		else if(tag4cc->id==CODE_PRIV) {
			decode_id3v2_frame_priv(c, d, f, pos1, len);
		}
		else if(tag4cc->id==CODE_APIC) {
			decode_id3v2_frame_pic_apic(c, d, f, pos1, len, tag4cc);
		}
		else if(tag4cc->id==CODE_POPM) {
			decode_id3v2_frame_pop_popm(c, d, f, pos1, len);
		}
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq %r8, -0x28(%rbp)
movq %r9, -0x30(%rbp)
movq -0x10(%rbp), %rax
movzbl 0x30(%rax), %eax
cmpl $0x2, %eax
jne 0xaa3af
movq -0x30(%rbp), %rax
cmpl $0x545858, 0x4(%rax)    # imm = 0x545858
je 0xaa27b
movq -0x30(%rbp), %rax
cmpl $0x575858, 0x4(%rax)    # imm = 0x575858
jne 0xaa29d
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa540
jmp 0xaa3aa
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x54, %eax
jne 0xaa2cb
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa720
jmp 0xaa3a8
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x57, %eax
jne 0xaa2f9
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa820
jmp 0xaa3a6
movq -0x30(%rbp), %rax
cmpl $0x434f4d, 0x4(%rax)    # imm = 0x434F4D
jne 0xaa324
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xaa8b0
jmp 0xaa3a4
movq -0x30(%rbp), %rax
cmpl $0x47454f, 0x4(%rax)    # imm = 0x47454F
jne 0xaa34c
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xaaac0
jmp 0xaa3a2
movq -0x30(%rbp), %rax
cmpl $0x504943, 0x4(%rax)    # imm = 0x504943
jne 0xaa378
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaadf0
jmp 0xaa3a0
movq -0x30(%rbp), %rax
cmpl $0x504f50, 0x4(%rax)    # imm = 0x504F50
jne 0xaa39e
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xab110
jmp 0xaa3a0
jmp 0xaa3a2
jmp 0xaa3a4
jmp 0xaa3a6
jmp 0xaa3a8
jmp 0xaa3aa
jmp 0xaa53a
movq -0x10(%rbp), %rax
movzbl 0x30(%rax), %eax
cmpl $0x3, %eax
jl 0xaa538
movq -0x30(%rbp), %rax
cmpl $0x54585858, 0x4(%rax)  # imm = 0x54585858
je 0xaa3da
movq -0x30(%rbp), %rax
cmpl $0x57585858, 0x4(%rax)  # imm = 0x57585858
jne 0xaa3fc
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa540
jmp 0xaa536
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x54, %eax
jne 0xaa42a
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa720
jmp 0xaa534
movq -0x30(%rbp), %rax
movzbl (%rax), %eax
cmpl $0x57, %eax
jne 0xaa458
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaa820
jmp 0xaa532
movq -0x30(%rbp), %rax
cmpl $0x434f4d4d, 0x4(%rax)  # imm = 0x434F4D4D
jne 0xaa483
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xaa8b0
jmp 0xaa530
movq -0x30(%rbp), %rax
cmpl $0x47454f42, 0x4(%rax)  # imm = 0x47454F42
jne 0xaa4ae
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xaaac0
jmp 0xaa52e
movq -0x30(%rbp), %rax
cmpl $0x50524956, 0x4(%rax)  # imm = 0x50524956
jne 0xaa4d6
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xab250
jmp 0xaa52c
movq -0x30(%rbp), %rax
cmpl $0x41504943, 0x4(%rax)  # imm = 0x41504943
jne 0xaa502
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
movq -0x30(%rbp), %r9
callq 0xaadf0
jmp 0xaa52a
movq -0x30(%rbp), %rax
cmpl $0x504f504d, 0x4(%rax)  # imm = 0x504F504D
jne 0xaa528
movq -0x8(%rbp), %rdi
movq -0x10(%rbp), %rsi
movq -0x18(%rbp), %rdx
movq -0x20(%rbp), %rcx
movq -0x28(%rbp), %r8
callq 0xab110
jmp 0xaa52a
jmp 0xaa52c
jmp 0xaa52e
jmp 0xaa530
jmp 0xaa532
jmp 0xaa534
jmp 0xaa536
jmp 0xaa538
jmp 0xaa53a
addq $0x30, %rsp
popq %rbp
retq