/* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
static DCCallVM* dc_callvm_new_sparc64(DCCallVM_vt* vt, DCsize size)
{
  DCCallVM_sparc64* self = (DCCallVM_sparc64*) dcAllocMem(sizeof(DCCallVM_sparc64)+DHEAD+size);
  dc_callvm_base_init(&self->mInterface, vt);
  dcVecInit(&self->mVecHead,DHEAD+size);
  dc_callvm_reset_sparc64(&self->mInterface);
  return (DCCallVM*)self;
}
static DCCallVM* dc_callvm_new_arm32_thumb(DCCallVM_vt* vt, DCsize size)
{
  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
  DCCallVM_arm32_thumb* self = (DCCallVM_arm32_thumb*)dcAllocMem(sizeof(DCCallVM_arm32_thumb)+size+16);
  dc_callvm_base_init(&self->mInterface, vt);
  dcVecInit(&self->mVecHead, size);
  return (DCCallVM*)self;
}
Beispiel #3
0
static DCCallVM* dc_callvm_new_mips_o32(DCCallVM_vt* vt, DCsize size)
{
  DCCallVM_mips_o32* self = (DCCallVM_mips_o32*)dcAllocMem(sizeof(DCCallVM_mips_o32)+size);
  dc_callvm_base_init(&self->mInterface, vt);
  dcVecInit(&self->mVecHead, size);
  dc_callvm_reset_mips_o32( (DCCallVM*) self );
  return (DCCallVM*)self;
}
Beispiel #4
0
/* the six output registers %o0-%o5 are always loaded, thus we need to ensure the argument buffer has space for at least 24 bytes. */
static DCCallVM* dc_callvm_new_sparc(DCCallVM_vt* vt, DCsize size)
{
  size=DC_MAX(size,sizeof(void*)*(6+1));
  DCCallVM_sparc* self = (DCCallVM_sparc*) dcAllocMem(sizeof(DCCallVM_sparc)+size);
  dc_callvm_base_init(&self->mInterface, vt);
  dcVecInit(&self->mVecHead,size);
  return (DCCallVM*)self;
}
Beispiel #5
0
DCCallVM* dcNewCallVM(DCsize size)
{
  DCCallVM_ppc64* self = (DCCallVM_ppc64*)dcAllocMem(sizeof(DCCallVM_ppc64)+size);
  dcVecInit(&self->mVecHead, size);
  self->mIntRegs              = 0;
  self->mFloatRegs            = 0;
  dc_callvm_mode_ppc64( (DCCallVM*) self, DC_CALL_C_DEFAULT );
  return (DCCallVM*)self;
}
Beispiel #6
0
static DCCallVM* dc_callvm_new_x86(DCCallVM_vt* vt, DCsize size)
{
  DCCallVM_x86* self = (DCCallVM_x86*) dcAllocMem( sizeof(DCCallVM_x86)+size );

  dc_callvm_base_init(&self->mInterface, vt);

  self->mIntRegs              = 0;
  dcVecInit(&self->mVecHead, size);
  return (DCCallVM*) self;
}
static DCCallVM* dc_callvm_new_arm32_armhf(DCCallVM_vt* vt, DCsize size)
{
  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)dcAllocMem(sizeof(DCCallVM_arm32_armhf)+size+16);
  dc_callvm_base_init(&p->mInterface, vt);
  dcVecInit(&p->mVecHead, size);
  p->i = 0;
  p->s = 0;
  p->d = 0;
  return (DCCallVM*)p;
}
Beispiel #8
0
/* Public API. */
DCCallVM* dcNewCallVM(DCsize size)
{
  DCCallVM_x86* p = (DCCallVM_x86*)dcAllocMem(sizeof(DCCallVM_x86)+size);

  dc_callvm_mode_x86((DCCallVM*)p, DC_CALL_C_DEFAULT);

  dcVecInit(&p->mVecHead, size);
  dc_callvm_reset_x86((DCCallVM*)p);

  return (DCCallVM*)p;
}
/* Public API. */
DCCallVM* dcNewCallVM(DCsize size)
{
  /* Store at least 16 bytes (4 words) for internal spill area. Assembly code depends on it. */
  DCCallVM_mips_eabi* p = (DCCallVM_mips_eabi*)dcAllocMem(sizeof(DCCallVM_mips_eabi)+size+16);

  dc_callvm_mode_mips_eabi((DCCallVM*)p, DC_CALL_C_DEFAULT);

  dcVecInit(&p->mVecHead, size);
  dc_callvm_reset_mips_eabi((DCCallVM*)p);

  return (DCCallVM*)p;
}
/* Public API. */
DCCallVM* dcNewCallVM(DCsize size)
{
  /* Store at least 16 bytes (4 words for first 4 int args) for internal spill area. Assembly code depends on it. */
  DCCallVM_arm32_armhf* p = (DCCallVM_arm32_armhf*)dcAllocMem(sizeof(DCCallVM_arm32_armhf)+size+16);

  mode((DCCallVM*)p, DC_CALL_C_DEFAULT);

  dcVecInit(&p->mVecHead, size);
  reset((DCCallVM*)p);

  return (DCCallVM*)p;
}
Beispiel #11
0
static DCCallVM* dc_callvm_new_arm64(DCCallVM_vt* vt, DCsize size)
{
  DCCallVM_arm64* p = (DCCallVM_arm64*) dcAllocMem(size);

  dc_callvm_base_init(&p->mInterface, vt);

  dcVecInit(&p->mVecHead, size);

  p->i = 0;
  p->f = 0;

  return (DCCallVM*)p;
}
Beispiel #12
0
static DCCallVM* dc_callvm_new_x64(DCCallVM_vt* vt, DCsize size)
{
  DCCallVM_x64* self = (DCCallVM_x64*)dcAllocMem(sizeof(DCCallVM_x64)+size);
  
  dc_callvm_base_init(&self->mInterface, vt);

  /* Since we store register parameters in DCCallVM_x64 directly, adjust the stack size. */
  size -= sizeof(DCRegData_x64);
  size = (((signed long)size) < 0) ? 0 : size;


  self->mRegCount.i = self->mRegCount.f =  0;

  dcVecInit(&self->mVecHead, size);
  return (DCCallVM*)self;
}