@@ -47,7 +47,7 @@ PCODE GPRegsRoutines[] =
4747 (PCODE)Load_RCX_RDX, // 01
4848 (PCODE)Load_RCX_RDX_R8, // 02
4949 (PCODE)Load_RCX_RDX_R8_R9, // 03
50- (PCODE)0 , // 10
50+ (PCODE)0 , // 10
5151 (PCODE)Load_RDX, // 11
5252 (PCODE)Load_RDX_R8, // 12
5353 (PCODE)Load_RDX_R8_R9, // 13
@@ -75,7 +75,7 @@ PCODE FPRegsRoutines[] =
7575 (PCODE)Load_XMM0_XMM1, // 01
7676 (PCODE)Load_XMM0_XMM1_XMM2, // 02
7777 (PCODE)Load_XMM0_XMM1_XMM2_XMM3, // 03
78- (PCODE)0 , // 10
78+ (PCODE)0 , // 10
7979 (PCODE)Load_XMM1, // 11
8080 (PCODE)Load_XMM1_XMM2, // 12
8181 (PCODE)Load_XMM1_XMM2_XMM3, // 13
@@ -121,7 +121,7 @@ PCODE GPRegsRoutines[] =
121121 (PCODE)Load_RDI_RSI_RDX_RCX, // 03
122122 (PCODE)Load_RDI_RSI_RDX_RCX_R8, // 04
123123 (PCODE)Load_RDI_RSI_RDX_RCX_R8_R9, // 05
124- (PCODE)0 , // 10
124+ (PCODE)0 , // 10
125125 (PCODE)Load_RSI, // 11
126126 (PCODE)Load_RSI_RDX, // 12
127127 (PCODE)Load_RSI_RDX_RCX, // 13
@@ -200,7 +200,7 @@ PCODE FPRegsRoutines[] =
200200 (PCODE)Load_XMM0_XMM1_XMM2_XMM3_XMM4_XMM5, // 05
201201 (PCODE)Load_XMM0_XMM1_XMM2_XMM3_XMM4_XMM5_XMM6, // 06
202202 (PCODE)Load_XMM0_XMM1_XMM2_XMM3_XMM4_XMM5_XMM6_XMM7,// 07
203- (PCODE)0 , // 10
203+ (PCODE)0 , // 10
204204 (PCODE)Load_XMM1, // 11
205205 (PCODE)Load_XMM1_XMM2, // 12
206206 (PCODE)Load_XMM1_XMM2_XMM3, // 13
@@ -321,7 +321,7 @@ PCODE GPRegsRoutines[] =
321321 (PCODE)Load_X0_X1_X2_X3_X4_X5, // 05
322322 (PCODE)Load_X0_X1_X2_X3_X4_X5_X6, // 06
323323 (PCODE)Load_X0_X1_X2_X3_X4_X5_X6_X7, // 07
324- (PCODE)0 , // 10
324+ (PCODE)0 , // 10
325325 (PCODE)Load_X1, // 11
326326 (PCODE)Load_X1_X2, // 12
327327 (PCODE)Load_X1_X2_X3, // 13
@@ -338,7 +338,7 @@ PCODE GPRegsRoutines[] =
338338 (PCODE)Load_X2_X3_X4_X5_X6, // 26
339339 (PCODE)Load_X2_X3_X4_X5_X6_X7, // 27
340340 (PCODE)0 , // 30
341- (PCODE)0 , // 31
341+ (PCODE)0 , // 31
342342 (PCODE)0 , // 32
343343 (PCODE)Load_X3, // 33
344344 (PCODE)Load_X3_X4, // 34
@@ -438,7 +438,7 @@ PCODE FPRegsRoutines[] =
438438 (PCODE)Load_D0_D1_D2_D3_D4_D5, // 05
439439 (PCODE)Load_D0_D1_D2_D3_D4_D5_D6, // 06
440440 (PCODE)Load_D0_D1_D2_D3_D4_D5_D6_D7, // 07
441- (PCODE)0 , // 10
441+ (PCODE)0 , // 10
442442 (PCODE)Load_D1, // 11
443443 (PCODE)Load_D1_D2, // 12
444444 (PCODE)Load_D1_D2_D3, // 13
@@ -455,7 +455,7 @@ PCODE FPRegsRoutines[] =
455455 (PCODE)Load_D2_D3_D4_D5_D6, // 26
456456 (PCODE)Load_D2_D3_D4_D5_D6_D7, // 27
457457 (PCODE)0 , // 30
458- (PCODE)0 , // 31
458+ (PCODE)0 , // 31
459459 (PCODE)0 , // 32
460460 (PCODE)Load_D3, // 33
461461 (PCODE)Load_D3_D4, // 34
@@ -590,7 +590,7 @@ CallStubHeader *CallStubGenerator::GenerateCallStub(MethodDesc *pMD, AllocMemTra
590590 ArgLocDesc argLocDesc;
591591 argIt.GetArgLoc (ofs, &argLocDesc);
592592
593- #ifdef UNIX_AMD64_ABI
593+ #ifdef UNIX_AMD64_ABI
594594 if (argIt.GetArgLocDescForStructInRegs () != NULL )
595595 {
596596 TypeHandle argTypeHandle;
@@ -604,33 +604,43 @@ CallStubHeader *CallStubGenerator::GenerateCallStub(MethodDesc *pMD, AllocMemTra
604604 {
605605 ArgLocDesc argLocDescEightByte = {};
606606 SystemVClassificationType eightByteType = pEEClass->GetEightByteClassification (i);
607- if (eightByteType == SystemVClassificationTypeInteger)
608- {
609- if (argLocDesc.m_cGenReg != 0 )
610- {
611- argLocDescEightByte.m_cGenReg = 1 ;
612- argLocDescEightByte.m_idxGenReg = argLocDesc.m_idxGenReg ++;
613- }
614- else
615- {
616- argLocDescEightByte.m_byteStackSize = 8 ;
617- argLocDescEightByte.m_byteStackIndex = argLocDesc.m_byteStackIndex ;
618- argLocDesc.m_byteStackIndex += 8 ;
619- }
620- }
621- else if (eightByteType == SystemVClassificationTypeSSE)
607+ switch (eightByteType)
622608 {
623- if (argLocDesc.m_cFloatReg != 0 )
609+ case SystemVClassificationTypeInteger:
610+ case SystemVClassificationTypeIntegerReference:
611+ case SystemVClassificationTypeIntegerByRef:
624612 {
625- argLocDescEightByte.m_cFloatReg = 1 ;
626- argLocDescEightByte.m_idxFloatReg = argLocDesc.m_idxFloatReg ++;
613+ if (argLocDesc.m_cGenReg != 0 )
614+ {
615+ argLocDescEightByte.m_cGenReg = 1 ;
616+ argLocDescEightByte.m_idxGenReg = argLocDesc.m_idxGenReg ++;
617+ }
618+ else
619+ {
620+ argLocDescEightByte.m_byteStackSize = 8 ;
621+ argLocDescEightByte.m_byteStackIndex = argLocDesc.m_byteStackIndex ;
622+ argLocDesc.m_byteStackIndex += 8 ;
623+ }
624+ break ;
627625 }
628- else
626+ case SystemVClassificationTypeSSE:
629627 {
630- argLocDescEightByte.m_byteStackSize = 8 ;
631- argLocDescEightByte.m_byteStackIndex = argLocDesc.m_byteStackIndex ;
632- argLocDesc.m_byteStackIndex += 8 ;
628+ if (argLocDesc.m_cFloatReg != 0 )
629+ {
630+ argLocDescEightByte.m_cFloatReg = 1 ;
631+ argLocDescEightByte.m_idxFloatReg = argLocDesc.m_idxFloatReg ++;
632+ }
633+ else
634+ {
635+ argLocDescEightByte.m_byteStackSize = 8 ;
636+ argLocDescEightByte.m_byteStackIndex = argLocDesc.m_byteStackIndex ;
637+ argLocDesc.m_byteStackIndex += 8 ;
638+ }
639+ break ;
633640 }
641+ default :
642+ assert (!" Unhandled systemv classification for argument in GenerateCallStub" );
643+ break ;
634644 }
635645 ProcessArgument (argIt, argLocDescEightByte, pRoutines);
636646 }
@@ -878,7 +888,7 @@ void CallStubGenerator::ProcessArgument(ArgIterator& argIt, ArgLocDesc& argLocDe
878888 }
879889
880890 if (argLocDesc.m_cGenReg != 0 )
881- {
891+ {
882892 if (m_r1 == NoRange) // No active range yet
883893 {
884894 // Start a new range
@@ -907,7 +917,7 @@ void CallStubGenerator::ProcessArgument(ArgIterator& argIt, ArgLocDesc& argLocDe
907917 // Start a new range
908918 m_x1 = argLocDesc.m_idxFloatReg ;
909919 m_x2 = m_x1 + argLocDesc.m_cFloatReg - 1 ;
910- }
920+ }
911921 else if (argLocDesc.m_idxFloatReg == m_x2 + 1 )
912922 {
913923 // Extend an existing range
@@ -929,7 +939,7 @@ void CallStubGenerator::ProcessArgument(ArgIterator& argIt, ArgLocDesc& argLocDe
929939 // Start a new range
930940 m_s1 = argLocDesc.m_byteStackIndex ;
931941 m_s2 = m_s1 + argLocDesc.m_byteStackSize - 1 ;
932- }
942+ }
933943 else if ((argLocDesc.m_byteStackIndex == m_s2 + 1 ) && (argLocDesc.m_byteStackSize >= 8 ))
934944 {
935945 // Extend an existing range, but only if the argument is at least pointer size large.
@@ -987,4 +997,4 @@ void CallStubGenerator::ProcessArgument(ArgIterator& argIt, ArgLocDesc& argLocDe
987997#endif // UNIX_AMD64_ABI
988998}
989999
990- #endif // FEATURE_INTERPRETER
1000+ #endif // FEATURE_INTERPRETER
0 commit comments