mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
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>
This commit is contained in:
parent
a088f1b76c
commit
8d478e845c
7 changed files with 22 additions and 114 deletions
39
src/cmd/asm/internal/asm/testdata/arm.out
vendored
39
src/cmd/asm/internal/asm/testdata/arm.out
vendored
|
|
@ -37,23 +37,22 @@
|
||||||
154 00037 (testdata/arm.s:154) STREX.S (R2), R1, R3
|
154 00037 (testdata/arm.s:154) STREX.S (R2), R1, R3
|
||||||
160 00038 (testdata/arm.s:160) STREX.S (R2), R1, R1
|
160 00038 (testdata/arm.s:160) STREX.S (R2), R1, R1
|
||||||
166 00039 (testdata/arm.s:166) STREX.S (R2), R3, R3
|
166 00039 (testdata/arm.s:166) STREX.S (R2), R3, R3
|
||||||
174 00040 (testdata/arm.s:174) CASE.S R1
|
175 00040 (testdata/arm.s:175) WORD $1234
|
||||||
183 00041 (testdata/arm.s:183) WORD $1234
|
184 00041 (testdata/arm.s:184) ABSF.S F1, F2
|
||||||
192 00042 (testdata/arm.s:192) ABSF.S F1, F2
|
190 00042 (testdata/arm.s:190) ADDD.S F1, F2
|
||||||
198 00043 (testdata/arm.s:198) ADDD.S F1, F2
|
191 00043 (testdata/arm.s:191) ADDD.S $(0.5), F2
|
||||||
199 00044 (testdata/arm.s:199) ADDD.S $(0.5), F2
|
197 00044 (testdata/arm.s:197) ADDD.S F1, F2, F3
|
||||||
205 00045 (testdata/arm.s:205) ADDD.S F1, F2, F3
|
198 00045 (testdata/arm.s:198) ADDD.S $(0.5), F2, F3
|
||||||
206 00046 (testdata/arm.s:206) ADDD.S $(0.5), F2, F3
|
204 00046 (testdata/arm.s:204) CMPD.S F1, F2
|
||||||
212 00047 (testdata/arm.s:212) CMPD.S F1, F2
|
228 00047 (testdata/arm.s:228) MRC $8301712627
|
||||||
236 00048 (testdata/arm.s:236) MRC $8301712627
|
229 00048 (testdata/arm.s:229) MRC $8300664051
|
||||||
237 00049 (testdata/arm.s:237) MRC $8300664051
|
238 00049 (testdata/arm.s:238) MULL R1, R2, (R3, R4)
|
||||||
246 00050 (testdata/arm.s:246) MULL R1, R2, (R3, R4)
|
250 00050 (testdata/arm.s:250) MULAWT R1, R2, R3, R4
|
||||||
258 00051 (testdata/arm.s:258) MULAWT R1, R2, R3, R4
|
258 00051 (testdata/arm.s:258) PLD (R1)
|
||||||
266 00052 (testdata/arm.s:266) PLD (R1)
|
259 00052 (testdata/arm.s:259) PLD 4(R1)
|
||||||
267 00053 (testdata/arm.s:267) PLD 4(R1)
|
268 00053 (testdata/arm.s:268) RET
|
||||||
276 00054 (testdata/arm.s:276) RET
|
272 00054 (testdata/arm.s:272) JMP foo(SB)
|
||||||
280 00055 (testdata/arm.s:280) JMP foo(SB)
|
273 00055 (testdata/arm.s:273) CALL foo(SB)
|
||||||
281 00056 (testdata/arm.s:281) CALL foo(SB)
|
274 00056 (testdata/arm.s:274) JMP foo(SB)
|
||||||
282 00057 (testdata/arm.s:282) JMP foo(SB)
|
275 00057 (testdata/arm.s:275) CALL foo(SB)
|
||||||
283 00058 (testdata/arm.s:283) CALL foo(SB)
|
284 00058 (testdata/arm.s:284) END
|
||||||
292 00059 (testdata/arm.s:292) END
|
|
||||||
|
|
|
||||||
8
src/cmd/asm/internal/asm/testdata/arm.s
vendored
8
src/cmd/asm/internal/asm/testdata/arm.s
vendored
|
|
@ -165,14 +165,6 @@ TEXT foo(SB), 0, $0
|
||||||
// }
|
// }
|
||||||
STREX.S (R2), R3
|
STREX.S (R2), R3
|
||||||
|
|
||||||
// CASE
|
|
||||||
//
|
|
||||||
// LTYPED cond reg
|
|
||||||
// {
|
|
||||||
// outcode($1, $2, &$3, 0, &nullgen);
|
|
||||||
// }
|
|
||||||
CASE.S R1
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// word
|
// word
|
||||||
//
|
//
|
||||||
|
|
|
||||||
|
|
@ -1198,7 +1198,6 @@ func copyu(p *obj.Prog, v *obj.Addr, s *obj.Addr) int {
|
||||||
arm.ACMPD,
|
arm.ACMPD,
|
||||||
arm.ACMP,
|
arm.ACMP,
|
||||||
arm.ACMN,
|
arm.ACMN,
|
||||||
arm.ACASE,
|
|
||||||
arm.ATST:
|
arm.ATST:
|
||||||
/* read,, */
|
/* read,, */
|
||||||
if s != nil {
|
if s != nil {
|
||||||
|
|
@ -1560,9 +1559,7 @@ func predicable(p *obj.Prog) bool {
|
||||||
obj.ADATA,
|
obj.ADATA,
|
||||||
obj.AGLOBL,
|
obj.AGLOBL,
|
||||||
obj.ATEXT,
|
obj.ATEXT,
|
||||||
arm.AWORD,
|
arm.AWORD:
|
||||||
arm.ABCASE,
|
|
||||||
arm.ACASE:
|
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -251,8 +251,6 @@ const (
|
||||||
AMULA
|
AMULA
|
||||||
|
|
||||||
AWORD
|
AWORD
|
||||||
ABCASE
|
|
||||||
ACASE
|
|
||||||
|
|
||||||
AMULL
|
AMULL
|
||||||
AMULAL
|
AMULAL
|
||||||
|
|
|
||||||
|
|
@ -82,8 +82,6 @@ var Anames = []string{
|
||||||
"SWI",
|
"SWI",
|
||||||
"MULA",
|
"MULA",
|
||||||
"WORD",
|
"WORD",
|
||||||
"BCASE",
|
|
||||||
"CASE",
|
|
||||||
"MULL",
|
"MULL",
|
||||||
"MULAL",
|
"MULAL",
|
||||||
"MULLU",
|
"MULLU",
|
||||||
|
|
|
||||||
|
|
@ -188,8 +188,6 @@ var optab = []Optab{
|
||||||
Optab{AMOVB, C_REG, C_NONE, C_SHIFT, 61, 4, 0, 0, 0},
|
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{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{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_HAUTO, 70, 4, REGSP, 0, 0},
|
||||||
Optab{AMOVH, C_REG, C_NONE, C_HOREG, 70, 4, 0, 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},
|
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
|
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,
|
// Note about encoding: Prog.scond holds the condition encoding,
|
||||||
// but XOR'ed with C_SCOND_XOR, so that C_SCOND_NONE == 0.
|
// but XOR'ed with C_SCOND_XOR, so that C_SCOND_NONE == 0.
|
||||||
// The code that shifts the value << 28 has the responsibility
|
// 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
|
// must check literal pool here in case p generates many instructions
|
||||||
if ctxt.Blitrl != nil {
|
if ctxt.Blitrl != nil {
|
||||||
i = m
|
i = m
|
||||||
if p.As == ACASE {
|
|
||||||
i = int(casesz(ctxt, p))
|
|
||||||
}
|
|
||||||
if checkpool(ctxt, op, i) {
|
if checkpool(ctxt, op, i) {
|
||||||
p = op
|
p = op
|
||||||
continue
|
continue
|
||||||
|
|
@ -1442,8 +1418,6 @@ func buildop(ctxt *obj.Link) {
|
||||||
ARFE,
|
ARFE,
|
||||||
obj.ATEXT,
|
obj.ATEXT,
|
||||||
obj.AUSEFIELD,
|
obj.AUSEFIELD,
|
||||||
ACASE,
|
|
||||||
ABCASE,
|
|
||||||
obj.ATYPE:
|
obj.ATYPE:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|
@ -2035,39 +2009,6 @@ func asmout(ctxt *obj.Link, p *obj.Prog, o *Optab, out []uint32) {
|
||||||
o1 |= 1 << 22
|
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 */
|
/* reloc ops */
|
||||||
case 64: /* mov/movb/movbu R,addr */
|
case 64: /* mov/movb/movbu R,addr */
|
||||||
o1 = omvl(ctxt, p, &p.To, REGTMP)
|
o1 = omvl(ctxt, p, &p.To, REGTMP)
|
||||||
|
|
|
||||||
|
|
@ -156,17 +156,6 @@ const (
|
||||||
LEAF = 1 << 2
|
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) {
|
func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
|
||||||
autosize := int32(0)
|
autosize := int32(0)
|
||||||
|
|
||||||
|
|
@ -196,11 +185,6 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
|
||||||
var q *obj.Prog
|
var q *obj.Prog
|
||||||
for p := cursym.Text; p != nil; p = p.Link {
|
for p := cursym.Text; p != nil; p = p.Link {
|
||||||
switch p.As {
|
switch p.As {
|
||||||
case ACASE:
|
|
||||||
if ctxt.Flag_shared != 0 {
|
|
||||||
linkcase(p)
|
|
||||||
}
|
|
||||||
|
|
||||||
case obj.ATEXT:
|
case obj.ATEXT:
|
||||||
p.Mark |= LEAF
|
p.Mark |= LEAF
|
||||||
|
|
||||||
|
|
@ -230,8 +214,7 @@ func preprocess(ctxt *obj.Link, cursym *obj.LSym) {
|
||||||
cursym.Text.Mark &^= LEAF
|
cursym.Text.Mark &^= LEAF
|
||||||
fallthrough
|
fallthrough
|
||||||
|
|
||||||
case ABCASE,
|
case AB,
|
||||||
AB,
|
|
||||||
ABEQ,
|
ABEQ,
|
||||||
ABNE,
|
ABNE,
|
||||||
ABCS,
|
ABCS,
|
||||||
|
|
@ -914,7 +897,7 @@ loop:
|
||||||
if p.Pcond != nil {
|
if p.Pcond != nil {
|
||||||
if a != ABL && a != ABX && p.Link != nil {
|
if a != ABL && a != ABX && p.Link != nil {
|
||||||
q = obj.Brchain(ctxt, p.Link)
|
q = obj.Brchain(ctxt, p.Link)
|
||||||
if a != obj.ATEXT && a != ABCASE {
|
if a != obj.ATEXT {
|
||||||
if q != nil && (q.Mark&FOLL != 0) {
|
if q != nil && (q.Mark&FOLL != 0) {
|
||||||
p.As = int16(relinv(a))
|
p.As = int16(relinv(a))
|
||||||
p.Link = p.Pcond
|
p.Link = p.Pcond
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue