//===-------------- VM.cpp - Implementation of the VM class  --------------===//
//
//                              The VMKit project
//
// This file is distributed under the University of Illinois Open Source 
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//

#include "debug.h"
#include "MMTkObject.h"

namespace mmtk {

extern "C" void Java_org_j3_runtime_VM_sysWrite__Lorg_vmmagic_unboxed_Extent_2 (void* e) {
  fprintf(stderr, "%p", e);
}

extern "C" void Java_org_j3_runtime_VM_sysWrite__Lorg_vmmagic_unboxed_Address_2 (void* a) {
  fprintf(stderr, "%p", a);
}

extern "C" void Java_org_j3_runtime_VM_sysWrite__F (float f) {
  fprintf(stderr, "%f", f);
}

extern "C" void Java_org_j3_runtime_VM_sysWrite__I (int i) {
  fprintf(stderr, "%d", i);
}

extern "C" void Java_org_j3_runtime_VM_sysWrite__Ljava_lang_String_2 (MMTkString* msg) {
  for (int i = 0; i < msg->count; i++) {
    fprintf(stderr, "%c", msg->value->elements[i + msg->offset]);
  }
}

extern "C" void Java_org_j3_runtime_VM_sysWriteln__Ljava_lang_String_2 (MMTkString* msg) {
  for (int i = 0; i < msg->count; i++) {
    fprintf(stderr, "%c", msg->value->elements[i + msg->offset]);
  }
  fprintf(stderr, "\n");
}

extern "C" void Java_org_j3_runtime_VM_sysWriteln__ () {
  fprintf(stderr, "\n");
}

extern "C" void Java_org_j3_runtime_VM__1assert__ZLjava_lang_String_2 (bool cond, MMTkString* msg) {
  ABORT();
}

extern "C" void Java_org_j3_runtime_VM_sysExit__I (int i) {
  ABORT();
}

extern "C" void Java_org_j3_runtime_VM_sysFail__Ljava_lang_String_2 (MMTkString* msg) {
  // Just call abort because gcmalloc calls this function. If it were to
  // call printf, MMTkInline.inc could not be JIT-compiled.
  abort();
}

extern "C" void Java_org_j3_runtime_VM__1assert__Z (uint8_t cond) {
  ASSERT(cond);
}

extern "C" bool Java_org_j3_runtime_VM_buildFor64Addr__ () { 
  return vmkit::kWordSize == 8;
}

extern "C" bool Java_org_j3_runtime_VM_buildForIA32__ () { 
#if ARCH_X86
  return true;
#else
  return false;
#endif
}

extern "C" bool Java_org_j3_runtime_VM_verifyAssertions__ () {
	// TODO: MUST UPDATE THIS COMMENT AND TRY TO UNDERSTAND HOW IT WORKS
  // Note that DEBUG is defined in make ENABLE_OPTIMIZED=1.
  // You must provide DISABLE_ASSERTIONS=1 to not have DEBUG defined.
  // To generate MMTkInline.inc, this function returns false.
#if 0
  return true;
#else
  return false;
#endif
}

} // namespace mmtk
