github.com/tencent/goom@v1.0.1/internal/arch/arm64asm/gnu.go (about)

     1  // Copyright 2017 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package arm64asm
     6  
     7  import (
     8  	"strings"
     9  )
    10  
    11  // GNUSyntax returns the GNU assembler syntax for the instruction, as defined by GNU binutils.
    12  // This form typically matches the syntax defined in the ARM Reference Manual.
    13  func GNUSyntax(inst Inst) string {
    14  	switch inst.Op {
    15  	case RET:
    16  		if r, ok := inst.Args[0].(Reg); ok && r == X30 {
    17  			return "ret"
    18  		}
    19  	case B:
    20  		if _, ok := inst.Args[0].(Cond); ok {
    21  			return strings.ToLower("b." + inst.Args[0].String() + " " + inst.Args[1].String())
    22  		}
    23  	case SYSL:
    24  		result := strings.ToLower(inst.String())
    25  		return strings.Replace(result, "c", "C", -1)
    26  	case DCPS1, DCPS2, DCPS3, CLREX:
    27  		return strings.ToLower(strings.TrimSpace(inst.String()))
    28  	case ISB:
    29  		if strings.Contains(inst.String(), "SY") {
    30  			result := strings.TrimSuffix(inst.String(), " SY")
    31  			return strings.ToLower(result)
    32  		}
    33  	}
    34  	return strings.ToLower(inst.String())
    35  }