// File: luooofan[P]hblzbd_compiler/src/arm.cpp
// Function: ZN3arm5ShiftcvNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEv
Shift::operator std::string() {
  std::string opcode = "";
  switch (opcode_) {
    case OpCode::ASR:
      opcode = "asr";
      break;
    case OpCode::LSL:
      opcode = "lsl";
      break;
    case OpCode::LSR:
      opcode = "lsr";
      break;
    case OpCode::ROR:
      opcode = "ror";
      break;
    case OpCode::RRX:
      return "rrx";
    default:
      MyAssert(0);
      break;
  }
  if (is_imm_) {
    return opcode + " #" + std::to_string(shift_imm_);
  } else {
    return opcode + " " + std::string(*shift_reg_);
  }
}

// Assembly:
subq $0x128, %rsp            # imm = 0x128
movq %rdi, 0x38(%rsp)
movq %rdi, %rax
movq %rax, 0x40(%rsp)
movq %rdi, 0x120(%rsp)
movq %rsi, 0x118(%rsp)
movq 0x118(%rsp), %rax
movq %rax, 0x48(%rsp)
leaq 0xf7(%rsp), %rdi
movq %rdi, 0x50(%rsp)
callq 0x8680
movq 0x50(%rsp), %rdx
leaq 0xf036a(%rip), %rsi     # 0xfa159
leaq 0xf8(%rsp), %rdi
callq 0xc570
jmp 0x9dfe
leaq 0xf7(%rsp), %rdi
callq 0x83c0
movq 0x48(%rsp), %rax
movl (%rax), %eax
movq %rax, 0x30(%rsp)
subq $0x4, %rax
ja 0x9f4e
movq 0x30(%rsp), %rax
leaq 0xf020f(%rip), %rcx     # 0xfa03c
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
leaq 0xf7(%rsp), %rdi
callq 0x83c0
jmp 0xa16c
leaq 0xf02aa(%rip), %rsi     # 0xfa10d
leaq 0xf8(%rsp), %rdi
callq 0x8500
jmp 0x9e72
jmp 0x9fcb
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
jmp 0xa15f
leaq 0xf027a(%rip), %rsi     # 0xfa111
leaq 0xf8(%rsp), %rdi
callq 0x8500
jmp 0x9ea6
jmp 0x9fcb
leaq 0xf0263(%rip), %rsi     # 0xfa115
leaq 0xf8(%rsp), %rdi
callq 0x8500
jmp 0x9ec1
jmp 0x9fcb
leaq 0xf21c2(%rip), %rsi     # 0xfc08f
leaq 0xf8(%rsp), %rdi
callq 0x8500
jmp 0x9edc
jmp 0x9fcb
leaq 0xe3(%rsp), %rdi
movq %rdi, 0x28(%rsp)
callq 0x8680
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rdx
leaq 0xf0215(%rip), %rsi     # 0xfa119
callq 0xc570
jmp 0x9f0b
leaq 0xe3(%rsp), %rdi
callq 0x83c0
movl $0x1, 0xdc(%rsp)
jmp 0xa145
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
leaq 0xe3(%rsp), %rdi
callq 0x83c0
jmp 0xa15f
movq 0x142093(%rip), %rdi    # 0x14bfe8
leaq 0xf019c(%rip), %rsi     # 0xfa0f8
callq 0x8330
movq %rax, 0x20(%rsp)
jmp 0x9f68
movq 0x20(%rsp), %rdi
leaq 0xf018d(%rip), %rsi     # 0xfa101
callq 0x8330
movq %rax, 0x18(%rsp)
jmp 0x9f80
movq 0x18(%rsp), %rdi
leaq 0xf145e(%rip), %rsi     # 0xfb3ea
callq 0x8330
movq %rax, 0x10(%rsp)
jmp 0x9f98
movq 0x10(%rsp), %rdi
movl $0x4b, %esi
callq 0x8650
movq %rax, 0x8(%rsp)
jmp 0x9fae
movq 0x8(%rsp), %rdi
movq 0x141fc6(%rip), %rsi    # 0x14bf80
callq 0x8380
jmp 0x9fc1
movl $0xff, %edi
callq 0x8460
movq 0x48(%rsp), %rax
testb $0x1, 0x4(%rax)
je 0xa09e
leaq 0xf01a0(%rip), %rdx     # 0xfa181
leaq 0xb8(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0xc720
jmp 0x9ff8
movq 0x48(%rsp), %rax
movl 0x8(%rax), %esi
leaq 0x98(%rsp), %rdi
callq 0xc7b0
jmp 0xa00f
movq 0x38(%rsp), %rdi
leaq 0xb8(%rsp), %rsi
leaq 0x98(%rsp), %rdx
callq 0xc630
jmp 0xa02b
leaq 0x98(%rsp), %rdi
callq 0x8728
leaq 0xb8(%rsp), %rdi
callq 0x8728
movl $0x1, 0xdc(%rsp)
jmp 0xa145
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
jmp 0xa08c
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
leaq 0x98(%rsp), %rdi
callq 0x8728
leaq 0xb8(%rsp), %rdi
callq 0x8728
jmp 0xa15f
leaq 0xf02b0(%rip), %rdx     # 0xfa355
leaq 0x78(%rsp), %rdi
leaq 0xf8(%rsp), %rsi
callq 0xc720
jmp 0xa0b9
movq 0x48(%rsp), %rax
movq 0x10(%rax), %rsi
leaq 0x58(%rsp), %rdi
callq 0xc8f0
jmp 0xa0ce
movq 0x38(%rsp), %rdi
leaq 0x78(%rsp), %rsi
leaq 0x58(%rsp), %rdx
callq 0xc630
jmp 0xa0e4
leaq 0x58(%rsp), %rdi
callq 0x8728
leaq 0x78(%rsp), %rdi
callq 0x8728
movl $0x1, 0xdc(%rsp)
jmp 0xa145
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
jmp 0xa139
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0xe8(%rsp)
movl %eax, 0xe4(%rsp)
leaq 0x58(%rsp), %rdi
callq 0x8728
leaq 0x78(%rsp), %rdi
callq 0x8728
jmp 0xa15f
leaq 0xf8(%rsp), %rdi
callq 0x8728
movq 0x40(%rsp), %rax
addq $0x128, %rsp            # imm = 0x128
retq
leaq 0xf8(%rsp), %rdi
callq 0x8728
movq 0xe8(%rsp), %rdi
callq 0x8670
nopl (%rax)