// File: /workspace/github_c_makefile_star2_O3/ieyasu[P]funit/generate_code.c
// Function: print_macro_arg
static void print_macro_arg(struct Code *arg)
{
    char *s, *start, *end, *amp, string_delim;
    int in_string = 0;

    assert(arg && arg->type == ARG_CODE);

    s = start = arg->u.c.str;
    end = s + arg->u.c.len;
    amp = NULL;
    while (s < end) {
        switch (*s) {
        case '\'':
        case '"':
            if (in_string) {
                if (*s == string_delim) {
                    if (*(s + 1) == string_delim)
                        s++; // doubled to escape
                    else
                        in_string = 0; // close quote
                }
            } else {
                in_string = 1;
                string_delim = *s;
            }
            amp = NULL;
            break;
        case '&':
            amp = s;
            break;
        case ' ':
        case '\t':
            // leave amp alone
            break;
        case '\n':
        case '\r':
            // line continuation
            assert(amp != NULL);
            // print prior arg-part
            fwrite(start, amp - start, 1, fout);
            // scan for next arg-part
            start = find_line_continuation(s, end, in_string);
            s = start - 1;
            break;
        default:
            amp = NULL;
            break;
        }
        s++;
    }
    // print remaining
    fwrite(start, end - start, 1, fout);
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
pushq %rax
testq %rdi, %rdi
je 0x4bf9
cmpl $0x2, 0x8(%rdi)
jne 0x4bf9
movq 0x18(%rdi), %r12
movq 0x20(%rdi), %rax
leaq (%r12,%rax), %rbx
testq %rax, %rax
jle 0x4b93
xorl %r15d, %r15d
leaq 0x2df6(%rip), %r14      # 0x7830
xorl %r13d, %r13d
movq %r12, %rdi
movb (%r12), %al
movzbl %al, %ecx
cmpl $0x1f, %ecx
jle 0x4a8d
addl $-0x20, %ecx
cmpl $0x7, %ecx
ja 0x4b6b
movslq (%r14,%rcx,4), %rcx
addq %r14, %rcx
jmpq *%rcx
testl %r15d, %r15d
je 0x4b75
cmpb %bpl, %al
jne 0x4b7c
leaq 0x1(%r12), %rax
xorl %r15d, %r15d
cmpb %bpl, 0x1(%r12)
sete %r15b
cmoveq %rax, %r12
jmp 0x4b6b
cmpl $0x9, %ecx
je 0x4b85
cmpl $0xa, %ecx
je 0x4aa4
cmpl $0xd, %ecx
jne 0x4b6b
testq %r13, %r13
je 0x4bbb
movq %r13, %rsi
subq %rdi, %rsi
movq 0x9736(%rip), %rcx      # 0xe1f0
movl $0x1, %edx
callq 0x2250
movzbl (%r12), %eax
cmpl $0xd, %eax
je 0x4ad7
cmpl $0xa, %eax
jne 0x4bda
cmpq %rbx, %r12
jae 0x4b02
movq %rbx, %rax
subq %r12, %rax
incq %r12
movzbl -0x1(%r12), %ecx
cmpl $0xa, %ecx
je 0x4b17
cmpl $0xd, %ecx
je 0x4b07
incq %r12
decq %rax
jne 0x4ae5
movq %rbx, %rdi
jmp 0x4b20
movq %r12, %rdi
jmp 0x4b20
leaq -0x1(%r12), %rdi
cmpb $0xa, (%r12)
cmoveq %r12, %rdi
jmp 0x4b1d
decq %r12
movq %r12, %rdi
incq %rdi
movq %rdi, %r12
cmpq %rbx, %rdi
jae 0x4b4b
movq %rbx, %rcx
subq %rdi, %rcx
movq %rdi, %r12
movzbl (%r12), %eax
cmpl $0x20, %eax
je 0x4b40
cmpl $0x9, %eax
jne 0x4b4f
incq %r12
decq %rcx
jne 0x4b31
movq %rbx, %r12
movb (%r12), %al
cmpb $0x21, %al
je 0x4ad7
movzbl %al, %eax
cmpl $0x26, %eax
jne 0x4b65
incq %r12
testl %r15d, %r15d
cmovneq %r12, %rdi
leaq -0x1(%rdi), %r12
jmp 0x4b85
xorl %r13d, %r13d
jmp 0x4b85
movq %r12, %r13
jmp 0x4b85
xorl %r13d, %r13d
movl %eax, %ebp
jmp 0x4b7f
xorl %r13d, %r13d
movl $0x1, %r15d
incq %r12
cmpq %rbx, %r12
jb 0x4a40
jmp 0x4b96
movq %r12, %rdi
subq %rdi, %rbx
movq 0x9650(%rip), %rcx      # 0xe1f0
movl $0x1, %edx
movq %rbx, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
jmp 0x2250
leaq 0x37b5(%rip), %rdi      # 0x8377
leaq 0x35d2(%rip), %rsi      # 0x819b
leaq 0x3783(%rip), %rcx      # 0x8353
movl $0x89, %edx
callq 0x2120
leaq 0x37a2(%rip), %rdi      # 0x8383
leaq 0x35b3(%rip), %rsi      # 0x819b
leaq 0x37ad(%rip), %rcx      # 0x839c
movl $0x3e, %edx
callq 0x2120
leaq 0x3736(%rip), %rdi      # 0x8336
leaq 0x3594(%rip), %rsi      # 0x819b
leaq 0x3745(%rip), %rcx      # 0x8353
movl $0x69, %edx
callq 0x2120