// File: /workspace/github_c_makefile_star2_O0/lucvoo[P]sparse-dev/expand.c
// Function: simplify_float_cmp
static int simplify_float_cmp(struct expression *expr, struct symbol *ctype)
{
	struct expression *left = expr->left, *right = expr->right;
	long double l, r;

	if (left->type != EXPR_FVALUE || right->type != EXPR_FVALUE)
		return 0;

	l = left->fvalue;
	r = right->fvalue;
	switch (expr->op) {
	case '<':		expr->value = l < r; break;
	case '>':		expr->value = l > r; break;
	case SPECIAL_LTE:	expr->value = l <= r; break;
	case SPECIAL_GTE:	expr->value = l >= r; break;
	case SPECIAL_EQUAL:	expr->value = l == r; break;
	case SPECIAL_NOTEQUAL:	expr->value = l != r; break;
	}
	expr->type = EXPR_VALUE;
	expr->taint = 0;
	return 1;
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x10(%rbp), %rax
movq 0x20(%rax), %rax
movq %rax, -0x20(%rbp)
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x20(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x1c, %eax
jne 0x13d94
movq -0x28(%rbp), %rax
movl (%rax), %eax
andl $0xff, %eax
cmpl $0x1c, %eax
je 0x13da0
movl $0x0, -0x4(%rbp)
jmp 0x13f01
movq -0x20(%rbp), %rax
fldt 0x20(%rax)
fstpt -0x40(%rbp)
movq -0x28(%rbp), %rax
fldt 0x20(%rax)
fstpt -0x50(%rbp)
movq -0x10(%rbp), %rax
movl 0x4(%rax), %eax
movl %eax, -0x54(%rbp)
subl $0x3c, %eax
je 0x13e0e
jmp 0x13dc5
movl -0x54(%rbp), %eax
subl $0x3e, %eax
je 0x13e30
jmp 0x13dcf
movl -0x54(%rbp), %eax
subl $0x108, %eax            # imm = 0x108
je 0x13e54
jmp 0x13ddb
movl -0x54(%rbp), %eax
subl $0x109, %eax            # imm = 0x109
je 0x13e73
jmp 0x13deb
movl -0x54(%rbp), %eax
subl $0x10a, %eax            # imm = 0x10A
je 0x13e94
jmp 0x13dfb
movl -0x54(%rbp), %eax
subl $0x10b, %eax            # imm = 0x10B
je 0x13eba
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fucompi %st(1), %st
fstp %st(0)
seta %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
seta %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fucompi %st(1), %st
fstp %st(0)
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
setnp %cl
sete %al
andb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
jmp 0x13ede
fldt -0x40(%rbp)
fldt -0x50(%rbp)
fxch %st(1)
fucompi %st(1), %st
fstp %st(0)
setp %cl
setne %al
orb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x10(%rbp), %rax
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movl (%rax), %ecx
andl $0xffffff00, %ecx       # imm = 0xFFFFFF00
orl $0x1, %ecx
movl %ecx, (%rax)
movq -0x10(%rbp), %rax
movl $0x0, 0x28(%rax)
movl $0x1, -0x4(%rbp)
movl -0x4(%rbp), %eax
popq %rbp
retq
nopw %cs:(%rax,%rax)