AMMINDBWU R14, (R13), R12 // ac397138
AMMINDBVU R14, (R13), R12 // acb97138
+ FMADDF F2, F14, F9, F16 // 30391108
+ FMADDD F11, F20, F23, F12 // ecd22508
+ FMSUBF F3, F11, F31, F22 // f6af5108
+ FMSUBD F13, F30, F9, F15 // 2ff96608
+ FNMADDF F27, F11, F5, F21 // b5ac9d08
+ FNMADDD F29, F14, F27, F6 // 66bbae08
+ FNMSUBF F17, F8, F12, F8 // 88a1d808
+ FNMSUBD F29, F21, F3, F17 // 71d4ee08
+ FMADDF F2, F14, F9 // 29391108
+ FMADDD F11, F20, F23 // f7d22508
+ FMSUBF F3, F11, F31 // ffaf5108
+ FMSUBD F13, F30, F9 // 29f96608
+ FNMADDF F27, F11, F5 // a5ac9d08
+ FNMADDD F29, F14, F27 // 7bbbae08
+ FNMSUBF F17, F8, F12 // 8ca1d808
+ FNMSUBD F29, F21, F3 // 63d4ee08
+
FMINF F4, F5, F6 // a6900a01
FMINF F4, F5 // a5900a01
FMIND F4, F5, F6 // a6100b01
{AMOVF, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
{AMOVD, C_FREG, C_NONE, C_NONE, C_FREG, C_NONE, 9, 4, 0, 0},
+ {AFMADDF, C_FREG, C_FREG, C_NONE, C_FREG, C_NONE, 39, 4, 0, 0},
+ {AFMADDF, C_FREG, C_FREG, C_FREG, C_FREG, C_NONE, 39, 4, 0, 0},
+
{AMOVW, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0},
{AMOVWU, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0},
{AMOVV, C_REG, C_NONE, C_NONE, C_SAUTO, C_NONE, 7, 4, REGSP, 0},
opset(AFSCALEBF, r0)
opset(AFSCALEBD, r0)
+ case AFMADDF:
+ opset(AFMADDD, r0)
+ opset(AFMSUBF, r0)
+ opset(AFMSUBD, r0)
+ opset(AFNMADDF, r0)
+ opset(AFNMADDD, r0)
+ opset(AFNMSUBF, r0)
+ opset(AFNMSUBD, r0)
+
case AAND:
opset(AOR, r0)
opset(AXOR, r0)
}
}
+func OP_RRRR(op uint32, r1 uint32, r2 uint32, r3 uint32, r4 uint32) uint32 {
+ return op | (r1&0x1F)<<15 | (r2&0x1F)<<10 | (r3&0x1F)<<5 | (r4 & 0x1F)
+}
+
// r1 -> rk
// r2 -> rj
// r3 -> rd
o2 = OP_RRR(c.oprrr(add), uint32(r), uint32(REGTMP), uint32(REGTMP))
o3 = OP_12IRR(c.opirr(-p.As), uint32(v), uint32(REGTMP), uint32(p.To.Reg))
+ case 39: // fmadd r1, r2, [r3], r4
+ r := int(p.To.Reg)
+ if len(p.RestArgs) > 0 {
+ r = int(p.GetFrom3().Reg)
+ }
+ o1 = OP_RRRR(c.oprrrr(p.As), uint32(p.From.Reg), uint32(p.Reg), uint32(r), uint32(p.To.Reg))
+
case 40: // word
o1 = uint32(c.regoff(&p.From))
return int32(c.vregoff(a))
}
+func (c *ctxt0) oprrrr(a obj.As) uint32 {
+ switch a {
+ case AFMADDF:
+ return 0x81 << 20 // fmadd.s
+ case AFMADDD:
+ return 0x82 << 20 // fmadd.d
+ case AFMSUBF:
+ return 0x85 << 20 // fmsub.s
+ case AFMSUBD:
+ return 0x86 << 20 // fmsub.d
+ case AFNMADDF:
+ return 0x89 << 20 // fnmadd.f
+ case AFNMADDD:
+ return 0x8a << 20 // fnmadd.d
+ case AFNMSUBF:
+ return 0x8d << 20 // fnmsub.s
+ case AFNMSUBD:
+ return 0x8e << 20 // fnmsub.d
+ }
+
+ c.ctxt.Diag("bad rrrr opcode %v", a)
+ return 0
+}
+
func (c *ctxt0) oprrr(a obj.As) uint32 {
switch a {
case AADD: