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