File tree Expand file tree Collapse file tree 5 files changed +94
-0
lines changed Expand file tree Collapse file tree 5 files changed +94
-0
lines changed Original file line number Diff line number Diff line change @@ -4754,6 +4754,16 @@ void emitter::emitIns_Call(EmitCallType callType,
47544754
47554755 /* Update the emitter's live GC ref sets */
47564756
4757+ // If the method returns a GC ref, mark R0 appropriately
4758+ if (retSize == EA_GCREF)
4759+ {
4760+ gcrefRegs |= RBM_R0;
4761+ }
4762+ else if (retSize == EA_BYREF)
4763+ {
4764+ byrefRegs |= RBM_R0;
4765+ }
4766+
47574767 VarSetOps::Assign (emitComp, emitThisGCrefVars, ptrVars);
47584768 emitThisGCrefRegs = gcrefRegs;
47594769 emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -9020,6 +9020,26 @@ void emitter::emitIns_Call(EmitCallType callType,
90209020
90219021 /* Update the emitter's live GC ref sets */
90229022
9023+ // If the method returns a GC ref, mark RBM_INTRET appropriately
9024+ if (retSize == EA_GCREF)
9025+ {
9026+ gcrefRegs |= RBM_INTRET;
9027+ }
9028+ else if (retSize == EA_BYREF)
9029+ {
9030+ byrefRegs |= RBM_INTRET;
9031+ }
9032+
9033+ // If is a multi-register return method is called, mark RBM_INTRET_1 appropriately
9034+ if (secondRetSize == EA_GCREF)
9035+ {
9036+ gcrefRegs |= RBM_INTRET_1;
9037+ }
9038+ else if (secondRetSize == EA_BYREF)
9039+ {
9040+ byrefRegs |= RBM_INTRET_1;
9041+ }
9042+
90239043 VarSetOps::Assign(emitComp, emitThisGCrefVars, ptrVars);
90249044 emitThisGCrefRegs = gcrefRegs;
90259045 emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -2464,6 +2464,26 @@ void emitter::emitIns_Call(EmitCallType callType,
24642464
24652465 /* Update the emitter's live GC ref sets */
24662466
2467+ // If the method returns a GC ref, mark RBM_INTRET appropriately
2468+ if (retSize == EA_GCREF)
2469+ {
2470+ gcrefRegs |= RBM_INTRET;
2471+ }
2472+ else if (retSize == EA_BYREF)
2473+ {
2474+ byrefRegs |= RBM_INTRET;
2475+ }
2476+
2477+ // If is a multi-register return method is called, mark RBM_INTRET_1 appropriately
2478+ if (secondRetSize == EA_GCREF)
2479+ {
2480+ gcrefRegs |= RBM_INTRET_1;
2481+ }
2482+ else if (secondRetSize == EA_BYREF)
2483+ {
2484+ byrefRegs |= RBM_INTRET_1;
2485+ }
2486+
24672487 VarSetOps::Assign (emitComp, emitThisGCrefVars, ptrVars);
24682488 emitThisGCrefRegs = gcrefRegs;
24692489 emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -1373,6 +1373,26 @@ void emitter::emitIns_Call(EmitCallType callType,
13731373
13741374 /* Update the emitter's live GC ref sets */
13751375
1376+ // If the method returns a GC ref, mark RBM_INTRET appropriately
1377+ if (retSize == EA_GCREF)
1378+ {
1379+ gcrefRegs |= RBM_INTRET;
1380+ }
1381+ else if (retSize == EA_BYREF)
1382+ {
1383+ byrefRegs |= RBM_INTRET;
1384+ }
1385+
1386+ // If is a multi-register return method is called, mark RBM_INTRET_1 appropriately
1387+ if (secondRetSize == EA_GCREF)
1388+ {
1389+ gcrefRegs |= RBM_INTRET_1;
1390+ }
1391+ else if (secondRetSize == EA_BYREF)
1392+ {
1393+ byrefRegs |= RBM_INTRET_1;
1394+ }
1395+
13761396 VarSetOps::Assign (emitComp, emitThisGCrefVars, ptrVars);
13771397 emitThisGCrefRegs = gcrefRegs;
13781398 emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -9580,6 +9580,28 @@ void emitter::emitIns_Call(EmitCallType callType,
95809580
95819581 /* Update the emitter's live GC ref sets */
95829582
9583+ // If the method returns a GC ref, mark EAX appropriately
9584+ if (retSize == EA_GCREF)
9585+ {
9586+ gcrefRegs |= RBM_EAX;
9587+ }
9588+ else if (retSize == EA_BYREF)
9589+ {
9590+ byrefRegs |= RBM_EAX;
9591+ }
9592+
9593+ #ifdef UNIX_AMD64_ABI
9594+ // If is a multi-register return method is called, mark RDX appropriately (for System V AMD64).
9595+ if (secondRetSize == EA_GCREF)
9596+ {
9597+ gcrefRegs |= RBM_RDX;
9598+ }
9599+ else if (secondRetSize == EA_BYREF)
9600+ {
9601+ byrefRegs |= RBM_RDX;
9602+ }
9603+ #endif // UNIX_AMD64_ABI
9604+
95839605 VarSetOps::Assign(emitComp, emitThisGCrefVars, ptrVars);
95849606 emitThisGCrefRegs = gcrefRegs;
95859607 emitThisByrefRegs = byrefRegs;
@@ -10951,6 +10973,8 @@ void emitter::emitDispIns(
1095110973 // printf("[A=%08X] " , emitSimpleByrefStkMask);
1095210974 // printf("[L=%02u] " , id->idCodeSize());
1095310975
10976+ doffs = true;
10977+
1095410978 if (!isNew && !asmfm)
1095510979 {
1095610980 doffs = true;
You can’t perform that action at this time.
0 commit comments