tcg/i386: Use TEST r,r to test 8/16/32 bits
Just like when testing against the sign bits, TEST r,r can be used when the immediate is 0xff, 0xff00, 0xffff, 0xffffffff. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
		
							parent
							
								
									d3d1c30c63
								
							
						
					
					
						commit
						be1335dba1
					
				| @ -1501,6 +1501,10 @@ static int tcg_out_cmp(TCGContext *s, TCGCond cond, TCGArg arg1, | ||||
|             tcg_out_modrm(s, OPC_TESTB | P_REXB_R, arg1, arg1); | ||||
|             return js; | ||||
|         } | ||||
|         if (arg2 == 0xff) { | ||||
|             tcg_out_modrm(s, OPC_TESTB | P_REXB_R, arg1, arg1); | ||||
|             return jz; | ||||
|         } | ||||
|         tcg_out_modrm(s, OPC_GRP3_Eb | P_REXB_RM, EXT3_TESTi, arg1); | ||||
|         tcg_out8(s, arg2); | ||||
|         return jz; | ||||
| @ -1511,11 +1515,24 @@ static int tcg_out_cmp(TCGContext *s, TCGCond cond, TCGArg arg1, | ||||
|             tcg_out_modrm(s, OPC_TESTB, arg1 + 4, arg1 + 4); | ||||
|             return js; | ||||
|         } | ||||
|         if (arg2 == 0xff00) { | ||||
|             tcg_out_modrm(s, OPC_TESTB, arg1 + 4, arg1 + 4); | ||||
|             return jz; | ||||
|         } | ||||
|         tcg_out_modrm(s, OPC_GRP3_Eb, EXT3_TESTi, arg1 + 4); | ||||
|         tcg_out8(s, arg2 >> 8); | ||||
|         return jz; | ||||
|     } | ||||
| 
 | ||||
|     if (arg2 == 0xffff) { | ||||
|         tcg_out_modrm(s, OPC_TESTL | P_DATA16, arg1, arg1); | ||||
|         return jz; | ||||
|     } | ||||
|     if (arg2 == 0xffffffffu) { | ||||
|         tcg_out_modrm(s, OPC_TESTL, arg1, arg1); | ||||
|         return jz; | ||||
|     } | ||||
| 
 | ||||
|     if (is_power_of_2(rexw ? arg2 : (uint32_t)arg2)) { | ||||
|         int jc = (cond == TCG_COND_TSTNE ? JCC_JB : JCC_JAE); | ||||
|         int sh = ctz64(arg2); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Paolo Bonzini
						Paolo Bonzini