target-sparc: Use DisasCompare in Tcc
Signed-off-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Blue Swirl <blauwirbel@gmail.com>
This commit is contained in:
		
							parent
							
								
									416fcaea1e
								
							
						
					
					
						commit
						3a49e7598b
					
				@ -2613,25 +2613,28 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
 | 
				
			|||||||
                    gen_helper_raise_exception(cpu_env, cpu_tmp32);
 | 
					                    gen_helper_raise_exception(cpu_env, cpu_tmp32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                } else if (cond != 0) {
 | 
					                } else if (cond != 0) {
 | 
				
			||||||
                    TCGv r_cond = tcg_temp_new();
 | 
					                    DisasCompare cmp;
 | 
				
			||||||
                    int l1;
 | 
					                    int l1;
 | 
				
			||||||
#ifdef TARGET_SPARC64
 | 
					#ifdef TARGET_SPARC64
 | 
				
			||||||
                    /* V9 icc/xcc */
 | 
					                    /* V9 icc/xcc */
 | 
				
			||||||
                    int cc = GET_FIELD_SP(insn, 11, 12);
 | 
					                    int cc = GET_FIELD_SP(insn, 11, 12);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    save_state(dc);
 | 
					                    save_state(dc);
 | 
				
			||||||
                    if (cc == 0)
 | 
					                    if (cc == 0) {
 | 
				
			||||||
                        gen_cond(r_cond, 0, cond, dc);
 | 
					                        gen_compare(&cmp, 0, cond, dc);
 | 
				
			||||||
                    else if (cc == 2)
 | 
					                    } else if (cc == 2) {
 | 
				
			||||||
                        gen_cond(r_cond, 1, cond, dc);
 | 
					                        gen_compare(&cmp, 1, cond, dc);
 | 
				
			||||||
                    else
 | 
					                    } else {
 | 
				
			||||||
                        goto illegal_insn;
 | 
					                        goto illegal_insn;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
#else
 | 
					#else
 | 
				
			||||||
                    save_state(dc);
 | 
					                    save_state(dc);
 | 
				
			||||||
                    gen_cond(r_cond, 0, cond, dc);
 | 
					                    gen_compare(&cmp, 0, cond, dc);
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
                    l1 = gen_new_label();
 | 
					                    l1 = gen_new_label();
 | 
				
			||||||
                    tcg_gen_brcondi_tl(TCG_COND_EQ, r_cond, 0, l1);
 | 
					                    tcg_gen_brcond_tl(tcg_invert_cond(cmp.cond),
 | 
				
			||||||
 | 
					                                      cmp.c1, cmp.c2, l1);
 | 
				
			||||||
 | 
					                    free_compare(&cmp);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if ((dc->def->features & CPU_FEATURE_HYPV) &&
 | 
					                    if ((dc->def->features & CPU_FEATURE_HYPV) &&
 | 
				
			||||||
                        supervisor(dc))
 | 
					                        supervisor(dc))
 | 
				
			||||||
@ -2643,7 +2646,6 @@ static void disas_sparc_insn(DisasContext * dc, unsigned int insn)
 | 
				
			|||||||
                    gen_helper_raise_exception(cpu_env, cpu_tmp32);
 | 
					                    gen_helper_raise_exception(cpu_env, cpu_tmp32);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    gen_set_label(l1);
 | 
					                    gen_set_label(l1);
 | 
				
			||||||
                    tcg_temp_free(r_cond);
 | 
					 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                gen_op_next_insn();
 | 
					                gen_op_next_insn();
 | 
				
			||||||
                tcg_gen_exit_tb(0);
 | 
					                tcg_gen_exit_tb(0);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user