From 8d478e845cf56045fe805b51ddabf74f93f0290a Mon Sep 17 00:00:00 2001 From: Dave Cheney Date: Mon, 31 Aug 2015 10:14:00 +1000 Subject: [PATCH] cmd/internal/obj/arm: remove CASE and BCASE Update #10994 CASE and BCASE were used by 5c in switch statements, cmd/compile does not use them. Change-Id: I7a578c461b52b94690e35460926849b28971b770 Reviewed-on: https://go-review.googlesource.com/14009 Reviewed-by: Brad Fitzpatrick Reviewed-by: Minux Ma Run-TryBot: Minux Ma TryBot-Result: Gobot Gobot --- src/cmd/asm/internal/asm/testdata/arm.out | 39 ++++++++------- src/cmd/asm/internal/asm/testdata/arm.s | 8 --- src/cmd/compile/internal/arm/peep.go | 5 +- src/cmd/internal/obj/arm/a.out.go | 2 - src/cmd/internal/obj/arm/anames.go | 2 - src/cmd/internal/obj/arm/asm5.go | 59 ----------------------- src/cmd/internal/obj/arm/obj5.go | 21 +------- 7 files changed, 22 insertions(+), 114 deletions(-) diff --git a/src/cmd/asm/internal/asm/testdata/arm.out b/src/cmd/asm/internal/asm/testdata/arm.out index 7501db3e5a..ffd520d729 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.out +++ b/src/cmd/asm/internal/asm/testdata/arm.out @@ -37,23 +37,22 @@ 154 00037 (testdata/arm.s:154) STREX.S (R2), R1, R3 160 00038 (testdata/arm.s:160) STREX.S (R2), R1, R1 166 00039 (testdata/arm.s:166) STREX.S (R2), R3, R3 -174 00040 (testdata/arm.s:174) CASE.S R1 -183 00041 (testdata/arm.s:183) WORD $1234 -192 00042 (testdata/arm.s:192) ABSF.S F1, F2 -198 00043 (testdata/arm.s:198) ADDD.S F1, F2 -199 00044 (testdata/arm.s:199) ADDD.S $(0.5), F2 -205 00045 (testdata/arm.s:205) ADDD.S F1, F2, F3 -206 00046 (testdata/arm.s:206) ADDD.S $(0.5), F2, F3 -212 00047 (testdata/arm.s:212) CMPD.S F1, F2 -236 00048 (testdata/arm.s:236) MRC $8301712627 -237 00049 (testdata/arm.s:237) MRC $8300664051 -246 00050 (testdata/arm.s:246) MULL R1, R2, (R3, R4) -258 00051 (testdata/arm.s:258) MULAWT R1, R2, R3, R4 -266 00052 (testdata/arm.s:266) PLD (R1) -267 00053 (testdata/arm.s:267) PLD 4(R1) -276 00054 (testdata/arm.s:276) RET -280 00055 (testdata/arm.s:280) JMP foo(SB) -281 00056 (testdata/arm.s:281) CALL foo(SB) -282 00057 (testdata/arm.s:282) JMP foo(SB) -283 00058 (testdata/arm.s:283) CALL foo(SB) -292 00059 (testdata/arm.s:292) END +175 00040 (testdata/arm.s:175) WORD $1234 +184 00041 (testdata/arm.s:184) ABSF.S F1, F2 +190 00042 (testdata/arm.s:190) ADDD.S F1, F2 +191 00043 (testdata/arm.s:191) ADDD.S $(0.5), F2 +197 00044 (testdata/arm.s:197) ADDD.S F1, F2, F3 +198 00045 (testdata/arm.s:198) ADDD.S $(0.5), F2, F3 +204 00046 (testdata/arm.s:204) CMPD.S F1, F2 +228 00047 (testdata/arm.s:228) MRC $8301712627 +229 00048 (testdata/arm.s:229) MRC $8300664051 +238 00049 (testdata/arm.s:238) MULL R1, R2, (R3, R4) +250 00050 (testdata/arm.s:250) MULAWT R1, R2, R3, R4 +258 00051 (testdata/arm.s:258) PLD (R1) +259 00052 (testdata/arm.s:259) PLD 4(R1) +268 00053 (testdata/arm.s:268) RET +272 00054 (testdata/arm.s:272) JMP foo(SB) +273 00055 (testdata/arm.s:273) CALL foo(SB) +274 00056 (testdata/arm.s:274) JMP foo(SB) +275 00057 (testdata/arm.s:275) CALL foo(SB) +284 00058 (testdata/arm.s:284) END diff --git a/src/cmd/asm/internal/asm/testdata/arm.s b/src/cmd/asm/internal/asm/testdata/arm.s index b8bdfb201a..93557923b0 100644 --- a/src/cmd/asm/internal/asm/testdata/arm.s +++ b/src/cmd/asm/internal/asm/testdata/arm.s @@ -165,14 +165,6 @@ TEXT foo(SB), 0, $0 // } STREX.S (R2), R3 -// CASE -// -// LTYPED cond reg -// { -// outcode($1, $2, &$3, 0, &nullgen); -// } - CASE.S R1 - // // word // diff --git a/src/cmd/compile/internal/arm/peep.go b/src/cmd/compile/internal/arm/peep.go index 66eba417c0..4fba434619 100644 --- a/src/cmd/compile/internal/arm/peep.go +++ b/src/cmd/compile/internal/arm/peep.go @@ -1198,7 +1198,6 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int { arm.ACMPD, arm.ACMP, arm.ACMN, - arm.ACASE, arm.ATST: /* read,, */ if s != nil { @@ -1560,9 +1559,7 @@ func predicable(p *obj.Prog) bool { obj.ADATA, obj.AGLOBL, obj.ATEXT, - arm.AWORD, - arm.ABCASE, - arm.ACASE: + arm.AWORD: return false } diff --git a/src/cmd/internal/obj/arm/a.out.go b/src/cmd/internal/obj/arm/a.out.go index 1cb561d4b2..6c9cfd52d1 100644 --- a/src/cmd/internal/obj/arm/a.out.go +++ b/src/cmd/internal/obj/arm/a.out.go @@ -251,8 +251,6 @@ const ( AMULA AWORD - ABCASE - ACASE AMULL AMULAL diff --git a/src/cmd/internal/obj/arm/anames.go b/src/cmd/internal/obj/arm/anames.go index 1a924f0381..0ef68a6be2 100644 --- a/src/cmd/internal/obj/arm/anames.go +++ b/src/cmd/internal/obj/arm/anames.go @@ -82,8 +82,6 @@ var Anames = []string{ "SWI", "MULA", "WORD", - "BCASE", - "CASE", "MULL", "MULAL", "MULLU", diff --git a/src/cmd/internal/obj/arm/asm5.go b/src/cmd/internal/obj/arm/asm5.go index 610637c42e..12012965b1 100644 --- a/src/cmd/internal/obj/arm/asm5.go +++ b/src/cmd/internal/obj/arm/asm5.go @@ -188,8 +188,6 @@ var optab = []Optab{ Optab{AMOVB, C_REG, C_NONE, C_SHIFT, 61, 4, 0, 0, 0}, Optab{AMOVBS, C_REG, C_NONE, C_SHIFT, 61, 4, 0, 0, 0}, Optab{AMOVBU, C_REG, C_NONE, C_SHIFT, 61, 4, 0, 0, 0}, - Optab{ACASE, C_REG, C_NONE, C_NONE, 62, 4, 0, LPCREL, 8}, - Optab{ABCASE, C_NONE, C_NONE, C_SBRA, 63, 4, 0, LPCREL, 0}, Optab{AMOVH, C_REG, C_NONE, C_HAUTO, 70, 4, REGSP, 0, 0}, Optab{AMOVH, C_REG, C_NONE, C_HOREG, 70, 4, 0, 0, 0}, Optab{AMOVHS, C_REG, C_NONE, C_HAUTO, 70, 4, REGSP, 0, 0}, @@ -274,25 +272,6 @@ var xcmp [C_GOK + 1][C_GOK + 1]uint8 var deferreturn *obj.LSym -/* size of a case statement including jump table */ -func casesz(ctxt *obj.Link, p *obj.Prog) int32 { - var jt int = 0 - var n int32 = 0 - var o *Optab - - for ; p != nil; p = p.Link { - if p.As == ABCASE { - jt = 1 - } else if jt != 0 { - break - } - o = oplook(ctxt, p) - n += int32(o.size) - } - - return n -} - // Note about encoding: Prog.scond holds the condition encoding, // but XOR'ed with C_SCOND_XOR, so that C_SCOND_NONE == 0. // The code that shifts the value << 28 has the responsibility @@ -625,9 +604,6 @@ func span5(ctxt *obj.Link, cursym *obj.LSym) { // must check literal pool here in case p generates many instructions if ctxt.Blitrl != nil { i = m - if p.As == ACASE { - i = int(casesz(ctxt, p)) - } if checkpool(ctxt, op, i) { p = op continue @@ -1442,8 +1418,6 @@ func buildop(ctxt *obj.Link) { ARFE, obj.ATEXT, obj.AUSEFIELD, - ACASE, - ABCASE, obj.ATYPE: break @@ -2035,39 +2009,6 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) { o1 |= 1 << 22 } - case 62: /* case R -> movw R<<2(PC),PC */ - if o.flag&LPCREL != 0 { - o1 = oprrr(ctxt, AADD, int(p.Scond)) | uint32(immrot(1)) | (uint32(p.From.Reg)&15)<<16 | (REGTMP&15)<<12 - o2 = olrr(ctxt, REGTMP&15, REGPC, REGTMP, int(p.Scond)) - o2 |= 2 << 7 - o3 = oprrr(ctxt, AADD, int(p.Scond)) | REGTMP&15 | (REGPC&15)<<16 | (REGPC&15)<<12 - } else { - o1 = olrr(ctxt, int(p.From.Reg)&15, REGPC, REGPC, int(p.Scond)) - o1 |= 2 << 7 - } - - case 63: /* bcase */ - if p.Pcond != nil { - rel := obj.Addrel(ctxt.Cursym) - rel.Off = int32(ctxt.Pc) - rel.Siz = 4 - if p.To.Sym != nil && p.To.Sym.Type != 0 { - rel.Sym = p.To.Sym - rel.Add = p.To.Offset - } else { - rel.Sym = ctxt.Cursym - rel.Add = p.Pcond.Pc - } - - if o.flag&LPCREL != 0 { - rel.Type = obj.R_PCREL - rel.Add += ctxt.Pc - p.Rel.Pc - 16 + int64(rel.Siz) - } else { - rel.Type = obj.R_ADDR - } - o1 = 0 - } - /* reloc ops */ case 64: /* mov/movb/movbu R,addr */ o1 = omvl(ctxt, p, &p.To, REGTMP) diff --git a/src/cmd/internal/obj/arm/obj5.go b/src/cmd/internal/obj/arm/obj5.go index ae1438f103..d9f587b087 100644 --- a/src/cmd/internal/obj/arm/obj5.go +++ b/src/cmd/internal/obj/arm/obj5.go @@ -156,17 +156,6 @@ const ( LEAF = 1 << 2 ) -func linkcase(casep *obj.Prog) { - for p := casep; p != nil; p = p.Link { - if p.As == ABCASE { - for ; p != nil && p.As == ABCASE; p = p.Link { - p.Rel = casep - } - break - } - } -} - func preprocess(ctxt *obj.Link, cursym *obj.LSym) { autosize := int32(0) @@ -196,11 +185,6 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { var q *obj.Prog for p := cursym.Text; p != nil; p = p.Link { switch p.As { - case ACASE: - if ctxt.Flag_shared != 0 { - linkcase(p) - } - case obj.ATEXT: p.Mark |= LEAF @@ -230,8 +214,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) { cursym.Text.Mark &^= LEAF fallthrough - case ABCASE, - AB, + case AB, ABEQ, ABNE, ABCS, @@ -914,7 +897,7 @@ loop: if p.Pcond != nil { if a != ABL && a != ABX && p.Link != nil { q = obj.Brchain(ctxt, p.Link) - if a != obj.ATEXT && a != ABCASE { + if a != obj.ATEXT { if q != nil && (q.Mark&FOLL != 0) { p.As = int16(relinv(a)) p.Link = p.Pcond -- 2.48.1