// File: /workspace/github_c_makefile_star2_O0/almk277[P]ROSE/rasm/parser.cpp
// Function: parser::parse_operands(instruction const&)
void parser::parse_operands(const instruction &instr)
{
	string name;
	for (auto op = instr.operands; *op; ++op) {
		switch (*op) {
		case '-': break;
		case 'c':
			m.text.put(s.read_byte());
			break;
		case 'w':
			m.text.put(s.read_int());
			break;
		case 's':
		case 'v':
		case 'i':
		case 'f':
		case 'a':
		case 'b':
		case 'F':
		case 'o':
			s >> name;
			m.text.put(m.text.find_var(name));
			break;
		case 'D':
			s >> name;
			m.text.put(m.data[name]);
			break;
		case 'P':
			s >> name;
			m.text.put(m.ptbl[name]);
			break;
		case 'A':
			s >> name;
			m.text.put(m.str[name]);
			break;
		case 'M':
			s >> name;
			m.text.put(m.mtbl[name]);
			break;
		case 'I':
			s >> name;
			m.text.put(m.imp[name]);
			break;
		case 'r':
			s >> name;
			m.text.add_ref(name, s.line());
			break;
		default: throw std::logic_error("wrong operand type");
		} // switch (*op)
	} // for
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0xf0, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x50(%rbp)
leaq -0x30(%rbp), %rdi
callq 0x4500
movq -0x10(%rbp), %rax
movq 0x8(%rax), %rax
movq %rax, -0x38(%rbp)
movq -0x38(%rbp), %rax
cmpb $0x0, (%rax)
je 0x1c4b8
movq -0x38(%rbp), %rax
movsbl (%rax), %eax
addl $-0x2d, %eax
movl %eax, %ecx
movq %rcx, -0x58(%rbp)
subl $0x4a, %eax
ja 0x1c44a
movq -0x58(%rbp), %rax
leaq 0x74b7(%rip), %rcx      # 0x23618
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
movq 0x8(%rax), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0x68(%rbp)
callq 0x9c80
movb %al, -0x59(%rbp)
jmp 0x1c18e
movb -0x59(%rbp), %al
movq -0x68(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
jmp 0x1c4ca
movq -0x50(%rbp), %rax
movq (%rax), %rdi
movq 0x8(%rax), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0x78(%rbp)
callq 0x9c50
movl %eax, -0x6c(%rbp)
jmp 0x1c1d2
movl -0x6c(%rbp), %esi
movq -0x78(%rbp), %rdi
callq 0x1d980
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c1f5
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
addq $0x240, %rdi            # imm = 0x240
movq %rdi, -0x88(%rbp)
leaq -0x30(%rbp), %rsi
callq 0x1df20
movb %al, -0x79(%rbp)
jmp 0x1c219
movb -0x79(%rbp), %al
movq -0x88(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c242
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
movq %rdi, %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0x98(%rbp)
addq $0x390, %rdi            # imm = 0x390
leaq -0x30(%rbp), %rsi
callq 0x1da80
movb %al, -0x89(%rbp)
jmp 0x1c272
movb -0x89(%rbp), %al
movq -0x98(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c29e
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
movq %rdi, %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xa8(%rbp)
addq $0xa0, %rdi
leaq -0x30(%rbp), %rsi
callq 0x1da80
movb %al, -0x99(%rbp)
jmp 0x1c2ce
movb -0x99(%rbp), %al
movq -0xa8(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c2fa
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
movq %rdi, %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xb8(%rbp)
addq $0x338, %rdi            # imm = 0x338
leaq -0x30(%rbp), %rsi
callq 0xfab0
movl %eax, -0xac(%rbp)
jmp 0x1c32a
movl -0xac(%rbp), %esi
movq -0xb8(%rbp), %rdi
callq 0x112b0
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c353
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
movq %rdi, %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xc8(%rbp)
addq $0x110, %rdi            # imm = 0x110
leaq -0x30(%rbp), %rsi
callq 0x1da80
movb %al, -0xb9(%rbp)
jmp 0x1c383
movb -0xb9(%rbp), %al
movq -0xc8(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c3af
movq -0x50(%rbp), %rax
movq 0x8(%rax), %rdi
movq %rdi, %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xd8(%rbp)
addq $0x180, %rdi            # imm = 0x180
leaq -0x30(%rbp), %rsi
callq 0x1da80
movb %al, -0xc9(%rbp)
jmp 0x1c3df
movb -0xc9(%rbp), %al
movq -0xd8(%rbp), %rdi
movzbl %al, %esi
callq 0x1d910
jmp 0x1c4a5
movq -0x50(%rbp), %rax
movq (%rax), %rdi
leaq -0x30(%rbp), %rsi
callq 0x9ce0
jmp 0x1c40b
movq -0x50(%rbp), %rax
movq (%rax), %rdi
movq 0x8(%rax), %rax
addq $0x240, %rax            # imm = 0x240
movq %rax, -0xe8(%rbp)
callq 0x1df50
movl %eax, -0xdc(%rbp)
jmp 0x1c430
movl -0xdc(%rbp), %edx
movq -0xe8(%rbp), %rdi
leaq -0x30(%rbp), %rsi
callq 0xff80
jmp 0x1c448
jmp 0x1c4a5
movl $0x10, %edi
callq 0x41e0
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0xf0(%rbp)
leaq 0x738e(%rip), %rsi      # 0x237f6
callq 0x4550
jmp 0x1c46f
movq -0xf0(%rbp), %rdi
movq 0x18b4b(%rip), %rsi     # 0x34fc8
movq 0x18b24(%rip), %rdx     # 0x34fa8
callq 0x4640
jmp 0x1c4dc
movq -0xf0(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x40(%rbp)
movl %eax, -0x44(%rbp)
callq 0x42c0
jmp 0x1c4ca
jmp 0x1c4a7
movq -0x38(%rbp), %rax
addq $0x1, %rax
movq %rax, -0x38(%rbp)
jmp 0x1c130
leaq -0x30(%rbp), %rdi
callq 0x4748
addq $0xf0, %rsp
popq %rbp
retq
leaq -0x30(%rbp), %rdi
callq 0x4748
movq -0x40(%rbp), %rdi
callq 0x4670
nopl (%rax)