LLM4Binary/decompile-bench-makefile huggingface dataset:
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelFeatureVector.cpp
// Function: gaps::R3SurfelFeatureVector::Resize(int)
void R3SurfelFeatureVector::
Resize(int size)
{
  // Save old stuff
  RNScalar *old_values = values;
  int old_nvalues = nvalues;

  // Set new stuff
  nvalues = size;
  values = NULL;

  // Copy values
  if (nvalues > 0) {
    values = new RNScalar [ nvalues ];
    int overlap = (nvalues > old_nvalues) ? old_nvalues : nvalues;
    for (int i = 0; i < overlap; i++) values[i] = old_values[i];
    for (int i = overlap; i < nvalues; i++) values[i] = RN_UNKNOWN;
  }

  // Delete old values
  if (old_values) delete [] old_values;
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movl %esi, 0x3c(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x18(%rsp)
movq 0x8(%rax), %rcx
movq %rcx, 0x30(%rsp)
movl 0x10(%rax), %ecx
movl %ecx, 0x2c(%rsp)
movl 0x3c(%rsp), %ecx
movl %ecx, 0x10(%rax)
movq $0x0, 0x8(%rax)
cmpl $0x0, 0x10(%rax)
jle 0x6cd3e
movq 0x18(%rsp), %rax
movslq 0x10(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x8(%rax)
movl 0x10(%rax), %eax
cmpl 0x2c(%rsp), %eax
jle 0x6cca9
movl 0x2c(%rsp), %eax
movl %eax, 0x14(%rsp)
jmp 0x6ccb5
movq 0x18(%rsp), %rax
movl 0x10(%rax), %eax
movl %eax, 0x14(%rsp)
movl 0x14(%rsp), %eax
movl %eax, 0x28(%rsp)
movl $0x0, 0x24(%rsp)
movl 0x24(%rsp), %eax
cmpl 0x28(%rsp), %eax
jge 0x6ccfe
movq 0x18(%rsp), %rax
movq 0x30(%rsp), %rcx
movslq 0x24(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x8(%rax), %rax
movslq 0x24(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6ccc5
movl 0x28(%rsp), %eax
movl %eax, 0x20(%rsp)
movq 0x18(%rsp), %rcx
movl 0x20(%rsp), %eax
cmpl 0x10(%rcx), %eax
jge 0x6cd3c
movq 0x18(%rsp), %rax
movq 0x8(%rax), %rax
movslq 0x20(%rsp), %rcx
movsd 0x137456(%rip), %xmm0   # 0x1a4180
movsd %xmm0, (%rax,%rcx,8)
movl 0x20(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x20(%rsp)
jmp 0x6cd06
jmp 0x6cd3e
cmpq $0x0, 0x30(%rsp)
je 0x6cd62
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, %rax
je 0x6cd60
movq 0x8(%rsp), %rdi
callq 0x13750
jmp 0x6cd62
addq $0x48, %rsp
retq
nopw (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelFeatureVector.cpp
// Function: gaps::R3SurfelFeatureVector::EuclideanDistanceSquared(gaps::R3SurfelFeatureVector const&) const
RNLength R3SurfelFeatureVector::
EuclideanDistanceSquared(const R3SurfelFeatureVector& vector) const
{
  // Compute sum of squared differences
  RNLength sum = 0;
  assert(NValues() == vector.NValues());
  for (int i = 0; i < NValues(); i++) {
    RNScalar delta = Value(i) - vector.Value(i);
    sum += delta * delta;
  }

  // Return squared Euclidean distance
  return sum;
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x18(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0x30(%rsp)
movl $0x0, 0x2c(%rsp)
movq 0x18(%rsp), %rdi
movl 0x2c(%rsp), %eax
movl %eax, 0x14(%rsp)
callq 0x1bc40
movl %eax, %ecx
movl 0x14(%rsp), %eax
cmpl %ecx, %eax
jge 0x6cea7
movq 0x18(%rsp), %rdi
movl 0x2c(%rsp), %esi
callq 0x18640
movsd %xmm0, 0x8(%rsp)
movq 0x38(%rsp), %rdi
movl 0x2c(%rsp), %esi
callq 0x18640
movaps %xmm0, %xmm1
movsd 0x8(%rsp), %xmm0
subsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp)
movsd 0x20(%rsp), %xmm0
movsd 0x20(%rsp), %xmm2
movsd 0x30(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x30(%rsp)
movl 0x2c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x2c(%rsp)
jmp 0x6ce29
movsd 0x30(%rsp), %xmm0
addq $0x48, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelFeatureVector.cpp
// Function: gaps::R3SurfelFeatureVector::Correlation(gaps::R3SurfelFeatureVector const&) const
RNScalar R3SurfelFeatureVector::
Correlation(const R3SurfelFeatureVector& vector) const
{
  // Compute sum of products (dot product)
  RNLength sum = 0;
  assert(NValues() == vector.NValues());
  for (int i = 0; i < NValues(); i++) {
    sum += Value(i) * vector.Value(i);
  }

  // Return correlation
  return sum;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
xorps %xmm0, %xmm0
movsd %xmm0, 0x20(%rsp)
movl $0x0, 0x1c(%rsp)
movq 0x10(%rsp), %rdi
movl 0x1c(%rsp), %eax
movl %eax, 0xc(%rsp)
callq 0x1bc40
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x6cf4f
movq 0x10(%rsp), %rdi
movl 0x1c(%rsp), %esi
callq 0x18640
movsd %xmm0, (%rsp)
movq 0x28(%rsp), %rdi
movl 0x1c(%rsp), %esi
callq 0x18640
movaps %xmm0, %xmm2
movsd (%rsp), %xmm0
movsd 0x20(%rsp), %xmm1
mulsd %xmm2, %xmm0
addsd %xmm1, %xmm0
movsd %xmm0, 0x20(%rsp)
movl 0x1c(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x1c(%rsp)
jmp 0x6cee9
movsd 0x20(%rsp), %xmm0
addq $0x38, %rsp
retq
nopw (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelFeatureVector.cpp
// Function: gaps::R3SurfelFeatureVector::Print(_IO_FILE*, char const*, char const*) const
void R3SurfelFeatureVector::
Print(FILE *fp, const char *prefix, const char *suffix) const
{
  // Check fp
  if (!fp) fp = stdout;

  // Print feature values
  if (prefix) fprintf(fp, "%s", prefix);
  for (int i = 0; i < NValues(); i++) {
    fprintf(fp, "%g ", Value(i));
  }
  if (suffix) fprintf(fp, "%s", suffix);
  fprintf(fp, "\n");
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
movq %rdx, 0x30(%rsp)
movq %rcx, 0x28(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x18(%rsp)
cmpq $0x0, 0x38(%rsp)
jne 0x6cf99
movq 0x185fff(%rip), %rax    # 0x1f2f90
movq (%rax), %rax
movq %rax, 0x38(%rsp)
cmpq $0x0, 0x30(%rsp)
je 0x6cfb9
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rdx
leaq 0x13a611(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movl $0x0, 0x24(%rsp)
movq 0x18(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, 0x14(%rsp)
callq 0x1bc40
movl %eax, %ecx
movl 0x14(%rsp), %eax
cmpl %ecx, %eax
jge 0x6d015
movq 0x18(%rsp), %rdi
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x24(%rsp), %esi
callq 0x18640
movq 0x8(%rsp), %rdi
leaq 0x137889(%rip), %rsi    # 0x1a488a
movb $0x1, %al
callq 0x13810
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6cfc1
cmpq $0x0, 0x28(%rsp)
je 0x6d035
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rdx
leaq 0x13a595(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movq 0x38(%rsp), %rdi
leaq 0x13e6b1(%rip), %rsi    # 0x1ab6f2
movb $0x0, %al
callq 0x13810
addq $0x48, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::BBox() const
const R3Box& R3SurfelObjectSet::
BBox(void) const
{
  // Update bounding box
  if (bbox[0][0] == FLT_MAX) {
    R3SurfelObjectSet *objectset = (R3SurfelObjectSet *) this;
    objectset->bbox = R3null_box;
    for (int i = 0; i < NObjects(); i++) {
      R3SurfelObject *object = Object(i);
      objectset->bbox.Union(object->BBox());
    }
  }

  // Return bounding box
  return bbox;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movq %rdi, 0x10(%rsp)
addq $0x18, %rdi
xorl %esi, %esi
callq 0x1bb60
movq %rax, %rdi
xorl %esi, %esi
callq 0x1bba0
movsd 0x136f30(%rip), %xmm1   # 0x1a4190
ucomisd %xmm1, %xmm0
jne 0x6d2f8
jp 0x6d2f8
movq 0x10(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
addq $0x18, %rdi
leaq 0x19007e(%rip), %rsi    # 0x1fd308
callq 0x1bd40
movl $0x0, 0x24(%rsp)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, 0xc(%rsp)
callq 0x6d7e0
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x6d2f6
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %esi
callq 0x6d800
movq %rax, 0x18(%rsp)
movq 0x28(%rsp), %rax
addq $0x18, %rax
movq %rax, (%rsp)
movq 0x18(%rsp), %rdi
callq 0x193b0
movq (%rsp), %rdi
movq %rax, %rsi
callq 0xcbc30
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6d297
jmp 0x6d2f8
movq 0x10(%rsp), %rax
addq $0x18, %rax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::TimestampRange() const
const RNInterval& R3SurfelObjectSet::
TimestampRange(void) const
{
  // Update timestamp range
  if (timestamp_range.Min() == FLT_MAX) {
    R3SurfelObjectSet *objectset = (R3SurfelObjectSet *) this;
    objectset->timestamp_range.Reset(FLT_MAX,-FLT_MAX);
    for (int i = 0; i < NObjects(); i++) {
      R3SurfelObject *object = Object(i);
      objectset->timestamp_range.Union(object->TimestampRange());
    }
  }

  // Return timestamp range
  return timestamp_range;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq 0x30(%rsp), %rdi
movq %rdi, 0x10(%rsp)
addq $0x50, %rdi
callq 0x1bc30
movsd 0x136e5c(%rip), %xmm1   # 0x1a4190
ucomisd %xmm1, %xmm0
jne 0x6d3d5
jp 0x6d3d5
movq 0x10(%rsp), %rax
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
addq $0x50, %rdi
movsd 0x136e31(%rip), %xmm0   # 0x1a4190
movsd 0x136e21(%rip), %xmm1   # 0x1a4188
callq 0x1c150
movl $0x0, 0x24(%rsp)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, 0xc(%rsp)
callq 0x6d7e0
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x6d3d3
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %esi
callq 0x6d800
movq %rax, 0x18(%rsp)
movq 0x28(%rsp), %rax
addq $0x50, %rax
movq %rax, (%rsp)
movq 0x18(%rsp), %rdi
callq 0x19600
movq (%rsp), %rdi
movq %rax, %rsi
callq 0x1bbc0
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6d374
jmp 0x6d3d5
movq 0x10(%rsp), %rax
addq $0x50, %rax
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::RemoveObject(int)
void R3SurfelObjectSet::
RemoveObject(int k)
{
  // Copy last object over object
  RNArrayEntry *entry = objects.KthEntry(k);
  assert(entry);
  R3SurfelObject *tail = objects.Tail();
  objects.EntryContents(entry) = tail;
  objects.RemoveTail();

  // Update bounding box
  bbox[0][0] = FLT_MAX;

  // Update timestamp range
  timestamp_range.Reset(FLT_MAX,-FLT_MAX);
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movl %esi, 0x2c(%rsp)
movq 0x30(%rsp), %rdi
movq %rdi, 0x10(%rsp)
addq $0x8, %rdi
movl 0x2c(%rsp), %esi
callq 0x1c080
movq 0x10(%rsp), %rdi
movq %rax, 0x20(%rsp)
addq $0x8, %rdi
callq 0x30ad0
movq 0x10(%rsp), %rdi
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rax
movq %rax, 0x8(%rsp)
addq $0x8, %rdi
movq 0x20(%rsp), %rsi
callq 0x30ac0
movq 0x8(%rsp), %rcx
movq 0x10(%rsp), %rdi
movq %rcx, (%rax)
addq $0x8, %rdi
callq 0x1c0c0
movq 0x10(%rsp), %rdi
addq $0x18, %rdi
xorl %esi, %esi
callq 0x1bda0
movq %rax, %rdi
xorl %esi, %esi
callq 0x1bde0
movq 0x10(%rsp), %rdi
movsd 0x136c3a(%rip), %xmm0   # 0x1a4190
movsd %xmm0, (%rax)
addq $0x50, %rdi
movsd 0x136c2a(%rip), %xmm0   # 0x1a4190
movsd 0x136c1a(%rip), %xmm1   # 0x1a4188
callq 0x1c150
addq $0x38, %rsp
retq
nopl (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::Empty()
void R3SurfelObjectSet::
Empty(void)
{
  // Remove objects
  objects.Empty();

  // Update bounding box
  bbox = R3Box(FLT_MAX, FLT_MAX, FLT_MAX, -FLT_MAX, -FLT_MAX, -FLT_MAX);

  // Update timestamp range
  timestamp_range.Reset(FLT_MAX,-FLT_MAX);
}

// Assembly:
subq $0x68, %rsp
movq %rdi, 0x60(%rsp)
movq 0x60(%rsp), %rdi
movq %rdi, 0x8(%rsp)
addq $0x8, %rdi
xorl %esi, %esi
callq 0x142550
leaq 0x28(%rsp), %rdi
movq %rdi, 0x10(%rsp)
movsd 0x136be0(%rip), %xmm2   # 0x1a4190
movsd 0x136bd0(%rip), %xmm5   # 0x1a4188
movaps %xmm2, %xmm0
movaps %xmm2, %xmm1
movaps %xmm5, %xmm3
movaps %xmm5, %xmm4
callq 0xc9ee0
movq 0x8(%rsp), %rdi
movq 0x10(%rsp), %rsi
addq $0x18, %rdi
callq 0x1bd40
jmp 0x6d5de
leaq 0x28(%rsp), %rdi
callq 0x1b990
movq 0x8(%rsp), %rdi
addq $0x50, %rdi
movsd 0x136b97(%rip), %xmm0   # 0x1a4190
movsd 0x136b87(%rip), %xmm1   # 0x1a4188
callq 0x1c150
addq $0x68, %rsp
retq
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x20(%rsp)
movl %eax, 0x1c(%rsp)
leaq 0x28(%rsp), %rdi
callq 0x1b990
movq 0x20(%rsp), %rdi
callq 0x13970
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::Draw(gaps::RNFlags) const
void R3SurfelObjectSet::
Draw(RNFlags flags) const
{
  // Draw objects
  for (int i = 0; i < NObjects(); i++) {
    R3SurfelObject *object = Object(i);
    object->Draw(flags);
  }
}

// Assembly:
subq $0x38, %rsp
movq %rsi, 0x30(%rsp)
movq %rdi, 0x28(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0x0, 0x24(%rsp)
movq 0x8(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, 0x4(%rsp)
callq 0x6d7e0
movl %eax, %ecx
movl 0x4(%rsp), %eax
cmpl %ecx, %eax
jge 0x6d6a6
movq 0x8(%rsp), %rdi
movl 0x24(%rsp), %esi
callq 0x6d800
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
movq 0x30(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x10(%rsp), %rsi
movq (%rdi), %rax
callq *0x48(%rax)
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6d650
addq $0x38, %rsp
retq
nopl (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectSet.cpp
// Function: gaps::R3SurfelObjectSet::Print(_IO_FILE*, char const*, char const*) const
void R3SurfelObjectSet::
Print(FILE *fp, const char *prefix, const char *suffix) const
{
  // Check fp
  if (!fp) fp = stdout;

  // Print objects
  // Print all surfel objects
  if (prefix) fprintf(fp, "%s", prefix);
  for (int i = 0; i < NObjects(); i++) {
    R3SurfelObject *object = Object(i);
    fprintf(fp, "%d ", object->SceneIndex());
  }
  if (suffix) fprintf(fp, "%s", suffix);
  fprintf(fp, "\n");
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
movq %rdx, 0x30(%rsp)
movq %rcx, 0x28(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, 0x38(%rsp)
jne 0x6d6e9
movq 0x1858af(%rip), %rax    # 0x1f2f90
movq (%rax), %rax
movq %rax, 0x38(%rsp)
cmpq $0x0, 0x30(%rsp)
je 0x6d709
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rdx
leaq 0x139ec1(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movl $0x0, 0x24(%rsp)
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %eax
movl %eax, 0xc(%rsp)
callq 0x6d7e0
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x6d774
movq 0x10(%rsp), %rdi
movl 0x24(%rsp), %esi
callq 0x6d800
movq %rax, 0x18(%rsp)
movq 0x38(%rsp), %rax
movq %rax, (%rsp)
movq 0x18(%rsp), %rdi
callq 0x1bf60
movq (%rsp), %rdi
movl %eax, %edx
leaq 0x13711f(%rip), %rsi    # 0x1a487f
movb $0x0, %al
callq 0x13810
movl 0x24(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x24(%rsp)
jmp 0x6d711
cmpq $0x0, 0x28(%rsp)
je 0x6d794
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rdx
leaq 0x139e36(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movq 0x38(%rsp), %rdi
leaq 0x13df52(%rip), %rsi    # 0x1ab6f2
movb $0x0, %al
callq 0x13810
addq $0x48, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectProperty.cpp
// Function: gaps::R3SurfelObjectProperty::R3SurfelObjectProperty(int, gaps::R3SurfelObject*, double*, int)
R3SurfelObjectProperty::
R3SurfelObjectProperty(int type, R3SurfelObject *object, RNScalar *operands, int noperands)
  : scene(NULL),
    scene_index(-1),
    object(object),
    operands(NULL),
    noperands(0),
    type(type)
{
  // Check if operands were provided
  if ((noperands > 0) && (operands)) {
    // Copy operands
    this->noperands = noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = operands[i];
    }
  }
  else {
    // Compute operands
    UpdateOperands();
  }
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movl %esi, 0x2c(%rsp)
movq %rdx, 0x20(%rsp)
movq %rcx, 0x18(%rsp)
movl %r8d, 0x14(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x18164b(%rip), %rcx    # 0x1eeea8
addq $0x10, %rcx
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movl $0xffffffff, 0x10(%rax) # imm = 0xFFFFFFFF
movq 0x20(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq $0x0, 0x20(%rax)
movl $0x0, 0x28(%rax)
movl 0x2c(%rsp), %ecx
movl %ecx, 0x2c(%rax)
cmpl $0x0, 0x14(%rsp)
jle 0x6d92d
cmpq $0x0, 0x18(%rsp)
je 0x6d92d
movq 0x8(%rsp), %rax
movl 0x14(%rsp), %ecx
movl %ecx, 0x28(%rax)
movslq 0x28(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movl $0x0, 0x10(%rsp)
movq 0x8(%rsp), %rcx
movl 0x10(%rsp), %eax
cmpl 0x28(%rcx), %eax
jge 0x6d92b
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movslq 0x10(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x20(%rax), %rax
movslq 0x10(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x10(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x10(%rsp)
jmp 0x6d8ee
jmp 0x6d937
movq 0x8(%rsp), %rdi
callq 0x6d940
addq $0x38, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectProperty.cpp
// Function: gaps::R3SurfelObjectProperty::R3SurfelObjectProperty(gaps::R3SurfelObjectProperty const&)
R3SurfelObjectProperty::
R3SurfelObjectProperty(const R3SurfelObjectProperty& property)
  : scene(NULL),
    scene_index(-1),
    object(property.object),
    operands(NULL),
    noperands(0),
    type(property.type)
{
  // Initialize operands
  if ((property.noperands > 0) && (property.operands)) {
    this->noperands = property.noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = property.operands[i];
    }
  }
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x180439(%rip), %rcx    # 0x1eeea8
addq $0x10, %rcx
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movl $0xffffffff, 0x10(%rax) # imm = 0xFFFFFFFF
movq 0x18(%rsp), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq $0x0, 0x20(%rax)
movl $0x0, 0x28(%rax)
movq 0x18(%rsp), %rcx
movl 0x2c(%rcx), %ecx
movl %ecx, 0x2c(%rax)
movq 0x18(%rsp), %rax
cmpl $0x0, 0x28(%rax)
jle 0x6eb57
movq 0x18(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x6eb57
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movl 0x28(%rcx), %ecx
movl %ecx, 0x28(%rax)
movslq 0x28(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movl $0x0, 0x14(%rsp)
movq 0x8(%rsp), %rcx
movl 0x14(%rsp), %eax
cmpl 0x28(%rcx), %eax
jge 0x6eb55
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movq 0x20(%rcx), %rcx
movslq 0x14(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x20(%rax), %rax
movslq 0x14(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x14(%rsp)
jmp 0x6eb14
jmp 0x6eb57
addq $0x28, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectProperty.cpp
// Function: gaps::R3SurfelObjectProperty::~R3SurfelObjectProperty()
R3SurfelObjectProperty::
~R3SurfelObjectProperty(void)
{
  // Remove from scene (removes from everything)
  if (scene) scene->RemoveObjectProperty(this);

  // Delete operands
  if (operands) delete [] operands;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x18032e(%rip), %rcx    # 0x1eeea8
addq $0x10, %rcx
movq %rcx, (%rax)
cmpq $0x0, 0x8(%rax)
je 0x6eb9e
movq 0x8(%rsp), %rsi
movq 0x8(%rsi), %rdi
movq (%rdi), %rax
movq 0x48(%rax), %rax
callq *%rax
jmp 0x6eb9c
jmp 0x6eb9e
movq 0x8(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x6ebc8
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x6ebc6
movq (%rsp), %rdi
callq 0x13750
jmp 0x6ebc8
addq $0x18, %rsp
retq
movq %rax, %rdi
callq 0x187d0
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectProperty.cpp
// Function: gaps::R3SurfelObjectProperty::operator=(gaps::R3SurfelObjectProperty const&)
R3SurfelObjectProperty& R3SurfelObjectProperty::
operator=(const R3SurfelObjectProperty& property)
{
  // Assign stuff
  this->object = property.object;
  this->type = property.type;
  
  // Delete previous operands
  if (this->operands) {
    delete [] this->operands;
    this->operands = NULL;
    this->noperands = 0;
  }

  // Copy operands
  if ((property.noperands > 0) && (property.operands)) {
    this->noperands = property.noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = property.operands[i];
    }
  }

  // Return this
  return *this;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
movq 0x18(%rsp), %rcx
movq 0x18(%rcx), %rcx
movq %rcx, 0x18(%rax)
movq 0x18(%rsp), %rcx
movl 0x2c(%rcx), %ecx
movl %ecx, 0x2c(%rax)
cmpq $0x0, 0x20(%rax)
je 0x6ec77
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x6ec63
movq (%rsp), %rdi
callq 0x13750
movq 0x8(%rsp), %rax
movq $0x0, 0x20(%rax)
movl $0x0, 0x28(%rax)
movq 0x18(%rsp), %rax
cmpl $0x0, 0x28(%rax)
jle 0x6ed22
movq 0x18(%rsp), %rax
cmpq $0x0, 0x20(%rax)
je 0x6ed22
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movl 0x28(%rcx), %ecx
movl %ecx, 0x28(%rax)
movslq 0x28(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movl $0x0, 0x14(%rsp)
movq 0x8(%rsp), %rcx
movl 0x14(%rsp), %eax
cmpl 0x28(%rcx), %eax
jge 0x6ed20
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movq 0x20(%rcx), %rcx
movslq 0x14(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x20(%rax), %rax
movslq 0x14(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x14(%rsp)
jmp 0x6ecdf
jmp 0x6ed22
movq 0x8(%rsp), %rax
addq $0x28, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectProperty.cpp
// Function: gaps::R3SurfelObjectProperty::ResetOperands(double*, int)
void R3SurfelObjectProperty::
ResetOperands(RNScalar *operands, int noperands)
{
  // Delete previous operands
  if (this->operands) delete [] this->operands;
  this->operands = NULL;
  this->noperands = 0;
  
  // Check if operands were provided
  if ((noperands > 0) && (operands)) {
    // Copy operands
    this->noperands = noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = operands[i];
    }
    
    // Mark scene as dirty
    if (scene) scene->SetDirty();
  }
  else {
    // Compute operands
    UpdateOperands();
  }
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movl %edx, 0x14(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x8(%rsp)
cmpq $0x0, 0x20(%rax)
je 0x6ed71
movq 0x8(%rsp), %rax
movq 0x20(%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x6ed6f
movq (%rsp), %rdi
callq 0x13750
jmp 0x6ed71
movq 0x8(%rsp), %rax
movq $0x0, 0x20(%rax)
movl $0x0, 0x28(%rax)
cmpl $0x0, 0x14(%rsp)
jle 0x6ee3a
cmpq $0x0, 0x18(%rsp)
je 0x6ee3a
movq 0x8(%rsp), %rax
movl 0x14(%rsp), %ecx
movl %ecx, 0x28(%rax)
movslq 0x28(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movl $0x0, 0x10(%rsp)
movq 0x8(%rsp), %rcx
movl 0x10(%rsp), %eax
cmpl 0x28(%rcx), %eax
jge 0x6ee1e
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movslq 0x10(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x20(%rax), %rax
movslq 0x10(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x10(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x10(%rsp)
jmp 0x6ede1
movq 0x8(%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x6ee38
movq 0x8(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x1bea0
jmp 0x6ee44
movq 0x8(%rsp), %rdi
callq 0x6d940
addq $0x28, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::R3SurfelObjectRelationship(int, gaps::RNArray<gaps::R3SurfelObject*> const&, double*, int)
R3SurfelObjectRelationship::
R3SurfelObjectRelationship(int type, const RNArray<R3SurfelObject *>& objects, RNScalar *operands, int noperands)
  : scene(NULL),
    scene_index(-1),
    objects(objects),
    operands(NULL),
    noperands(0),
    type(type)
{
  // Check if operands were provided
  if ((noperands > 0) && (operands)) {
    // Copy operands
    this->noperands = noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = operands[i];
    }
  }
  else {
    // Compute operands
    UpdateOperands();
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movl %esi, 0x4c(%rsp)
movq %rdx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movl %r8d, 0x34(%rsp)
movq 0x50(%rsp), %rdi
movq %rdi, 0x18(%rsp)
leaq 0x17f513(%rip), %rax    # 0x1eeee0
addq $0x10, %rax
movq %rax, (%rdi)
movq $0x0, 0x8(%rdi)
movl $0xffffffff, 0x10(%rdi) # imm = 0xFFFFFFFF
addq $0x18, %rdi
movq %rdi, 0x10(%rsp)
movq 0x40(%rsp), %rsi
callq 0x6d7b0
movq 0x18(%rsp), %rax
movq $0x0, 0x28(%rax)
movl $0x0, 0x30(%rax)
movl 0x4c(%rsp), %ecx
movl %ecx, 0x34(%rax)
cmpl $0x0, 0x34(%rsp)
jle 0x6fac9
cmpq $0x0, 0x38(%rsp)
je 0x6fac9
movq 0x18(%rsp), %rax
movl 0x34(%rsp), %ecx
movl %ecx, 0x30(%rax)
movslq 0x30(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
callq 0x13030
movq %rax, 0x8(%rsp)
jmp 0x6fa5a
movq 0x18(%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, 0x28(%rax)
movl $0x0, 0x20(%rsp)
movq 0x18(%rsp), %rcx
movl 0x20(%rsp), %eax
cmpl 0x30(%rcx), %eax
jge 0x6fac7
movq 0x18(%rsp), %rax
movq 0x38(%rsp), %rcx
movslq 0x20(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x28(%rax), %rax
movslq 0x20(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x20(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x20(%rsp)
jmp 0x6fa70
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x28(%rsp)
movl %eax, 0x24(%rsp)
callq 0x1b9e0
jmp 0x6fadc
jmp 0x6fad7
movq 0x18(%rsp), %rdi
callq 0x6faf0
jmp 0x6fad5
jmp 0x6fad7
addq $0x58, %rsp
retq
movq 0x28(%rsp), %rdi
callq 0x13970
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::R3SurfelObjectRelationship(int, gaps::R3SurfelObject*, gaps::R3SurfelObject*, double*, int)
R3SurfelObjectRelationship::
R3SurfelObjectRelationship(int type, R3SurfelObject *object0, R3SurfelObject *object1, RNScalar *operands, int noperands)
  : scene(NULL),
    scene_index(-1),
    objects(),
    operands(NULL),
    noperands(0),
    type(type)
{
  // Insert objects
  objects.Insert(object0);
  objects.Insert(object1);

  // Check if operands were provided
  if ((noperands > 0) && (operands)) {
    // Copy operands
    this->noperands = noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = operands[i];
    }
  }
  else {
    // Compute operands
    UpdateOperands();
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movl %esi, 0x4c(%rsp)
movq %rdx, 0x40(%rsp)
movq %rcx, 0x38(%rsp)
movq %r8, 0x30(%rsp)
movl %r9d, 0x2c(%rsp)
movq 0x50(%rsp), %rdi
movq %rdi, 0x8(%rsp)
leaq 0x17f3be(%rip), %rax    # 0x1eeef0
movq %rax, (%rdi)
movq $0x0, 0x8(%rdi)
movl $0xffffffff, 0x10(%rdi) # imm = 0xFFFFFFFF
addq $0x18, %rdi
movq %rdi, 0x10(%rsp)
callq 0x1b920
movq 0x8(%rsp), %rax
movq 0x10(%rsp), %rdi
movq $0x0, 0x28(%rax)
movl $0x0, 0x30(%rax)
movl 0x4c(%rsp), %ecx
movl %ecx, 0x34(%rax)
movq 0x40(%rsp), %rsi
callq 0x1be70
jmp 0x6fb7e
movq 0x8(%rsp), %rdi
addq $0x18, %rdi
movq 0x38(%rsp), %rsi
callq 0x1be70
jmp 0x6fb93
cmpl $0x0, 0x2c(%rsp)
jle 0x6fc49
cmpq $0x0, 0x30(%rsp)
je 0x6fc49
movq 0x8(%rsp), %rax
movl 0x2c(%rsp), %ecx
movl %ecx, 0x30(%rax)
movslq 0x30(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
callq 0x13030
movq %rax, (%rsp)
jmp 0x6fbdb
movq 0x8(%rsp), %rax
movq (%rsp), %rcx
movq %rcx, 0x28(%rax)
movl $0x0, 0x18(%rsp)
movq 0x8(%rsp), %rcx
movl 0x18(%rsp), %eax
cmpl 0x30(%rcx), %eax
jge 0x6fc47
movq 0x8(%rsp), %rax
movq 0x30(%rsp), %rcx
movslq 0x18(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x28(%rax), %rax
movslq 0x18(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x18(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x18(%rsp)
jmp 0x6fbf0
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x20(%rsp)
movl %eax, 0x1c(%rsp)
callq 0x1b9e0
jmp 0x6fc5c
jmp 0x6fc57
movq 0x8(%rsp), %rdi
callq 0x6faf0
jmp 0x6fc55
jmp 0x6fc57
addq $0x58, %rsp
retq
movq 0x20(%rsp), %rdi
callq 0x13970
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::R3SurfelObjectRelationship(gaps::R3SurfelObjectRelationship const&)
R3SurfelObjectRelationship::
R3SurfelObjectRelationship(const R3SurfelObjectRelationship& relationship)
  : scene(NULL),
    scene_index(-1),
    objects(relationship.objects),
    operands(NULL),
    noperands(0),
    type(relationship.type)
{
  // Copy operands
  if ((relationship.noperands > 0) && (relationship.operands)) {
    this->noperands = relationship.noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = relationship.operands[i];
    }
  }
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movq %rsi, 0x28(%rsp)
movq 0x30(%rsp), %rdi
movq %rdi, 0x10(%rsp)
leaq 0x17f251(%rip), %rax    # 0x1eeee0
addq $0x10, %rax
movq %rax, (%rdi)
movq $0x0, 0x8(%rdi)
movl $0xffffffff, 0x10(%rdi) # imm = 0xFFFFFFFF
addq $0x18, %rdi
movq %rdi, 0x8(%rsp)
movq 0x28(%rsp), %rsi
addq $0x18, %rsi
callq 0x6d7b0
movq 0x10(%rsp), %rax
movq $0x0, 0x28(%rax)
movl $0x0, 0x30(%rax)
movq 0x28(%rsp), %rcx
movl 0x34(%rcx), %ecx
movl %ecx, 0x34(%rax)
movq 0x28(%rsp), %rax
cmpl $0x0, 0x30(%rax)
jle 0x6fda1
movq 0x28(%rsp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6fda1
movq 0x10(%rsp), %rax
movq 0x28(%rsp), %rcx
movl 0x30(%rcx), %ecx
movl %ecx, 0x30(%rax)
movslq 0x30(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
movq $-0x1, %rax
cmovoq %rax, %rdi
callq 0x13030
movq %rax, (%rsp)
jmp 0x6fd2f
movq 0x10(%rsp), %rax
movq (%rsp), %rcx
movq %rcx, 0x28(%rax)
movl $0x0, 0x18(%rsp)
movq 0x10(%rsp), %rcx
movl 0x18(%rsp), %eax
cmpl 0x30(%rcx), %eax
jge 0x6fd9f
movq 0x10(%rsp), %rax
movq 0x28(%rsp), %rcx
movq 0x28(%rcx), %rcx
movslq 0x18(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x28(%rax), %rax
movslq 0x18(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x18(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x18(%rsp)
jmp 0x6fd44
movq 0x8(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x20(%rsp)
movl %eax, 0x1c(%rsp)
callq 0x1b9e0
jmp 0x6fda6
jmp 0x6fda1
addq $0x38, %rsp
retq
movq 0x20(%rsp), %rdi
callq 0x13970
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::~R3SurfelObjectRelationship()
R3SurfelObjectRelationship::
~R3SurfelObjectRelationship(void)
{
  // Remove from scene (and everything in it)
  if (scene) scene->RemoveObjectRelationship(this);

  // Delete operands
  if (operands) delete [] operands;
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq 0x10(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x17f116(%rip), %rcx    # 0x1eeee0
addq $0x10, %rcx
movq %rcx, (%rax)
cmpq $0x0, 0x8(%rax)
je 0x6fdee
movq 0x8(%rsp), %rsi
movq 0x8(%rsi), %rdi
movq (%rdi), %rax
movq 0x68(%rax), %rax
callq *%rax
jmp 0x6fdec
jmp 0x6fdee
movq 0x8(%rsp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6fe18
movq 0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x6fe16
movq (%rsp), %rdi
callq 0x13750
jmp 0x6fe18
movq 0x8(%rsp), %rdi
addq $0x18, %rdi
callq 0x1b9e0
addq $0x18, %rsp
retq
movq %rax, %rdi
callq 0x187d0
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::operator=(gaps::R3SurfelObjectRelationship const&)
R3SurfelObjectRelationship& R3SurfelObjectRelationship::
operator=(const R3SurfelObjectRelationship& relationship)
{
  // Copy stuff
  this->objects = relationship.objects;
  this->type = relationship.type;

  // Delete previous operands
  if (this->operands) {
    delete [] this->operands;
    this->operands = NULL;
    this->noperands =0;
  }
  
  // Copy operands
  if ((relationship.noperands > 0) && (relationship.operands)) {
    this->noperands = relationship.noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = relationship.operands[i];
    }
  }

  // Return this
  return *this;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rdi
movq %rdi, 0x8(%rsp)
movq 0x18(%rsp), %rsi
addq $0x18, %rsi
addq $0x18, %rdi
callq 0x70080
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movl 0x34(%rcx), %ecx
movl %ecx, 0x34(%rax)
cmpq $0x0, 0x28(%rax)
je 0x6fee1
movq 0x8(%rsp), %rax
movq 0x28(%rax), %rax
movq %rax, (%rsp)
cmpq $0x0, %rax
je 0x6fecd
movq (%rsp), %rdi
callq 0x13750
movq 0x8(%rsp), %rax
movq $0x0, 0x28(%rax)
movl $0x0, 0x30(%rax)
movq 0x18(%rsp), %rax
cmpl $0x0, 0x30(%rax)
jle 0x6ff8c
movq 0x18(%rsp), %rax
cmpq $0x0, 0x28(%rax)
je 0x6ff8c
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movl 0x30(%rcx), %ecx
movl %ecx, 0x30(%rax)
movslq 0x30(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x28(%rax)
movl $0x0, 0x14(%rsp)
movq 0x8(%rsp), %rcx
movl 0x14(%rsp), %eax
cmpl 0x30(%rcx), %eax
jge 0x6ff8a
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movq 0x28(%rcx), %rcx
movslq 0x14(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x28(%rax), %rax
movslq 0x14(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x14(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x14(%rsp)
jmp 0x6ff49
jmp 0x6ff8c
movq 0x8(%rsp), %rax
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelObjectRelationship.cpp
// Function: gaps::R3SurfelObjectRelationship::Draw(gaps::RNFlags) const
void R3SurfelObjectRelationship::
Draw(RNFlags flags) const
{
  // Draw property based on type
  switch (type) {
  case R3_SURFEL_OBJECT_OVERLAP_RELATIONSHIP: 
    // Draw line between objects
    if (objects.NEntries() == 2) {
      if (flags[R3_SURFEL_COLOR_DRAW_FLAG]) RNLoadRgb(0, 1, 0);
      RNGrfxBegin(RN_GRFX_LINES);
      R3LoadPoint(objects[0]->Centroid());
      R3LoadPoint(objects[1]->Centroid());
      RNGrfxEnd();
      break;
    }
  }
}

// Assembly:
subq $0x58, %rsp
movq %rsi, 0x50(%rsp)
movq %rdi, 0x48(%rsp)
movq 0x48(%rsp), %rax
movq %rax, 0x8(%rsp)
movl 0x34(%rax), %eax
subl $0x2, %eax
jne 0x70072
jmp 0x6ffc6
movq 0x8(%rsp), %rdi
addq $0x18, %rdi
callq 0x16d50
cmpl $0x2, %eax
jne 0x70070
leaq 0x40(%rsp), %rdi
movl $0x1, %esi
callq 0x1b970
movq 0x40(%rsp), %rsi
leaq 0x50(%rsp), %rdi
callq 0x31a20
cmpl $0x0, %eax
je 0x7000e
xorl %edx, %edx
movl $0x1, %esi
movl %edx, %edi
callq 0x6f930
movl $0x1, %edi
callq 0x4ff50
movq 0x8(%rsp), %rdi
addq $0x18, %rdi
xorl %esi, %esi
callq 0x31ec0
movq %rax, %rsi
leaq 0x28(%rsp), %rdi
callq 0x187e0
leaq 0x28(%rsp), %rdi
callq 0x50050
movq 0x8(%rsp), %rdi
addq $0x18, %rdi
movl $0x1, %esi
callq 0x31ec0
movq %rax, %rsi
leaq 0x10(%rsp), %rdi
callq 0x187e0
leaq 0x10(%rsp), %rdi
callq 0x50050
callq 0x50070
jmp 0x70072
jmp 0x70072
addq $0x58, %rsp
retq
nopw (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::FindLabelProperty(int) const
R3SurfelLabelProperty *R3SurfelLabel::
FindLabelProperty(int type) const
{
  // Search for property of type
  for (int i = 0; i < NLabelProperties(); i++) {
    R3SurfelLabelProperty *property = LabelProperty(i);
    if (property->Type() == type) return property;
  }

  // Property not found
  return NULL;
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x28(%rsp)
movl %esi, 0x24(%rsp)
movq 0x28(%rsp), %rax
movq %rax, 0x10(%rsp)
movl $0x0, 0x20(%rsp)
movq 0x10(%rsp), %rdi
movl 0x20(%rsp), %eax
movl %eax, 0xc(%rsp)
callq 0x30b20
movl %eax, %ecx
movl 0xc(%rsp), %eax
cmpl %ecx, %eax
jge 0x70709
movq 0x10(%rsp), %rdi
movl 0x20(%rsp), %esi
callq 0x30b40
movq %rax, 0x18(%rsp)
movq 0x18(%rsp), %rdi
callq 0x31340
cmpl 0x24(%rsp), %eax
jne 0x706fa
movq 0x18(%rsp), %rax
movq %rax, 0x30(%rsp)
jmp 0x70712
jmp 0x706fc
movl 0x20(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x20(%rsp)
jmp 0x706af
movq $0x0, 0x30(%rsp)
movq 0x30(%rsp), %rax
addq $0x38, %rsp
retq
nopl (%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::PartHierarchyLevel() const
int R3SurfelLabel::
PartHierarchyLevel(void) const
{
  // Return level in part hierarchy (root is 0)
  int level = 0;
  R3SurfelLabel *ancestor = parent;
  while (ancestor) { level++; ancestor = ancestor->parent; }
  return level;
}

// Assembly:
movq %rdi, -0x8(%rsp)
movq -0x8(%rsp), %rax
movl $0x0, -0xc(%rsp)
movq 0x18(%rax), %rax
movq %rax, -0x18(%rsp)
cmpq $0x0, -0x18(%rsp)
je 0x7079e
movl -0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, -0xc(%rsp)
movq -0x18(%rsp), %rax
movq 0x18(%rax), %rax
movq %rax, -0x18(%rsp)
jmp 0x7077b
movl -0xc(%rsp), %eax
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::PointSet(int) const
R3SurfelPointSet *R3SurfelLabel::
PointSet(RNBoolean leaf_level) const
{
  // Allocate point set
  R3SurfelPointSet *pointset = new R3SurfelPointSet();
  if (!pointset) {
    RNFail("Unable to allocate point set\n");
    return NULL;
  }

  // Insert points into pointset
  InsertIntoPointSet(pointset, leaf_level);

  // Return pointset
  return pointset;
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x38(%rsp)
movl %esi, 0x34(%rsp)
movq 0x38(%rsp), %rax
movq %rax, 0x8(%rsp)
movl $0x60, %edi
callq 0x13570
movq %rax, %rdi
movq %rdi, %rax
movq %rax, 0x10(%rsp)
callq 0x55df0
jmp 0x707e3
movq 0x10(%rsp), %rax
movq %rax, 0x28(%rsp)
cmpq $0x0, 0x28(%rsp)
jne 0x7082d
leaq 0x133b4c(%rip), %rdi    # 0x1a4348
movb $0x0, %al
callq 0x1464b0
movq $0x0, 0x40(%rsp)
jmp 0x7084a
movq 0x10(%rsp), %rdi
movq %rax, %rcx
movl %edx, %eax
movq %rcx, 0x20(%rsp)
movl %eax, 0x1c(%rsp)
movl $0x60, %esi
callq 0x13580
jmp 0x70854
movq 0x8(%rsp), %rdi
movq 0x28(%rsp), %rsi
movl 0x34(%rsp), %edx
callq 0x70860
movq 0x28(%rsp), %rax
movq %rax, 0x40(%rsp)
movq 0x40(%rsp), %rax
addq $0x48, %rsp
retq
movq 0x20(%rsp), %rdi
callq 0x13970
nop
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::InsertIntoPointSet(gaps::R3SurfelPointSet*, int) const
void R3SurfelLabel::
InsertIntoPointSet(R3SurfelPointSet *pointset, RNBoolean leaf_level) const
{
  // Check scene
  if (!Scene()) return;

  // Insert points
  if (leaf_level && (NParts() > 0)) {
    // Insert points from leaf level of all parts of label
    for (int i = 0; i < NParts(); i++) {
      R3SurfelLabel *part = Part(i);
      part->InsertIntoPointSet(pointset, leaf_level);     
    }
  }
  else {
    // Insert points from all objects
    for (int i = 0; i < NLabelAssignments(); i++) {
      R3SurfelLabelAssignment *assignment = LabelAssignment(i);
      R3SurfelObject *object = assignment->Object();
      if (!object) continue;
      if (object->Parent() != scene->RootObject()) continue;
      object->InsertIntoPointSet(pointset, leaf_level);
    }
  }
}

// Assembly:
subq $0x58, %rsp
movq %rdi, 0x50(%rsp)
movq %rsi, 0x48(%rsp)
movl %edx, 0x44(%rsp)
movq 0x50(%rsp), %rdi
movq %rdi, 0x18(%rsp)
callq 0x70f20
cmpq $0x0, %rax
jne 0x7088c
jmp 0x709a9
cmpl $0x0, 0x44(%rsp)
je 0x708fe
movq 0x18(%rsp), %rdi
callq 0x30c50
cmpl $0x0, %eax
jle 0x708fe
movl $0x0, 0x40(%rsp)
movq 0x18(%rsp), %rdi
movl 0x40(%rsp), %eax
movl %eax, 0x14(%rsp)
callq 0x30c50
movl %eax, %ecx
movl 0x14(%rsp), %eax
cmpl %ecx, %eax
jge 0x708f9
movq 0x18(%rsp), %rdi
movl 0x40(%rsp), %esi
callq 0x30c70
movq %rax, 0x38(%rsp)
movq 0x38(%rsp), %rdi
movq 0x48(%rsp), %rsi
movl 0x44(%rsp), %edx
callq 0x70860
movl 0x40(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x40(%rsp)
jmp 0x708aa
jmp 0x709a9
movl $0x0, 0x34(%rsp)
movq 0x18(%rsp), %rdi
movl 0x34(%rsp), %eax
movl %eax, 0x10(%rsp)
callq 0x30bc0
movl %eax, %ecx
movl 0x10(%rsp), %eax
cmpl %ecx, %eax
jge 0x709a7
movq 0x18(%rsp), %rdi
movl 0x34(%rsp), %esi
callq 0x30be0
movq %rax, 0x28(%rsp)
movq 0x28(%rsp), %rdi
callq 0x30ec0
movq %rax, 0x20(%rsp)
cmpq $0x0, 0x20(%rsp)
jne 0x70952
jmp 0x70997
movq 0x20(%rsp), %rdi
callq 0x312c0
movq %rax, %rcx
movq 0x18(%rsp), %rax
movq %rcx, 0x8(%rsp)
movq 0x8(%rax), %rdi
callq 0x31050
movq %rax, %rcx
movq 0x8(%rsp), %rax
cmpq %rcx, %rax
je 0x70981
jmp 0x70997
movq 0x20(%rsp), %rdi
movq 0x48(%rsp), %rsi
movl 0x44(%rsp), %edx
xorps %xmm0, %xmm0
callq 0x19b90
movl 0x34(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x34(%rsp)
jmp 0x70906
jmp 0x709a9
addq $0x58, %rsp
retq
nop
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::operator=(gaps::R3SurfelLabel const&)
R3SurfelLabel& R3SurfelLabel::
operator=(const R3SurfelLabel& label)
{
  // Copy properties
  this->name = (label.name) ? RNStrdup(label.name) : NULL;
  this->identifier = label.identifier;
  this->assignment_keystroke = label.assignment_keystroke;
  this->color = label.color;
  this->flags = label.flags;

  // Return this
  return *this;
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
movq 0x18(%rsp), %rax
cmpq $0x0, 0x60(%rax)
je 0x709e9
movq 0x18(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x1461b0
movq %rax, 0x8(%rsp)
jmp 0x709f2
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x709f2
movq 0x10(%rsp), %rdi
movq 0x8(%rsp), %rax
movq %rax, 0x60(%rdi)
movq 0x18(%rsp), %rax
movl 0x68(%rax), %eax
movl %eax, 0x68(%rdi)
movq 0x18(%rsp), %rax
movl 0x6c(%rax), %eax
movl %eax, 0x6c(%rdi)
movq 0x18(%rsp), %rsi
addq $0x70, %rsi
addq $0x70, %rdi
callq 0x141e70
movq 0x10(%rsp), %rax
movq 0x18(%rsp), %rcx
movq 0x88(%rcx), %rcx
movq %rcx, 0x88(%rax)
addq $0x28, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::SetParent(gaps::R3SurfelLabel*)
void R3SurfelLabel::
SetParent(R3SurfelLabel *parent)
{
  // Just checking
  // assert(parent);
  // assert(this->parent);
  assert(!this->parent || (scene == this->parent->scene));
  assert(!parent || !this->parent || (parent->scene == this->parent->scene));
  if (parent == this->parent) return;

  // Update hierarchy
  if (this->parent) this->parent->parts.Remove(this);
  if (parent) parent->parts.Insert(this);
  this->parent = parent;

  // Mark scene as dirty
  if (scene) scene->SetDirty();
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movq %rsi, 0x8(%rsp)
movq 0x10(%rsp), %rcx
movq %rcx, (%rsp)
movq 0x8(%rsp), %rax
cmpq 0x18(%rcx), %rax
jne 0x70a74
jmp 0x70acb
movq (%rsp), %rax
cmpq $0x0, 0x18(%rax)
je 0x70a90
movq (%rsp), %rsi
movq 0x18(%rsi), %rdi
addq $0x20, %rdi
callq 0x30c20
cmpq $0x0, 0x8(%rsp)
je 0x70aaa
movq (%rsp), %rsi
movq 0x8(%rsp), %rdi
addq $0x20, %rdi
callq 0x30ae0
movq (%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, 0x18(%rax)
cmpq $0x0, 0x8(%rax)
je 0x70acb
movq (%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x1bea0
addq $0x18, %rsp
retq
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::SetName(char const*)
void R3SurfelLabel::
SetName(const char *name)
{
  // Delete previous name
  if (this->name) free(this->name);

  // Set new name
  this->name = (name) ? RNStrdup(name) : NULL;

  // Mark scene as dirty
  if (scene) scene->SetDirty();
}

// Assembly:
subq $0x28, %rsp
movq %rdi, 0x20(%rsp)
movq %rsi, 0x18(%rsp)
movq 0x20(%rsp), %rax
movq %rax, 0x10(%rsp)
cmpq $0x0, 0x60(%rax)
je 0x70afd
movq 0x10(%rsp), %rax
movq 0x60(%rax), %rdi
callq 0x136a0
cmpq $0x0, 0x18(%rsp)
je 0x70b16
movq 0x18(%rsp), %rdi
callq 0x1461b0
movq %rax, 0x8(%rsp)
jmp 0x70b1f
xorl %eax, %eax
movq %rax, 0x8(%rsp)
jmp 0x70b1f
movq 0x10(%rsp), %rax
movq 0x8(%rsp), %rcx
movq %rcx, 0x60(%rax)
cmpq $0x0, 0x8(%rax)
je 0x70b42
movq 0x10(%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x1bea0
addq $0x28, %rsp
retq
nopw (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::SetIdentifier(int)
void R3SurfelLabel::
SetIdentifier(int identifier)
{
  // Set identifier
  this->identifier = identifier;

  // Update next identifier
  if (identifier >= R3surfel_next_label_identifier) {
    R3surfel_next_label_identifier = identifier+1;
  }

  // Mark scene as dirty
  if (scene) scene->SetDirty();
}

// Assembly:
subq $0x18, %rsp
movq %rdi, 0x10(%rsp)
movl %esi, 0xc(%rsp)
movq 0x10(%rsp), %rax
movq %rax, (%rsp)
movl 0xc(%rsp), %ecx
movl %ecx, 0x68(%rax)
movl 0xc(%rsp), %eax
cmpl 0x18ba69(%rip), %eax    # 0x1fc5e0
jl 0x70b86
movl 0xc(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x18ba5a(%rip)    # 0x1fc5e0
movq (%rsp), %rax
cmpq $0x0, 0x8(%rax)
je 0x70b9e
movq (%rsp), %rax
movq 0x8(%rax), %rdi
callq 0x1bea0
addq $0x18, %rsp
retq
nopw %cs:(%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabel.cpp
// Function: gaps::R3SurfelLabel::Print(_IO_FILE*, char const*, char const*) const
void R3SurfelLabel::
Print(FILE *fp, const char *prefix, const char *suffix) const
{
  // Check fp
  if (!fp) fp = stdout;

  // Print label
  if (prefix) fprintf(fp, "%s", prefix);
  fprintf(fp, "%d %s", scene_index, (name) ? name : "-");
  if (suffix) fprintf(fp, "%s", suffix);
  fprintf(fp, "\n");
}

// Assembly:
subq $0x48, %rsp
movq %rdi, 0x40(%rsp)
movq %rsi, 0x38(%rsp)
movq %rdx, 0x30(%rsp)
movq %rcx, 0x28(%rsp)
movq 0x40(%rsp), %rax
movq %rax, 0x20(%rsp)
cmpq $0x0, 0x38(%rsp)
jne 0x70e69
movq 0x18212f(%rip), %rax    # 0x1f2f90
movq (%rax), %rax
movq %rax, 0x38(%rsp)
cmpq $0x0, 0x30(%rsp)
je 0x70e89
movq 0x38(%rsp), %rdi
movq 0x30(%rsp), %rdx
leaq 0x136741(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movq 0x20(%rsp), %rax
movq 0x38(%rsp), %rcx
movq %rcx, 0x10(%rsp)
movl 0x10(%rax), %ecx
movl %ecx, 0x1c(%rsp)
cmpq $0x0, 0x60(%rax)
je 0x70eb6
movq 0x20(%rsp), %rax
movq 0x60(%rax), %rax
movq %rax, 0x8(%rsp)
jmp 0x70ec4
leaq 0x1334af(%rip), %rax    # 0x1a436c
movq %rax, 0x8(%rsp)
jmp 0x70ec4
movl 0x1c(%rsp), %edx
movq 0x10(%rsp), %rdi
movq 0x8(%rsp), %rcx
leaq 0x13348d(%rip), %rsi    # 0x1a4366
movb $0x0, %al
callq 0x13810
cmpq $0x0, 0x28(%rsp)
je 0x70f00
movq 0x38(%rsp), %rdi
movq 0x28(%rsp), %rdx
leaq 0x1366ca(%rip), %rsi    # 0x1a75c3
movb $0x0, %al
callq 0x13810
movq 0x38(%rsp), %rdi
leaq 0x13a7e6(%rip), %rsi    # 0x1ab6f2
movb $0x0, %al
callq 0x13810
addq $0x48, %rsp
retq
nopl (%rax,%rax)
// File: tomfunkhouser[P]gaps/pkgs/R3Surfels/R3SurfelLabelProperty.cpp
// Function: gaps::R3SurfelLabelProperty::R3SurfelLabelProperty(int, gaps::R3SurfelLabel*, double*, int)
R3SurfelLabelProperty::
R3SurfelLabelProperty(int type, R3SurfelLabel *label, RNScalar *operands, int noperands)
  : scene(NULL),
    scene_index(-1),
    label(label),
    operands(NULL),
    noperands(0),
    type(type)
{
  // Check if operands were provided
  if ((noperands > 0) && (operands)) {
    // Copy operands
    this->noperands = noperands;
    this->operands = new RNScalar [ this->noperands ];
    for (int i = 0; i < this->noperands; i++) {
      this->operands[i] = operands[i];
    }
  }
}

// Assembly:
subq $0x38, %rsp
movq %rdi, 0x30(%rsp)
movl %esi, 0x2c(%rsp)
movq %rdx, 0x20(%rsp)
movq %rcx, 0x18(%rsp)
movl %r8d, 0x14(%rsp)
movq 0x30(%rsp), %rax
movq %rax, 0x8(%rsp)
leaq 0x17dfcb(%rip), %rcx    # 0x1eef88
addq $0x10, %rcx
movq %rcx, (%rax)
movq $0x0, 0x8(%rax)
movl $0xffffffff, 0x10(%rax) # imm = 0xFFFFFFFF
movq 0x20(%rsp), %rcx
movq %rcx, 0x18(%rax)
movq $0x0, 0x20(%rax)
movl $0x0, 0x28(%rax)
movl 0x2c(%rsp), %ecx
movl %ecx, 0x2c(%rax)
cmpl $0x0, 0x14(%rsp)
jle 0x7108d
cmpq $0x0, 0x18(%rsp)
je 0x7108d
movq 0x8(%rsp), %rax
movl 0x14(%rsp), %ecx
movl %ecx, 0x28(%rax)
movslq 0x28(%rax), %rax
movl $0x8, %ecx
mulq %rcx
movq %rax, %rdi
seto %cl
movq $-0x1, %rax
testb $0x1, %cl
cmovneq %rax, %rdi
callq 0x13030
movq %rax, %rcx
movq 0x8(%rsp), %rax
movq %rcx, 0x20(%rax)
movl $0x0, 0x10(%rsp)
movq 0x8(%rsp), %rcx
movl 0x10(%rsp), %eax
cmpl 0x28(%rcx), %eax
jge 0x7108b
movq 0x8(%rsp), %rax
movq 0x18(%rsp), %rcx
movslq 0x10(%rsp), %rdx
movsd (%rcx,%rdx,8), %xmm0
movq 0x20(%rax), %rax
movslq 0x10(%rsp), %rcx
movsd %xmm0, (%rax,%rcx,8)
movl 0x10(%rsp), %eax
addl $0x1, %eax
movl %eax, 0x10(%rsp)
jmp 0x7104e
jmp 0x7108d
addq $0x38, %rsp
retq
nopw %cs:(%rax,%rax)