// File: /workspace/github_c_makefile_star2_O0/Zarh[P]regps3iso/iso.c
// Function: UTF16_to_UTF8
static void UTF16_to_UTF8(u16 *stw, u8 *stb)
{
    while(SWAP_BE(stw[0])) {
        if((SWAP_BE(stw[0]) & 0xFF80) == 0) {
            *(stb++) = SWAP_BE(stw[0]) & 0xFF;   // utf16 00000000 0xxxxxxx utf8 0xxxxxxx
        } else if((SWAP_BE(stw[0]) & 0xF800) == 0) { // utf16 00000yyy yyxxxxxx utf8 110yyyyy 10xxxxxx
            *(stb++) = ((SWAP_BE(stw[0])>>6) & 0xFF) | 0xC0; *(stb++) = (SWAP_BE(stw[0]) & 0x3F) | 0x80;
        } else if((SWAP_BE(stw[0]) & 0xFC00) == 0xD800 && (SWAP_BE(stw[1]) & 0xFC00) == 0xDC00 ) { // utf16 110110ww wwzzzzyy 110111yy yyxxxxxx (wwww = uuuuu - 1) 
                                                                             // utf8 1111000uu 10uuzzzz 10yyyyyy 10xxxxxx  
            *(stb++)= (((SWAP_BE(stw[0]) + 64)>>8) & 0x3) | 0xF0; *(stb++)= (((SWAP_BE(stw[0])>>2) + 16) & 0x3F) | 0x80; 
            *(stb++)= ((SWAP_BE(stw[0])>>4) & 0x30) | 0x80 | ((SWAP_BE(stw[1])<<2) & 0xF); *(stb++)= (SWAP_BE(stw[1]) & 0x3F) | 0x80;
            stw++;
        } else { // utf16 zzzzyyyy yyxxxxxx utf8 1110zzzz 10yyyyyy 10xxxxxx
            *(stb++)= ((SWAP_BE(stw[0])>>12) & 0xF) | 0xE0; *(stb++)= ((SWAP_BE(stw[0])>>6) & 0x3F) | 0x80; *(stb++)= (SWAP_BE(stw[0]) & 0x3F) | 0x80;
        } 
        
        stw++;
    }
    
    *stb= 0;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x38, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movw $0x1, -0x12(%rbp)
cmpb $0x0, -0x12(%rbp)
jne 0x405a29
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x38(%rbp)
jmp 0x405a50
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpq $0x0, %rax
je 0x406062
movw $0x1, -0x14(%rbp)
cmpb $0x0, -0x14(%rbp)
jne 0x405a77
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x40(%rbp)
jmp 0x405a9e
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x40(%rbp)
movq -0x40(%rbp), %rax
andq $0xff80, %rax           # imm = 0xFF80
cmpq $0x0, %rax
jne 0x405b10
movw $0x1, -0x16(%rbp)
cmpb $0x0, -0x16(%rbp)
jne 0x405ac7
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x48(%rbp)
jmp 0x405aee
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x48(%rbp)
movq -0x48(%rbp), %rax
andq $0xff, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
jmp 0x406051
movw $0x1, -0x18(%rbp)
cmpb $0x0, -0x18(%rbp)
jne 0x405b29
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x50(%rbp)
jmp 0x405b50
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x50(%rbp)
movq -0x50(%rbp), %rax
andq $0xf800, %rax           # imm = 0xF800
cmpq $0x0, %rax
jne 0x405c31
movw $0x1, -0x1a(%rbp)
cmpb $0x0, -0x1a(%rbp)
jne 0x405b7d
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x58(%rbp)
jmp 0x405ba4
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x58(%rbp)
movq -0x58(%rbp), %rax
shrq $0x6, %rax
andq $0xff, %rax
orq $0xc0, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x1c(%rbp)
cmpb $0x0, -0x1c(%rbp)
jne 0x405be4
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x60(%rbp)
jmp 0x405c0b
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x60(%rbp)
movq -0x60(%rbp), %rax
andq $0x3f, %rax
orq $0x80, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
jmp 0x40604f
movw $0x1, -0x1e(%rbp)
cmpb $0x0, -0x1e(%rbp)
jne 0x405c4a
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x68(%rbp)
jmp 0x405c71
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x68(%rbp)
movq -0x68(%rbp), %rax
andq $0xfc00, %rax           # imm = 0xFC00
cmpq $0xd800, %rax           # imm = 0xD800
jne 0x405f07
movw $0x1, -0x20(%rbp)
cmpb $0x0, -0x20(%rbp)
jne 0x405ca1
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
movq %rax, -0x70(%rbp)
jmp 0x405cca
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl 0x2(%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x70(%rbp)
movq -0x70(%rbp), %rax
andq $0xfc00, %rax           # imm = 0xFC00
cmpq $0xdc00, %rax           # imm = 0xDC00
jne 0x405f07
movw $0x1, -0x22(%rbp)
cmpb $0x0, -0x22(%rbp)
jne 0x405cf9
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x78(%rbp)
jmp 0x405d20
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x78(%rbp)
movq -0x78(%rbp), %rax
addq $0x40, %rax
shrq $0x8, %rax
andq $0x3, %rax
orq $0xf0, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x24(%rbp)
cmpb $0x0, -0x24(%rbp)
jne 0x405d62
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x80(%rbp)
jmp 0x405d89
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x80(%rbp)
movq -0x80(%rbp), %rax
shrq $0x2, %rax
addq $0x10, %rax
andq $0x3f, %rax
orq $0x80, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x26(%rbp)
cmpb $0x0, -0x26(%rbp)
jne 0x405dce
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0x88(%rbp)
jmp 0x405df8
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x88(%rbp)
movq -0x88(%rbp), %rax
shrq $0x4, %rax
andq $0x30, %rax
orq $0x80, %rax
movq %rax, -0x90(%rbp)
movw $0x1, -0x28(%rbp)
cmpb $0x0, -0x28(%rbp)
jne 0x405e31
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
movq %rax, -0x98(%rbp)
jmp 0x405e5d
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl 0x2(%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0x98(%rbp)
movq -0x90(%rbp), %rax
movq -0x98(%rbp), %rcx
shlq $0x2, %rcx
andq $0xf, %rcx
orq %rcx, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x2a(%rbp)
cmpb $0x0, -0x2a(%rbp)
jne 0x405ea6
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
movq %rax, -0xa0(%rbp)
jmp 0x405ed2
movq -0x8(%rbp), %rax
movzwl 0x2(%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl 0x2(%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0xa0(%rbp)
movq -0xa0(%rbp), %rax
andq $0x3f, %rax
orq $0x80, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movq -0x8(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x8(%rbp)
jmp 0x40604d
movw $0x1, -0x2c(%rbp)
cmpb $0x0, -0x2c(%rbp)
jne 0x405f23
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0xa8(%rbp)
jmp 0x405f4d
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0xa8(%rbp)
movq -0xa8(%rbp), %rax
shrq $0xc, %rax
andq $0xf, %rax
orq $0xe0, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x2e(%rbp)
cmpb $0x0, -0x2e(%rbp)
jne 0x405f91
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0xb0(%rbp)
jmp 0x405fbb
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0xb0(%rbp)
movq -0xb0(%rbp), %rax
shrq $0x6, %rax
andq $0x3f, %rax
orq $0x80, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
movw $0x1, -0x30(%rbp)
cmpb $0x0, -0x30(%rbp)
jne 0x405fff
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
movq %rax, -0xb8(%rbp)
jmp 0x406029
movq -0x8(%rbp), %rax
movzwl (%rax), %eax
andl $0xff, %eax
shll $0x8, %eax
movq -0x8(%rbp), %rcx
movzwl (%rcx), %ecx
andl $0xff00, %ecx           # imm = 0xFF00
sarl $0x8, %ecx
orl %ecx, %eax
cltq
movq %rax, -0xb8(%rbp)
movq -0xb8(%rbp), %rax
andq $0x3f, %rax
orq $0x80, %rax
movb %al, %cl
movq -0x10(%rbp), %rax
movq %rax, %rdx
addq $0x1, %rdx
movq %rdx, -0x10(%rbp)
movb %cl, (%rax)
jmp 0x40604f
jmp 0x406051
movq -0x8(%rbp), %rax
addq $0x2, %rax
movq %rax, -0x8(%rbp)
jmp 0x405a10
movq -0x10(%rbp), %rax
movb $0x0, (%rax)
addq $0x38, %rsp
popq %rbp
retq
nop