diff --git a/src/cmd/6c/peep.c b/src/cmd/6c/peep.c index d3a9ee9e0e..c648d8c005 100644 --- a/src/cmd/6c/peep.c +++ b/src/cmd/6c/peep.c @@ -330,20 +330,7 @@ subprop(Reg *r0) case AIMULW: if(p->to.type != D_NONE) break; - - case ADIVB: - case ADIVL: - case ADIVQ: - case ADIVW: - case AIDIVB: - case AIDIVL: - case AIDIVQ: - case AIDIVW: - case AIMULB: - case AMULB: - case AMULL: - case AMULQ: - case AMULW: + goto giveup; case AROLB: case AROLL: @@ -369,6 +356,23 @@ subprop(Reg *r0) case ASHRL: case ASHRQ: case ASHRW: + if(p->from.type == D_CONST) + break; + goto giveup; + + case ADIVB: + case ADIVL: + case ADIVQ: + case ADIVW: + case AIDIVB: + case AIDIVL: + case AIDIVQ: + case AIDIVW: + case AIMULB: + case AMULB: + case AMULL: + case AMULQ: + case AMULW: case AREP: case AREPN: @@ -384,6 +388,7 @@ subprop(Reg *r0) case AMOVSL: case AMOVSQ: case AMOVQL: + giveup: return 0; case AMOVL: diff --git a/src/cmd/6g/peep.c b/src/cmd/6g/peep.c index 9b6278792a..ee58d67fbc 100644 --- a/src/cmd/6g/peep.c +++ b/src/cmd/6g/peep.c @@ -664,6 +664,7 @@ subprop(Reg *r0) case AIMULW: if(p->to.type != D_NONE) break; + goto giveup; case ARCLB: case ARCLL: @@ -699,6 +700,7 @@ subprop(Reg *r0) case ASHRW: if(p->from.type == D_CONST) break; + goto giveup; case ADIVB: case ADIVL: @@ -727,6 +729,7 @@ subprop(Reg *r0) case AMOVSB: case AMOVSL: case AMOVSQ: + giveup: if(debug['P'] && debug['v']) print("\tfound %P; return 0\n", p); return 0;