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. */