@@ -226,70 +226,52 @@ func rewriteMOV(ctxt *obj.Link, newprog obj.ProgAlloc, p *obj.Prog) {
226
226
panic (fmt .Sprintf ("%+v is not a MOV pseudo-instruction" , p .As ))
227
227
}
228
228
229
- switch p .From .Type {
230
- case obj .TYPE_MEM :
231
- switch p .From .Name {
232
- case obj .NAME_AUTO , obj .NAME_PARAM , obj .NAME_NONE :
233
- if p .To .Type != obj .TYPE_REG {
234
- ctxt .Diag ("unsupported load for %v" , p )
235
- }
229
+ switch {
230
+ case p .From .Type == obj .TYPE_REG && p .To .Type == obj .TYPE_REG :
236
231
232
+ case p .From .Type == obj .TYPE_MEM && p .To .Type == obj .TYPE_REG :
233
+ switch p .From .Name {
234
+ case obj .NAME_AUTO , obj .NAME_NONE , obj .NAME_PARAM :
237
235
case obj .NAME_EXTERN , obj .NAME_STATIC :
238
236
p .Mark |= NEED_PCREL_ITYPE_RELOC
239
-
240
237
default :
241
238
ctxt .Diag ("unsupported name %d for %v" , p .From .Name , p )
242
239
}
243
240
244
- case obj .TYPE_REG :
245
- switch p .To .Type {
246
- case obj .TYPE_REG :
247
- switch p .As {
248
- case AMOV , AMOVB , AMOVH , AMOVW , AMOVBU , AMOVHU , AMOVWU , AMOVF , AMOVD :
249
- default :
250
- ctxt .Diag ("unsupported register-register move at %v" , p )
251
- }
252
-
253
- case obj .TYPE_MEM :
254
- switch p .As {
255
- case AMOVBU , AMOVHU , AMOVWU :
256
- ctxt .Diag ("unsupported unsigned store at %v" , p )
257
- return
258
- }
259
- switch p .To .Name {
260
- case obj .NAME_AUTO , obj .NAME_PARAM , obj .NAME_NONE :
261
-
262
- case obj .NAME_EXTERN , obj .NAME_STATIC :
263
- p .Mark |= NEED_PCREL_STYPE_RELOC
264
-
265
- default :
266
- ctxt .Diag ("unsupported name %d for %v" , p .From .Name , p )
267
- }
268
-
241
+ case p .From .Type == obj .TYPE_REG && p .To .Type == obj .TYPE_MEM :
242
+ switch p .As {
243
+ case AMOVBU , AMOVHU , AMOVWU :
244
+ ctxt .Diag ("unsupported unsigned store at %v" , p )
245
+ }
246
+ switch p .To .Name {
247
+ case obj .NAME_AUTO , obj .NAME_NONE , obj .NAME_PARAM :
248
+ case obj .NAME_EXTERN , obj .NAME_STATIC :
249
+ p .Mark |= NEED_PCREL_STYPE_RELOC
269
250
default :
270
- ctxt .Diag ("unsupported MOV at %v" , p )
251
+ ctxt .Diag ("unsupported name %d for %v" , p . From . Name , p )
271
252
}
272
253
273
- case obj .TYPE_CONST :
254
+ case p . From . Type == obj .TYPE_CONST :
274
255
if p .As != AMOV {
275
256
ctxt .Diag ("%v: unsupported constant load" , p )
276
257
}
277
258
if p .To .Type != obj .TYPE_REG {
278
259
ctxt .Diag ("%v: constant load must target register" , p )
279
260
}
280
261
281
- case obj .TYPE_ADDR :
282
- if p .To .Type != obj .TYPE_REG || p .As != AMOV {
283
- ctxt .Diag ("unsupported addr MOV at %v" , p )
262
+ case p .From .Type == obj .TYPE_ADDR :
263
+ if p .As != AMOV {
264
+ ctxt .Diag ("%v: unsupported address load" , p )
265
+ }
266
+ if p .To .Type != obj .TYPE_REG {
267
+ ctxt .Diag ("%v: address load must target register" , p )
284
268
}
285
269
switch p .From .Name {
286
- case obj .NAME_AUTO , obj .NAME_PARAM , obj .NAME_NONE :
287
-
270
+ case obj .NAME_AUTO , obj .NAME_NONE , obj .NAME_PARAM :
288
271
case obj .NAME_EXTERN , obj .NAME_STATIC :
289
272
p .Mark |= NEED_PCREL_ITYPE_RELOC
290
-
291
273
default :
292
- ctxt .Diag ("bad addr MOV from name %v at %v" , p .From .Name , p )
274
+ ctxt .Diag ("unsupported name %d for %v" , p .From .Name , p )
293
275
}
294
276
295
277
default :
0 commit comments