75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
static void
pushDouble(struct call_context **context, size_t *currentSSE, double value)
{
struct call_context *newContext;
if (*currentSSE < NUM_SSE_IN) {
(*context)->sse[(*currentSSE)++] = _mm_set_sd(value);
(*context)->num_sse_used++;
return;
}
if ((newContext = realloc(*context,
sizeof(**context) + ((*context)->stack_size + 1) * 8)) == NULL) {
free(*context);
|
|
|
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
static void
pushDouble(struct call_context **context, size_t *currentSSE, double value)
{
struct call_context *newContext;
if (*currentSSE < NUM_SSE_IN) {
(*context)->sse[(*currentSSE)++] = (__m128)_mm_set_sd(value);
(*context)->num_sse_used++;
return;
}
if ((newContext = realloc(*context,
sizeof(**context) + ((*context)->stack_size + 1) * 8)) == NULL) {
free(*context);
|
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
case 'f':;
float floatTmp;
_mm_store_ss(&floatTmp, context->sse[0]);
[invocation setReturnValue: &floatTmp];
break;
case 'd':;
double doubleTmp;
_mm_store_sd(&doubleTmp, context->sse[0]);
[invocation setReturnValue: &doubleTmp];
break;
case 'D':
[invocation setReturnValue: &context->x87[0]];
break;
CASE_GPR('B', _Bool)
CASE_GPR('*', uintptr_t)
|
|
|
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
|
case 'f':;
float floatTmp;
_mm_store_ss(&floatTmp, context->sse[0]);
[invocation setReturnValue: &floatTmp];
break;
case 'd':;
double doubleTmp;
_mm_store_sd(&doubleTmp, (__m128d)context->sse[0]);
[invocation setReturnValue: &doubleTmp];
break;
case 'D':
[invocation setReturnValue: &context->x87[0]];
break;
CASE_GPR('B', _Bool)
CASE_GPR('*', uintptr_t)
|