On 09/22/2014 11:44 PM, Zhenqiang Chen wrote:
> + case CC_DNEmode:
> + return comp_code == NE ? AARCH64_NE : AARCH64_EQ;
> + case CC_DEQmode:
> + return comp_code == NE ? AARCH64_EQ : AARCH64_NE;
> + case CC_DGEmode:
> + return comp_code == NE ? AARCH64_GE : AARCH64_LT;
> + case CC_DLTmode:
> + return comp_code == NE ? AARCH64_LT : AARCH64_GE;
> + case CC_DGTmode:
> + return comp_code == NE ? AARCH64_GT : AARCH64_LE;
> + case CC_DLEmode:
> + return comp_code == NE ? AARCH64_LE : AARCH64_GT;
> + case CC_DGEUmode:
> + return comp_code == NE ? AARCH64_CS : AARCH64_CC;
> + case CC_DLTUmode:
> + return comp_code == NE ? AARCH64_CC : AARCH64_CS;
> + case CC_DGTUmode:
> + return comp_code == NE ? AARCH64_HI : AARCH64_LS;
> + case CC_DLEUmode:
> + return comp_code == NE ? AARCH64_LS : AARCH64_HI;
I think these should return -1 if comp_code is not EQ. Like the CC_Zmode case
below.
Perhaps you can share some code to make the whole thing less bulky. E.g.
...
case CC_DLEUmode:
ne = AARCH64_LS;
eq = AARCH64_HI;
break;
case CC_Zmode:
ne = AARCH64_NE;
eq = AARCH64_EQ;
break;
}
if (code == NE)
return ne;
if (code == EQ)
return eq;
return -1;
This does beg the question of whether you need both CC_Zmode and CC_DNEmode.
I'll leave it to an ARM maintainer to say which one of the two should be kept.
r~