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
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},
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
// 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
ARFE,
obj.ATEXT,
obj.AUSEFIELD,
- ACASE,
- ABCASE,
obj.ATYPE:
break
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)