// File: /workspace/github_cpp_makefile_star2_O3/acliusBackHome[P]kamaya/dist/ParseDeclaration.cpp
// Function: ParseConstant::operator<(ParseConstant const&) const
bool ParseConstant::operator<(const ParseConstant &other) const {
    if (type < other.type) {
        return true;
    } else if (other.type < type) {
        return false;
    }
    switch (type) {
        case C_STRING: {
            const string &this_value = *(string *) value, &that_value = *(string *) other.value;
            if (this_value.length() < that_value.length()) {
                return true;
            } else if (that_value.length() < this_value.length()) {
                return false;
            }
            for (size_t i = 0; i < this_value.length(); ++i) {
                if (this_value[i] < that_value[i]) {
                    return true;
                } else if (that_value[i] < this_value[i]) {
                    return false;
                }
            }
            break;
        }
        case C_SIGNED: {
            const long long &this_value = *(long long *) value, &that_value = *(long long *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_UNSIGNED: {
            const unsigned long long &this_value = *(unsigned long long *) value,
                    &that_value = *(unsigned long long *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_FLOAT: {
            const long double &this_value = *(long double *) value,
                    &that_value = *(long double *) other.value;
            if (this_value < that_value) {
                return true;
            } else if (that_value < this_value) {
                return false;
            }
            break;
        }
        case C_BOOL: {
            bool this_value = *(bool *) value,
                    that_value = *(bool *) other.value;
            if (!this_value && that_value) {
                return true;
            } else if (!that_value && this_value) {
                return false;
            }
            break;
        }
        case C_UNDEFINED:
            break;
    }
    return false;
}

// Assembly:
movl (%rdi), %ecx
movl (%rsi), %edx
movb $0x1, %al
cmpl %edx, %ecx
jl 0x2f4e9
jle 0x2f413
xorl %eax, %eax
jmp 0x2f4e9
pushq %rbp
movq %rsp, %rbp
cmpl $0x4, %ecx
ja 0x2f4e6
movl %ecx, %ecx
leaq 0x17343(%rip), %rdx     # 0x4676c
movslq (%rdx,%rcx,4), %rcx
addq %rdx, %rcx
jmpq *%rcx
movq 0x8(%rdi), %rdx
movq 0x8(%rsi), %rsi
movq 0x8(%rdx), %rcx
movq 0x8(%rsi), %rdi
cmpq %rdi, %rcx
jb 0x2f4e8
ja 0x2f4e6
testq %rcx, %rcx
je 0x2f4e6
movq (%rdx), %rax
movq (%rsi), %rdx
xorl %esi, %esi
movb (%rax,%rsi), %dil
movb (%rdx,%rsi), %r8b
cmpb %dil, %r8b
jne 0x2f4ec
incq %rsi
cmpq %rsi, %rcx
jne 0x2f462
jmp 0x2f4e6
movq 0x8(%rdi), %rax
movb (%rax), %cl
movq 0x8(%rsi), %rax
movb (%rax), %dl
movl %edx, %eax
xorb $0x1, %al
orb %cl, %al
xorb $0x1, %al
testb $0x1, %al
jne 0x2f4e8
xorb $0x1, %cl
orb %dl, %cl
testb $0x1, %cl
jne 0x2f4e6
jmp 0x2f4e8
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rax
movq (%rcx), %rcx
cmpq %rcx, %rax
setb %al
je 0x2f4e6
jmp 0x2f4e8
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
fldt (%rax)
fldt (%rcx)
fucomi %st(1), %st
seta %al
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
jne 0x2f4e8
jmp 0x2f4e6
movq 0x8(%rdi), %rax
movq 0x8(%rsi), %rcx
movq (%rax), %rax
movq (%rcx), %rcx
cmpq %rcx, %rax
setl %al
jne 0x2f4e8
xorl %eax, %eax
popq %rbp
andb $0x1, %al
retq
setg %al
jmp 0x2f4e8
nop