github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/cmd/internal/obj/arm64/asm7.go (about)

     1  // cmd/7l/asm.c, cmd/7l/asmout.c, cmd/7l/optab.c, cmd/7l/span.c, cmd/ld/sub.c, cmd/ld/mod.c, from Vita Nuova.
     2  // https://bitbucket.org/plan9-from-bell-labs/9-cc/src/master/
     3  //
     4  // 	Copyright © 1994-1999 Lucent Technologies Inc. All rights reserved.
     5  // 	Portions Copyright © 1995-1997 C H Forsyth (forsyth@terzarima.net)
     6  // 	Portions Copyright © 1997-1999 Vita Nuova Limited
     7  // 	Portions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com)
     8  // 	Portions Copyright © 2004,2006 Bruce Ellis
     9  // 	Portions Copyright © 2005-2007 C H Forsyth (forsyth@terzarima.net)
    10  // 	Revisions Copyright © 2000-2007 Lucent Technologies Inc. and others
    11  // 	Portions Copyright © 2009 The Go Authors. All rights reserved.
    12  //
    13  // Permission is hereby granted, free of charge, to any person obtaining a copy
    14  // of this software and associated documentation files (the "Software"), to deal
    15  // in the Software without restriction, including without limitation the rights
    16  // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    17  // copies of the Software, and to permit persons to whom the Software is
    18  // furnished to do so, subject to the following conditions:
    19  //
    20  // The above copyright notice and this permission notice shall be included in
    21  // all copies or substantial portions of the Software.
    22  //
    23  // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    24  // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    25  // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
    26  // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    27  // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    28  // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
    29  // THE SOFTWARE.
    30  
    31  package arm64
    32  
    33  import (
    34  	"github.com/shogo82148/std/cmd/internal/obj"
    35  )
    36  
    37  const (
    38  	REGFROM = 1
    39  )
    40  
    41  type Optab struct {
    42  	as    obj.As
    43  	a1    uint8
    44  	a2    uint8
    45  	a3    uint8
    46  	a4    uint8
    47  	a5    uint8
    48  	type_ int8
    49  	size_ int8
    50  	param int16
    51  	flag  int8
    52  	scond uint8
    53  }
    54  
    55  func IsAtomicInstruction(as obj.As) bool
    56  
    57  const (
    58  	S32     = 0 << 31
    59  	S64     = 1 << 31
    60  	Sbit    = 1 << 29
    61  	LSL0_32 = 2 << 13
    62  	LSL0_64 = 3 << 13
    63  )
    64  
    65  func OPDP2(x uint32) uint32
    66  
    67  func OPDP3(sf uint32, op54 uint32, op31 uint32, o0 uint32) uint32
    68  
    69  func OPBcc(x uint32) uint32
    70  
    71  func OPBLR(x uint32) uint32
    72  
    73  func SYSOP(l uint32, op0 uint32, op1 uint32, crn uint32, crm uint32, op2 uint32, rt uint32) uint32
    74  
    75  func SYSHINT(x uint32) uint32
    76  
    77  func LDSTR(sz uint32, v uint32, opc uint32) uint32
    78  
    79  func LD2STR(o uint32) uint32
    80  
    81  func LDSTX(sz uint32, o2 uint32, l uint32, o1 uint32, o0 uint32) uint32
    82  
    83  func FPCMP(m uint32, s uint32, type_ uint32, op uint32, op2 uint32) uint32
    84  
    85  func FPCCMP(m uint32, s uint32, type_ uint32, op uint32) uint32
    86  
    87  func FPOP1S(m uint32, s uint32, type_ uint32, op uint32) uint32
    88  
    89  func FPOP2S(m uint32, s uint32, type_ uint32, op uint32) uint32
    90  
    91  func FPOP3S(m uint32, s uint32, type_ uint32, op uint32, op2 uint32) uint32
    92  
    93  func FPCVTI(sf uint32, s uint32, type_ uint32, rmode uint32, op uint32) uint32
    94  
    95  func ADR(p uint32, o uint32, rt uint32) uint32
    96  
    97  func OPBIT(x uint32) uint32
    98  
    99  func MOVCONST(d int64, s int, rt int) uint32
   100  
   101  const (
   102  	// Optab.flag
   103  	LFROM = 1 << iota
   104  	LTO
   105  	NOTUSETMP
   106  	BRANCH14BITS
   107  	BRANCH19BITS
   108  )
   109  
   110  // Used for padding NOOP instruction
   111  const OP_NOOP = 0xd503201f
   112  
   113  /* form offset parameter to SYS; special register number */
   114  func SYSARG5(op0 int, op1 int, Cn int, Cm int, op2 int) int
   115  
   116  func SYSARG4(op1 int, Cn int, Cm int, op2 int) int