// File: tomfunkhouser[P]gaps/pkgs/R3Shapes/R3Grid.cpp
// Function: gaps::R3Grid::RasterizeGridTriangle(int const*, int const*, int const*, double, int)
void R3Grid::
RasterizeGridTriangle(const int p1[3], const int p2[3], const int p3[3], RNScalar value, int operation)
{
  int i,j;

  // Figure out the min, max, and delta in each dimension
  int mn[3], mx[3], delta[3];
  for (i = 0; i < 3; i++) {
    mx[i]=mn[i]=p1[i];
    if (p2[i] < mn[i]) mn[i]=p2[i];
    if (p3[i] < mn[i]) mn[i]=p3[i];
    if (p2[i] > mx[i]) mx[i]=p2[i];
    if (p3[i] > mx[i]) mx[i]=p3[i];
    delta[i] = mx[i] - mn[i];
  }

  // Determine direction of maximal delta
  int d = 0;
  if ((delta[1] > delta[0]) && (delta[1] > delta[2])) d = 1;
  else if (delta[2] > delta[0]) d = 2;

  // Sort by d-value
  const int *q1,*q2,*q3;
  if(p1[d]>=p2[d] && p1[d]>=p3[d]){
    q1=p1;
    if(p2[d]>=p3[d]){
      q2=p2;
      q3=p3;
    }
    else{
      q2=p3;
      q3=p2;
    }
  }
  else if(p2[d]>=p1[d] && p2[d]>=p3[d]){
    q1=p2;
    if(p1[d]>=p3[d]){
      q2=p1;
      q3=p3;
    }
    else{
      q2=p3;
      q3=p1;
    }
  }
  else{
    q1=p3;
    if(p1[d]>=p2[d]){
      q2=p1;
      q3=p2;
    }
    else{
      q2=p2;
      q3=p1;
    }
  }

  // Init state
  int dx,dx1,dx2,ddx;
  dx=q1[d]-q2[d];
  dx1=q1[d]-q2[d];
  dx2=q1[d]-q3[d];
  ddx=dx1*dx2;

  int r1[3],r2[3];
  int last1[3],last2[3];
  int off1[3],off2[3];
  for(i=0;i<3;i++){
    last1[i]=q1[i];
    last2[i]=q1[i];

    off1[i]=0;
    off2[i]=0;

    r1[i]=(-q1[i]+q2[i])*dx2;
    r2[i]=(-q1[i]+q3[i])*dx1;
  }

  // Draw Top triangle
  if(dx==0){
    for(i=0;i<3;i++){
      last1[i]=q1[i];
      last2[i]=q2[i];
    }
  }
  else{
    for(i=0;i<dx;i++){
      RasterizeGridSpan(last1,last2,value, operation);
      for(j=0;j<3;j++){
        off1[j]+=r1[j];
        off2[j]+=r2[j];

        last1[j]+=off1[j]/ddx;
        if(off1[j]<0){off1[j]=-((-off1[j])%ddx);}
        else{off1[j]%=ddx;}

        last2[j]+=off2[j]/ddx;
        if(off2[j]<0){off2[j]=-((-off2[j])%ddx);}
        else{off2[j]%=ddx;}
      }
    }
  }

  // Init
  dx=q2[d]-q3[d];
  dx1=last1[d]-q3[d];
  dx2=last2[d]-q3[d];
  ddx=dx1*dx2;
  if(dx==0){
    RasterizeGridSpan(q2,q3,value,operation);
    return;
  }

  for(i=0;i<3;i++){
    off1[i]=0;
    off2[i]=0;
    r1[i]=(-last1[i]+q3[i])*dx2;
    r2[i]=(-last2[i]+q3[i])*dx1;
  }

  // Draw Bottom parrallelogram
  for(i=0;i<=dx;i++){
    RasterizeGridSpan(last1,last2,value,operation);
    for(j=0;j<3;j++){
      off1[j]+=r1[j];
      off2[j]+=r2[j];

      last1[j]+=off1[j]/ddx;
      if(off1[j]<0){off1[j]=-((-off1[j])%ddx);}
      else{off1[j]%=ddx;}

      last2[j]+=off2[j]/ddx;
      if(off2[j]<0){off2[j]=-((-off2[j])%ddx);}
      else{off2[j]%=ddx;}
    }
  }
}

// Assembly:
subq $0xf8, %rsp
movq %rdi, 0xf0(%rsp)
movq %rsi, 0xe8(%rsp)
movq %rdx, 0xe0(%rsp)
movq %rcx, 0xd8(%rsp)
movsd %xmm0, 0xd0(%rsp)
movl %r8d, 0xcc(%rsp)
movq 0xf0(%rsp), %rax
movq %rax, 0x20(%rsp)
movl $0x0, 0xc8(%rsp)
cmpl $0x3, 0xc8(%rsp)
jge 0x609aa
movq 0xe8(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xb8(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
movl %ecx, 0xac(%rsp,%rax,4)
movq 0xe0(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movslq 0xc8(%rsp), %rcx
cmpl 0xb8(%rsp,%rcx,4), %eax
jge 0x60895
movq 0xe0(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xb8(%rsp,%rax,4)
movq 0xd8(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movslq 0xc8(%rsp), %rcx
cmpl 0xb8(%rsp,%rcx,4), %eax
jge 0x608db
movq 0xd8(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xb8(%rsp,%rax,4)
movq 0xe0(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movslq 0xc8(%rsp), %rcx
cmpl 0xac(%rsp,%rcx,4), %eax
jle 0x60921
movq 0xe0(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xac(%rsp,%rax,4)
movq 0xd8(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movslq 0xc8(%rsp), %rcx
cmpl 0xac(%rsp,%rcx,4), %eax
jle 0x60967
movq 0xd8(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xac(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
movl 0xac(%rsp,%rax,4), %ecx
movslq 0xc8(%rsp), %rax
subl 0xb8(%rsp,%rax,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0xa0(%rsp,%rax,4)
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x60810
movl $0x0, 0x9c(%rsp)
movl 0xa4(%rsp), %eax
cmpl 0xa0(%rsp), %eax
jle 0x609e2
movl 0xa4(%rsp), %eax
cmpl 0xa8(%rsp), %eax
jle 0x609e2
movl $0x1, 0x9c(%rsp)
jmp 0x609ff
movl 0xa8(%rsp), %eax
cmpl 0xa0(%rsp), %eax
jle 0x609fd
movl $0x2, 0x9c(%rsp)
jmp 0x609ff
movq 0xe8(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xe0(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60ad2
movq 0xe8(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xd8(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60ad2
movq 0xe8(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0xe0(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xd8(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60aad
movq 0xe0(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60acd
movq 0xd8(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60c20
movq 0xe0(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xe8(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60ba2
movq 0xe0(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xd8(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60ba2
movq 0xe0(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0xe8(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xd8(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60b80
movq 0xe8(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xd8(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60ba0
movq 0xd8(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xe8(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60c1e
movq 0xd8(%rsp), %rax
movq %rax, 0x90(%rsp)
movq 0xe8(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0xe0(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
cmpl (%rcx,%rdx,4), %eax
jl 0x60bfc
movq 0xe8(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xe0(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60c1c
movq 0xe0(%rsp), %rax
movq %rax, 0x88(%rsp)
movq 0xe8(%rsp), %rax
movq %rax, 0x80(%rsp)
jmp 0x60c1e
jmp 0x60c20
movq 0x90(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0x88(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x7c(%rsp)
movq 0x90(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0x88(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x78(%rsp)
movq 0x90(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0x80(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x74(%rsp)
movl 0x78(%rsp), %eax
imull 0x74(%rsp), %eax
movl %eax, 0x70(%rsp)
movl $0x0, 0xc8(%rsp)
cmpl $0x3, 0xc8(%rsp)
jge 0x60daa
movq 0x90(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x4c(%rsp,%rax,4)
movq 0x90(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x40(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
movl $0x0, 0x34(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
movl $0x0, 0x28(%rsp,%rax,4)
movq 0x90(%rsp), %rax
movslq 0xc8(%rsp), %rdx
xorl %ecx, %ecx
subl (%rax,%rdx,4), %ecx
movq 0x88(%rsp), %rax
movslq 0xc8(%rsp), %rdx
addl (%rax,%rdx,4), %ecx
imull 0x74(%rsp), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x64(%rsp,%rax,4)
movq 0x90(%rsp), %rax
movslq 0xc8(%rsp), %rdx
xorl %ecx, %ecx
subl (%rax,%rdx,4), %ecx
movq 0x80(%rsp), %rax
movslq 0xc8(%rsp), %rdx
addl (%rax,%rdx,4), %ecx
imull 0x78(%rsp), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x58(%rsp,%rax,4)
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x60cb6
cmpl $0x0, 0x7c(%rsp)
jne 0x60e1c
movl $0x0, 0xc8(%rsp)
cmpl $0x3, 0xc8(%rsp)
jge 0x60e17
movq 0x90(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x4c(%rsp,%rax,4)
movq 0x88(%rsp), %rax
movslq 0xc8(%rsp), %rcx
movl (%rax,%rcx,4), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x40(%rsp,%rax,4)
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x60dbc
jmp 0x60fcf
movl $0x0, 0xc8(%rsp)
movl 0xc8(%rsp), %eax
cmpl 0x7c(%rsp), %eax
jge 0x60fcd
movq 0x20(%rsp), %rdi
leaq 0x4c(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movsd 0xd0(%rsp), %xmm0
movl 0xcc(%rsp), %ecx
callq 0x60470
movl $0x0, 0xc4(%rsp)
cmpl $0x3, 0xc4(%rsp)
jge 0x60fb5
movslq 0xc4(%rsp), %rax
movl 0x64(%rsp,%rax,4), %ecx
movslq 0xc4(%rsp), %rax
addl 0x34(%rsp,%rax,4), %ecx
movl %ecx, 0x34(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x58(%rsp,%rax,4), %ecx
movslq 0xc4(%rsp), %rax
addl 0x28(%rsp,%rax,4), %ecx
movl %ecx, 0x28(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x34(%rsp,%rax,4), %eax
cltd
idivl 0x70(%rsp)
movl %eax, %ecx
movslq 0xc4(%rsp), %rax
addl 0x4c(%rsp,%rax,4), %ecx
movl %ecx, 0x4c(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
cmpl $0x0, 0x34(%rsp,%rax,4)
jge 0x60f04
movslq 0xc4(%rsp), %rcx
xorl %eax, %eax
subl 0x34(%rsp,%rcx,4), %eax
cltd
idivl 0x70(%rsp)
xorl %ecx, %ecx
subl %edx, %ecx
movslq 0xc4(%rsp), %rax
movl %ecx, 0x34(%rsp,%rax,4)
jmp 0x60f25
movl 0x70(%rsp), %ecx
movslq 0xc4(%rsp), %rax
movq %rax, 0x18(%rsp)
movl 0x34(%rsp,%rax,4), %eax
cltd
idivl %ecx
movq 0x18(%rsp), %rax
movl %edx, 0x34(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x28(%rsp,%rax,4), %eax
cltd
idivl 0x70(%rsp)
movl %eax, %ecx
movslq 0xc4(%rsp), %rax
addl 0x40(%rsp,%rax,4), %ecx
movl %ecx, 0x40(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
cmpl $0x0, 0x28(%rsp,%rax,4)
jge 0x60f7c
movslq 0xc4(%rsp), %rcx
xorl %eax, %eax
subl 0x28(%rsp,%rcx,4), %eax
cltd
idivl 0x70(%rsp)
xorl %ecx, %ecx
subl %edx, %ecx
movslq 0xc4(%rsp), %rax
movl %ecx, 0x28(%rsp,%rax,4)
jmp 0x60f9d
movl 0x70(%rsp), %ecx
movslq 0xc4(%rsp), %rax
movq %rax, 0x10(%rsp)
movl 0x28(%rsp,%rax,4), %eax
cltd
idivl %ecx
movq 0x10(%rsp), %rax
movl %edx, 0x28(%rsp,%rax,4)
jmp 0x60f9f
movl 0xc4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc4(%rsp)
jmp 0x60e67
jmp 0x60fb7
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x60e27
jmp 0x60fcf
movq 0x88(%rsp), %rax
movslq 0x9c(%rsp), %rcx
movl (%rax,%rcx,4), %eax
movq 0x80(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x7c(%rsp)
movslq 0x9c(%rsp), %rax
movl 0x4c(%rsp,%rax,4), %eax
movq 0x80(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x78(%rsp)
movslq 0x9c(%rsp), %rax
movl 0x40(%rsp,%rax,4), %eax
movq 0x80(%rsp), %rcx
movslq 0x9c(%rsp), %rdx
subl (%rcx,%rdx,4), %eax
movl %eax, 0x74(%rsp)
movl 0x78(%rsp), %eax
imull 0x74(%rsp), %eax
movl %eax, 0x70(%rsp)
cmpl $0x0, 0x7c(%rsp)
jne 0x61082
movq 0x20(%rsp), %rdi
movq 0x88(%rsp), %rsi
movq 0x80(%rsp), %rdx
movsd 0xd0(%rsp), %xmm0
movl 0xcc(%rsp), %ecx
callq 0x60470
jmp 0x612e4
movl $0x0, 0xc8(%rsp)
cmpl $0x3, 0xc8(%rsp)
jge 0x61135
movslq 0xc8(%rsp), %rax
movl $0x0, 0x34(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
movl $0x0, 0x28(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
xorl %ecx, %ecx
subl 0x4c(%rsp,%rax,4), %ecx
movq 0x80(%rsp), %rax
movslq 0xc8(%rsp), %rdx
addl (%rax,%rdx,4), %ecx
imull 0x74(%rsp), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x64(%rsp,%rax,4)
movslq 0xc8(%rsp), %rax
xorl %ecx, %ecx
subl 0x40(%rsp,%rax,4), %ecx
movq 0x80(%rsp), %rax
movslq 0xc8(%rsp), %rdx
addl (%rax,%rdx,4), %ecx
imull 0x78(%rsp), %ecx
movslq 0xc8(%rsp), %rax
movl %ecx, 0x58(%rsp,%rax,4)
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x6108d
movl $0x0, 0xc8(%rsp)
movl 0xc8(%rsp), %eax
cmpl 0x7c(%rsp), %eax
jg 0x612e4
movq 0x20(%rsp), %rdi
leaq 0x4c(%rsp), %rsi
leaq 0x40(%rsp), %rdx
movsd 0xd0(%rsp), %xmm0
movl 0xcc(%rsp), %ecx
callq 0x60470
movl $0x0, 0xc4(%rsp)
cmpl $0x3, 0xc4(%rsp)
jge 0x612cc
movslq 0xc4(%rsp), %rax
movl 0x64(%rsp,%rax,4), %ecx
movslq 0xc4(%rsp), %rax
addl 0x34(%rsp,%rax,4), %ecx
movl %ecx, 0x34(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x58(%rsp,%rax,4), %ecx
movslq 0xc4(%rsp), %rax
addl 0x28(%rsp,%rax,4), %ecx
movl %ecx, 0x28(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x34(%rsp,%rax,4), %eax
cltd
idivl 0x70(%rsp)
movl %eax, %ecx
movslq 0xc4(%rsp), %rax
addl 0x4c(%rsp,%rax,4), %ecx
movl %ecx, 0x4c(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
cmpl $0x0, 0x34(%rsp,%rax,4)
jge 0x6121d
movslq 0xc4(%rsp), %rcx
xorl %eax, %eax
subl 0x34(%rsp,%rcx,4), %eax
cltd
idivl 0x70(%rsp)
xorl %ecx, %ecx
subl %edx, %ecx
movslq 0xc4(%rsp), %rax
movl %ecx, 0x34(%rsp,%rax,4)
jmp 0x6123e
movl 0x70(%rsp), %ecx
movslq 0xc4(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x34(%rsp,%rax,4), %eax
cltd
idivl %ecx
movq 0x8(%rsp), %rax
movl %edx, 0x34(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
movl 0x28(%rsp,%rax,4), %eax
cltd
idivl 0x70(%rsp)
movl %eax, %ecx
movslq 0xc4(%rsp), %rax
addl 0x40(%rsp,%rax,4), %ecx
movl %ecx, 0x40(%rsp,%rax,4)
movslq 0xc4(%rsp), %rax
cmpl $0x0, 0x28(%rsp,%rax,4)
jge 0x61295
movslq 0xc4(%rsp), %rcx
xorl %eax, %eax
subl 0x28(%rsp,%rcx,4), %eax
cltd
idivl 0x70(%rsp)
xorl %ecx, %ecx
subl %edx, %ecx
movslq 0xc4(%rsp), %rax
movl %ecx, 0x28(%rsp,%rax,4)
jmp 0x612b4
movl 0x70(%rsp), %ecx
movslq 0xc4(%rsp), %rax
movq %rax, (%rsp)
movl 0x28(%rsp,%rax,4), %eax
cltd
idivl %ecx
movq (%rsp), %rax
movl %edx, 0x28(%rsp,%rax,4)
jmp 0x612b6
movl 0xc4(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc4(%rsp)
jmp 0x61180
jmp 0x612ce
movl 0xc8(%rsp), %eax
addl $0x1, %eax
movl %eax, 0xc8(%rsp)
jmp 0x61140
addq $0xf8, %rsp
retq
nopl (%rax)