@@ -30,10 +30,11 @@ #define NUM_SSE_OUT 2 struct registers { uint64_t gpr[NUM_GPR_IN + NUM_GPR_OUT]; __m128 sse[NUM_SSE_IN]; + uint8_t num_sse; }; extern void of_invocation_call(struct registers *); void @@ -42,10 +43,12 @@ OFMethodSignature *methodSignature = [invocation methodSignature]; size_t numberOfArguments = [methodSignature numberOfArguments]; const char *typeEncoding; struct registers registers; size_t currentGPR = 0, currentSSE = 0; + + memset(®isters, '\0', sizeof(registers)); for (size_t i = 0; i < numberOfArguments; i++) { union { uint64_t gpr; __m128 sse; @@ -126,13 +129,14 @@ registers.gpr[currentGPR++] = value.gpr; else /* TODO */ abort(); } else if (valueType == VALUE_SSE) { - if (currentSSE < NUM_SSE_IN) + if (currentSSE < NUM_SSE_IN) { registers.sse[currentSSE++] = value.sse; - else + registers.num_sse++; + } else /* TODO */ abort(); } }