// File: /workspace/github_c_makefile_star2_O1/ccxvii[P]mujs/./jscompile.c
// Function: jsC_cexp
static void cexp(JF, js_Ast *exp)
{
	int then, end;
	int n;

	switch (exp->type) {
	case EXP_STRING:
		emitline(J, F, exp);
		emitstring(J, F, OP_STRING, exp->string);
		break;
	case EXP_NUMBER:
		emitline(J, F, exp);
		emitnumber(J, F, exp->number);
		break;
	case EXP_ELISION:
		break;
	case EXP_NULL:
		emitline(J, F, exp);
		emit(J, F, OP_NULL);
		break;
	case EXP_TRUE:
		emitline(J, F, exp);
		emit(J, F, OP_TRUE);
		break;
	case EXP_FALSE:
		emitline(J, F, exp);
		emit(J, F, OP_FALSE);
		break;
	case EXP_THIS:
		emitline(J, F, exp);
		emit(J, F, OP_THIS);
		break;

	case EXP_REGEXP:
		emitline(J, F, exp);
		emitstring(J, F, OP_NEWREGEXP, exp->string);
		emitarg(J, F, exp->number);
		break;

	case EXP_OBJECT:
		emitline(J, F, exp);
		emit(J, F, OP_NEWOBJECT);
		cobject(J, F, exp->a);
		break;

	case EXP_ARRAY:
		emitline(J, F, exp);
		emit(J, F, OP_NEWARRAY);
		carray(J, F, exp->a);
		break;

	case EXP_FUN:
		emitline(J, F, exp);
		emitfunction(J, F, newfun(J, exp->line, exp->a, exp->b, exp->c, 0, F->strict, 1));
		break;

	case EXP_IDENTIFIER:
		emitline(J, F, exp);
		emitlocal(J, F, OP_GETLOCAL, OP_GETVAR, exp);
		break;

	case EXP_INDEX:
		cexp(J, F, exp->a);
		cexp(J, F, exp->b);
		emitline(J, F, exp);
		emit(J, F, OP_GETPROP);
		break;

	case EXP_MEMBER:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		emitstring(J, F, OP_GETPROP_S, exp->b->string);
		break;

	case EXP_CALL:
		ccall(J, F, exp->a, exp->b);
		break;

	case EXP_NEW:
		cexp(J, F, exp->a);
		n = cargs(J, F, exp->b);
		emitline(J, F, exp);
		emit(J, F, OP_NEW);
		emitarg(J, F, n);
		break;

	case EXP_DELETE:
		cdelete(J, F, exp);
		break;

	case EXP_PREINC:
		cassignop1(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_INC);
		cassignop2(J, F, exp->a, 0);
		break;

	case EXP_PREDEC:
		cassignop1(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_DEC);
		cassignop2(J, F, exp->a, 0);
		break;

	case EXP_POSTINC:
		cassignop1(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_POSTINC);
		cassignop2(J, F, exp->a, 1);
		emit(J, F, OP_POP);
		break;

	case EXP_POSTDEC:
		cassignop1(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_POSTDEC);
		cassignop2(J, F, exp->a, 1);
		emit(J, F, OP_POP);
		break;

	case EXP_VOID:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_POP);
		emit(J, F, OP_UNDEF);
		break;

	case EXP_TYPEOF: ctypeof(J, F, exp); break;
	case EXP_POS: cunary(J, F, exp, OP_POS); break;
	case EXP_NEG: cunary(J, F, exp, OP_NEG); break;
	case EXP_BITNOT: cunary(J, F, exp, OP_BITNOT); break;
	case EXP_LOGNOT: cunary(J, F, exp, OP_LOGNOT); break;

	case EXP_BITOR: cbinary(J, F, exp, OP_BITOR); break;
	case EXP_BITXOR: cbinary(J, F, exp, OP_BITXOR); break;
	case EXP_BITAND: cbinary(J, F, exp, OP_BITAND); break;
	case EXP_EQ: cbinary(J, F, exp, OP_EQ); break;
	case EXP_NE: cbinary(J, F, exp, OP_NE); break;
	case EXP_STRICTEQ: cbinary(J, F, exp, OP_STRICTEQ); break;
	case EXP_STRICTNE: cbinary(J, F, exp, OP_STRICTNE); break;
	case EXP_LT: cbinary(J, F, exp, OP_LT); break;
	case EXP_GT: cbinary(J, F, exp, OP_GT); break;
	case EXP_LE: cbinary(J, F, exp, OP_LE); break;
	case EXP_GE: cbinary(J, F, exp, OP_GE); break;
	case EXP_INSTANCEOF: cbinary(J, F, exp, OP_INSTANCEOF); break;
	case EXP_IN: cbinary(J, F, exp, OP_IN); break;
	case EXP_SHL: cbinary(J, F, exp, OP_SHL); break;
	case EXP_SHR: cbinary(J, F, exp, OP_SHR); break;
	case EXP_USHR: cbinary(J, F, exp, OP_USHR); break;
	case EXP_ADD: cbinary(J, F, exp, OP_ADD); break;
	case EXP_SUB: cbinary(J, F, exp, OP_SUB); break;
	case EXP_MUL: cbinary(J, F, exp, OP_MUL); break;
	case EXP_DIV: cbinary(J, F, exp, OP_DIV); break;
	case EXP_MOD: cbinary(J, F, exp, OP_MOD); break;

	case EXP_ASS: cassign(J, F, exp); break;
	case EXP_ASS_MUL: cassignop(J, F, exp, OP_MUL); break;
	case EXP_ASS_DIV: cassignop(J, F, exp, OP_DIV); break;
	case EXP_ASS_MOD: cassignop(J, F, exp, OP_MOD); break;
	case EXP_ASS_ADD: cassignop(J, F, exp, OP_ADD); break;
	case EXP_ASS_SUB: cassignop(J, F, exp, OP_SUB); break;
	case EXP_ASS_SHL: cassignop(J, F, exp, OP_SHL); break;
	case EXP_ASS_SHR: cassignop(J, F, exp, OP_SHR); break;
	case EXP_ASS_USHR: cassignop(J, F, exp, OP_USHR); break;
	case EXP_ASS_BITAND: cassignop(J, F, exp, OP_BITAND); break;
	case EXP_ASS_BITXOR: cassignop(J, F, exp, OP_BITXOR); break;
	case EXP_ASS_BITOR: cassignop(J, F, exp, OP_BITOR); break;

	case EXP_COMMA:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		break;

	case EXP_LOGOR:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_DUP);
		end = emitjump(J, F, OP_JTRUE);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	case EXP_LOGAND:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		emit(J, F, OP_DUP);
		end = emitjump(J, F, OP_JFALSE);
		emit(J, F, OP_POP);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	case EXP_COND:
		cexp(J, F, exp->a);
		emitline(J, F, exp);
		then = emitjump(J, F, OP_JTRUE);
		cexp(J, F, exp->c);
		end = emitjump(J, F, OP_JUMP);
		label(J, F, then);
		cexp(J, F, exp->b);
		label(J, F, end);
		break;

	default:
		jsC_error(J, exp, "unknown expression type");
	}
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
movq %rdx, %r15
movq %rsi, %rbx
movq %rdi, %r14
leaq 0xd242(%rip), %r12      # 0x2b9ec
movl (%r15), %eax
addl $-0x3, %eax
cmpl $0x42, %eax
ja 0x1ef66
movslq (%r12,%rax,4), %rax
addq %r12, %rax
jmpq *%rax
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x1d6c4
movq 0x18(%r15), %r15
jmp 0x1e7aa
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x45, %ecx
jmp 0x1ef59
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x1d6c4
movq %r14, %rdi
movq %rbx, %rsi
movl $0x53, %edx
jmp 0x1e875
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3f, %ecx
jmp 0x1ef3e
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %edx
callq 0x1d6c4
movq %r14, %rdi
movq %rbx, %rsi
movl $0x52, %edx
callq 0x1ef8b
movl %eax, %ebp
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x1d6c4
jmp 0x1ee24
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x47, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x43, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x34, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x1a, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x37, %ecx
jmp 0x1ef3e
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
callq 0x1d6c4
movq %r14, %rdi
movq %rbx, %rsi
movl $0xd, %edx
jmp 0x1ed78
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1fef1
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x30, %edx
jmp 0x1eec2
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3c, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x35, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x40, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x2d, %ecx
jmp 0x1ec6c
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x34, %ecx
jmp 0x1ef3e
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movq 0x18(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x20, %edx
jmp 0x1ed78
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1fef1
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x33, %edx
jmp 0x1ed57
movq 0x10(%r15), %rdx
movq 0x18(%r15), %rcx
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1fbf1
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x37, %ecx
jmp 0x1ef59
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0xa, %edx
callq 0x1d6c4
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1fb84
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x38, %ecx
jmp 0x1ef3e
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movq 0x18(%r15), %r12
xorl %ebp, %ebp
testq %r12, %r12
je 0x1eaa2
movq 0x10(%r12), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
incl %ebp
movq 0x18(%r12), %r12
jmp 0x1ea84
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x2a, %edx
callq 0x1d6c4
movq %r14, %rdi
movq %rbx, %rsi
movl %ebp, %edx
jmp 0x1ebab
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x11, %edx
jmp 0x1ed78
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x2c, %ecx
jmp 0x1ec6c
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x46, %ecx
jmp 0x1ef3e
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0xe, %edx
jmp 0x1ed78
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1fde4
movl 0x4(%r15), %esi
movl %esi, 0x5c(%rbx)
movq 0x10(%r15), %rdx
movq 0x18(%r15), %rcx
movq 0x20(%r15), %r8
movl 0x10(%rbx), %eax
movq %r14, %rdi
xorl %r9d, %r9d
pushq $0x1
pushq %rax
callq 0x8fb5
addq $0x10, %rsp
movq %r14, %rdi
movq %rbx, %rsi
movq %rax, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1d87c
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2021b
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq 0x38(%r15), %rcx
movq %r14, %rdi
movq %rbx, %rsi
movl $0xc, %edx
callq 0x1f7fe
cvttsd2si 0x30(%r15), %edx
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1d8f3
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq 0x38(%r15), %rcx
movq %r14, %rdi
movq %rbx, %rsi
movl $0x8, %edx
jmp 0x1ed29
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0xf, %edx
jmp 0x1ed78
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x38, %ecx
jmp 0x1ef59
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x13, %edx
movl $0x17, %ecx
movq %r15, %r8
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1f6a1
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x35, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x2e, %ecx
jmp 0x1ec6c
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x10, %edx
jmp 0x1ed78
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x2f, %ecx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2017e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x39, %ecx
jmp 0x1ef3e
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movsd 0x30(%r15), %xmm0
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1f850
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x36, %ecx
jmp 0x1ef3e
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0xb, %edx
callq 0x1d6c4
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1f987
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x39, %ecx
jmp 0x1ef59
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq 0x18(%r15), %rax
movq 0x38(%rax), %rcx
movq %r14, %rdi
movq %rbx, %rsi
movl $0x21, %edx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1f7fe
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1fef1
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x32, %edx
callq 0x1d6c4
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
movl $0x1, %ecx
callq 0x20005
movq %r14, %rdi
movq %rbx, %rsi
xorl %edx, %edx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x1d6c4
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3a, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x41, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20113
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x52, %edx
callq 0x1ef8b
movl %eax, %r12d
movq 0x20(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movq %r14, %rdi
movq %rbx, %rsi
movl $0x51, %edx
callq 0x1ef8b
movl %eax, %ebp
movl 0x2c(%rbx), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1ef7a
movq 0x20(%rbx), %rcx
movslq %r12d, %rdx
movw %ax, (%rcx,%rdx,2)
movq 0x18(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1e792
movl 0x2c(%rbx), %eax
cmpl $0x10000, %eax          # imm = 0x10000
jae 0x1ef7a
movq 0x20(%rbx), %rcx
movslq %ebp, %rdx
movw %ax, (%rcx,%rdx,2)
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
retq
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x48, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x36, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3b, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3d, %ecx
jmp 0x1ef3e
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
callq 0x1fef1
movl 0x4(%r15), %eax
movl %eax, 0x5c(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
movl $0x31, %edx
callq 0x1d6c4
movq 0x10(%r15), %rdx
movq %r14, %rdi
movq %rbx, %rsi
xorl %ecx, %ecx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x20005
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3e, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x42, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x46, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x47, %ecx
jmp 0x1ef3e
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3b, %ecx
jmp 0x1ef59
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x45, %ecx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x201c5
movq %r14, %rdi
movq %rbx, %rsi
movq %r15, %rdx
movl $0x3a, %ecx
popq %rbx
popq %r12
popq %r14
popq %r15
popq %rbp
jmp 0x2033d
leaq 0x150f0(%rip), %rdx     # 0x3405d
movq %r14, %rdi
movq %r15, %rsi
xorl %eax, %eax
callq 0x8de3
leaq 0x151c9(%rip), %rsi     # 0x3414a
movq %r14, %rdi
xorl %eax, %eax
callq 0xcc25