1;; Unspec defintions. 2;; Copyright (C) 2012-2019 Free Software Foundation, Inc. 3;; Contributed by ARM Ltd. 4 5;; This file is part of GCC. 6 7;; GCC is free software; you can redistribute it and/or modify it 8;; under the terms of the GNU General Public License as published 9;; by the Free Software Foundation; either version 3, or (at your 10;; option) any later version. 11 12;; GCC is distributed in the hope that it will be useful, but WITHOUT 13;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 14;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public 15;; License for more details. 16 17;; You should have received a copy of the GNU General Public License 18;; along with GCC; see the file COPYING3. If not see 19;; <http://www.gnu.org/licenses/>. 20 21;; UNSPEC Usage: 22;; Note: sin and cos are no-longer used. 23;; Unspec enumerators for Neon are defined in neon.md. 24;; Unspec enumerators for iwmmxt2 are defined in iwmmxt2.md 25 26(define_c_enum "unspec" [ 27 UNSPEC_PUSH_MULT ; `push multiple' operation: 28 ; operand 0 is the first register, 29 ; subsequent registers are in parallel (use ...) 30 ; expressions. 31 UNSPEC_PIC_SYM ; A symbol that has been treated properly for pic 32 ; usage, that is, we will add the pic_register 33 ; value to it before trying to dereference it. 34 UNSPEC_PIC_BASE ; Add PC and all but the last operand together, 35 ; The last operand is the number of a PIC_LABEL 36 ; that points at the containing instruction. 37 UNSPEC_PRLG_STK ; A special barrier that prevents frame accesses 38 ; being scheduled before the stack adjustment insn. 39 UNSPEC_REGISTER_USE ; As USE insns are not meaningful after reload, 40 ; this unspec is used to prevent the deletion of 41 ; instructions setting registers for EH handling 42 ; and stack frame generation. Operand 0 is the 43 ; register to "use". 44 UNSPEC_CHECK_ARCH ; Set CCs to indicate 26-bit or 32-bit mode. 45 UNSPEC_WSHUFH ; Used by the intrinsic form of the iWMMXt WSHUFH instruction. 46 UNSPEC_WACC ; Used by the intrinsic form of the iWMMXt WACC instruction. 47 UNSPEC_TMOVMSK ; Used by the intrinsic form of the iWMMXt TMOVMSK instruction. 48 UNSPEC_WSAD ; Used by the intrinsic form of the iWMMXt WSAD instruction. 49 UNSPEC_WSADZ ; Used by the intrinsic form of the iWMMXt WSADZ instruction. 50 UNSPEC_WMACS ; Used by the intrinsic form of the iWMMXt WMACS instruction. 51 UNSPEC_WMACU ; Used by the intrinsic form of the iWMMXt WMACU instruction. 52 UNSPEC_WMACSZ ; Used by the intrinsic form of the iWMMXt WMACSZ instruction. 53 UNSPEC_WMACUZ ; Used by the intrinsic form of the iWMMXt WMACUZ instruction. 54 UNSPEC_CLRDI ; Used by the intrinsic form of the iWMMXt CLRDI instruction. 55 UNSPEC_WALIGNI ; Used by the intrinsic form of the iWMMXt WALIGN instruction. 56 UNSPEC_TLS ; A symbol that has been treated properly for TLS usage. 57 UNSPEC_PIC_LABEL ; A label used for PIC access that does not appear in the 58 ; instruction stream. 59 UNSPEC_PIC_OFFSET ; A symbolic 12-bit OFFSET that has been treated 60 ; correctly for PIC usage. 61 UNSPEC_GOTSYM_OFF ; The offset of the start of the GOT from a 62 ; a given symbolic address. 63 UNSPEC_THUMB1_CASESI ; A Thumb1 compressed dispatch-table call. 64 UNSPEC_RBIT ; rbit operation. 65 UNSPEC_SYMBOL_OFFSET ; The offset of the start of the symbol from 66 ; another symbolic address. 67 UNSPEC_MEMORY_BARRIER ; Represent a memory barrier. 68 UNSPEC_UNALIGNED_LOAD ; Used to represent ldr/ldrh instructions that access 69 ; unaligned locations, on architectures which support 70 ; that. 71 UNSPEC_UNALIGNED_STORE ; Same for str/strh. 72 UNSPEC_PIC_UNIFIED ; Create a common pic addressing form. 73 UNSPEC_LL ; Represent an unpaired load-register-exclusive. 74 UNSPEC_VRINTZ ; Represent a float to integral float rounding 75 ; towards zero. 76 UNSPEC_VRINTP ; Represent a float to integral float rounding 77 ; towards +Inf. 78 UNSPEC_VRINTM ; Represent a float to integral float rounding 79 ; towards -Inf. 80 UNSPEC_VRINTR ; Represent a float to integral float rounding 81 ; FPSCR rounding mode. 82 UNSPEC_VRINTX ; Represent a float to integral float rounding 83 ; FPSCR rounding mode and signal inexactness. 84 UNSPEC_VRINTA ; Represent a float to integral float rounding 85 ; towards nearest, ties away from zero. 86 UNSPEC_PROBE_STACK ; Probe stack memory reference 87 UNSPEC_NONSECURE_MEM ; Represent non-secure memory in ARMv8-M with 88 ; security extension 89 UNSPEC_SP_SET ; Represent the setting of stack protector's canary 90 UNSPEC_SP_TEST ; Represent the testing of stack protector's canary 91 ; against the guard. 92]) 93 94(define_c_enum "unspec" [ 95 UNSPEC_WADDC ; Used by the intrinsic form of the iWMMXt WADDC instruction. 96 UNSPEC_WABS ; Used by the intrinsic form of the iWMMXt WABS instruction. 97 UNSPEC_WQMULWMR ; Used by the intrinsic form of the iWMMXt WQMULWMR instruction. 98 UNSPEC_WQMULMR ; Used by the intrinsic form of the iWMMXt WQMULMR instruction. 99 UNSPEC_WQMULWM ; Used by the intrinsic form of the iWMMXt WQMULWM instruction. 100 UNSPEC_WQMULM ; Used by the intrinsic form of the iWMMXt WQMULM instruction. 101 UNSPEC_WQMIAxyn ; Used by the intrinsic form of the iWMMXt WMIAxyn instruction. 102 UNSPEC_WQMIAxy ; Used by the intrinsic form of the iWMMXt WMIAxy instruction. 103 UNSPEC_TANDC ; Used by the intrinsic form of the iWMMXt TANDC instruction. 104 UNSPEC_TORC ; Used by the intrinsic form of the iWMMXt TORC instruction. 105 UNSPEC_TORVSC ; Used by the intrinsic form of the iWMMXt TORVSC instruction. 106 UNSPEC_TEXTRC ; Used by the intrinsic form of the iWMMXt TEXTRC instruction. 107]) 108 109 110;; UNSPEC_VOLATILE Usage: 111 112(define_c_enum "unspecv" [ 113 VUNSPEC_BLOCKAGE ; `blockage' insn to prevent scheduling across an 114 ; insn in the code. 115 VUNSPEC_EPILOGUE ; `epilogue' insn, used to represent any part of the 116 ; instruction epilogue sequence that isn't expanded 117 ; into normal RTL. Used for both normal and sibcall 118 ; epilogues. 119 VUNSPEC_THUMB1_INTERWORK ; `prologue_thumb1_interwork' insn, used to swap 120 ; modes from arm to thumb. 121 VUNSPEC_ALIGN ; `align' insn. Used at the head of a minipool table 122 ; for inlined constants. 123 VUNSPEC_POOL_END ; `end-of-table'. Used to mark the end of a minipool 124 ; table. 125 VUNSPEC_POOL_1 ; `pool-entry(1)'. An entry in the constant pool for 126 ; an 8-bit object. 127 VUNSPEC_POOL_2 ; `pool-entry(2)'. An entry in the constant pool for 128 ; a 16-bit object. 129 VUNSPEC_POOL_4 ; `pool-entry(4)'. An entry in the constant pool for 130 ; a 32-bit object. 131 VUNSPEC_POOL_8 ; `pool-entry(8)'. An entry in the constant pool for 132 ; a 64-bit object. 133 VUNSPEC_POOL_16 ; `pool-entry(16)'. An entry in the constant pool for 134 ; a 128-bit object. 135 VUNSPEC_TMRC ; Used by the iWMMXt TMRC instruction. 136 VUNSPEC_TMCR ; Used by the iWMMXt TMCR instruction. 137 VUNSPEC_ALIGN8 ; 8-byte alignment version of VUNSPEC_ALIGN 138 VUNSPEC_WCMP_EQ ; Used by the iWMMXt WCMPEQ instructions 139 VUNSPEC_WCMP_GTU ; Used by the iWMMXt WCMPGTU instructions 140 VUNSPEC_WCMP_GT ; Used by the iwMMXT WCMPGT instructions 141 VUNSPEC_EH_RETURN ; Use to override the return address for exception 142 ; handling. 143 VUNSPEC_ATOMIC_CAS ; Represent an atomic compare swap. 144 VUNSPEC_ATOMIC_XCHG ; Represent an atomic exchange. 145 VUNSPEC_ATOMIC_OP ; Represent an atomic operation. 146 VUNSPEC_LL ; Represent a load-register-exclusive. 147 VUNSPEC_LDRD_ATOMIC ; Represent an LDRD used as an atomic DImode load. 148 VUNSPEC_SC ; Represent a store-register-exclusive. 149 VUNSPEC_LAX ; Represent a load-register-acquire-exclusive. 150 VUNSPEC_SLX ; Represent a store-register-release-exclusive. 151 VUNSPEC_LDA ; Represent a store-register-acquire. 152 VUNSPEC_STL ; Represent a store-register-release. 153 VUNSPEC_GET_FPSCR ; Represent fetch of FPSCR content. 154 VUNSPEC_SET_FPSCR ; Represent assign of FPSCR content. 155 VUNSPEC_PROBE_STACK_RANGE ; Represent stack range probing. 156 VUNSPEC_CDP ; Represent the coprocessor cdp instruction. 157 VUNSPEC_CDP2 ; Represent the coprocessor cdp2 instruction. 158 VUNSPEC_LDC ; Represent the coprocessor ldc instruction. 159 VUNSPEC_LDC2 ; Represent the coprocessor ldc2 instruction. 160 VUNSPEC_LDCL ; Represent the coprocessor ldcl instruction. 161 VUNSPEC_LDC2L ; Represent the coprocessor ldc2l instruction. 162 VUNSPEC_STC ; Represent the coprocessor stc instruction. 163 VUNSPEC_STC2 ; Represent the coprocessor stc2 instruction. 164 VUNSPEC_STCL ; Represent the coprocessor stcl instruction. 165 VUNSPEC_STC2L ; Represent the coprocessor stc2l instruction. 166 VUNSPEC_MCR ; Represent the coprocessor mcr instruction. 167 VUNSPEC_MCR2 ; Represent the coprocessor mcr2 instruction. 168 VUNSPEC_MRC ; Represent the coprocessor mrc instruction. 169 VUNSPEC_MRC2 ; Represent the coprocessor mrc2 instruction. 170 VUNSPEC_MCRR ; Represent the coprocessor mcrr instruction. 171 VUNSPEC_MCRR2 ; Represent the coprocessor mcrr2 instruction. 172 VUNSPEC_MRRC ; Represent the coprocessor mrrc instruction. 173 VUNSPEC_MRRC2 ; Represent the coprocessor mrrc2 instruction. 174 VUNSPEC_SPECULATION_BARRIER ; Represents an unconditional speculation barrier. 175]) 176 177;; Enumerators for NEON unspecs. 178(define_c_enum "unspec" [ 179 UNSPEC_ASHIFT_SIGNED 180 UNSPEC_ASHIFT_UNSIGNED 181 UNSPEC_CRC32B 182 UNSPEC_CRC32H 183 UNSPEC_CRC32W 184 UNSPEC_CRC32CB 185 UNSPEC_CRC32CH 186 UNSPEC_CRC32CW 187 UNSPEC_AESD 188 UNSPEC_AESE 189 UNSPEC_AESIMC 190 UNSPEC_AESMC 191 UNSPEC_SHA1C 192 UNSPEC_SHA1M 193 UNSPEC_SHA1P 194 UNSPEC_SHA1H 195 UNSPEC_SHA1SU0 196 UNSPEC_SHA1SU1 197 UNSPEC_SHA256H 198 UNSPEC_SHA256H2 199 UNSPEC_SHA256SU0 200 UNSPEC_SHA256SU1 201 UNSPEC_VMULLP64 202 UNSPEC_LOAD_COUNT 203 UNSPEC_VABD_F 204 UNSPEC_VABD_S 205 UNSPEC_VABD_U 206 UNSPEC_VABDL_S 207 UNSPEC_VABDL_U 208 UNSPEC_VADD 209 UNSPEC_VADDHN 210 UNSPEC_VRADDHN 211 UNSPEC_VADDL_S 212 UNSPEC_VADDL_U 213 UNSPEC_VADDW_S 214 UNSPEC_VADDW_U 215 UNSPEC_VBSL 216 UNSPEC_VCAGE 217 UNSPEC_VCAGT 218 UNSPEC_VCALE 219 UNSPEC_VCALT 220 UNSPEC_VCEQ 221 UNSPEC_VCGE 222 UNSPEC_VCGEU 223 UNSPEC_VCGT 224 UNSPEC_VCGTU 225 UNSPEC_VCLS 226 UNSPEC_VCONCAT 227 UNSPEC_VCVT 228 UNSPEC_VCVT_S 229 UNSPEC_VCVT_U 230 UNSPEC_VCVT_S_N 231 UNSPEC_VCVT_U_N 232 UNSPEC_VCVT_HF_S_N 233 UNSPEC_VCVT_HF_U_N 234 UNSPEC_VCVT_SI_S_N 235 UNSPEC_VCVT_SI_U_N 236 UNSPEC_VCVTH_S 237 UNSPEC_VCVTH_U 238 UNSPEC_VCVTA_S 239 UNSPEC_VCVTA_U 240 UNSPEC_VCVTM_S 241 UNSPEC_VCVTM_U 242 UNSPEC_VCVTN_S 243 UNSPEC_VCVTN_U 244 UNSPEC_VCVTP_S 245 UNSPEC_VCVTP_U 246 UNSPEC_VEXT 247 UNSPEC_VHADD_S 248 UNSPEC_VHADD_U 249 UNSPEC_VRHADD_S 250 UNSPEC_VRHADD_U 251 UNSPEC_VHSUB_S 252 UNSPEC_VHSUB_U 253 UNSPEC_VLD1 254 UNSPEC_VLD1_LANE 255 UNSPEC_VLD2 256 UNSPEC_VLD2_DUP 257 UNSPEC_VLD2_LANE 258 UNSPEC_VLD3 259 UNSPEC_VLD3A 260 UNSPEC_VLD3B 261 UNSPEC_VLD3_DUP 262 UNSPEC_VLD3_LANE 263 UNSPEC_VLD4 264 UNSPEC_VLD4A 265 UNSPEC_VLD4B 266 UNSPEC_VLD4_DUP 267 UNSPEC_VLD4_LANE 268 UNSPEC_VMAX 269 UNSPEC_VMAX_U 270 UNSPEC_VMAXNM 271 UNSPEC_VMIN 272 UNSPEC_VMIN_U 273 UNSPEC_VMINNM 274 UNSPEC_VMLA 275 UNSPEC_VMLA_LANE 276 UNSPEC_VMLAL_S 277 UNSPEC_VMLAL_U 278 UNSPEC_VMLAL_S_LANE 279 UNSPEC_VMLAL_U_LANE 280 UNSPEC_VMLS 281 UNSPEC_VMLS_LANE 282 UNSPEC_VMLSL_S 283 UNSPEC_VMLSL_U 284 UNSPEC_VMLSL_S_LANE 285 UNSPEC_VMLSL_U_LANE 286 UNSPEC_VMLSL_LANE 287 UNSPEC_VFMA_LANE 288 UNSPEC_VFMS_LANE 289 UNSPEC_VMOVL_S 290 UNSPEC_VMOVL_U 291 UNSPEC_VMOVN 292 UNSPEC_VMUL 293 UNSPEC_VMULL_P 294 UNSPEC_VMULL_S 295 UNSPEC_VMULL_U 296 UNSPEC_VMUL_LANE 297 UNSPEC_VMULL_S_LANE 298 UNSPEC_VMULL_U_LANE 299 UNSPEC_VPADAL_S 300 UNSPEC_VPADAL_U 301 UNSPEC_VPADD 302 UNSPEC_VPADDL_S 303 UNSPEC_VPADDL_U 304 UNSPEC_VPMAX 305 UNSPEC_VPMAX_U 306 UNSPEC_VPMIN 307 UNSPEC_VPMIN_U 308 UNSPEC_VPSMAX 309 UNSPEC_VPSMIN 310 UNSPEC_VPUMAX 311 UNSPEC_VPUMIN 312 UNSPEC_VQABS 313 UNSPEC_VQADD_S 314 UNSPEC_VQADD_U 315 UNSPEC_VQDMLAL 316 UNSPEC_VQDMLAL_LANE 317 UNSPEC_VQDMLSL 318 UNSPEC_VQDMLSL_LANE 319 UNSPEC_VQDMULH 320 UNSPEC_VQDMULH_LANE 321 UNSPEC_VQRDMULH 322 UNSPEC_VQRDMULH_LANE 323 UNSPEC_VQDMULL 324 UNSPEC_VQDMULL_LANE 325 UNSPEC_VQMOVN_S 326 UNSPEC_VQMOVN_U 327 UNSPEC_VQMOVUN 328 UNSPEC_VQNEG 329 UNSPEC_VQSHL_S 330 UNSPEC_VQSHL_U 331 UNSPEC_VQRSHL_S 332 UNSPEC_VQRSHL_U 333 UNSPEC_VQSHL_S_N 334 UNSPEC_VQSHL_U_N 335 UNSPEC_VQSHLU_N 336 UNSPEC_VQSHRN_S_N 337 UNSPEC_VQSHRN_U_N 338 UNSPEC_VQRSHRN_S_N 339 UNSPEC_VQRSHRN_U_N 340 UNSPEC_VQSHRUN_N 341 UNSPEC_VQRSHRUN_N 342 UNSPEC_VQSUB_S 343 UNSPEC_VQSUB_U 344 UNSPEC_VRECPE 345 UNSPEC_VRECPS 346 UNSPEC_VREV16 347 UNSPEC_VREV32 348 UNSPEC_VREV64 349 UNSPEC_VRSQRTE 350 UNSPEC_VRSQRTS 351 UNSPEC_VSHL_S 352 UNSPEC_VSHL_U 353 UNSPEC_VRSHL_S 354 UNSPEC_VRSHL_U 355 UNSPEC_VSHLL_S_N 356 UNSPEC_VSHLL_U_N 357 UNSPEC_VSHL_N 358 UNSPEC_VSHR_S_N 359 UNSPEC_VSHR_U_N 360 UNSPEC_VRSHR_S_N 361 UNSPEC_VRSHR_U_N 362 UNSPEC_VSHRN_N 363 UNSPEC_VRSHRN_N 364 UNSPEC_VSLI 365 UNSPEC_VSRA_S_N 366 UNSPEC_VSRA_U_N 367 UNSPEC_VRSRA_S_N 368 UNSPEC_VRSRA_U_N 369 UNSPEC_VSRI 370 UNSPEC_VST1 371 UNSPEC_VST1_LANE 372 UNSPEC_VST2 373 UNSPEC_VST2_LANE 374 UNSPEC_VST3 375 UNSPEC_VST3A 376 UNSPEC_VST3B 377 UNSPEC_VST3_LANE 378 UNSPEC_VST4 379 UNSPEC_VST4A 380 UNSPEC_VST4B 381 UNSPEC_VST4_LANE 382 UNSPEC_VSTRUCTDUMMY 383 UNSPEC_VSUB 384 UNSPEC_VSUBHN 385 UNSPEC_VRSUBHN 386 UNSPEC_VSUBL_S 387 UNSPEC_VSUBL_U 388 UNSPEC_VSUBW_S 389 UNSPEC_VSUBW_U 390 UNSPEC_VTBL 391 UNSPEC_VTBX 392 UNSPEC_VTRN1 393 UNSPEC_VTRN2 394 UNSPEC_VTST 395 UNSPEC_VUZP1 396 UNSPEC_VUZP2 397 UNSPEC_VZIP1 398 UNSPEC_VZIP2 399 UNSPEC_MISALIGNED_ACCESS 400 UNSPEC_VCLE 401 UNSPEC_VCLT 402 UNSPEC_NVRINTZ 403 UNSPEC_NVRINTP 404 UNSPEC_NVRINTM 405 UNSPEC_NVRINTX 406 UNSPEC_NVRINTA 407 UNSPEC_NVRINTN 408 UNSPEC_VQRDMLAH 409 UNSPEC_VQRDMLSH 410 UNSPEC_VRND 411 UNSPEC_VRNDA 412 UNSPEC_VRNDI 413 UNSPEC_VRNDM 414 UNSPEC_VRNDN 415 UNSPEC_VRNDP 416 UNSPEC_VRNDX 417 UNSPEC_DOT_S 418 UNSPEC_DOT_U 419 UNSPEC_VFML_LO 420 UNSPEC_VFML_HI 421 UNSPEC_VCADD90 422 UNSPEC_VCADD270 423 UNSPEC_VCMLA 424 UNSPEC_VCMLA90 425 UNSPEC_VCMLA180 426 UNSPEC_VCMLA270 427]) 428