File tree 5 files changed +94
-0
lines changed
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,
4754
4754
4755
4755
/* Update the emitter's live GC ref sets */
4756
4756
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
+
4757
4767
VarSetOps::Assign (emitComp, emitThisGCrefVars, ptrVars);
4758
4768
emitThisGCrefRegs = gcrefRegs;
4759
4769
emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -9020,6 +9020,26 @@ void emitter::emitIns_Call(EmitCallType callType,
9020
9020
9021
9021
/* Update the emitter's live GC ref sets */
9022
9022
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
+
9023
9043
VarSetOps::Assign(emitComp, emitThisGCrefVars, ptrVars);
9024
9044
emitThisGCrefRegs = gcrefRegs;
9025
9045
emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -2464,6 +2464,26 @@ void emitter::emitIns_Call(EmitCallType callType,
2464
2464
2465
2465
/* Update the emitter's live GC ref sets */
2466
2466
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
+
2467
2487
VarSetOps::Assign (emitComp, emitThisGCrefVars, ptrVars);
2468
2488
emitThisGCrefRegs = gcrefRegs;
2469
2489
emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -1373,6 +1373,26 @@ void emitter::emitIns_Call(EmitCallType callType,
1373
1373
1374
1374
/* Update the emitter's live GC ref sets */
1375
1375
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
+
1376
1396
VarSetOps::Assign(emitComp, emitThisGCrefVars, ptrVars);
1377
1397
emitThisGCrefRegs = gcrefRegs;
1378
1398
emitThisByrefRegs = byrefRegs;
Original file line number Diff line number Diff line change @@ -9580,6 +9580,28 @@ void emitter::emitIns_Call(EmitCallType callType,
9580
9580
9581
9581
/* Update the emitter's live GC ref sets */
9582
9582
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
+
9583
9605
VarSetOps::Assign(emitComp, emitThisGCrefVars, ptrVars);
9584
9606
emitThisGCrefRegs = gcrefRegs;
9585
9607
emitThisByrefRegs = byrefRegs;
@@ -10951,6 +10973,8 @@ void emitter::emitDispIns(
10951
10973
// printf("[A=%08X] " , emitSimpleByrefStkMask);
10952
10974
// printf("[L=%02u] " , id->idCodeSize());
10953
10975
10976
+ doffs = true;
10977
+
10954
10978
if (!isNew && !asmfm)
10955
10979
{
10956
10980
doffs = true;
You can’t perform that action at this time.
0 commit comments