// generic simplifications
(ADD x (NEG y)) => (SUB x y)
+(SUB x (NEG y)) => (ADD x y)
(SUB x x) => (MOVDconst [0])
(AND x x) => x
(OR x x) => x
(XOR x (MVN y)) => (EON x y)
(OR x (MVN y)) => (ORN x y)
(MVN (XOR x y)) => (EON x y)
+(NEG (SUB x y)) => (SUB y x)
(NEG (NEG x)) => x
(CSEL [cc] (MOVDconst [-1]) (MOVDconst [0]) flag) => (CSETM [cc] flag)
}
func SubFromConstNeg(a int) int {
+ // arm64: "ADD\t\\$40"
// loong64: "ADDV[U]\t\\$40"
// mips: "ADD[U]\t\\$40"
// mips64: "ADDV[U]\t\\$40"
}
func SubSubFromConst(a int) int {
+ // arm64: "ADD\t\\$20"
// loong64: "ADDV[U]\t\\$20"
// mips: "ADD[U]\t\\$20"
// mips64: "ADDV[U]\t\\$20"
}
func NegSubFromConst(a int) int {
+ // arm64: "SUB\t\\$20"
// loong64: "ADDV[U]\t\\$-20"
// mips: "ADD[U]\t\\$-20"
// mips64: "ADDV[U]\t\\$-20"
}
func NegAddFromConstNeg(a int) int {
+ // arm64: "SUB\t\\$40","NEG"
// loong64: "ADDV[U]\t\\$-40","SUBV"
// mips: "ADD[U]\t\\$-40","SUB"
// mips64: "ADDV[U]\t\\$-40","SUBV"
func SubSubNegSimplify(a, b int) int {
// amd64:"NEGQ"
+ // arm64:"NEG"
// loong64:"SUBV"
// mips:"SUB"
// mips64:"SUBV"
func SubAddSimplify(a, b int) int {
// amd64:-"SUBQ",-"ADDQ"
+ // arm64:-"SUB",-"ADD"
// loong64:-"SUBV",-"ADDV"
// mips:-"SUB",-"ADD"
// mips64:-"SUBV",-"ADDV"
func SubAddSimplify2(a, b, c int) (int, int, int, int, int, int) {
// amd64:-"ADDQ"
+ // arm64:-"ADD"
// mips:"SUB",-"ADD"
// mips64:"SUBV",-"ADDV"
// loong64:"SUBV",-"ADDV"
// amd64:-"ADDQ"
r3 := (b + a) - (c + a)
// amd64:-"SUBQ"
+ // arm64:-"SUB"
// mips:"ADD",-"SUB"
// mips64:"ADDV",-"SUBV"
// loong64:"ADDV",-"SUBV"
func SubAddNegSimplify(a, b int) int {
// amd64:"NEGQ",-"ADDQ",-"SUBQ"
+ // arm64:"NEG",-"ADD",-"SUB"
// loong64:"SUBV",-"ADDV"
// mips:"SUB",-"ADD"
// mips64:"SUBV",-"ADDV"
func AddAddSubSimplify(a, b, c int) int {
// amd64:-"SUBQ"
+ // arm64:"ADD",-"SUB"
// loong64:"ADDV",-"SUBV"
// mips:"ADD",-"SUB"
// mips64:"ADDV",-"SUBV"