// File: /workspace/github_c_makefile_star2_O1/GregorR[P]lstg/ImageBuilder/imageBuilder.c
// Function: bigBang
void bigBang(void)
{
  struct object  *ObjectClass,
                 *MetaObjectClass,
                 *ClassClass,
                 *NilClass,
                 *TrueClass,
                 *FalseClass,
                 *TreeClass,
                 *DictionaryClass,
                 *OrderedArrayClass,
                 *MetaClassClass,
                 *ByteArrayClass;

  /*
   * First, make the nil (undefined) object;
   * notice its class is wrong
   */
  nilObject = gcalloc(0);

  /*
   * Second, make class for Symbol;
   * this will allow newClass to work correctly
   */
  SymbolClass = gcalloc(MetaSymbolSize);
  addGlobalName("Symbol", SymbolClass);
  SymbolClass->data[nameInClass] = newSymbol("Symbol");

  /*
     now we can fix up nil's class 
   */
  NilClass = newClass("Undefined");
  addGlobalName("Undefined", NilClass);
  nilObject->class = NilClass;
  addGlobalName("nil", nilObject);

  /*
     make up the object / metaobject mess 
   */
  ObjectClass = newClass("Object");
  addGlobalName("Object", ObjectClass);
  MetaObjectClass = newClass("MetaObject");
  addGlobalName("MetaObject", MetaObjectClass);
  ObjectClass->class = MetaObjectClass;
  ObjectClass->data[parentClassInClass] = nilObject;

  /*
     And the Class/MetaClass mess 
   */
  ClassClass = newClass("Class");
  addGlobalName("Class", ClassClass);
  MetaClassClass = newClass("MetaClass");
  addGlobalName("MetaClass", MetaClassClass);
  ClassClass->class = MetaClassClass;

  /*
     now make up a bunch of other classes 
   */
  BlockClass = newClass("Block");
  addGlobalName("Block", BlockClass);

  /*
     create Char with extra slot for instance var 
   */
  CharClass = gcalloc(MetaCharSize);
  addGlobalName("Char", CharClass);
  CharClass->data[nameInClass] = newSymbol("Char");

  /*
     SmallInt has an extra class variable, just like Symbol and Char 
   */
  SmallIntClass = gcalloc(MetaSmallIntSize);
  addGlobalName("SmallInt", SmallIntClass);
  SmallIntClass->data[nameInClass] = newSymbol("SmallInt");

  IntegerClass = newClass("Integer");
  addGlobalName("Integer", IntegerClass);

  TrueClass = newClass("True");
  addGlobalName("True", TrueClass);
  trueObject = gcalloc(0);
  trueObject->class = TrueClass;
  addGlobalName("true", trueObject);

  FalseClass = newClass("False");
  addGlobalName("False", FalseClass);
  falseObject = gcalloc(0);
  falseObject->class = FalseClass;
  addGlobalName("false", falseObject);

  ArrayClass = newClass("Array");
  addGlobalName("Array", ArrayClass);
  ByteArrayClass = newClass("ByteArray");
  addGlobalName("ByteArray", ByteArrayClass);

  OrderedArrayClass = newClass("OrderedArray");
  addGlobalName("OrderedArray", OrderedArrayClass);

  StringClass = newClass("String");
  addGlobalName("String", StringClass);

  TreeClass = newClass("Tree");
  addGlobalName("Tree", TreeClass);

  DictionaryClass = newClass("Dictionary");
  addGlobalName("Dictionary", DictionaryClass);

  /*
     finally, we can fill in the fields in class Object 
   */
  ObjectClass->data[methodsInClass] = newDictionary();
  ObjectClass->data[instanceSizeInClass] = newInteger(0);
  ClassClass->data[instanceSizeInClass] = newInteger(0);

  /*
     can make global name, but can't fill it in 
   */
  globalValues = gcalloc(2);
  addGlobalName("globals", globalValues);
}

// Assembly:
pushq %r15
pushq %r14
pushq %r12
pushq %rbx
pushq %rax
xorl %edi, %edi
callq 0x12bb
movq %rax, 0x638c(%rip)      # 0x8140
movl $0x7, %edi
callq 0x12bb
movq %rax, 0x39723(%rip)     # 0x3b4e8
leaq 0x32dc(%rip), %rbx      # 0x50a8
movq %rbx, %rdi
movq %rax, %rsi
callq 0x143a
movq %rbx, %rdi
callq 0x182f
movq 0x39702(%rip), %rcx     # 0x3b4e8
movq %rax, 0x10(%rcx)
movl $0x6, %edi
callq 0x12bb
movq %rax, %rbx
leaq 0x332c(%rip), %r14      # 0x512a
movq %r14, %rdi
callq 0x182f
movq %rax, 0x10(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x143a
movq 0x6324(%rip), %rsi      # 0x8140
movq %rbx, 0x8(%rsi)
leaq 0x330d(%rip), %rdi      # 0x5134
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %rbx
leaq 0x32fc(%rip), %r14      # 0x513c
movq %r14, %rdi
callq 0x182f
movq %rax, 0x10(%rbx)
movq %r14, %rdi
movq %rbx, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r14
leaq 0x32cd(%rip), %r15      # 0x5138
movq %r15, %rdi
callq 0x182f
movq %rax, 0x10(%r14)
movq %r15, %rdi
movq %r14, %rsi
callq 0x143a
movq %r14, 0x8(%rbx)
movq 0x62b3(%rip), %rax      # 0x8140
movq %rax, 0x18(%rbx)
movl $0x6, %edi
callq 0x12bb
movq %rax, %r14
leaq 0x32a2(%rip), %r15      # 0x5147
movq %r15, %rdi
callq 0x182f
movq %rax, 0x10(%r14)
movq %r15, %rdi
movq %r14, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x3273(%rip), %r12      # 0x5143
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movq %r15, 0x8(%r14)
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x324e(%rip), %r12      # 0x514d
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r15, 0x395de(%rip)     # 0x3b4f0
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x7, %edi
callq 0x12bb
movq %rax, 0x395ca(%rip)     # 0x3b4f8
leaq 0x321e(%rip), %r15      # 0x5153
movq %r15, %rdi
movq %rax, %rsi
callq 0x143a
movq %r15, %rdi
callq 0x182f
movq 0x395a9(%rip), %rcx     # 0x3b4f8
movq %rax, 0x10(%rcx)
movl $0x7, %edi
callq 0x12bb
movq %rax, 0x3959c(%rip)     # 0x3b500
leaq 0x31ed(%rip), %r15      # 0x5158
movq %r15, %rdi
movq %rax, %rsi
callq 0x143a
movq %r15, %rdi
callq 0x182f
movq 0x3957b(%rip), %rcx     # 0x3b500
movq %rax, 0x10(%rcx)
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x31c4(%rip), %r12      # 0x5161
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r15, 0x39558(%rip)     # 0x3b508
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x319a(%rip), %r12      # 0x5169
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
xorl %edi, %edi
callq 0x12bb
movq %rax, 0x3951c(%rip)     # 0x3b510
movq %r15, 0x8(%rax)
leaq 0x316f(%rip), %rdi      # 0x516e
movq %rax, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x3158(%rip), %r12      # 0x5173
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
xorl %edi, %edi
callq 0x12bb
movq %rax, 0x394d8(%rip)     # 0x3b518
movq %r15, 0x8(%rax)
leaq 0x312e(%rip), %rdi      # 0x5179
movq %rax, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x311f(%rip), %r12      # 0x5186
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r15, 0x394a6(%rip)     # 0x3b520
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x304c(%rip), %r12      # 0x50e5
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x30bb(%rip), %r12      # 0x517f
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x309d(%rip), %r12      # 0x518c
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r15, 0x39426(%rip)     # 0x3b528
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x2f93(%rip), %r12      # 0x50b4
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
movl $0x6, %edi
callq 0x12bb
movq %rax, %r15
leaq 0x2f6d(%rip), %r12      # 0x50b9
movq %r12, %rdi
callq 0x182f
movq %rax, 0x10(%r15)
movq %r12, %rdi
movq %r15, %rsi
callq 0x143a
callq 0x19b4
movq %rax, 0x20(%rbx)
movl $0x1, %eax
movq %rax, 0x28(%rbx)
movq %rax, 0x28(%r14)
movl $0x2, %edi
callq 0x12bb
movq %rax, 0x393a6(%rip)     # 0x3b530
leaq 0x3002(%rip), %rdi      # 0x5193
movq %rax, %rsi
addq $0x8, %rsp
popq %rbx
popq %r12
popq %r14
popq %r15
jmp 0x143a