
The ARM64 left the vendor directory in an inconsistent state, go1.13 doesn't care so we didn't catch it but go1.14 does.
36 lines
1.0 KiB
Go
36 lines
1.0 KiB
Go
// Copyright 2017 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package arm64asm
|
|
|
|
import (
|
|
"strings"
|
|
)
|
|
|
|
// GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
|
|
// This form typically matches the syntax defined in the ARM Reference Manual.
|
|
func GNUSyntax(inst Inst) string {
|
|
switch inst.Op {
|
|
case RET:
|
|
if r, ok := inst.Args[0].(Reg); ok && r == X30 {
|
|
return "ret"
|
|
}
|
|
case B:
|
|
if _, ok := inst.Args[0].(Cond); ok {
|
|
return strings.ToLower("b." + inst.Args[0].String() + " " + inst.Args[1].String())
|
|
}
|
|
case SYSL:
|
|
result := strings.ToLower(inst.String())
|
|
return strings.Replace(result, "c", "C", -1)
|
|
case DCPS1, DCPS2, DCPS3, CLREX:
|
|
return strings.ToLower(strings.TrimSpace(inst.String()))
|
|
case ISB:
|
|
if strings.Contains(inst.String(), "SY") {
|
|
result := strings.TrimSuffix(inst.String(), " SY")
|
|
return strings.ToLower(result)
|
|
}
|
|
}
|
|
return strings.ToLower(inst.String())
|
|
}
|