Sync with latest RandomX code

Fix a possible out-of-bounds access in superscalar generator
This commit is contained in:
SChernykh 2019-10-13 22:13:29 +02:00
parent 228f02c361
commit c9798ba2e9

View file

@ -631,7 +631,7 @@ namespace randomx {
int cycle1 = scheduleUop<false>(mop.getUop1(), portBusy, cycle); int cycle1 = scheduleUop<false>(mop.getUop1(), portBusy, cycle);
int cycle2 = scheduleUop<false>(mop.getUop2(), portBusy, cycle); int cycle2 = scheduleUop<false>(mop.getUop2(), portBusy, cycle);
if (cycle1 == cycle2) { if (cycle1 >= 0 && cycle1 == cycle2) {
if (commit) { if (commit) {
scheduleUop<true>(mop.getUop1(), portBusy, cycle1); scheduleUop<true>(mop.getUop1(), portBusy, cycle1);
scheduleUop<true>(mop.getUop2(), portBusy, cycle2); scheduleUop<true>(mop.getUop2(), portBusy, cycle2);
@ -755,6 +755,12 @@ namespace randomx {
//recalculate when the instruction can be scheduled for execution based on operand availability //recalculate when the instruction can be scheduled for execution based on operand availability
scheduleCycle = scheduleMop<true>(mop, portBusy, scheduleCycle, scheduleCycle); scheduleCycle = scheduleMop<true>(mop, portBusy, scheduleCycle, scheduleCycle);
if (scheduleCycle < 0) {
if (trace) std::cout << "Unable to map operation '" << mop.getName() << "' to execution port (cycle " << scheduleCycle << ")" << std::endl;
portsSaturated = true;
break;
}
//calculate when the result will be ready //calculate when the result will be ready
depCycle = scheduleCycle + mop.getLatency(); depCycle = scheduleCycle + mop.getLatency();