Mercurial > pub > dyncall > dyncall
comparison dyncall/dyncall_callvm_sparc64.c @ 466:ddfb9577a00e
introduced platform-native thiscall mode (DC_CALL_C_DEFAULT_THIS), as needed
for upcoming aggregate support (until now only x86 platforms allowed for
specifically selecting thiscall mode, given the different conventions on
the same platform); also added respective DC_SIGCHAR_CC_THISCALL ('*')
author | Tassilo Philipp |
---|---|
date | Wed, 02 Feb 2022 18:30:44 +0100 |
parents | ad5f9803f52f |
children | 71c884e610f0 |
comparison
equal
deleted
inserted
replaced
465:e2899b4ff713 | 466:ddfb9577a00e |
---|---|
90 dc_callvm_argDouble_v9(in_self, u.d); | 90 dc_callvm_argDouble_v9(in_self, u.d); |
91 } | 91 } |
92 | 92 |
93 static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode); | 93 static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode); |
94 | 94 |
95 DCCallVM_vt gVT_v9_ellipsis = | 95 DCCallVM_vt gVT_v9_ellipsis = |
96 { | 96 { |
97 &dc_callvm_free_v9, | 97 &dc_callvm_free_v9, |
98 &dc_callvm_reset_v9, | 98 &dc_callvm_reset_v9, |
99 &dc_callvm_mode_v9, | 99 &dc_callvm_mode_v9, |
100 &dc_callvm_argBool_v9, | 100 &dc_callvm_argBool_v9, |
101 &dc_callvm_argChar_v9, | 101 &dc_callvm_argChar_v9, |
102 &dc_callvm_argShort_v9, | 102 &dc_callvm_argShort_v9, |
103 &dc_callvm_argInt_v9, | 103 &dc_callvm_argInt_v9, |
104 &dc_callvm_argLong_v9, | 104 &dc_callvm_argLong_v9, |
105 &dc_callvm_argLongLong_v9, | 105 &dc_callvm_argLongLong_v9, |
106 &dc_callvm_argFloat_v9_ellipsis, | 106 &dc_callvm_argFloat_v9_ellipsis, |
107 &dc_callvm_argDouble_v9_ellipsis, | 107 &dc_callvm_argDouble_v9_ellipsis, |
108 &dc_callvm_argPointer_v9, | 108 &dc_callvm_argPointer_v9, |
109 NULL /* argStruct */, | 109 NULL /* argStruct */, |
110 (DCvoidvmfunc*) &dcCall_v9, | 110 (DCvoidvmfunc*) &dcCall_v9, |
111 (DCboolvmfunc*) &dcCall_v9, | 111 (DCboolvmfunc*) &dcCall_v9, |
112 (DCcharvmfunc*) &dcCall_v9, | 112 (DCcharvmfunc*) &dcCall_v9, |
113 (DCshortvmfunc*) &dcCall_v9, | 113 (DCshortvmfunc*) &dcCall_v9, |
114 (DCintvmfunc*) &dcCall_v9, | 114 (DCintvmfunc*) &dcCall_v9, |
115 (DClongvmfunc*) &dcCall_v9, | 115 (DClongvmfunc*) &dcCall_v9, |
116 (DClonglongvmfunc*) &dcCall_v9, | 116 (DClonglongvmfunc*) &dcCall_v9, |
117 (DCfloatvmfunc*) &dcCall_v9, | 117 (DCfloatvmfunc*) &dcCall_v9, |
118 (DCdoublevmfunc*) &dcCall_v9, | 118 (DCdoublevmfunc*) &dcCall_v9, |
119 (DCpointervmfunc*) &dcCall_v9, | 119 (DCpointervmfunc*) &dcCall_v9, |
120 NULL /* callStruct */ | 120 NULL /* callStruct */ |
121 }; | 121 }; |
122 | 122 |
123 /* CallVM virtual table. */ | 123 /* CallVM virtual table. */ |
124 DCCallVM_vt gVT_v9 = | 124 DCCallVM_vt gVT_v9 = |
125 { | 125 { |
126 &dc_callvm_free_v9, | 126 &dc_callvm_free_v9, |
127 &dc_callvm_reset_v9, | 127 &dc_callvm_reset_v9, |
128 &dc_callvm_mode_v9, | 128 &dc_callvm_mode_v9, |
129 &dc_callvm_argBool_v9, | 129 &dc_callvm_argBool_v9, |
130 &dc_callvm_argChar_v9, | 130 &dc_callvm_argChar_v9, |
131 &dc_callvm_argShort_v9, | 131 &dc_callvm_argShort_v9, |
132 &dc_callvm_argInt_v9, | 132 &dc_callvm_argInt_v9, |
133 &dc_callvm_argLong_v9, | 133 &dc_callvm_argLong_v9, |
134 &dc_callvm_argLongLong_v9, | 134 &dc_callvm_argLongLong_v9, |
135 &dc_callvm_argFloat_v9, | 135 &dc_callvm_argFloat_v9, |
136 &dc_callvm_argDouble_v9, | 136 &dc_callvm_argDouble_v9, |
137 &dc_callvm_argPointer_v9, | 137 &dc_callvm_argPointer_v9, |
138 NULL /* argStruct */, | 138 NULL /* argStruct */, |
139 (DCvoidvmfunc*) &dcCall_v9, | 139 (DCvoidvmfunc*) &dcCall_v9, |
140 (DCboolvmfunc*) &dcCall_v9, | 140 (DCboolvmfunc*) &dcCall_v9, |
141 (DCcharvmfunc*) &dcCall_v9, | 141 (DCcharvmfunc*) &dcCall_v9, |
142 (DCshortvmfunc*) &dcCall_v9, | 142 (DCshortvmfunc*) &dcCall_v9, |
143 (DCintvmfunc*) &dcCall_v9, | 143 (DCintvmfunc*) &dcCall_v9, |
144 (DClongvmfunc*) &dcCall_v9, | 144 (DClongvmfunc*) &dcCall_v9, |
145 (DClonglongvmfunc*) &dcCall_v9, | 145 (DClonglongvmfunc*) &dcCall_v9, |
146 (DCfloatvmfunc*) &dcCall_v9, | 146 (DCfloatvmfunc*) &dcCall_v9, |
147 (DCdoublevmfunc*) &dcCall_v9, | 147 (DCdoublevmfunc*) &dcCall_v9, |
148 (DCpointervmfunc*) &dcCall_v9, | 148 (DCpointervmfunc*) &dcCall_v9, |
149 NULL /* callStruct */ | 149 NULL /* callStruct */ |
150 }; | 150 }; |
151 | 151 |
152 /* mode: only a single mode available currently. */ | 152 /* mode: only a single mode available currently. */ |
153 static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode) | 153 static void dc_callvm_mode_v9(DCCallVM* in_self, DCint mode) |
155 DCCallVM_v9* self = (DCCallVM_v9*)in_self; | 155 DCCallVM_v9* self = (DCCallVM_v9*)in_self; |
156 DCCallVM_vt* vt; | 156 DCCallVM_vt* vt; |
157 | 157 |
158 switch(mode) { | 158 switch(mode) { |
159 case DC_CALL_C_DEFAULT: | 159 case DC_CALL_C_DEFAULT: |
160 case DC_CALL_C_DEFAULT_THIS: | |
160 case DC_CALL_C_SPARC64: | 161 case DC_CALL_C_SPARC64: |
161 case DC_CALL_C_ELLIPSIS: | 162 case DC_CALL_C_ELLIPSIS: |
162 vt = &gVT_v9; | 163 vt = &gVT_v9; |
163 break; | 164 break; |
164 case DC_CALL_C_ELLIPSIS_VARARGS: | 165 case DC_CALL_C_ELLIPSIS_VARARGS: |
165 vt = &gVT_v9_ellipsis; | 166 vt = &gVT_v9_ellipsis; |
166 break; | 167 break; |
167 default: | 168 default: |
168 self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; | 169 self->mInterface.mError = DC_ERROR_UNSUPPORTED_MODE; |
169 return; | 170 return; |
170 } | 171 } |
171 dc_callvm_base_init(&self->mInterface, vt); | 172 dc_callvm_base_init(&self->mInterface, vt); |
172 } | 173 } |
173 | 174 |
174 /* Public API. */ | 175 /* Public API. */ |