github.com/FenixAra/go@v0.0.0-20170127160404-96ea0918e670/src/cmd/asm/internal/asm/testdata/arm64.s (about)

     1  // Copyright 2015 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  // This input was created by taking the instruction productions in
     6  // the old assembler's (7a's) grammar and hand-writing complete
     7  // instructions for each rule, to guarantee we cover the same space.
     8  
     9  TEXT	foo(SB), 7, $-8
    10  
    11  //
    12  // ADD
    13  //
    14  //	LTYPE1 imsr ',' spreg ',' reg
    15  //	{
    16  //		outcode($1, &$2, $4, &$6);
    17  //	}
    18  // imsr comes from the old 7a, we only support immediates and registers
    19  // at the moment, no shifted registers.
    20  	ADDW	$1, R2, R3
    21  	ADDW	R1, R2, R3
    22  	ADDW	R1, ZR, R3
    23  	ADD	$1, R2, R3
    24  	ADD	R1, R2, R3
    25  	ADD	R1, ZR, R3
    26  	ADD	$1, R2, R3
    27  
    28  //	LTYPE1 imsr ',' spreg ','
    29  //	{
    30  //		outcode($1, &$2, $4, &nullgen);
    31  //	}
    32  //	LTYPE1 imsr ',' reg
    33  //	{
    34  //		outcode($1, &$2, NREG, &$4);
    35  //	}
    36  	ADDW	$1, R2
    37  	ADDW	R1, R2
    38  	ADD	$1, R2
    39  	ADD	R1, R2
    40  
    41  //
    42  // CLS
    43  //
    44  //	LTYPE2 imsr ',' reg
    45  //	{
    46  //		outcode($1, &$2, NREG, &$4);
    47  //	}
    48  	CLSW	R1, R2
    49  	CLS	R1, R2
    50  
    51  //
    52  // MOV
    53  //
    54  //	LTYPE3 addr ',' addr
    55  //	{
    56  //		outcode($1, &$2, NREG, &$4);
    57  //	}
    58  	MOVW	R1, R2
    59  	MOVW	ZR, R1
    60  	MOVW	R1, ZR
    61  	MOVW	$1, ZR
    62  	MOVW	$1, R1
    63  	MOVW	ZR, (R1)
    64  	MOVD	R1, R2
    65  	MOVD	ZR, R1
    66  	MOVD	$1, ZR
    67  	MOVD	$1, R1
    68  	MOVD	ZR, (R1)
    69  
    70  //
    71  // MOVK
    72  //
    73  //		LMOVK imm ',' reg
    74  //	{
    75  //		outcode($1, &$2, NREG, &$4);
    76  //	}
    77  	MOVK	$1, R1
    78  
    79  //
    80  // B/BL
    81  //
    82  //		LTYPE4 comma rel
    83  //	{
    84  //		outcode($1, &nullgen, NREG, &$3);
    85  //	}
    86  	BL	1(PC) // CALL 1(PC)
    87  
    88  //		LTYPE4 comma nireg
    89  //	{
    90  //		outcode($1, &nullgen, NREG, &$3);
    91  //	}
    92  	BL	(R2) // CALL (R2)
    93  	BL	foo(SB) // CALL foo(SB)
    94  	BL	bar<>(SB) // CALL bar<>(SB)
    95  //
    96  // BEQ
    97  //
    98  //		LTYPE5 comma rel
    99  //	{
   100  //		outcode($1, &nullgen, NREG, &$3);
   101  //	}
   102  	BEQ	1(PC)
   103  //
   104  // SVC
   105  //
   106  //		LTYPE6
   107  //	{
   108  //		outcode($1, &nullgen, NREG, &nullgen);
   109  //	}
   110  	SVC
   111  
   112  //
   113  // CMP
   114  //
   115  //		LTYPE7 imsr ',' spreg comma
   116  //	{
   117  //		outcode($1, &$2, $4, &nullgen);
   118  //	}
   119  	CMP	$3, R2
   120  	CMP	R1, R2
   121  
   122  //
   123  // CBZ
   124  //
   125  //		LTYPE8 reg ',' rel
   126  //	{
   127  //		outcode($1, &$2, NREG, &$4);
   128  //	}
   129  again:
   130  	CBZ	R1, again // CBZ R1
   131  
   132  //
   133  // CSET
   134  //
   135  //		LTYPER cond ',' reg
   136  //	{
   137  //		outcode($1, &$2, NREG, &$4);
   138  //	}
   139  	CSET	GT, R1
   140  //
   141  // CSEL/CSINC/CSNEG/CSINV
   142  //
   143  //		LTYPES cond ',' reg ',' reg ',' reg
   144  //	{
   145  //		outgcode($1, &$2, $6.reg, &$4, &$8);
   146  //	}
   147  	CSEL	LT, R1, R2, ZR
   148  	CSINC	GT, R1, ZR, R3
   149  	CSNEG	MI, R1, R2, R3
   150  	CSINV	CS, R1, R2, R3 // CSINV HS, R1, R2, R3
   151  
   152  //		LTYPES cond ',' reg ',' reg
   153  //	{
   154  //		outcode($1, &$2, $4.reg, &$6);
   155  //	}
   156  	CSEL	LT, R1, R2
   157  //
   158  // CCMN
   159  //
   160  //		LTYPEU cond ',' imsr ',' reg ',' imm comma
   161  //	{
   162  //		outgcode($1, &$2, $6.reg, &$4, &$8);
   163  //	}
   164  	CCMN	MI, ZR, R1, $4
   165  
   166  //
   167  // FADDD
   168  //
   169  //		LTYPEK frcon ',' freg
   170  //	{
   171  //		outcode($1, &$2, NREG, &$4);
   172  //	}
   173  	FADDD	$0.5, F1 // FADDD $(0.5), F1
   174  	FADDD	F1, F2
   175  
   176  //		LTYPEK frcon ',' freg ',' freg
   177  //	{
   178  //		outcode($1, &$2, $4.reg, &$6);
   179  //	}
   180  	FADDD	$0.7, F1, F2 // FADDD	$(0.69999999999999996), F1, F2
   181  	FADDD	F1, F2, F3
   182  
   183  //
   184  // FCMP
   185  //
   186  //		LTYPEL frcon ',' freg comma
   187  //	{
   188  //		outcode($1, &$2, $4.reg, &nullgen);
   189  //	}
   190  //	FCMP	$0.2, F1
   191  //	FCMP	F1, F2
   192  
   193  //
   194  // FCCMP
   195  //
   196  //		LTYPEF cond ',' freg ',' freg ',' imm comma
   197  //	{
   198  //		outgcode($1, &$2, $6.reg, &$4, &$8);
   199  //	}
   200  //	FCCMP	LT, F1, F2, $1
   201  
   202  //
   203  // FMULA
   204  //
   205  //		LTYPE9 freg ',' freg ',' freg ',' freg comma
   206  //	{
   207  //		outgcode($1, &$2, $4.reg, &$6, &$8);
   208  //	}
   209  //	FMULA	F1, F2, F3, F4
   210  
   211  //
   212  // FCSEL
   213  //
   214  //		LFCSEL cond ',' freg ',' freg ',' freg
   215  //	{
   216  //		outgcode($1, &$2, $6.reg, &$4, &$8);
   217  //	}
   218  //
   219  // MADD Rn,Rm,Ra,Rd
   220  //
   221  //		LTYPEM reg ',' reg ',' sreg ',' reg
   222  //	{
   223  //		outgcode($1, &$2, $6, &$4, &$8);
   224  //	}
   225  //	MADD	R1, R2, R3, R4
   226  
   227  // DMB, HINT
   228  //
   229  //		LDMB imm
   230  //	{
   231  //		outcode($1, &$2, NREG, &nullgen);
   232  //	}
   233  	DMB	$1
   234  
   235  //
   236  // STXR
   237  //
   238  //		LSTXR reg ',' addr ',' reg
   239  //	{
   240  //		outcode($1, &$2, &$4, &$6);
   241  //	}
   242  	LDAXRW	(R0), R2
   243  	STLXRW	R1, (R0), R3
   244  
   245  // RET
   246  //
   247  //		LTYPEA comma
   248  //	{
   249  //		outcode($1, &nullgen, NREG, &nullgen);
   250  //	}
   251  	BEQ	2(PC)
   252  	RET
   253  
   254  // More B/BL cases, and canonical names JMP, CALL.
   255  
   256  	BEQ	2(PC)
   257  	B	foo(SB) // JMP foo(SB)
   258  	BL	foo(SB) // CALL foo(SB)
   259  	BEQ	2(PC)
   260  	JMP	foo(SB)
   261  	CALL	foo(SB)
   262  
   263  // END
   264  //
   265  //	LTYPEE comma
   266  //	{
   267  //		outcode($1, &nullgen, NREG, &nullgen);
   268  //	}
   269  	END