World number two Roger Federer fended off a feisty challenge from German qualifier Mischa Zverev on Friday to win 7-6, 6-2 and set up a semi-final against defending champion Novak Djokovic.
Serbian Djokovic eased confidently into the last four with a 6-3, 6-4 win over Argentine fifth seed Juan Martin Del Potro.
Zverev, 21, served superbly, attacked the net well and showed character in the first set to save two break-and-set points in a game that was interrupted for a few minutes, apparently because a spectator was taken ill.
He was unable to trouble Federer on his serve, however, and the Swiss eventually took the first set in a tiebreak with a splendid cross-court forehand pass.
Federer cruised home in the second set although Zverev had the satisfaction of saving two match points before going out.
Earlier, Djokovic dug up some fine returns to take Del Potro's big serve in the fourth game after an early trade of breaks and went on to seal the first set with an ace.
Del Potro had Djokovic under pressure on his serve at the start of the second set but, after failing to convert two break points in the fourth game, he dropped his head and his third-ranked opponent ruthlessly capitalised to get another breakthrough.
Del Potro saved three match points before firing into the net to let Djokovic through.
Later on Friday, world number one Rafael Nadal takes on his sixth-seeded Spanish compatriot Fernando Verdasco for the right to meet Chilean Fernando Gonzalez, the 12th seed, or Argentine qualifier Juan Monaco in the last four.