// File: /workspace/github_c_makefile_star2_O3/Ihsoh[P]ilang/compiler/backend/asmgen_gas32.c
// Function: be_asmgen_gas32_generate
void be_asmgen_gas32_generate(
	ASMGeneratorGas32Context *ctx
) {
	assert(ctx);
	assert(ctx->psrctx);
	assert(ctx->psrctx->ast);
	assert(ctx->psrctx->ast->type == BE_NODE_MODULE);
	assert(ctx->out);

	_asm_module(ctx, ctx->psrctx->ast);

	_OUT_CSTR(ctx, RSTR_CSTR(ctx->head));
	_OUT_CSTR(ctx, RSTR_CSTR(ctx->body));
	_OUT_CSTR(ctx, RSTR_CSTR(ctx->foot));
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
pushq %r15
pushq %r14
pushq %r13
pushq %r12
pushq %rbx
subq $0x38, %rsp
testq %rdi, %rdi
je 0xbe04
movq %rdi, %rbx
movq (%rdi), %rax
testq %rax, %rax
je 0xbe23
movq 0x8(%rax), %r13
testq %r13, %r13
je 0xbe42
cmpl $0x100, (%r13)          # imm = 0x100
jne 0xbe61
cmpq $0x0, 0x8(%rbx)
je 0xbe80
movq 0x10(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
leaq 0x35226(%rip), %r12     # 0x40a1b
cmoveq %r12, %r14
cmpb $0x0, (%r14)
je 0xb82f
xorl %r15d, %r15d
movsbl (%r14,%r15), %edi
movq 0x8(%rbx), %rsi
callq 0x30c0
incq %r15
movq 0x10(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
movq %r14, %rdi
callq 0x3080
cmpq %r15, %rax
ja 0xb802
cmpl $0x0, 0x44(%r13)
jle 0xbc2e
xorl %edx, %edx
movq %rbx, -0x40(%rbp)
movq %r13, -0x48(%rbp)
movq 0x48(%r13), %rax
movq (%rax,%rdx,8), %rsi
testq %rsi, %rsi
je 0xbd0c
movq $0x0, 0x58(%rbx)
movl (%rsi), %eax
cmpl $0xa00, %eax            # imm = 0xA00
je 0xb88f
cmpl $0xd00, %eax            # imm = 0xD00
je 0xbc1e
cmpl $0xc00, %eax            # imm = 0xC00
jne 0xbd2b
movq %rdx, %r14
movq %rbx, %rdi
callq 0xc135
movq %r14, %rdx
jmp 0xbc1e
movq 0x60(%rsi), %rax
movq %rax, 0x58(%rbx)
testq %rax, %rax
je 0xbd69
movl 0x44(%rsi), %ecx
movl $0x10, %eax
cmpl $0x3, %ecx
je 0xb8bb
cmpl $0x4, %ecx
jne 0xbde5
movl $0x18, %eax
movq 0x48(%rsi), %rcx
movq (%rcx), %r14
cmpl $0x200, (%r14)          # imm = 0x200
jne 0xbd88
movq 0x8(%rcx), %r15
cmpl $0xa01, (%r15)          # imm = 0xA01
jne 0xbd4a
movq %rdx, -0x38(%rbp)
movq (%rcx,%rax), %rax
movq %rax, -0x30(%rbp)
cmpl $0x0, 0x44(%r15)
jle 0xb906
movq 0x48(%r15), %rax
movq (%rax), %rax
cmpl $0xa02, (%rax)          # imm = 0xA02
jne 0xbda7
movq 0x20(%rbx), %rdi
movl $0xa, %esi
callq 0x749a
movq -0x30(%rbp), %rax
movl (%rax), %eax
cmpl $0x900, %eax            # imm = 0x900
movq -0x38(%rbp), %rdx
je 0xbc1e
cmpl $0xb00, %eax            # imm = 0xB00
jne 0xbdc6
movq 0x10(%r14), %rax
movq 0x8(%rax), %rsi
movl 0x4(%rax), %edx
leaq -0x60(%rbp), %rdi
callq 0x74bc
movq 0x20(%rbx), %rdi
leaq 0x350a4(%rip), %rsi     # 0x409f7
callq 0x739b
movq 0x20(%rbx), %rdi
leaq 0x34e06(%rip), %rsi     # 0x40769
callq 0x739b
movq 0x20(%rbx), %rdi
movq 0x10(%r14), %rax
movq 0x8(%rax), %rsi
movl 0x4(%rax), %edx
callq 0x7537
movq 0x20(%rbx), %rdi
movl $0xa, %esi
callq 0x749a
movq 0x20(%rbx), %rdi
movq 0x10(%r14), %rax
movq 0x8(%rax), %rsi
movl 0x4(%rax), %edx
callq 0x7537
movq 0x20(%rbx), %rdi
movl $0x3a, %esi
callq 0x749a
movq 0x20(%rbx), %rdi
movl $0xa, %esi
callq 0x749a
movq 0x20(%rbx), %rdi
leaq 0x35176(%rip), %rsi     # 0x40b3b
callq 0x739b
movl $0x4, %eax
movq %rax, 0x38(%rbx)
movq %rax, 0x40(%rbx)
movq $0x1, 0x48(%rbx)
movl 0x44(%r15), %eax
testl %eax, %eax
jle 0xbac3
movl $0x8, %r13d
xorl %r14d, %r14d
movq %r15, -0x50(%rbp)
movq 0x48(%r15), %rcx
movq (%rcx,%r14,8), %rcx
cmpl $0xa03, (%rcx)          # imm = 0xA03
je 0xbab0
movq 0x48(%rcx), %rax
movq 0x60(%rcx), %rbx
movq (%rax), %r12
movb $0x1, 0x48(%rbx)
leaq 0x50(%rbx), %r15
movq %r15, %rdi
callq 0x7314
movq %r15, %rdi
leaq 0x35127(%rip), %rsi     # 0x40b58
movl %r13d, %edx
xorl %eax, %eax
callq 0x7905
movq -0x40(%rbp), %r15
movq 0x48(%r15), %rdx
movq 0x20(%r15), %rdi
movq 0x38(%r15), %rcx
movq 0x58(%rbx), %r10
testq %r10, %r10
leaq 0x34fc2(%rip), %rax     # 0x40a1b
cmoveq %rax, %r10
subq $0x8, %rsp
movl $0x8, %r9d
leaq 0x350f4(%rip), %rsi     # 0x40b62
movl $0x8, %r8d
xorl %eax, %eax
pushq %r10
callq 0x7905
addq $0x10, %rsp
movq 0x20(%r15), %rdi
movq 0x10(%r12), %rax
movq 0x8(%rax), %rsi
movl 0x4(%rax), %edx
callq 0x7537
movq 0x20(%r15), %rdi
movl $0xa, %esi
callq 0x749a
incq 0x48(%r15)
movq -0x50(%rbp), %r15
movl 0x44(%r15), %eax
incq %r14
movslq %eax, %rcx
addl $0x8, %r13d
cmpq %rcx, %r14
jl 0xb9f8
movq -0x40(%rbp), %rbx
movq 0x20(%rbx), %r13
callq 0x7705
movq %rax, 0x20(%rbx)
callq 0x7705
movq %rax, 0x30(%rbx)
movq %rbx, %rdi
movq -0x30(%rbp), %rsi
callq 0xc9da
movq 0x30(%rbx), %rdi
movq 0x40(%rbx), %rdx
leaq 0x350bf(%rip), %rsi     # 0x40bb7
xorl %eax, %eax
callq 0x7905
movq 0x30(%rbx), %rdi
movq 0x40(%rbx), %rdx
leaq 0x350cc(%rip), %rsi     # 0x40bda
xorl %eax, %eax
callq 0x7905
movq 0x30(%rbx), %rsi
movq %r13, %rdi
callq 0x765e
movq -0x58(%rbp), %rcx
testq %rcx, %rcx
leaq 0x34eec(%rip), %r12     # 0x40a1b
cmoveq %r12, %rcx
subq $0x8, %rsp
movq %r13, %rdi
leaq 0x350ac(%rip), %rsi     # 0x40bed
leaq 0x350d3(%rip), %rdx     # 0x40c1b
movq %rdx, %r8
movq %rcx, %r9
xorl %eax, %eax
pushq $-0x4
leaq 0x350cc(%rip), %r10     # 0x40c25
pushq %r10
pushq %r10
callq 0x7905
addq $0x20, %rsp
movq %r13, %rdi
leaq 0x350ba(%rip), %rsi     # 0x40c2a
callq 0x739b
movq 0x20(%rbx), %rsi
movq %r13, %rdi
callq 0x765e
movq 0x20(%rbx), %rdi
callq 0x7812
movq %r13, 0x20(%rbx)
movq 0x30(%rbx), %rdi
callq 0x7812
movq $0x0, 0x30(%rbx)
movq 0x20(%rbx), %rdi
leaq 0x34e70(%rip), %rsi     # 0x40a1a
callq 0x739b
movq 0x20(%rbx), %rsi
movq %rbx, %rdi
leaq 0x35077(%rip), %rdx     # 0x40c34
leaq 0x35075(%rip), %rcx     # 0x40c39
callq 0x14137
movq 0x20(%rbx), %rdi
leaq 0x3505d(%rip), %rsi     # 0x40c31
callq 0x739b
movq 0x20(%rbx), %rdi
movq 0x40(%rbx), %rdx
leaq 0x35055(%rip), %rsi     # 0x40c3d
xorl %eax, %eax
callq 0x7905
movq 0x20(%rbx), %rdi
leaq 0x35057(%rip), %rsi     # 0x40c51
callq 0x739b
movq 0x20(%rbx), %rdi
movl $0xa, %esi
callq 0x749a
leaq -0x60(%rbp), %rdi
callq 0x7812
movq -0x48(%rbp), %r13
movq -0x38(%rbp), %rdx
incq %rdx
movslq 0x44(%r13), %rax
cmpq %rax, %rdx
jl 0xb844
movq 0x18(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
cmpb $0x0, (%r14)
je 0xbc73
xorl %r15d, %r15d
movsbl (%r14,%r15), %edi
movq 0x8(%rbx), %rsi
callq 0x30c0
incq %r15
movq 0x18(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
movq %r14, %rdi
callq 0x3080
cmpq %r15, %rax
ja 0xbc46
movq 0x20(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
cmpb $0x0, (%r14)
je 0xbcb8
xorl %r15d, %r15d
movsbl (%r14,%r15), %edi
movq 0x8(%rbx), %rsi
callq 0x30c0
incq %r15
movq 0x20(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
movq %r14, %rdi
callq 0x3080
cmpq %r15, %rax
ja 0xbc8b
movq 0x28(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
cmpb $0x0, (%r14)
je 0xbcfd
xorl %r15d, %r15d
movsbl (%r14,%r15), %edi
movq 0x8(%rbx), %rsi
callq 0x30c0
incq %r15
movq 0x28(%rbx), %rax
movq 0x8(%rax), %r14
testq %r14, %r14
cmoveq %r12, %r14
movq %r14, %rdi
callq 0x3080
cmpq %r15, %rax
ja 0xbcd0
addq $0x38, %rsp
popq %rbx
popq %r12
popq %r13
popq %r14
popq %r15
popq %rbp
retq
leaq 0x351f8(%rip), %rdi     # 0x40f0b
leaq 0x3471e(%rip), %rsi     # 0x40438
leaq 0x34922(%rip), %rcx     # 0x40643
movl $0x2c8d, %edx           # imm = 0x2C8D
callq 0x30a0
leaq 0x32637(%rip), %rdi     # 0x3e369
leaq 0x346ff(%rip), %rsi     # 0x40438
leaq 0x34903(%rip), %rcx     # 0x40643
movl $0x2c9f, %edx           # imm = 0x2C9F
callq 0x30a0
leaq 0x34d7e(%rip), %rdi     # 0x40acf
leaq 0x346e0(%rip), %rsi     # 0x40438
leaq 0x34d23(%rip), %rcx     # 0x40a82
movl $0x2bc9, %edx           # imm = 0x2BC9
callq 0x30a0
leaq 0x34d4e(%rip), %rdi     # 0x40abe
leaq 0x346c1(%rip), %rsi     # 0x40438
leaq 0x34d04(%rip), %rcx     # 0x40a82
movl $0x2bb4, %edx           # imm = 0x2BB4
callq 0x30a0
leaq 0x349a7(%rip), %rdi     # 0x40736
leaq 0x346a2(%rip), %rsi     # 0x40438
leaq 0x34ce5(%rip), %rcx     # 0x40a82
movl $0x2bc8, %edx           # imm = 0x2BC8
callq 0x30a0
leaq 0x34d4f(%rip), %rdi     # 0x40afd
leaq 0x34683(%rip), %rsi     # 0x40438
leaq 0x34cc6(%rip), %rcx     # 0x40a82
movl $0x2bcb, %edx           # imm = 0x2BCB
callq 0x30a0
leaq 0x3259c(%rip), %rdi     # 0x3e369
leaq 0x34664(%rip), %rsi     # 0x40438
leaq 0x34ca7(%rip), %rcx     # 0x40a82
movl $0x2c7f, %edx           # imm = 0x2C7F
callq 0x30a0
leaq 0x3257d(%rip), %rdi     # 0x3e369
leaq 0x34645(%rip), %rsi     # 0x40438
leaq 0x34c88(%rip), %rcx     # 0x40a82
movl $0x2bc6, %edx           # imm = 0x2BC6
callq 0x30a0
leaq 0x33fa9(%rip), %rdi     # 0x3fdb4
leaq 0x34626(%rip), %rsi     # 0x40438
leaq 0x3463f(%rip), %rcx     # 0x40458
movl $0x2cb8, %edx           # imm = 0x2CB8
callq 0x30a0
leaq 0x34668(%rip), %rdi     # 0x40492
leaq 0x34607(%rip), %rsi     # 0x40438
leaq 0x34620(%rip), %rcx     # 0x40458
movl $0x2cb9, %edx           # imm = 0x2CB9
callq 0x30a0
leaq 0x34655(%rip), %rdi     # 0x4049e
leaq 0x345e8(%rip), %rsi     # 0x40438
leaq 0x34601(%rip), %rcx     # 0x40458
movl $0x2cba, %edx           # imm = 0x2CBA
callq 0x30a0
leaq 0x34647(%rip), %rdi     # 0x404af
leaq 0x345c9(%rip), %rsi     # 0x40438
leaq 0x345e2(%rip), %rcx     # 0x40458
movl $0x2cbb, %edx           # imm = 0x2CBB
callq 0x30a0
leaq 0x34651(%rip), %rdi     # 0x404d8
leaq 0x345aa(%rip), %rsi     # 0x40438
leaq 0x345c3(%rip), %rcx     # 0x40458
movl $0x2cbc, %edx           # imm = 0x2CBC
callq 0x30a0