Do a move when coercing FREG to FREG or FSREG to FSREG.
This commit is contained in:
		
							parent
							
								
									f0619ea4ae
								
							
						
					
					
						commit
						5432bd03d6
					
				
					 1 changed files with 19 additions and 25 deletions
				
			
		|  | @ -630,13 +630,6 @@ STACKINGRULES | ||||||
| 
 | 
 | ||||||
| COERCIONS | COERCIONS | ||||||
| 
 | 
 | ||||||
| 	from ANY_BHW |  | ||||||
| 		uses REG |  | ||||||
| 		gen |  | ||||||
| 			COMMENT("coerce ANY_BHW->REG") |  | ||||||
| 			move %1, %a |  | ||||||
| 		yields %a |  | ||||||
| 
 |  | ||||||
| 	from STACK | 	from STACK | ||||||
| 		uses REG | 		uses REG | ||||||
| 		gen | 		gen | ||||||
|  | @ -645,18 +638,6 @@ COERCIONS | ||||||
| 			addi sp, sp, {CONST, 4} | 			addi sp, sp, {CONST, 4} | ||||||
| 		yields %a | 		yields %a | ||||||
| 
 | 
 | ||||||
| 	from FSREG |  | ||||||
| 		uses FSREG |  | ||||||
| 		gen |  | ||||||
| 			fmr %a, %1 |  | ||||||
| 		yields %a |  | ||||||
| 
 |  | ||||||
| 	from FREG |  | ||||||
| 		uses FREG |  | ||||||
| 		gen |  | ||||||
| 			fmr %a, %1 |  | ||||||
| 		yields %a |  | ||||||
| 
 |  | ||||||
| 	from STACK | 	from STACK | ||||||
| 		uses FREG | 		uses FREG | ||||||
| 		gen | 		gen | ||||||
|  | @ -673,21 +654,34 @@ COERCIONS | ||||||
| 			addi sp, sp, {CONST, 4} | 			addi sp, sp, {CONST, 4} | ||||||
| 		yields %a | 		yields %a | ||||||
| 
 | 
 | ||||||
| 	from IND_ALL_W | 	from ANY_BHW | ||||||
| 		uses FSREG | 		uses REG | ||||||
| 		gen | 		gen | ||||||
|  | 			COMMENT("coerce ANY_BHW->REG") | ||||||
| 			move %1, %a | 			move %1, %a | ||||||
| 		yields %a | 		yields %a | ||||||
| 
 | 
 | ||||||
| 	/* | 	/* | ||||||
| 	 * from IND_RC_D to REG REG is not possible, because | 	 * There is no coercion from IND_ALL_D to REG REG, because | ||||||
| 	 * %1.off+4 might overflow a signed 16-bit integer in | 	 * coercions can't allocate registers for intermediate values. | ||||||
| 	 *   move {IND_RC_W, %1.val, %1.off+4}, %a | 	 * | ||||||
|  | 	 * A coercion to split IND_RC_D into two IND_RC_W, without | ||||||
|  | 	 * allocating an intermediate register, would yield | ||||||
|  | 	 *   {IND_RC_W, %1.val, %1.off+4} | ||||||
|  | 	 * but %1.off+4 might overflow a signed 16-bit integer. | ||||||
| 	 */ | 	 */ | ||||||
| 
 | 
 | ||||||
| 	from IND_ALL_D | 	from FREG+IND_ALL_D | ||||||
| 		uses FREG | 		uses FREG | ||||||
| 		gen | 		gen | ||||||
|  | 			COMMENT("coerce FREG+IND_ALL_D->FREG") | ||||||
|  | 			move %1, %a | ||||||
|  | 		yields %a | ||||||
|  | 
 | ||||||
|  | 	from FSREG+IND_ALL_W | ||||||
|  | 		uses FSREG | ||||||
|  | 		gen | ||||||
|  | 			COMMENT("coerce FSREG+IND_ALL_W->FREG") | ||||||
| 			move %1, %a | 			move %1, %a | ||||||
| 		yields %a | 		yields %a | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue