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 <bradfitz@golang.org>
Reviewed-by: Minux Ma <minux@golang.org>
Run-TryBot: Minux Ma <minux@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/src/cmd/asm/internal/asm/testdata/arm.out b/src/cmd/asm/internal/asm/testdata/arm.out
index 7501db3..ffd520d 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 b8bdfb2..9355792 100644
--- a/src/cmd/asm/internal/asm/testdata/arm.s
+++ b/src/cmd/asm/internal/asm/testdata/arm.s
@@ -165,14 +165,6 @@
 //	}
 	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 66eba41..4fba434 100644
--- a/src/cmd/compile/internal/arm/peep.go
+++ b/src/cmd/compile/internal/arm/peep.go
@@ -1198,7 +1198,6 @@
 		arm.ACMPD,
 		arm.ACMP,
 		arm.ACMN,
-		arm.ACASE,
 		arm.ATST:
 		/* read,, */
 		if s != nil {
@@ -1560,9 +1559,7 @@
 		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 1cb561d..6c9cfd5 100644
--- a/src/cmd/internal/obj/arm/a.out.go
+++ b/src/cmd/internal/obj/arm/a.out.go
@@ -251,8 +251,6 @@
 	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 1a924f0..0ef68a6 100644
--- a/src/cmd/internal/obj/arm/anames.go
+++ b/src/cmd/internal/obj/arm/anames.go
@@ -82,8 +82,6 @@
 	"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 610637c..1201296 100644
--- a/src/cmd/internal/obj/arm/asm5.go
+++ b/src/cmd/internal/obj/arm/asm5.go
@@ -188,8 +188,6 @@
 	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 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 @@
 		// 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 @@
 			ARFE,
 			obj.ATEXT,
 			obj.AUSEFIELD,
-			ACASE,
-			ABCASE,
 			obj.ATYPE:
 			break
 
@@ -2035,39 +2009,6 @@
 			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 ae1438f..d9f587b 100644
--- a/src/cmd/internal/obj/arm/obj5.go
+++ b/src/cmd/internal/obj/arm/obj5.go
@@ -156,17 +156,6 @@
 	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 @@
 	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 @@
 			cursym.Text.Mark &^= LEAF
 			fallthrough
 
-		case ABCASE,
-			AB,
+		case AB,
 			ABEQ,
 			ABNE,
 			ABCS,
@@ -914,7 +897,7 @@
 	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