// File: /workspace/github_c_makefile_star2_O0/michaelforney[P]cproc/eval.c
// Function: binary
static void
binary(struct expr *expr, enum tokenkind op, struct expr *l, struct expr *r)
{
	expr->kind = EXPRCONST;
	if (l->type->prop & PROPFLOAT)
		op |= F;
	else if (l->type->prop & PROPINT && l->type->u.basic.issigned)
		op |= S;
	switch (op) {
	case TMUL:
	case TMUL|S:     expr->u.constant.u = l->u.constant.u * r->u.constant.u; break;
	case TMUL|F:     expr->u.constant.f = l->u.constant.f * r->u.constant.f; break;
	case TDIV:       expr->u.constant.u = l->u.constant.u / r->u.constant.u; break;
	case TDIV|S:     expr->u.constant.i = l->u.constant.i / r->u.constant.i; break;
	case TDIV|F:     expr->u.constant.f = l->u.constant.f / r->u.constant.f; break;
	case TMOD:       expr->u.constant.u = l->u.constant.u % r->u.constant.u; break;
	case TMOD|S:     expr->u.constant.i = l->u.constant.i % r->u.constant.i; break;
	case TADD:
	case TADD|S:     expr->u.constant.u = l->u.constant.u + r->u.constant.u; break;
	case TADD|F:     expr->u.constant.f = l->u.constant.f + r->u.constant.f; break;
	case TSUB:
	case TSUB|S:     expr->u.constant.u = l->u.constant.u - r->u.constant.u; break;
	case TSUB|F:     expr->u.constant.f = l->u.constant.f - r->u.constant.f; break;
	case TSHL:
	case TSHL|S:     expr->u.constant.u = l->u.constant.u << (r->u.constant.u & 63); break;
	case TSHR:       expr->u.constant.u = l->u.constant.u >> (r->u.constant.u & 63); break;
	case TSHR|S:     expr->u.constant.i = l->u.constant.i >> (r->u.constant.u & 63); break;
	case TBAND:
	case TBAND|S:    expr->u.constant.u = l->u.constant.u & r->u.constant.u; break;
	case TBOR:
	case TBOR|S:     expr->u.constant.u = l->u.constant.u | r->u.constant.u; break;
	case TXOR:
	case TXOR|S:     expr->u.constant.u = l->u.constant.u ^ r->u.constant.u; break;
	case TLESS:      expr->u.constant.u = l->u.constant.u < r->u.constant.u; break;
	case TLESS|S:    expr->u.constant.u = l->u.constant.i < r->u.constant.i; break;
	case TLESS|F:    expr->u.constant.u = l->u.constant.f < r->u.constant.f; break;
	case TGREATER:   expr->u.constant.u = l->u.constant.u > r->u.constant.u; break;
	case TGREATER|S: expr->u.constant.u = l->u.constant.i > r->u.constant.i; break;
	case TGREATER|F: expr->u.constant.u = l->u.constant.f > r->u.constant.f; break;
	case TLEQ:       expr->u.constant.u = l->u.constant.u <= r->u.constant.u; break;
	case TLEQ|S:     expr->u.constant.u = l->u.constant.i <= r->u.constant.i; break;
	case TLEQ|F:     expr->u.constant.u = l->u.constant.f <= r->u.constant.f; break;
	case TGEQ:       expr->u.constant.u = l->u.constant.u >= r->u.constant.u; break;
	case TGEQ|S:     expr->u.constant.u = l->u.constant.i >= r->u.constant.i; break;
	case TGEQ|F:     expr->u.constant.u = l->u.constant.f >= r->u.constant.f; break;
	case TEQL:
	case TEQL|S:     expr->u.constant.u = l->u.constant.u == r->u.constant.u; break;
	case TEQL|F:     expr->u.constant.u = l->u.constant.f == r->u.constant.f; break;
	case TNEQ:
	case TNEQ|S:     expr->u.constant.u = l->u.constant.u != r->u.constant.u; break;
	case TNEQ|F:     expr->u.constant.u = l->u.constant.f != r->u.constant.f; break;
	default:
		fatal("internal error; unknown binary expression");
	}
	cast(expr);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x30, %rsp
movq %rdi, -0x8(%rbp)
movl %esi, -0xc(%rbp)
movq %rdx, -0x18(%rbp)
movq %rcx, -0x20(%rbp)
movq -0x8(%rbp), %rax
movl $0x1, (%rax)
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x4(%rax), %eax
andl $0x20, %eax
cmpl $0x0, %eax
je 0x7751
movl -0xc(%rbp), %eax
orl $0x100, %eax            # imm = 0x100
movl %eax, -0xc(%rbp)
jmp 0x777f
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
movl 0x4(%rax), %eax
andl $0x2, %eax
cmpl $0x0, %eax
je 0x777d
movq -0x18(%rbp), %rax
movq 0x8(%rax), %rax
testb $0x1, 0x40(%rax)
je 0x777d
movl -0xc(%rbp), %eax
orl $0x200, %eax            # imm = 0x200
movl %eax, -0xc(%rbp)
jmp 0x777f
movl -0xc(%rbp), %eax
movl %eax, -0x24(%rbp)
subl $0x4a, %eax
je 0x7bd4
jmp 0x7790
movl -0x24(%rbp), %eax
subl $0x4b, %eax
je 0x7a05
jmp 0x779e
movl -0x24(%rbp), %eax
subl $0x4c, %eax
je 0x7ae5
jmp 0x77ac
movl -0x24(%rbp), %eax
subl $0x4d, %eax
je 0x7b22
jmp 0x77ba
movl -0x24(%rbp), %eax
subl $0x50, %eax
je 0x7a43
jmp 0x77c8
movl -0x24(%rbp), %eax
subl $0x51, %eax
je 0x7aa7
jmp 0x77d6
movl -0x24(%rbp), %eax
subl $0x52, %eax
je 0x7b5f
jmp 0x77e4
movl -0x24(%rbp), %eax
subl $0x53, %eax
je 0x7b86
jmp 0x77f2
movl -0x24(%rbp), %eax
subl $0x54, %eax
je 0x7c2b
jmp 0x7800
movl -0x24(%rbp), %eax
subl $0x55, %eax
je 0x7ca9
jmp 0x780e
movl -0x24(%rbp), %eax
subl $0x56, %eax
je 0x7d23
jmp 0x781c
movl -0x24(%rbp), %eax
subl $0x57, %eax
je 0x7da1
jmp 0x782a
movl -0x24(%rbp), %eax
subl $0x58, %eax
je 0x7e1b
jmp 0x7838
movl -0x24(%rbp), %eax
subl $0x59, %eax
je 0x7e6f
jmp 0x7846
movl -0x24(%rbp), %eax
subl $0x5a, %eax
je 0x7c0e
jmp 0x7854
movl -0x24(%rbp), %eax
subl $0x5b, %eax
je 0x7bf1
jmp 0x7862
movl -0x24(%rbp), %eax
subl $0x14b, %eax            # imm = 0x14B
je 0x7a23
jmp 0x7872
movl -0x24(%rbp), %eax
subl $0x14c, %eax            # imm = 0x14C
je 0x7b02
jmp 0x7882
movl -0x24(%rbp), %eax
subl $0x14d, %eax            # imm = 0x14D
je 0x7b3f
jmp 0x7892
movl -0x24(%rbp), %eax
subl $0x150, %eax            # imm = 0x150
je 0x7a87
jmp 0x78a2
movl -0x24(%rbp), %eax
subl $0x154, %eax            # imm = 0x154
je 0x7c7b
jmp 0x78b2
movl -0x24(%rbp), %eax
subl $0x155, %eax            # imm = 0x155
je 0x7cf9
jmp 0x78c2
movl -0x24(%rbp), %eax
subl $0x156, %eax            # imm = 0x156
je 0x7d73
jmp 0x78d2
movl -0x24(%rbp), %eax
subl $0x157, %eax            # imm = 0x157
je 0x7df1
jmp 0x78e2
movl -0x24(%rbp), %eax
subl $0x158, %eax            # imm = 0x158
je 0x7e43
jmp 0x78f2
movl -0x24(%rbp), %eax
subl $0x159, %eax            # imm = 0x159
je 0x7e94
jmp 0x7902
movl -0x24(%rbp), %eax
subl $0x24a, %eax            # imm = 0x24A
je 0x7bd4
jmp 0x7912
movl -0x24(%rbp), %eax
subl $0x24b, %eax            # imm = 0x24B
je 0x7a05
jmp 0x7922
movl -0x24(%rbp), %eax
subl $0x24c, %eax            # imm = 0x24C
je 0x7ae5
jmp 0x7932
movl -0x24(%rbp), %eax
subl $0x24d, %eax            # imm = 0x24D
je 0x7b22
jmp 0x7942
movl -0x24(%rbp), %eax
subl $0x250, %eax            # imm = 0x250
je 0x7a65
jmp 0x7952
movl -0x24(%rbp), %eax
subl $0x251, %eax            # imm = 0x251
je 0x7ac6
jmp 0x7962
movl -0x24(%rbp), %eax
subl $0x252, %eax            # imm = 0x252
je 0x7b5f
jmp 0x7972
movl -0x24(%rbp), %eax
subl $0x253, %eax            # imm = 0x253
je 0x7bad
jmp 0x7982
movl -0x24(%rbp), %eax
subl $0x254, %eax            # imm = 0x254
je 0x7c53
jmp 0x7992
movl -0x24(%rbp), %eax
subl $0x255, %eax            # imm = 0x255
je 0x7cd1
jmp 0x79a2
movl -0x24(%rbp), %eax
subl $0x256, %eax            # imm = 0x256
je 0x7d4b
jmp 0x79b2
movl -0x24(%rbp), %eax
subl $0x257, %eax            # imm = 0x257
je 0x7dc9
jmp 0x79c2
movl -0x24(%rbp), %eax
subl $0x258, %eax            # imm = 0x258
je 0x7e1b
jmp 0x79d2
movl -0x24(%rbp), %eax
subl $0x259, %eax            # imm = 0x259
je 0x7e6f
jmp 0x79e2
movl -0x24(%rbp), %eax
subl $0x25a, %eax            # imm = 0x25A
je 0x7c0e
jmp 0x79f2
movl -0x24(%rbp), %eax
subl $0x25b, %eax            # imm = 0x25B
je 0x7bf1
jmp 0x7ec0
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
imulq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
mulsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
xorl %edx, %edx
divq 0x30(%rcx)
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cqto
idivq 0x30(%rcx)
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
divsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
xorl %edx, %edx
divq 0x30(%rcx)
movq -0x8(%rbp), %rax
movq %rdx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cqto
idivq 0x30(%rcx)
movq -0x8(%rbp), %rax
movq %rdx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
addq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
addsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
subq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
subsd 0x30(%rax), %xmm0
movq -0x8(%rbp), %rax
movsd %xmm0, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x30(%rcx), %rcx
andq $0x3f, %rcx
shlq %cl, %rax
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x30(%rcx), %rcx
andq $0x3f, %rcx
shrq %cl, %rax
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
movq 0x30(%rcx), %rcx
andq $0x3f, %rcx
sarq %cl, %rax
movq %rax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
andq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
orq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rcx
movq -0x20(%rbp), %rax
xorq 0x30(%rax), %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setb %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setl %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x30(%rax), %xmm0
ucomisd %xmm1, %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
seta %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setg %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
ucomisd 0x30(%rax), %xmm0
seta %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setbe %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setle %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm1
movq -0x20(%rbp), %rax
movsd 0x30(%rax), %xmm0
ucomisd %xmm1, %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setge %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
ucomisd 0x30(%rax), %xmm0
setae %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
sete %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
ucomisd 0x30(%rax), %xmm0
sete %al
setnp %cl
andb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movq 0x30(%rax), %rax
movq -0x20(%rbp), %rcx
cmpq 0x30(%rcx), %rax
setne %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
movq -0x18(%rbp), %rax
movsd 0x30(%rax), %xmm0
movq -0x20(%rbp), %rax
ucomisd 0x30(%rax), %xmm0
setne %al
setp %cl
orb %cl, %al
andb $0x1, %al
movzbl %al, %eax
movslq %eax, %rcx
movq -0x8(%rbp), %rax
movq %rcx, 0x30(%rax)
jmp 0x7ece
leaq 0x113da(%rip), %rdi     # 0x192a1
movb $0x0, %al
callq 0x12650
movq -0x8(%rbp), %rdi
callq 0x7640
addq $0x30, %rsp
popq %rbp
retq
nopl (%rax)