// {
// outcode($1, &$2, NREG, &$4);
// }
- CSET GT, R1
+ CSET GT, R1 // e1d79f9a
//
// CSEL/CSINC/CSNEG/CSINV
//
// {
// outgcode($1, &$2, $6.reg, &$4, &$8);
// }
- CSEL LT, R1, R2, ZR
- CSINC GT, R1, ZR, R3
- CSNEG MI, R1, R2, R3
- CSINV CS, R1, R2, R3 // CSINV HS, R1, R2, R3
+ CSEL LT, R1, R2, ZR // 3fb0829a
+ CSINC GT, R1, ZR, R3 // 23c49f9a
+ CSNEG MI, R1, R2, R3 // 234482da
+ CSINV CS, R1, R2, R3 // CSINV HS, R1, R2, R3 // 232082da
// LTYPES cond ',' reg ',' reg
// {
// outcode($1, &$2, $4.reg, &$6);
// }
- CSEL LT, R1, R2
+ CINC EQ, R4, R9 // 8914849a
+ CINV PL, R11, R22 // 76418bda
+ CNEG LS, R13, R7 // a7858dda
//
// CCMN
//
// {
// outgcode($1, &$2, $6.reg, &$4, &$8);
// }
- CCMN MI, ZR, R1, $4
+ CCMN MI, ZR, R1, $4 // e44341ba
//
// FADDD
// {
// outgcode($1, &$2, $6.reg, &$4, &$8);
// }
-// FCCMP LT, F1, F2, $1
+ FCCMPS LT, F1, F2, $1 // 41b4211e
//
// FMULA
{AFMOVD, C_FREG, C_NONE, C_REG, 29, 4, 0, 0, 0},
{AFCMPS, C_FREG, C_FREG, C_NONE, 56, 4, 0, 0, 0},
{AFCMPS, C_FCON, C_FREG, C_NONE, 56, 4, 0, 0, 0},
- {AFCCMPS, C_COND, C_REG, C_VCON, 57, 4, 0, 0, 0},
+ {AFCCMPS, C_COND, C_FREG, C_VCON, 57, 4, 0, 0, 0},
{AFCSELD, C_COND, C_REG, C_FREG, 18, 4, 0, 0, 0},
{AFCVTSD, C_FREG, C_NONE, C_FREG, 29, 4, 0, 0, 0},
{ACLREX, C_NONE, C_NONE, C_VCON, 38, 4, 0, 0, 0},
o1 = c.oprrr(p, p.As)
cond := int(p.From.Reg)
+ if cond < COND_EQ || cond > COND_NV {
+ c.ctxt.Diag("invalid condition\n%v", p)
+ } else {
+ cond -= COND_EQ
+ }
+
r := int(p.Reg)
var rf int
if r != 0 {
}
rt := int(p.To.Reg)
- o1 |= (uint32(rf&31) << 16) | (uint32(cond&31) << 12) | (uint32(r&31) << 5) | uint32(rt&31)
+ o1 |= (uint32(rf&31) << 16) | (uint32(cond&15) << 12) | (uint32(r&31) << 5) | uint32(rt&31)
case 19: /* CCMN cond, (Rm|uimm5),Rn, uimm4 -> ccmn Rn,Rm,uimm4,cond */
nzcv := int(p.To.Offset)
cond := int(p.From.Reg)
+ if cond < COND_EQ || cond > COND_NV {
+ c.ctxt.Diag("invalid condition\n%v", p)
+ } else {
+ cond -= COND_EQ
+ }
var rf int
if p.From3.Type == obj.TYPE_REG {
o1 = c.oprrr(p, p.As)
rf = int(p.From3.Offset & 0x1F)
}
- o1 |= (uint32(rf&31) << 16) | (uint32(cond) << 12) | (uint32(p.Reg&31) << 5) | uint32(nzcv)
+ o1 |= (uint32(rf&31) << 16) | (uint32(cond&15) << 12) | (uint32(p.Reg&31) << 5) | uint32(nzcv)
case 20: /* movT R,O(R) -> strT */
v := int32(c.regoff(&p.To))
o1 = c.oprrr(p, p.As)
cond := int(p.From.Reg)
+ if cond < COND_EQ || cond > COND_NV {
+ c.ctxt.Diag("invalid condition\n%v", p)
+ } else {
+ cond -= COND_EQ
+ }
+
nzcv := int(p.To.Offset)
if nzcv&^0xF != 0 {
c.ctxt.Diag("implausible condition\n%v", p)
break
}
rt := int(p.From3.Reg)
- o1 |= uint32(rf&31)<<16 | uint32(cond)<<12 | uint32(rt&31)<<5 | uint32(nzcv)
+ o1 |= uint32(rf&31)<<16 | uint32(cond&15)<<12 | uint32(rt&31)<<5 | uint32(nzcv)
case 58: /* ldar/ldxr/ldaxr */
o1 = c.opload(p, p.As)