// File: /workspace/github_cpp_makefile_star2_O3/EstherJin[P]TetrisRemake/z.cc
// Function: Z::turn(int)
void Z::turn(int shift){
  if (shift > 0){
    shift = shift % 4;
  } else{
    shift = ((-4 * shift) - (shift * -1)) % 4;
  }
  if ((shift % 2) != 0){
    if (position == 0){
      State stat = {' ', coords.at(2), false};
      setState(stat);
      notifyObservers();
      coords.at(2).row -= 2;
      stat = {c, coords.at(2), true};
      setState(stat);
      notifyObservers();
      stat = {' ', coords.at(3), false};
      setState(stat);
      notifyObservers();
      coords.at(3).col -= 2;
      stat = {c, coords.at(3), true};
      setState(stat);
      notifyObservers();
      position = 1;
    } else {
      State stat = {' ', coords.at(2), false};
      setState(stat);
      notifyObservers();
      coords.at(2).row += 2;
      stat = {c, coords.at(2), true};
      setState(stat);
      notifyObservers();
      stat = {' ', coords.at(3), false};
      setState(stat);
      notifyObservers();
      coords.at(3).col += 2;
      stat = {c, coords.at(3), true};
      setState(stat);
      notifyObservers();
      position = 0;
    }
  }
}

// Assembly:
pushq %rbp
pushq %r15
pushq %r14
pushq %rbx
pushq %rax
testb $0x1, %sil
je 0x11ca5
movq %rdi, %rbx
movabsq $0x100000000, %r15      # imm = 0x100000000
movq 0x30(%rdi), %rax
movq 0x38(%rdi), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpl $0x0, 0x48(%rdi)
je 0x11bb6
cmpq $0x2, %rdx
jbe 0x11cb0
movl 0x10(%rax), %esi
movl 0x14(%rax), %edx
shlq $0x20, %rsi
leaq 0x8(%rbx), %r14
orq $0x20, %rsi
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x2, %rdx
jbe 0x11cb0
movl 0x10(%rax), %esi
movl 0x14(%rax), %edx
addl $0x2, %esi
movl %esi, 0x10(%rax)
movzbl 0x4c(%rbx), %eax
shlq $0x20, %rsi
orq %rax, %rsi
orq %r15, %rdx
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x3, %rdx
jbe 0x11cbe
movl 0x18(%rax), %esi
movl 0x1c(%rax), %edx
shlq $0x20, %rsi
orq $0x20, %rsi
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x3, %rdx
jbe 0x11cbe
xorl %ebp, %ebp
movl $0x2, %edx
jmp 0x11c7b
cmpq $0x2, %rdx
jbe 0x11cb0
movl 0x10(%rax), %esi
movl 0x14(%rax), %edx
shlq $0x20, %rsi
leaq 0x8(%rbx), %r14
orq $0x20, %rsi
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x2, %rdx
jbe 0x11cb0
movl 0x10(%rax), %esi
movl 0x14(%rax), %edx
addl $-0x2, %esi
movl %esi, 0x10(%rax)
movzbl 0x4c(%rbx), %eax
shlq $0x20, %rsi
orq %rax, %rsi
orq %r15, %rdx
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x3, %rdx
jbe 0x11cbe
movl 0x18(%rax), %esi
movl 0x1c(%rax), %edx
shlq $0x20, %rsi
orq $0x20, %rsi
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movq 0x30(%rbx), %rax
movq 0x38(%rbx), %rdx
subq %rax, %rdx
sarq $0x3, %rdx
cmpq $0x3, %rdx
jbe 0x11cbe
movl $0x1, %ebp
movl $0xfffffffe, %edx       # imm = 0xFFFFFFFE
addl 0x1c(%rax), %edx
movl %edx, 0x1c(%rax)
movzbl 0x4c(%rbx), %ecx
movl 0x18(%rax), %esi
shlq $0x20, %rsi
orq %rcx, %rsi
orq %r15, %rdx
movq %r14, %rdi
callq 0x10e5a
movq %r14, %rdi
callq 0x10e2c
movl %ebp, 0x48(%rbx)
addq $0x8, %rsp
popq %rbx
popq %r14
popq %r15
popq %rbp
retq
leaq 0x14ad(%rip), %rdi      # 0x13164
movl $0x2, %esi
jmp 0x11cca
leaq 0x149f(%rip), %rdi      # 0x13164
movl $0x3, %esi
xorl %eax, %eax
callq 0x53d0
nop