@@ -7893,15 +7893,19 @@ void GlobalRA::addStoreRestoreToReturn() {
78937893 G4_Operand *oldFPSrc =
78947894 builder.createSrc (oldFPDcl->getRegVar (), 0 , 0 , rd, Type_UD);
78957895
7896- auto SRDecl =
7897- builder.createHardwiredDeclare (size, Type_UD, kernel.stackCall .getFPSPGRF (),
7898- kernel.stackCall .subRegs .Ret_IP );
7899- addVarToRA (SRDecl);
7900- SRDecl->setName (builder.getNameString (24 , " SR_BEStack" ));
7896+ unsigned saveRestoreSubReg =
7897+ kernel.stackCall .getVersion () == StackCallABI::StackCallABIVersion::VER_3
7898+ ? kernel.stackCall .subRegs .BE_FP
7899+ : kernel.stackCall .subRegs .Ret_IP ;
7900+ auto saveRestoreDecl = builder.createHardwiredDeclare (
7901+ size, Type_UD, kernel.stackCall .getFPSPGRF (), saveRestoreSubReg);
7902+ addVarToRA (saveRestoreDecl);
7903+ saveRestoreDecl->setName (builder.getNameString (24 , " SR_BEStack" ));
79017904 G4_DstRegRegion *FPdst =
7902- builder.createDst (SRDecl ->getRegVar (), 0 , 0 , 1 , Type_UD);
7905+ builder.createDst (saveRestoreDecl ->getRegVar (), 0 , 0 , 1 , Type_UD);
79037906 rd = builder.getRegionStride1 ();
7904- G4_Operand *FPsrc = builder.createSrc (SRDecl->getRegVar (), 0 , 0 , rd, Type_UD);
7907+ G4_Operand *FPsrc =
7908+ builder.createSrc (saveRestoreDecl->getRegVar (), 0 , 0 , rd, Type_UD);
79057909
79067910 saveBE_FPInst = builder.createMov (size == 4 ? g4::SIMD4 : g4::SIMD8, oldFPDst,
79077911 FPsrc, InstOpt_WriteEnable, false );
0 commit comments