comparison dyncall/dyncall_callvm_mips_n32.c @ 84:67961454902b

- bigger cleanup in callvm code * changed init of most callvms to reuse code and for consistency * removed unused functions * general changes for consistency * added some missing cconv defines do mode calls - fixed potential buffer overrun on arm64 - fixed sparc and x64 mode setting (only one mode, but wasn't (pointlessly) resettable) - error code handling (dcGetError) changes, flag is now cleared (work still underway) - Changelog update
author cslag
date Wed, 06 Apr 2016 00:21:51 +0200
parents 3e629dc19168
children 21537652361e
comparison
equal deleted inserted replaced
83:54930a037e8a 84:67961454902b
57 { 57 {
58 DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self; 58 DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
59 dcVecReset(&self->mVecHead); 59 dcVecReset(&self->mVecHead);
60 self->mRegCount = 0; 60 self->mRegCount = 0;
61 self->mRegData.mUseDouble = 0LL; 61 self->mRegData.mUseDouble = 0LL;
62 }
63
64 static DCCallVM* dc_callvm_new_mips_n32(DCCallVM_vt* vt, DCsize size)
65 {
66 DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)dcAllocMem(sizeof(DCCallVM_mips_n32)+size);
67 dc_callvm_base_init(&self->mInterface, vt);
68 dcVecInit(&self->mVecHead, size);
69 dc_callvm_reset_mips_n32( (DCCallVM*) self );
70 return (DCCallVM*)self;
71 } 62 }
72 63
73 64
74 static void dc_callvm_free_mips_n32(DCCallVM* in_self) 65 static void dc_callvm_free_mips_n32(DCCallVM* in_self)
75 { 66 {
234 , (DCdoublevmfunc*) &dc_callvm_call_mips_n32 225 , (DCdoublevmfunc*) &dc_callvm_call_mips_n32
235 , (DCpointervmfunc*) &dc_callvm_call_mips_n32 226 , (DCpointervmfunc*) &dc_callvm_call_mips_n32
236 , NULL /* callStruct */ 227 , NULL /* callStruct */
237 }; 228 };
238 229
239 static void dc_callvm_mode_mips_n32(DCCallVM* self,DCint mode) 230 static void dc_callvm_mode_mips_n32(DCCallVM* in_self, DCint mode)
240 { 231 {
232 DCCallVM_mips_n32* self = (DCCallVM_mips_n32*)in_self;
233 DCCallVM_vt* vt;
234
241 switch(mode) { 235 switch(mode) {
242 case DC_CALL_C_DEFAULT: 236 case DC_CALL_C_DEFAULT:
243 self->mVTpointer = &gVT_mips_n32; 237 case DC_CALL_C_MIPS64_N32:
238 vt = &gVT_mips_n32;
244 break; 239 break;
245 case DC_CALL_C_ELLIPSIS: 240 case DC_CALL_C_ELLIPSIS:
246 self->mVTpointer = &gVT_mips_n32_ellipsis; 241 case DC_CALL_C_ELLIPSIS_VARARGS:
242 vt = &gVT_mips_n32_ellipsis;
247 break; 243 break;
248 default: 244 default:
249 self->mError = DC_ERROR_UNSUPPORTED_MODE; 245 self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE;
250 break; 246 return;
251 } 247 }
252 } 248 dc_callvm_base_init(&self->mInterface, vt);
253 249 }
254 DCCallVM* dcNewCallVM_mips_n32(DCsize size) 250
255 { 251 /* Public API. */
256 return dc_callvm_new_mips_n32(&gVT_mips_n32, size);
257 }
258
259 DCCallVM* dcNewCallVM_mips_n32_ellipsis(DCsize size)
260 {
261 return dc_callvm_new_mips_n32(&gVT_mips_n32_ellipsis, size);
262 }
263
264
265 DCCallVM* dcNewCallVM(DCsize size) 252 DCCallVM* dcNewCallVM(DCsize size)
266 { 253 {
267 return dcNewCallVM_mips_n32(size); 254 DCCallVM_mips_n32* p = (DCCallVM_mips_n32*)dcAllocMem(sizeof(DCCallVM_mips_n32)+size);
268 } 255
269 256 dc_callvm_mode_mips_n32((DCCallVM*)p, DC_CALL_C_DEFAULT);
257
258 dcVecInit(&p->mVecHead, size);
259 dc_callvm_reset_mips_n32((DCCallVM*)p);
260
261 return (DCCallVM*)p;
262 }
263