Commit f3f478a7efe9dc76325d0c774ca2e728d465bbe0

Authored by bellard
1 parent ef28fd86

Fix signed/unsigned issues of immediate version of brcond (malc)

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4588 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 48 additions and 11 deletions
tcg/ppc/tcg-target.c
@@ -866,18 +866,55 @@ static void tcg_out_brcond(TCGContext *s, int cond, @@ -866,18 +866,55 @@ static void tcg_out_brcond(TCGContext *s, int cond,
866 int imm; 866 int imm;
867 uint32_t op; 867 uint32_t op;
868 868
869 - imm = const_arg2 ? ((int16_t) arg2 == arg2) : 0;  
870 switch (cond) { 869 switch (cond) {
871 - case TCG_COND_EQ: op = imm ? CMPLI : CMPL; break;  
872 - case TCG_COND_NE: op = imm ? CMPLI : CMPL; break;  
873 - case TCG_COND_LT: op = imm ? CMPI : CMP; break;  
874 - case TCG_COND_GE: op = imm ? CMPI : CMP; break;  
875 - case TCG_COND_LE: op = imm ? CMPI : CMP; break;  
876 - case TCG_COND_GT: op = imm ? CMPI : CMP; break;  
877 - case TCG_COND_LTU: op = imm ? CMPLI : CMPL; break;  
878 - case TCG_COND_GEU: op = imm ? CMPLI : CMPL; break;  
879 - case TCG_COND_LEU: op = imm ? CMPLI : CMPL; break;  
880 - case TCG_COND_GTU: op = imm ? CMPLI : CMPL; break; 870 + case TCG_COND_EQ:
  871 + case TCG_COND_NE:
  872 + if (const_arg2) {
  873 + if ((int16_t) arg2 == arg2) {
  874 + op = CMPI;
  875 + imm = 1;
  876 + break;
  877 + }
  878 + else if ((uint16_t) arg2 == arg2) {
  879 + op = CMPLI;
  880 + imm = 1;
  881 + break;
  882 + }
  883 + }
  884 + op = CMPL;
  885 + imm = 0;
  886 + break;
  887 +
  888 + case TCG_COND_LT:
  889 + case TCG_COND_GE:
  890 + case TCG_COND_LE:
  891 + case TCG_COND_GT:
  892 + if (const_arg2) {
  893 + if ((int16_t) arg2 == arg2) {
  894 + op = CMPI;
  895 + imm = 1;
  896 + break;
  897 + }
  898 + }
  899 + op = CMP;
  900 + imm = 0;
  901 + break;
  902 +
  903 + case TCG_COND_LTU:
  904 + case TCG_COND_GEU:
  905 + case TCG_COND_LEU:
  906 + case TCG_COND_GTU:
  907 + if (const_arg2) {
  908 + if ((uint16_t) arg2 == arg2) {
  909 + op = CMPLI;
  910 + imm = 1;
  911 + break;
  912 + }
  913 + }
  914 + op = CMPL;
  915 + imm = 0;
  916 + break;
  917 +
881 default: 918 default:
882 tcg_abort (); 919 tcg_abort ();
883 } 920 }