// File: /workspace/github_c_makefile_star2_O0/michaelforney[P]cproc/scan.c
// Function: scankind
static int
scankind(struct scanner *s, struct location *loc)
{
	enum tokenkind tok;
	struct location oldloc;

again:
	*loc = s->loc;
	switch (s->chr) {
	case ' ':
	case '\t':
	case '\f':
	case '\v':
		s->sawspace = true;
		nextchar(s);
		goto again;
	case '!':
		return op2(s, TLNOT, TNEQ);
	case '"':
		return stringlit(s);
	case '#':
		nextchar(s);
		if (s->chr != '#')
			return THASH;
		nextchar(s);
		return THASHHASH;
	case '%':
		return op2(s, TMOD, TMODASSIGN);
	case '&':
		return op3(s, TBAND, TBANDASSIGN, TLAND);
	case '\'':
		return charconst(s);
	case '*':
		return op2(s, TMUL, TMULASSIGN);
	case '+':
		return op3(s, TADD, TADDASSIGN, TINC);
	case '-':
		tok = op3(s, TSUB, TSUBASSIGN, TDEC);
		if (tok != TSUB || s->chr != '>')
			return tok;
		nextchar(s);
		return TARROW;
	case '/':
		tok = op2(s, TDIV, TDIVASSIGN);
		if (tok == TDIV && comment(s))
			goto again;
		return tok;
	case '<':
		return op4(s, TLESS, TLEQ, TSHL, TSHLASSIGN);
	case '=':
		return op2(s, TASSIGN, TEQL);
	case '>':
		return op4(s, TGREATER, TGEQ, TSHR, TSHRASSIGN);
	case '^':
		return op2(s, TXOR, TXORASSIGN);
	case '|':
		return op3(s, TBOR, TBORASSIGN, TLOR);
	case '\n':
		nextchar(s);
		return TNEWLINE;
	case '[':
		nextchar(s);
		return TLBRACK;
	case ']':
		nextchar(s);
		return TRBRACK;
	case '(':
		nextchar(s);
		return TLPAREN;
	case ')':
		nextchar(s);
		return TRPAREN;
	case '{':
		nextchar(s);
		return TLBRACE;
	case '}':
		nextchar(s);
		return TRBRACE;
	case '.':
		nextchar(s);
		if (isdigit(s->chr)) {
			bufadd(&s->buf, '.');
			return number(s);
		}
		if (s->chr != '.')
			return TPERIOD;
		oldloc = s->loc;
		nextchar(s);
		if (s->chr != '.') {
			ungetc(s->chr, s->file);
			s->loc = oldloc;
			s->chr = '.';
			return TPERIOD;
		}
		nextchar(s);
		return TELLIPSIS;
	case '~':
		nextchar(s);
		return TBNOT;
	case '?':
		nextchar(s);
		return TQUESTION;
	case ':':
		nextchar(s);
		if (s->chr != ':')
			return TCOLON;
		nextchar(s);
		return TCOLONCOLON;
	case ';':
		nextchar(s);
		return TSEMICOLON;
	case ',':
		nextchar(s);
		return TCOMMA;
	case 'L':
	case 'U':
	case 'u':
		s->usebuf = true;
		nextchar(s);
		if (s->buf.str[0] == 'u' && s->chr == '8')
			nextchar(s);
		switch (s->chr) {
		case '\'': return charconst(s);
		case '"': return stringlit(s);
		}
		return ident(s);
	case EOF:
		return TEOF;
	default:
		if (isdigit(s->chr))
			return number(s);
		if (isalpha(s->chr) || s->chr == '_')
			return ident(s);
		s->usebuf = true;
		nextchar(s);
		return TOTHER;
	}
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x50, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
movq -0x10(%rbp), %rcx
movq 0x20(%rcx), %rdx
movq %rdx, 0x10(%rax)
movups 0x10(%rcx), %xmm0
movups %xmm0, (%rax)
movq -0x10(%rbp), %rax
movl (%rax), %eax
incl %eax
movl %eax, %ecx
movq %rcx, -0x40(%rbp)
subl $0x7f, %eax
ja 0xf57b
movq -0x40(%rbp), %rax
leaq 0xbf77(%rip), %rcx      # 0x1b040
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq -0x10(%rbp), %rax
movb $0x1, 0x5(%rax)
movq -0x10(%rbp), %rdi
callq 0xee30
jmp 0xf090
movq -0x10(%rbp), %rdi
movl $0x4f, %esi
movl $0x59, %edx
callq 0xf740
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xf790
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movq -0x10(%rbp), %rax
cmpl $0x23, (%rax)
je 0xf12f
movl $0x6f, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x70, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x51, %esi
movl $0x66, %edx
callq 0xf740
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x4a, %esi
movl $0x6b, %edx
movl $0x5c, %ecx
callq 0xf840
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xf8b0
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x4b, %esi
movl $0x64, %edx
callq 0xf740
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x4c, %esi
movl $0x67, %edx
movl $0x48, %ecx
callq 0xf840
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x4d, %esi
movl $0x68, %edx
movl $0x49, %ecx
callq 0xf840
movl %eax, -0x1c(%rbp)
cmpl $0x4d, -0x1c(%rbp)
jne 0xf1f5
movq -0x10(%rbp), %rax
cmpl $0x3e, (%rax)
je 0xf200
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x47, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x50, %esi
movl $0x65, %edx
callq 0xf740
movl %eax, -0x1c(%rbp)
cmpl $0x50, -0x1c(%rbp)
jne 0xf245
movq -0x10(%rbp), %rdi
callq 0xf960
testb $0x1, %al
jne 0xf240
jmp 0xf245
jmp 0xf090
movl -0x1c(%rbp), %eax
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x54, %esi
movl $0x56, %edx
movl $0x52, %ecx
movl $0x69, %r8d
callq 0xfa40
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x63, %esi
movl $0x58, %edx
callq 0xf740
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x55, %esi
movl $0x57, %edx
movl $0x53, %ecx
movl $0x6a, %r8d
callq 0xfa40
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x5a, %esi
movl $0x6c, %edx
callq 0xf740
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
movl $0x5b, %esi
movl $0x6d, %edx
movl $0x5d, %ecx
callq 0xf840
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x2, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x40, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x41, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x42, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x43, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x44, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x45, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
callq 0x3250
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0xf3ce
movq -0x10(%rbp), %rdi
addq $0x28, %rdi
movl $0x2e, %esi
callq 0xf6a0
movq -0x10(%rbp), %rdi
callq 0xfad0
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rax
cmpl $0x2e, (%rax)
je 0xf3e3
movl $0x46, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rax
movq 0x10(%rax), %rcx
movq %rcx, -0x38(%rbp)
movq 0x18(%rax), %rcx
movq %rcx, -0x30(%rbp)
movq 0x20(%rax), %rax
movq %rax, -0x28(%rbp)
movq -0x10(%rbp), %rdi
callq 0xee30
movq -0x10(%rbp), %rax
cmpl $0x2e, (%rax)
je 0xf456
movq -0x10(%rbp), %rax
movl (%rax), %edi
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rsi
callq 0x31d0
movq -0x10(%rbp), %rax
movq -0x38(%rbp), %rcx
movq %rcx, 0x10(%rax)
movq -0x30(%rbp), %rcx
movq %rcx, 0x18(%rax)
movq -0x28(%rbp), %rcx
movq %rcx, 0x20(%rax)
movq -0x10(%rbp), %rax
movl $0x2e, (%rax)
movl $0x46, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x62, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x4e, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x5e, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movq -0x10(%rbp), %rax
cmpl $0x3a, (%rax)
je 0xf4b3
movl $0x5f, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x60, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x61, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x6e, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
movq -0x10(%rbp), %rdi
callq 0xee30
movq -0x10(%rbp), %rax
movq 0x28(%rax), %rax
movzbl (%rax), %eax
cmpl $0x75, %eax
jne 0xf525
movq -0x10(%rbp), %rax
cmpl $0x38, (%rax)
jne 0xf525
movq -0x10(%rbp), %rdi
callq 0xee30
movq -0x10(%rbp), %rax
movl (%rax), %eax
movl %eax, -0x44(%rbp)
subl $0x22, %eax
je 0xf550
jmp 0xf535
movl -0x44(%rbp), %eax
subl $0x27, %eax
jne 0xf561
jmp 0xf53f
movq -0x10(%rbp), %rdi
callq 0xf8b0
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xf790
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rdi
callq 0xfb60
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movl $0x1, -0x4(%rbp)
jmp 0xf5f2
callq 0x3250
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x800, %eax            # imm = 0x800
cmpl $0x0, %eax
je 0xf5a6
movq -0x10(%rbp), %rdi
callq 0xfad0
movl %eax, -0x4(%rbp)
jmp 0xf5f2
callq 0x3250
movq (%rax), %rax
movq -0x10(%rbp), %rcx
movslq (%rcx), %rcx
movzwl (%rax,%rcx,2), %eax
andl $0x400, %eax            # imm = 0x400
cmpl $0x0, %eax
jne 0xf5cc
movq -0x10(%rbp), %rax
cmpl $0x5f, (%rax)
jne 0xf5da
movq -0x10(%rbp), %rdi
callq 0xfb60
movl %eax, -0x4(%rbp)
jmp 0xf5f2
movq -0x10(%rbp), %rax
movb $0x1, 0x4(%rax)
movq -0x10(%rbp), %rdi
callq 0xee30
movl $0x3, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x50, %rsp
popq %rbp
retq
nopl (%rax,%rax)