@@ -297,12 +297,17 @@ func GNUSyntax(inst Inst, pc uint64) string {
297
297
gnuArg (& inst , 0 , inst .Args [0 ], PC ),
298
298
gnuArg (& inst , 2 , inst .Args [2 ], PC ))
299
299
startArg = 4
300
- } else if r == 0 {
300
+ } else {
301
301
str = fmt .Sprintf ("%s %s,%s,%s" , opName ,
302
302
gnuArg (& inst , 0 , inst .Args [0 ], PC ),
303
303
gnuArg (& inst , 1 , inst .Args [1 ], PC ),
304
304
gnuArg (& inst , 2 , inst .Args [2 ], PC ))
305
305
startArg = 4
306
+ if r == 1 {
307
+ // This is an illegal encoding (ra != 0 && r == 1) on ISA 3.1.
308
+ v := uint64 (inst .Enc )<< 32 | uint64 (inst .SuffixEnc )
309
+ return fmt .Sprintf (".quad 0x%x" , v )
310
+ }
306
311
}
307
312
buf .WriteString (str )
308
313
@@ -317,11 +322,16 @@ func GNUSyntax(inst Inst, pc uint64) string {
317
322
str := fmt .Sprintf ("%s %s,%d" , opName , gnuArg (& inst , 0 , inst .Args [0 ], PC ), d )
318
323
buf .WriteString (str )
319
324
startArg = 4
320
- } else if r == 0 {
325
+ } else {
321
326
str := fmt .Sprintf ("%s %s,%d(%s)" , opName ,
322
327
gnuArg (& inst , 0 , inst .Args [0 ], PC ),
323
328
d ,
324
329
gnuArg (& inst , 2 , inst .Args [2 ], PC ))
330
+ if r == 1 {
331
+ // This is an invalid encoding (ra != 0 && r == 1) on ISA 3.1.
332
+ v := uint64 (inst .Enc )<< 32 | uint64 (inst .SuffixEnc )
333
+ return fmt .Sprintf (".quad 0x%x" , v )
334
+ }
325
335
buf .WriteString (str )
326
336
startArg = 4
327
337
}
0 commit comments