mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 03:19:47 +01:00 
			
		
		
		
	* forgotten part of previous commit: fix BccB2Cond optimization on arm
git-svn-id: trunk@42684 -
This commit is contained in:
		
							parent
							
								
									ba0768b6a6
								
							
						
					
					
						commit
						0a0397c9f5
					
				@ -2315,6 +2315,7 @@ Implementation
 | 
				
			|||||||
                           CanBeCond(hp1) and
 | 
					                           CanBeCond(hp1) and
 | 
				
			||||||
                           { stop on labels }
 | 
					                           { stop on labels }
 | 
				
			||||||
                           not(hp1.typ=ait_label) and
 | 
					                           not(hp1.typ=ait_label) and
 | 
				
			||||||
 | 
					                           { avoid that we cannot recognize the case BccB2Cond }
 | 
				
			||||||
                           not((hp1.typ=ait_instruction) and (taicpu(hp1).opcode=A_B)) do
 | 
					                           not((hp1.typ=ait_instruction) and (taicpu(hp1).opcode=A_B)) do
 | 
				
			||||||
                           begin
 | 
					                           begin
 | 
				
			||||||
                              inc(l);
 | 
					                              inc(l);
 | 
				
			||||||
@ -2393,9 +2394,16 @@ Implementation
 | 
				
			|||||||
                                       { skip hp1 to <several moves 2> }
 | 
					                                       { skip hp1 to <several moves 2> }
 | 
				
			||||||
                                       GetNextInstruction(hp1, hp1);
 | 
					                                       GetNextInstruction(hp1, hp1);
 | 
				
			||||||
                                       while assigned(hp1) and
 | 
					                                       while assigned(hp1) and
 | 
				
			||||||
                                         CanBeCond(hp1) do
 | 
					                                         CanBeCond(hp1) and
 | 
				
			||||||
 | 
					                                         (l<=3) do
 | 
				
			||||||
                                         begin
 | 
					                                         begin
 | 
				
			||||||
                                           inc(l);
 | 
					                                           inc(l);
 | 
				
			||||||
 | 
					                                           if MustBeLast(hp1) then
 | 
				
			||||||
 | 
					                                             begin
 | 
				
			||||||
 | 
					                                               GetNextInstruction(hp1, hp1);
 | 
				
			||||||
 | 
					                                               break;
 | 
				
			||||||
 | 
					                                             end
 | 
				
			||||||
 | 
					                                           else
 | 
				
			||||||
                                             GetNextInstruction(hp1, hp1);
 | 
					                                             GetNextInstruction(hp1, hp1);
 | 
				
			||||||
                                         end;
 | 
					                                         end;
 | 
				
			||||||
                                       { hp1 points to yyy: }
 | 
					                                       { hp1 points to yyy: }
 | 
				
			||||||
@ -2409,6 +2417,12 @@ Implementation
 | 
				
			|||||||
                                            repeat
 | 
					                                            repeat
 | 
				
			||||||
                                              if hp1.typ=ait_instruction then
 | 
					                                              if hp1.typ=ait_instruction then
 | 
				
			||||||
                                                taicpu(hp1).condition:=condition;
 | 
					                                                taicpu(hp1).condition:=condition;
 | 
				
			||||||
 | 
					                                              if MustBeLast(hp1) then
 | 
				
			||||||
 | 
					                                                begin
 | 
				
			||||||
 | 
					                                                  GetNextInstruction(hp1, hp1);
 | 
				
			||||||
 | 
					                                                  break;
 | 
				
			||||||
 | 
					                                                end
 | 
				
			||||||
 | 
					                                              else
 | 
				
			||||||
                                                GetNextInstruction(hp1, hp1);
 | 
					                                                GetNextInstruction(hp1, hp1);
 | 
				
			||||||
                                            until not(assigned(hp1)) or
 | 
					                                            until not(assigned(hp1)) or
 | 
				
			||||||
                                              not(CanBeCond(hp1)) or
 | 
					                                              not(CanBeCond(hp1)) or
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user