@@ -149,10 +149,20 @@ CASE_GPR('S', unsigned short) CASE_GPR('l', long) CASE_GPR('L', unsigned long) CASE_GPR('q', long long) CASE_GPR('Q', unsigned long long) +#ifdef __SIZEOF_INT128__ + case 't': + case 'T':; + uint64_t int128Tmp[2]; + [invocation getArgument: int128Tmp + atIndex: i]; + pushGPR(&context, ¤tGPR, int128Tmp[0]); + pushGPR(&context, ¤tGPR, int128Tmp[1]); + break; +#endif case 'f':; float floatTmp; [invocation getArgument: &floatTmp atIndex: i]; pushDouble(&context, ¤tSSE, floatTmp); @@ -179,14 +189,10 @@ /* TODO: '(' */ CASE_GPR('^', uintptr_t) #ifndef __STDC_NO_COMPLEX__ /* TODO: 'j' */ #endif -#ifdef __SIZEOF_INT128__ - /* TODO: 't' */ - /* TODO: 'T' */ -#endif default: free(context); @throw [OFInvalidFormatException exception]; #undef CASE_GPR } @@ -206,10 +212,14 @@ case 'S': case 'l': case 'L': case 'q': case 'Q': +#ifdef __SIZEOF_INT128__ + case 't': + case 'T': +#endif case 'f': case 'd': case 'B': case '*': case '@': @@ -225,14 +235,10 @@ /* TODO: '{' */ /* TODO: '(' */ #ifndef __STDC_NO_COMPLEX__ /* TODO: 'j' */ #endif -#ifdef __SIZEOF_INT128__ - /* TODO: 't' */ - /* TODO: 'T' */ -#endif default: free(context); @throw [OFInvalidFormatException exception]; } @@ -254,10 +260,16 @@ CASE_GPR('S', unsigned short) CASE_GPR('l', long) CASE_GPR('L', unsigned long) CASE_GPR('q', long long) CASE_GPR('Q', unsigned long long) +#ifdef __SIZEOF_INT128__ + case 't': + case 'T':; + [invocation setReturnValue: &context->gpr[NUM_GPR_IN]]; + break; +#endif case 'f':; float floatTmp; _mm_store_ss(&floatTmp, context->sse[0]); [invocation setReturnValue: &floatTmp]; break; @@ -279,17 +291,13 @@ /* TODO: '(' */ CASE_GPR('^', uintptr_t) #ifndef __STDC_NO_COMPLEX__ /* TODO: 'j' */ #endif -#ifdef __SIZEOF_INT128__ - /* TODO: 't' */ - /* TODO: 'T' */ -#endif default: free(context); @throw [OFInvalidFormatException exception]; #undef CASE_GPR } free(context); }