comparison dyncallback/dyncall_args_mips64.c @ 305:b104c5beec8b

- softfloat support for mips64/n64 abi
author Tassilo Philipp
date Wed, 23 May 2018 11:41:34 +0200
parents f5577f6bf97a
children 71c884e610f0
comparison
equal deleted inserted replaced
304:6869d834a847 305:b104c5beec8b
28 /* @@@ test and add n32 code here, also, if needed */ 28 /* @@@ test and add n32 code here, also, if needed */
29 29
30 DClonglong dcbArgLongLong(DCArgs* p) 30 DClonglong dcbArgLongLong(DCArgs* p)
31 { 31 {
32 DClonglong value; 32 DClonglong value;
33 if(p->reg_count < DCARGS_MIPS_NUM_IREGS) 33 if(p->reg_count < DCARGS_MIPS_NUM_REGS)
34 value = p->ireg_data[p->reg_count++]; 34 value = p->ireg_data[p->reg_count++];
35 else { 35 else {
36 value = *((DClonglong*)p->stackptr); 36 value = *((DClonglong*)p->stackptr);
37 p->stackptr += sizeof(DClonglong); 37 p->stackptr += sizeof(DClonglong);
38 } 38 }
52 DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgLongLong(p); } 52 DCpointer dcbArgPointer(DCArgs* p) { return (DCpointer)dcbArgLongLong(p); }
53 53
54 DCdouble dcbArgDouble(DCArgs* p) 54 DCdouble dcbArgDouble(DCArgs* p)
55 { 55 {
56 DCdouble result; 56 DCdouble result;
57 if(p->reg_count < DCARGS_MIPS_NUM_FREGS) 57 if(p->reg_count < DCARGS_MIPS_NUM_REGS)
58 result = p->freg_data[p->reg_count++]; 58 result = p->freg_data[p->reg_count++];
59 else { 59 else {
60 result = *((DCdouble*)p->stackptr); 60 result = *((DCdouble*)p->stackptr);
61 p->stackptr += sizeof(DCdouble); 61 p->stackptr += sizeof(DCdouble);
62 } 62 }
63 return result; 63 return result;
64 } 64 }
65 DCfloat dcbArgFloat(DCArgs* p) 65 DCfloat dcbArgFloat(DCArgs* p)
66 { 66 {
67 DCfloat result; 67 DCfloat result;
68 if(p->reg_count < DCARGS_MIPS_NUM_FREGS) { 68 if(p->reg_count < DCARGS_MIPS_NUM_REGS) {
69 result = ((DCfloat*)&p->freg_data[p->reg_count++]) 69 result = ((DCfloat*)&p->freg_data[p->reg_count++])
70 #if defined(DC__Endian_LITTLE) 70 #if defined(DC__Endian_LITTLE)
71 [0]; 71 [0];
72 #else 72 #else
73 [1]; /* single precision floats are right-justified in big-endian registers */ 73 [1]; /* single precision floats are right-justified in big-endian registers */