// File: /workspace/github_c_makefile_star2_O0/videolan[P]bitstream/examples/dvb_gen_si.c
// Function: generate_eit
static void generate_eit(void) {
    uint8_t *eit = psi_private_allocate();
    uint8_t *desc_loop, *desc;
    uint8_t desc_counter;

    // Generate empty EIT
    eit_init(eit, true);
    psi_set_version(eit, 0);
    psi_set_current(eit);

    eit_set_length(eit, 0);
    eit_set_sid(eit, sid);
    eit_set_tsid(eit, tsid);
    eit_set_onid(eit, onid);
    eit_set_segment_last_sec_number(eit, 0);
    eit_set_last_table_id(eit, 0);
    psi_set_crc(eit);
    output_psi_section(eit, EIT_PID, &cc);

    // Add service descriptions
    eit_init(eit, true);
    psi_set_version(eit, 1);
    psi_set_current(eit);
    eit_set_tsid(eit, tsid);
    eit_set_onid(eit, onid);

    // Process transport stream loop
    eit_set_length(eit, PSI_MAX_SIZE); // This needed so eit_get_ts works
    {
        uint8_t *eit_n;
        uint8_t eit_n_counter = 0;

        eit_n = eit_get_event(eit, eit_n_counter++);
        eitn_set_event_id(eit_n, event_id);
        eitn_set_start_time(eit_n, dvb_time_encode_UTC(ts_0));
        eitn_set_duration_bcd(eit_n, dvb_time_encode_duration(86399));
        eitn_set_running(eit_n, 2);
        eitn_set_desclength(eit_n, 0);
        {
            // Add descriptors to transport_stream_n
            desc_counter = 0;
            desc_loop = eitn_get_descs(eit_n);
            descs_set_length(desc_loop, DESCS_MAX_SIZE); // This is needed so descs_get_desc(x, n) works

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4d(desc);

            // Finish descriptor generation
            desc = descs_get_desc(desc_loop, desc_counter); // Get next descriptor pos
            descs_set_length(desc_loop, desc - desc_loop - DESCS_HEADER_SIZE);
        }

        eit_n = eit_get_event(eit, eit_n_counter++);
        eitn_set_event_id(eit_n, event_id + 100);
        eitn_set_start_time(eit_n, dvb_time_encode_UTC(ts_1));
        eitn_set_duration_bcd(eit_n, dvb_time_encode_duration(3600));
        eitn_set_running(eit_n, 1);
        eitn_set_desclength(eit_n, 0);
        {
            // Add descriptors to transport_stream_n
            desc_counter = 0;
            desc_loop = eitn_get_descs(eit_n);
            descs_set_length(desc_loop, DESCS_MAX_SIZE); // This is needed so descs_get_desc(x, n) works

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4a_event(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4e(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4d(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc61(desc);

            // Finish descriptor generation
            desc = descs_get_desc(desc_loop, desc_counter); // Get next descriptor pos
            descs_set_length(desc_loop, desc - desc_loop - DESCS_HEADER_SIZE);
        }

        eit_n = eit_get_event(eit, eit_n_counter++);
        eitn_set_event_id(eit_n, event_id + 200);
        eitn_set_start_time(eit_n, dvb_time_encode_UTC(ts_2));
        eitn_set_duration_bcd(eit_n, dvb_time_encode_duration(7200));
        eitn_set_running(eit_n, 0);
        eitn_set_desclength(eit_n, 0);
        {
            // Add descriptors to transport_stream_n
            desc_counter = 0;
            desc_loop = eitn_get_descs(eit_n);
            descs_set_length(desc_loop, DESCS_MAX_SIZE); // This is needed so descs_get_desc(x, n) works

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4a_extended_event(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc54(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc53(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc55(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4d(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4f(desc);

            // Finish descriptor generation
            desc = descs_get_desc(desc_loop, desc_counter); // Get next descriptor pos
            descs_set_length(desc_loop, desc - desc_loop - DESCS_HEADER_SIZE);
        }

        eit_n = eit_get_event(eit, eit_n_counter++);
        eitn_set_event_id(eit_n, event_id + 300);
        eitn_set_start_time(eit_n, dvb_time_encode_UTC(ts_2));
        eitn_set_duration_bcd(eit_n, dvb_time_encode_duration(7200));
        eitn_set_running(eit_n, 4);
        eitn_set_ca(eit_n);
        eitn_set_desclength(eit_n, 0);
        {
            // Add descriptors to transport_stream_n
            desc_counter = 0;
            desc_loop = eitn_get_descs(eit_n);
            descs_set_length(desc_loop, DESCS_MAX_SIZE); // This is needed so descs_get_desc(x, n) works

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc54(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4d(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc4e(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc55(desc);

            desc = descs_get_desc(desc_loop, desc_counter++);
            build_desc69(desc);

            // Finish descriptor generation
            desc = descs_get_desc(desc_loop, desc_counter); // Get next descriptor pos
            descs_set_length(desc_loop, desc - desc_loop - DESCS_HEADER_SIZE);
        }

        // Set transport_stream_loop length
        eit_n = eit_get_event(eit, eit_n_counter); // Get last service
        eit_set_length(eit, eit_n - eit_get_event(eit, 0));
    }
    psi_set_crc(eit);
    output_psi_section(eit, EIT_PID, &cc);

    free(eit);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
callq 0xb330
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xb340
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0x4ff0
movq -0x8(%rbp), %rdi
callq 0x5020
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xb390
movq -0x8(%rbp), %rdi
movzwl 0x1e48e(%rip), %esi     # 0x2108a
callq 0x4fb0
movq -0x8(%rbp), %rdi
movzwl 0x1e47c(%rip), %esi     # 0x21088
callq 0xb3c0
movq -0x8(%rbp), %rdi
movzwl 0x1e472(%rip), %esi     # 0x2108e
callq 0xb400
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xb440
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xb460
movq -0x8(%rbp), %rdi
callq 0x5080
movq -0x8(%rbp), %rdi
movl $0x12, %esi
leaq 0x1e469(%rip), %rdx     # 0x210b9
callq 0x5170
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0xb340
movq -0x8(%rbp), %rdi
movl $0x1, %esi
callq 0x4ff0
movq -0x8(%rbp), %rdi
callq 0x5020
movq -0x8(%rbp), %rdi
movzwl 0x1e403(%rip), %esi     # 0x21088
callq 0xb3c0
movq -0x8(%rbp), %rdi
movzwl 0x1e3f9(%rip), %esi     # 0x2108e
callq 0xb400
movq -0x8(%rbp), %rdi
movl $0x3fd, %esi            # imm = 0x3FD
callq 0xb390
movb $0x0, -0x29(%rbp)
movq -0x8(%rbp), %rdi
movb -0x29(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x29(%rbp)
movzbl %al, %esi
callq 0xb480
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movzwl 0x1e3ba(%rip), %esi     # 0x2108c
callq 0xb560
movq -0x28(%rbp), %rax
movq %rax, -0x80(%rbp)
movq 0x1e3b2(%rip), %rdi     # 0x21098
callq 0xb620
movq -0x80(%rbp), %rdi
movq %rax, %rsi
callq 0xb5a0
movq -0x28(%rbp), %rax
movq %rax, -0x78(%rbp)
movl $0x1517f, %edi          # imm = 0x1517F
callq 0xb740
movq -0x78(%rbp), %rdi
movl %eax, %esi
callq 0xb6f0
movq -0x28(%rbp), %rdi
movl $0x2, %esi
callq 0xb820
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0xb850
movb $0x0, -0x19(%rbp)
movq -0x28(%rbp), %rdi
callq 0xb8a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movl $0xfff, %esi            # imm = 0xFFF
callq 0x5970
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2cce(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xb8c0
movq -0x10(%rbp), %rdi
leaq 0x2cae(%rip), %rdx      # 0x5a30
movzbl -0x19(%rbp), %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
subq $0x2, %rax
movzwl %ax, %esi
callq 0x5970
movq -0x8(%rbp), %rdi
movb -0x29(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x29(%rbp)
movzbl %al, %esi
callq 0xb480
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movzwl 0x1e2bc(%rip), %eax     # 0x2108c
addl $0x64, %eax
movzwl %ax, %esi
callq 0xb560
movq -0x28(%rbp), %rax
movq %rax, -0x70(%rbp)
movq 0x1e2b6(%rip), %rdi     # 0x210a0
callq 0xb620
movq -0x70(%rbp), %rdi
movq %rax, %rsi
callq 0xb5a0
movq -0x28(%rbp), %rax
movq %rax, -0x68(%rbp)
movl $0xe10, %edi            # imm = 0xE10
callq 0xb740
movq -0x68(%rbp), %rdi
movl %eax, %esi
callq 0xb6f0
movq -0x28(%rbp), %rdi
movl $0x1, %esi
callq 0xb820
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0xb850
movb $0x0, -0x19(%rbp)
movq -0x28(%rbp), %rdi
callq 0xb8a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movl $0xfff, %esi            # imm = 0xFFF
callq 0x5970
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2bca(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xb960
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2b9f(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xba10
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2b74(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xb8c0
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2b49(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xbce0
movq -0x10(%rbp), %rdi
leaq 0x2b29(%rip), %rdx      # 0x5a30
movzbl -0x19(%rbp), %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
subq $0x2, %rax
movzwl %ax, %esi
callq 0x5970
movq -0x8(%rbp), %rdi
movb -0x29(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x29(%rbp)
movzbl %al, %esi
callq 0xb480
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movzwl 0x1e137(%rip), %eax     # 0x2108c
addl $0xc8, %eax
movzwl %ax, %esi
callq 0xb560
movq -0x28(%rbp), %rax
movq %rax, -0x60(%rbp)
movq 0x1e137(%rip), %rdi     # 0x210a8
callq 0xb620
movq -0x60(%rbp), %rdi
movq %rax, %rsi
callq 0xb5a0
movq -0x28(%rbp), %rax
movq %rax, -0x58(%rbp)
movl $0x1c20, %edi           # imm = 0x1C20
callq 0xb740
movq -0x58(%rbp), %rdi
movl %eax, %esi
callq 0xb6f0
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0xb820
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0xb850
movb $0x0, -0x19(%rbp)
movq -0x28(%rbp), %rdi
callq 0xb8a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movl $0xfff, %esi            # imm = 0xFFF
callq 0x5970
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2a46(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xbd20
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2a1b(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc150
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x29f0(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc250
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x29c5(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc340
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x299a(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xb8c0
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x296f(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc4a0
movq -0x10(%rbp), %rdi
leaq 0x294f(%rip), %rdx      # 0x5a30
movzbl -0x19(%rbp), %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
subq $0x2, %rax
movzwl %ax, %esi
callq 0x5970
movq -0x8(%rbp), %rdi
movb -0x29(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x29(%rbp)
movzbl %al, %esi
callq 0xb480
movq %rax, -0x28(%rbp)
movq -0x28(%rbp), %rdi
movzwl 0x1df5d(%rip), %eax     # 0x2108c
addl $0x12c, %eax            # imm = 0x12C
movzwl %ax, %esi
callq 0xb560
movq -0x28(%rbp), %rax
movq %rax, -0x50(%rbp)
movq 0x1df5d(%rip), %rdi     # 0x210a8
callq 0xb620
movq -0x50(%rbp), %rdi
movq %rax, %rsi
callq 0xb5a0
movq -0x28(%rbp), %rax
movq %rax, -0x48(%rbp)
movl $0x1c20, %edi           # imm = 0x1C20
callq 0xb740
movq -0x48(%rbp), %rdi
movl %eax, %esi
callq 0xb6f0
movq -0x28(%rbp), %rdi
movl $0x4, %esi
callq 0xb820
movq -0x28(%rbp), %rdi
callq 0xc4f0
movq -0x28(%rbp), %rdi
xorl %esi, %esi
callq 0xb850
movb $0x0, -0x19(%rbp)
movq -0x28(%rbp), %rdi
callq 0xb8a0
movq %rax, -0x10(%rbp)
movq -0x10(%rbp), %rdi
movl $0xfff, %esi            # imm = 0xFFF
callq 0x5970
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2860(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc150
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x2835(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xb8c0
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x280a(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xba10
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x27df(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc340
movq -0x10(%rbp), %rdi
movb -0x19(%rbp), %al
movb %al, %cl
addb $0x1, %cl
movb %cl, -0x19(%rbp)
leaq 0x27b4(%rip), %rdx      # 0x5a30
movzbl %al, %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0xc510
movq -0x10(%rbp), %rdi
leaq 0x2794(%rip), %rdx      # 0x5a30
movzbl -0x19(%rbp), %esi
callq 0x59c0
movq %rax, -0x18(%rbp)
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
subq %rcx, %rax
subq $0x2, %rax
movzwl %ax, %esi
callq 0x5970
movq -0x8(%rbp), %rdi
movzbl -0x29(%rbp), %esi
callq 0xb480
movq %rax, -0x28(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x40(%rbp)
movq -0x28(%rbp), %rax
movq %rax, -0x38(%rbp)
movq -0x8(%rbp), %rdi
xorl %esi, %esi
callq 0xb480
movq -0x40(%rbp), %rdi
movq %rax, %rcx
movq -0x38(%rbp), %rax
subq %rcx, %rax
movzwl %ax, %esi
callq 0xb390
movq -0x8(%rbp), %rdi
callq 0x5080
movq -0x8(%rbp), %rdi
movl $0x12, %esi
leaq 0x1dd9a(%rip), %rdx     # 0x210b9
callq 0x5170
movq -0x8(%rbp), %rdi
callq 0x1030
addq $0x80, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)