Mercurial > pub > dyncall > dyncall
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 */ |