// File: evincarofautumn[P]protodata/Interpreter.cpp
// Function: Interpreter::run(std::vector<Term, std::allocator<Term>> const&)
void Interpreter::run(const std::vector<Term>& terms) {
  for (auto term : terms) {
    switch (term.type) {
    case Term::NOOP:
      break;
    case Term::PUSH:
      state.push(state.top());
      break;
    case Term::POP:
      if (state.size() <= 1)
        throw std::runtime_error("Mismatched braces.");
      state.pop();
      break;
    case Term::WRITE_SIGNED:
      write_integer(state.top(), term.value.as_signed, output);
      break;
    case Term::WRITE_UNSIGNED:
      write_integer(state.top(), term.value.as_unsigned, output);
      break;
    case Term::WRITE_DOUBLE:
      write_float(state.top(), term.value.as_double, output);
      break;
    case Term::SET_ENDIANNESS:
      state.top().endianness = term.value.as_endianness;
      break;
    case Term::SET_SIGNEDNESS:
      state.top().signedness = term.value.as_signedness;
      break;
    case Term::SET_WIDTH:
      state.top().width = term.value.as_width;
      break;
    case Term::SET_FORMAT:
      state.top().format = term.value.as_format;
      break;
    }
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x80, %rsp
movq %rdi, -0x8(%rbp)
movq %rsi, -0x10(%rbp)
movq -0x8(%rbp), %rax
movq %rax, -0x58(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x18(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5d40
movq %rax, -0x20(%rbp)
movq -0x18(%rbp), %rdi
callq 0x5d70
movq %rax, -0x28(%rbp)
leaq -0x20(%rbp), %rdi
leaq -0x28(%rbp), %rsi
callq 0x5da0
testb $0x1, %al
jne 0x5ab3
jmp 0x5c76
leaq -0x20(%rbp), %rdi
callq 0x5de0
movups (%rax), %xmm0
movaps %xmm0, -0x40(%rbp)
movl -0x40(%rbp), %eax
movq %rax, -0x60(%rbp)
subq $0x9, %rax
ja 0x5c66
movq -0x60(%rbp), %rax
leaq 0x14525(%rip), %rcx     # 0x1a004
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
jmp 0x5c66
movq -0x58(%rbp), %rdi
movq %rdi, %rax
addq $0x20, %rax
movq %rax, -0x68(%rbp)
addq $0x20, %rdi
callq 0x5e30
movq -0x68(%rbp), %rdi
movq %rax, %rsi
callq 0x5e00
jmp 0x5c66
movq -0x58(%rbp), %rdi
addq $0x20, %rdi
callq 0x5e50
cmpq $0x1, %rax
ja 0x5b7c
movl $0x10, %edi
callq 0x4150
movq %rax, %rdi
movq %rdi, %rax
movq %rax, -0x70(%rbp)
leaq 0x1450c(%rip), %rsi     # 0x1a050
callq 0x40f0
jmp 0x5b4b
movq -0x70(%rbp), %rdi
movq 0x2049a(%rip), %rsi     # 0x25ff0
movq 0x2043b(%rip), %rdx     # 0x25f98
callq 0x44b0
movq -0x70(%rbp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, -0x48(%rbp)
movl %eax, -0x4c(%rbp)
callq 0x4200
jmp 0x5c7f
movq -0x58(%rbp), %rdi
addq $0x20, %rdi
callq 0x5e70
jmp 0x5c66
movq -0x58(%rbp), %rdi
addq $0x20, %rdi
callq 0x5e30
movq -0x58(%rbp), %rdx
movq %rax, %rdi
leaq -0x40(%rbp), %rsi
addq $0x8, %rsi
callq 0x5e90
jmp 0x5c66
movq -0x58(%rbp), %rdi
addq $0x20, %rdi
callq 0x5e30
movq -0x58(%rbp), %rdx
movq %rax, %rdi
leaq -0x40(%rbp), %rsi
addq $0x8, %rsi
callq 0x64f0
jmp 0x5c66
movq -0x58(%rbp), %rdi
addq $0x20, %rdi
callq 0x5e30
movq -0x58(%rbp), %rdx
movq %rax, %rdi
leaq -0x40(%rbp), %rsi
addq $0x8, %rsi
callq 0x6b50
jmp 0x5c66
movq -0x58(%rbp), %rdi
movl -0x38(%rbp), %eax
movl %eax, -0x74(%rbp)
addq $0x20, %rdi
callq 0x5e30
movl -0x74(%rbp), %ecx
movl %ecx, 0x4(%rax)
jmp 0x5c66
movq -0x58(%rbp), %rdi
movl -0x38(%rbp), %eax
movl %eax, -0x78(%rbp)
addq $0x20, %rdi
callq 0x5e30
movl -0x78(%rbp), %ecx
movl %ecx, 0x8(%rax)
jmp 0x5c66
movq -0x58(%rbp), %rdi
movl -0x38(%rbp), %eax
movl %eax, -0x7c(%rbp)
addq $0x20, %rdi
callq 0x5e30
movl -0x7c(%rbp), %ecx
movl %ecx, (%rax)
jmp 0x5c66
movq -0x58(%rbp), %rdi
movl -0x38(%rbp), %eax
movl %eax, -0x80(%rbp)
addq $0x20, %rdi
callq 0x5e30
movl -0x80(%rbp), %ecx
movl %ecx, 0xc(%rax)
jmp 0x5c68
leaq -0x20(%rbp), %rdi
callq 0x6d30
jmp 0x5a9d
addq $0x80, %rsp
popq %rbp
retq
movq -0x48(%rbp), %rdi
callq 0x44d0
nopl (%rax,%rax)