1 // Inferno utils/5c/5.out.h 2 // http://code.google.com/p/inferno-os/source/browse/utils/5c/5.out.h 3 // 4 // Copyright 1994-1999 Lucent Technologies Inc. All rights reserved. 5 // Portions Copyright 1995-1997 C H Forsyth (forsyth (a] 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 (a] 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 arm 32 33 import "cmd/internal/obj" 34 35 //go:generate go run ../stringer.go -i $GOFILE -o anames.go -p arm 36 37 const ( 38 NSNAME = 8 39 NSYM = 50 40 NREG = 16 41 ) 42 43 /* -1 disables use of REGARG */ 44 const ( 45 REGARG = -1 46 ) 47 48 const ( 49 REG_R0 = obj.RBaseARM + iota // must be 16-aligned 50 REG_R1 51 REG_R2 52 REG_R3 53 REG_R4 54 REG_R5 55 REG_R6 56 REG_R7 57 REG_R8 58 REG_R9 59 REG_R10 60 REG_R11 61 REG_R12 62 REG_R13 63 REG_R14 64 REG_R15 65 66 REG_F0 // must be 16-aligned 67 REG_F1 68 REG_F2 69 REG_F3 70 REG_F4 71 REG_F5 72 REG_F6 73 REG_F7 74 REG_F8 75 REG_F9 76 REG_F10 77 REG_F11 78 REG_F12 79 REG_F13 80 REG_F14 81 REG_F15 82 83 REG_FPSR // must be 2-aligned 84 REG_FPCR 85 86 REG_CPSR // must be 2-aligned 87 REG_SPSR 88 89 MAXREG 90 REGRET = REG_R0 91 /* compiler allocates R1 up as temps */ 92 /* compiler allocates register variables R3 up */ 93 /* compiler allocates external registers R10 down */ 94 REGEXT = REG_R10 95 /* these two registers are declared in runtime.h */ 96 REGG = REGEXT - 0 97 REGM = REGEXT - 1 98 99 REGCTXT = REG_R7 100 REGTMP = REG_R11 101 REGSP = REG_R13 102 REGLINK = REG_R14 103 REGPC = REG_R15 104 105 NFREG = 16 106 /* compiler allocates register variables F0 up */ 107 /* compiler allocates external registers F7 down */ 108 FREGRET = REG_F0 109 FREGEXT = REG_F7 110 FREGTMP = REG_F15 111 ) 112 113 const ( 114 C_NONE = iota 115 C_REG 116 C_REGREG 117 C_REGREG2 118 C_REGLIST 119 C_SHIFT 120 C_FREG 121 C_PSR 122 C_FCR 123 124 C_RCON /* 0xff rotated */ 125 C_NCON /* ~RCON */ 126 C_SCON /* 0xffff */ 127 C_LCON 128 C_LCONADDR 129 C_ZFCON 130 C_SFCON 131 C_LFCON 132 133 C_RACON 134 C_LACON 135 136 C_SBRA 137 C_LBRA 138 139 C_HAUTO /* halfword insn offset (-0xff to 0xff) */ 140 C_FAUTO /* float insn offset (0 to 0x3fc, word aligned) */ 141 C_HFAUTO /* both H and F */ 142 C_SAUTO /* -0xfff to 0xfff */ 143 C_LAUTO 144 145 C_HOREG 146 C_FOREG 147 C_HFOREG 148 C_SOREG 149 C_ROREG 150 C_SROREG /* both nil and R */ 151 C_LOREG 152 153 C_PC 154 C_SP 155 C_HREG 156 157 C_ADDR /* reference to relocatable address */ 158 C_TEXTSIZE 159 160 C_GOK 161 162 C_NCLASS /* must be the last */ 163 ) 164 165 const ( 166 AAND = obj.ABaseARM + obj.A_ARCHSPECIFIC + iota 167 AEOR 168 ASUB 169 ARSB 170 AADD 171 AADC 172 ASBC 173 ARSC 174 ATST 175 ATEQ 176 ACMP 177 ACMN 178 AORR 179 ABIC 180 181 AMVN 182 183 /* 184 * Do not reorder or fragment the conditional branch 185 * opcodes, or the predication code will break 186 */ 187 ABEQ 188 ABNE 189 ABCS 190 ABHS 191 ABCC 192 ABLO 193 ABMI 194 ABPL 195 ABVS 196 ABVC 197 ABHI 198 ABLS 199 ABGE 200 ABLT 201 ABGT 202 ABLE 203 204 AMOVWD 205 AMOVWF 206 AMOVDW 207 AMOVFW 208 AMOVFD 209 AMOVDF 210 AMOVF 211 AMOVD 212 213 ACMPF 214 ACMPD 215 AADDF 216 AADDD 217 ASUBF 218 ASUBD 219 AMULF 220 AMULD 221 ADIVF 222 ADIVD 223 ASQRTF 224 ASQRTD 225 AABSF 226 AABSD 227 228 ASRL 229 ASRA 230 ASLL 231 AMULU 232 ADIVU 233 AMUL 234 ADIV 235 AMOD 236 AMODU 237 238 AMOVB 239 AMOVBS 240 AMOVBU 241 AMOVH 242 AMOVHS 243 AMOVHU 244 AMOVW 245 AMOVM 246 ASWPBU 247 ASWPW 248 249 ARFE 250 ASWI 251 AMULA 252 253 AWORD 254 ABCASE 255 ACASE 256 257 AMULL 258 AMULAL 259 AMULLU 260 AMULALU 261 262 ABX 263 ABXRET 264 ADWORD 265 266 ALDREX 267 ASTREX 268 ALDREXD 269 ASTREXD 270 271 APLD 272 273 ACLZ 274 275 AMULWT 276 AMULWB 277 AMULAWT 278 AMULAWB 279 280 ADATABUNDLE 281 ADATABUNDLEEND 282 283 AMRC // MRC/MCR 284 285 ALAST 286 287 // aliases 288 AB = obj.AJMP 289 ABL = obj.ACALL 290 ) 291 292 /* scond byte */ 293 const ( 294 C_SCOND = (1 << 4) - 1 295 C_SBIT = 1 << 4 296 C_PBIT = 1 << 5 297 C_WBIT = 1 << 6 298 C_FBIT = 1 << 7 /* psr flags-only */ 299 C_UBIT = 1 << 7 /* up bit, unsigned bit */ 300 301 // These constants are the ARM condition codes encodings, 302 // XORed with 14 so that C_SCOND_NONE has value 0, 303 // so that a zeroed Prog.scond means "always execute". 304 C_SCOND_XOR = 14 305 306 C_SCOND_EQ = 0 ^ C_SCOND_XOR 307 C_SCOND_NE = 1 ^ C_SCOND_XOR 308 C_SCOND_HS = 2 ^ C_SCOND_XOR 309 C_SCOND_LO = 3 ^ C_SCOND_XOR 310 C_SCOND_MI = 4 ^ C_SCOND_XOR 311 C_SCOND_PL = 5 ^ C_SCOND_XOR 312 C_SCOND_VS = 6 ^ C_SCOND_XOR 313 C_SCOND_VC = 7 ^ C_SCOND_XOR 314 C_SCOND_HI = 8 ^ C_SCOND_XOR 315 C_SCOND_LS = 9 ^ C_SCOND_XOR 316 C_SCOND_GE = 10 ^ C_SCOND_XOR 317 C_SCOND_LT = 11 ^ C_SCOND_XOR 318 C_SCOND_GT = 12 ^ C_SCOND_XOR 319 C_SCOND_LE = 13 ^ C_SCOND_XOR 320 C_SCOND_NONE = 14 ^ C_SCOND_XOR 321 C_SCOND_NV = 15 ^ C_SCOND_XOR 322 323 /* D_SHIFT type */ 324 SHIFT_LL = 0 << 5 325 SHIFT_LR = 1 << 5 326 SHIFT_AR = 2 << 5 327 SHIFT_RR = 3 << 5 328 ) 329