Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile

* git://git.kernel.org/pub/scm/linux/kernel/git/cmetcalf/linux-tile: (26 commits)
arch/tile: prefer "tilepro" as the name of the 32-bit architecture
compat: include aio_abi.h for aio_context_t
arch/tile: cleanups for tilegx compat mode
arch/tile: allocate PCI IRQs later in boot
arch/tile: support signal "exception-trace" hook
arch/tile: use better definitions of xchg() and cmpxchg()
include/linux/compat.h: coding-style fixes
tile: add an RTC driver for the Tilera hypervisor
arch/tile: finish enabling support for TILE-Gx 64-bit chip
compat: fixes to allow working with tile arch
arch/tile: update defconfig file to something more useful
tile: do_hardwall_trap: do not play with task->sighand
tile: replace mm->cpu_vm_mask with mm_cpumask()
tile,mn10300: add device parameter to dma_cache_sync()
audit: support the "standard" <asm-generic/unistd.h>
arch/tile: clarify flush_buffer()/finv_buffer() function names
arch/tile: kernel-related cleanups from removing static page size
arch/tile: various header improvements for building drivers
arch/tile: disable GX prefetcher during cache flush
arch/tile: tolerate disabling CONFIG_BLK_DEV_INITRD
...

+11830 -2065
+8
Makefile
··· 220 220 SRCARCH := sh 221 221 endif 222 222 223 + # Additional ARCH settings for tile 224 + ifeq ($(ARCH),tilepro) 225 + SRCARCH := tile 226 + endif 227 + ifeq ($(ARCH),tilegx) 228 + SRCARCH := tile 229 + endif 230 + 223 231 # Where to locate arch specific headers 224 232 hdr-arch := $(SRCARCH) 225 233
+8
arch/tile/Kconfig
··· 339 339 340 340 source "drivers/pci/Kconfig" 341 341 342 + config HOTPLUG 343 + bool "Support for hot-pluggable devices" 344 + ---help--- 345 + Say Y here if you want to plug devices into your computer while 346 + the system is running, and be able to use them quickly. In many 347 + cases, the devices can likewise be unplugged at any time too. 348 + One well-known example of this is USB. 349 + 342 350 source "drivers/pci/hotplug/Kconfig" 343 351 344 352 endmenu
-71
arch/tile/configs/tile_defconfig
··· 1 - CONFIG_EXPERIMENTAL=y 2 - # CONFIG_SWAP is not set 3 - CONFIG_SYSVIPC=y 4 - CONFIG_BLK_DEV_INITRD=y 5 - CONFIG_INITRAMFS_SOURCE="usr/contents.txt" 6 - CONFIG_EXPERT=y 7 - # CONFIG_COMPAT_BRK is not set 8 - CONFIG_PROFILING=y 9 - CONFIG_MODULES=y 10 - CONFIG_MODULE_UNLOAD=y 11 - # CONFIG_BLK_DEV_BSG is not set 12 - # CONFIG_IOSCHED_DEADLINE is not set 13 - # CONFIG_IOSCHED_CFQ is not set 14 - CONFIG_NO_HZ=y 15 - CONFIG_HIGH_RES_TIMERS=y 16 - CONFIG_HZ_100=y 17 - CONFIG_NET=y 18 - CONFIG_PACKET=y 19 - CONFIG_UNIX=y 20 - CONFIG_INET=y 21 - CONFIG_IP_MULTICAST=y 22 - # CONFIG_INET_XFRM_MODE_TRANSPORT is not set 23 - # CONFIG_INET_XFRM_MODE_TUNNEL is not set 24 - # CONFIG_INET_LRO is not set 25 - # CONFIG_INET_DIAG is not set 26 - CONFIG_IPV6=y 27 - # CONFIG_WIRELESS is not set 28 - CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 29 - CONFIG_SCSI=y 30 - CONFIG_BLK_DEV_SD=y 31 - CONFIG_SCSI_CONSTANTS=y 32 - CONFIG_SCSI_LOGGING=y 33 - CONFIG_NETDEVICES=y 34 - CONFIG_TUN=y 35 - # CONFIG_NETDEV_10000 is not set 36 - # CONFIG_WLAN is not set 37 - # CONFIG_INPUT_MOUSEDEV is not set 38 - # CONFIG_INPUT_KEYBOARD is not set 39 - # CONFIG_INPUT_MOUSE is not set 40 - # CONFIG_SERIO is not set 41 - # CONFIG_VT is not set 42 - # CONFIG_LEGACY_PTYS is not set 43 - # CONFIG_HW_RANDOM is not set 44 - CONFIG_WATCHDOG=y 45 - CONFIG_WATCHDOG_NOWAYOUT=y 46 - # CONFIG_HID_SUPPORT is not set 47 - CONFIG_RTC_CLASS=y 48 - # CONFIG_RTC_INTF_SYSFS is not set 49 - # CONFIG_RTC_INTF_PROC is not set 50 - CONFIG_EXT2_FS=y 51 - CONFIG_EXT3_FS=y 52 - # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 53 - CONFIG_FUSE_FS=y 54 - CONFIG_MSDOS_FS=y 55 - CONFIG_VFAT_FS=m 56 - CONFIG_TMPFS=y 57 - CONFIG_HUGETLBFS=y 58 - CONFIG_NFS_FS=m 59 - CONFIG_NFS_V3=y 60 - CONFIG_NLS_CODEPAGE_437=y 61 - CONFIG_NLS_ISO8859_1=y 62 - CONFIG_FRAME_WARN=2048 63 - CONFIG_MAGIC_SYSRQ=y 64 - CONFIG_DEBUG_KERNEL=y 65 - CONFIG_DETECT_HUNG_TASK=y 66 - CONFIG_DEBUG_SPINLOCK_SLEEP=y 67 - CONFIG_DEBUG_INFO=y 68 - CONFIG_DEBUG_VM=y 69 - # CONFIG_RCU_CPU_STALL_DETECTOR is not set 70 - CONFIG_DEBUG_STACKOVERFLOW=y 71 - CONFIG_DEBUG_EXTRA_FLAGS="-femit-struct-debug-baseonly"
+1833
arch/tile/configs/tilegx_defconfig
··· 1 + # 2 + # Automatically generated make config: don't edit 3 + # Linux/tilegx 2.6.39-rc5 Kernel Configuration 4 + # Wed May 4 11:08:04 2011 5 + # 6 + CONFIG_TILE=y 7 + CONFIG_MMU=y 8 + CONFIG_GENERIC_CSUM=y 9 + CONFIG_SEMAPHORE_SLEEPERS=y 10 + CONFIG_HAVE_ARCH_ALLOC_REMAP=y 11 + CONFIG_HAVE_SETUP_PER_CPU_AREA=y 12 + CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y 13 + CONFIG_SYS_SUPPORTS_HUGETLBFS=y 14 + CONFIG_GENERIC_TIME=y 15 + CONFIG_GENERIC_CLOCKEVENTS=y 16 + CONFIG_RWSEM_GENERIC_SPINLOCK=y 17 + CONFIG_DEFAULT_MIGRATION_COST=10000000 18 + CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y 19 + CONFIG_ARCH_PHYS_ADDR_T_64BIT=y 20 + CONFIG_ARCH_DMA_ADDR_T_64BIT=y 21 + CONFIG_LOCKDEP_SUPPORT=y 22 + CONFIG_STACKTRACE_SUPPORT=y 23 + CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 24 + CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y 25 + CONFIG_TRACE_IRQFLAGS_SUPPORT=y 26 + CONFIG_STRICT_DEVMEM=y 27 + CONFIG_SMP=y 28 + # CONFIG_DEBUG_COPY_FROM_USER is not set 29 + CONFIG_HVC_TILE=y 30 + CONFIG_TILEGX=y 31 + CONFIG_64BIT=y 32 + CONFIG_ARCH_DEFCONFIG="arch/tile/configs/tilegx_defconfig" 33 + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 34 + CONFIG_CONSTRUCTORS=y 35 + 36 + # 37 + # General setup 38 + # 39 + CONFIG_EXPERIMENTAL=y 40 + CONFIG_INIT_ENV_ARG_LIMIT=32 41 + CONFIG_CROSS_COMPILE="" 42 + CONFIG_LOCALVERSION="" 43 + # CONFIG_LOCALVERSION_AUTO is not set 44 + CONFIG_SWAP=y 45 + CONFIG_SYSVIPC=y 46 + CONFIG_SYSVIPC_SYSCTL=y 47 + CONFIG_POSIX_MQUEUE=y 48 + CONFIG_POSIX_MQUEUE_SYSCTL=y 49 + CONFIG_BSD_PROCESS_ACCT=y 50 + CONFIG_BSD_PROCESS_ACCT_V3=y 51 + # CONFIG_FHANDLE is not set 52 + CONFIG_TASKSTATS=y 53 + CONFIG_TASK_DELAY_ACCT=y 54 + CONFIG_TASK_XACCT=y 55 + CONFIG_TASK_IO_ACCOUNTING=y 56 + CONFIG_AUDIT=y 57 + CONFIG_HAVE_GENERIC_HARDIRQS=y 58 + 59 + # 60 + # IRQ subsystem 61 + # 62 + CONFIG_GENERIC_HARDIRQS=y 63 + CONFIG_GENERIC_IRQ_PROBE=y 64 + CONFIG_GENERIC_IRQ_SHOW=y 65 + CONFIG_GENERIC_PENDING_IRQ=y 66 + 67 + # 68 + # RCU Subsystem 69 + # 70 + CONFIG_TREE_RCU=y 71 + # CONFIG_PREEMPT_RCU is not set 72 + # CONFIG_RCU_TRACE is not set 73 + CONFIG_RCU_FANOUT=64 74 + # CONFIG_RCU_FANOUT_EXACT is not set 75 + # CONFIG_RCU_FAST_NO_HZ is not set 76 + # CONFIG_TREE_RCU_TRACE is not set 77 + # CONFIG_IKCONFIG is not set 78 + CONFIG_LOG_BUF_SHIFT=19 79 + CONFIG_CGROUPS=y 80 + CONFIG_CGROUP_DEBUG=y 81 + CONFIG_CGROUP_NS=y 82 + # CONFIG_CGROUP_FREEZER is not set 83 + CONFIG_CGROUP_DEVICE=y 84 + CONFIG_CPUSETS=y 85 + CONFIG_PROC_PID_CPUSET=y 86 + CONFIG_CGROUP_CPUACCT=y 87 + CONFIG_RESOURCE_COUNTERS=y 88 + CONFIG_CGROUP_MEM_RES_CTLR=y 89 + CONFIG_CGROUP_MEM_RES_CTLR_SWAP=y 90 + CONFIG_CGROUP_MEM_RES_CTLR_SWAP_ENABLED=y 91 + CONFIG_CGROUP_SCHED=y 92 + CONFIG_FAIR_GROUP_SCHED=y 93 + CONFIG_RT_GROUP_SCHED=y 94 + CONFIG_BLK_CGROUP=y 95 + # CONFIG_DEBUG_BLK_CGROUP is not set 96 + CONFIG_NAMESPACES=y 97 + CONFIG_UTS_NS=y 98 + CONFIG_IPC_NS=y 99 + CONFIG_USER_NS=y 100 + CONFIG_PID_NS=y 101 + CONFIG_NET_NS=y 102 + # CONFIG_SCHED_AUTOGROUP is not set 103 + CONFIG_MM_OWNER=y 104 + # CONFIG_SYSFS_DEPRECATED is not set 105 + CONFIG_RELAY=y 106 + CONFIG_BLK_DEV_INITRD=y 107 + CONFIG_INITRAMFS_SOURCE="usr/contents.txt" 108 + CONFIG_INITRAMFS_ROOT_UID=0 109 + CONFIG_INITRAMFS_ROOT_GID=0 110 + CONFIG_RD_GZIP=y 111 + # CONFIG_RD_BZIP2 is not set 112 + # CONFIG_RD_LZMA is not set 113 + # CONFIG_RD_XZ is not set 114 + # CONFIG_RD_LZO is not set 115 + CONFIG_INITRAMFS_COMPRESSION_NONE=y 116 + # CONFIG_INITRAMFS_COMPRESSION_GZIP is not set 117 + CONFIG_CC_OPTIMIZE_FOR_SIZE=y 118 + CONFIG_SYSCTL=y 119 + CONFIG_ANON_INODES=y 120 + CONFIG_EXPERT=y 121 + CONFIG_SYSCTL_SYSCALL=y 122 + CONFIG_KALLSYMS=y 123 + # CONFIG_KALLSYMS_ALL is not set 124 + # CONFIG_KALLSYMS_EXTRA_PASS is not set 125 + CONFIG_HOTPLUG=y 126 + CONFIG_PRINTK=y 127 + CONFIG_BUG=y 128 + CONFIG_ELF_CORE=y 129 + CONFIG_BASE_FULL=y 130 + CONFIG_FUTEX=y 131 + CONFIG_EPOLL=y 132 + CONFIG_SIGNALFD=y 133 + CONFIG_TIMERFD=y 134 + CONFIG_EVENTFD=y 135 + CONFIG_SHMEM=y 136 + CONFIG_AIO=y 137 + CONFIG_EMBEDDED=y 138 + 139 + # 140 + # Kernel Performance Events And Counters 141 + # 142 + CONFIG_VM_EVENT_COUNTERS=y 143 + CONFIG_PCI_QUIRKS=y 144 + CONFIG_SLUB_DEBUG=y 145 + # CONFIG_COMPAT_BRK is not set 146 + # CONFIG_SLAB is not set 147 + CONFIG_SLUB=y 148 + # CONFIG_SLOB is not set 149 + CONFIG_PROFILING=y 150 + CONFIG_USE_GENERIC_SMP_HELPERS=y 151 + 152 + # 153 + # GCOV-based kernel profiling 154 + # 155 + # CONFIG_GCOV_KERNEL is not set 156 + # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 157 + CONFIG_SLABINFO=y 158 + CONFIG_RT_MUTEXES=y 159 + CONFIG_BASE_SMALL=0 160 + CONFIG_MODULES=y 161 + CONFIG_MODULE_FORCE_LOAD=y 162 + CONFIG_MODULE_UNLOAD=y 163 + # CONFIG_MODULE_FORCE_UNLOAD is not set 164 + # CONFIG_MODVERSIONS is not set 165 + # CONFIG_MODULE_SRCVERSION_ALL is not set 166 + CONFIG_STOP_MACHINE=y 167 + CONFIG_BLOCK=y 168 + CONFIG_BLK_DEV_BSG=y 169 + CONFIG_BLK_DEV_INTEGRITY=y 170 + # CONFIG_BLK_DEV_THROTTLING is not set 171 + CONFIG_BLOCK_COMPAT=y 172 + 173 + # 174 + # IO Schedulers 175 + # 176 + CONFIG_IOSCHED_NOOP=y 177 + CONFIG_IOSCHED_DEADLINE=y 178 + CONFIG_IOSCHED_CFQ=y 179 + CONFIG_CFQ_GROUP_IOSCHED=y 180 + # CONFIG_DEFAULT_DEADLINE is not set 181 + CONFIG_DEFAULT_CFQ=y 182 + # CONFIG_DEFAULT_NOOP is not set 183 + CONFIG_DEFAULT_IOSCHED="cfq" 184 + CONFIG_PADATA=y 185 + # CONFIG_INLINE_SPIN_TRYLOCK is not set 186 + # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set 187 + # CONFIG_INLINE_SPIN_LOCK is not set 188 + # CONFIG_INLINE_SPIN_LOCK_BH is not set 189 + # CONFIG_INLINE_SPIN_LOCK_IRQ is not set 190 + # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set 191 + CONFIG_INLINE_SPIN_UNLOCK=y 192 + # CONFIG_INLINE_SPIN_UNLOCK_BH is not set 193 + CONFIG_INLINE_SPIN_UNLOCK_IRQ=y 194 + # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set 195 + # CONFIG_INLINE_READ_TRYLOCK is not set 196 + # CONFIG_INLINE_READ_LOCK is not set 197 + # CONFIG_INLINE_READ_LOCK_BH is not set 198 + # CONFIG_INLINE_READ_LOCK_IRQ is not set 199 + # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set 200 + CONFIG_INLINE_READ_UNLOCK=y 201 + # CONFIG_INLINE_READ_UNLOCK_BH is not set 202 + CONFIG_INLINE_READ_UNLOCK_IRQ=y 203 + # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set 204 + # CONFIG_INLINE_WRITE_TRYLOCK is not set 205 + # CONFIG_INLINE_WRITE_LOCK is not set 206 + # CONFIG_INLINE_WRITE_LOCK_BH is not set 207 + # CONFIG_INLINE_WRITE_LOCK_IRQ is not set 208 + # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set 209 + CONFIG_INLINE_WRITE_UNLOCK=y 210 + # CONFIG_INLINE_WRITE_UNLOCK_BH is not set 211 + CONFIG_INLINE_WRITE_UNLOCK_IRQ=y 212 + # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set 213 + CONFIG_MUTEX_SPIN_ON_OWNER=y 214 + 215 + # 216 + # Tilera-specific configuration 217 + # 218 + CONFIG_NR_CPUS=100 219 + CONFIG_TICK_ONESHOT=y 220 + CONFIG_NO_HZ=y 221 + CONFIG_HIGH_RES_TIMERS=y 222 + CONFIG_GENERIC_CLOCKEVENTS_BUILD=y 223 + CONFIG_HZ_100=y 224 + # CONFIG_HZ_250 is not set 225 + # CONFIG_HZ_300 is not set 226 + # CONFIG_HZ_1000 is not set 227 + CONFIG_HZ=100 228 + CONFIG_SCHED_HRTICK=y 229 + # CONFIG_KEXEC is not set 230 + CONFIG_COMPAT=y 231 + CONFIG_SYSVIPC_COMPAT=y 232 + # CONFIG_HIGHMEM is not set 233 + CONFIG_NUMA=y 234 + CONFIG_NODES_SHIFT=2 235 + CONFIG_PAGE_OFFSET=0xC0000000 236 + CONFIG_SELECT_MEMORY_MODEL=y 237 + CONFIG_DISCONTIGMEM_MANUAL=y 238 + CONFIG_DISCONTIGMEM=y 239 + CONFIG_FLAT_NODE_MEM_MAP=y 240 + CONFIG_NEED_MULTIPLE_NODES=y 241 + CONFIG_PAGEFLAGS_EXTENDED=y 242 + CONFIG_SPLIT_PTLOCK_CPUS=4 243 + # CONFIG_COMPACTION is not set 244 + CONFIG_MIGRATION=y 245 + CONFIG_PHYS_ADDR_T_64BIT=y 246 + CONFIG_ZONE_DMA_FLAG=0 247 + CONFIG_VIRT_TO_BUS=y 248 + # CONFIG_KSM is not set 249 + CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 250 + # CONFIG_CMDLINE_BOOL is not set 251 + CONFIG_VMALLOC_RESERVE=0x1000000 252 + CONFIG_HARDWALL=y 253 + CONFIG_KERNEL_PL=1 254 + 255 + # 256 + # Bus options 257 + # 258 + CONFIG_PCI=y 259 + CONFIG_PCI_DOMAINS=y 260 + # CONFIG_NO_IOMEM is not set 261 + # CONFIG_NO_IOPORT is not set 262 + # CONFIG_ARCH_SUPPORTS_MSI is not set 263 + CONFIG_PCI_DEBUG=y 264 + # CONFIG_PCI_STUB is not set 265 + # CONFIG_PCI_IOV is not set 266 + # CONFIG_HOTPLUG_PCI is not set 267 + 268 + # 269 + # Executable file formats 270 + # 271 + CONFIG_KCORE_ELF=y 272 + CONFIG_BINFMT_ELF=y 273 + CONFIG_COMPAT_BINFMT_ELF=y 274 + # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 275 + # CONFIG_HAVE_AOUT is not set 276 + CONFIG_BINFMT_MISC=y 277 + CONFIG_NET=y 278 + 279 + # 280 + # Networking options 281 + # 282 + CONFIG_PACKET=y 283 + CONFIG_UNIX=y 284 + CONFIG_XFRM=y 285 + CONFIG_XFRM_USER=y 286 + CONFIG_XFRM_SUB_POLICY=y 287 + CONFIG_XFRM_MIGRATE=y 288 + CONFIG_XFRM_STATISTICS=y 289 + CONFIG_XFRM_IPCOMP=m 290 + CONFIG_NET_KEY=m 291 + CONFIG_NET_KEY_MIGRATE=y 292 + CONFIG_INET=y 293 + CONFIG_IP_MULTICAST=y 294 + CONFIG_IP_ADVANCED_ROUTER=y 295 + # CONFIG_IP_FIB_TRIE_STATS is not set 296 + CONFIG_IP_MULTIPLE_TABLES=y 297 + CONFIG_IP_ROUTE_MULTIPATH=y 298 + CONFIG_IP_ROUTE_VERBOSE=y 299 + CONFIG_IP_ROUTE_CLASSID=y 300 + # CONFIG_IP_PNP is not set 301 + CONFIG_NET_IPIP=m 302 + # CONFIG_NET_IPGRE_DEMUX is not set 303 + CONFIG_IP_MROUTE=y 304 + # CONFIG_IP_MROUTE_MULTIPLE_TABLES is not set 305 + CONFIG_IP_PIMSM_V1=y 306 + CONFIG_IP_PIMSM_V2=y 307 + # CONFIG_ARPD is not set 308 + CONFIG_SYN_COOKIES=y 309 + CONFIG_INET_AH=m 310 + CONFIG_INET_ESP=m 311 + CONFIG_INET_IPCOMP=m 312 + CONFIG_INET_XFRM_TUNNEL=m 313 + CONFIG_INET_TUNNEL=m 314 + CONFIG_INET_XFRM_MODE_TRANSPORT=m 315 + CONFIG_INET_XFRM_MODE_TUNNEL=m 316 + CONFIG_INET_XFRM_MODE_BEET=m 317 + CONFIG_INET_LRO=y 318 + CONFIG_INET_DIAG=m 319 + CONFIG_INET_TCP_DIAG=m 320 + CONFIG_TCP_CONG_ADVANCED=y 321 + CONFIG_TCP_CONG_BIC=m 322 + CONFIG_TCP_CONG_CUBIC=y 323 + CONFIG_TCP_CONG_WESTWOOD=m 324 + CONFIG_TCP_CONG_HTCP=m 325 + CONFIG_TCP_CONG_HSTCP=m 326 + CONFIG_TCP_CONG_HYBLA=m 327 + CONFIG_TCP_CONG_VEGAS=m 328 + CONFIG_TCP_CONG_SCALABLE=m 329 + CONFIG_TCP_CONG_LP=m 330 + CONFIG_TCP_CONG_VENO=m 331 + CONFIG_TCP_CONG_YEAH=m 332 + CONFIG_TCP_CONG_ILLINOIS=m 333 + CONFIG_DEFAULT_CUBIC=y 334 + # CONFIG_DEFAULT_RENO is not set 335 + CONFIG_DEFAULT_TCP_CONG="cubic" 336 + CONFIG_TCP_MD5SIG=y 337 + CONFIG_IPV6=y 338 + CONFIG_IPV6_PRIVACY=y 339 + CONFIG_IPV6_ROUTER_PREF=y 340 + CONFIG_IPV6_ROUTE_INFO=y 341 + CONFIG_IPV6_OPTIMISTIC_DAD=y 342 + CONFIG_INET6_AH=m 343 + CONFIG_INET6_ESP=m 344 + CONFIG_INET6_IPCOMP=m 345 + CONFIG_IPV6_MIP6=m 346 + CONFIG_INET6_XFRM_TUNNEL=m 347 + CONFIG_INET6_TUNNEL=m 348 + CONFIG_INET6_XFRM_MODE_TRANSPORT=m 349 + CONFIG_INET6_XFRM_MODE_TUNNEL=m 350 + CONFIG_INET6_XFRM_MODE_BEET=m 351 + CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m 352 + CONFIG_IPV6_SIT=m 353 + # CONFIG_IPV6_SIT_6RD is not set 354 + CONFIG_IPV6_NDISC_NODETYPE=y 355 + CONFIG_IPV6_TUNNEL=m 356 + CONFIG_IPV6_MULTIPLE_TABLES=y 357 + # CONFIG_IPV6_SUBTREES is not set 358 + CONFIG_IPV6_MROUTE=y 359 + # CONFIG_IPV6_MROUTE_MULTIPLE_TABLES is not set 360 + CONFIG_IPV6_PIMSM_V2=y 361 + CONFIG_NETLABEL=y 362 + CONFIG_NETWORK_SECMARK=y 363 + # CONFIG_NETWORK_PHY_TIMESTAMPING is not set 364 + CONFIG_NETFILTER=y 365 + # CONFIG_NETFILTER_DEBUG is not set 366 + CONFIG_NETFILTER_ADVANCED=y 367 + CONFIG_BRIDGE_NETFILTER=y 368 + 369 + # 370 + # Core Netfilter Configuration 371 + # 372 + CONFIG_NETFILTER_NETLINK=m 373 + CONFIG_NETFILTER_NETLINK_QUEUE=m 374 + CONFIG_NETFILTER_NETLINK_LOG=m 375 + CONFIG_NF_CONNTRACK=y 376 + CONFIG_NF_CONNTRACK_MARK=y 377 + CONFIG_NF_CONNTRACK_SECMARK=y 378 + CONFIG_NF_CONNTRACK_ZONES=y 379 + CONFIG_NF_CONNTRACK_EVENTS=y 380 + # CONFIG_NF_CONNTRACK_TIMESTAMP is not set 381 + CONFIG_NF_CT_PROTO_DCCP=m 382 + CONFIG_NF_CT_PROTO_GRE=m 383 + CONFIG_NF_CT_PROTO_SCTP=m 384 + CONFIG_NF_CT_PROTO_UDPLITE=m 385 + CONFIG_NF_CONNTRACK_AMANDA=m 386 + CONFIG_NF_CONNTRACK_FTP=m 387 + CONFIG_NF_CONNTRACK_H323=m 388 + CONFIG_NF_CONNTRACK_IRC=m 389 + CONFIG_NF_CONNTRACK_BROADCAST=m 390 + CONFIG_NF_CONNTRACK_NETBIOS_NS=m 391 + # CONFIG_NF_CONNTRACK_SNMP is not set 392 + CONFIG_NF_CONNTRACK_PPTP=m 393 + CONFIG_NF_CONNTRACK_SANE=m 394 + CONFIG_NF_CONNTRACK_SIP=m 395 + CONFIG_NF_CONNTRACK_TFTP=m 396 + # CONFIG_NF_CT_NETLINK is not set 397 + CONFIG_NETFILTER_TPROXY=m 398 + CONFIG_NETFILTER_XTABLES=y 399 + 400 + # 401 + # Xtables combined modules 402 + # 403 + CONFIG_NETFILTER_XT_MARK=m 404 + CONFIG_NETFILTER_XT_CONNMARK=m 405 + 406 + # 407 + # Xtables targets 408 + # 409 + # CONFIG_NETFILTER_XT_TARGET_AUDIT is not set 410 + # CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set 411 + CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m 412 + CONFIG_NETFILTER_XT_TARGET_CONNMARK=m 413 + CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=m 414 + CONFIG_NETFILTER_XT_TARGET_CT=m 415 + CONFIG_NETFILTER_XT_TARGET_DSCP=m 416 + CONFIG_NETFILTER_XT_TARGET_HL=m 417 + CONFIG_NETFILTER_XT_TARGET_IDLETIMER=m 418 + CONFIG_NETFILTER_XT_TARGET_MARK=m 419 + CONFIG_NETFILTER_XT_TARGET_NFLOG=m 420 + CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m 421 + CONFIG_NETFILTER_XT_TARGET_NOTRACK=m 422 + CONFIG_NETFILTER_XT_TARGET_RATEEST=m 423 + CONFIG_NETFILTER_XT_TARGET_TEE=m 424 + CONFIG_NETFILTER_XT_TARGET_TPROXY=m 425 + CONFIG_NETFILTER_XT_TARGET_TRACE=m 426 + CONFIG_NETFILTER_XT_TARGET_SECMARK=m 427 + CONFIG_NETFILTER_XT_TARGET_TCPMSS=m 428 + CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m 429 + 430 + # 431 + # Xtables matches 432 + # 433 + # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE is not set 434 + CONFIG_NETFILTER_XT_MATCH_CLUSTER=m 435 + CONFIG_NETFILTER_XT_MATCH_COMMENT=m 436 + CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m 437 + CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m 438 + CONFIG_NETFILTER_XT_MATCH_CONNMARK=m 439 + CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y 440 + # CONFIG_NETFILTER_XT_MATCH_CPU is not set 441 + CONFIG_NETFILTER_XT_MATCH_DCCP=m 442 + # CONFIG_NETFILTER_XT_MATCH_DEVGROUP is not set 443 + CONFIG_NETFILTER_XT_MATCH_DSCP=m 444 + CONFIG_NETFILTER_XT_MATCH_ESP=m 445 + CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m 446 + CONFIG_NETFILTER_XT_MATCH_HELPER=m 447 + CONFIG_NETFILTER_XT_MATCH_HL=m 448 + CONFIG_NETFILTER_XT_MATCH_IPRANGE=m 449 + CONFIG_NETFILTER_XT_MATCH_IPVS=m 450 + CONFIG_NETFILTER_XT_MATCH_LENGTH=m 451 + CONFIG_NETFILTER_XT_MATCH_LIMIT=m 452 + CONFIG_NETFILTER_XT_MATCH_MAC=m 453 + CONFIG_NETFILTER_XT_MATCH_MARK=m 454 + CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m 455 + CONFIG_NETFILTER_XT_MATCH_OSF=m 456 + CONFIG_NETFILTER_XT_MATCH_OWNER=m 457 + CONFIG_NETFILTER_XT_MATCH_POLICY=m 458 + CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m 459 + CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m 460 + CONFIG_NETFILTER_XT_MATCH_QUOTA=m 461 + CONFIG_NETFILTER_XT_MATCH_RATEEST=m 462 + CONFIG_NETFILTER_XT_MATCH_REALM=m 463 + CONFIG_NETFILTER_XT_MATCH_RECENT=m 464 + CONFIG_NETFILTER_XT_MATCH_SCTP=m 465 + CONFIG_NETFILTER_XT_MATCH_SOCKET=m 466 + CONFIG_NETFILTER_XT_MATCH_STATE=y 467 + CONFIG_NETFILTER_XT_MATCH_STATISTIC=m 468 + CONFIG_NETFILTER_XT_MATCH_STRING=m 469 + CONFIG_NETFILTER_XT_MATCH_TCPMSS=m 470 + CONFIG_NETFILTER_XT_MATCH_TIME=m 471 + CONFIG_NETFILTER_XT_MATCH_U32=m 472 + # CONFIG_IP_SET is not set 473 + CONFIG_IP_VS=m 474 + CONFIG_IP_VS_IPV6=y 475 + # CONFIG_IP_VS_DEBUG is not set 476 + CONFIG_IP_VS_TAB_BITS=12 477 + 478 + # 479 + # IPVS transport protocol load balancing support 480 + # 481 + CONFIG_IP_VS_PROTO_TCP=y 482 + CONFIG_IP_VS_PROTO_UDP=y 483 + CONFIG_IP_VS_PROTO_AH_ESP=y 484 + CONFIG_IP_VS_PROTO_ESP=y 485 + CONFIG_IP_VS_PROTO_AH=y 486 + CONFIG_IP_VS_PROTO_SCTP=y 487 + 488 + # 489 + # IPVS scheduler 490 + # 491 + CONFIG_IP_VS_RR=m 492 + CONFIG_IP_VS_WRR=m 493 + CONFIG_IP_VS_LC=m 494 + CONFIG_IP_VS_WLC=m 495 + CONFIG_IP_VS_LBLC=m 496 + CONFIG_IP_VS_LBLCR=m 497 + # CONFIG_IP_VS_DH is not set 498 + # CONFIG_IP_VS_SH is not set 499 + CONFIG_IP_VS_SED=m 500 + CONFIG_IP_VS_NQ=m 501 + 502 + # 503 + # IPVS application helper 504 + # 505 + # CONFIG_IP_VS_NFCT is not set 506 + # CONFIG_IP_VS_PE_SIP is not set 507 + 508 + # 509 + # IP: Netfilter Configuration 510 + # 511 + CONFIG_NF_DEFRAG_IPV4=y 512 + CONFIG_NF_CONNTRACK_IPV4=y 513 + # CONFIG_NF_CONNTRACK_PROC_COMPAT is not set 514 + CONFIG_IP_NF_QUEUE=m 515 + CONFIG_IP_NF_IPTABLES=y 516 + CONFIG_IP_NF_MATCH_AH=m 517 + CONFIG_IP_NF_MATCH_ECN=m 518 + CONFIG_IP_NF_MATCH_TTL=m 519 + CONFIG_IP_NF_FILTER=y 520 + CONFIG_IP_NF_TARGET_REJECT=y 521 + CONFIG_IP_NF_TARGET_LOG=m 522 + CONFIG_IP_NF_TARGET_ULOG=m 523 + # CONFIG_NF_NAT is not set 524 + CONFIG_IP_NF_MANGLE=m 525 + # CONFIG_IP_NF_TARGET_CLUSTERIP is not set 526 + CONFIG_IP_NF_TARGET_ECN=m 527 + CONFIG_IP_NF_TARGET_TTL=m 528 + CONFIG_IP_NF_RAW=m 529 + CONFIG_IP_NF_SECURITY=m 530 + CONFIG_IP_NF_ARPTABLES=m 531 + CONFIG_IP_NF_ARPFILTER=m 532 + CONFIG_IP_NF_ARP_MANGLE=m 533 + 534 + # 535 + # IPv6: Netfilter Configuration 536 + # 537 + CONFIG_NF_DEFRAG_IPV6=m 538 + CONFIG_NF_CONNTRACK_IPV6=m 539 + CONFIG_IP6_NF_QUEUE=m 540 + CONFIG_IP6_NF_IPTABLES=m 541 + CONFIG_IP6_NF_MATCH_AH=m 542 + CONFIG_IP6_NF_MATCH_EUI64=m 543 + CONFIG_IP6_NF_MATCH_FRAG=m 544 + CONFIG_IP6_NF_MATCH_OPTS=m 545 + CONFIG_IP6_NF_MATCH_HL=m 546 + CONFIG_IP6_NF_MATCH_IPV6HEADER=m 547 + CONFIG_IP6_NF_MATCH_MH=m 548 + CONFIG_IP6_NF_MATCH_RT=m 549 + CONFIG_IP6_NF_TARGET_HL=m 550 + CONFIG_IP6_NF_TARGET_LOG=m 551 + CONFIG_IP6_NF_FILTER=m 552 + CONFIG_IP6_NF_TARGET_REJECT=m 553 + CONFIG_IP6_NF_MANGLE=m 554 + CONFIG_IP6_NF_RAW=m 555 + CONFIG_IP6_NF_SECURITY=m 556 + CONFIG_BRIDGE_NF_EBTABLES=m 557 + CONFIG_BRIDGE_EBT_BROUTE=m 558 + CONFIG_BRIDGE_EBT_T_FILTER=m 559 + CONFIG_BRIDGE_EBT_T_NAT=m 560 + CONFIG_BRIDGE_EBT_802_3=m 561 + CONFIG_BRIDGE_EBT_AMONG=m 562 + CONFIG_BRIDGE_EBT_ARP=m 563 + CONFIG_BRIDGE_EBT_IP=m 564 + CONFIG_BRIDGE_EBT_IP6=m 565 + CONFIG_BRIDGE_EBT_LIMIT=m 566 + CONFIG_BRIDGE_EBT_MARK=m 567 + CONFIG_BRIDGE_EBT_PKTTYPE=m 568 + CONFIG_BRIDGE_EBT_STP=m 569 + CONFIG_BRIDGE_EBT_VLAN=m 570 + CONFIG_BRIDGE_EBT_ARPREPLY=m 571 + CONFIG_BRIDGE_EBT_DNAT=m 572 + CONFIG_BRIDGE_EBT_MARK_T=m 573 + CONFIG_BRIDGE_EBT_REDIRECT=m 574 + CONFIG_BRIDGE_EBT_SNAT=m 575 + CONFIG_BRIDGE_EBT_LOG=m 576 + CONFIG_BRIDGE_EBT_ULOG=m 577 + CONFIG_BRIDGE_EBT_NFLOG=m 578 + # CONFIG_IP_DCCP is not set 579 + CONFIG_IP_SCTP=m 580 + # CONFIG_SCTP_DBG_MSG is not set 581 + # CONFIG_SCTP_DBG_OBJCNT is not set 582 + # CONFIG_SCTP_HMAC_NONE is not set 583 + # CONFIG_SCTP_HMAC_SHA1 is not set 584 + CONFIG_SCTP_HMAC_MD5=y 585 + CONFIG_RDS=m 586 + CONFIG_RDS_TCP=m 587 + # CONFIG_RDS_DEBUG is not set 588 + # CONFIG_TIPC is not set 589 + # CONFIG_ATM is not set 590 + # CONFIG_L2TP is not set 591 + CONFIG_STP=m 592 + CONFIG_GARP=m 593 + CONFIG_BRIDGE=m 594 + CONFIG_BRIDGE_IGMP_SNOOPING=y 595 + CONFIG_NET_DSA=y 596 + CONFIG_NET_DSA_TAG_DSA=y 597 + CONFIG_NET_DSA_TAG_EDSA=y 598 + CONFIG_NET_DSA_TAG_TRAILER=y 599 + CONFIG_NET_DSA_MV88E6XXX=y 600 + CONFIG_NET_DSA_MV88E6060=y 601 + CONFIG_NET_DSA_MV88E6XXX_NEED_PPU=y 602 + CONFIG_NET_DSA_MV88E6131=y 603 + CONFIG_NET_DSA_MV88E6123_61_65=y 604 + CONFIG_VLAN_8021Q=m 605 + CONFIG_VLAN_8021Q_GVRP=y 606 + # CONFIG_DECNET is not set 607 + CONFIG_LLC=m 608 + # CONFIG_LLC2 is not set 609 + # CONFIG_IPX is not set 610 + # CONFIG_ATALK is not set 611 + # CONFIG_X25 is not set 612 + # CONFIG_LAPB is not set 613 + # CONFIG_ECONET is not set 614 + # CONFIG_WAN_ROUTER is not set 615 + CONFIG_PHONET=m 616 + # CONFIG_IEEE802154 is not set 617 + CONFIG_NET_SCHED=y 618 + 619 + # 620 + # Queueing/Scheduling 621 + # 622 + CONFIG_NET_SCH_CBQ=m 623 + CONFIG_NET_SCH_HTB=m 624 + CONFIG_NET_SCH_HFSC=m 625 + CONFIG_NET_SCH_PRIO=m 626 + CONFIG_NET_SCH_MULTIQ=m 627 + CONFIG_NET_SCH_RED=m 628 + # CONFIG_NET_SCH_SFB is not set 629 + CONFIG_NET_SCH_SFQ=m 630 + CONFIG_NET_SCH_TEQL=m 631 + CONFIG_NET_SCH_TBF=m 632 + CONFIG_NET_SCH_GRED=m 633 + CONFIG_NET_SCH_DSMARK=m 634 + CONFIG_NET_SCH_NETEM=m 635 + CONFIG_NET_SCH_DRR=m 636 + # CONFIG_NET_SCH_MQPRIO is not set 637 + # CONFIG_NET_SCH_CHOKE is not set 638 + CONFIG_NET_SCH_INGRESS=m 639 + 640 + # 641 + # Classification 642 + # 643 + CONFIG_NET_CLS=y 644 + CONFIG_NET_CLS_BASIC=m 645 + CONFIG_NET_CLS_TCINDEX=m 646 + CONFIG_NET_CLS_ROUTE4=m 647 + CONFIG_NET_CLS_FW=m 648 + CONFIG_NET_CLS_U32=m 649 + CONFIG_CLS_U32_PERF=y 650 + CONFIG_CLS_U32_MARK=y 651 + CONFIG_NET_CLS_RSVP=m 652 + CONFIG_NET_CLS_RSVP6=m 653 + CONFIG_NET_CLS_FLOW=m 654 + CONFIG_NET_CLS_CGROUP=y 655 + CONFIG_NET_EMATCH=y 656 + CONFIG_NET_EMATCH_STACK=32 657 + CONFIG_NET_EMATCH_CMP=m 658 + CONFIG_NET_EMATCH_NBYTE=m 659 + CONFIG_NET_EMATCH_U32=m 660 + CONFIG_NET_EMATCH_META=m 661 + CONFIG_NET_EMATCH_TEXT=m 662 + CONFIG_NET_CLS_ACT=y 663 + CONFIG_NET_ACT_POLICE=m 664 + CONFIG_NET_ACT_GACT=m 665 + CONFIG_GACT_PROB=y 666 + CONFIG_NET_ACT_MIRRED=m 667 + CONFIG_NET_ACT_IPT=m 668 + CONFIG_NET_ACT_NAT=m 669 + CONFIG_NET_ACT_PEDIT=m 670 + CONFIG_NET_ACT_SIMP=m 671 + CONFIG_NET_ACT_SKBEDIT=m 672 + # CONFIG_NET_ACT_CSUM is not set 673 + CONFIG_NET_CLS_IND=y 674 + CONFIG_NET_SCH_FIFO=y 675 + CONFIG_DCB=y 676 + CONFIG_DNS_RESOLVER=y 677 + # CONFIG_BATMAN_ADV is not set 678 + CONFIG_RPS=y 679 + CONFIG_RFS_ACCEL=y 680 + CONFIG_XPS=y 681 + 682 + # 683 + # Network testing 684 + # 685 + # CONFIG_NET_PKTGEN is not set 686 + # CONFIG_HAMRADIO is not set 687 + # CONFIG_CAN is not set 688 + # CONFIG_IRDA is not set 689 + # CONFIG_BT is not set 690 + # CONFIG_AF_RXRPC is not set 691 + CONFIG_FIB_RULES=y 692 + # CONFIG_WIRELESS is not set 693 + # CONFIG_WIMAX is not set 694 + # CONFIG_RFKILL is not set 695 + # CONFIG_NET_9P is not set 696 + # CONFIG_CAIF is not set 697 + # CONFIG_CEPH_LIB is not set 698 + 699 + # 700 + # Device Drivers 701 + # 702 + 703 + # 704 + # Generic Driver Options 705 + # 706 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 707 + CONFIG_DEVTMPFS=y 708 + CONFIG_DEVTMPFS_MOUNT=y 709 + CONFIG_STANDALONE=y 710 + CONFIG_PREVENT_FIRMWARE_BUILD=y 711 + CONFIG_FW_LOADER=y 712 + # CONFIG_FIRMWARE_IN_KERNEL is not set 713 + CONFIG_EXTRA_FIRMWARE="" 714 + # CONFIG_DEBUG_DRIVER is not set 715 + # CONFIG_DEBUG_DEVRES is not set 716 + # CONFIG_SYS_HYPERVISOR is not set 717 + CONFIG_CONNECTOR=y 718 + CONFIG_PROC_EVENTS=y 719 + # CONFIG_MTD is not set 720 + # CONFIG_PARPORT is not set 721 + CONFIG_BLK_DEV=y 722 + # CONFIG_BLK_CPQ_DA is not set 723 + # CONFIG_BLK_CPQ_CISS_DA is not set 724 + # CONFIG_BLK_DEV_DAC960 is not set 725 + # CONFIG_BLK_DEV_UMEM is not set 726 + # CONFIG_BLK_DEV_COW_COMMON is not set 727 + CONFIG_BLK_DEV_LOOP=y 728 + CONFIG_BLK_DEV_CRYPTOLOOP=m 729 + # CONFIG_BLK_DEV_DRBD is not set 730 + # CONFIG_BLK_DEV_NBD is not set 731 + CONFIG_BLK_DEV_SX8=m 732 + CONFIG_BLK_DEV_RAM=y 733 + CONFIG_BLK_DEV_RAM_COUNT=16 734 + CONFIG_BLK_DEV_RAM_SIZE=16384 735 + # CONFIG_BLK_DEV_XIP is not set 736 + # CONFIG_CDROM_PKTCDVD is not set 737 + CONFIG_ATA_OVER_ETH=y 738 + # CONFIG_BLK_DEV_RBD is not set 739 + # CONFIG_SENSORS_LIS3LV02D is not set 740 + CONFIG_MISC_DEVICES=y 741 + # CONFIG_AD525X_DPOT is not set 742 + # CONFIG_PHANTOM is not set 743 + # CONFIG_SGI_IOC4 is not set 744 + # CONFIG_TIFM_CORE is not set 745 + # CONFIG_ICS932S401 is not set 746 + # CONFIG_ENCLOSURE_SERVICES is not set 747 + # CONFIG_HP_ILO is not set 748 + # CONFIG_APDS9802ALS is not set 749 + # CONFIG_ISL29003 is not set 750 + # CONFIG_ISL29020 is not set 751 + # CONFIG_SENSORS_TSL2550 is not set 752 + # CONFIG_SENSORS_BH1780 is not set 753 + # CONFIG_SENSORS_BH1770 is not set 754 + # CONFIG_SENSORS_APDS990X is not set 755 + # CONFIG_HMC6352 is not set 756 + # CONFIG_DS1682 is not set 757 + # CONFIG_BMP085 is not set 758 + # CONFIG_PCH_PHUB is not set 759 + # CONFIG_C2PORT is not set 760 + 761 + # 762 + # EEPROM support 763 + # 764 + # CONFIG_EEPROM_AT24 is not set 765 + # CONFIG_EEPROM_LEGACY is not set 766 + # CONFIG_EEPROM_MAX6875 is not set 767 + # CONFIG_EEPROM_93CX6 is not set 768 + # CONFIG_CB710_CORE is not set 769 + 770 + # 771 + # Texas Instruments shared transport line discipline 772 + # 773 + # CONFIG_SENSORS_LIS3_I2C is not set 774 + 775 + # 776 + # SCSI device support 777 + # 778 + CONFIG_SCSI_MOD=m 779 + CONFIG_RAID_ATTRS=m 780 + CONFIG_SCSI=m 781 + CONFIG_SCSI_DMA=y 782 + CONFIG_SCSI_TGT=m 783 + # CONFIG_SCSI_NETLINK is not set 784 + CONFIG_SCSI_PROC_FS=y 785 + 786 + # 787 + # SCSI support type (disk, tape, CD-ROM) 788 + # 789 + CONFIG_BLK_DEV_SD=m 790 + # CONFIG_CHR_DEV_ST is not set 791 + # CONFIG_CHR_DEV_OSST is not set 792 + # CONFIG_BLK_DEV_SR is not set 793 + # CONFIG_CHR_DEV_SG is not set 794 + # CONFIG_CHR_DEV_SCH is not set 795 + # CONFIG_SCSI_MULTI_LUN is not set 796 + CONFIG_SCSI_CONSTANTS=y 797 + CONFIG_SCSI_LOGGING=y 798 + # CONFIG_SCSI_SCAN_ASYNC is not set 799 + CONFIG_SCSI_WAIT_SCAN=m 800 + 801 + # 802 + # SCSI Transports 803 + # 804 + # CONFIG_SCSI_SPI_ATTRS is not set 805 + # CONFIG_SCSI_FC_ATTRS is not set 806 + # CONFIG_SCSI_ISCSI_ATTRS is not set 807 + CONFIG_SCSI_SAS_ATTRS=m 808 + # CONFIG_SCSI_SAS_LIBSAS is not set 809 + # CONFIG_SCSI_SRP_ATTRS is not set 810 + CONFIG_SCSI_LOWLEVEL=y 811 + # CONFIG_ISCSI_TCP is not set 812 + # CONFIG_ISCSI_BOOT_SYSFS is not set 813 + # CONFIG_SCSI_CXGB3_ISCSI is not set 814 + # CONFIG_SCSI_CXGB4_ISCSI is not set 815 + # CONFIG_SCSI_BNX2_ISCSI is not set 816 + # CONFIG_SCSI_BNX2X_FCOE is not set 817 + # CONFIG_BE2ISCSI is not set 818 + # CONFIG_BLK_DEV_3W_XXXX_RAID is not set 819 + # CONFIG_SCSI_HPSA is not set 820 + # CONFIG_SCSI_3W_9XXX is not set 821 + # CONFIG_SCSI_3W_SAS is not set 822 + # CONFIG_SCSI_ACARD is not set 823 + # CONFIG_SCSI_AACRAID is not set 824 + # CONFIG_SCSI_AIC7XXX is not set 825 + # CONFIG_SCSI_AIC7XXX_OLD is not set 826 + # CONFIG_SCSI_AIC79XX is not set 827 + # CONFIG_SCSI_AIC94XX is not set 828 + # CONFIG_SCSI_MVSAS is not set 829 + # CONFIG_SCSI_DPT_I2O is not set 830 + # CONFIG_SCSI_ADVANSYS is not set 831 + # CONFIG_SCSI_ARCMSR is not set 832 + # CONFIG_MEGARAID_NEWGEN is not set 833 + # CONFIG_MEGARAID_LEGACY is not set 834 + # CONFIG_MEGARAID_SAS is not set 835 + # CONFIG_SCSI_MPT2SAS is not set 836 + # CONFIG_SCSI_HPTIOP is not set 837 + # CONFIG_LIBFC is not set 838 + # CONFIG_LIBFCOE is not set 839 + # CONFIG_FCOE is not set 840 + # CONFIG_SCSI_DMX3191D is not set 841 + # CONFIG_SCSI_FUTURE_DOMAIN is not set 842 + # CONFIG_SCSI_IPS is not set 843 + # CONFIG_SCSI_INITIO is not set 844 + # CONFIG_SCSI_INIA100 is not set 845 + # CONFIG_SCSI_STEX is not set 846 + # CONFIG_SCSI_SYM53C8XX_2 is not set 847 + # CONFIG_SCSI_IPR is not set 848 + # CONFIG_SCSI_QLOGIC_1280 is not set 849 + # CONFIG_SCSI_QLA_FC is not set 850 + # CONFIG_SCSI_QLA_ISCSI is not set 851 + # CONFIG_SCSI_LPFC is not set 852 + # CONFIG_SCSI_DC395x is not set 853 + # CONFIG_SCSI_DC390T is not set 854 + # CONFIG_SCSI_DEBUG is not set 855 + # CONFIG_SCSI_PMCRAID is not set 856 + # CONFIG_SCSI_PM8001 is not set 857 + # CONFIG_SCSI_SRP is not set 858 + # CONFIG_SCSI_BFA_FC is not set 859 + # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set 860 + # CONFIG_SCSI_DH is not set 861 + # CONFIG_SCSI_OSD_INITIATOR is not set 862 + CONFIG_ATA=m 863 + # CONFIG_ATA_NONSTANDARD is not set 864 + CONFIG_ATA_VERBOSE_ERROR=y 865 + CONFIG_SATA_PMP=y 866 + 867 + # 868 + # Controllers with non-SFF native interface 869 + # 870 + # CONFIG_SATA_AHCI is not set 871 + # CONFIG_SATA_AHCI_PLATFORM is not set 872 + # CONFIG_SATA_INIC162X is not set 873 + # CONFIG_SATA_ACARD_AHCI is not set 874 + CONFIG_SATA_SIL24=m 875 + CONFIG_ATA_SFF=y 876 + 877 + # 878 + # SFF controllers with custom DMA interface 879 + # 880 + # CONFIG_PDC_ADMA is not set 881 + # CONFIG_SATA_QSTOR is not set 882 + # CONFIG_SATA_SX4 is not set 883 + CONFIG_ATA_BMDMA=y 884 + 885 + # 886 + # SATA SFF controllers with BMDMA 887 + # 888 + # CONFIG_ATA_PIIX is not set 889 + # CONFIG_SATA_MV is not set 890 + # CONFIG_SATA_NV is not set 891 + # CONFIG_SATA_PROMISE is not set 892 + # CONFIG_SATA_SIL is not set 893 + # CONFIG_SATA_SIS is not set 894 + # CONFIG_SATA_SVW is not set 895 + # CONFIG_SATA_ULI is not set 896 + # CONFIG_SATA_VIA is not set 897 + # CONFIG_SATA_VITESSE is not set 898 + 899 + # 900 + # PATA SFF controllers with BMDMA 901 + # 902 + # CONFIG_PATA_ALI is not set 903 + # CONFIG_PATA_AMD is not set 904 + # CONFIG_PATA_ARASAN_CF is not set 905 + # CONFIG_PATA_ARTOP is not set 906 + # CONFIG_PATA_ATIIXP is not set 907 + # CONFIG_PATA_ATP867X is not set 908 + # CONFIG_PATA_CMD64X is not set 909 + # CONFIG_PATA_CS5520 is not set 910 + # CONFIG_PATA_CS5530 is not set 911 + # CONFIG_PATA_CS5536 is not set 912 + # CONFIG_PATA_CYPRESS is not set 913 + # CONFIG_PATA_EFAR is not set 914 + # CONFIG_PATA_HPT366 is not set 915 + # CONFIG_PATA_HPT37X is not set 916 + # CONFIG_PATA_HPT3X2N is not set 917 + # CONFIG_PATA_HPT3X3 is not set 918 + # CONFIG_PATA_IT8213 is not set 919 + # CONFIG_PATA_IT821X is not set 920 + # CONFIG_PATA_JMICRON is not set 921 + # CONFIG_PATA_MARVELL is not set 922 + # CONFIG_PATA_NETCELL is not set 923 + # CONFIG_PATA_NINJA32 is not set 924 + # CONFIG_PATA_NS87415 is not set 925 + # CONFIG_PATA_OLDPIIX is not set 926 + # CONFIG_PATA_OPTIDMA is not set 927 + # CONFIG_PATA_PDC2027X is not set 928 + # CONFIG_PATA_PDC_OLD is not set 929 + # CONFIG_PATA_RADISYS is not set 930 + # CONFIG_PATA_RDC is not set 931 + # CONFIG_PATA_SC1200 is not set 932 + # CONFIG_PATA_SCH is not set 933 + # CONFIG_PATA_SERVERWORKS is not set 934 + # CONFIG_PATA_SIL680 is not set 935 + # CONFIG_PATA_SIS is not set 936 + # CONFIG_PATA_TOSHIBA is not set 937 + # CONFIG_PATA_TRIFLEX is not set 938 + # CONFIG_PATA_VIA is not set 939 + # CONFIG_PATA_WINBOND is not set 940 + 941 + # 942 + # PIO-only SFF controllers 943 + # 944 + # CONFIG_PATA_CMD640_PCI is not set 945 + # CONFIG_PATA_MPIIX is not set 946 + # CONFIG_PATA_NS87410 is not set 947 + # CONFIG_PATA_OPTI is not set 948 + # CONFIG_PATA_PLATFORM is not set 949 + # CONFIG_PATA_RZ1000 is not set 950 + 951 + # 952 + # Generic fallback / legacy drivers 953 + # 954 + # CONFIG_ATA_GENERIC is not set 955 + # CONFIG_PATA_LEGACY is not set 956 + CONFIG_MD=y 957 + CONFIG_BLK_DEV_MD=y 958 + CONFIG_MD_AUTODETECT=y 959 + CONFIG_MD_LINEAR=m 960 + CONFIG_MD_RAID0=m 961 + CONFIG_MD_RAID1=m 962 + CONFIG_MD_RAID10=m 963 + CONFIG_MD_RAID456=m 964 + CONFIG_MULTICORE_RAID456=y 965 + # CONFIG_MD_MULTIPATH is not set 966 + CONFIG_MD_FAULTY=m 967 + CONFIG_BLK_DEV_DM=m 968 + CONFIG_DM_DEBUG=y 969 + CONFIG_DM_CRYPT=m 970 + CONFIG_DM_SNAPSHOT=m 971 + CONFIG_DM_MIRROR=m 972 + # CONFIG_DM_RAID is not set 973 + CONFIG_DM_LOG_USERSPACE=m 974 + CONFIG_DM_ZERO=m 975 + CONFIG_DM_MULTIPATH=m 976 + CONFIG_DM_MULTIPATH_QL=m 977 + CONFIG_DM_MULTIPATH_ST=m 978 + CONFIG_DM_DELAY=m 979 + CONFIG_DM_UEVENT=y 980 + # CONFIG_DM_FLAKEY is not set 981 + # CONFIG_TARGET_CORE is not set 982 + # CONFIG_FUSION is not set 983 + 984 + # 985 + # IEEE 1394 (FireWire) support 986 + # 987 + # CONFIG_FIREWIRE is not set 988 + # CONFIG_FIREWIRE_NOSY is not set 989 + # CONFIG_I2O is not set 990 + CONFIG_NETDEVICES=y 991 + CONFIG_IFB=m 992 + CONFIG_DUMMY=m 993 + CONFIG_BONDING=m 994 + CONFIG_MACVLAN=m 995 + CONFIG_MACVTAP=m 996 + # CONFIG_EQUALIZER is not set 997 + CONFIG_TUN=y 998 + CONFIG_VETH=m 999 + # CONFIG_ARCNET is not set 1000 + # CONFIG_MII is not set 1001 + CONFIG_PHYLIB=y 1002 + 1003 + # 1004 + # MII PHY device drivers 1005 + # 1006 + # CONFIG_MARVELL_PHY is not set 1007 + # CONFIG_DAVICOM_PHY is not set 1008 + # CONFIG_QSEMI_PHY is not set 1009 + # CONFIG_LXT_PHY is not set 1010 + # CONFIG_CICADA_PHY is not set 1011 + # CONFIG_VITESSE_PHY is not set 1012 + # CONFIG_SMSC_PHY is not set 1013 + # CONFIG_BROADCOM_PHY is not set 1014 + # CONFIG_BCM63XX_PHY is not set 1015 + # CONFIG_ICPLUS_PHY is not set 1016 + # CONFIG_REALTEK_PHY is not set 1017 + # CONFIG_NATIONAL_PHY is not set 1018 + # CONFIG_STE10XP is not set 1019 + # CONFIG_LSI_ET1011C_PHY is not set 1020 + # CONFIG_MICREL_PHY is not set 1021 + # CONFIG_FIXED_PHY is not set 1022 + # CONFIG_MDIO_BITBANG is not set 1023 + # CONFIG_NET_ETHERNET is not set 1024 + CONFIG_NETDEV_1000=y 1025 + # CONFIG_ACENIC is not set 1026 + # CONFIG_DL2K is not set 1027 + # CONFIG_E1000 is not set 1028 + CONFIG_E1000E=m 1029 + # CONFIG_IP1000 is not set 1030 + # CONFIG_IGB is not set 1031 + # CONFIG_IGBVF is not set 1032 + # CONFIG_NS83820 is not set 1033 + # CONFIG_HAMACHI is not set 1034 + # CONFIG_YELLOWFIN is not set 1035 + # CONFIG_R8169 is not set 1036 + # CONFIG_SIS190 is not set 1037 + # CONFIG_SKGE is not set 1038 + # CONFIG_SKY2 is not set 1039 + # CONFIG_VIA_VELOCITY is not set 1040 + # CONFIG_TIGON3 is not set 1041 + # CONFIG_BNX2 is not set 1042 + # CONFIG_CNIC is not set 1043 + # CONFIG_QLA3XXX is not set 1044 + # CONFIG_ATL1 is not set 1045 + # CONFIG_ATL1E is not set 1046 + # CONFIG_ATL1C is not set 1047 + # CONFIG_JME is not set 1048 + # CONFIG_STMMAC_ETH is not set 1049 + # CONFIG_PCH_GBE is not set 1050 + # CONFIG_NETDEV_10000 is not set 1051 + # CONFIG_TR is not set 1052 + # CONFIG_WLAN is not set 1053 + 1054 + # 1055 + # Enable WiMAX (Networking options) to see the WiMAX drivers 1056 + # 1057 + # CONFIG_WAN is not set 1058 + 1059 + # 1060 + # CAIF transport drivers 1061 + # 1062 + # CONFIG_TILE_NET is not set 1063 + # CONFIG_FDDI is not set 1064 + # CONFIG_HIPPI is not set 1065 + # CONFIG_PPP is not set 1066 + # CONFIG_SLIP is not set 1067 + # CONFIG_NET_FC is not set 1068 + # CONFIG_NETCONSOLE is not set 1069 + # CONFIG_NETPOLL is not set 1070 + # CONFIG_NET_POLL_CONTROLLER is not set 1071 + # CONFIG_VMXNET3 is not set 1072 + # CONFIG_ISDN is not set 1073 + # CONFIG_PHONE is not set 1074 + 1075 + # 1076 + # Input device support 1077 + # 1078 + CONFIG_INPUT=y 1079 + # CONFIG_INPUT_FF_MEMLESS is not set 1080 + # CONFIG_INPUT_POLLDEV is not set 1081 + # CONFIG_INPUT_SPARSEKMAP is not set 1082 + 1083 + # 1084 + # Userland interfaces 1085 + # 1086 + # CONFIG_INPUT_MOUSEDEV is not set 1087 + # CONFIG_INPUT_JOYDEV is not set 1088 + # CONFIG_INPUT_EVDEV is not set 1089 + # CONFIG_INPUT_EVBUG is not set 1090 + 1091 + # 1092 + # Input Device Drivers 1093 + # 1094 + # CONFIG_INPUT_KEYBOARD is not set 1095 + # CONFIG_INPUT_MOUSE is not set 1096 + # CONFIG_INPUT_JOYSTICK is not set 1097 + # CONFIG_INPUT_TABLET is not set 1098 + # CONFIG_INPUT_TOUCHSCREEN is not set 1099 + # CONFIG_INPUT_MISC is not set 1100 + 1101 + # 1102 + # Hardware I/O ports 1103 + # 1104 + # CONFIG_SERIO is not set 1105 + # CONFIG_GAMEPORT is not set 1106 + 1107 + # 1108 + # Character devices 1109 + # 1110 + # CONFIG_VT is not set 1111 + CONFIG_UNIX98_PTYS=y 1112 + # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set 1113 + # CONFIG_LEGACY_PTYS is not set 1114 + # CONFIG_SERIAL_NONSTANDARD is not set 1115 + # CONFIG_NOZOMI is not set 1116 + # CONFIG_N_GSM is not set 1117 + CONFIG_DEVKMEM=y 1118 + 1119 + # 1120 + # Serial drivers 1121 + # 1122 + # CONFIG_SERIAL_8250 is not set 1123 + 1124 + # 1125 + # Non-8250 serial port support 1126 + # 1127 + # CONFIG_SERIAL_MFD_HSU is not set 1128 + # CONFIG_SERIAL_JSM is not set 1129 + # CONFIG_SERIAL_TIMBERDALE is not set 1130 + # CONFIG_SERIAL_ALTERA_JTAGUART is not set 1131 + # CONFIG_SERIAL_ALTERA_UART is not set 1132 + # CONFIG_SERIAL_PCH_UART is not set 1133 + # CONFIG_TTY_PRINTK is not set 1134 + CONFIG_HVC_DRIVER=y 1135 + # CONFIG_IPMI_HANDLER is not set 1136 + CONFIG_HW_RANDOM=y 1137 + CONFIG_HW_RANDOM_TIMERIOMEM=m 1138 + # CONFIG_R3964 is not set 1139 + # CONFIG_APPLICOM is not set 1140 + 1141 + # 1142 + # PCMCIA character devices 1143 + # 1144 + # CONFIG_RAW_DRIVER is not set 1145 + # CONFIG_TCG_TPM is not set 1146 + CONFIG_DEVPORT=y 1147 + # CONFIG_RAMOOPS is not set 1148 + CONFIG_I2C=y 1149 + CONFIG_I2C_BOARDINFO=y 1150 + CONFIG_I2C_COMPAT=y 1151 + CONFIG_I2C_CHARDEV=y 1152 + # CONFIG_I2C_MUX is not set 1153 + CONFIG_I2C_HELPER_AUTO=y 1154 + 1155 + # 1156 + # I2C Hardware Bus support 1157 + # 1158 + 1159 + # 1160 + # PC SMBus host controller drivers 1161 + # 1162 + # CONFIG_I2C_ALI1535 is not set 1163 + # CONFIG_I2C_ALI1563 is not set 1164 + # CONFIG_I2C_ALI15X3 is not set 1165 + # CONFIG_I2C_AMD756 is not set 1166 + # CONFIG_I2C_AMD8111 is not set 1167 + # CONFIG_I2C_I801 is not set 1168 + # CONFIG_I2C_ISCH is not set 1169 + # CONFIG_I2C_PIIX4 is not set 1170 + # CONFIG_I2C_NFORCE2 is not set 1171 + # CONFIG_I2C_SIS5595 is not set 1172 + # CONFIG_I2C_SIS630 is not set 1173 + # CONFIG_I2C_SIS96X is not set 1174 + # CONFIG_I2C_VIA is not set 1175 + # CONFIG_I2C_VIAPRO is not set 1176 + 1177 + # 1178 + # I2C system bus drivers (mostly embedded / system-on-chip) 1179 + # 1180 + # CONFIG_I2C_INTEL_MID is not set 1181 + # CONFIG_I2C_OCORES is not set 1182 + # CONFIG_I2C_PCA_PLATFORM is not set 1183 + # CONFIG_I2C_PXA_PCI is not set 1184 + # CONFIG_I2C_SIMTEC is not set 1185 + # CONFIG_I2C_XILINX is not set 1186 + # CONFIG_I2C_EG20T is not set 1187 + 1188 + # 1189 + # External I2C/SMBus adapter drivers 1190 + # 1191 + # CONFIG_I2C_PARPORT_LIGHT is not set 1192 + # CONFIG_I2C_TAOS_EVM is not set 1193 + 1194 + # 1195 + # Other I2C/SMBus bus drivers 1196 + # 1197 + # CONFIG_I2C_STUB is not set 1198 + # CONFIG_I2C_DEBUG_CORE is not set 1199 + # CONFIG_I2C_DEBUG_ALGO is not set 1200 + # CONFIG_I2C_DEBUG_BUS is not set 1201 + # CONFIG_SPI is not set 1202 + 1203 + # 1204 + # PPS support 1205 + # 1206 + # CONFIG_PPS is not set 1207 + 1208 + # 1209 + # PPS generators support 1210 + # 1211 + # CONFIG_W1 is not set 1212 + # CONFIG_POWER_SUPPLY is not set 1213 + # CONFIG_HWMON is not set 1214 + # CONFIG_THERMAL is not set 1215 + # CONFIG_WATCHDOG is not set 1216 + CONFIG_SSB_POSSIBLE=y 1217 + 1218 + # 1219 + # Sonics Silicon Backplane 1220 + # 1221 + # CONFIG_SSB is not set 1222 + CONFIG_MFD_SUPPORT=y 1223 + # CONFIG_MFD_CORE is not set 1224 + # CONFIG_MFD_88PM860X is not set 1225 + # CONFIG_MFD_SM501 is not set 1226 + # CONFIG_HTC_PASIC3 is not set 1227 + # CONFIG_TPS6105X is not set 1228 + # CONFIG_TPS6507X is not set 1229 + # CONFIG_TWL4030_CORE is not set 1230 + # CONFIG_MFD_STMPE is not set 1231 + # CONFIG_MFD_TC3589X is not set 1232 + # CONFIG_MFD_TMIO is not set 1233 + # CONFIG_PMIC_DA903X is not set 1234 + # CONFIG_PMIC_ADP5520 is not set 1235 + # CONFIG_MFD_MAX8925 is not set 1236 + # CONFIG_MFD_MAX8997 is not set 1237 + # CONFIG_MFD_MAX8998 is not set 1238 + # CONFIG_MFD_WM8400 is not set 1239 + # CONFIG_MFD_WM831X_I2C is not set 1240 + # CONFIG_MFD_WM8350_I2C is not set 1241 + # CONFIG_MFD_WM8994 is not set 1242 + # CONFIG_MFD_PCF50633 is not set 1243 + # CONFIG_ABX500_CORE is not set 1244 + # CONFIG_LPC_SCH is not set 1245 + # CONFIG_MFD_RDC321X is not set 1246 + # CONFIG_MFD_JANZ_CMODIO is not set 1247 + # CONFIG_MFD_VX855 is not set 1248 + # CONFIG_MFD_WL1273_CORE is not set 1249 + # CONFIG_REGULATOR is not set 1250 + # CONFIG_MEDIA_SUPPORT is not set 1251 + 1252 + # 1253 + # Graphics support 1254 + # 1255 + # CONFIG_VGA_ARB is not set 1256 + # CONFIG_DRM is not set 1257 + # CONFIG_STUB_POULSBO is not set 1258 + # CONFIG_VGASTATE is not set 1259 + # CONFIG_VIDEO_OUTPUT_CONTROL is not set 1260 + # CONFIG_FB is not set 1261 + # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 1262 + 1263 + # 1264 + # Display device support 1265 + # 1266 + # CONFIG_DISPLAY_SUPPORT is not set 1267 + # CONFIG_SOUND is not set 1268 + # CONFIG_HID_SUPPORT is not set 1269 + # CONFIG_USB_SUPPORT is not set 1270 + # CONFIG_UWB is not set 1271 + # CONFIG_MMC is not set 1272 + # CONFIG_MEMSTICK is not set 1273 + # CONFIG_NEW_LEDS is not set 1274 + # CONFIG_NFC_DEVICES is not set 1275 + # CONFIG_ACCESSIBILITY is not set 1276 + # CONFIG_INFINIBAND is not set 1277 + # CONFIG_EDAC is not set 1278 + CONFIG_RTC_LIB=y 1279 + CONFIG_RTC_CLASS=y 1280 + CONFIG_RTC_HCTOSYS=y 1281 + CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 1282 + # CONFIG_RTC_DEBUG is not set 1283 + 1284 + # 1285 + # RTC interfaces 1286 + # 1287 + CONFIG_RTC_INTF_SYSFS=y 1288 + CONFIG_RTC_INTF_PROC=y 1289 + CONFIG_RTC_INTF_DEV=y 1290 + # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set 1291 + # CONFIG_RTC_DRV_TEST is not set 1292 + 1293 + # 1294 + # I2C RTC drivers 1295 + # 1296 + # CONFIG_RTC_DRV_DS1307 is not set 1297 + # CONFIG_RTC_DRV_DS1374 is not set 1298 + # CONFIG_RTC_DRV_DS1672 is not set 1299 + # CONFIG_RTC_DRV_DS3232 is not set 1300 + # CONFIG_RTC_DRV_MAX6900 is not set 1301 + # CONFIG_RTC_DRV_RS5C372 is not set 1302 + # CONFIG_RTC_DRV_ISL1208 is not set 1303 + # CONFIG_RTC_DRV_ISL12022 is not set 1304 + # CONFIG_RTC_DRV_X1205 is not set 1305 + # CONFIG_RTC_DRV_PCF8563 is not set 1306 + # CONFIG_RTC_DRV_PCF8583 is not set 1307 + # CONFIG_RTC_DRV_M41T80 is not set 1308 + # CONFIG_RTC_DRV_BQ32K is not set 1309 + # CONFIG_RTC_DRV_S35390A is not set 1310 + # CONFIG_RTC_DRV_FM3130 is not set 1311 + # CONFIG_RTC_DRV_RX8581 is not set 1312 + # CONFIG_RTC_DRV_RX8025 is not set 1313 + 1314 + # 1315 + # SPI RTC drivers 1316 + # 1317 + 1318 + # 1319 + # Platform RTC drivers 1320 + # 1321 + # CONFIG_RTC_DRV_DS1286 is not set 1322 + # CONFIG_RTC_DRV_DS1511 is not set 1323 + # CONFIG_RTC_DRV_DS1553 is not set 1324 + # CONFIG_RTC_DRV_DS1742 is not set 1325 + # CONFIG_RTC_DRV_STK17TA8 is not set 1326 + # CONFIG_RTC_DRV_M48T86 is not set 1327 + # CONFIG_RTC_DRV_M48T35 is not set 1328 + # CONFIG_RTC_DRV_M48T59 is not set 1329 + # CONFIG_RTC_DRV_MSM6242 is not set 1330 + # CONFIG_RTC_DRV_BQ4802 is not set 1331 + # CONFIG_RTC_DRV_RP5C01 is not set 1332 + # CONFIG_RTC_DRV_V3020 is not set 1333 + 1334 + # 1335 + # on-CPU RTC drivers 1336 + # 1337 + CONFIG_RTC_DRV_TILE=y 1338 + # CONFIG_DMADEVICES is not set 1339 + # CONFIG_AUXDISPLAY is not set 1340 + # CONFIG_UIO is not set 1341 + # CONFIG_STAGING is not set 1342 + 1343 + # 1344 + # File systems 1345 + # 1346 + CONFIG_EXT2_FS=y 1347 + CONFIG_EXT2_FS_XATTR=y 1348 + CONFIG_EXT2_FS_POSIX_ACL=y 1349 + CONFIG_EXT2_FS_SECURITY=y 1350 + CONFIG_EXT2_FS_XIP=y 1351 + CONFIG_EXT3_FS=y 1352 + CONFIG_EXT3_DEFAULTS_TO_ORDERED=y 1353 + CONFIG_EXT3_FS_XATTR=y 1354 + CONFIG_EXT3_FS_POSIX_ACL=y 1355 + CONFIG_EXT3_FS_SECURITY=y 1356 + CONFIG_EXT4_FS=y 1357 + CONFIG_EXT4_FS_XATTR=y 1358 + CONFIG_EXT4_FS_POSIX_ACL=y 1359 + CONFIG_EXT4_FS_SECURITY=y 1360 + # CONFIG_EXT4_DEBUG is not set 1361 + CONFIG_FS_XIP=y 1362 + CONFIG_JBD=y 1363 + # CONFIG_JBD_DEBUG is not set 1364 + CONFIG_JBD2=y 1365 + CONFIG_JBD2_DEBUG=y 1366 + CONFIG_FS_MBCACHE=y 1367 + # CONFIG_REISERFS_FS is not set 1368 + # CONFIG_JFS_FS is not set 1369 + CONFIG_XFS_FS=m 1370 + CONFIG_XFS_QUOTA=y 1371 + CONFIG_XFS_POSIX_ACL=y 1372 + # CONFIG_XFS_RT is not set 1373 + # CONFIG_XFS_DEBUG is not set 1374 + CONFIG_GFS2_FS=m 1375 + CONFIG_GFS2_FS_LOCKING_DLM=y 1376 + # CONFIG_OCFS2_FS is not set 1377 + CONFIG_BTRFS_FS=m 1378 + CONFIG_BTRFS_FS_POSIX_ACL=y 1379 + # CONFIG_NILFS2_FS is not set 1380 + CONFIG_FS_POSIX_ACL=y 1381 + CONFIG_EXPORTFS=y 1382 + CONFIG_FILE_LOCKING=y 1383 + CONFIG_FSNOTIFY=y 1384 + CONFIG_DNOTIFY=y 1385 + CONFIG_INOTIFY_USER=y 1386 + # CONFIG_FANOTIFY is not set 1387 + CONFIG_QUOTA=y 1388 + CONFIG_QUOTA_NETLINK_INTERFACE=y 1389 + # CONFIG_PRINT_QUOTA_WARNING is not set 1390 + # CONFIG_QUOTA_DEBUG is not set 1391 + CONFIG_QUOTA_TREE=y 1392 + # CONFIG_QFMT_V1 is not set 1393 + CONFIG_QFMT_V2=y 1394 + CONFIG_QUOTACTL=y 1395 + # CONFIG_AUTOFS4_FS is not set 1396 + CONFIG_FUSE_FS=y 1397 + CONFIG_CUSE=m 1398 + CONFIG_GENERIC_ACL=y 1399 + 1400 + # 1401 + # Caches 1402 + # 1403 + CONFIG_FSCACHE=m 1404 + CONFIG_FSCACHE_STATS=y 1405 + # CONFIG_FSCACHE_HISTOGRAM is not set 1406 + # CONFIG_FSCACHE_DEBUG is not set 1407 + # CONFIG_FSCACHE_OBJECT_LIST is not set 1408 + CONFIG_CACHEFILES=m 1409 + # CONFIG_CACHEFILES_DEBUG is not set 1410 + # CONFIG_CACHEFILES_HISTOGRAM is not set 1411 + 1412 + # 1413 + # CD-ROM/DVD Filesystems 1414 + # 1415 + CONFIG_ISO9660_FS=m 1416 + CONFIG_JOLIET=y 1417 + CONFIG_ZISOFS=y 1418 + CONFIG_UDF_FS=m 1419 + CONFIG_UDF_NLS=y 1420 + 1421 + # 1422 + # DOS/FAT/NT Filesystems 1423 + # 1424 + CONFIG_FAT_FS=m 1425 + CONFIG_MSDOS_FS=m 1426 + CONFIG_VFAT_FS=m 1427 + CONFIG_FAT_DEFAULT_CODEPAGE=437 1428 + CONFIG_FAT_DEFAULT_IOCHARSET="ascii" 1429 + # CONFIG_NTFS_FS is not set 1430 + 1431 + # 1432 + # Pseudo filesystems 1433 + # 1434 + CONFIG_PROC_FS=y 1435 + CONFIG_PROC_KCORE=y 1436 + CONFIG_PROC_SYSCTL=y 1437 + CONFIG_PROC_PAGE_MONITOR=y 1438 + CONFIG_SYSFS=y 1439 + CONFIG_TMPFS=y 1440 + CONFIG_TMPFS_POSIX_ACL=y 1441 + CONFIG_HUGETLBFS=y 1442 + CONFIG_HUGETLB_PAGE=y 1443 + CONFIG_CONFIGFS_FS=m 1444 + CONFIG_MISC_FILESYSTEMS=y 1445 + # CONFIG_ADFS_FS is not set 1446 + # CONFIG_AFFS_FS is not set 1447 + CONFIG_ECRYPT_FS=m 1448 + # CONFIG_HFS_FS is not set 1449 + # CONFIG_HFSPLUS_FS is not set 1450 + # CONFIG_BEFS_FS is not set 1451 + # CONFIG_BFS_FS is not set 1452 + # CONFIG_EFS_FS is not set 1453 + # CONFIG_LOGFS is not set 1454 + CONFIG_CRAMFS=m 1455 + CONFIG_SQUASHFS=m 1456 + # CONFIG_SQUASHFS_XATTR is not set 1457 + # CONFIG_SQUASHFS_LZO is not set 1458 + # CONFIG_SQUASHFS_XZ is not set 1459 + # CONFIG_SQUASHFS_EMBEDDED is not set 1460 + CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 1461 + # CONFIG_VXFS_FS is not set 1462 + # CONFIG_MINIX_FS is not set 1463 + # CONFIG_OMFS_FS is not set 1464 + # CONFIG_HPFS_FS is not set 1465 + # CONFIG_QNX4FS_FS is not set 1466 + # CONFIG_ROMFS_FS is not set 1467 + # CONFIG_PSTORE is not set 1468 + # CONFIG_SYSV_FS is not set 1469 + # CONFIG_UFS_FS is not set 1470 + CONFIG_NETWORK_FILESYSTEMS=y 1471 + CONFIG_NFS_FS=m 1472 + CONFIG_NFS_V3=y 1473 + CONFIG_NFS_V3_ACL=y 1474 + CONFIG_NFS_V4=y 1475 + CONFIG_NFS_V4_1=y 1476 + CONFIG_PNFS_FILE_LAYOUT=m 1477 + CONFIG_NFS_FSCACHE=y 1478 + # CONFIG_NFS_USE_LEGACY_DNS is not set 1479 + CONFIG_NFS_USE_KERNEL_DNS=y 1480 + # CONFIG_NFS_USE_NEW_IDMAPPER is not set 1481 + CONFIG_NFSD=m 1482 + CONFIG_NFSD_DEPRECATED=y 1483 + CONFIG_NFSD_V2_ACL=y 1484 + CONFIG_NFSD_V3=y 1485 + CONFIG_NFSD_V3_ACL=y 1486 + CONFIG_NFSD_V4=y 1487 + CONFIG_LOCKD=m 1488 + CONFIG_LOCKD_V4=y 1489 + CONFIG_NFS_ACL_SUPPORT=m 1490 + CONFIG_NFS_COMMON=y 1491 + CONFIG_SUNRPC=m 1492 + CONFIG_SUNRPC_GSS=m 1493 + CONFIG_RPCSEC_GSS_KRB5=m 1494 + # CONFIG_CEPH_FS is not set 1495 + CONFIG_CIFS=m 1496 + CONFIG_CIFS_STATS=y 1497 + # CONFIG_CIFS_STATS2 is not set 1498 + CONFIG_CIFS_WEAK_PW_HASH=y 1499 + CONFIG_CIFS_UPCALL=y 1500 + CONFIG_CIFS_XATTR=y 1501 + CONFIG_CIFS_POSIX=y 1502 + # CONFIG_CIFS_DEBUG2 is not set 1503 + CONFIG_CIFS_DFS_UPCALL=y 1504 + CONFIG_CIFS_FSCACHE=y 1505 + # CONFIG_CIFS_ACL is not set 1506 + CONFIG_CIFS_EXPERIMENTAL=y 1507 + # CONFIG_NCP_FS is not set 1508 + # CONFIG_CODA_FS is not set 1509 + # CONFIG_AFS_FS is not set 1510 + 1511 + # 1512 + # Partition Types 1513 + # 1514 + CONFIG_PARTITION_ADVANCED=y 1515 + # CONFIG_ACORN_PARTITION is not set 1516 + CONFIG_OSF_PARTITION=y 1517 + CONFIG_AMIGA_PARTITION=y 1518 + # CONFIG_ATARI_PARTITION is not set 1519 + CONFIG_MAC_PARTITION=y 1520 + CONFIG_MSDOS_PARTITION=y 1521 + CONFIG_BSD_DISKLABEL=y 1522 + CONFIG_MINIX_SUBPARTITION=y 1523 + CONFIG_SOLARIS_X86_PARTITION=y 1524 + CONFIG_UNIXWARE_DISKLABEL=y 1525 + # CONFIG_LDM_PARTITION is not set 1526 + CONFIG_SGI_PARTITION=y 1527 + # CONFIG_ULTRIX_PARTITION is not set 1528 + CONFIG_SUN_PARTITION=y 1529 + CONFIG_KARMA_PARTITION=y 1530 + CONFIG_EFI_PARTITION=y 1531 + # CONFIG_SYSV68_PARTITION is not set 1532 + CONFIG_NLS=y 1533 + CONFIG_NLS_DEFAULT="utf8" 1534 + CONFIG_NLS_CODEPAGE_437=y 1535 + CONFIG_NLS_CODEPAGE_737=m 1536 + CONFIG_NLS_CODEPAGE_775=m 1537 + CONFIG_NLS_CODEPAGE_850=m 1538 + CONFIG_NLS_CODEPAGE_852=m 1539 + CONFIG_NLS_CODEPAGE_855=m 1540 + CONFIG_NLS_CODEPAGE_857=m 1541 + CONFIG_NLS_CODEPAGE_860=m 1542 + CONFIG_NLS_CODEPAGE_861=m 1543 + CONFIG_NLS_CODEPAGE_862=m 1544 + CONFIG_NLS_CODEPAGE_863=m 1545 + CONFIG_NLS_CODEPAGE_864=m 1546 + CONFIG_NLS_CODEPAGE_865=m 1547 + CONFIG_NLS_CODEPAGE_866=m 1548 + CONFIG_NLS_CODEPAGE_869=m 1549 + CONFIG_NLS_CODEPAGE_936=m 1550 + CONFIG_NLS_CODEPAGE_950=m 1551 + CONFIG_NLS_CODEPAGE_932=m 1552 + CONFIG_NLS_CODEPAGE_949=m 1553 + CONFIG_NLS_CODEPAGE_874=m 1554 + CONFIG_NLS_ISO8859_8=m 1555 + CONFIG_NLS_CODEPAGE_1250=m 1556 + CONFIG_NLS_CODEPAGE_1251=m 1557 + CONFIG_NLS_ASCII=y 1558 + CONFIG_NLS_ISO8859_1=m 1559 + CONFIG_NLS_ISO8859_2=m 1560 + CONFIG_NLS_ISO8859_3=m 1561 + CONFIG_NLS_ISO8859_4=m 1562 + CONFIG_NLS_ISO8859_5=m 1563 + CONFIG_NLS_ISO8859_6=m 1564 + CONFIG_NLS_ISO8859_7=m 1565 + CONFIG_NLS_ISO8859_9=m 1566 + CONFIG_NLS_ISO8859_13=m 1567 + CONFIG_NLS_ISO8859_14=m 1568 + CONFIG_NLS_ISO8859_15=m 1569 + CONFIG_NLS_KOI8_R=m 1570 + CONFIG_NLS_KOI8_U=m 1571 + CONFIG_NLS_UTF8=m 1572 + CONFIG_DLM=m 1573 + CONFIG_DLM_DEBUG=y 1574 + 1575 + # 1576 + # Kernel hacking 1577 + # 1578 + # CONFIG_PRINTK_TIME is not set 1579 + CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 1580 + # CONFIG_ENABLE_WARN_DEPRECATED is not set 1581 + CONFIG_ENABLE_MUST_CHECK=y 1582 + CONFIG_FRAME_WARN=2048 1583 + CONFIG_MAGIC_SYSRQ=y 1584 + CONFIG_STRIP_ASM_SYMS=y 1585 + # CONFIG_UNUSED_SYMBOLS is not set 1586 + CONFIG_DEBUG_FS=y 1587 + CONFIG_HEADERS_CHECK=y 1588 + # CONFIG_DEBUG_SECTION_MISMATCH is not set 1589 + CONFIG_DEBUG_KERNEL=y 1590 + CONFIG_DEBUG_SHIRQ=y 1591 + CONFIG_LOCKUP_DETECTOR=y 1592 + # CONFIG_HARDLOCKUP_DETECTOR is not set 1593 + # CONFIG_BOOTPARAM_HARDLOCKUP_PANIC is not set 1594 + CONFIG_BOOTPARAM_HARDLOCKUP_PANIC_VALUE=0 1595 + # CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set 1596 + CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0 1597 + CONFIG_DETECT_HUNG_TASK=y 1598 + # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set 1599 + CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 1600 + CONFIG_SCHED_DEBUG=y 1601 + CONFIG_SCHEDSTATS=y 1602 + CONFIG_TIMER_STATS=y 1603 + # CONFIG_DEBUG_OBJECTS is not set 1604 + # CONFIG_SLUB_DEBUG_ON is not set 1605 + # CONFIG_SLUB_STATS is not set 1606 + # CONFIG_DEBUG_KMEMLEAK is not set 1607 + # CONFIG_DEBUG_RT_MUTEXES is not set 1608 + # CONFIG_RT_MUTEX_TESTER is not set 1609 + # CONFIG_DEBUG_SPINLOCK is not set 1610 + # CONFIG_DEBUG_MUTEXES is not set 1611 + # CONFIG_DEBUG_LOCK_ALLOC is not set 1612 + # CONFIG_PROVE_LOCKING is not set 1613 + # CONFIG_SPARSE_RCU_POINTER is not set 1614 + # CONFIG_LOCK_STAT is not set 1615 + CONFIG_DEBUG_SPINLOCK_SLEEP=y 1616 + # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 1617 + CONFIG_STACKTRACE=y 1618 + # CONFIG_DEBUG_KOBJECT is not set 1619 + CONFIG_DEBUG_INFO=y 1620 + CONFIG_DEBUG_INFO_REDUCED=y 1621 + CONFIG_DEBUG_VM=y 1622 + # CONFIG_DEBUG_WRITECOUNT is not set 1623 + CONFIG_DEBUG_MEMORY_INIT=y 1624 + CONFIG_DEBUG_LIST=y 1625 + # CONFIG_TEST_LIST_SORT is not set 1626 + # CONFIG_DEBUG_SG is not set 1627 + # CONFIG_DEBUG_NOTIFIERS is not set 1628 + CONFIG_DEBUG_CREDENTIALS=y 1629 + # CONFIG_RCU_TORTURE_TEST is not set 1630 + # CONFIG_RCU_CPU_STALL_DETECTOR is not set 1631 + # CONFIG_BACKTRACE_SELF_TEST is not set 1632 + # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 1633 + CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y 1634 + # CONFIG_LKDTM is not set 1635 + # CONFIG_FAULT_INJECTION is not set 1636 + # CONFIG_SYSCTL_SYSCALL_CHECK is not set 1637 + # CONFIG_DEBUG_PAGEALLOC is not set 1638 + CONFIG_TRACING_SUPPORT=y 1639 + CONFIG_FTRACE=y 1640 + # CONFIG_IRQSOFF_TRACER is not set 1641 + # CONFIG_SCHED_TRACER is not set 1642 + # CONFIG_ENABLE_DEFAULT_TRACERS is not set 1643 + CONFIG_BRANCH_PROFILE_NONE=y 1644 + # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set 1645 + # CONFIG_PROFILE_ALL_BRANCHES is not set 1646 + # CONFIG_BLK_DEV_IO_TRACE is not set 1647 + # CONFIG_BUILD_DOCSRC is not set 1648 + CONFIG_DYNAMIC_DEBUG=y 1649 + # CONFIG_ATOMIC64_SELFTEST is not set 1650 + CONFIG_ASYNC_RAID6_TEST=m 1651 + # CONFIG_SAMPLES is not set 1652 + # CONFIG_TEST_KSTRTOX is not set 1653 + CONFIG_EARLY_PRINTK=y 1654 + CONFIG_DEBUG_STACKOVERFLOW=y 1655 + # CONFIG_DEBUG_STACK_USAGE is not set 1656 + CONFIG_DEBUG_EXTRA_FLAGS="" 1657 + 1658 + # 1659 + # Security options 1660 + # 1661 + CONFIG_KEYS=y 1662 + CONFIG_KEYS_DEBUG_PROC_KEYS=y 1663 + # CONFIG_SECURITY_DMESG_RESTRICT is not set 1664 + CONFIG_SECURITY=y 1665 + CONFIG_SECURITYFS=y 1666 + CONFIG_SECURITY_NETWORK=y 1667 + CONFIG_SECURITY_NETWORK_XFRM=y 1668 + # CONFIG_SECURITY_PATH is not set 1669 + CONFIG_LSM_MMAP_MIN_ADDR=65536 1670 + CONFIG_SECURITY_SELINUX=y 1671 + CONFIG_SECURITY_SELINUX_BOOTPARAM=y 1672 + CONFIG_SECURITY_SELINUX_BOOTPARAM_VALUE=1 1673 + CONFIG_SECURITY_SELINUX_DISABLE=y 1674 + CONFIG_SECURITY_SELINUX_DEVELOP=y 1675 + CONFIG_SECURITY_SELINUX_AVC_STATS=y 1676 + CONFIG_SECURITY_SELINUX_CHECKREQPROT_VALUE=1 1677 + # CONFIG_SECURITY_SELINUX_POLICYDB_VERSION_MAX is not set 1678 + # CONFIG_SECURITY_SMACK is not set 1679 + # CONFIG_SECURITY_TOMOYO is not set 1680 + # CONFIG_SECURITY_APPARMOR is not set 1681 + # CONFIG_IMA is not set 1682 + CONFIG_DEFAULT_SECURITY_SELINUX=y 1683 + # CONFIG_DEFAULT_SECURITY_DAC is not set 1684 + CONFIG_DEFAULT_SECURITY="selinux" 1685 + CONFIG_XOR_BLOCKS=m 1686 + CONFIG_ASYNC_CORE=m 1687 + CONFIG_ASYNC_MEMCPY=m 1688 + CONFIG_ASYNC_XOR=m 1689 + CONFIG_ASYNC_PQ=m 1690 + CONFIG_ASYNC_RAID6_RECOV=m 1691 + CONFIG_CRYPTO=y 1692 + 1693 + # 1694 + # Crypto core or helper 1695 + # 1696 + CONFIG_CRYPTO_ALGAPI=y 1697 + CONFIG_CRYPTO_ALGAPI2=y 1698 + CONFIG_CRYPTO_AEAD=m 1699 + CONFIG_CRYPTO_AEAD2=y 1700 + CONFIG_CRYPTO_BLKCIPHER=m 1701 + CONFIG_CRYPTO_BLKCIPHER2=y 1702 + CONFIG_CRYPTO_HASH=y 1703 + CONFIG_CRYPTO_HASH2=y 1704 + CONFIG_CRYPTO_RNG=m 1705 + CONFIG_CRYPTO_RNG2=y 1706 + CONFIG_CRYPTO_PCOMP=m 1707 + CONFIG_CRYPTO_PCOMP2=y 1708 + CONFIG_CRYPTO_MANAGER=y 1709 + CONFIG_CRYPTO_MANAGER2=y 1710 + CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y 1711 + CONFIG_CRYPTO_GF128MUL=m 1712 + CONFIG_CRYPTO_NULL=m 1713 + CONFIG_CRYPTO_PCRYPT=m 1714 + CONFIG_CRYPTO_WORKQUEUE=y 1715 + CONFIG_CRYPTO_CRYPTD=m 1716 + CONFIG_CRYPTO_AUTHENC=m 1717 + CONFIG_CRYPTO_TEST=m 1718 + 1719 + # 1720 + # Authenticated Encryption with Associated Data 1721 + # 1722 + CONFIG_CRYPTO_CCM=m 1723 + CONFIG_CRYPTO_GCM=m 1724 + CONFIG_CRYPTO_SEQIV=m 1725 + 1726 + # 1727 + # Block modes 1728 + # 1729 + CONFIG_CRYPTO_CBC=m 1730 + CONFIG_CRYPTO_CTR=m 1731 + CONFIG_CRYPTO_CTS=m 1732 + CONFIG_CRYPTO_ECB=m 1733 + CONFIG_CRYPTO_LRW=m 1734 + CONFIG_CRYPTO_PCBC=m 1735 + CONFIG_CRYPTO_XTS=m 1736 + 1737 + # 1738 + # Hash modes 1739 + # 1740 + CONFIG_CRYPTO_HMAC=y 1741 + CONFIG_CRYPTO_XCBC=m 1742 + CONFIG_CRYPTO_VMAC=m 1743 + 1744 + # 1745 + # Digest 1746 + # 1747 + CONFIG_CRYPTO_CRC32C=y 1748 + CONFIG_CRYPTO_GHASH=m 1749 + CONFIG_CRYPTO_MD4=m 1750 + CONFIG_CRYPTO_MD5=y 1751 + CONFIG_CRYPTO_MICHAEL_MIC=m 1752 + CONFIG_CRYPTO_RMD128=m 1753 + CONFIG_CRYPTO_RMD160=m 1754 + CONFIG_CRYPTO_RMD256=m 1755 + CONFIG_CRYPTO_RMD320=m 1756 + CONFIG_CRYPTO_SHA1=y 1757 + CONFIG_CRYPTO_SHA256=m 1758 + CONFIG_CRYPTO_SHA512=m 1759 + CONFIG_CRYPTO_TGR192=m 1760 + CONFIG_CRYPTO_WP512=m 1761 + 1762 + # 1763 + # Ciphers 1764 + # 1765 + CONFIG_CRYPTO_AES=m 1766 + CONFIG_CRYPTO_ANUBIS=m 1767 + CONFIG_CRYPTO_ARC4=m 1768 + CONFIG_CRYPTO_BLOWFISH=m 1769 + CONFIG_CRYPTO_CAMELLIA=m 1770 + CONFIG_CRYPTO_CAST5=m 1771 + CONFIG_CRYPTO_CAST6=m 1772 + CONFIG_CRYPTO_DES=m 1773 + CONFIG_CRYPTO_FCRYPT=m 1774 + CONFIG_CRYPTO_KHAZAD=m 1775 + # CONFIG_CRYPTO_SALSA20 is not set 1776 + CONFIG_CRYPTO_SEED=m 1777 + CONFIG_CRYPTO_SERPENT=m 1778 + CONFIG_CRYPTO_TEA=m 1779 + CONFIG_CRYPTO_TWOFISH=m 1780 + CONFIG_CRYPTO_TWOFISH_COMMON=m 1781 + 1782 + # 1783 + # Compression 1784 + # 1785 + CONFIG_CRYPTO_DEFLATE=m 1786 + CONFIG_CRYPTO_ZLIB=m 1787 + CONFIG_CRYPTO_LZO=m 1788 + 1789 + # 1790 + # Random Number Generation 1791 + # 1792 + CONFIG_CRYPTO_ANSI_CPRNG=m 1793 + # CONFIG_CRYPTO_USER_API_HASH is not set 1794 + # CONFIG_CRYPTO_USER_API_SKCIPHER is not set 1795 + CONFIG_CRYPTO_HW=y 1796 + CONFIG_CRYPTO_DEV_HIFN_795X=m 1797 + CONFIG_CRYPTO_DEV_HIFN_795X_RNG=y 1798 + # CONFIG_BINARY_PRINTF is not set 1799 + 1800 + # 1801 + # Library routines 1802 + # 1803 + CONFIG_RAID6_PQ=m 1804 + CONFIG_BITREVERSE=y 1805 + CONFIG_GENERIC_FIND_FIRST_BIT=y 1806 + CONFIG_GENERIC_FIND_NEXT_BIT=y 1807 + CONFIG_GENERIC_FIND_LAST_BIT=y 1808 + # CONFIG_CRC_CCITT is not set 1809 + CONFIG_CRC16=y 1810 + CONFIG_CRC_T10DIF=y 1811 + CONFIG_CRC_ITU_T=m 1812 + CONFIG_CRC32=y 1813 + # CONFIG_CRC7 is not set 1814 + CONFIG_LIBCRC32C=m 1815 + CONFIG_AUDIT_GENERIC=y 1816 + CONFIG_ZLIB_INFLATE=y 1817 + CONFIG_ZLIB_DEFLATE=m 1818 + CONFIG_LZO_COMPRESS=m 1819 + CONFIG_LZO_DECOMPRESS=m 1820 + # CONFIG_XZ_DEC is not set 1821 + # CONFIG_XZ_DEC_BCJ is not set 1822 + CONFIG_DECOMPRESS_GZIP=y 1823 + CONFIG_TEXTSEARCH=y 1824 + CONFIG_TEXTSEARCH_KMP=m 1825 + CONFIG_TEXTSEARCH_BM=m 1826 + CONFIG_TEXTSEARCH_FSM=m 1827 + CONFIG_HAS_IOMEM=y 1828 + CONFIG_HAS_IOPORT=y 1829 + CONFIG_HAS_DMA=y 1830 + CONFIG_CPU_RMAP=y 1831 + CONFIG_NLATTR=y 1832 + # CONFIG_AVERAGE is not set 1833 + # CONFIG_VIRTUALIZATION is not set
+1163
arch/tile/configs/tilepro_defconfig
··· 1 + # 2 + # Automatically generated make config: don't edit 3 + # Linux/tile 2.6.39-rc5 Kernel Configuration 4 + # Tue May 3 09:15:02 2011 5 + # 6 + CONFIG_TILE=y 7 + CONFIG_MMU=y 8 + CONFIG_GENERIC_CSUM=y 9 + CONFIG_SEMAPHORE_SLEEPERS=y 10 + CONFIG_HAVE_ARCH_ALLOC_REMAP=y 11 + CONFIG_HAVE_SETUP_PER_CPU_AREA=y 12 + CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK=y 13 + CONFIG_SYS_SUPPORTS_HUGETLBFS=y 14 + CONFIG_GENERIC_TIME=y 15 + CONFIG_GENERIC_CLOCKEVENTS=y 16 + CONFIG_RWSEM_GENERIC_SPINLOCK=y 17 + CONFIG_DEFAULT_MIGRATION_COST=10000000 18 + CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y 19 + CONFIG_ARCH_PHYS_ADDR_T_64BIT=y 20 + CONFIG_ARCH_DMA_ADDR_T_64BIT=y 21 + CONFIG_LOCKDEP_SUPPORT=y 22 + CONFIG_STACKTRACE_SUPPORT=y 23 + CONFIG_ARCH_DISCONTIGMEM_ENABLE=y 24 + CONFIG_ARCH_DISCONTIGMEM_DEFAULT=y 25 + CONFIG_TRACE_IRQFLAGS_SUPPORT=y 26 + CONFIG_STRICT_DEVMEM=y 27 + CONFIG_SMP=y 28 + # CONFIG_DEBUG_COPY_FROM_USER is not set 29 + CONFIG_HVC_TILE=y 30 + # CONFIG_TILEGX is not set 31 + CONFIG_ARCH_DEFCONFIG="arch/tile/configs/tile_defconfig" 32 + CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" 33 + CONFIG_CONSTRUCTORS=y 34 + 35 + # 36 + # General setup 37 + # 38 + CONFIG_EXPERIMENTAL=y 39 + CONFIG_INIT_ENV_ARG_LIMIT=32 40 + CONFIG_CROSS_COMPILE="" 41 + CONFIG_LOCALVERSION="" 42 + CONFIG_LOCALVERSION_AUTO=y 43 + # CONFIG_SWAP is not set 44 + CONFIG_SYSVIPC=y 45 + CONFIG_SYSVIPC_SYSCTL=y 46 + # CONFIG_POSIX_MQUEUE is not set 47 + # CONFIG_BSD_PROCESS_ACCT is not set 48 + CONFIG_FHANDLE=y 49 + # CONFIG_TASKSTATS is not set 50 + # CONFIG_AUDIT is not set 51 + CONFIG_HAVE_GENERIC_HARDIRQS=y 52 + 53 + # 54 + # IRQ subsystem 55 + # 56 + CONFIG_GENERIC_HARDIRQS=y 57 + CONFIG_GENERIC_IRQ_PROBE=y 58 + CONFIG_GENERIC_IRQ_SHOW=y 59 + CONFIG_GENERIC_PENDING_IRQ=y 60 + 61 + # 62 + # RCU Subsystem 63 + # 64 + CONFIG_TREE_RCU=y 65 + # CONFIG_PREEMPT_RCU is not set 66 + # CONFIG_RCU_TRACE is not set 67 + CONFIG_RCU_FANOUT=32 68 + # CONFIG_RCU_FANOUT_EXACT is not set 69 + # CONFIG_RCU_FAST_NO_HZ is not set 70 + # CONFIG_TREE_RCU_TRACE is not set 71 + # CONFIG_IKCONFIG is not set 72 + CONFIG_LOG_BUF_SHIFT=17 73 + # CONFIG_CGROUPS is not set 74 + # CONFIG_NAMESPACES is not set 75 + # CONFIG_SCHED_AUTOGROUP is not set 76 + # CONFIG_SYSFS_DEPRECATED is not set 77 + # CONFIG_RELAY is not set 78 + CONFIG_BLK_DEV_INITRD=y 79 + CONFIG_INITRAMFS_SOURCE="usr/contents.txt" 80 + CONFIG_INITRAMFS_ROOT_UID=0 81 + CONFIG_INITRAMFS_ROOT_GID=0 82 + CONFIG_RD_GZIP=y 83 + # CONFIG_RD_BZIP2 is not set 84 + # CONFIG_RD_LZMA is not set 85 + # CONFIG_RD_XZ is not set 86 + # CONFIG_RD_LZO is not set 87 + CONFIG_INITRAMFS_COMPRESSION_NONE=y 88 + # CONFIG_INITRAMFS_COMPRESSION_GZIP is not set 89 + CONFIG_CC_OPTIMIZE_FOR_SIZE=y 90 + CONFIG_SYSCTL=y 91 + CONFIG_ANON_INODES=y 92 + CONFIG_EXPERT=y 93 + CONFIG_SYSCTL_SYSCALL=y 94 + CONFIG_KALLSYMS=y 95 + # CONFIG_KALLSYMS_ALL is not set 96 + # CONFIG_KALLSYMS_EXTRA_PASS is not set 97 + CONFIG_HOTPLUG=y 98 + CONFIG_PRINTK=y 99 + CONFIG_BUG=y 100 + CONFIG_ELF_CORE=y 101 + CONFIG_BASE_FULL=y 102 + CONFIG_FUTEX=y 103 + CONFIG_EPOLL=y 104 + CONFIG_SIGNALFD=y 105 + CONFIG_TIMERFD=y 106 + CONFIG_EVENTFD=y 107 + CONFIG_SHMEM=y 108 + CONFIG_AIO=y 109 + CONFIG_EMBEDDED=y 110 + 111 + # 112 + # Kernel Performance Events And Counters 113 + # 114 + CONFIG_VM_EVENT_COUNTERS=y 115 + CONFIG_PCI_QUIRKS=y 116 + CONFIG_SLUB_DEBUG=y 117 + # CONFIG_COMPAT_BRK is not set 118 + # CONFIG_SLAB is not set 119 + CONFIG_SLUB=y 120 + # CONFIG_SLOB is not set 121 + CONFIG_PROFILING=y 122 + CONFIG_USE_GENERIC_SMP_HELPERS=y 123 + 124 + # 125 + # GCOV-based kernel profiling 126 + # 127 + # CONFIG_HAVE_GENERIC_DMA_COHERENT is not set 128 + CONFIG_SLABINFO=y 129 + CONFIG_RT_MUTEXES=y 130 + CONFIG_BASE_SMALL=0 131 + CONFIG_MODULES=y 132 + # CONFIG_MODULE_FORCE_LOAD is not set 133 + CONFIG_MODULE_UNLOAD=y 134 + # CONFIG_MODULE_FORCE_UNLOAD is not set 135 + # CONFIG_MODVERSIONS is not set 136 + # CONFIG_MODULE_SRCVERSION_ALL is not set 137 + CONFIG_STOP_MACHINE=y 138 + CONFIG_BLOCK=y 139 + CONFIG_LBDAF=y 140 + # CONFIG_BLK_DEV_BSG is not set 141 + # CONFIG_BLK_DEV_INTEGRITY is not set 142 + 143 + # 144 + # IO Schedulers 145 + # 146 + CONFIG_IOSCHED_NOOP=y 147 + # CONFIG_IOSCHED_DEADLINE is not set 148 + # CONFIG_IOSCHED_CFQ is not set 149 + CONFIG_DEFAULT_NOOP=y 150 + CONFIG_DEFAULT_IOSCHED="noop" 151 + # CONFIG_INLINE_SPIN_TRYLOCK is not set 152 + # CONFIG_INLINE_SPIN_TRYLOCK_BH is not set 153 + # CONFIG_INLINE_SPIN_LOCK is not set 154 + # CONFIG_INLINE_SPIN_LOCK_BH is not set 155 + # CONFIG_INLINE_SPIN_LOCK_IRQ is not set 156 + # CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set 157 + CONFIG_INLINE_SPIN_UNLOCK=y 158 + # CONFIG_INLINE_SPIN_UNLOCK_BH is not set 159 + CONFIG_INLINE_SPIN_UNLOCK_IRQ=y 160 + # CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set 161 + # CONFIG_INLINE_READ_TRYLOCK is not set 162 + # CONFIG_INLINE_READ_LOCK is not set 163 + # CONFIG_INLINE_READ_LOCK_BH is not set 164 + # CONFIG_INLINE_READ_LOCK_IRQ is not set 165 + # CONFIG_INLINE_READ_LOCK_IRQSAVE is not set 166 + CONFIG_INLINE_READ_UNLOCK=y 167 + # CONFIG_INLINE_READ_UNLOCK_BH is not set 168 + CONFIG_INLINE_READ_UNLOCK_IRQ=y 169 + # CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set 170 + # CONFIG_INLINE_WRITE_TRYLOCK is not set 171 + # CONFIG_INLINE_WRITE_LOCK is not set 172 + # CONFIG_INLINE_WRITE_LOCK_BH is not set 173 + # CONFIG_INLINE_WRITE_LOCK_IRQ is not set 174 + # CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set 175 + CONFIG_INLINE_WRITE_UNLOCK=y 176 + # CONFIG_INLINE_WRITE_UNLOCK_BH is not set 177 + CONFIG_INLINE_WRITE_UNLOCK_IRQ=y 178 + # CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set 179 + CONFIG_MUTEX_SPIN_ON_OWNER=y 180 + 181 + # 182 + # Tilera-specific configuration 183 + # 184 + CONFIG_NR_CPUS=64 185 + CONFIG_TICK_ONESHOT=y 186 + CONFIG_NO_HZ=y 187 + CONFIG_HIGH_RES_TIMERS=y 188 + CONFIG_GENERIC_CLOCKEVENTS_BUILD=y 189 + CONFIG_HZ_100=y 190 + # CONFIG_HZ_250 is not set 191 + # CONFIG_HZ_300 is not set 192 + # CONFIG_HZ_1000 is not set 193 + CONFIG_HZ=100 194 + CONFIG_SCHED_HRTICK=y 195 + # CONFIG_KEXEC is not set 196 + CONFIG_HIGHMEM=y 197 + CONFIG_NUMA=y 198 + CONFIG_NODES_SHIFT=2 199 + # CONFIG_VMSPLIT_3_75G is not set 200 + # CONFIG_VMSPLIT_3_5G is not set 201 + CONFIG_VMSPLIT_3G=y 202 + # CONFIG_VMSPLIT_2_75G is not set 203 + # CONFIG_VMSPLIT_2_5G is not set 204 + # CONFIG_VMSPLIT_2_25G is not set 205 + # CONFIG_VMSPLIT_2G is not set 206 + # CONFIG_VMSPLIT_1G is not set 207 + CONFIG_PAGE_OFFSET=0xC0000000 208 + CONFIG_SELECT_MEMORY_MODEL=y 209 + CONFIG_DISCONTIGMEM_MANUAL=y 210 + CONFIG_DISCONTIGMEM=y 211 + CONFIG_FLAT_NODE_MEM_MAP=y 212 + CONFIG_NEED_MULTIPLE_NODES=y 213 + CONFIG_PAGEFLAGS_EXTENDED=y 214 + CONFIG_SPLIT_PTLOCK_CPUS=4 215 + # CONFIG_COMPACTION is not set 216 + CONFIG_MIGRATION=y 217 + CONFIG_PHYS_ADDR_T_64BIT=y 218 + CONFIG_ZONE_DMA_FLAG=0 219 + CONFIG_BOUNCE=y 220 + CONFIG_VIRT_TO_BUS=y 221 + # CONFIG_KSM is not set 222 + CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 223 + # CONFIG_CMDLINE_BOOL is not set 224 + CONFIG_VMALLOC_RESERVE=0x1000000 225 + CONFIG_HARDWALL=y 226 + CONFIG_KERNEL_PL=1 227 + 228 + # 229 + # Bus options 230 + # 231 + CONFIG_PCI=y 232 + CONFIG_PCI_DOMAINS=y 233 + # CONFIG_NO_IOMEM is not set 234 + # CONFIG_NO_IOPORT is not set 235 + # CONFIG_ARCH_SUPPORTS_MSI is not set 236 + # CONFIG_PCI_DEBUG is not set 237 + # CONFIG_PCI_STUB is not set 238 + # CONFIG_PCI_IOV is not set 239 + # CONFIG_HOTPLUG_PCI is not set 240 + 241 + # 242 + # Executable file formats 243 + # 244 + CONFIG_KCORE_ELF=y 245 + CONFIG_BINFMT_ELF=y 246 + # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set 247 + # CONFIG_HAVE_AOUT is not set 248 + # CONFIG_BINFMT_MISC is not set 249 + CONFIG_NET=y 250 + 251 + # 252 + # Networking options 253 + # 254 + CONFIG_PACKET=y 255 + CONFIG_UNIX=y 256 + CONFIG_XFRM=y 257 + # CONFIG_XFRM_USER is not set 258 + # CONFIG_XFRM_SUB_POLICY is not set 259 + # CONFIG_XFRM_MIGRATE is not set 260 + # CONFIG_XFRM_STATISTICS is not set 261 + # CONFIG_NET_KEY is not set 262 + CONFIG_INET=y 263 + CONFIG_IP_MULTICAST=y 264 + # CONFIG_IP_ADVANCED_ROUTER is not set 265 + # CONFIG_IP_PNP is not set 266 + # CONFIG_NET_IPIP is not set 267 + # CONFIG_NET_IPGRE_DEMUX is not set 268 + # CONFIG_IP_MROUTE is not set 269 + # CONFIG_ARPD is not set 270 + # CONFIG_SYN_COOKIES is not set 271 + # CONFIG_INET_AH is not set 272 + # CONFIG_INET_ESP is not set 273 + # CONFIG_INET_IPCOMP is not set 274 + # CONFIG_INET_XFRM_TUNNEL is not set 275 + CONFIG_INET_TUNNEL=y 276 + # CONFIG_INET_XFRM_MODE_TRANSPORT is not set 277 + # CONFIG_INET_XFRM_MODE_TUNNEL is not set 278 + CONFIG_INET_XFRM_MODE_BEET=y 279 + # CONFIG_INET_LRO is not set 280 + # CONFIG_INET_DIAG is not set 281 + # CONFIG_TCP_CONG_ADVANCED is not set 282 + CONFIG_TCP_CONG_CUBIC=y 283 + CONFIG_DEFAULT_TCP_CONG="cubic" 284 + # CONFIG_TCP_MD5SIG is not set 285 + CONFIG_IPV6=y 286 + # CONFIG_IPV6_PRIVACY is not set 287 + # CONFIG_IPV6_ROUTER_PREF is not set 288 + # CONFIG_IPV6_OPTIMISTIC_DAD is not set 289 + # CONFIG_INET6_AH is not set 290 + # CONFIG_INET6_ESP is not set 291 + # CONFIG_INET6_IPCOMP is not set 292 + # CONFIG_IPV6_MIP6 is not set 293 + # CONFIG_INET6_XFRM_TUNNEL is not set 294 + # CONFIG_INET6_TUNNEL is not set 295 + CONFIG_INET6_XFRM_MODE_TRANSPORT=y 296 + CONFIG_INET6_XFRM_MODE_TUNNEL=y 297 + CONFIG_INET6_XFRM_MODE_BEET=y 298 + # CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set 299 + CONFIG_IPV6_SIT=y 300 + # CONFIG_IPV6_SIT_6RD is not set 301 + CONFIG_IPV6_NDISC_NODETYPE=y 302 + # CONFIG_IPV6_TUNNEL is not set 303 + # CONFIG_IPV6_MULTIPLE_TABLES is not set 304 + # CONFIG_IPV6_MROUTE is not set 305 + # CONFIG_NETWORK_SECMARK is not set 306 + # CONFIG_NETWORK_PHY_TIMESTAMPING is not set 307 + # CONFIG_NETFILTER is not set 308 + # CONFIG_IP_DCCP is not set 309 + # CONFIG_IP_SCTP is not set 310 + # CONFIG_RDS is not set 311 + # CONFIG_TIPC is not set 312 + # CONFIG_ATM is not set 313 + # CONFIG_L2TP is not set 314 + # CONFIG_BRIDGE is not set 315 + # CONFIG_NET_DSA is not set 316 + # CONFIG_VLAN_8021Q is not set 317 + # CONFIG_DECNET is not set 318 + # CONFIG_LLC2 is not set 319 + # CONFIG_IPX is not set 320 + # CONFIG_ATALK is not set 321 + # CONFIG_X25 is not set 322 + # CONFIG_LAPB is not set 323 + # CONFIG_ECONET is not set 324 + # CONFIG_WAN_ROUTER is not set 325 + # CONFIG_PHONET is not set 326 + # CONFIG_IEEE802154 is not set 327 + # CONFIG_NET_SCHED is not set 328 + # CONFIG_DCB is not set 329 + # CONFIG_BATMAN_ADV is not set 330 + CONFIG_RPS=y 331 + CONFIG_RFS_ACCEL=y 332 + CONFIG_XPS=y 333 + 334 + # 335 + # Network testing 336 + # 337 + # CONFIG_NET_PKTGEN is not set 338 + # CONFIG_HAMRADIO is not set 339 + # CONFIG_CAN is not set 340 + # CONFIG_IRDA is not set 341 + # CONFIG_BT is not set 342 + # CONFIG_AF_RXRPC is not set 343 + # CONFIG_WIRELESS is not set 344 + # CONFIG_WIMAX is not set 345 + # CONFIG_RFKILL is not set 346 + # CONFIG_NET_9P is not set 347 + # CONFIG_CAIF is not set 348 + # CONFIG_CEPH_LIB is not set 349 + 350 + # 351 + # Device Drivers 352 + # 353 + 354 + # 355 + # Generic Driver Options 356 + # 357 + CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" 358 + # CONFIG_DEVTMPFS is not set 359 + CONFIG_STANDALONE=y 360 + CONFIG_PREVENT_FIRMWARE_BUILD=y 361 + CONFIG_FW_LOADER=y 362 + CONFIG_FIRMWARE_IN_KERNEL=y 363 + CONFIG_EXTRA_FIRMWARE="" 364 + # CONFIG_DEBUG_DRIVER is not set 365 + # CONFIG_DEBUG_DEVRES is not set 366 + # CONFIG_SYS_HYPERVISOR is not set 367 + # CONFIG_CONNECTOR is not set 368 + # CONFIG_MTD is not set 369 + # CONFIG_PARPORT is not set 370 + CONFIG_BLK_DEV=y 371 + # CONFIG_BLK_CPQ_DA is not set 372 + # CONFIG_BLK_CPQ_CISS_DA is not set 373 + # CONFIG_BLK_DEV_DAC960 is not set 374 + # CONFIG_BLK_DEV_UMEM is not set 375 + # CONFIG_BLK_DEV_COW_COMMON is not set 376 + # CONFIG_BLK_DEV_LOOP is not set 377 + 378 + # 379 + # DRBD disabled because PROC_FS, INET or CONNECTOR not selected 380 + # 381 + # CONFIG_BLK_DEV_NBD is not set 382 + # CONFIG_BLK_DEV_SX8 is not set 383 + # CONFIG_BLK_DEV_RAM is not set 384 + # CONFIG_CDROM_PKTCDVD is not set 385 + # CONFIG_ATA_OVER_ETH is not set 386 + # CONFIG_BLK_DEV_RBD is not set 387 + # CONFIG_SENSORS_LIS3LV02D is not set 388 + CONFIG_MISC_DEVICES=y 389 + # CONFIG_PHANTOM is not set 390 + # CONFIG_SGI_IOC4 is not set 391 + # CONFIG_TIFM_CORE is not set 392 + # CONFIG_ENCLOSURE_SERVICES is not set 393 + # CONFIG_HP_ILO is not set 394 + # CONFIG_PCH_PHUB is not set 395 + # CONFIG_C2PORT is not set 396 + 397 + # 398 + # EEPROM support 399 + # 400 + # CONFIG_EEPROM_93CX6 is not set 401 + # CONFIG_CB710_CORE is not set 402 + 403 + # 404 + # Texas Instruments shared transport line discipline 405 + # 406 + 407 + # 408 + # SCSI device support 409 + # 410 + CONFIG_SCSI_MOD=y 411 + # CONFIG_RAID_ATTRS is not set 412 + CONFIG_SCSI=y 413 + CONFIG_SCSI_DMA=y 414 + # CONFIG_SCSI_TGT is not set 415 + # CONFIG_SCSI_NETLINK is not set 416 + CONFIG_SCSI_PROC_FS=y 417 + 418 + # 419 + # SCSI support type (disk, tape, CD-ROM) 420 + # 421 + CONFIG_BLK_DEV_SD=y 422 + # CONFIG_CHR_DEV_ST is not set 423 + # CONFIG_CHR_DEV_OSST is not set 424 + # CONFIG_BLK_DEV_SR is not set 425 + # CONFIG_CHR_DEV_SG is not set 426 + # CONFIG_CHR_DEV_SCH is not set 427 + # CONFIG_SCSI_MULTI_LUN is not set 428 + CONFIG_SCSI_CONSTANTS=y 429 + CONFIG_SCSI_LOGGING=y 430 + # CONFIG_SCSI_SCAN_ASYNC is not set 431 + CONFIG_SCSI_WAIT_SCAN=m 432 + 433 + # 434 + # SCSI Transports 435 + # 436 + # CONFIG_SCSI_SPI_ATTRS is not set 437 + # CONFIG_SCSI_FC_ATTRS is not set 438 + # CONFIG_SCSI_ISCSI_ATTRS is not set 439 + # CONFIG_SCSI_SAS_ATTRS is not set 440 + # CONFIG_SCSI_SAS_LIBSAS is not set 441 + # CONFIG_SCSI_SRP_ATTRS is not set 442 + CONFIG_SCSI_LOWLEVEL=y 443 + # CONFIG_ISCSI_TCP is not set 444 + # CONFIG_ISCSI_BOOT_SYSFS is not set 445 + # CONFIG_SCSI_CXGB3_ISCSI is not set 446 + # CONFIG_SCSI_CXGB4_ISCSI is not set 447 + # CONFIG_SCSI_BNX2_ISCSI is not set 448 + # CONFIG_SCSI_BNX2X_FCOE is not set 449 + # CONFIG_BE2ISCSI is not set 450 + # CONFIG_BLK_DEV_3W_XXXX_RAID is not set 451 + # CONFIG_SCSI_HPSA is not set 452 + # CONFIG_SCSI_3W_9XXX is not set 453 + # CONFIG_SCSI_3W_SAS is not set 454 + # CONFIG_SCSI_ACARD is not set 455 + # CONFIG_SCSI_AACRAID is not set 456 + # CONFIG_SCSI_AIC7XXX is not set 457 + # CONFIG_SCSI_AIC7XXX_OLD is not set 458 + # CONFIG_SCSI_AIC79XX is not set 459 + # CONFIG_SCSI_AIC94XX is not set 460 + # CONFIG_SCSI_MVSAS is not set 461 + # CONFIG_SCSI_DPT_I2O is not set 462 + # CONFIG_SCSI_ADVANSYS is not set 463 + # CONFIG_SCSI_ARCMSR is not set 464 + # CONFIG_MEGARAID_NEWGEN is not set 465 + # CONFIG_MEGARAID_LEGACY is not set 466 + # CONFIG_MEGARAID_SAS is not set 467 + # CONFIG_SCSI_MPT2SAS is not set 468 + # CONFIG_SCSI_HPTIOP is not set 469 + # CONFIG_LIBFC is not set 470 + # CONFIG_LIBFCOE is not set 471 + # CONFIG_FCOE is not set 472 + # CONFIG_SCSI_DMX3191D is not set 473 + # CONFIG_SCSI_FUTURE_DOMAIN is not set 474 + # CONFIG_SCSI_IPS is not set 475 + # CONFIG_SCSI_INITIO is not set 476 + # CONFIG_SCSI_INIA100 is not set 477 + # CONFIG_SCSI_STEX is not set 478 + # CONFIG_SCSI_SYM53C8XX_2 is not set 479 + # CONFIG_SCSI_QLOGIC_1280 is not set 480 + # CONFIG_SCSI_QLA_FC is not set 481 + # CONFIG_SCSI_QLA_ISCSI is not set 482 + # CONFIG_SCSI_LPFC is not set 483 + # CONFIG_SCSI_DC395x is not set 484 + # CONFIG_SCSI_DC390T is not set 485 + # CONFIG_SCSI_NSP32 is not set 486 + # CONFIG_SCSI_DEBUG is not set 487 + # CONFIG_SCSI_PMCRAID is not set 488 + # CONFIG_SCSI_PM8001 is not set 489 + # CONFIG_SCSI_SRP is not set 490 + # CONFIG_SCSI_BFA_FC is not set 491 + # CONFIG_SCSI_LOWLEVEL_PCMCIA is not set 492 + # CONFIG_SCSI_DH is not set 493 + # CONFIG_SCSI_OSD_INITIATOR is not set 494 + # CONFIG_ATA is not set 495 + # CONFIG_MD is not set 496 + # CONFIG_TARGET_CORE is not set 497 + # CONFIG_FUSION is not set 498 + 499 + # 500 + # IEEE 1394 (FireWire) support 501 + # 502 + # CONFIG_FIREWIRE is not set 503 + # CONFIG_FIREWIRE_NOSY is not set 504 + # CONFIG_I2O is not set 505 + CONFIG_NETDEVICES=y 506 + # CONFIG_DUMMY is not set 507 + # CONFIG_BONDING is not set 508 + # CONFIG_MACVLAN is not set 509 + # CONFIG_EQUALIZER is not set 510 + CONFIG_TUN=y 511 + # CONFIG_VETH is not set 512 + # CONFIG_ARCNET is not set 513 + # CONFIG_MII is not set 514 + # CONFIG_PHYLIB is not set 515 + # CONFIG_NET_ETHERNET is not set 516 + CONFIG_NETDEV_1000=y 517 + # CONFIG_ACENIC is not set 518 + # CONFIG_DL2K is not set 519 + # CONFIG_E1000 is not set 520 + # CONFIG_E1000E is not set 521 + # CONFIG_IP1000 is not set 522 + # CONFIG_IGB is not set 523 + # CONFIG_IGBVF is not set 524 + # CONFIG_NS83820 is not set 525 + # CONFIG_HAMACHI is not set 526 + # CONFIG_YELLOWFIN is not set 527 + # CONFIG_R8169 is not set 528 + # CONFIG_SIS190 is not set 529 + # CONFIG_SKGE is not set 530 + # CONFIG_SKY2 is not set 531 + # CONFIG_VIA_VELOCITY is not set 532 + # CONFIG_TIGON3 is not set 533 + # CONFIG_BNX2 is not set 534 + # CONFIG_CNIC is not set 535 + # CONFIG_QLA3XXX is not set 536 + # CONFIG_ATL1 is not set 537 + # CONFIG_ATL1E is not set 538 + # CONFIG_ATL1C is not set 539 + # CONFIG_JME is not set 540 + # CONFIG_STMMAC_ETH is not set 541 + # CONFIG_PCH_GBE is not set 542 + # CONFIG_NETDEV_10000 is not set 543 + # CONFIG_TR is not set 544 + # CONFIG_WLAN is not set 545 + 546 + # 547 + # Enable WiMAX (Networking options) to see the WiMAX drivers 548 + # 549 + # CONFIG_WAN is not set 550 + 551 + # 552 + # CAIF transport drivers 553 + # 554 + CONFIG_TILE_NET=y 555 + # CONFIG_FDDI is not set 556 + # CONFIG_HIPPI is not set 557 + # CONFIG_PPP is not set 558 + # CONFIG_SLIP is not set 559 + # CONFIG_NET_FC is not set 560 + # CONFIG_NETCONSOLE is not set 561 + # CONFIG_NETPOLL is not set 562 + # CONFIG_NET_POLL_CONTROLLER is not set 563 + # CONFIG_VMXNET3 is not set 564 + # CONFIG_ISDN is not set 565 + # CONFIG_PHONE is not set 566 + 567 + # 568 + # Input device support 569 + # 570 + CONFIG_INPUT=y 571 + # CONFIG_INPUT_FF_MEMLESS is not set 572 + # CONFIG_INPUT_POLLDEV is not set 573 + # CONFIG_INPUT_SPARSEKMAP is not set 574 + 575 + # 576 + # Userland interfaces 577 + # 578 + # CONFIG_INPUT_MOUSEDEV is not set 579 + # CONFIG_INPUT_JOYDEV is not set 580 + # CONFIG_INPUT_EVDEV is not set 581 + # CONFIG_INPUT_EVBUG is not set 582 + 583 + # 584 + # Input Device Drivers 585 + # 586 + # CONFIG_INPUT_KEYBOARD is not set 587 + # CONFIG_INPUT_MOUSE is not set 588 + # CONFIG_INPUT_JOYSTICK is not set 589 + # CONFIG_INPUT_TABLET is not set 590 + # CONFIG_INPUT_TOUCHSCREEN is not set 591 + # CONFIG_INPUT_MISC is not set 592 + 593 + # 594 + # Hardware I/O ports 595 + # 596 + # CONFIG_SERIO is not set 597 + # CONFIG_GAMEPORT is not set 598 + 599 + # 600 + # Character devices 601 + # 602 + # CONFIG_VT is not set 603 + CONFIG_UNIX98_PTYS=y 604 + # CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set 605 + # CONFIG_LEGACY_PTYS is not set 606 + # CONFIG_SERIAL_NONSTANDARD is not set 607 + # CONFIG_NOZOMI is not set 608 + # CONFIG_N_GSM is not set 609 + CONFIG_DEVKMEM=y 610 + 611 + # 612 + # Serial drivers 613 + # 614 + # CONFIG_SERIAL_8250 is not set 615 + 616 + # 617 + # Non-8250 serial port support 618 + # 619 + # CONFIG_SERIAL_MFD_HSU is not set 620 + # CONFIG_SERIAL_JSM is not set 621 + # CONFIG_SERIAL_TIMBERDALE is not set 622 + # CONFIG_SERIAL_ALTERA_JTAGUART is not set 623 + # CONFIG_SERIAL_ALTERA_UART is not set 624 + # CONFIG_SERIAL_PCH_UART is not set 625 + # CONFIG_TTY_PRINTK is not set 626 + CONFIG_HVC_DRIVER=y 627 + # CONFIG_IPMI_HANDLER is not set 628 + # CONFIG_HW_RANDOM is not set 629 + # CONFIG_R3964 is not set 630 + # CONFIG_APPLICOM is not set 631 + 632 + # 633 + # PCMCIA character devices 634 + # 635 + # CONFIG_RAW_DRIVER is not set 636 + # CONFIG_TCG_TPM is not set 637 + CONFIG_DEVPORT=y 638 + # CONFIG_RAMOOPS is not set 639 + # CONFIG_I2C is not set 640 + # CONFIG_SPI is not set 641 + 642 + # 643 + # PPS support 644 + # 645 + # CONFIG_PPS is not set 646 + 647 + # 648 + # PPS generators support 649 + # 650 + # CONFIG_W1 is not set 651 + # CONFIG_POWER_SUPPLY is not set 652 + CONFIG_HWMON=y 653 + # CONFIG_HWMON_VID is not set 654 + # CONFIG_HWMON_DEBUG_CHIP is not set 655 + 656 + # 657 + # Native drivers 658 + # 659 + # CONFIG_SENSORS_I5K_AMB is not set 660 + # CONFIG_SENSORS_F71805F is not set 661 + # CONFIG_SENSORS_F71882FG is not set 662 + # CONFIG_SENSORS_IT87 is not set 663 + # CONFIG_SENSORS_PC87360 is not set 664 + # CONFIG_SENSORS_PC87427 is not set 665 + # CONFIG_SENSORS_SIS5595 is not set 666 + # CONFIG_SENSORS_SMSC47M1 is not set 667 + # CONFIG_SENSORS_SMSC47B397 is not set 668 + # CONFIG_SENSORS_SCH5627 is not set 669 + # CONFIG_SENSORS_VIA686A is not set 670 + # CONFIG_SENSORS_VT1211 is not set 671 + # CONFIG_SENSORS_VT8231 is not set 672 + # CONFIG_SENSORS_W83627HF is not set 673 + # CONFIG_SENSORS_W83627EHF is not set 674 + # CONFIG_THERMAL is not set 675 + CONFIG_WATCHDOG=y 676 + CONFIG_WATCHDOG_NOWAYOUT=y 677 + 678 + # 679 + # Watchdog Device Drivers 680 + # 681 + # CONFIG_SOFT_WATCHDOG is not set 682 + # CONFIG_ALIM7101_WDT is not set 683 + 684 + # 685 + # PCI-based Watchdog Cards 686 + # 687 + # CONFIG_PCIPCWATCHDOG is not set 688 + # CONFIG_WDTPCI is not set 689 + CONFIG_SSB_POSSIBLE=y 690 + 691 + # 692 + # Sonics Silicon Backplane 693 + # 694 + # CONFIG_SSB is not set 695 + CONFIG_MFD_SUPPORT=y 696 + # CONFIG_MFD_CORE is not set 697 + # CONFIG_MFD_SM501 is not set 698 + # CONFIG_HTC_PASIC3 is not set 699 + # CONFIG_MFD_TMIO is not set 700 + # CONFIG_ABX500_CORE is not set 701 + # CONFIG_LPC_SCH is not set 702 + # CONFIG_MFD_RDC321X is not set 703 + # CONFIG_MFD_JANZ_CMODIO is not set 704 + # CONFIG_MFD_VX855 is not set 705 + # CONFIG_REGULATOR is not set 706 + # CONFIG_MEDIA_SUPPORT is not set 707 + 708 + # 709 + # Graphics support 710 + # 711 + CONFIG_VGA_ARB=y 712 + CONFIG_VGA_ARB_MAX_GPUS=16 713 + # CONFIG_DRM is not set 714 + # CONFIG_STUB_POULSBO is not set 715 + # CONFIG_VGASTATE is not set 716 + # CONFIG_VIDEO_OUTPUT_CONTROL is not set 717 + # CONFIG_FB is not set 718 + # CONFIG_BACKLIGHT_LCD_SUPPORT is not set 719 + 720 + # 721 + # Display device support 722 + # 723 + # CONFIG_DISPLAY_SUPPORT is not set 724 + # CONFIG_SOUND is not set 725 + # CONFIG_HID_SUPPORT is not set 726 + CONFIG_USB_SUPPORT=y 727 + CONFIG_USB_ARCH_HAS_HCD=y 728 + CONFIG_USB_ARCH_HAS_OHCI=y 729 + CONFIG_USB_ARCH_HAS_EHCI=y 730 + # CONFIG_USB is not set 731 + # CONFIG_USB_OTG_WHITELIST is not set 732 + # CONFIG_USB_OTG_BLACKLIST_HUB is not set 733 + 734 + # 735 + # Enable Host or Gadget support to see Inventra options 736 + # 737 + 738 + # 739 + # NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may 740 + # 741 + # CONFIG_USB_GADGET is not set 742 + 743 + # 744 + # OTG and related infrastructure 745 + # 746 + # CONFIG_UWB is not set 747 + # CONFIG_MMC is not set 748 + # CONFIG_MEMSTICK is not set 749 + # CONFIG_NEW_LEDS is not set 750 + # CONFIG_NFC_DEVICES is not set 751 + # CONFIG_ACCESSIBILITY is not set 752 + # CONFIG_INFINIBAND is not set 753 + CONFIG_EDAC=y 754 + 755 + # 756 + # Reporting subsystems 757 + # 758 + # CONFIG_EDAC_DEBUG is not set 759 + CONFIG_EDAC_MM_EDAC=y 760 + CONFIG_EDAC_TILE=y 761 + CONFIG_RTC_LIB=y 762 + CONFIG_RTC_CLASS=y 763 + CONFIG_RTC_HCTOSYS=y 764 + CONFIG_RTC_HCTOSYS_DEVICE="rtc0" 765 + # CONFIG_RTC_DEBUG is not set 766 + 767 + # 768 + # RTC interfaces 769 + # 770 + # CONFIG_RTC_INTF_SYSFS is not set 771 + # CONFIG_RTC_INTF_PROC is not set 772 + CONFIG_RTC_INTF_DEV=y 773 + # CONFIG_RTC_INTF_DEV_UIE_EMUL is not set 774 + # CONFIG_RTC_DRV_TEST is not set 775 + 776 + # 777 + # SPI RTC drivers 778 + # 779 + 780 + # 781 + # Platform RTC drivers 782 + # 783 + # CONFIG_RTC_DRV_DS1286 is not set 784 + # CONFIG_RTC_DRV_DS1511 is not set 785 + # CONFIG_RTC_DRV_DS1553 is not set 786 + # CONFIG_RTC_DRV_DS1742 is not set 787 + # CONFIG_RTC_DRV_STK17TA8 is not set 788 + # CONFIG_RTC_DRV_M48T86 is not set 789 + # CONFIG_RTC_DRV_M48T35 is not set 790 + # CONFIG_RTC_DRV_M48T59 is not set 791 + # CONFIG_RTC_DRV_MSM6242 is not set 792 + # CONFIG_RTC_DRV_BQ4802 is not set 793 + # CONFIG_RTC_DRV_RP5C01 is not set 794 + # CONFIG_RTC_DRV_V3020 is not set 795 + 796 + # 797 + # on-CPU RTC drivers 798 + # 799 + CONFIG_RTC_DRV_TILE=y 800 + # CONFIG_DMADEVICES is not set 801 + # CONFIG_AUXDISPLAY is not set 802 + # CONFIG_UIO is not set 803 + # CONFIG_STAGING is not set 804 + 805 + # 806 + # File systems 807 + # 808 + CONFIG_EXT2_FS=y 809 + # CONFIG_EXT2_FS_XATTR is not set 810 + # CONFIG_EXT2_FS_XIP is not set 811 + CONFIG_EXT3_FS=y 812 + # CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set 813 + CONFIG_EXT3_FS_XATTR=y 814 + # CONFIG_EXT3_FS_POSIX_ACL is not set 815 + # CONFIG_EXT3_FS_SECURITY is not set 816 + # CONFIG_EXT4_FS is not set 817 + CONFIG_JBD=y 818 + CONFIG_FS_MBCACHE=y 819 + # CONFIG_REISERFS_FS is not set 820 + # CONFIG_JFS_FS is not set 821 + # CONFIG_XFS_FS is not set 822 + # CONFIG_GFS2_FS is not set 823 + # CONFIG_BTRFS_FS is not set 824 + # CONFIG_NILFS2_FS is not set 825 + # CONFIG_FS_POSIX_ACL is not set 826 + CONFIG_EXPORTFS=y 827 + CONFIG_FILE_LOCKING=y 828 + CONFIG_FSNOTIFY=y 829 + CONFIG_DNOTIFY=y 830 + CONFIG_INOTIFY_USER=y 831 + # CONFIG_FANOTIFY is not set 832 + # CONFIG_QUOTA is not set 833 + # CONFIG_QUOTACTL is not set 834 + # CONFIG_AUTOFS4_FS is not set 835 + CONFIG_FUSE_FS=y 836 + # CONFIG_CUSE is not set 837 + 838 + # 839 + # Caches 840 + # 841 + # CONFIG_FSCACHE is not set 842 + 843 + # 844 + # CD-ROM/DVD Filesystems 845 + # 846 + # CONFIG_ISO9660_FS is not set 847 + # CONFIG_UDF_FS is not set 848 + 849 + # 850 + # DOS/FAT/NT Filesystems 851 + # 852 + CONFIG_FAT_FS=y 853 + CONFIG_MSDOS_FS=y 854 + CONFIG_VFAT_FS=m 855 + CONFIG_FAT_DEFAULT_CODEPAGE=437 856 + CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" 857 + # CONFIG_NTFS_FS is not set 858 + 859 + # 860 + # Pseudo filesystems 861 + # 862 + CONFIG_PROC_FS=y 863 + # CONFIG_PROC_KCORE is not set 864 + CONFIG_PROC_SYSCTL=y 865 + CONFIG_PROC_PAGE_MONITOR=y 866 + CONFIG_SYSFS=y 867 + CONFIG_TMPFS=y 868 + # CONFIG_TMPFS_POSIX_ACL is not set 869 + CONFIG_HUGETLBFS=y 870 + CONFIG_HUGETLB_PAGE=y 871 + # CONFIG_CONFIGFS_FS is not set 872 + CONFIG_MISC_FILESYSTEMS=y 873 + # CONFIG_ADFS_FS is not set 874 + # CONFIG_AFFS_FS is not set 875 + # CONFIG_HFS_FS is not set 876 + # CONFIG_HFSPLUS_FS is not set 877 + # CONFIG_BEFS_FS is not set 878 + # CONFIG_BFS_FS is not set 879 + # CONFIG_EFS_FS is not set 880 + # CONFIG_LOGFS is not set 881 + # CONFIG_CRAMFS is not set 882 + # CONFIG_SQUASHFS is not set 883 + # CONFIG_VXFS_FS is not set 884 + # CONFIG_MINIX_FS is not set 885 + # CONFIG_OMFS_FS is not set 886 + # CONFIG_HPFS_FS is not set 887 + # CONFIG_QNX4FS_FS is not set 888 + # CONFIG_ROMFS_FS is not set 889 + # CONFIG_PSTORE is not set 890 + # CONFIG_SYSV_FS is not set 891 + # CONFIG_UFS_FS is not set 892 + CONFIG_NETWORK_FILESYSTEMS=y 893 + CONFIG_NFS_FS=m 894 + CONFIG_NFS_V3=y 895 + # CONFIG_NFS_V3_ACL is not set 896 + # CONFIG_NFS_V4 is not set 897 + # CONFIG_NFSD is not set 898 + CONFIG_LOCKD=m 899 + CONFIG_LOCKD_V4=y 900 + CONFIG_NFS_COMMON=y 901 + CONFIG_SUNRPC=m 902 + # CONFIG_RPCSEC_GSS_KRB5 is not set 903 + # CONFIG_CEPH_FS is not set 904 + # CONFIG_CIFS is not set 905 + # CONFIG_NCP_FS is not set 906 + # CONFIG_CODA_FS is not set 907 + # CONFIG_AFS_FS is not set 908 + 909 + # 910 + # Partition Types 911 + # 912 + # CONFIG_PARTITION_ADVANCED is not set 913 + CONFIG_MSDOS_PARTITION=y 914 + CONFIG_NLS=y 915 + CONFIG_NLS_DEFAULT="iso8859-1" 916 + CONFIG_NLS_CODEPAGE_437=y 917 + # CONFIG_NLS_CODEPAGE_737 is not set 918 + # CONFIG_NLS_CODEPAGE_775 is not set 919 + # CONFIG_NLS_CODEPAGE_850 is not set 920 + # CONFIG_NLS_CODEPAGE_852 is not set 921 + # CONFIG_NLS_CODEPAGE_855 is not set 922 + # CONFIG_NLS_CODEPAGE_857 is not set 923 + # CONFIG_NLS_CODEPAGE_860 is not set 924 + # CONFIG_NLS_CODEPAGE_861 is not set 925 + # CONFIG_NLS_CODEPAGE_862 is not set 926 + # CONFIG_NLS_CODEPAGE_863 is not set 927 + # CONFIG_NLS_CODEPAGE_864 is not set 928 + # CONFIG_NLS_CODEPAGE_865 is not set 929 + # CONFIG_NLS_CODEPAGE_866 is not set 930 + # CONFIG_NLS_CODEPAGE_869 is not set 931 + # CONFIG_NLS_CODEPAGE_936 is not set 932 + # CONFIG_NLS_CODEPAGE_950 is not set 933 + # CONFIG_NLS_CODEPAGE_932 is not set 934 + # CONFIG_NLS_CODEPAGE_949 is not set 935 + # CONFIG_NLS_CODEPAGE_874 is not set 936 + # CONFIG_NLS_ISO8859_8 is not set 937 + # CONFIG_NLS_CODEPAGE_1250 is not set 938 + # CONFIG_NLS_CODEPAGE_1251 is not set 939 + # CONFIG_NLS_ASCII is not set 940 + CONFIG_NLS_ISO8859_1=y 941 + # CONFIG_NLS_ISO8859_2 is not set 942 + # CONFIG_NLS_ISO8859_3 is not set 943 + # CONFIG_NLS_ISO8859_4 is not set 944 + # CONFIG_NLS_ISO8859_5 is not set 945 + # CONFIG_NLS_ISO8859_6 is not set 946 + # CONFIG_NLS_ISO8859_7 is not set 947 + # CONFIG_NLS_ISO8859_9 is not set 948 + # CONFIG_NLS_ISO8859_13 is not set 949 + # CONFIG_NLS_ISO8859_14 is not set 950 + # CONFIG_NLS_ISO8859_15 is not set 951 + # CONFIG_NLS_KOI8_R is not set 952 + # CONFIG_NLS_KOI8_U is not set 953 + # CONFIG_NLS_UTF8 is not set 954 + 955 + # 956 + # Kernel hacking 957 + # 958 + # CONFIG_PRINTK_TIME is not set 959 + CONFIG_DEFAULT_MESSAGE_LOGLEVEL=4 960 + CONFIG_ENABLE_WARN_DEPRECATED=y 961 + CONFIG_ENABLE_MUST_CHECK=y 962 + CONFIG_FRAME_WARN=2048 963 + CONFIG_MAGIC_SYSRQ=y 964 + # CONFIG_STRIP_ASM_SYMS is not set 965 + # CONFIG_UNUSED_SYMBOLS is not set 966 + # CONFIG_DEBUG_FS is not set 967 + # CONFIG_HEADERS_CHECK is not set 968 + # CONFIG_DEBUG_SECTION_MISMATCH is not set 969 + CONFIG_DEBUG_KERNEL=y 970 + # CONFIG_DEBUG_SHIRQ is not set 971 + # CONFIG_LOCKUP_DETECTOR is not set 972 + # CONFIG_HARDLOCKUP_DETECTOR is not set 973 + CONFIG_DETECT_HUNG_TASK=y 974 + # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set 975 + CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0 976 + CONFIG_SCHED_DEBUG=y 977 + # CONFIG_SCHEDSTATS is not set 978 + # CONFIG_TIMER_STATS is not set 979 + # CONFIG_DEBUG_OBJECTS is not set 980 + # CONFIG_SLUB_DEBUG_ON is not set 981 + # CONFIG_SLUB_STATS is not set 982 + # CONFIG_DEBUG_KMEMLEAK is not set 983 + # CONFIG_DEBUG_RT_MUTEXES is not set 984 + # CONFIG_RT_MUTEX_TESTER is not set 985 + # CONFIG_DEBUG_SPINLOCK is not set 986 + # CONFIG_DEBUG_MUTEXES is not set 987 + # CONFIG_DEBUG_LOCK_ALLOC is not set 988 + # CONFIG_PROVE_LOCKING is not set 989 + # CONFIG_SPARSE_RCU_POINTER is not set 990 + # CONFIG_LOCK_STAT is not set 991 + CONFIG_DEBUG_SPINLOCK_SLEEP=y 992 + # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set 993 + CONFIG_STACKTRACE=y 994 + # CONFIG_DEBUG_KOBJECT is not set 995 + # CONFIG_DEBUG_HIGHMEM is not set 996 + CONFIG_DEBUG_INFO=y 997 + # CONFIG_DEBUG_INFO_REDUCED is not set 998 + CONFIG_DEBUG_VM=y 999 + # CONFIG_DEBUG_WRITECOUNT is not set 1000 + # CONFIG_DEBUG_MEMORY_INIT is not set 1001 + # CONFIG_DEBUG_LIST is not set 1002 + # CONFIG_TEST_LIST_SORT is not set 1003 + # CONFIG_DEBUG_SG is not set 1004 + # CONFIG_DEBUG_NOTIFIERS is not set 1005 + # CONFIG_DEBUG_CREDENTIALS is not set 1006 + # CONFIG_RCU_TORTURE_TEST is not set 1007 + # CONFIG_RCU_CPU_STALL_DETECTOR is not set 1008 + # CONFIG_BACKTRACE_SELF_TEST is not set 1009 + # CONFIG_DEBUG_BLOCK_EXT_DEVT is not set 1010 + # CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set 1011 + # CONFIG_FAULT_INJECTION is not set 1012 + # CONFIG_SYSCTL_SYSCALL_CHECK is not set 1013 + # CONFIG_DEBUG_PAGEALLOC is not set 1014 + CONFIG_TRACING_SUPPORT=y 1015 + CONFIG_FTRACE=y 1016 + # CONFIG_IRQSOFF_TRACER is not set 1017 + # CONFIG_SCHED_TRACER is not set 1018 + # CONFIG_ENABLE_DEFAULT_TRACERS is not set 1019 + CONFIG_BRANCH_PROFILE_NONE=y 1020 + # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set 1021 + # CONFIG_PROFILE_ALL_BRANCHES is not set 1022 + # CONFIG_BLK_DEV_IO_TRACE is not set 1023 + # CONFIG_ATOMIC64_SELFTEST is not set 1024 + # CONFIG_SAMPLES is not set 1025 + # CONFIG_TEST_KSTRTOX is not set 1026 + CONFIG_EARLY_PRINTK=y 1027 + CONFIG_DEBUG_STACKOVERFLOW=y 1028 + # CONFIG_DEBUG_STACK_USAGE is not set 1029 + CONFIG_DEBUG_EXTRA_FLAGS="-femit-struct-debug-baseonly" 1030 + 1031 + # 1032 + # Security options 1033 + # 1034 + # CONFIG_KEYS is not set 1035 + # CONFIG_SECURITY_DMESG_RESTRICT is not set 1036 + # CONFIG_SECURITY is not set 1037 + # CONFIG_SECURITYFS is not set 1038 + CONFIG_DEFAULT_SECURITY_DAC=y 1039 + CONFIG_DEFAULT_SECURITY="" 1040 + CONFIG_CRYPTO=y 1041 + 1042 + # 1043 + # Crypto core or helper 1044 + # 1045 + # CONFIG_CRYPTO_FIPS is not set 1046 + CONFIG_CRYPTO_ALGAPI=m 1047 + CONFIG_CRYPTO_ALGAPI2=m 1048 + CONFIG_CRYPTO_RNG=m 1049 + CONFIG_CRYPTO_RNG2=m 1050 + # CONFIG_CRYPTO_MANAGER is not set 1051 + # CONFIG_CRYPTO_MANAGER2 is not set 1052 + # CONFIG_CRYPTO_GF128MUL is not set 1053 + # CONFIG_CRYPTO_NULL is not set 1054 + # CONFIG_CRYPTO_PCRYPT is not set 1055 + # CONFIG_CRYPTO_CRYPTD is not set 1056 + # CONFIG_CRYPTO_AUTHENC is not set 1057 + # CONFIG_CRYPTO_TEST is not set 1058 + 1059 + # 1060 + # Authenticated Encryption with Associated Data 1061 + # 1062 + # CONFIG_CRYPTO_CCM is not set 1063 + # CONFIG_CRYPTO_GCM is not set 1064 + # CONFIG_CRYPTO_SEQIV is not set 1065 + 1066 + # 1067 + # Block modes 1068 + # 1069 + # CONFIG_CRYPTO_CBC is not set 1070 + # CONFIG_CRYPTO_CTR is not set 1071 + # CONFIG_CRYPTO_CTS is not set 1072 + # CONFIG_CRYPTO_ECB is not set 1073 + # CONFIG_CRYPTO_LRW is not set 1074 + # CONFIG_CRYPTO_PCBC is not set 1075 + # CONFIG_CRYPTO_XTS is not set 1076 + 1077 + # 1078 + # Hash modes 1079 + # 1080 + # CONFIG_CRYPTO_HMAC is not set 1081 + # CONFIG_CRYPTO_XCBC is not set 1082 + # CONFIG_CRYPTO_VMAC is not set 1083 + 1084 + # 1085 + # Digest 1086 + # 1087 + # CONFIG_CRYPTO_CRC32C is not set 1088 + # CONFIG_CRYPTO_GHASH is not set 1089 + # CONFIG_CRYPTO_MD4 is not set 1090 + # CONFIG_CRYPTO_MD5 is not set 1091 + # CONFIG_CRYPTO_MICHAEL_MIC is not set 1092 + # CONFIG_CRYPTO_RMD128 is not set 1093 + # CONFIG_CRYPTO_RMD160 is not set 1094 + # CONFIG_CRYPTO_RMD256 is not set 1095 + # CONFIG_CRYPTO_RMD320 is not set 1096 + # CONFIG_CRYPTO_SHA1 is not set 1097 + # CONFIG_CRYPTO_SHA256 is not set 1098 + # CONFIG_CRYPTO_SHA512 is not set 1099 + # CONFIG_CRYPTO_TGR192 is not set 1100 + # CONFIG_CRYPTO_WP512 is not set 1101 + 1102 + # 1103 + # Ciphers 1104 + # 1105 + CONFIG_CRYPTO_AES=m 1106 + # CONFIG_CRYPTO_ANUBIS is not set 1107 + # CONFIG_CRYPTO_ARC4 is not set 1108 + # CONFIG_CRYPTO_BLOWFISH is not set 1109 + # CONFIG_CRYPTO_CAMELLIA is not set 1110 + # CONFIG_CRYPTO_CAST5 is not set 1111 + # CONFIG_CRYPTO_CAST6 is not set 1112 + # CONFIG_CRYPTO_DES is not set 1113 + # CONFIG_CRYPTO_FCRYPT is not set 1114 + # CONFIG_CRYPTO_KHAZAD is not set 1115 + # CONFIG_CRYPTO_SALSA20 is not set 1116 + # CONFIG_CRYPTO_SEED is not set 1117 + # CONFIG_CRYPTO_SERPENT is not set 1118 + # CONFIG_CRYPTO_TEA is not set 1119 + # CONFIG_CRYPTO_TWOFISH is not set 1120 + 1121 + # 1122 + # Compression 1123 + # 1124 + # CONFIG_CRYPTO_DEFLATE is not set 1125 + # CONFIG_CRYPTO_ZLIB is not set 1126 + # CONFIG_CRYPTO_LZO is not set 1127 + 1128 + # 1129 + # Random Number Generation 1130 + # 1131 + CONFIG_CRYPTO_ANSI_CPRNG=m 1132 + # CONFIG_CRYPTO_USER_API_HASH is not set 1133 + # CONFIG_CRYPTO_USER_API_SKCIPHER is not set 1134 + CONFIG_CRYPTO_HW=y 1135 + # CONFIG_CRYPTO_DEV_HIFN_795X is not set 1136 + # CONFIG_BINARY_PRINTF is not set 1137 + 1138 + # 1139 + # Library routines 1140 + # 1141 + CONFIG_BITREVERSE=y 1142 + CONFIG_GENERIC_FIND_FIRST_BIT=y 1143 + CONFIG_GENERIC_FIND_NEXT_BIT=y 1144 + CONFIG_GENERIC_FIND_LAST_BIT=y 1145 + # CONFIG_CRC_CCITT is not set 1146 + # CONFIG_CRC16 is not set 1147 + # CONFIG_CRC_T10DIF is not set 1148 + # CONFIG_CRC_ITU_T is not set 1149 + CONFIG_CRC32=y 1150 + # CONFIG_CRC7 is not set 1151 + # CONFIG_LIBCRC32C is not set 1152 + CONFIG_ZLIB_INFLATE=y 1153 + # CONFIG_XZ_DEC is not set 1154 + # CONFIG_XZ_DEC_BCJ is not set 1155 + CONFIG_DECOMPRESS_GZIP=y 1156 + CONFIG_HAS_IOMEM=y 1157 + CONFIG_HAS_IOPORT=y 1158 + CONFIG_HAS_DMA=y 1159 + CONFIG_CPU_RMAP=y 1160 + CONFIG_NLATTR=y 1161 + # CONFIG_AVERAGE is not set 1162 + CONFIG_HAVE_KVM=y 1163 + # CONFIG_VIRTUALIZATION is not set
+258
arch/tile/include/arch/chip_tilegx.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + /* 16 + * @file 17 + * Global header file. 18 + * This header file specifies defines for TILE-Gx. 19 + */ 20 + 21 + #ifndef __ARCH_CHIP_H__ 22 + #define __ARCH_CHIP_H__ 23 + 24 + /** Specify chip version. 25 + * When possible, prefer the CHIP_xxx symbols below for future-proofing. 26 + * This is intended for cross-compiling; native compilation should 27 + * use the predefined __tile_chip__ symbol. 28 + */ 29 + #define TILE_CHIP 10 30 + 31 + /** Specify chip revision. 32 + * This provides for the case of a respin of a particular chip type; 33 + * the normal value for this symbol is "0". 34 + * This is intended for cross-compiling; native compilation should 35 + * use the predefined __tile_chip_rev__ symbol. 36 + */ 37 + #define TILE_CHIP_REV 0 38 + 39 + /** The name of this architecture. */ 40 + #define CHIP_ARCH_NAME "tilegx" 41 + 42 + /** The ELF e_machine type for binaries for this chip. */ 43 + #define CHIP_ELF_TYPE() EM_TILEGX 44 + 45 + /** The alternate ELF e_machine type for binaries for this chip. */ 46 + #define CHIP_COMPAT_ELF_TYPE() 0x2597 47 + 48 + /** What is the native word size of the machine? */ 49 + #define CHIP_WORD_SIZE() 64 50 + 51 + /** How many bits of a virtual address are used. Extra bits must be 52 + * the sign extension of the low bits. 53 + */ 54 + #define CHIP_VA_WIDTH() 42 55 + 56 + /** How many bits are in a physical address? */ 57 + #define CHIP_PA_WIDTH() 40 58 + 59 + /** Size of the L2 cache, in bytes. */ 60 + #define CHIP_L2_CACHE_SIZE() 262144 61 + 62 + /** Log size of an L2 cache line in bytes. */ 63 + #define CHIP_L2_LOG_LINE_SIZE() 6 64 + 65 + /** Size of an L2 cache line, in bytes. */ 66 + #define CHIP_L2_LINE_SIZE() (1 << CHIP_L2_LOG_LINE_SIZE()) 67 + 68 + /** Associativity of the L2 cache. */ 69 + #define CHIP_L2_ASSOC() 8 70 + 71 + /** Size of the L1 data cache, in bytes. */ 72 + #define CHIP_L1D_CACHE_SIZE() 32768 73 + 74 + /** Log size of an L1 data cache line in bytes. */ 75 + #define CHIP_L1D_LOG_LINE_SIZE() 6 76 + 77 + /** Size of an L1 data cache line, in bytes. */ 78 + #define CHIP_L1D_LINE_SIZE() (1 << CHIP_L1D_LOG_LINE_SIZE()) 79 + 80 + /** Associativity of the L1 data cache. */ 81 + #define CHIP_L1D_ASSOC() 2 82 + 83 + /** Size of the L1 instruction cache, in bytes. */ 84 + #define CHIP_L1I_CACHE_SIZE() 32768 85 + 86 + /** Log size of an L1 instruction cache line in bytes. */ 87 + #define CHIP_L1I_LOG_LINE_SIZE() 6 88 + 89 + /** Size of an L1 instruction cache line, in bytes. */ 90 + #define CHIP_L1I_LINE_SIZE() (1 << CHIP_L1I_LOG_LINE_SIZE()) 91 + 92 + /** Associativity of the L1 instruction cache. */ 93 + #define CHIP_L1I_ASSOC() 2 94 + 95 + /** Stride with which flush instructions must be issued. */ 96 + #define CHIP_FLUSH_STRIDE() CHIP_L2_LINE_SIZE() 97 + 98 + /** Stride with which inv instructions must be issued. */ 99 + #define CHIP_INV_STRIDE() CHIP_L2_LINE_SIZE() 100 + 101 + /** Stride with which finv instructions must be issued. */ 102 + #define CHIP_FINV_STRIDE() CHIP_L2_LINE_SIZE() 103 + 104 + /** Can the local cache coherently cache data that is homed elsewhere? */ 105 + #define CHIP_HAS_COHERENT_LOCAL_CACHE() 1 106 + 107 + /** How many simultaneous outstanding victims can the L2 cache have? */ 108 + #define CHIP_MAX_OUTSTANDING_VICTIMS() 128 109 + 110 + /** Does the TLB support the NC and NOALLOC bits? */ 111 + #define CHIP_HAS_NC_AND_NOALLOC_BITS() 1 112 + 113 + /** Does the chip support hash-for-home caching? */ 114 + #define CHIP_HAS_CBOX_HOME_MAP() 1 115 + 116 + /** Number of entries in the chip's home map tables. */ 117 + #define CHIP_CBOX_HOME_MAP_SIZE() 128 118 + 119 + /** Do uncacheable requests miss in the cache regardless of whether 120 + * there is matching data? */ 121 + #define CHIP_HAS_ENFORCED_UNCACHEABLE_REQUESTS() 1 122 + 123 + /** Does the mf instruction wait for victims? */ 124 + #define CHIP_HAS_MF_WAITS_FOR_VICTIMS() 0 125 + 126 + /** Does the chip have an "inv" instruction that doesn't also flush? */ 127 + #define CHIP_HAS_INV() 1 128 + 129 + /** Does the chip have a "wh64" instruction? */ 130 + #define CHIP_HAS_WH64() 1 131 + 132 + /** Does this chip have a 'dword_align' instruction? */ 133 + #define CHIP_HAS_DWORD_ALIGN() 0 134 + 135 + /** Number of performance counters. */ 136 + #define CHIP_PERFORMANCE_COUNTERS() 4 137 + 138 + /** Does this chip have auxiliary performance counters? */ 139 + #define CHIP_HAS_AUX_PERF_COUNTERS() 1 140 + 141 + /** Is the CBOX_MSR1 SPR supported? */ 142 + #define CHIP_HAS_CBOX_MSR1() 0 143 + 144 + /** Is the TILE_RTF_HWM SPR supported? */ 145 + #define CHIP_HAS_TILE_RTF_HWM() 1 146 + 147 + /** Is the TILE_WRITE_PENDING SPR supported? */ 148 + #define CHIP_HAS_TILE_WRITE_PENDING() 0 149 + 150 + /** Is the PROC_STATUS SPR supported? */ 151 + #define CHIP_HAS_PROC_STATUS_SPR() 1 152 + 153 + /** Is the DSTREAM_PF SPR supported? */ 154 + #define CHIP_HAS_DSTREAM_PF() 1 155 + 156 + /** Log of the number of mshims we have. */ 157 + #define CHIP_LOG_NUM_MSHIMS() 2 158 + 159 + /** Are the bases of the interrupt vector areas fixed? */ 160 + #define CHIP_HAS_FIXED_INTVEC_BASE() 0 161 + 162 + /** Are the interrupt masks split up into 2 SPRs? */ 163 + #define CHIP_HAS_SPLIT_INTR_MASK() 0 164 + 165 + /** Is the cycle count split up into 2 SPRs? */ 166 + #define CHIP_HAS_SPLIT_CYCLE() 0 167 + 168 + /** Does the chip have a static network? */ 169 + #define CHIP_HAS_SN() 0 170 + 171 + /** Does the chip have a static network processor? */ 172 + #define CHIP_HAS_SN_PROC() 0 173 + 174 + /** Size of the L1 static network processor instruction cache, in bytes. */ 175 + /* #define CHIP_L1SNI_CACHE_SIZE() -- does not apply to chip 10 */ 176 + 177 + /** Does the chip have DMA support in each tile? */ 178 + #define CHIP_HAS_TILE_DMA() 0 179 + 180 + /** Does the chip have the second revision of the directly accessible 181 + * dynamic networks? This encapsulates a number of characteristics, 182 + * including the absence of the catch-all, the absence of inline message 183 + * tags, the absence of support for network context-switching, and so on. 184 + */ 185 + #define CHIP_HAS_REV1_XDN() 1 186 + 187 + /** Does the chip have cmpexch and similar (fetchadd, exch, etc.)? */ 188 + #define CHIP_HAS_CMPEXCH() 1 189 + 190 + /** Does the chip have memory-mapped I/O support? */ 191 + #define CHIP_HAS_MMIO() 1 192 + 193 + /** Does the chip have post-completion interrupts? */ 194 + #define CHIP_HAS_POST_COMPLETION_INTERRUPTS() 1 195 + 196 + /** Does the chip have native single step support? */ 197 + #define CHIP_HAS_SINGLE_STEP() 1 198 + 199 + #ifndef __OPEN_SOURCE__ /* features only relevant to hypervisor-level code */ 200 + 201 + /** How many entries are present in the instruction TLB? */ 202 + #define CHIP_ITLB_ENTRIES() 16 203 + 204 + /** How many entries are present in the data TLB? */ 205 + #define CHIP_DTLB_ENTRIES() 32 206 + 207 + /** How many MAF entries does the XAUI shim have? */ 208 + #define CHIP_XAUI_MAF_ENTRIES() 32 209 + 210 + /** Does the memory shim have a source-id table? */ 211 + #define CHIP_HAS_MSHIM_SRCID_TABLE() 0 212 + 213 + /** Does the L1 instruction cache clear on reset? */ 214 + #define CHIP_HAS_L1I_CLEAR_ON_RESET() 1 215 + 216 + /** Does the chip come out of reset with valid coordinates on all tiles? 217 + * Note that if defined, this also implies that the upper left is 1,1. 218 + */ 219 + #define CHIP_HAS_VALID_TILE_COORD_RESET() 1 220 + 221 + /** Does the chip have unified packet formats? */ 222 + #define CHIP_HAS_UNIFIED_PACKET_FORMATS() 1 223 + 224 + /** Does the chip support write reordering? */ 225 + #define CHIP_HAS_WRITE_REORDERING() 1 226 + 227 + /** Does the chip support Y-X routing as well as X-Y? */ 228 + #define CHIP_HAS_Y_X_ROUTING() 1 229 + 230 + /** Is INTCTRL_3 managed with the correct MPL? */ 231 + #define CHIP_HAS_INTCTRL_3_STATUS_FIX() 1 232 + 233 + /** Is it possible to configure the chip to be big-endian? */ 234 + #define CHIP_HAS_BIG_ENDIAN_CONFIG() 1 235 + 236 + /** Is the CACHE_RED_WAY_OVERRIDDEN SPR supported? */ 237 + #define CHIP_HAS_CACHE_RED_WAY_OVERRIDDEN() 0 238 + 239 + /** Is the DIAG_TRACE_WAY SPR supported? */ 240 + #define CHIP_HAS_DIAG_TRACE_WAY() 0 241 + 242 + /** Is the MEM_STRIPE_CONFIG SPR supported? */ 243 + #define CHIP_HAS_MEM_STRIPE_CONFIG() 1 244 + 245 + /** Are the TLB_PERF SPRs supported? */ 246 + #define CHIP_HAS_TLB_PERF() 1 247 + 248 + /** Is the VDN_SNOOP_SHIM_CTL SPR supported? */ 249 + #define CHIP_HAS_VDN_SNOOP_SHIM_CTL() 0 250 + 251 + /** Does the chip support rev1 DMA packets? */ 252 + #define CHIP_HAS_REV1_DMA_PACKETS() 1 253 + 254 + /** Does the chip have an IPI shim? */ 255 + #define CHIP_HAS_IPI() 1 256 + 257 + #endif /* !__OPEN_SOURCE__ */ 258 + #endif /* __ARCH_CHIP_H__ */
+5 -6
arch/tile/include/arch/icache.h
··· 16 16 /** 17 17 * @file 18 18 * 19 - * Support for invalidating bytes in the instruction 19 + * Support for invalidating bytes in the instruction cache. 20 20 */ 21 21 22 22 #ifndef __ARCH_ICACHE_H__ ··· 30 30 * 31 31 * @param addr The start of memory to be invalidated. 32 32 * @param size The number of bytes to be invalidated. 33 - * @param page_size The system's page size, typically the PAGE_SIZE constant 34 - * in sys/page.h. This value must be a power of two no larger 35 - * than the page containing the code to be invalidated. If the value 36 - * is smaller than the actual page size, this function will still 37 - * work, but may run slower than necessary. 33 + * @param page_size The system's page size, e.g. getpagesize() in userspace. 34 + * This value must be a power of two no larger than the page containing 35 + * the code to be invalidated. If the value is smaller than the actual page 36 + * size, this function will still work, but may run slower than necessary. 38 37 */ 39 38 static __inline void 40 39 invalidate_icache(const void* addr, unsigned long size,
+276
arch/tile/include/arch/interrupts_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #ifndef __ARCH_INTERRUPTS_H__ 16 + #define __ARCH_INTERRUPTS_H__ 17 + 18 + /** Mask for an interrupt. */ 19 + #ifdef __ASSEMBLER__ 20 + /* Note: must handle breaking interrupts into high and low words manually. */ 21 + #define INT_MASK(intno) (1 << (intno)) 22 + #else 23 + #define INT_MASK(intno) (1ULL << (intno)) 24 + #endif 25 + 26 + 27 + /** Where a given interrupt executes */ 28 + #define INTERRUPT_VECTOR(i, pl) (0xFC000000 + ((pl) << 24) + ((i) << 8)) 29 + 30 + /** Where to store a vector for a given interrupt. */ 31 + #define USER_INTERRUPT_VECTOR(i) INTERRUPT_VECTOR(i, 0) 32 + 33 + /** The base address of user-level interrupts. */ 34 + #define USER_INTERRUPT_VECTOR_BASE INTERRUPT_VECTOR(0, 0) 35 + 36 + 37 + /** Additional synthetic interrupt. */ 38 + #define INT_BREAKPOINT (63) 39 + 40 + #define INT_MEM_ERROR 0 41 + #define INT_SINGLE_STEP_3 1 42 + #define INT_SINGLE_STEP_2 2 43 + #define INT_SINGLE_STEP_1 3 44 + #define INT_SINGLE_STEP_0 4 45 + #define INT_IDN_COMPLETE 5 46 + #define INT_UDN_COMPLETE 6 47 + #define INT_ITLB_MISS 7 48 + #define INT_ILL 8 49 + #define INT_GPV 9 50 + #define INT_IDN_ACCESS 10 51 + #define INT_UDN_ACCESS 11 52 + #define INT_SWINT_3 12 53 + #define INT_SWINT_2 13 54 + #define INT_SWINT_1 14 55 + #define INT_SWINT_0 15 56 + #define INT_ILL_TRANS 16 57 + #define INT_UNALIGN_DATA 17 58 + #define INT_DTLB_MISS 18 59 + #define INT_DTLB_ACCESS 19 60 + #define INT_IDN_FIREWALL 20 61 + #define INT_UDN_FIREWALL 21 62 + #define INT_TILE_TIMER 22 63 + #define INT_AUX_TILE_TIMER 23 64 + #define INT_IDN_TIMER 24 65 + #define INT_UDN_TIMER 25 66 + #define INT_IDN_AVAIL 26 67 + #define INT_UDN_AVAIL 27 68 + #define INT_IPI_3 28 69 + #define INT_IPI_2 29 70 + #define INT_IPI_1 30 71 + #define INT_IPI_0 31 72 + #define INT_PERF_COUNT 32 73 + #define INT_AUX_PERF_COUNT 33 74 + #define INT_INTCTRL_3 34 75 + #define INT_INTCTRL_2 35 76 + #define INT_INTCTRL_1 36 77 + #define INT_INTCTRL_0 37 78 + #define INT_BOOT_ACCESS 38 79 + #define INT_WORLD_ACCESS 39 80 + #define INT_I_ASID 40 81 + #define INT_D_ASID 41 82 + #define INT_DOUBLE_FAULT 42 83 + 84 + #define NUM_INTERRUPTS 43 85 + 86 + #ifndef __ASSEMBLER__ 87 + #define QUEUED_INTERRUPTS ( \ 88 + INT_MASK(INT_MEM_ERROR) | \ 89 + INT_MASK(INT_IDN_COMPLETE) | \ 90 + INT_MASK(INT_UDN_COMPLETE) | \ 91 + INT_MASK(INT_IDN_FIREWALL) | \ 92 + INT_MASK(INT_UDN_FIREWALL) | \ 93 + INT_MASK(INT_TILE_TIMER) | \ 94 + INT_MASK(INT_AUX_TILE_TIMER) | \ 95 + INT_MASK(INT_IDN_TIMER) | \ 96 + INT_MASK(INT_UDN_TIMER) | \ 97 + INT_MASK(INT_IDN_AVAIL) | \ 98 + INT_MASK(INT_UDN_AVAIL) | \ 99 + INT_MASK(INT_IPI_3) | \ 100 + INT_MASK(INT_IPI_2) | \ 101 + INT_MASK(INT_IPI_1) | \ 102 + INT_MASK(INT_IPI_0) | \ 103 + INT_MASK(INT_PERF_COUNT) | \ 104 + INT_MASK(INT_AUX_PERF_COUNT) | \ 105 + INT_MASK(INT_INTCTRL_3) | \ 106 + INT_MASK(INT_INTCTRL_2) | \ 107 + INT_MASK(INT_INTCTRL_1) | \ 108 + INT_MASK(INT_INTCTRL_0) | \ 109 + INT_MASK(INT_BOOT_ACCESS) | \ 110 + INT_MASK(INT_WORLD_ACCESS) | \ 111 + INT_MASK(INT_I_ASID) | \ 112 + INT_MASK(INT_D_ASID) | \ 113 + INT_MASK(INT_DOUBLE_FAULT) | \ 114 + 0) 115 + #define NONQUEUED_INTERRUPTS ( \ 116 + INT_MASK(INT_SINGLE_STEP_3) | \ 117 + INT_MASK(INT_SINGLE_STEP_2) | \ 118 + INT_MASK(INT_SINGLE_STEP_1) | \ 119 + INT_MASK(INT_SINGLE_STEP_0) | \ 120 + INT_MASK(INT_ITLB_MISS) | \ 121 + INT_MASK(INT_ILL) | \ 122 + INT_MASK(INT_GPV) | \ 123 + INT_MASK(INT_IDN_ACCESS) | \ 124 + INT_MASK(INT_UDN_ACCESS) | \ 125 + INT_MASK(INT_SWINT_3) | \ 126 + INT_MASK(INT_SWINT_2) | \ 127 + INT_MASK(INT_SWINT_1) | \ 128 + INT_MASK(INT_SWINT_0) | \ 129 + INT_MASK(INT_ILL_TRANS) | \ 130 + INT_MASK(INT_UNALIGN_DATA) | \ 131 + INT_MASK(INT_DTLB_MISS) | \ 132 + INT_MASK(INT_DTLB_ACCESS) | \ 133 + 0) 134 + #define CRITICAL_MASKED_INTERRUPTS ( \ 135 + INT_MASK(INT_MEM_ERROR) | \ 136 + INT_MASK(INT_SINGLE_STEP_3) | \ 137 + INT_MASK(INT_SINGLE_STEP_2) | \ 138 + INT_MASK(INT_SINGLE_STEP_1) | \ 139 + INT_MASK(INT_SINGLE_STEP_0) | \ 140 + INT_MASK(INT_IDN_COMPLETE) | \ 141 + INT_MASK(INT_UDN_COMPLETE) | \ 142 + INT_MASK(INT_IDN_FIREWALL) | \ 143 + INT_MASK(INT_UDN_FIREWALL) | \ 144 + INT_MASK(INT_TILE_TIMER) | \ 145 + INT_MASK(INT_AUX_TILE_TIMER) | \ 146 + INT_MASK(INT_IDN_TIMER) | \ 147 + INT_MASK(INT_UDN_TIMER) | \ 148 + INT_MASK(INT_IDN_AVAIL) | \ 149 + INT_MASK(INT_UDN_AVAIL) | \ 150 + INT_MASK(INT_IPI_3) | \ 151 + INT_MASK(INT_IPI_2) | \ 152 + INT_MASK(INT_IPI_1) | \ 153 + INT_MASK(INT_IPI_0) | \ 154 + INT_MASK(INT_PERF_COUNT) | \ 155 + INT_MASK(INT_AUX_PERF_COUNT) | \ 156 + INT_MASK(INT_INTCTRL_3) | \ 157 + INT_MASK(INT_INTCTRL_2) | \ 158 + INT_MASK(INT_INTCTRL_1) | \ 159 + INT_MASK(INT_INTCTRL_0) | \ 160 + 0) 161 + #define CRITICAL_UNMASKED_INTERRUPTS ( \ 162 + INT_MASK(INT_ITLB_MISS) | \ 163 + INT_MASK(INT_ILL) | \ 164 + INT_MASK(INT_GPV) | \ 165 + INT_MASK(INT_IDN_ACCESS) | \ 166 + INT_MASK(INT_UDN_ACCESS) | \ 167 + INT_MASK(INT_SWINT_3) | \ 168 + INT_MASK(INT_SWINT_2) | \ 169 + INT_MASK(INT_SWINT_1) | \ 170 + INT_MASK(INT_SWINT_0) | \ 171 + INT_MASK(INT_ILL_TRANS) | \ 172 + INT_MASK(INT_UNALIGN_DATA) | \ 173 + INT_MASK(INT_DTLB_MISS) | \ 174 + INT_MASK(INT_DTLB_ACCESS) | \ 175 + INT_MASK(INT_BOOT_ACCESS) | \ 176 + INT_MASK(INT_WORLD_ACCESS) | \ 177 + INT_MASK(INT_I_ASID) | \ 178 + INT_MASK(INT_D_ASID) | \ 179 + INT_MASK(INT_DOUBLE_FAULT) | \ 180 + 0) 181 + #define MASKABLE_INTERRUPTS ( \ 182 + INT_MASK(INT_MEM_ERROR) | \ 183 + INT_MASK(INT_SINGLE_STEP_3) | \ 184 + INT_MASK(INT_SINGLE_STEP_2) | \ 185 + INT_MASK(INT_SINGLE_STEP_1) | \ 186 + INT_MASK(INT_SINGLE_STEP_0) | \ 187 + INT_MASK(INT_IDN_COMPLETE) | \ 188 + INT_MASK(INT_UDN_COMPLETE) | \ 189 + INT_MASK(INT_IDN_FIREWALL) | \ 190 + INT_MASK(INT_UDN_FIREWALL) | \ 191 + INT_MASK(INT_TILE_TIMER) | \ 192 + INT_MASK(INT_AUX_TILE_TIMER) | \ 193 + INT_MASK(INT_IDN_TIMER) | \ 194 + INT_MASK(INT_UDN_TIMER) | \ 195 + INT_MASK(INT_IDN_AVAIL) | \ 196 + INT_MASK(INT_UDN_AVAIL) | \ 197 + INT_MASK(INT_IPI_3) | \ 198 + INT_MASK(INT_IPI_2) | \ 199 + INT_MASK(INT_IPI_1) | \ 200 + INT_MASK(INT_IPI_0) | \ 201 + INT_MASK(INT_PERF_COUNT) | \ 202 + INT_MASK(INT_AUX_PERF_COUNT) | \ 203 + INT_MASK(INT_INTCTRL_3) | \ 204 + INT_MASK(INT_INTCTRL_2) | \ 205 + INT_MASK(INT_INTCTRL_1) | \ 206 + INT_MASK(INT_INTCTRL_0) | \ 207 + 0) 208 + #define UNMASKABLE_INTERRUPTS ( \ 209 + INT_MASK(INT_ITLB_MISS) | \ 210 + INT_MASK(INT_ILL) | \ 211 + INT_MASK(INT_GPV) | \ 212 + INT_MASK(INT_IDN_ACCESS) | \ 213 + INT_MASK(INT_UDN_ACCESS) | \ 214 + INT_MASK(INT_SWINT_3) | \ 215 + INT_MASK(INT_SWINT_2) | \ 216 + INT_MASK(INT_SWINT_1) | \ 217 + INT_MASK(INT_SWINT_0) | \ 218 + INT_MASK(INT_ILL_TRANS) | \ 219 + INT_MASK(INT_UNALIGN_DATA) | \ 220 + INT_MASK(INT_DTLB_MISS) | \ 221 + INT_MASK(INT_DTLB_ACCESS) | \ 222 + INT_MASK(INT_BOOT_ACCESS) | \ 223 + INT_MASK(INT_WORLD_ACCESS) | \ 224 + INT_MASK(INT_I_ASID) | \ 225 + INT_MASK(INT_D_ASID) | \ 226 + INT_MASK(INT_DOUBLE_FAULT) | \ 227 + 0) 228 + #define SYNC_INTERRUPTS ( \ 229 + INT_MASK(INT_SINGLE_STEP_3) | \ 230 + INT_MASK(INT_SINGLE_STEP_2) | \ 231 + INT_MASK(INT_SINGLE_STEP_1) | \ 232 + INT_MASK(INT_SINGLE_STEP_0) | \ 233 + INT_MASK(INT_IDN_COMPLETE) | \ 234 + INT_MASK(INT_UDN_COMPLETE) | \ 235 + INT_MASK(INT_ITLB_MISS) | \ 236 + INT_MASK(INT_ILL) | \ 237 + INT_MASK(INT_GPV) | \ 238 + INT_MASK(INT_IDN_ACCESS) | \ 239 + INT_MASK(INT_UDN_ACCESS) | \ 240 + INT_MASK(INT_SWINT_3) | \ 241 + INT_MASK(INT_SWINT_2) | \ 242 + INT_MASK(INT_SWINT_1) | \ 243 + INT_MASK(INT_SWINT_0) | \ 244 + INT_MASK(INT_ILL_TRANS) | \ 245 + INT_MASK(INT_UNALIGN_DATA) | \ 246 + INT_MASK(INT_DTLB_MISS) | \ 247 + INT_MASK(INT_DTLB_ACCESS) | \ 248 + 0) 249 + #define NON_SYNC_INTERRUPTS ( \ 250 + INT_MASK(INT_MEM_ERROR) | \ 251 + INT_MASK(INT_IDN_FIREWALL) | \ 252 + INT_MASK(INT_UDN_FIREWALL) | \ 253 + INT_MASK(INT_TILE_TIMER) | \ 254 + INT_MASK(INT_AUX_TILE_TIMER) | \ 255 + INT_MASK(INT_IDN_TIMER) | \ 256 + INT_MASK(INT_UDN_TIMER) | \ 257 + INT_MASK(INT_IDN_AVAIL) | \ 258 + INT_MASK(INT_UDN_AVAIL) | \ 259 + INT_MASK(INT_IPI_3) | \ 260 + INT_MASK(INT_IPI_2) | \ 261 + INT_MASK(INT_IPI_1) | \ 262 + INT_MASK(INT_IPI_0) | \ 263 + INT_MASK(INT_PERF_COUNT) | \ 264 + INT_MASK(INT_AUX_PERF_COUNT) | \ 265 + INT_MASK(INT_INTCTRL_3) | \ 266 + INT_MASK(INT_INTCTRL_2) | \ 267 + INT_MASK(INT_INTCTRL_1) | \ 268 + INT_MASK(INT_INTCTRL_0) | \ 269 + INT_MASK(INT_BOOT_ACCESS) | \ 270 + INT_MASK(INT_WORLD_ACCESS) | \ 271 + INT_MASK(INT_I_ASID) | \ 272 + INT_MASK(INT_D_ASID) | \ 273 + INT_MASK(INT_DOUBLE_FAULT) | \ 274 + 0) 275 + #endif /* !__ASSEMBLER__ */ 276 + #endif /* !__ARCH_INTERRUPTS_H__ */
+11 -2
arch/tile/include/arch/spr_def.h
··· 12 12 * more details. 13 13 */ 14 14 15 + /* Include the proper base SPR definition file. */ 16 + #ifdef __tilegx__ 17 + #include <arch/spr_def_64.h> 18 + #else 19 + #include <arch/spr_def_32.h> 20 + #endif 21 + 22 + #ifdef __KERNEL__ 23 + 15 24 /* 16 25 * In addition to including the proper base SPR definition file, depending 17 26 * on machine architecture, this file defines several macros which allow ··· 38 29 #define _concat4(a, b, c, d) __concat4(a, b, c, d) 39 30 40 31 #ifdef __tilegx__ 41 - #include <arch/spr_def_64.h> 42 32 43 33 /* TILE-Gx dependent, protection-level dependent SPRs. */ 44 34 ··· 73 65 _concat4(INT_SINGLE_STEP_, CONFIG_KERNEL_PL,,) 74 66 75 67 #else 76 - #include <arch/spr_def_32.h> 77 68 78 69 /* TILEPro dependent, protection-level dependent SPRs. */ 79 70 ··· 109 102 _concat4(SPR_INTCTRL_, CONFIG_KERNEL_PL, _STATUS,) 110 103 #define INT_INTCTRL_K \ 111 104 _concat4(INT_INTCTRL_, CONFIG_KERNEL_PL,,) 105 + 106 + #endif /* __KERNEL__ */
+173
arch/tile/include/arch/spr_def_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #ifndef __DOXYGEN__ 16 + 17 + #ifndef __ARCH_SPR_DEF_H__ 18 + #define __ARCH_SPR_DEF_H__ 19 + 20 + #define SPR_AUX_PERF_COUNT_0 0x2105 21 + #define SPR_AUX_PERF_COUNT_1 0x2106 22 + #define SPR_AUX_PERF_COUNT_CTL 0x2107 23 + #define SPR_AUX_PERF_COUNT_STS 0x2108 24 + #define SPR_CMPEXCH_VALUE 0x2780 25 + #define SPR_CYCLE 0x2781 26 + #define SPR_DONE 0x2705 27 + #define SPR_DSTREAM_PF 0x2706 28 + #define SPR_EVENT_BEGIN 0x2782 29 + #define SPR_EVENT_END 0x2783 30 + #define SPR_EX_CONTEXT_0_0 0x2580 31 + #define SPR_EX_CONTEXT_0_1 0x2581 32 + #define SPR_EX_CONTEXT_0_1__PL_SHIFT 0 33 + #define SPR_EX_CONTEXT_0_1__PL_RMASK 0x3 34 + #define SPR_EX_CONTEXT_0_1__PL_MASK 0x3 35 + #define SPR_EX_CONTEXT_0_1__ICS_SHIFT 2 36 + #define SPR_EX_CONTEXT_0_1__ICS_RMASK 0x1 37 + #define SPR_EX_CONTEXT_0_1__ICS_MASK 0x4 38 + #define SPR_EX_CONTEXT_1_0 0x2480 39 + #define SPR_EX_CONTEXT_1_1 0x2481 40 + #define SPR_EX_CONTEXT_1_1__PL_SHIFT 0 41 + #define SPR_EX_CONTEXT_1_1__PL_RMASK 0x3 42 + #define SPR_EX_CONTEXT_1_1__PL_MASK 0x3 43 + #define SPR_EX_CONTEXT_1_1__ICS_SHIFT 2 44 + #define SPR_EX_CONTEXT_1_1__ICS_RMASK 0x1 45 + #define SPR_EX_CONTEXT_1_1__ICS_MASK 0x4 46 + #define SPR_EX_CONTEXT_2_0 0x2380 47 + #define SPR_EX_CONTEXT_2_1 0x2381 48 + #define SPR_EX_CONTEXT_2_1__PL_SHIFT 0 49 + #define SPR_EX_CONTEXT_2_1__PL_RMASK 0x3 50 + #define SPR_EX_CONTEXT_2_1__PL_MASK 0x3 51 + #define SPR_EX_CONTEXT_2_1__ICS_SHIFT 2 52 + #define SPR_EX_CONTEXT_2_1__ICS_RMASK 0x1 53 + #define SPR_EX_CONTEXT_2_1__ICS_MASK 0x4 54 + #define SPR_FAIL 0x2707 55 + #define SPR_ILL_TRANS_REASON__I_STREAM_VA_RMASK 0x1 56 + #define SPR_INTCTRL_0_STATUS 0x2505 57 + #define SPR_INTCTRL_1_STATUS 0x2405 58 + #define SPR_INTCTRL_2_STATUS 0x2305 59 + #define SPR_INTERRUPT_CRITICAL_SECTION 0x2708 60 + #define SPR_INTERRUPT_MASK_0 0x2506 61 + #define SPR_INTERRUPT_MASK_1 0x2406 62 + #define SPR_INTERRUPT_MASK_2 0x2306 63 + #define SPR_INTERRUPT_MASK_RESET_0 0x2507 64 + #define SPR_INTERRUPT_MASK_RESET_1 0x2407 65 + #define SPR_INTERRUPT_MASK_RESET_2 0x2307 66 + #define SPR_INTERRUPT_MASK_SET_0 0x2508 67 + #define SPR_INTERRUPT_MASK_SET_1 0x2408 68 + #define SPR_INTERRUPT_MASK_SET_2 0x2308 69 + #define SPR_INTERRUPT_VECTOR_BASE_0 0x2509 70 + #define SPR_INTERRUPT_VECTOR_BASE_1 0x2409 71 + #define SPR_INTERRUPT_VECTOR_BASE_2 0x2309 72 + #define SPR_INTERRUPT_VECTOR_BASE_3 0x2209 73 + #define SPR_IPI_EVENT_0 0x1f05 74 + #define SPR_IPI_EVENT_1 0x1e05 75 + #define SPR_IPI_EVENT_2 0x1d05 76 + #define SPR_IPI_EVENT_RESET_0 0x1f06 77 + #define SPR_IPI_EVENT_RESET_1 0x1e06 78 + #define SPR_IPI_EVENT_RESET_2 0x1d06 79 + #define SPR_IPI_EVENT_SET_0 0x1f07 80 + #define SPR_IPI_EVENT_SET_1 0x1e07 81 + #define SPR_IPI_EVENT_SET_2 0x1d07 82 + #define SPR_IPI_MASK_0 0x1f08 83 + #define SPR_IPI_MASK_1 0x1e08 84 + #define SPR_IPI_MASK_2 0x1d08 85 + #define SPR_IPI_MASK_RESET_0 0x1f09 86 + #define SPR_IPI_MASK_RESET_1 0x1e09 87 + #define SPR_IPI_MASK_RESET_2 0x1d09 88 + #define SPR_IPI_MASK_SET_0 0x1f0a 89 + #define SPR_IPI_MASK_SET_1 0x1e0a 90 + #define SPR_IPI_MASK_SET_2 0x1d0a 91 + #define SPR_MPL_AUX_TILE_TIMER_SET_0 0x1700 92 + #define SPR_MPL_AUX_TILE_TIMER_SET_1 0x1701 93 + #define SPR_MPL_AUX_TILE_TIMER_SET_2 0x1702 94 + #define SPR_MPL_INTCTRL_0_SET_0 0x2500 95 + #define SPR_MPL_INTCTRL_0_SET_1 0x2501 96 + #define SPR_MPL_INTCTRL_0_SET_2 0x2502 97 + #define SPR_MPL_INTCTRL_1_SET_0 0x2400 98 + #define SPR_MPL_INTCTRL_1_SET_1 0x2401 99 + #define SPR_MPL_INTCTRL_1_SET_2 0x2402 100 + #define SPR_MPL_INTCTRL_2_SET_0 0x2300 101 + #define SPR_MPL_INTCTRL_2_SET_1 0x2301 102 + #define SPR_MPL_INTCTRL_2_SET_2 0x2302 103 + #define SPR_MPL_UDN_ACCESS_SET_0 0x0b00 104 + #define SPR_MPL_UDN_ACCESS_SET_1 0x0b01 105 + #define SPR_MPL_UDN_ACCESS_SET_2 0x0b02 106 + #define SPR_MPL_UDN_AVAIL_SET_0 0x1b00 107 + #define SPR_MPL_UDN_AVAIL_SET_1 0x1b01 108 + #define SPR_MPL_UDN_AVAIL_SET_2 0x1b02 109 + #define SPR_MPL_UDN_COMPLETE_SET_0 0x0600 110 + #define SPR_MPL_UDN_COMPLETE_SET_1 0x0601 111 + #define SPR_MPL_UDN_COMPLETE_SET_2 0x0602 112 + #define SPR_MPL_UDN_FIREWALL_SET_0 0x1500 113 + #define SPR_MPL_UDN_FIREWALL_SET_1 0x1501 114 + #define SPR_MPL_UDN_FIREWALL_SET_2 0x1502 115 + #define SPR_MPL_UDN_TIMER_SET_0 0x1900 116 + #define SPR_MPL_UDN_TIMER_SET_1 0x1901 117 + #define SPR_MPL_UDN_TIMER_SET_2 0x1902 118 + #define SPR_MPL_WORLD_ACCESS_SET_0 0x2700 119 + #define SPR_MPL_WORLD_ACCESS_SET_1 0x2701 120 + #define SPR_MPL_WORLD_ACCESS_SET_2 0x2702 121 + #define SPR_PASS 0x2709 122 + #define SPR_PERF_COUNT_0 0x2005 123 + #define SPR_PERF_COUNT_1 0x2006 124 + #define SPR_PERF_COUNT_CTL 0x2007 125 + #define SPR_PERF_COUNT_DN_CTL 0x2008 126 + #define SPR_PERF_COUNT_STS 0x2009 127 + #define SPR_PROC_STATUS 0x2784 128 + #define SPR_SIM_CONTROL 0x2785 129 + #define SPR_SINGLE_STEP_CONTROL_0 0x0405 130 + #define SPR_SINGLE_STEP_CONTROL_0__CANCELED_MASK 0x1 131 + #define SPR_SINGLE_STEP_CONTROL_0__INHIBIT_MASK 0x2 132 + #define SPR_SINGLE_STEP_CONTROL_1 0x0305 133 + #define SPR_SINGLE_STEP_CONTROL_1__CANCELED_MASK 0x1 134 + #define SPR_SINGLE_STEP_CONTROL_1__INHIBIT_MASK 0x2 135 + #define SPR_SINGLE_STEP_CONTROL_2 0x0205 136 + #define SPR_SINGLE_STEP_CONTROL_2__CANCELED_MASK 0x1 137 + #define SPR_SINGLE_STEP_CONTROL_2__INHIBIT_MASK 0x2 138 + #define SPR_SINGLE_STEP_EN_0_0 0x250a 139 + #define SPR_SINGLE_STEP_EN_0_1 0x240a 140 + #define SPR_SINGLE_STEP_EN_0_2 0x230a 141 + #define SPR_SINGLE_STEP_EN_1_0 0x250b 142 + #define SPR_SINGLE_STEP_EN_1_1 0x240b 143 + #define SPR_SINGLE_STEP_EN_1_2 0x230b 144 + #define SPR_SINGLE_STEP_EN_2_0 0x250c 145 + #define SPR_SINGLE_STEP_EN_2_1 0x240c 146 + #define SPR_SINGLE_STEP_EN_2_2 0x230c 147 + #define SPR_SYSTEM_SAVE_0_0 0x2582 148 + #define SPR_SYSTEM_SAVE_0_1 0x2583 149 + #define SPR_SYSTEM_SAVE_0_2 0x2584 150 + #define SPR_SYSTEM_SAVE_0_3 0x2585 151 + #define SPR_SYSTEM_SAVE_1_0 0x2482 152 + #define SPR_SYSTEM_SAVE_1_1 0x2483 153 + #define SPR_SYSTEM_SAVE_1_2 0x2484 154 + #define SPR_SYSTEM_SAVE_1_3 0x2485 155 + #define SPR_SYSTEM_SAVE_2_0 0x2382 156 + #define SPR_SYSTEM_SAVE_2_1 0x2383 157 + #define SPR_SYSTEM_SAVE_2_2 0x2384 158 + #define SPR_SYSTEM_SAVE_2_3 0x2385 159 + #define SPR_TILE_COORD 0x270b 160 + #define SPR_TILE_RTF_HWM 0x270c 161 + #define SPR_TILE_TIMER_CONTROL 0x1605 162 + #define SPR_UDN_AVAIL_EN 0x1b05 163 + #define SPR_UDN_DATA_AVAIL 0x0b80 164 + #define SPR_UDN_DEADLOCK_TIMEOUT 0x1906 165 + #define SPR_UDN_DEMUX_COUNT_0 0x0b05 166 + #define SPR_UDN_DEMUX_COUNT_1 0x0b06 167 + #define SPR_UDN_DEMUX_COUNT_2 0x0b07 168 + #define SPR_UDN_DEMUX_COUNT_3 0x0b08 169 + #define SPR_UDN_DIRECTION_PROTECT 0x1505 170 + 171 + #endif /* !defined(__ARCH_SPR_DEF_H__) */ 172 + 173 + #endif /* !defined(__DOXYGEN__) */
+42 -7
arch/tile/include/asm/atomic.h
··· 130 130 */ 131 131 #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) 132 132 133 - 134 - /* 135 - * We define xchg() and cmpxchg() in the included headers. 136 - * Note that we do not define __HAVE_ARCH_CMPXCHG, since that would imply 137 - * that cmpxchg() is an efficient operation, which is not particularly true. 138 - */ 139 - 140 133 /* Nonexistent functions intended to cause link errors. */ 141 134 extern unsigned long __xchg_called_with_bad_pointer(void); 142 135 extern unsigned long __cmpxchg_called_with_bad_pointer(void); 136 + 137 + #define xchg(ptr, x) \ 138 + ({ \ 139 + typeof(*(ptr)) __x; \ 140 + switch (sizeof(*(ptr))) { \ 141 + case 4: \ 142 + __x = (typeof(__x))(typeof(__x-__x))atomic_xchg( \ 143 + (atomic_t *)(ptr), \ 144 + (u32)(typeof((x)-(x)))(x)); \ 145 + break; \ 146 + case 8: \ 147 + __x = (typeof(__x))(typeof(__x-__x))atomic64_xchg( \ 148 + (atomic64_t *)(ptr), \ 149 + (u64)(typeof((x)-(x)))(x)); \ 150 + break; \ 151 + default: \ 152 + __xchg_called_with_bad_pointer(); \ 153 + } \ 154 + __x; \ 155 + }) 156 + 157 + #define cmpxchg(ptr, o, n) \ 158 + ({ \ 159 + typeof(*(ptr)) __x; \ 160 + switch (sizeof(*(ptr))) { \ 161 + case 4: \ 162 + __x = (typeof(__x))(typeof(__x-__x))atomic_cmpxchg( \ 163 + (atomic_t *)(ptr), \ 164 + (u32)(typeof((o)-(o)))(o), \ 165 + (u32)(typeof((n)-(n)))(n)); \ 166 + break; \ 167 + case 8: \ 168 + __x = (typeof(__x))(typeof(__x-__x))atomic64_cmpxchg( \ 169 + (atomic64_t *)(ptr), \ 170 + (u64)(typeof((o)-(o)))(o), \ 171 + (u64)(typeof((n)-(n)))(n)); \ 172 + break; \ 173 + default: \ 174 + __cmpxchg_called_with_bad_pointer(); \ 175 + } \ 176 + __x; \ 177 + }) 143 178 144 179 #define tas(ptr) (xchg((ptr), 1)) 145 180
-10
arch/tile/include/asm/atomic_32.h
··· 110 110 _atomic_xchg(v, n); 111 111 } 112 112 113 - #define xchg(ptr, x) ((typeof(*(ptr))) \ 114 - ((sizeof(*(ptr)) == sizeof(atomic_t)) ? \ 115 - atomic_xchg((atomic_t *)(ptr), (long)(x)) : \ 116 - __xchg_called_with_bad_pointer())) 117 - 118 - #define cmpxchg(ptr, o, n) ((typeof(*(ptr))) \ 119 - ((sizeof(*(ptr)) == sizeof(atomic_t)) ? \ 120 - atomic_cmpxchg((atomic_t *)(ptr), (long)(o), (long)(n)) : \ 121 - __cmpxchg_called_with_bad_pointer())) 122 - 123 113 /* A 64bit atomic type */ 124 114 125 115 typedef struct {
+156
arch/tile/include/asm/atomic_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * Do not include directly; use <asm/atomic.h>. 15 + */ 16 + 17 + #ifndef _ASM_TILE_ATOMIC_64_H 18 + #define _ASM_TILE_ATOMIC_64_H 19 + 20 + #ifndef __ASSEMBLY__ 21 + 22 + #include <arch/spr_def.h> 23 + 24 + /* First, the 32-bit atomic ops that are "real" on our 64-bit platform. */ 25 + 26 + #define atomic_set(v, i) ((v)->counter = (i)) 27 + 28 + /* 29 + * The smp_mb() operations throughout are to support the fact that 30 + * Linux requires memory barriers before and after the operation, 31 + * on any routine which updates memory and returns a value. 32 + */ 33 + 34 + static inline int atomic_cmpxchg(atomic_t *v, int o, int n) 35 + { 36 + int val; 37 + __insn_mtspr(SPR_CMPEXCH_VALUE, o); 38 + smp_mb(); /* barrier for proper semantics */ 39 + val = __insn_cmpexch4((void *)&v->counter, n); 40 + smp_mb(); /* barrier for proper semantics */ 41 + return val; 42 + } 43 + 44 + static inline int atomic_xchg(atomic_t *v, int n) 45 + { 46 + int val; 47 + smp_mb(); /* barrier for proper semantics */ 48 + val = __insn_exch4((void *)&v->counter, n); 49 + smp_mb(); /* barrier for proper semantics */ 50 + return val; 51 + } 52 + 53 + static inline void atomic_add(int i, atomic_t *v) 54 + { 55 + __insn_fetchadd4((void *)&v->counter, i); 56 + } 57 + 58 + static inline int atomic_add_return(int i, atomic_t *v) 59 + { 60 + int val; 61 + smp_mb(); /* barrier for proper semantics */ 62 + val = __insn_fetchadd4((void *)&v->counter, i) + i; 63 + barrier(); /* the "+ i" above will wait on memory */ 64 + return val; 65 + } 66 + 67 + static inline int atomic_add_unless(atomic_t *v, int a, int u) 68 + { 69 + int guess, oldval = v->counter; 70 + do { 71 + if (oldval == u) 72 + break; 73 + guess = oldval; 74 + oldval = atomic_cmpxchg(v, guess, guess + a); 75 + } while (guess != oldval); 76 + return oldval != u; 77 + } 78 + 79 + /* Now the true 64-bit operations. */ 80 + 81 + #define ATOMIC64_INIT(i) { (i) } 82 + 83 + #define atomic64_read(v) ((v)->counter) 84 + #define atomic64_set(v, i) ((v)->counter = (i)) 85 + 86 + static inline long atomic64_cmpxchg(atomic64_t *v, long o, long n) 87 + { 88 + long val; 89 + smp_mb(); /* barrier for proper semantics */ 90 + __insn_mtspr(SPR_CMPEXCH_VALUE, o); 91 + val = __insn_cmpexch((void *)&v->counter, n); 92 + smp_mb(); /* barrier for proper semantics */ 93 + return val; 94 + } 95 + 96 + static inline long atomic64_xchg(atomic64_t *v, long n) 97 + { 98 + long val; 99 + smp_mb(); /* barrier for proper semantics */ 100 + val = __insn_exch((void *)&v->counter, n); 101 + smp_mb(); /* barrier for proper semantics */ 102 + return val; 103 + } 104 + 105 + static inline void atomic64_add(long i, atomic64_t *v) 106 + { 107 + __insn_fetchadd((void *)&v->counter, i); 108 + } 109 + 110 + static inline long atomic64_add_return(long i, atomic64_t *v) 111 + { 112 + int val; 113 + smp_mb(); /* barrier for proper semantics */ 114 + val = __insn_fetchadd((void *)&v->counter, i) + i; 115 + barrier(); /* the "+ i" above will wait on memory */ 116 + return val; 117 + } 118 + 119 + static inline long atomic64_add_unless(atomic64_t *v, long a, long u) 120 + { 121 + long guess, oldval = v->counter; 122 + do { 123 + if (oldval == u) 124 + break; 125 + guess = oldval; 126 + oldval = atomic64_cmpxchg(v, guess, guess + a); 127 + } while (guess != oldval); 128 + return oldval != u; 129 + } 130 + 131 + #define atomic64_sub_return(i, v) atomic64_add_return(-(i), (v)) 132 + #define atomic64_sub(i, v) atomic64_add(-(i), (v)) 133 + #define atomic64_inc_return(v) atomic64_add_return(1, (v)) 134 + #define atomic64_dec_return(v) atomic64_sub_return(1, (v)) 135 + #define atomic64_inc(v) atomic64_add(1, (v)) 136 + #define atomic64_dec(v) atomic64_sub(1, (v)) 137 + 138 + #define atomic64_inc_and_test(v) (atomic64_inc_return(v) == 0) 139 + #define atomic64_dec_and_test(v) (atomic64_dec_return(v) == 0) 140 + #define atomic64_sub_and_test(i, v) (atomic64_sub_return((i), (v)) == 0) 141 + #define atomic64_add_negative(i, v) (atomic64_add_return((i), (v)) < 0) 142 + 143 + #define atomic64_inc_not_zero(v) atomic64_add_unless((v), 1, 0) 144 + 145 + /* Atomic dec and inc don't implement barrier, so provide them if needed. */ 146 + #define smp_mb__before_atomic_dec() smp_mb() 147 + #define smp_mb__after_atomic_dec() smp_mb() 148 + #define smp_mb__before_atomic_inc() smp_mb() 149 + #define smp_mb__after_atomic_inc() smp_mb() 150 + 151 + /* Define this to indicate that cmpxchg is an efficient operation. */ 152 + #define __HAVE_ARCH_CMPXCHG 153 + 154 + #endif /* !__ASSEMBLY__ */ 155 + 156 + #endif /* _ASM_TILE_ATOMIC_64_H */
+23 -59
arch/tile/include/asm/backtrace.h
··· 12 12 * more details. 13 13 */ 14 14 15 - #ifndef _TILE_BACKTRACE_H 16 - #define _TILE_BACKTRACE_H 17 - 18 - 15 + #ifndef _ASM_TILE_BACKTRACE_H 16 + #define _ASM_TILE_BACKTRACE_H 19 17 20 18 #include <linux/types.h> 21 19 22 - #include <arch/chip.h> 23 - 24 - #if defined(__tile__) 25 - typedef unsigned long VirtualAddress; 26 - #elif CHIP_VA_WIDTH() > 32 27 - typedef unsigned long long VirtualAddress; 28 - #else 29 - typedef unsigned int VirtualAddress; 30 - #endif 31 - 32 - 33 - /** Reads 'size' bytes from 'address' and writes the data to 'result'. 20 + /* Reads 'size' bytes from 'address' and writes the data to 'result'. 34 21 * Returns true if successful, else false (e.g. memory not readable). 35 22 */ 36 23 typedef bool (*BacktraceMemoryReader)(void *result, 37 - VirtualAddress address, 24 + unsigned long address, 38 25 unsigned int size, 39 26 void *extra); 40 27 41 28 typedef struct { 42 - /** Current PC. */ 43 - VirtualAddress pc; 29 + /* Current PC. */ 30 + unsigned long pc; 44 31 45 - /** Current stack pointer value. */ 46 - VirtualAddress sp; 32 + /* Current stack pointer value. */ 33 + unsigned long sp; 47 34 48 - /** Current frame pointer value (i.e. caller's stack pointer) */ 49 - VirtualAddress fp; 35 + /* Current frame pointer value (i.e. caller's stack pointer) */ 36 + unsigned long fp; 50 37 51 - /** Internal use only: caller's PC for first frame. */ 52 - VirtualAddress initial_frame_caller_pc; 38 + /* Internal use only: caller's PC for first frame. */ 39 + unsigned long initial_frame_caller_pc; 53 40 54 - /** Internal use only: callback to read memory. */ 41 + /* Internal use only: callback to read memory. */ 55 42 BacktraceMemoryReader read_memory_func; 56 43 57 - /** Internal use only: arbitrary argument to read_memory_func. */ 44 + /* Internal use only: arbitrary argument to read_memory_func. */ 58 45 void *read_memory_func_extra; 59 46 60 47 } BacktraceIterator; 61 - 62 - 63 - /** Initializes a backtracer to start from the given location. 64 - * 65 - * If the frame pointer cannot be determined it is set to -1. 66 - * 67 - * @param state The state to be filled in. 68 - * @param read_memory_func A callback that reads memory. If NULL, a default 69 - * value is provided. 70 - * @param read_memory_func_extra An arbitrary argument to read_memory_func. 71 - * @param pc The current PC. 72 - * @param lr The current value of the 'lr' register. 73 - * @param sp The current value of the 'sp' register. 74 - * @param r52 The current value of the 'r52' register. 75 - */ 76 - extern void backtrace_init(BacktraceIterator *state, 77 - BacktraceMemoryReader read_memory_func, 78 - void *read_memory_func_extra, 79 - VirtualAddress pc, VirtualAddress lr, 80 - VirtualAddress sp, VirtualAddress r52); 81 - 82 - 83 - /** Advances the backtracing state to the calling frame, returning 84 - * true iff successful. 85 - */ 86 - extern bool backtrace_next(BacktraceIterator *state); 87 48 88 49 89 50 typedef enum { ··· 99 138 }; 100 139 101 140 102 - /** Internal constants used to define 'info' operands. */ 141 + /* Internal constants used to define 'info' operands. */ 103 142 enum { 104 143 /* 0 and 1 are reserved, as are all negative numbers. */ 105 144 ··· 108 147 CALLER_SP_IN_R52_BASE = 4, 109 148 110 149 CALLER_SP_OFFSET_BASE = 8, 111 - 112 - /* Marks the entry point of certain functions. */ 113 - ENTRY_POINT_INFO_OP = 16 114 150 }; 115 151 116 152 117 - /** Current backtracer state describing where it thinks the caller is. */ 153 + /* Current backtracer state describing where it thinks the caller is. */ 118 154 typedef struct { 119 155 /* 120 156 * Public fields ··· 150 192 151 193 } CallerLocation; 152 194 195 + extern void backtrace_init(BacktraceIterator *state, 196 + BacktraceMemoryReader read_memory_func, 197 + void *read_memory_func_extra, 198 + unsigned long pc, unsigned long lr, 199 + unsigned long sp, unsigned long r52); 153 200 154 201 202 + extern bool backtrace_next(BacktraceIterator *state); 155 203 156 - #endif /* _TILE_BACKTRACE_H */ 204 + #endif /* _ASM_TILE_BACKTRACE_H */
+1
arch/tile/include/asm/bitops.h
··· 122 122 #include <asm-generic/bitops/lock.h> 123 123 #include <asm-generic/bitops/find.h> 124 124 #include <asm-generic/bitops/sched.h> 125 + #include <asm-generic/bitops/non-atomic.h> 125 126 #include <asm-generic/bitops/le.h> 126 127 127 128 #endif /* _ASM_TILE_BITOPS_H */
-1
arch/tile/include/asm/bitops_32.h
··· 126 126 #define smp_mb__before_clear_bit() smp_mb() 127 127 #define smp_mb__after_clear_bit() do {} while (0) 128 128 129 - #include <asm-generic/bitops/non-atomic.h> 130 129 #include <asm-generic/bitops/ext2-atomic.h> 131 130 132 131 #endif /* _ASM_TILE_BITOPS_32_H */
+105
arch/tile/include/asm/bitops_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #ifndef _ASM_TILE_BITOPS_64_H 16 + #define _ASM_TILE_BITOPS_64_H 17 + 18 + #include <linux/compiler.h> 19 + #include <asm/atomic.h> 20 + #include <asm/system.h> 21 + 22 + /* See <asm/bitops.h> for API comments. */ 23 + 24 + static inline void set_bit(unsigned nr, volatile unsigned long *addr) 25 + { 26 + unsigned long mask = (1UL << (nr % BITS_PER_LONG)); 27 + __insn_fetchor((void *)(addr + nr / BITS_PER_LONG), mask); 28 + } 29 + 30 + static inline void clear_bit(unsigned nr, volatile unsigned long *addr) 31 + { 32 + unsigned long mask = (1UL << (nr % BITS_PER_LONG)); 33 + __insn_fetchand((void *)(addr + nr / BITS_PER_LONG), ~mask); 34 + } 35 + 36 + #define smp_mb__before_clear_bit() smp_mb() 37 + #define smp_mb__after_clear_bit() smp_mb() 38 + 39 + 40 + static inline void change_bit(unsigned nr, volatile unsigned long *addr) 41 + { 42 + unsigned long old, mask = (1UL << (nr % BITS_PER_LONG)); 43 + long guess, oldval; 44 + addr += nr / BITS_PER_LONG; 45 + old = *addr; 46 + do { 47 + guess = oldval; 48 + oldval = atomic64_cmpxchg((atomic64_t *)addr, 49 + guess, guess ^ mask); 50 + } while (guess != oldval); 51 + } 52 + 53 + 54 + /* 55 + * The test_and_xxx_bit() routines require a memory fence before we 56 + * start the operation, and after the operation completes. We use 57 + * smp_mb() before, and rely on the "!= 0" comparison, plus a compiler 58 + * barrier(), to block until the atomic op is complete. 59 + */ 60 + 61 + static inline int test_and_set_bit(unsigned nr, volatile unsigned long *addr) 62 + { 63 + int val; 64 + unsigned long mask = (1UL << (nr % BITS_PER_LONG)); 65 + smp_mb(); /* barrier for proper semantics */ 66 + val = (__insn_fetchor((void *)(addr + nr / BITS_PER_LONG), mask) 67 + & mask) != 0; 68 + barrier(); 69 + return val; 70 + } 71 + 72 + 73 + static inline int test_and_clear_bit(unsigned nr, volatile unsigned long *addr) 74 + { 75 + int val; 76 + unsigned long mask = (1UL << (nr % BITS_PER_LONG)); 77 + smp_mb(); /* barrier for proper semantics */ 78 + val = (__insn_fetchand((void *)(addr + nr / BITS_PER_LONG), ~mask) 79 + & mask) != 0; 80 + barrier(); 81 + return val; 82 + } 83 + 84 + 85 + static inline int test_and_change_bit(unsigned nr, 86 + volatile unsigned long *addr) 87 + { 88 + unsigned long mask = (1UL << (nr % BITS_PER_LONG)); 89 + long guess, oldval = *addr; 90 + addr += nr / BITS_PER_LONG; 91 + oldval = *addr; 92 + do { 93 + guess = oldval; 94 + oldval = atomic64_cmpxchg((atomic64_t *)addr, 95 + guess, guess ^ mask); 96 + } while (guess != oldval); 97 + return (oldval & mask) != 0; 98 + } 99 + 100 + #define ext2_set_bit_atomic(lock, nr, addr) \ 101 + test_and_set_bit((nr), (unsigned long *)(addr)) 102 + #define ext2_clear_bit_atomic(lock, nr, addr) \ 103 + test_and_clear_bit((nr), (unsigned long *)(addr)) 104 + 105 + #endif /* _ASM_TILE_BITOPS_64_H */
+12 -6
arch/tile/include/asm/cacheflush.h
··· 116 116 } 117 117 118 118 119 - /* Invalidate a VA range, then memory fence. */ 119 + /* Invalidate a VA range and wait for it to be complete. */ 120 120 static inline void inv_buffer(void *buffer, size_t size) 121 121 { 122 122 __inv_buffer(buffer, size); 123 - mb_incoherent(); 123 + mb(); 124 124 } 125 125 126 - /* Flush a VA range, then memory fence. */ 127 - static inline void flush_buffer(void *buffer, size_t size) 126 + /* 127 + * Flush a locally-homecached VA range and wait for the evicted 128 + * cachelines to hit memory. 129 + */ 130 + static inline void flush_buffer_local(void *buffer, size_t size) 128 131 { 129 132 __flush_buffer(buffer, size); 130 133 mb_incoherent(); 131 134 } 132 135 133 - /* Flush & invalidate a VA range, then memory fence. */ 134 - static inline void finv_buffer(void *buffer, size_t size) 136 + /* 137 + * Flush and invalidate a locally-homecached VA range and wait for the 138 + * evicted cachelines to hit memory. 139 + */ 140 + static inline void finv_buffer_local(void *buffer, size_t size) 135 141 { 136 142 __finv_buffer(buffer, size); 137 143 mb_incoherent();
+2 -2
arch/tile/include/asm/compat.h
··· 215 215 struct compat_siginfo; 216 216 struct compat_sigaltstack; 217 217 long compat_sys_execve(const char __user *path, 218 - const compat_uptr_t __user *argv, 219 - const compat_uptr_t __user *envp, struct pt_regs *); 218 + compat_uptr_t __user *argv, 219 + compat_uptr_t __user *envp, struct pt_regs *); 220 220 long compat_sys_rt_sigaction(int sig, struct compat_sigaction __user *act, 221 221 struct compat_sigaction __user *oact, 222 222 size_t sigsetsize);
+2 -1
arch/tile/include/asm/dma-mapping.h
··· 65 65 extern void dma_sync_single_range_for_device(struct device *, dma_addr_t, 66 66 unsigned long offset, size_t, 67 67 enum dma_data_direction); 68 - extern void dma_cache_sync(void *vaddr, size_t, enum dma_data_direction); 68 + extern void dma_cache_sync(struct device *dev, void *vaddr, size_t, 69 + enum dma_data_direction); 69 70 70 71 static inline int 71 72 dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
+1
arch/tile/include/asm/fb.h
··· 1 + #include <asm-generic/fb.h>
+18
arch/tile/include/asm/io.h
··· 52 52 #endif 53 53 54 54 #define ioremap_nocache(physaddr, size) ioremap(physaddr, size) 55 + #define ioremap_wc(physaddr, size) ioremap(physaddr, size) 55 56 #define ioremap_writethrough(physaddr, size) ioremap(physaddr, size) 56 57 #define ioremap_fullcache(physaddr, size) ioremap(physaddr, size) 57 58 ··· 162 161 #define iowrite32 writel 163 162 #define iowrite64 writeq 164 163 164 + static inline void memset_io(void *dst, int val, size_t len) 165 + { 166 + int x; 167 + BUG_ON((unsigned long)dst & 0x3); 168 + val = (val & 0xff) * 0x01010101; 169 + for (x = 0; x < len; x += 4) 170 + writel(val, dst + x); 171 + } 172 + 165 173 static inline void memcpy_fromio(void *dst, const volatile void __iomem *src, 166 174 size_t len) 167 175 { ··· 279 269 ioport_panic(); 280 270 } 281 271 272 + #define ioread16be(addr) be16_to_cpu(ioread16(addr)) 273 + #define ioread32be(addr) be32_to_cpu(ioread32(addr)) 274 + #define iowrite16be(v, addr) iowrite16(be16_to_cpu(v), (addr)) 275 + #define iowrite32be(v, addr) iowrite32(be32_to_cpu(v), (addr)) 276 + 282 277 #define ioread8_rep(p, dst, count) \ 283 278 insb((unsigned long) (p), (dst), (count)) 284 279 #define ioread16_rep(p, dst, count) \ ··· 297 282 outsw((unsigned long) (p), (src), (count)) 298 283 #define iowrite32_rep(p, src, count) \ 299 284 outsl((unsigned long) (p), (src), (count)) 285 + 286 + #define virt_to_bus virt_to_phys 287 + #define bus_to_virt phys_to_virt 300 288 301 289 #endif /* _ASM_TILE_IO_H */
+2
arch/tile/include/asm/irq.h
··· 23 23 /* IRQ numbers used for linux IPIs. */ 24 24 #define IRQ_RESCHEDULE 1 25 25 26 + #define irq_canonicalize(irq) (irq) 27 + 26 28 void ack_bad_irq(unsigned int irq); 27 29 28 30 /*
+2 -2
arch/tile/include/asm/mmu_context.h
··· 100 100 __get_cpu_var(current_asid) = asid; 101 101 102 102 /* Clear cpu from the old mm, and set it in the new one. */ 103 - cpumask_clear_cpu(cpu, &prev->cpu_vm_mask); 104 - cpumask_set_cpu(cpu, &next->cpu_vm_mask); 103 + cpumask_clear_cpu(cpu, mm_cpumask(prev)); 104 + cpumask_set_cpu(cpu, mm_cpumask(next)); 105 105 106 106 /* Re-load page tables */ 107 107 install_page_table(next->pgd, asid);
+7
arch/tile/include/asm/opcode-tile_32.h
··· 1502 1502 decoded[TILE_MAX_INSTRUCTIONS_PER_BUNDLE]); 1503 1503 1504 1504 1505 + /* Given a set of bundle bits and a specific pipe, returns which 1506 + * instruction the bundle contains in that pipe. 1507 + */ 1508 + extern const struct tile_opcode * 1509 + find_opcode(tile_bundle_bits bits, tile_pipeline pipe); 1510 + 1511 + 1505 1512 1506 1513 #endif /* opcode_tile_h */
+650 -908
arch/tile/include/asm/opcode-tile_64.h
··· 5 5 #ifndef opcode_tile_h 6 6 #define opcode_tile_h 7 7 8 - typedef unsigned long long tile_bundle_bits; 8 + typedef unsigned long long tilegx_bundle_bits; 9 9 10 10 11 11 enum 12 12 { 13 - TILE_MAX_OPERANDS = 5 /* mm */ 13 + TILEGX_MAX_OPERANDS = 4 /* bfexts */ 14 14 }; 15 15 16 16 typedef enum 17 17 { 18 - TILE_OPC_BPT, 19 - TILE_OPC_INFO, 20 - TILE_OPC_INFOL, 21 - TILE_OPC_J, 22 - TILE_OPC_JAL, 23 - TILE_OPC_MOVE, 24 - TILE_OPC_MOVE_SN, 25 - TILE_OPC_MOVEI, 26 - TILE_OPC_MOVEI_SN, 27 - TILE_OPC_MOVELI, 28 - TILE_OPC_MOVELI_SN, 29 - TILE_OPC_MOVELIS, 30 - TILE_OPC_PREFETCH, 31 - TILE_OPC_RAISE, 32 - TILE_OPC_ADD, 33 - TILE_OPC_ADD_SN, 34 - TILE_OPC_ADDB, 35 - TILE_OPC_ADDB_SN, 36 - TILE_OPC_ADDBS_U, 37 - TILE_OPC_ADDBS_U_SN, 38 - TILE_OPC_ADDH, 39 - TILE_OPC_ADDH_SN, 40 - TILE_OPC_ADDHS, 41 - TILE_OPC_ADDHS_SN, 42 - TILE_OPC_ADDI, 43 - TILE_OPC_ADDI_SN, 44 - TILE_OPC_ADDIB, 45 - TILE_OPC_ADDIB_SN, 46 - TILE_OPC_ADDIH, 47 - TILE_OPC_ADDIH_SN, 48 - TILE_OPC_ADDLI, 49 - TILE_OPC_ADDLI_SN, 50 - TILE_OPC_ADDLIS, 51 - TILE_OPC_ADDS, 52 - TILE_OPC_ADDS_SN, 53 - TILE_OPC_ADIFFB_U, 54 - TILE_OPC_ADIFFB_U_SN, 55 - TILE_OPC_ADIFFH, 56 - TILE_OPC_ADIFFH_SN, 57 - TILE_OPC_AND, 58 - TILE_OPC_AND_SN, 59 - TILE_OPC_ANDI, 60 - TILE_OPC_ANDI_SN, 61 - TILE_OPC_AULI, 62 - TILE_OPC_AVGB_U, 63 - TILE_OPC_AVGB_U_SN, 64 - TILE_OPC_AVGH, 65 - TILE_OPC_AVGH_SN, 66 - TILE_OPC_BBNS, 67 - TILE_OPC_BBNS_SN, 68 - TILE_OPC_BBNST, 69 - TILE_OPC_BBNST_SN, 70 - TILE_OPC_BBS, 71 - TILE_OPC_BBS_SN, 72 - TILE_OPC_BBST, 73 - TILE_OPC_BBST_SN, 74 - TILE_OPC_BGEZ, 75 - TILE_OPC_BGEZ_SN, 76 - TILE_OPC_BGEZT, 77 - TILE_OPC_BGEZT_SN, 78 - TILE_OPC_BGZ, 79 - TILE_OPC_BGZ_SN, 80 - TILE_OPC_BGZT, 81 - TILE_OPC_BGZT_SN, 82 - TILE_OPC_BITX, 83 - TILE_OPC_BITX_SN, 84 - TILE_OPC_BLEZ, 85 - TILE_OPC_BLEZ_SN, 86 - TILE_OPC_BLEZT, 87 - TILE_OPC_BLEZT_SN, 88 - TILE_OPC_BLZ, 89 - TILE_OPC_BLZ_SN, 90 - TILE_OPC_BLZT, 91 - TILE_OPC_BLZT_SN, 92 - TILE_OPC_BNZ, 93 - TILE_OPC_BNZ_SN, 94 - TILE_OPC_BNZT, 95 - TILE_OPC_BNZT_SN, 96 - TILE_OPC_BYTEX, 97 - TILE_OPC_BYTEX_SN, 98 - TILE_OPC_BZ, 99 - TILE_OPC_BZ_SN, 100 - TILE_OPC_BZT, 101 - TILE_OPC_BZT_SN, 102 - TILE_OPC_CLZ, 103 - TILE_OPC_CLZ_SN, 104 - TILE_OPC_CRC32_32, 105 - TILE_OPC_CRC32_32_SN, 106 - TILE_OPC_CRC32_8, 107 - TILE_OPC_CRC32_8_SN, 108 - TILE_OPC_CTZ, 109 - TILE_OPC_CTZ_SN, 110 - TILE_OPC_DRAIN, 111 - TILE_OPC_DTLBPR, 112 - TILE_OPC_DWORD_ALIGN, 113 - TILE_OPC_DWORD_ALIGN_SN, 114 - TILE_OPC_FINV, 115 - TILE_OPC_FLUSH, 116 - TILE_OPC_FNOP, 117 - TILE_OPC_ICOH, 118 - TILE_OPC_ILL, 119 - TILE_OPC_INTHB, 120 - TILE_OPC_INTHB_SN, 121 - TILE_OPC_INTHH, 122 - TILE_OPC_INTHH_SN, 123 - TILE_OPC_INTLB, 124 - TILE_OPC_INTLB_SN, 125 - TILE_OPC_INTLH, 126 - TILE_OPC_INTLH_SN, 127 - TILE_OPC_INV, 128 - TILE_OPC_IRET, 129 - TILE_OPC_JALB, 130 - TILE_OPC_JALF, 131 - TILE_OPC_JALR, 132 - TILE_OPC_JALRP, 133 - TILE_OPC_JB, 134 - TILE_OPC_JF, 135 - TILE_OPC_JR, 136 - TILE_OPC_JRP, 137 - TILE_OPC_LB, 138 - TILE_OPC_LB_SN, 139 - TILE_OPC_LB_U, 140 - TILE_OPC_LB_U_SN, 141 - TILE_OPC_LBADD, 142 - TILE_OPC_LBADD_SN, 143 - TILE_OPC_LBADD_U, 144 - TILE_OPC_LBADD_U_SN, 145 - TILE_OPC_LH, 146 - TILE_OPC_LH_SN, 147 - TILE_OPC_LH_U, 148 - TILE_OPC_LH_U_SN, 149 - TILE_OPC_LHADD, 150 - TILE_OPC_LHADD_SN, 151 - TILE_OPC_LHADD_U, 152 - TILE_OPC_LHADD_U_SN, 153 - TILE_OPC_LNK, 154 - TILE_OPC_LNK_SN, 155 - TILE_OPC_LW, 156 - TILE_OPC_LW_SN, 157 - TILE_OPC_LW_NA, 158 - TILE_OPC_LW_NA_SN, 159 - TILE_OPC_LWADD, 160 - TILE_OPC_LWADD_SN, 161 - TILE_OPC_LWADD_NA, 162 - TILE_OPC_LWADD_NA_SN, 163 - TILE_OPC_MAXB_U, 164 - TILE_OPC_MAXB_U_SN, 165 - TILE_OPC_MAXH, 166 - TILE_OPC_MAXH_SN, 167 - TILE_OPC_MAXIB_U, 168 - TILE_OPC_MAXIB_U_SN, 169 - TILE_OPC_MAXIH, 170 - TILE_OPC_MAXIH_SN, 171 - TILE_OPC_MF, 172 - TILE_OPC_MFSPR, 173 - TILE_OPC_MINB_U, 174 - TILE_OPC_MINB_U_SN, 175 - TILE_OPC_MINH, 176 - TILE_OPC_MINH_SN, 177 - TILE_OPC_MINIB_U, 178 - TILE_OPC_MINIB_U_SN, 179 - TILE_OPC_MINIH, 180 - TILE_OPC_MINIH_SN, 181 - TILE_OPC_MM, 182 - TILE_OPC_MNZ, 183 - TILE_OPC_MNZ_SN, 184 - TILE_OPC_MNZB, 185 - TILE_OPC_MNZB_SN, 186 - TILE_OPC_MNZH, 187 - TILE_OPC_MNZH_SN, 188 - TILE_OPC_MTSPR, 189 - TILE_OPC_MULHH_SS, 190 - TILE_OPC_MULHH_SS_SN, 191 - TILE_OPC_MULHH_SU, 192 - TILE_OPC_MULHH_SU_SN, 193 - TILE_OPC_MULHH_UU, 194 - TILE_OPC_MULHH_UU_SN, 195 - TILE_OPC_MULHHA_SS, 196 - TILE_OPC_MULHHA_SS_SN, 197 - TILE_OPC_MULHHA_SU, 198 - TILE_OPC_MULHHA_SU_SN, 199 - TILE_OPC_MULHHA_UU, 200 - TILE_OPC_MULHHA_UU_SN, 201 - TILE_OPC_MULHHSA_UU, 202 - TILE_OPC_MULHHSA_UU_SN, 203 - TILE_OPC_MULHL_SS, 204 - TILE_OPC_MULHL_SS_SN, 205 - TILE_OPC_MULHL_SU, 206 - TILE_OPC_MULHL_SU_SN, 207 - TILE_OPC_MULHL_US, 208 - TILE_OPC_MULHL_US_SN, 209 - TILE_OPC_MULHL_UU, 210 - TILE_OPC_MULHL_UU_SN, 211 - TILE_OPC_MULHLA_SS, 212 - TILE_OPC_MULHLA_SS_SN, 213 - TILE_OPC_MULHLA_SU, 214 - TILE_OPC_MULHLA_SU_SN, 215 - TILE_OPC_MULHLA_US, 216 - TILE_OPC_MULHLA_US_SN, 217 - TILE_OPC_MULHLA_UU, 218 - TILE_OPC_MULHLA_UU_SN, 219 - TILE_OPC_MULHLSA_UU, 220 - TILE_OPC_MULHLSA_UU_SN, 221 - TILE_OPC_MULLL_SS, 222 - TILE_OPC_MULLL_SS_SN, 223 - TILE_OPC_MULLL_SU, 224 - TILE_OPC_MULLL_SU_SN, 225 - TILE_OPC_MULLL_UU, 226 - TILE_OPC_MULLL_UU_SN, 227 - TILE_OPC_MULLLA_SS, 228 - TILE_OPC_MULLLA_SS_SN, 229 - TILE_OPC_MULLLA_SU, 230 - TILE_OPC_MULLLA_SU_SN, 231 - TILE_OPC_MULLLA_UU, 232 - TILE_OPC_MULLLA_UU_SN, 233 - TILE_OPC_MULLLSA_UU, 234 - TILE_OPC_MULLLSA_UU_SN, 235 - TILE_OPC_MVNZ, 236 - TILE_OPC_MVNZ_SN, 237 - TILE_OPC_MVZ, 238 - TILE_OPC_MVZ_SN, 239 - TILE_OPC_MZ, 240 - TILE_OPC_MZ_SN, 241 - TILE_OPC_MZB, 242 - TILE_OPC_MZB_SN, 243 - TILE_OPC_MZH, 244 - TILE_OPC_MZH_SN, 245 - TILE_OPC_NAP, 246 - TILE_OPC_NOP, 247 - TILE_OPC_NOR, 248 - TILE_OPC_NOR_SN, 249 - TILE_OPC_OR, 250 - TILE_OPC_OR_SN, 251 - TILE_OPC_ORI, 252 - TILE_OPC_ORI_SN, 253 - TILE_OPC_PACKBS_U, 254 - TILE_OPC_PACKBS_U_SN, 255 - TILE_OPC_PACKHB, 256 - TILE_OPC_PACKHB_SN, 257 - TILE_OPC_PACKHS, 258 - TILE_OPC_PACKHS_SN, 259 - TILE_OPC_PACKLB, 260 - TILE_OPC_PACKLB_SN, 261 - TILE_OPC_PCNT, 262 - TILE_OPC_PCNT_SN, 263 - TILE_OPC_RL, 264 - TILE_OPC_RL_SN, 265 - TILE_OPC_RLI, 266 - TILE_OPC_RLI_SN, 267 - TILE_OPC_S1A, 268 - TILE_OPC_S1A_SN, 269 - TILE_OPC_S2A, 270 - TILE_OPC_S2A_SN, 271 - TILE_OPC_S3A, 272 - TILE_OPC_S3A_SN, 273 - TILE_OPC_SADAB_U, 274 - TILE_OPC_SADAB_U_SN, 275 - TILE_OPC_SADAH, 276 - TILE_OPC_SADAH_SN, 277 - TILE_OPC_SADAH_U, 278 - TILE_OPC_SADAH_U_SN, 279 - TILE_OPC_SADB_U, 280 - TILE_OPC_SADB_U_SN, 281 - TILE_OPC_SADH, 282 - TILE_OPC_SADH_SN, 283 - TILE_OPC_SADH_U, 284 - TILE_OPC_SADH_U_SN, 285 - TILE_OPC_SB, 286 - TILE_OPC_SBADD, 287 - TILE_OPC_SEQ, 288 - TILE_OPC_SEQ_SN, 289 - TILE_OPC_SEQB, 290 - TILE_OPC_SEQB_SN, 291 - TILE_OPC_SEQH, 292 - TILE_OPC_SEQH_SN, 293 - TILE_OPC_SEQI, 294 - TILE_OPC_SEQI_SN, 295 - TILE_OPC_SEQIB, 296 - TILE_OPC_SEQIB_SN, 297 - TILE_OPC_SEQIH, 298 - TILE_OPC_SEQIH_SN, 299 - TILE_OPC_SH, 300 - TILE_OPC_SHADD, 301 - TILE_OPC_SHL, 302 - TILE_OPC_SHL_SN, 303 - TILE_OPC_SHLB, 304 - TILE_OPC_SHLB_SN, 305 - TILE_OPC_SHLH, 306 - TILE_OPC_SHLH_SN, 307 - TILE_OPC_SHLI, 308 - TILE_OPC_SHLI_SN, 309 - TILE_OPC_SHLIB, 310 - TILE_OPC_SHLIB_SN, 311 - TILE_OPC_SHLIH, 312 - TILE_OPC_SHLIH_SN, 313 - TILE_OPC_SHR, 314 - TILE_OPC_SHR_SN, 315 - TILE_OPC_SHRB, 316 - TILE_OPC_SHRB_SN, 317 - TILE_OPC_SHRH, 318 - TILE_OPC_SHRH_SN, 319 - TILE_OPC_SHRI, 320 - TILE_OPC_SHRI_SN, 321 - TILE_OPC_SHRIB, 322 - TILE_OPC_SHRIB_SN, 323 - TILE_OPC_SHRIH, 324 - TILE_OPC_SHRIH_SN, 325 - TILE_OPC_SLT, 326 - TILE_OPC_SLT_SN, 327 - TILE_OPC_SLT_U, 328 - TILE_OPC_SLT_U_SN, 329 - TILE_OPC_SLTB, 330 - TILE_OPC_SLTB_SN, 331 - TILE_OPC_SLTB_U, 332 - TILE_OPC_SLTB_U_SN, 333 - TILE_OPC_SLTE, 334 - TILE_OPC_SLTE_SN, 335 - TILE_OPC_SLTE_U, 336 - TILE_OPC_SLTE_U_SN, 337 - TILE_OPC_SLTEB, 338 - TILE_OPC_SLTEB_SN, 339 - TILE_OPC_SLTEB_U, 340 - TILE_OPC_SLTEB_U_SN, 341 - TILE_OPC_SLTEH, 342 - TILE_OPC_SLTEH_SN, 343 - TILE_OPC_SLTEH_U, 344 - TILE_OPC_SLTEH_U_SN, 345 - TILE_OPC_SLTH, 346 - TILE_OPC_SLTH_SN, 347 - TILE_OPC_SLTH_U, 348 - TILE_OPC_SLTH_U_SN, 349 - TILE_OPC_SLTI, 350 - TILE_OPC_SLTI_SN, 351 - TILE_OPC_SLTI_U, 352 - TILE_OPC_SLTI_U_SN, 353 - TILE_OPC_SLTIB, 354 - TILE_OPC_SLTIB_SN, 355 - TILE_OPC_SLTIB_U, 356 - TILE_OPC_SLTIB_U_SN, 357 - TILE_OPC_SLTIH, 358 - TILE_OPC_SLTIH_SN, 359 - TILE_OPC_SLTIH_U, 360 - TILE_OPC_SLTIH_U_SN, 361 - TILE_OPC_SNE, 362 - TILE_OPC_SNE_SN, 363 - TILE_OPC_SNEB, 364 - TILE_OPC_SNEB_SN, 365 - TILE_OPC_SNEH, 366 - TILE_OPC_SNEH_SN, 367 - TILE_OPC_SRA, 368 - TILE_OPC_SRA_SN, 369 - TILE_OPC_SRAB, 370 - TILE_OPC_SRAB_SN, 371 - TILE_OPC_SRAH, 372 - TILE_OPC_SRAH_SN, 373 - TILE_OPC_SRAI, 374 - TILE_OPC_SRAI_SN, 375 - TILE_OPC_SRAIB, 376 - TILE_OPC_SRAIB_SN, 377 - TILE_OPC_SRAIH, 378 - TILE_OPC_SRAIH_SN, 379 - TILE_OPC_SUB, 380 - TILE_OPC_SUB_SN, 381 - TILE_OPC_SUBB, 382 - TILE_OPC_SUBB_SN, 383 - TILE_OPC_SUBBS_U, 384 - TILE_OPC_SUBBS_U_SN, 385 - TILE_OPC_SUBH, 386 - TILE_OPC_SUBH_SN, 387 - TILE_OPC_SUBHS, 388 - TILE_OPC_SUBHS_SN, 389 - TILE_OPC_SUBS, 390 - TILE_OPC_SUBS_SN, 391 - TILE_OPC_SW, 392 - TILE_OPC_SWADD, 393 - TILE_OPC_SWINT0, 394 - TILE_OPC_SWINT1, 395 - TILE_OPC_SWINT2, 396 - TILE_OPC_SWINT3, 397 - TILE_OPC_TBLIDXB0, 398 - TILE_OPC_TBLIDXB0_SN, 399 - TILE_OPC_TBLIDXB1, 400 - TILE_OPC_TBLIDXB1_SN, 401 - TILE_OPC_TBLIDXB2, 402 - TILE_OPC_TBLIDXB2_SN, 403 - TILE_OPC_TBLIDXB3, 404 - TILE_OPC_TBLIDXB3_SN, 405 - TILE_OPC_TNS, 406 - TILE_OPC_TNS_SN, 407 - TILE_OPC_WH64, 408 - TILE_OPC_XOR, 409 - TILE_OPC_XOR_SN, 410 - TILE_OPC_XORI, 411 - TILE_OPC_XORI_SN, 412 - TILE_OPC_NONE 413 - } tile_mnemonic; 18 + TILEGX_OPC_BPT, 19 + TILEGX_OPC_INFO, 20 + TILEGX_OPC_INFOL, 21 + TILEGX_OPC_MOVE, 22 + TILEGX_OPC_MOVEI, 23 + TILEGX_OPC_MOVELI, 24 + TILEGX_OPC_PREFETCH, 25 + TILEGX_OPC_PREFETCH_ADD_L1, 26 + TILEGX_OPC_PREFETCH_ADD_L1_FAULT, 27 + TILEGX_OPC_PREFETCH_ADD_L2, 28 + TILEGX_OPC_PREFETCH_ADD_L2_FAULT, 29 + TILEGX_OPC_PREFETCH_ADD_L3, 30 + TILEGX_OPC_PREFETCH_ADD_L3_FAULT, 31 + TILEGX_OPC_PREFETCH_L1, 32 + TILEGX_OPC_PREFETCH_L1_FAULT, 33 + TILEGX_OPC_PREFETCH_L2, 34 + TILEGX_OPC_PREFETCH_L2_FAULT, 35 + TILEGX_OPC_PREFETCH_L3, 36 + TILEGX_OPC_PREFETCH_L3_FAULT, 37 + TILEGX_OPC_RAISE, 38 + TILEGX_OPC_ADD, 39 + TILEGX_OPC_ADDI, 40 + TILEGX_OPC_ADDLI, 41 + TILEGX_OPC_ADDX, 42 + TILEGX_OPC_ADDXI, 43 + TILEGX_OPC_ADDXLI, 44 + TILEGX_OPC_ADDXSC, 45 + TILEGX_OPC_AND, 46 + TILEGX_OPC_ANDI, 47 + TILEGX_OPC_BEQZ, 48 + TILEGX_OPC_BEQZT, 49 + TILEGX_OPC_BFEXTS, 50 + TILEGX_OPC_BFEXTU, 51 + TILEGX_OPC_BFINS, 52 + TILEGX_OPC_BGEZ, 53 + TILEGX_OPC_BGEZT, 54 + TILEGX_OPC_BGTZ, 55 + TILEGX_OPC_BGTZT, 56 + TILEGX_OPC_BLBC, 57 + TILEGX_OPC_BLBCT, 58 + TILEGX_OPC_BLBS, 59 + TILEGX_OPC_BLBST, 60 + TILEGX_OPC_BLEZ, 61 + TILEGX_OPC_BLEZT, 62 + TILEGX_OPC_BLTZ, 63 + TILEGX_OPC_BLTZT, 64 + TILEGX_OPC_BNEZ, 65 + TILEGX_OPC_BNEZT, 66 + TILEGX_OPC_CLZ, 67 + TILEGX_OPC_CMOVEQZ, 68 + TILEGX_OPC_CMOVNEZ, 69 + TILEGX_OPC_CMPEQ, 70 + TILEGX_OPC_CMPEQI, 71 + TILEGX_OPC_CMPEXCH, 72 + TILEGX_OPC_CMPEXCH4, 73 + TILEGX_OPC_CMPLES, 74 + TILEGX_OPC_CMPLEU, 75 + TILEGX_OPC_CMPLTS, 76 + TILEGX_OPC_CMPLTSI, 77 + TILEGX_OPC_CMPLTU, 78 + TILEGX_OPC_CMPLTUI, 79 + TILEGX_OPC_CMPNE, 80 + TILEGX_OPC_CMUL, 81 + TILEGX_OPC_CMULA, 82 + TILEGX_OPC_CMULAF, 83 + TILEGX_OPC_CMULF, 84 + TILEGX_OPC_CMULFR, 85 + TILEGX_OPC_CMULH, 86 + TILEGX_OPC_CMULHR, 87 + TILEGX_OPC_CRC32_32, 88 + TILEGX_OPC_CRC32_8, 89 + TILEGX_OPC_CTZ, 90 + TILEGX_OPC_DBLALIGN, 91 + TILEGX_OPC_DBLALIGN2, 92 + TILEGX_OPC_DBLALIGN4, 93 + TILEGX_OPC_DBLALIGN6, 94 + TILEGX_OPC_DRAIN, 95 + TILEGX_OPC_DTLBPR, 96 + TILEGX_OPC_EXCH, 97 + TILEGX_OPC_EXCH4, 98 + TILEGX_OPC_FDOUBLE_ADD_FLAGS, 99 + TILEGX_OPC_FDOUBLE_ADDSUB, 100 + TILEGX_OPC_FDOUBLE_MUL_FLAGS, 101 + TILEGX_OPC_FDOUBLE_PACK1, 102 + TILEGX_OPC_FDOUBLE_PACK2, 103 + TILEGX_OPC_FDOUBLE_SUB_FLAGS, 104 + TILEGX_OPC_FDOUBLE_UNPACK_MAX, 105 + TILEGX_OPC_FDOUBLE_UNPACK_MIN, 106 + TILEGX_OPC_FETCHADD, 107 + TILEGX_OPC_FETCHADD4, 108 + TILEGX_OPC_FETCHADDGEZ, 109 + TILEGX_OPC_FETCHADDGEZ4, 110 + TILEGX_OPC_FETCHAND, 111 + TILEGX_OPC_FETCHAND4, 112 + TILEGX_OPC_FETCHOR, 113 + TILEGX_OPC_FETCHOR4, 114 + TILEGX_OPC_FINV, 115 + TILEGX_OPC_FLUSH, 116 + TILEGX_OPC_FLUSHWB, 117 + TILEGX_OPC_FNOP, 118 + TILEGX_OPC_FSINGLE_ADD1, 119 + TILEGX_OPC_FSINGLE_ADDSUB2, 120 + TILEGX_OPC_FSINGLE_MUL1, 121 + TILEGX_OPC_FSINGLE_MUL2, 122 + TILEGX_OPC_FSINGLE_PACK1, 123 + TILEGX_OPC_FSINGLE_PACK2, 124 + TILEGX_OPC_FSINGLE_SUB1, 125 + TILEGX_OPC_ICOH, 126 + TILEGX_OPC_ILL, 127 + TILEGX_OPC_INV, 128 + TILEGX_OPC_IRET, 129 + TILEGX_OPC_J, 130 + TILEGX_OPC_JAL, 131 + TILEGX_OPC_JALR, 132 + TILEGX_OPC_JALRP, 133 + TILEGX_OPC_JR, 134 + TILEGX_OPC_JRP, 135 + TILEGX_OPC_LD, 136 + TILEGX_OPC_LD1S, 137 + TILEGX_OPC_LD1S_ADD, 138 + TILEGX_OPC_LD1U, 139 + TILEGX_OPC_LD1U_ADD, 140 + TILEGX_OPC_LD2S, 141 + TILEGX_OPC_LD2S_ADD, 142 + TILEGX_OPC_LD2U, 143 + TILEGX_OPC_LD2U_ADD, 144 + TILEGX_OPC_LD4S, 145 + TILEGX_OPC_LD4S_ADD, 146 + TILEGX_OPC_LD4U, 147 + TILEGX_OPC_LD4U_ADD, 148 + TILEGX_OPC_LD_ADD, 149 + TILEGX_OPC_LDNA, 150 + TILEGX_OPC_LDNA_ADD, 151 + TILEGX_OPC_LDNT, 152 + TILEGX_OPC_LDNT1S, 153 + TILEGX_OPC_LDNT1S_ADD, 154 + TILEGX_OPC_LDNT1U, 155 + TILEGX_OPC_LDNT1U_ADD, 156 + TILEGX_OPC_LDNT2S, 157 + TILEGX_OPC_LDNT2S_ADD, 158 + TILEGX_OPC_LDNT2U, 159 + TILEGX_OPC_LDNT2U_ADD, 160 + TILEGX_OPC_LDNT4S, 161 + TILEGX_OPC_LDNT4S_ADD, 162 + TILEGX_OPC_LDNT4U, 163 + TILEGX_OPC_LDNT4U_ADD, 164 + TILEGX_OPC_LDNT_ADD, 165 + TILEGX_OPC_LNK, 166 + TILEGX_OPC_MF, 167 + TILEGX_OPC_MFSPR, 168 + TILEGX_OPC_MM, 169 + TILEGX_OPC_MNZ, 170 + TILEGX_OPC_MTSPR, 171 + TILEGX_OPC_MUL_HS_HS, 172 + TILEGX_OPC_MUL_HS_HU, 173 + TILEGX_OPC_MUL_HS_LS, 174 + TILEGX_OPC_MUL_HS_LU, 175 + TILEGX_OPC_MUL_HU_HU, 176 + TILEGX_OPC_MUL_HU_LS, 177 + TILEGX_OPC_MUL_HU_LU, 178 + TILEGX_OPC_MUL_LS_LS, 179 + TILEGX_OPC_MUL_LS_LU, 180 + TILEGX_OPC_MUL_LU_LU, 181 + TILEGX_OPC_MULA_HS_HS, 182 + TILEGX_OPC_MULA_HS_HU, 183 + TILEGX_OPC_MULA_HS_LS, 184 + TILEGX_OPC_MULA_HS_LU, 185 + TILEGX_OPC_MULA_HU_HU, 186 + TILEGX_OPC_MULA_HU_LS, 187 + TILEGX_OPC_MULA_HU_LU, 188 + TILEGX_OPC_MULA_LS_LS, 189 + TILEGX_OPC_MULA_LS_LU, 190 + TILEGX_OPC_MULA_LU_LU, 191 + TILEGX_OPC_MULAX, 192 + TILEGX_OPC_MULX, 193 + TILEGX_OPC_MZ, 194 + TILEGX_OPC_NAP, 195 + TILEGX_OPC_NOP, 196 + TILEGX_OPC_NOR, 197 + TILEGX_OPC_OR, 198 + TILEGX_OPC_ORI, 199 + TILEGX_OPC_PCNT, 200 + TILEGX_OPC_REVBITS, 201 + TILEGX_OPC_REVBYTES, 202 + TILEGX_OPC_ROTL, 203 + TILEGX_OPC_ROTLI, 204 + TILEGX_OPC_SHL, 205 + TILEGX_OPC_SHL16INSLI, 206 + TILEGX_OPC_SHL1ADD, 207 + TILEGX_OPC_SHL1ADDX, 208 + TILEGX_OPC_SHL2ADD, 209 + TILEGX_OPC_SHL2ADDX, 210 + TILEGX_OPC_SHL3ADD, 211 + TILEGX_OPC_SHL3ADDX, 212 + TILEGX_OPC_SHLI, 213 + TILEGX_OPC_SHLX, 214 + TILEGX_OPC_SHLXI, 215 + TILEGX_OPC_SHRS, 216 + TILEGX_OPC_SHRSI, 217 + TILEGX_OPC_SHRU, 218 + TILEGX_OPC_SHRUI, 219 + TILEGX_OPC_SHRUX, 220 + TILEGX_OPC_SHRUXI, 221 + TILEGX_OPC_SHUFFLEBYTES, 222 + TILEGX_OPC_ST, 223 + TILEGX_OPC_ST1, 224 + TILEGX_OPC_ST1_ADD, 225 + TILEGX_OPC_ST2, 226 + TILEGX_OPC_ST2_ADD, 227 + TILEGX_OPC_ST4, 228 + TILEGX_OPC_ST4_ADD, 229 + TILEGX_OPC_ST_ADD, 230 + TILEGX_OPC_STNT, 231 + TILEGX_OPC_STNT1, 232 + TILEGX_OPC_STNT1_ADD, 233 + TILEGX_OPC_STNT2, 234 + TILEGX_OPC_STNT2_ADD, 235 + TILEGX_OPC_STNT4, 236 + TILEGX_OPC_STNT4_ADD, 237 + TILEGX_OPC_STNT_ADD, 238 + TILEGX_OPC_SUB, 239 + TILEGX_OPC_SUBX, 240 + TILEGX_OPC_SUBXSC, 241 + TILEGX_OPC_SWINT0, 242 + TILEGX_OPC_SWINT1, 243 + TILEGX_OPC_SWINT2, 244 + TILEGX_OPC_SWINT3, 245 + TILEGX_OPC_TBLIDXB0, 246 + TILEGX_OPC_TBLIDXB1, 247 + TILEGX_OPC_TBLIDXB2, 248 + TILEGX_OPC_TBLIDXB3, 249 + TILEGX_OPC_V1ADD, 250 + TILEGX_OPC_V1ADDI, 251 + TILEGX_OPC_V1ADDUC, 252 + TILEGX_OPC_V1ADIFFU, 253 + TILEGX_OPC_V1AVGU, 254 + TILEGX_OPC_V1CMPEQ, 255 + TILEGX_OPC_V1CMPEQI, 256 + TILEGX_OPC_V1CMPLES, 257 + TILEGX_OPC_V1CMPLEU, 258 + TILEGX_OPC_V1CMPLTS, 259 + TILEGX_OPC_V1CMPLTSI, 260 + TILEGX_OPC_V1CMPLTU, 261 + TILEGX_OPC_V1CMPLTUI, 262 + TILEGX_OPC_V1CMPNE, 263 + TILEGX_OPC_V1DDOTPU, 264 + TILEGX_OPC_V1DDOTPUA, 265 + TILEGX_OPC_V1DDOTPUS, 266 + TILEGX_OPC_V1DDOTPUSA, 267 + TILEGX_OPC_V1DOTP, 268 + TILEGX_OPC_V1DOTPA, 269 + TILEGX_OPC_V1DOTPU, 270 + TILEGX_OPC_V1DOTPUA, 271 + TILEGX_OPC_V1DOTPUS, 272 + TILEGX_OPC_V1DOTPUSA, 273 + TILEGX_OPC_V1INT_H, 274 + TILEGX_OPC_V1INT_L, 275 + TILEGX_OPC_V1MAXU, 276 + TILEGX_OPC_V1MAXUI, 277 + TILEGX_OPC_V1MINU, 278 + TILEGX_OPC_V1MINUI, 279 + TILEGX_OPC_V1MNZ, 280 + TILEGX_OPC_V1MULTU, 281 + TILEGX_OPC_V1MULU, 282 + TILEGX_OPC_V1MULUS, 283 + TILEGX_OPC_V1MZ, 284 + TILEGX_OPC_V1SADAU, 285 + TILEGX_OPC_V1SADU, 286 + TILEGX_OPC_V1SHL, 287 + TILEGX_OPC_V1SHLI, 288 + TILEGX_OPC_V1SHRS, 289 + TILEGX_OPC_V1SHRSI, 290 + TILEGX_OPC_V1SHRU, 291 + TILEGX_OPC_V1SHRUI, 292 + TILEGX_OPC_V1SUB, 293 + TILEGX_OPC_V1SUBUC, 294 + TILEGX_OPC_V2ADD, 295 + TILEGX_OPC_V2ADDI, 296 + TILEGX_OPC_V2ADDSC, 297 + TILEGX_OPC_V2ADIFFS, 298 + TILEGX_OPC_V2AVGS, 299 + TILEGX_OPC_V2CMPEQ, 300 + TILEGX_OPC_V2CMPEQI, 301 + TILEGX_OPC_V2CMPLES, 302 + TILEGX_OPC_V2CMPLEU, 303 + TILEGX_OPC_V2CMPLTS, 304 + TILEGX_OPC_V2CMPLTSI, 305 + TILEGX_OPC_V2CMPLTU, 306 + TILEGX_OPC_V2CMPLTUI, 307 + TILEGX_OPC_V2CMPNE, 308 + TILEGX_OPC_V2DOTP, 309 + TILEGX_OPC_V2DOTPA, 310 + TILEGX_OPC_V2INT_H, 311 + TILEGX_OPC_V2INT_L, 312 + TILEGX_OPC_V2MAXS, 313 + TILEGX_OPC_V2MAXSI, 314 + TILEGX_OPC_V2MINS, 315 + TILEGX_OPC_V2MINSI, 316 + TILEGX_OPC_V2MNZ, 317 + TILEGX_OPC_V2MULFSC, 318 + TILEGX_OPC_V2MULS, 319 + TILEGX_OPC_V2MULTS, 320 + TILEGX_OPC_V2MZ, 321 + TILEGX_OPC_V2PACKH, 322 + TILEGX_OPC_V2PACKL, 323 + TILEGX_OPC_V2PACKUC, 324 + TILEGX_OPC_V2SADAS, 325 + TILEGX_OPC_V2SADAU, 326 + TILEGX_OPC_V2SADS, 327 + TILEGX_OPC_V2SADU, 328 + TILEGX_OPC_V2SHL, 329 + TILEGX_OPC_V2SHLI, 330 + TILEGX_OPC_V2SHLSC, 331 + TILEGX_OPC_V2SHRS, 332 + TILEGX_OPC_V2SHRSI, 333 + TILEGX_OPC_V2SHRU, 334 + TILEGX_OPC_V2SHRUI, 335 + TILEGX_OPC_V2SUB, 336 + TILEGX_OPC_V2SUBSC, 337 + TILEGX_OPC_V4ADD, 338 + TILEGX_OPC_V4ADDSC, 339 + TILEGX_OPC_V4INT_H, 340 + TILEGX_OPC_V4INT_L, 341 + TILEGX_OPC_V4PACKSC, 342 + TILEGX_OPC_V4SHL, 343 + TILEGX_OPC_V4SHLSC, 344 + TILEGX_OPC_V4SHRS, 345 + TILEGX_OPC_V4SHRU, 346 + TILEGX_OPC_V4SUB, 347 + TILEGX_OPC_V4SUBSC, 348 + TILEGX_OPC_WH64, 349 + TILEGX_OPC_XOR, 350 + TILEGX_OPC_XORI, 351 + TILEGX_OPC_NONE 352 + } tilegx_mnemonic; 414 353 415 354 /* 64-bit pattern for a { bpt ; nop } bundle. */ 416 - #define TILE_BPT_BUNDLE 0x400b3cae70166000ULL 355 + #define TILEGX_BPT_BUNDLE 0x286a44ae51485000ULL 417 356 418 357 419 - #define TILE_ELF_MACHINE_CODE EM_TILEPRO 358 + #define TILE_ELF_MACHINE_CODE EM_TILE64 420 359 421 - #define TILE_ELF_NAME "elf32-tilepro" 360 + #define TILE_ELF_NAME "elf32-tile64" 422 361 423 362 424 363 static __inline unsigned int 425 - get_BrOff_SN(tile_bundle_bits num) 364 + get_BFEnd_X0(tilegx_bundle_bits num) 426 365 { 427 366 const unsigned int n = (unsigned int)num; 428 - return (((n >> 0)) & 0x3ff); 367 + return (((n >> 12)) & 0x3f); 429 368 } 430 369 431 370 static __inline unsigned int 432 - get_BrOff_X1(tile_bundle_bits n) 371 + get_BFOpcodeExtension_X0(tilegx_bundle_bits num) 433 372 { 434 - return (((unsigned int)(n >> 43)) & 0x00007fff) | 435 - (((unsigned int)(n >> 20)) & 0x00018000); 373 + const unsigned int n = (unsigned int)num; 374 + return (((n >> 24)) & 0xf); 436 375 } 437 376 438 377 static __inline unsigned int 439 - get_BrType_X1(tile_bundle_bits n) 378 + get_BFStart_X0(tilegx_bundle_bits num) 440 379 { 441 - return (((unsigned int)(n >> 31)) & 0xf); 380 + const unsigned int n = (unsigned int)num; 381 + return (((n >> 18)) & 0x3f); 442 382 } 443 383 444 384 static __inline unsigned int 445 - get_Dest_Imm8_X1(tile_bundle_bits n) 385 + get_BrOff_X1(tilegx_bundle_bits n) 386 + { 387 + return (((unsigned int)(n >> 31)) & 0x0000003f) | 388 + (((unsigned int)(n >> 37)) & 0x0001ffc0); 389 + } 390 + 391 + static __inline unsigned int 392 + get_BrType_X1(tilegx_bundle_bits n) 393 + { 394 + return (((unsigned int)(n >> 54)) & 0x1f); 395 + } 396 + 397 + static __inline unsigned int 398 + get_Dest_Imm8_X1(tilegx_bundle_bits n) 446 399 { 447 400 return (((unsigned int)(n >> 31)) & 0x0000003f) | 448 401 (((unsigned int)(n >> 43)) & 0x000000c0); 449 402 } 450 403 451 404 static __inline unsigned int 452 - get_Dest_SN(tile_bundle_bits num) 453 - { 454 - const unsigned int n = (unsigned int)num; 455 - return (((n >> 2)) & 0x3); 456 - } 457 - 458 - static __inline unsigned int 459 - get_Dest_X0(tile_bundle_bits num) 405 + get_Dest_X0(tilegx_bundle_bits num) 460 406 { 461 407 const unsigned int n = (unsigned int)num; 462 408 return (((n >> 0)) & 0x3f); 463 409 } 464 410 465 411 static __inline unsigned int 466 - get_Dest_X1(tile_bundle_bits n) 412 + get_Dest_X1(tilegx_bundle_bits n) 467 413 { 468 414 return (((unsigned int)(n >> 31)) & 0x3f); 469 415 } 470 416 471 417 static __inline unsigned int 472 - get_Dest_Y0(tile_bundle_bits num) 418 + get_Dest_Y0(tilegx_bundle_bits num) 473 419 { 474 420 const unsigned int n = (unsigned int)num; 475 421 return (((n >> 0)) & 0x3f); 476 422 } 477 423 478 424 static __inline unsigned int 479 - get_Dest_Y1(tile_bundle_bits n) 425 + get_Dest_Y1(tilegx_bundle_bits n) 480 426 { 481 427 return (((unsigned int)(n >> 31)) & 0x3f); 482 428 } 483 429 484 430 static __inline unsigned int 485 - get_Imm16_X0(tile_bundle_bits num) 431 + get_Imm16_X0(tilegx_bundle_bits num) 486 432 { 487 433 const unsigned int n = (unsigned int)num; 488 434 return (((n >> 12)) & 0xffff); 489 435 } 490 436 491 437 static __inline unsigned int 492 - get_Imm16_X1(tile_bundle_bits n) 438 + get_Imm16_X1(tilegx_bundle_bits n) 493 439 { 494 440 return (((unsigned int)(n >> 43)) & 0xffff); 495 441 } 496 442 497 443 static __inline unsigned int 498 - get_Imm8_SN(tile_bundle_bits num) 444 + get_Imm8OpcodeExtension_X0(tilegx_bundle_bits num) 499 445 { 500 446 const unsigned int n = (unsigned int)num; 501 - return (((n >> 0)) & 0xff); 447 + return (((n >> 20)) & 0xff); 502 448 } 503 449 504 450 static __inline unsigned int 505 - get_Imm8_X0(tile_bundle_bits num) 451 + get_Imm8OpcodeExtension_X1(tilegx_bundle_bits n) 506 452 { 507 - const unsigned int n = (unsigned int)num; 508 - return (((n >> 12)) & 0xff); 453 + return (((unsigned int)(n >> 51)) & 0xff); 509 454 } 510 455 511 456 static __inline unsigned int 512 - get_Imm8_X1(tile_bundle_bits n) 513 - { 514 - return (((unsigned int)(n >> 43)) & 0xff); 515 - } 516 - 517 - static __inline unsigned int 518 - get_Imm8_Y0(tile_bundle_bits num) 457 + get_Imm8_X0(tilegx_bundle_bits num) 519 458 { 520 459 const unsigned int n = (unsigned int)num; 521 460 return (((n >> 12)) & 0xff); 522 461 } 523 462 524 463 static __inline unsigned int 525 - get_Imm8_Y1(tile_bundle_bits n) 464 + get_Imm8_X1(tilegx_bundle_bits n) 526 465 { 527 466 return (((unsigned int)(n >> 43)) & 0xff); 528 467 } 529 468 530 469 static __inline unsigned int 531 - get_ImmOpcodeExtension_X0(tile_bundle_bits num) 470 + get_Imm8_Y0(tilegx_bundle_bits num) 532 471 { 533 472 const unsigned int n = (unsigned int)num; 534 - return (((n >> 20)) & 0x7f); 473 + return (((n >> 12)) & 0xff); 535 474 } 536 475 537 476 static __inline unsigned int 538 - get_ImmOpcodeExtension_X1(tile_bundle_bits n) 477 + get_Imm8_Y1(tilegx_bundle_bits n) 539 478 { 540 - return (((unsigned int)(n >> 51)) & 0x7f); 479 + return (((unsigned int)(n >> 43)) & 0xff); 541 480 } 542 481 543 482 static __inline unsigned int 544 - get_ImmRROpcodeExtension_SN(tile_bundle_bits num) 483 + get_JumpOff_X1(tilegx_bundle_bits n) 545 484 { 546 - const unsigned int n = (unsigned int)num; 547 - return (((n >> 8)) & 0x3); 485 + return (((unsigned int)(n >> 31)) & 0x7ffffff); 548 486 } 549 487 550 488 static __inline unsigned int 551 - get_JOffLong_X1(tile_bundle_bits n) 489 + get_JumpOpcodeExtension_X1(tilegx_bundle_bits n) 552 490 { 553 - return (((unsigned int)(n >> 43)) & 0x00007fff) | 554 - (((unsigned int)(n >> 20)) & 0x00018000) | 555 - (((unsigned int)(n >> 14)) & 0x001e0000) | 556 - (((unsigned int)(n >> 16)) & 0x07e00000) | 557 - (((unsigned int)(n >> 31)) & 0x18000000); 491 + return (((unsigned int)(n >> 58)) & 0x1); 558 492 } 559 493 560 494 static __inline unsigned int 561 - get_JOff_X1(tile_bundle_bits n) 495 + get_MF_Imm14_X1(tilegx_bundle_bits n) 562 496 { 563 - return (((unsigned int)(n >> 43)) & 0x00007fff) | 564 - (((unsigned int)(n >> 20)) & 0x00018000) | 565 - (((unsigned int)(n >> 14)) & 0x001e0000) | 566 - (((unsigned int)(n >> 16)) & 0x07e00000) | 567 - (((unsigned int)(n >> 31)) & 0x08000000); 497 + return (((unsigned int)(n >> 37)) & 0x3fff); 568 498 } 569 499 570 500 static __inline unsigned int 571 - get_MF_Imm15_X1(tile_bundle_bits n) 572 - { 573 - return (((unsigned int)(n >> 37)) & 0x00003fff) | 574 - (((unsigned int)(n >> 44)) & 0x00004000); 575 - } 576 - 577 - static __inline unsigned int 578 - get_MMEnd_X0(tile_bundle_bits num) 579 - { 580 - const unsigned int n = (unsigned int)num; 581 - return (((n >> 18)) & 0x1f); 582 - } 583 - 584 - static __inline unsigned int 585 - get_MMEnd_X1(tile_bundle_bits n) 586 - { 587 - return (((unsigned int)(n >> 49)) & 0x1f); 588 - } 589 - 590 - static __inline unsigned int 591 - get_MMStart_X0(tile_bundle_bits num) 592 - { 593 - const unsigned int n = (unsigned int)num; 594 - return (((n >> 23)) & 0x1f); 595 - } 596 - 597 - static __inline unsigned int 598 - get_MMStart_X1(tile_bundle_bits n) 599 - { 600 - return (((unsigned int)(n >> 54)) & 0x1f); 601 - } 602 - 603 - static __inline unsigned int 604 - get_MT_Imm15_X1(tile_bundle_bits n) 501 + get_MT_Imm14_X1(tilegx_bundle_bits n) 605 502 { 606 503 return (((unsigned int)(n >> 31)) & 0x0000003f) | 607 - (((unsigned int)(n >> 37)) & 0x00003fc0) | 608 - (((unsigned int)(n >> 44)) & 0x00004000); 504 + (((unsigned int)(n >> 37)) & 0x00003fc0); 609 505 } 610 506 611 507 static __inline unsigned int 612 - get_Mode(tile_bundle_bits n) 508 + get_Mode(tilegx_bundle_bits n) 613 509 { 614 - return (((unsigned int)(n >> 63)) & 0x1); 510 + return (((unsigned int)(n >> 62)) & 0x3); 615 511 } 616 512 617 513 static __inline unsigned int 618 - get_NoRegOpcodeExtension_SN(tile_bundle_bits num) 619 - { 620 - const unsigned int n = (unsigned int)num; 621 - return (((n >> 0)) & 0xf); 622 - } 623 - 624 - static __inline unsigned int 625 - get_Opcode_SN(tile_bundle_bits num) 626 - { 627 - const unsigned int n = (unsigned int)num; 628 - return (((n >> 10)) & 0x3f); 629 - } 630 - 631 - static __inline unsigned int 632 - get_Opcode_X0(tile_bundle_bits num) 514 + get_Opcode_X0(tilegx_bundle_bits num) 633 515 { 634 516 const unsigned int n = (unsigned int)num; 635 517 return (((n >> 28)) & 0x7); 636 518 } 637 519 638 520 static __inline unsigned int 639 - get_Opcode_X1(tile_bundle_bits n) 521 + get_Opcode_X1(tilegx_bundle_bits n) 640 522 { 641 - return (((unsigned int)(n >> 59)) & 0xf); 523 + return (((unsigned int)(n >> 59)) & 0x7); 642 524 } 643 525 644 526 static __inline unsigned int 645 - get_Opcode_Y0(tile_bundle_bits num) 527 + get_Opcode_Y0(tilegx_bundle_bits num) 646 528 { 647 529 const unsigned int n = (unsigned int)num; 648 530 return (((n >> 27)) & 0xf); 649 531 } 650 532 651 533 static __inline unsigned int 652 - get_Opcode_Y1(tile_bundle_bits n) 534 + get_Opcode_Y1(tilegx_bundle_bits n) 653 535 { 654 - return (((unsigned int)(n >> 59)) & 0xf); 536 + return (((unsigned int)(n >> 58)) & 0xf); 655 537 } 656 538 657 539 static __inline unsigned int 658 - get_Opcode_Y2(tile_bundle_bits n) 540 + get_Opcode_Y2(tilegx_bundle_bits n) 659 541 { 660 - return (((unsigned int)(n >> 56)) & 0x7); 542 + return (((n >> 26)) & 0x00000001) | 543 + (((unsigned int)(n >> 56)) & 0x00000002); 661 544 } 662 545 663 546 static __inline unsigned int 664 - get_RROpcodeExtension_SN(tile_bundle_bits num) 665 - { 666 - const unsigned int n = (unsigned int)num; 667 - return (((n >> 4)) & 0xf); 668 - } 669 - 670 - static __inline unsigned int 671 - get_RRROpcodeExtension_X0(tile_bundle_bits num) 547 + get_RRROpcodeExtension_X0(tilegx_bundle_bits num) 672 548 { 673 549 const unsigned int n = (unsigned int)num; 674 - return (((n >> 18)) & 0x1ff); 550 + return (((n >> 18)) & 0x3ff); 675 551 } 676 552 677 553 static __inline unsigned int 678 - get_RRROpcodeExtension_X1(tile_bundle_bits n) 554 + get_RRROpcodeExtension_X1(tilegx_bundle_bits n) 679 555 { 680 - return (((unsigned int)(n >> 49)) & 0x1ff); 556 + return (((unsigned int)(n >> 49)) & 0x3ff); 681 557 } 682 558 683 559 static __inline unsigned int 684 - get_RRROpcodeExtension_Y0(tile_bundle_bits num) 560 + get_RRROpcodeExtension_Y0(tilegx_bundle_bits num) 685 561 { 686 562 const unsigned int n = (unsigned int)num; 687 563 return (((n >> 18)) & 0x3); 688 564 } 689 565 690 566 static __inline unsigned int 691 - get_RRROpcodeExtension_Y1(tile_bundle_bits n) 567 + get_RRROpcodeExtension_Y1(tilegx_bundle_bits n) 692 568 { 693 569 return (((unsigned int)(n >> 49)) & 0x3); 694 570 } 695 571 696 572 static __inline unsigned int 697 - get_RouteOpcodeExtension_SN(tile_bundle_bits num) 573 + get_ShAmt_X0(tilegx_bundle_bits num) 698 574 { 699 575 const unsigned int n = (unsigned int)num; 700 - return (((n >> 0)) & 0x3ff); 576 + return (((n >> 12)) & 0x3f); 701 577 } 702 578 703 579 static __inline unsigned int 704 - get_S_X0(tile_bundle_bits num) 580 + get_ShAmt_X1(tilegx_bundle_bits n) 581 + { 582 + return (((unsigned int)(n >> 43)) & 0x3f); 583 + } 584 + 585 + static __inline unsigned int 586 + get_ShAmt_Y0(tilegx_bundle_bits num) 705 587 { 706 588 const unsigned int n = (unsigned int)num; 707 - return (((n >> 27)) & 0x1); 589 + return (((n >> 12)) & 0x3f); 708 590 } 709 591 710 592 static __inline unsigned int 711 - get_S_X1(tile_bundle_bits n) 593 + get_ShAmt_Y1(tilegx_bundle_bits n) 712 594 { 713 - return (((unsigned int)(n >> 58)) & 0x1); 595 + return (((unsigned int)(n >> 43)) & 0x3f); 714 596 } 715 597 716 598 static __inline unsigned int 717 - get_ShAmt_X0(tile_bundle_bits num) 718 - { 719 - const unsigned int n = (unsigned int)num; 720 - return (((n >> 12)) & 0x1f); 721 - } 722 - 723 - static __inline unsigned int 724 - get_ShAmt_X1(tile_bundle_bits n) 725 - { 726 - return (((unsigned int)(n >> 43)) & 0x1f); 727 - } 728 - 729 - static __inline unsigned int 730 - get_ShAmt_Y0(tile_bundle_bits num) 599 + get_ShiftOpcodeExtension_X0(tilegx_bundle_bits num) 731 600 { 732 601 const unsigned int n = (unsigned int)num; 733 - return (((n >> 12)) & 0x1f); 602 + return (((n >> 18)) & 0x3ff); 734 603 } 735 604 736 605 static __inline unsigned int 737 - get_ShAmt_Y1(tile_bundle_bits n) 606 + get_ShiftOpcodeExtension_X1(tilegx_bundle_bits n) 738 607 { 739 - return (((unsigned int)(n >> 43)) & 0x1f); 608 + return (((unsigned int)(n >> 49)) & 0x3ff); 740 609 } 741 610 742 611 static __inline unsigned int 743 - get_SrcA_X0(tile_bundle_bits num) 612 + get_ShiftOpcodeExtension_Y0(tilegx_bundle_bits num) 744 613 { 745 614 const unsigned int n = (unsigned int)num; 746 - return (((n >> 6)) & 0x3f); 615 + return (((n >> 18)) & 0x3); 747 616 } 748 617 749 618 static __inline unsigned int 750 - get_SrcA_X1(tile_bundle_bits n) 619 + get_ShiftOpcodeExtension_Y1(tilegx_bundle_bits n) 751 620 { 752 - return (((unsigned int)(n >> 37)) & 0x3f); 621 + return (((unsigned int)(n >> 49)) & 0x3); 753 622 } 754 623 755 624 static __inline unsigned int 756 - get_SrcA_Y0(tile_bundle_bits num) 625 + get_SrcA_X0(tilegx_bundle_bits num) 757 626 { 758 627 const unsigned int n = (unsigned int)num; 759 628 return (((n >> 6)) & 0x3f); 760 629 } 761 630 762 631 static __inline unsigned int 763 - get_SrcA_Y1(tile_bundle_bits n) 632 + get_SrcA_X1(tilegx_bundle_bits n) 764 633 { 765 634 return (((unsigned int)(n >> 37)) & 0x3f); 766 635 } 767 636 768 637 static __inline unsigned int 769 - get_SrcA_Y2(tile_bundle_bits n) 638 + get_SrcA_Y0(tilegx_bundle_bits num) 770 639 { 771 - return (((n >> 26)) & 0x00000001) | 772 - (((unsigned int)(n >> 50)) & 0x0000003e); 640 + const unsigned int n = (unsigned int)num; 641 + return (((n >> 6)) & 0x3f); 773 642 } 774 643 775 644 static __inline unsigned int 776 - get_SrcBDest_Y2(tile_bundle_bits num) 645 + get_SrcA_Y1(tilegx_bundle_bits n) 646 + { 647 + return (((unsigned int)(n >> 37)) & 0x3f); 648 + } 649 + 650 + static __inline unsigned int 651 + get_SrcA_Y2(tilegx_bundle_bits num) 777 652 { 778 653 const unsigned int n = (unsigned int)num; 779 654 return (((n >> 20)) & 0x3f); 780 655 } 781 656 782 657 static __inline unsigned int 783 - get_SrcB_X0(tile_bundle_bits num) 658 + get_SrcBDest_Y2(tilegx_bundle_bits n) 659 + { 660 + return (((unsigned int)(n >> 51)) & 0x3f); 661 + } 662 + 663 + static __inline unsigned int 664 + get_SrcB_X0(tilegx_bundle_bits num) 784 665 { 785 666 const unsigned int n = (unsigned int)num; 786 667 return (((n >> 12)) & 0x3f); 787 668 } 788 669 789 670 static __inline unsigned int 790 - get_SrcB_X1(tile_bundle_bits n) 671 + get_SrcB_X1(tilegx_bundle_bits n) 791 672 { 792 673 return (((unsigned int)(n >> 43)) & 0x3f); 793 674 } 794 675 795 676 static __inline unsigned int 796 - get_SrcB_Y0(tile_bundle_bits num) 677 + get_SrcB_Y0(tilegx_bundle_bits num) 797 678 { 798 679 const unsigned int n = (unsigned int)num; 799 680 return (((n >> 12)) & 0x3f); 800 681 } 801 682 802 683 static __inline unsigned int 803 - get_SrcB_Y1(tile_bundle_bits n) 684 + get_SrcB_Y1(tilegx_bundle_bits n) 804 685 { 805 686 return (((unsigned int)(n >> 43)) & 0x3f); 806 687 } 807 688 808 689 static __inline unsigned int 809 - get_Src_SN(tile_bundle_bits num) 690 + get_UnaryOpcodeExtension_X0(tilegx_bundle_bits num) 810 691 { 811 692 const unsigned int n = (unsigned int)num; 812 - return (((n >> 0)) & 0x3); 693 + return (((n >> 12)) & 0x3f); 813 694 } 814 695 815 696 static __inline unsigned int 816 - get_UnOpcodeExtension_X0(tile_bundle_bits num) 697 + get_UnaryOpcodeExtension_X1(tilegx_bundle_bits n) 698 + { 699 + return (((unsigned int)(n >> 43)) & 0x3f); 700 + } 701 + 702 + static __inline unsigned int 703 + get_UnaryOpcodeExtension_Y0(tilegx_bundle_bits num) 817 704 { 818 705 const unsigned int n = (unsigned int)num; 819 - return (((n >> 12)) & 0x1f); 706 + return (((n >> 12)) & 0x3f); 820 707 } 821 708 822 709 static __inline unsigned int 823 - get_UnOpcodeExtension_X1(tile_bundle_bits n) 710 + get_UnaryOpcodeExtension_Y1(tilegx_bundle_bits n) 824 711 { 825 - return (((unsigned int)(n >> 43)) & 0x1f); 826 - } 827 - 828 - static __inline unsigned int 829 - get_UnOpcodeExtension_Y0(tile_bundle_bits num) 830 - { 831 - const unsigned int n = (unsigned int)num; 832 - return (((n >> 12)) & 0x1f); 833 - } 834 - 835 - static __inline unsigned int 836 - get_UnOpcodeExtension_Y1(tile_bundle_bits n) 837 - { 838 - return (((unsigned int)(n >> 43)) & 0x1f); 839 - } 840 - 841 - static __inline unsigned int 842 - get_UnShOpcodeExtension_X0(tile_bundle_bits num) 843 - { 844 - const unsigned int n = (unsigned int)num; 845 - return (((n >> 17)) & 0x3ff); 846 - } 847 - 848 - static __inline unsigned int 849 - get_UnShOpcodeExtension_X1(tile_bundle_bits n) 850 - { 851 - return (((unsigned int)(n >> 48)) & 0x3ff); 852 - } 853 - 854 - static __inline unsigned int 855 - get_UnShOpcodeExtension_Y0(tile_bundle_bits num) 856 - { 857 - const unsigned int n = (unsigned int)num; 858 - return (((n >> 17)) & 0x7); 859 - } 860 - 861 - static __inline unsigned int 862 - get_UnShOpcodeExtension_Y1(tile_bundle_bits n) 863 - { 864 - return (((unsigned int)(n >> 48)) & 0x7); 712 + return (((unsigned int)(n >> 43)) & 0x3f); 865 713 } 866 714 867 715 ··· 722 874 723 875 724 876 725 - static __inline tile_bundle_bits 726 - create_BrOff_SN(int num) 877 + static __inline tilegx_bundle_bits 878 + create_BFEnd_X0(int num) 727 879 { 728 880 const unsigned int n = (unsigned int)num; 729 - return ((n & 0x3ff) << 0); 881 + return ((n & 0x3f) << 12); 730 882 } 731 883 732 - static __inline tile_bundle_bits 884 + static __inline tilegx_bundle_bits 885 + create_BFOpcodeExtension_X0(int num) 886 + { 887 + const unsigned int n = (unsigned int)num; 888 + return ((n & 0xf) << 24); 889 + } 890 + 891 + static __inline tilegx_bundle_bits 892 + create_BFStart_X0(int num) 893 + { 894 + const unsigned int n = (unsigned int)num; 895 + return ((n & 0x3f) << 18); 896 + } 897 + 898 + static __inline tilegx_bundle_bits 733 899 create_BrOff_X1(int num) 734 900 { 735 901 const unsigned int n = (unsigned int)num; 736 - return (((tile_bundle_bits)(n & 0x00007fff)) << 43) | 737 - (((tile_bundle_bits)(n & 0x00018000)) << 20); 902 + return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) | 903 + (((tilegx_bundle_bits)(n & 0x0001ffc0)) << 37); 738 904 } 739 905 740 - static __inline tile_bundle_bits 906 + static __inline tilegx_bundle_bits 741 907 create_BrType_X1(int num) 742 908 { 743 909 const unsigned int n = (unsigned int)num; 744 - return (((tile_bundle_bits)(n & 0xf)) << 31); 910 + return (((tilegx_bundle_bits)(n & 0x1f)) << 54); 745 911 } 746 912 747 - static __inline tile_bundle_bits 913 + static __inline tilegx_bundle_bits 748 914 create_Dest_Imm8_X1(int num) 749 915 { 750 916 const unsigned int n = (unsigned int)num; 751 - return (((tile_bundle_bits)(n & 0x0000003f)) << 31) | 752 - (((tile_bundle_bits)(n & 0x000000c0)) << 43); 917 + return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) | 918 + (((tilegx_bundle_bits)(n & 0x000000c0)) << 43); 753 919 } 754 920 755 - static __inline tile_bundle_bits 756 - create_Dest_SN(int num) 757 - { 758 - const unsigned int n = (unsigned int)num; 759 - return ((n & 0x3) << 2); 760 - } 761 - 762 - static __inline tile_bundle_bits 921 + static __inline tilegx_bundle_bits 763 922 create_Dest_X0(int num) 764 923 { 765 924 const unsigned int n = (unsigned int)num; 766 925 return ((n & 0x3f) << 0); 767 926 } 768 927 769 - static __inline tile_bundle_bits 928 + static __inline tilegx_bundle_bits 770 929 create_Dest_X1(int num) 771 930 { 772 931 const unsigned int n = (unsigned int)num; 773 - return (((tile_bundle_bits)(n & 0x3f)) << 31); 932 + return (((tilegx_bundle_bits)(n & 0x3f)) << 31); 774 933 } 775 934 776 - static __inline tile_bundle_bits 935 + static __inline tilegx_bundle_bits 777 936 create_Dest_Y0(int num) 778 937 { 779 938 const unsigned int n = (unsigned int)num; 780 939 return ((n & 0x3f) << 0); 781 940 } 782 941 783 - static __inline tile_bundle_bits 942 + static __inline tilegx_bundle_bits 784 943 create_Dest_Y1(int num) 785 944 { 786 945 const unsigned int n = (unsigned int)num; 787 - return (((tile_bundle_bits)(n & 0x3f)) << 31); 946 + return (((tilegx_bundle_bits)(n & 0x3f)) << 31); 788 947 } 789 948 790 - static __inline tile_bundle_bits 949 + static __inline tilegx_bundle_bits 791 950 create_Imm16_X0(int num) 792 951 { 793 952 const unsigned int n = (unsigned int)num; 794 953 return ((n & 0xffff) << 12); 795 954 } 796 955 797 - static __inline tile_bundle_bits 956 + static __inline tilegx_bundle_bits 798 957 create_Imm16_X1(int num) 799 958 { 800 959 const unsigned int n = (unsigned int)num; 801 - return (((tile_bundle_bits)(n & 0xffff)) << 43); 960 + return (((tilegx_bundle_bits)(n & 0xffff)) << 43); 802 961 } 803 962 804 - static __inline tile_bundle_bits 805 - create_Imm8_SN(int num) 963 + static __inline tilegx_bundle_bits 964 + create_Imm8OpcodeExtension_X0(int num) 806 965 { 807 966 const unsigned int n = (unsigned int)num; 808 - return ((n & 0xff) << 0); 967 + return ((n & 0xff) << 20); 809 968 } 810 969 811 - static __inline tile_bundle_bits 970 + static __inline tilegx_bundle_bits 971 + create_Imm8OpcodeExtension_X1(int num) 972 + { 973 + const unsigned int n = (unsigned int)num; 974 + return (((tilegx_bundle_bits)(n & 0xff)) << 51); 975 + } 976 + 977 + static __inline tilegx_bundle_bits 812 978 create_Imm8_X0(int num) 813 979 { 814 980 const unsigned int n = (unsigned int)num; 815 981 return ((n & 0xff) << 12); 816 982 } 817 983 818 - static __inline tile_bundle_bits 984 + static __inline tilegx_bundle_bits 819 985 create_Imm8_X1(int num) 820 986 { 821 987 const unsigned int n = (unsigned int)num; 822 - return (((tile_bundle_bits)(n & 0xff)) << 43); 988 + return (((tilegx_bundle_bits)(n & 0xff)) << 43); 823 989 } 824 990 825 - static __inline tile_bundle_bits 991 + static __inline tilegx_bundle_bits 826 992 create_Imm8_Y0(int num) 827 993 { 828 994 const unsigned int n = (unsigned int)num; 829 995 return ((n & 0xff) << 12); 830 996 } 831 997 832 - static __inline tile_bundle_bits 998 + static __inline tilegx_bundle_bits 833 999 create_Imm8_Y1(int num) 834 1000 { 835 1001 const unsigned int n = (unsigned int)num; 836 - return (((tile_bundle_bits)(n & 0xff)) << 43); 1002 + return (((tilegx_bundle_bits)(n & 0xff)) << 43); 837 1003 } 838 1004 839 - static __inline tile_bundle_bits 840 - create_ImmOpcodeExtension_X0(int num) 1005 + static __inline tilegx_bundle_bits 1006 + create_JumpOff_X1(int num) 841 1007 { 842 1008 const unsigned int n = (unsigned int)num; 843 - return ((n & 0x7f) << 20); 1009 + return (((tilegx_bundle_bits)(n & 0x7ffffff)) << 31); 844 1010 } 845 1011 846 - static __inline tile_bundle_bits 847 - create_ImmOpcodeExtension_X1(int num) 1012 + static __inline tilegx_bundle_bits 1013 + create_JumpOpcodeExtension_X1(int num) 848 1014 { 849 1015 const unsigned int n = (unsigned int)num; 850 - return (((tile_bundle_bits)(n & 0x7f)) << 51); 1016 + return (((tilegx_bundle_bits)(n & 0x1)) << 58); 851 1017 } 852 1018 853 - static __inline tile_bundle_bits 854 - create_ImmRROpcodeExtension_SN(int num) 1019 + static __inline tilegx_bundle_bits 1020 + create_MF_Imm14_X1(int num) 855 1021 { 856 1022 const unsigned int n = (unsigned int)num; 857 - return ((n & 0x3) << 8); 1023 + return (((tilegx_bundle_bits)(n & 0x3fff)) << 37); 858 1024 } 859 1025 860 - static __inline tile_bundle_bits 861 - create_JOffLong_X1(int num) 1026 + static __inline tilegx_bundle_bits 1027 + create_MT_Imm14_X1(int num) 862 1028 { 863 1029 const unsigned int n = (unsigned int)num; 864 - return (((tile_bundle_bits)(n & 0x00007fff)) << 43) | 865 - (((tile_bundle_bits)(n & 0x00018000)) << 20) | 866 - (((tile_bundle_bits)(n & 0x001e0000)) << 14) | 867 - (((tile_bundle_bits)(n & 0x07e00000)) << 16) | 868 - (((tile_bundle_bits)(n & 0x18000000)) << 31); 1030 + return (((tilegx_bundle_bits)(n & 0x0000003f)) << 31) | 1031 + (((tilegx_bundle_bits)(n & 0x00003fc0)) << 37); 869 1032 } 870 1033 871 - static __inline tile_bundle_bits 872 - create_JOff_X1(int num) 873 - { 874 - const unsigned int n = (unsigned int)num; 875 - return (((tile_bundle_bits)(n & 0x00007fff)) << 43) | 876 - (((tile_bundle_bits)(n & 0x00018000)) << 20) | 877 - (((tile_bundle_bits)(n & 0x001e0000)) << 14) | 878 - (((tile_bundle_bits)(n & 0x07e00000)) << 16) | 879 - (((tile_bundle_bits)(n & 0x08000000)) << 31); 880 - } 881 - 882 - static __inline tile_bundle_bits 883 - create_MF_Imm15_X1(int num) 884 - { 885 - const unsigned int n = (unsigned int)num; 886 - return (((tile_bundle_bits)(n & 0x00003fff)) << 37) | 887 - (((tile_bundle_bits)(n & 0x00004000)) << 44); 888 - } 889 - 890 - static __inline tile_bundle_bits 891 - create_MMEnd_X0(int num) 892 - { 893 - const unsigned int n = (unsigned int)num; 894 - return ((n & 0x1f) << 18); 895 - } 896 - 897 - static __inline tile_bundle_bits 898 - create_MMEnd_X1(int num) 899 - { 900 - const unsigned int n = (unsigned int)num; 901 - return (((tile_bundle_bits)(n & 0x1f)) << 49); 902 - } 903 - 904 - static __inline tile_bundle_bits 905 - create_MMStart_X0(int num) 906 - { 907 - const unsigned int n = (unsigned int)num; 908 - return ((n & 0x1f) << 23); 909 - } 910 - 911 - static __inline tile_bundle_bits 912 - create_MMStart_X1(int num) 913 - { 914 - const unsigned int n = (unsigned int)num; 915 - return (((tile_bundle_bits)(n & 0x1f)) << 54); 916 - } 917 - 918 - static __inline tile_bundle_bits 919 - create_MT_Imm15_X1(int num) 920 - { 921 - const unsigned int n = (unsigned int)num; 922 - return (((tile_bundle_bits)(n & 0x0000003f)) << 31) | 923 - (((tile_bundle_bits)(n & 0x00003fc0)) << 37) | 924 - (((tile_bundle_bits)(n & 0x00004000)) << 44); 925 - } 926 - 927 - static __inline tile_bundle_bits 1034 + static __inline tilegx_bundle_bits 928 1035 create_Mode(int num) 929 1036 { 930 1037 const unsigned int n = (unsigned int)num; 931 - return (((tile_bundle_bits)(n & 0x1)) << 63); 1038 + return (((tilegx_bundle_bits)(n & 0x3)) << 62); 932 1039 } 933 1040 934 - static __inline tile_bundle_bits 935 - create_NoRegOpcodeExtension_SN(int num) 936 - { 937 - const unsigned int n = (unsigned int)num; 938 - return ((n & 0xf) << 0); 939 - } 940 - 941 - static __inline tile_bundle_bits 942 - create_Opcode_SN(int num) 943 - { 944 - const unsigned int n = (unsigned int)num; 945 - return ((n & 0x3f) << 10); 946 - } 947 - 948 - static __inline tile_bundle_bits 1041 + static __inline tilegx_bundle_bits 949 1042 create_Opcode_X0(int num) 950 1043 { 951 1044 const unsigned int n = (unsigned int)num; 952 1045 return ((n & 0x7) << 28); 953 1046 } 954 1047 955 - static __inline tile_bundle_bits 1048 + static __inline tilegx_bundle_bits 956 1049 create_Opcode_X1(int num) 957 1050 { 958 1051 const unsigned int n = (unsigned int)num; 959 - return (((tile_bundle_bits)(n & 0xf)) << 59); 1052 + return (((tilegx_bundle_bits)(n & 0x7)) << 59); 960 1053 } 961 1054 962 - static __inline tile_bundle_bits 1055 + static __inline tilegx_bundle_bits 963 1056 create_Opcode_Y0(int num) 964 1057 { 965 1058 const unsigned int n = (unsigned int)num; 966 1059 return ((n & 0xf) << 27); 967 1060 } 968 1061 969 - static __inline tile_bundle_bits 1062 + static __inline tilegx_bundle_bits 970 1063 create_Opcode_Y1(int num) 971 1064 { 972 1065 const unsigned int n = (unsigned int)num; 973 - return (((tile_bundle_bits)(n & 0xf)) << 59); 1066 + return (((tilegx_bundle_bits)(n & 0xf)) << 58); 974 1067 } 975 1068 976 - static __inline tile_bundle_bits 1069 + static __inline tilegx_bundle_bits 977 1070 create_Opcode_Y2(int num) 978 1071 { 979 1072 const unsigned int n = (unsigned int)num; 980 - return (((tile_bundle_bits)(n & 0x7)) << 56); 1073 + return ((n & 0x00000001) << 26) | 1074 + (((tilegx_bundle_bits)(n & 0x00000002)) << 56); 981 1075 } 982 1076 983 - static __inline tile_bundle_bits 984 - create_RROpcodeExtension_SN(int num) 985 - { 986 - const unsigned int n = (unsigned int)num; 987 - return ((n & 0xf) << 4); 988 - } 989 - 990 - static __inline tile_bundle_bits 1077 + static __inline tilegx_bundle_bits 991 1078 create_RRROpcodeExtension_X0(int num) 992 1079 { 993 1080 const unsigned int n = (unsigned int)num; 994 - return ((n & 0x1ff) << 18); 1081 + return ((n & 0x3ff) << 18); 995 1082 } 996 1083 997 - static __inline tile_bundle_bits 1084 + static __inline tilegx_bundle_bits 998 1085 create_RRROpcodeExtension_X1(int num) 999 1086 { 1000 1087 const unsigned int n = (unsigned int)num; 1001 - return (((tile_bundle_bits)(n & 0x1ff)) << 49); 1088 + return (((tilegx_bundle_bits)(n & 0x3ff)) << 49); 1002 1089 } 1003 1090 1004 - static __inline tile_bundle_bits 1091 + static __inline tilegx_bundle_bits 1005 1092 create_RRROpcodeExtension_Y0(int num) 1006 1093 { 1007 1094 const unsigned int n = (unsigned int)num; 1008 1095 return ((n & 0x3) << 18); 1009 1096 } 1010 1097 1011 - static __inline tile_bundle_bits 1098 + static __inline tilegx_bundle_bits 1012 1099 create_RRROpcodeExtension_Y1(int num) 1013 1100 { 1014 1101 const unsigned int n = (unsigned int)num; 1015 - return (((tile_bundle_bits)(n & 0x3)) << 49); 1102 + return (((tilegx_bundle_bits)(n & 0x3)) << 49); 1016 1103 } 1017 1104 1018 - static __inline tile_bundle_bits 1019 - create_RouteOpcodeExtension_SN(int num) 1020 - { 1021 - const unsigned int n = (unsigned int)num; 1022 - return ((n & 0x3ff) << 0); 1023 - } 1024 - 1025 - static __inline tile_bundle_bits 1026 - create_S_X0(int num) 1027 - { 1028 - const unsigned int n = (unsigned int)num; 1029 - return ((n & 0x1) << 27); 1030 - } 1031 - 1032 - static __inline tile_bundle_bits 1033 - create_S_X1(int num) 1034 - { 1035 - const unsigned int n = (unsigned int)num; 1036 - return (((tile_bundle_bits)(n & 0x1)) << 58); 1037 - } 1038 - 1039 - static __inline tile_bundle_bits 1105 + static __inline tilegx_bundle_bits 1040 1106 create_ShAmt_X0(int num) 1041 1107 { 1042 1108 const unsigned int n = (unsigned int)num; 1043 - return ((n & 0x1f) << 12); 1109 + return ((n & 0x3f) << 12); 1044 1110 } 1045 1111 1046 - static __inline tile_bundle_bits 1112 + static __inline tilegx_bundle_bits 1047 1113 create_ShAmt_X1(int num) 1048 1114 { 1049 1115 const unsigned int n = (unsigned int)num; 1050 - return (((tile_bundle_bits)(n & 0x1f)) << 43); 1116 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1051 1117 } 1052 1118 1053 - static __inline tile_bundle_bits 1119 + static __inline tilegx_bundle_bits 1054 1120 create_ShAmt_Y0(int num) 1055 1121 { 1056 1122 const unsigned int n = (unsigned int)num; 1057 - return ((n & 0x1f) << 12); 1123 + return ((n & 0x3f) << 12); 1058 1124 } 1059 1125 1060 - static __inline tile_bundle_bits 1126 + static __inline tilegx_bundle_bits 1061 1127 create_ShAmt_Y1(int num) 1062 1128 { 1063 1129 const unsigned int n = (unsigned int)num; 1064 - return (((tile_bundle_bits)(n & 0x1f)) << 43); 1130 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1065 1131 } 1066 1132 1067 - static __inline tile_bundle_bits 1133 + static __inline tilegx_bundle_bits 1134 + create_ShiftOpcodeExtension_X0(int num) 1135 + { 1136 + const unsigned int n = (unsigned int)num; 1137 + return ((n & 0x3ff) << 18); 1138 + } 1139 + 1140 + static __inline tilegx_bundle_bits 1141 + create_ShiftOpcodeExtension_X1(int num) 1142 + { 1143 + const unsigned int n = (unsigned int)num; 1144 + return (((tilegx_bundle_bits)(n & 0x3ff)) << 49); 1145 + } 1146 + 1147 + static __inline tilegx_bundle_bits 1148 + create_ShiftOpcodeExtension_Y0(int num) 1149 + { 1150 + const unsigned int n = (unsigned int)num; 1151 + return ((n & 0x3) << 18); 1152 + } 1153 + 1154 + static __inline tilegx_bundle_bits 1155 + create_ShiftOpcodeExtension_Y1(int num) 1156 + { 1157 + const unsigned int n = (unsigned int)num; 1158 + return (((tilegx_bundle_bits)(n & 0x3)) << 49); 1159 + } 1160 + 1161 + static __inline tilegx_bundle_bits 1068 1162 create_SrcA_X0(int num) 1069 1163 { 1070 1164 const unsigned int n = (unsigned int)num; 1071 1165 return ((n & 0x3f) << 6); 1072 1166 } 1073 1167 1074 - static __inline tile_bundle_bits 1168 + static __inline tilegx_bundle_bits 1075 1169 create_SrcA_X1(int num) 1076 1170 { 1077 1171 const unsigned int n = (unsigned int)num; 1078 - return (((tile_bundle_bits)(n & 0x3f)) << 37); 1172 + return (((tilegx_bundle_bits)(n & 0x3f)) << 37); 1079 1173 } 1080 1174 1081 - static __inline tile_bundle_bits 1175 + static __inline tilegx_bundle_bits 1082 1176 create_SrcA_Y0(int num) 1083 1177 { 1084 1178 const unsigned int n = (unsigned int)num; 1085 1179 return ((n & 0x3f) << 6); 1086 1180 } 1087 1181 1088 - static __inline tile_bundle_bits 1182 + static __inline tilegx_bundle_bits 1089 1183 create_SrcA_Y1(int num) 1090 1184 { 1091 1185 const unsigned int n = (unsigned int)num; 1092 - return (((tile_bundle_bits)(n & 0x3f)) << 37); 1186 + return (((tilegx_bundle_bits)(n & 0x3f)) << 37); 1093 1187 } 1094 1188 1095 - static __inline tile_bundle_bits 1189 + static __inline tilegx_bundle_bits 1096 1190 create_SrcA_Y2(int num) 1097 - { 1098 - const unsigned int n = (unsigned int)num; 1099 - return ((n & 0x00000001) << 26) | 1100 - (((tile_bundle_bits)(n & 0x0000003e)) << 50); 1101 - } 1102 - 1103 - static __inline tile_bundle_bits 1104 - create_SrcBDest_Y2(int num) 1105 1191 { 1106 1192 const unsigned int n = (unsigned int)num; 1107 1193 return ((n & 0x3f) << 20); 1108 1194 } 1109 1195 1110 - static __inline tile_bundle_bits 1196 + static __inline tilegx_bundle_bits 1197 + create_SrcBDest_Y2(int num) 1198 + { 1199 + const unsigned int n = (unsigned int)num; 1200 + return (((tilegx_bundle_bits)(n & 0x3f)) << 51); 1201 + } 1202 + 1203 + static __inline tilegx_bundle_bits 1111 1204 create_SrcB_X0(int num) 1112 1205 { 1113 1206 const unsigned int n = (unsigned int)num; 1114 1207 return ((n & 0x3f) << 12); 1115 1208 } 1116 1209 1117 - static __inline tile_bundle_bits 1210 + static __inline tilegx_bundle_bits 1118 1211 create_SrcB_X1(int num) 1119 1212 { 1120 1213 const unsigned int n = (unsigned int)num; 1121 - return (((tile_bundle_bits)(n & 0x3f)) << 43); 1214 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1122 1215 } 1123 1216 1124 - static __inline tile_bundle_bits 1217 + static __inline tilegx_bundle_bits 1125 1218 create_SrcB_Y0(int num) 1126 1219 { 1127 1220 const unsigned int n = (unsigned int)num; 1128 1221 return ((n & 0x3f) << 12); 1129 1222 } 1130 1223 1131 - static __inline tile_bundle_bits 1224 + static __inline tilegx_bundle_bits 1132 1225 create_SrcB_Y1(int num) 1133 1226 { 1134 1227 const unsigned int n = (unsigned int)num; 1135 - return (((tile_bundle_bits)(n & 0x3f)) << 43); 1228 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1136 1229 } 1137 1230 1138 - static __inline tile_bundle_bits 1139 - create_Src_SN(int num) 1231 + static __inline tilegx_bundle_bits 1232 + create_UnaryOpcodeExtension_X0(int num) 1140 1233 { 1141 1234 const unsigned int n = (unsigned int)num; 1142 - return ((n & 0x3) << 0); 1235 + return ((n & 0x3f) << 12); 1143 1236 } 1144 1237 1145 - static __inline tile_bundle_bits 1146 - create_UnOpcodeExtension_X0(int num) 1238 + static __inline tilegx_bundle_bits 1239 + create_UnaryOpcodeExtension_X1(int num) 1147 1240 { 1148 1241 const unsigned int n = (unsigned int)num; 1149 - return ((n & 0x1f) << 12); 1242 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1150 1243 } 1151 1244 1152 - static __inline tile_bundle_bits 1153 - create_UnOpcodeExtension_X1(int num) 1245 + static __inline tilegx_bundle_bits 1246 + create_UnaryOpcodeExtension_Y0(int num) 1154 1247 { 1155 1248 const unsigned int n = (unsigned int)num; 1156 - return (((tile_bundle_bits)(n & 0x1f)) << 43); 1249 + return ((n & 0x3f) << 12); 1157 1250 } 1158 1251 1159 - static __inline tile_bundle_bits 1160 - create_UnOpcodeExtension_Y0(int num) 1252 + static __inline tilegx_bundle_bits 1253 + create_UnaryOpcodeExtension_Y1(int num) 1161 1254 { 1162 1255 const unsigned int n = (unsigned int)num; 1163 - return ((n & 0x1f) << 12); 1256 + return (((tilegx_bundle_bits)(n & 0x3f)) << 43); 1164 1257 } 1165 - 1166 - static __inline tile_bundle_bits 1167 - create_UnOpcodeExtension_Y1(int num) 1168 - { 1169 - const unsigned int n = (unsigned int)num; 1170 - return (((tile_bundle_bits)(n & 0x1f)) << 43); 1171 - } 1172 - 1173 - static __inline tile_bundle_bits 1174 - create_UnShOpcodeExtension_X0(int num) 1175 - { 1176 - const unsigned int n = (unsigned int)num; 1177 - return ((n & 0x3ff) << 17); 1178 - } 1179 - 1180 - static __inline tile_bundle_bits 1181 - create_UnShOpcodeExtension_X1(int num) 1182 - { 1183 - const unsigned int n = (unsigned int)num; 1184 - return (((tile_bundle_bits)(n & 0x3ff)) << 48); 1185 - } 1186 - 1187 - static __inline tile_bundle_bits 1188 - create_UnShOpcodeExtension_Y0(int num) 1189 - { 1190 - const unsigned int n = (unsigned int)num; 1191 - return ((n & 0x7) << 17); 1192 - } 1193 - 1194 - static __inline tile_bundle_bits 1195 - create_UnShOpcodeExtension_Y1(int num) 1196 - { 1197 - const unsigned int n = (unsigned int)num; 1198 - return (((tile_bundle_bits)(n & 0x7)) << 48); 1199 - } 1200 - 1201 1258 1202 1259 1203 1260 typedef enum 1204 1261 { 1205 - TILE_PIPELINE_X0, 1206 - TILE_PIPELINE_X1, 1207 - TILE_PIPELINE_Y0, 1208 - TILE_PIPELINE_Y1, 1209 - TILE_PIPELINE_Y2, 1210 - } tile_pipeline; 1262 + TILEGX_PIPELINE_X0, 1263 + TILEGX_PIPELINE_X1, 1264 + TILEGX_PIPELINE_Y0, 1265 + TILEGX_PIPELINE_Y1, 1266 + TILEGX_PIPELINE_Y2, 1267 + } tilegx_pipeline; 1211 1268 1212 - #define tile_is_x_pipeline(p) ((int)(p) <= (int)TILE_PIPELINE_X1) 1269 + #define tilegx_is_x_pipeline(p) ((int)(p) <= (int)TILEGX_PIPELINE_X1) 1213 1270 1214 1271 typedef enum 1215 1272 { 1216 - TILE_OP_TYPE_REGISTER, 1217 - TILE_OP_TYPE_IMMEDIATE, 1218 - TILE_OP_TYPE_ADDRESS, 1219 - TILE_OP_TYPE_SPR 1220 - } tile_operand_type; 1273 + TILEGX_OP_TYPE_REGISTER, 1274 + TILEGX_OP_TYPE_IMMEDIATE, 1275 + TILEGX_OP_TYPE_ADDRESS, 1276 + TILEGX_OP_TYPE_SPR 1277 + } tilegx_operand_type; 1221 1278 1222 - /* This is the bit that determines if a bundle is in the Y encoding. */ 1223 - #define TILE_BUNDLE_Y_ENCODING_MASK ((tile_bundle_bits)1 << 63) 1279 + /* These are the bits that determine if a bundle is in the X encoding. */ 1280 + #define TILEGX_BUNDLE_MODE_MASK ((tilegx_bundle_bits)3 << 62) 1224 1281 1225 1282 enum 1226 1283 { 1227 1284 /* Maximum number of instructions in a bundle (2 for X, 3 for Y). */ 1228 - TILE_MAX_INSTRUCTIONS_PER_BUNDLE = 3, 1285 + TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE = 3, 1229 1286 1230 1287 /* How many different pipeline encodings are there? X0, X1, Y0, Y1, Y2. */ 1231 - TILE_NUM_PIPELINE_ENCODINGS = 5, 1288 + TILEGX_NUM_PIPELINE_ENCODINGS = 5, 1232 1289 1233 - /* Log base 2 of TILE_BUNDLE_SIZE_IN_BYTES. */ 1234 - TILE_LOG2_BUNDLE_SIZE_IN_BYTES = 3, 1290 + /* Log base 2 of TILEGX_BUNDLE_SIZE_IN_BYTES. */ 1291 + TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES = 3, 1235 1292 1236 1293 /* Instructions take this many bytes. */ 1237 - TILE_BUNDLE_SIZE_IN_BYTES = 1 << TILE_LOG2_BUNDLE_SIZE_IN_BYTES, 1294 + TILEGX_BUNDLE_SIZE_IN_BYTES = 1 << TILEGX_LOG2_BUNDLE_SIZE_IN_BYTES, 1238 1295 1239 - /* Log base 2 of TILE_BUNDLE_ALIGNMENT_IN_BYTES. */ 1240 - TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3, 1296 + /* Log base 2 of TILEGX_BUNDLE_ALIGNMENT_IN_BYTES. */ 1297 + TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES = 3, 1241 1298 1242 1299 /* Bundles should be aligned modulo this number of bytes. */ 1243 - TILE_BUNDLE_ALIGNMENT_IN_BYTES = 1244 - (1 << TILE_LOG2_BUNDLE_ALIGNMENT_IN_BYTES), 1245 - 1246 - /* Log base 2 of TILE_SN_INSTRUCTION_SIZE_IN_BYTES. */ 1247 - TILE_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES = 1, 1248 - 1249 - /* Static network instructions take this many bytes. */ 1250 - TILE_SN_INSTRUCTION_SIZE_IN_BYTES = 1251 - (1 << TILE_LOG2_SN_INSTRUCTION_SIZE_IN_BYTES), 1300 + TILEGX_BUNDLE_ALIGNMENT_IN_BYTES = 1301 + (1 << TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES), 1252 1302 1253 1303 /* Number of registers (some are magic, such as network I/O). */ 1254 - TILE_NUM_REGISTERS = 64, 1255 - 1256 - /* Number of static network registers. */ 1257 - TILE_NUM_SN_REGISTERS = 4 1304 + TILEGX_NUM_REGISTERS = 64, 1258 1305 }; 1259 1306 1260 1307 1261 - struct tile_operand 1308 + struct tilegx_operand 1262 1309 { 1263 1310 /* Is this operand a register, immediate or address? */ 1264 - tile_operand_type type; 1311 + tilegx_operand_type type; 1265 1312 1266 1313 /* The default relocation type for this operand. */ 1267 1314 signed int default_reloc : 16; ··· 1180 1437 unsigned int rightshift : 2; 1181 1438 1182 1439 /* Return the bits for this operand to be ORed into an existing bundle. */ 1183 - tile_bundle_bits (*insert) (int op); 1440 + tilegx_bundle_bits (*insert) (int op); 1184 1441 1185 1442 /* Extract this operand and return it. */ 1186 - unsigned int (*extract) (tile_bundle_bits bundle); 1443 + unsigned int (*extract) (tilegx_bundle_bits bundle); 1187 1444 }; 1188 1445 1189 1446 1190 - extern const struct tile_operand tile_operands[]; 1447 + extern const struct tilegx_operand tilegx_operands[]; 1191 1448 1192 1449 /* One finite-state machine per pipe for rapid instruction decoding. */ 1193 1450 extern const unsigned short * const 1194 - tile_bundle_decoder_fsms[TILE_NUM_PIPELINE_ENCODINGS]; 1451 + tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS]; 1195 1452 1196 1453 1197 - struct tile_opcode 1454 + struct tilegx_opcode 1198 1455 { 1199 1456 /* The opcode mnemonic, e.g. "add" */ 1200 1457 const char *name; 1201 1458 1202 1459 /* The enum value for this mnemonic. */ 1203 - tile_mnemonic mnemonic; 1460 + tilegx_mnemonic mnemonic; 1204 1461 1205 1462 /* A bit mask of which of the five pipes this instruction 1206 1463 is compatible with: ··· 1221 1478 unsigned char can_bundle; 1222 1479 1223 1480 /* The description of the operands. Each of these is an 1224 - * index into the tile_operands[] table. */ 1225 - unsigned char operands[TILE_NUM_PIPELINE_ENCODINGS][TILE_MAX_OPERANDS]; 1481 + * index into the tilegx_operands[] table. */ 1482 + unsigned char operands[TILEGX_NUM_PIPELINE_ENCODINGS][TILEGX_MAX_OPERANDS]; 1226 1483 1227 1484 }; 1228 1485 1229 - extern const struct tile_opcode tile_opcodes[]; 1230 - 1486 + extern const struct tilegx_opcode tilegx_opcodes[]; 1231 1487 1232 1488 /* Used for non-textual disassembly into structs. */ 1233 - struct tile_decoded_instruction 1489 + struct tilegx_decoded_instruction 1234 1490 { 1235 - const struct tile_opcode *opcode; 1236 - const struct tile_operand *operands[TILE_MAX_OPERANDS]; 1237 - int operand_values[TILE_MAX_OPERANDS]; 1491 + const struct tilegx_opcode *opcode; 1492 + const struct tilegx_operand *operands[TILEGX_MAX_OPERANDS]; 1493 + long long operand_values[TILEGX_MAX_OPERANDS]; 1238 1494 }; 1239 1495 1240 1496 1241 1497 /* Disassemble a bundle into a struct for machine processing. */ 1242 - extern int parse_insn_tile(tile_bundle_bits bits, 1243 - unsigned int pc, 1244 - struct tile_decoded_instruction 1245 - decoded[TILE_MAX_INSTRUCTIONS_PER_BUNDLE]); 1498 + extern int parse_insn_tilegx(tilegx_bundle_bits bits, 1499 + unsigned long long pc, 1500 + struct tilegx_decoded_instruction 1501 + decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]); 1246 1502 1247 1503 1248 1504 1249 - #endif /* opcode_tile_h */ 1505 + #endif /* opcode_tilegx_h */
+586 -457
arch/tile/include/asm/opcode_constants_64.h
··· 1 1 /* 2 - * Copyright 2010 Tilera Corporation. All Rights Reserved. 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 3 * 4 4 * This program is free software; you can redistribute it and/or 5 5 * modify it under the terms of the GNU General Public License ··· 19 19 #define _TILE_OPCODE_CONSTANTS_H 20 20 enum 21 21 { 22 - ADDBS_U_SPECIAL_0_OPCODE_X0 = 98, 23 - ADDBS_U_SPECIAL_0_OPCODE_X1 = 68, 24 - ADDB_SPECIAL_0_OPCODE_X0 = 1, 25 - ADDB_SPECIAL_0_OPCODE_X1 = 1, 26 - ADDHS_SPECIAL_0_OPCODE_X0 = 99, 27 - ADDHS_SPECIAL_0_OPCODE_X1 = 69, 28 - ADDH_SPECIAL_0_OPCODE_X0 = 2, 29 - ADDH_SPECIAL_0_OPCODE_X1 = 2, 30 - ADDIB_IMM_0_OPCODE_X0 = 1, 31 - ADDIB_IMM_0_OPCODE_X1 = 1, 32 - ADDIH_IMM_0_OPCODE_X0 = 2, 33 - ADDIH_IMM_0_OPCODE_X1 = 2, 34 - ADDI_IMM_0_OPCODE_X0 = 3, 35 - ADDI_IMM_0_OPCODE_X1 = 3, 36 - ADDI_IMM_1_OPCODE_SN = 1, 37 - ADDI_OPCODE_Y0 = 9, 38 - ADDI_OPCODE_Y1 = 7, 39 - ADDLIS_OPCODE_X0 = 1, 40 - ADDLIS_OPCODE_X1 = 2, 41 - ADDLI_OPCODE_X0 = 2, 42 - ADDLI_OPCODE_X1 = 3, 43 - ADDS_SPECIAL_0_OPCODE_X0 = 96, 44 - ADDS_SPECIAL_0_OPCODE_X1 = 66, 45 - ADD_SPECIAL_0_OPCODE_X0 = 3, 46 - ADD_SPECIAL_0_OPCODE_X1 = 3, 47 - ADD_SPECIAL_0_OPCODE_Y0 = 0, 48 - ADD_SPECIAL_0_OPCODE_Y1 = 0, 49 - ADIFFB_U_SPECIAL_0_OPCODE_X0 = 4, 50 - ADIFFH_SPECIAL_0_OPCODE_X0 = 5, 51 - ANDI_IMM_0_OPCODE_X0 = 1, 52 - ANDI_IMM_0_OPCODE_X1 = 4, 53 - ANDI_OPCODE_Y0 = 10, 54 - ANDI_OPCODE_Y1 = 8, 55 - AND_SPECIAL_0_OPCODE_X0 = 6, 56 - AND_SPECIAL_0_OPCODE_X1 = 4, 57 - AND_SPECIAL_2_OPCODE_Y0 = 0, 58 - AND_SPECIAL_2_OPCODE_Y1 = 0, 59 - AULI_OPCODE_X0 = 3, 60 - AULI_OPCODE_X1 = 4, 61 - AVGB_U_SPECIAL_0_OPCODE_X0 = 7, 62 - AVGH_SPECIAL_0_OPCODE_X0 = 8, 63 - BBNST_BRANCH_OPCODE_X1 = 15, 64 - BBNS_BRANCH_OPCODE_X1 = 14, 65 - BBNS_OPCODE_SN = 63, 66 - BBST_BRANCH_OPCODE_X1 = 13, 67 - BBS_BRANCH_OPCODE_X1 = 12, 68 - BBS_OPCODE_SN = 62, 69 - BGEZT_BRANCH_OPCODE_X1 = 7, 70 - BGEZ_BRANCH_OPCODE_X1 = 6, 71 - BGEZ_OPCODE_SN = 61, 72 - BGZT_BRANCH_OPCODE_X1 = 5, 73 - BGZ_BRANCH_OPCODE_X1 = 4, 74 - BGZ_OPCODE_SN = 58, 75 - BITX_UN_0_SHUN_0_OPCODE_X0 = 1, 76 - BITX_UN_0_SHUN_0_OPCODE_Y0 = 1, 77 - BLEZT_BRANCH_OPCODE_X1 = 11, 78 - BLEZ_BRANCH_OPCODE_X1 = 10, 79 - BLEZ_OPCODE_SN = 59, 80 - BLZT_BRANCH_OPCODE_X1 = 9, 81 - BLZ_BRANCH_OPCODE_X1 = 8, 82 - BLZ_OPCODE_SN = 60, 83 - BNZT_BRANCH_OPCODE_X1 = 3, 84 - BNZ_BRANCH_OPCODE_X1 = 2, 85 - BNZ_OPCODE_SN = 57, 86 - BPT_NOREG_RR_IMM_0_OPCODE_SN = 1, 87 - BRANCH_OPCODE_X1 = 5, 88 - BYTEX_UN_0_SHUN_0_OPCODE_X0 = 2, 89 - BYTEX_UN_0_SHUN_0_OPCODE_Y0 = 2, 90 - BZT_BRANCH_OPCODE_X1 = 1, 91 - BZ_BRANCH_OPCODE_X1 = 0, 92 - BZ_OPCODE_SN = 56, 93 - CLZ_UN_0_SHUN_0_OPCODE_X0 = 3, 94 - CLZ_UN_0_SHUN_0_OPCODE_Y0 = 3, 95 - CRC32_32_SPECIAL_0_OPCODE_X0 = 9, 96 - CRC32_8_SPECIAL_0_OPCODE_X0 = 10, 97 - CTZ_UN_0_SHUN_0_OPCODE_X0 = 4, 98 - CTZ_UN_0_SHUN_0_OPCODE_Y0 = 4, 99 - DRAIN_UN_0_SHUN_0_OPCODE_X1 = 1, 100 - DTLBPR_UN_0_SHUN_0_OPCODE_X1 = 2, 101 - DWORD_ALIGN_SPECIAL_0_OPCODE_X0 = 95, 102 - FINV_UN_0_SHUN_0_OPCODE_X1 = 3, 103 - FLUSH_UN_0_SHUN_0_OPCODE_X1 = 4, 104 - FNOP_NOREG_RR_IMM_0_OPCODE_SN = 3, 105 - FNOP_UN_0_SHUN_0_OPCODE_X0 = 5, 106 - FNOP_UN_0_SHUN_0_OPCODE_X1 = 5, 107 - FNOP_UN_0_SHUN_0_OPCODE_Y0 = 5, 108 - FNOP_UN_0_SHUN_0_OPCODE_Y1 = 1, 109 - HALT_NOREG_RR_IMM_0_OPCODE_SN = 0, 110 - ICOH_UN_0_SHUN_0_OPCODE_X1 = 6, 111 - ILL_UN_0_SHUN_0_OPCODE_X1 = 7, 112 - ILL_UN_0_SHUN_0_OPCODE_Y1 = 2, 113 - IMM_0_OPCODE_SN = 0, 114 - IMM_0_OPCODE_X0 = 4, 115 - IMM_0_OPCODE_X1 = 6, 116 - IMM_1_OPCODE_SN = 1, 117 - IMM_OPCODE_0_X0 = 5, 118 - INTHB_SPECIAL_0_OPCODE_X0 = 11, 119 - INTHB_SPECIAL_0_OPCODE_X1 = 5, 120 - INTHH_SPECIAL_0_OPCODE_X0 = 12, 121 - INTHH_SPECIAL_0_OPCODE_X1 = 6, 122 - INTLB_SPECIAL_0_OPCODE_X0 = 13, 123 - INTLB_SPECIAL_0_OPCODE_X1 = 7, 124 - INTLH_SPECIAL_0_OPCODE_X0 = 14, 125 - INTLH_SPECIAL_0_OPCODE_X1 = 8, 126 - INV_UN_0_SHUN_0_OPCODE_X1 = 8, 127 - IRET_UN_0_SHUN_0_OPCODE_X1 = 9, 128 - JALB_OPCODE_X1 = 13, 129 - JALF_OPCODE_X1 = 12, 130 - JALRP_SPECIAL_0_OPCODE_X1 = 9, 131 - JALRR_IMM_1_OPCODE_SN = 3, 132 - JALR_RR_IMM_0_OPCODE_SN = 5, 133 - JALR_SPECIAL_0_OPCODE_X1 = 10, 134 - JB_OPCODE_X1 = 11, 135 - JF_OPCODE_X1 = 10, 136 - JRP_SPECIAL_0_OPCODE_X1 = 11, 137 - JRR_IMM_1_OPCODE_SN = 2, 138 - JR_RR_IMM_0_OPCODE_SN = 4, 139 - JR_SPECIAL_0_OPCODE_X1 = 12, 140 - LBADD_IMM_0_OPCODE_X1 = 22, 141 - LBADD_U_IMM_0_OPCODE_X1 = 23, 142 - LB_OPCODE_Y2 = 0, 143 - LB_UN_0_SHUN_0_OPCODE_X1 = 10, 144 - LB_U_OPCODE_Y2 = 1, 145 - LB_U_UN_0_SHUN_0_OPCODE_X1 = 11, 146 - LHADD_IMM_0_OPCODE_X1 = 24, 147 - LHADD_U_IMM_0_OPCODE_X1 = 25, 148 - LH_OPCODE_Y2 = 2, 149 - LH_UN_0_SHUN_0_OPCODE_X1 = 12, 150 - LH_U_OPCODE_Y2 = 3, 151 - LH_U_UN_0_SHUN_0_OPCODE_X1 = 13, 152 - LNK_SPECIAL_0_OPCODE_X1 = 13, 153 - LWADD_IMM_0_OPCODE_X1 = 26, 154 - LWADD_NA_IMM_0_OPCODE_X1 = 27, 155 - LW_NA_UN_0_SHUN_0_OPCODE_X1 = 24, 156 - LW_OPCODE_Y2 = 4, 157 - LW_UN_0_SHUN_0_OPCODE_X1 = 14, 158 - MAXB_U_SPECIAL_0_OPCODE_X0 = 15, 159 - MAXB_U_SPECIAL_0_OPCODE_X1 = 14, 160 - MAXH_SPECIAL_0_OPCODE_X0 = 16, 161 - MAXH_SPECIAL_0_OPCODE_X1 = 15, 162 - MAXIB_U_IMM_0_OPCODE_X0 = 4, 163 - MAXIB_U_IMM_0_OPCODE_X1 = 5, 164 - MAXIH_IMM_0_OPCODE_X0 = 5, 165 - MAXIH_IMM_0_OPCODE_X1 = 6, 166 - MFSPR_IMM_0_OPCODE_X1 = 7, 167 - MF_UN_0_SHUN_0_OPCODE_X1 = 15, 168 - MINB_U_SPECIAL_0_OPCODE_X0 = 17, 169 - MINB_U_SPECIAL_0_OPCODE_X1 = 16, 170 - MINH_SPECIAL_0_OPCODE_X0 = 18, 171 - MINH_SPECIAL_0_OPCODE_X1 = 17, 172 - MINIB_U_IMM_0_OPCODE_X0 = 6, 173 - MINIB_U_IMM_0_OPCODE_X1 = 8, 174 - MINIH_IMM_0_OPCODE_X0 = 7, 175 - MINIH_IMM_0_OPCODE_X1 = 9, 176 - MM_OPCODE_X0 = 6, 177 - MM_OPCODE_X1 = 7, 178 - MNZB_SPECIAL_0_OPCODE_X0 = 19, 179 - MNZB_SPECIAL_0_OPCODE_X1 = 18, 180 - MNZH_SPECIAL_0_OPCODE_X0 = 20, 181 - MNZH_SPECIAL_0_OPCODE_X1 = 19, 182 - MNZ_SPECIAL_0_OPCODE_X0 = 21, 183 - MNZ_SPECIAL_0_OPCODE_X1 = 20, 184 - MNZ_SPECIAL_1_OPCODE_Y0 = 0, 185 - MNZ_SPECIAL_1_OPCODE_Y1 = 1, 186 - MOVEI_IMM_1_OPCODE_SN = 0, 187 - MOVE_RR_IMM_0_OPCODE_SN = 8, 188 - MTSPR_IMM_0_OPCODE_X1 = 10, 189 - MULHHA_SS_SPECIAL_0_OPCODE_X0 = 22, 190 - MULHHA_SS_SPECIAL_7_OPCODE_Y0 = 0, 191 - MULHHA_SU_SPECIAL_0_OPCODE_X0 = 23, 192 - MULHHA_UU_SPECIAL_0_OPCODE_X0 = 24, 193 - MULHHA_UU_SPECIAL_7_OPCODE_Y0 = 1, 194 - MULHHSA_UU_SPECIAL_0_OPCODE_X0 = 25, 195 - MULHH_SS_SPECIAL_0_OPCODE_X0 = 26, 196 - MULHH_SS_SPECIAL_6_OPCODE_Y0 = 0, 197 - MULHH_SU_SPECIAL_0_OPCODE_X0 = 27, 198 - MULHH_UU_SPECIAL_0_OPCODE_X0 = 28, 199 - MULHH_UU_SPECIAL_6_OPCODE_Y0 = 1, 200 - MULHLA_SS_SPECIAL_0_OPCODE_X0 = 29, 201 - MULHLA_SU_SPECIAL_0_OPCODE_X0 = 30, 202 - MULHLA_US_SPECIAL_0_OPCODE_X0 = 31, 203 - MULHLA_UU_SPECIAL_0_OPCODE_X0 = 32, 204 - MULHLSA_UU_SPECIAL_0_OPCODE_X0 = 33, 205 - MULHLSA_UU_SPECIAL_5_OPCODE_Y0 = 0, 206 - MULHL_SS_SPECIAL_0_OPCODE_X0 = 34, 207 - MULHL_SU_SPECIAL_0_OPCODE_X0 = 35, 208 - MULHL_US_SPECIAL_0_OPCODE_X0 = 36, 209 - MULHL_UU_SPECIAL_0_OPCODE_X0 = 37, 210 - MULLLA_SS_SPECIAL_0_OPCODE_X0 = 38, 211 - MULLLA_SS_SPECIAL_7_OPCODE_Y0 = 2, 212 - MULLLA_SU_SPECIAL_0_OPCODE_X0 = 39, 213 - MULLLA_UU_SPECIAL_0_OPCODE_X0 = 40, 214 - MULLLA_UU_SPECIAL_7_OPCODE_Y0 = 3, 215 - MULLLSA_UU_SPECIAL_0_OPCODE_X0 = 41, 216 - MULLL_SS_SPECIAL_0_OPCODE_X0 = 42, 217 - MULLL_SS_SPECIAL_6_OPCODE_Y0 = 2, 218 - MULLL_SU_SPECIAL_0_OPCODE_X0 = 43, 219 - MULLL_UU_SPECIAL_0_OPCODE_X0 = 44, 220 - MULLL_UU_SPECIAL_6_OPCODE_Y0 = 3, 221 - MVNZ_SPECIAL_0_OPCODE_X0 = 45, 222 - MVNZ_SPECIAL_1_OPCODE_Y0 = 1, 223 - MVZ_SPECIAL_0_OPCODE_X0 = 46, 224 - MVZ_SPECIAL_1_OPCODE_Y0 = 2, 225 - MZB_SPECIAL_0_OPCODE_X0 = 47, 226 - MZB_SPECIAL_0_OPCODE_X1 = 21, 227 - MZH_SPECIAL_0_OPCODE_X0 = 48, 228 - MZH_SPECIAL_0_OPCODE_X1 = 22, 229 - MZ_SPECIAL_0_OPCODE_X0 = 49, 230 - MZ_SPECIAL_0_OPCODE_X1 = 23, 231 - MZ_SPECIAL_1_OPCODE_Y0 = 3, 232 - MZ_SPECIAL_1_OPCODE_Y1 = 2, 233 - NAP_UN_0_SHUN_0_OPCODE_X1 = 16, 234 - NOP_NOREG_RR_IMM_0_OPCODE_SN = 2, 235 - NOP_UN_0_SHUN_0_OPCODE_X0 = 6, 236 - NOP_UN_0_SHUN_0_OPCODE_X1 = 17, 237 - NOP_UN_0_SHUN_0_OPCODE_Y0 = 6, 238 - NOP_UN_0_SHUN_0_OPCODE_Y1 = 3, 239 - NOREG_RR_IMM_0_OPCODE_SN = 0, 240 - NOR_SPECIAL_0_OPCODE_X0 = 50, 241 - NOR_SPECIAL_0_OPCODE_X1 = 24, 242 - NOR_SPECIAL_2_OPCODE_Y0 = 1, 243 - NOR_SPECIAL_2_OPCODE_Y1 = 1, 244 - ORI_IMM_0_OPCODE_X0 = 8, 245 - ORI_IMM_0_OPCODE_X1 = 11, 246 - ORI_OPCODE_Y0 = 11, 247 - ORI_OPCODE_Y1 = 9, 248 - OR_SPECIAL_0_OPCODE_X0 = 51, 249 - OR_SPECIAL_0_OPCODE_X1 = 25, 250 - OR_SPECIAL_2_OPCODE_Y0 = 2, 251 - OR_SPECIAL_2_OPCODE_Y1 = 2, 252 - PACKBS_U_SPECIAL_0_OPCODE_X0 = 103, 253 - PACKBS_U_SPECIAL_0_OPCODE_X1 = 73, 254 - PACKHB_SPECIAL_0_OPCODE_X0 = 52, 255 - PACKHB_SPECIAL_0_OPCODE_X1 = 26, 256 - PACKHS_SPECIAL_0_OPCODE_X0 = 102, 257 - PACKHS_SPECIAL_0_OPCODE_X1 = 72, 258 - PACKLB_SPECIAL_0_OPCODE_X0 = 53, 259 - PACKLB_SPECIAL_0_OPCODE_X1 = 27, 260 - PCNT_UN_0_SHUN_0_OPCODE_X0 = 7, 261 - PCNT_UN_0_SHUN_0_OPCODE_Y0 = 7, 262 - RLI_SHUN_0_OPCODE_X0 = 1, 263 - RLI_SHUN_0_OPCODE_X1 = 1, 264 - RLI_SHUN_0_OPCODE_Y0 = 1, 265 - RLI_SHUN_0_OPCODE_Y1 = 1, 266 - RL_SPECIAL_0_OPCODE_X0 = 54, 267 - RL_SPECIAL_0_OPCODE_X1 = 28, 268 - RL_SPECIAL_3_OPCODE_Y0 = 0, 269 - RL_SPECIAL_3_OPCODE_Y1 = 0, 270 - RR_IMM_0_OPCODE_SN = 0, 271 - S1A_SPECIAL_0_OPCODE_X0 = 55, 272 - S1A_SPECIAL_0_OPCODE_X1 = 29, 273 - S1A_SPECIAL_0_OPCODE_Y0 = 1, 274 - S1A_SPECIAL_0_OPCODE_Y1 = 1, 275 - S2A_SPECIAL_0_OPCODE_X0 = 56, 276 - S2A_SPECIAL_0_OPCODE_X1 = 30, 277 - S2A_SPECIAL_0_OPCODE_Y0 = 2, 278 - S2A_SPECIAL_0_OPCODE_Y1 = 2, 279 - S3A_SPECIAL_0_OPCODE_X0 = 57, 280 - S3A_SPECIAL_0_OPCODE_X1 = 31, 281 - S3A_SPECIAL_5_OPCODE_Y0 = 1, 282 - S3A_SPECIAL_5_OPCODE_Y1 = 1, 283 - SADAB_U_SPECIAL_0_OPCODE_X0 = 58, 284 - SADAH_SPECIAL_0_OPCODE_X0 = 59, 285 - SADAH_U_SPECIAL_0_OPCODE_X0 = 60, 286 - SADB_U_SPECIAL_0_OPCODE_X0 = 61, 287 - SADH_SPECIAL_0_OPCODE_X0 = 62, 288 - SADH_U_SPECIAL_0_OPCODE_X0 = 63, 289 - SBADD_IMM_0_OPCODE_X1 = 28, 290 - SB_OPCODE_Y2 = 5, 291 - SB_SPECIAL_0_OPCODE_X1 = 32, 292 - SEQB_SPECIAL_0_OPCODE_X0 = 64, 293 - SEQB_SPECIAL_0_OPCODE_X1 = 33, 294 - SEQH_SPECIAL_0_OPCODE_X0 = 65, 295 - SEQH_SPECIAL_0_OPCODE_X1 = 34, 296 - SEQIB_IMM_0_OPCODE_X0 = 9, 297 - SEQIB_IMM_0_OPCODE_X1 = 12, 298 - SEQIH_IMM_0_OPCODE_X0 = 10, 299 - SEQIH_IMM_0_OPCODE_X1 = 13, 300 - SEQI_IMM_0_OPCODE_X0 = 11, 301 - SEQI_IMM_0_OPCODE_X1 = 14, 302 - SEQI_OPCODE_Y0 = 12, 303 - SEQI_OPCODE_Y1 = 10, 304 - SEQ_SPECIAL_0_OPCODE_X0 = 66, 305 - SEQ_SPECIAL_0_OPCODE_X1 = 35, 306 - SEQ_SPECIAL_5_OPCODE_Y0 = 2, 307 - SEQ_SPECIAL_5_OPCODE_Y1 = 2, 308 - SHADD_IMM_0_OPCODE_X1 = 29, 309 - SHL8II_IMM_0_OPCODE_SN = 3, 310 - SHLB_SPECIAL_0_OPCODE_X0 = 67, 311 - SHLB_SPECIAL_0_OPCODE_X1 = 36, 312 - SHLH_SPECIAL_0_OPCODE_X0 = 68, 313 - SHLH_SPECIAL_0_OPCODE_X1 = 37, 314 - SHLIB_SHUN_0_OPCODE_X0 = 2, 315 - SHLIB_SHUN_0_OPCODE_X1 = 2, 316 - SHLIH_SHUN_0_OPCODE_X0 = 3, 317 - SHLIH_SHUN_0_OPCODE_X1 = 3, 318 - SHLI_SHUN_0_OPCODE_X0 = 4, 319 - SHLI_SHUN_0_OPCODE_X1 = 4, 320 - SHLI_SHUN_0_OPCODE_Y0 = 2, 321 - SHLI_SHUN_0_OPCODE_Y1 = 2, 322 - SHL_SPECIAL_0_OPCODE_X0 = 69, 323 - SHL_SPECIAL_0_OPCODE_X1 = 38, 324 - SHL_SPECIAL_3_OPCODE_Y0 = 1, 325 - SHL_SPECIAL_3_OPCODE_Y1 = 1, 326 - SHR1_RR_IMM_0_OPCODE_SN = 9, 327 - SHRB_SPECIAL_0_OPCODE_X0 = 70, 328 - SHRB_SPECIAL_0_OPCODE_X1 = 39, 329 - SHRH_SPECIAL_0_OPCODE_X0 = 71, 330 - SHRH_SPECIAL_0_OPCODE_X1 = 40, 331 - SHRIB_SHUN_0_OPCODE_X0 = 5, 332 - SHRIB_SHUN_0_OPCODE_X1 = 5, 333 - SHRIH_SHUN_0_OPCODE_X0 = 6, 334 - SHRIH_SHUN_0_OPCODE_X1 = 6, 335 - SHRI_SHUN_0_OPCODE_X0 = 7, 336 - SHRI_SHUN_0_OPCODE_X1 = 7, 337 - SHRI_SHUN_0_OPCODE_Y0 = 3, 338 - SHRI_SHUN_0_OPCODE_Y1 = 3, 339 - SHR_SPECIAL_0_OPCODE_X0 = 72, 340 - SHR_SPECIAL_0_OPCODE_X1 = 41, 341 - SHR_SPECIAL_3_OPCODE_Y0 = 2, 342 - SHR_SPECIAL_3_OPCODE_Y1 = 2, 343 - SHUN_0_OPCODE_X0 = 7, 344 - SHUN_0_OPCODE_X1 = 8, 345 - SHUN_0_OPCODE_Y0 = 13, 346 - SHUN_0_OPCODE_Y1 = 11, 347 - SH_OPCODE_Y2 = 6, 348 - SH_SPECIAL_0_OPCODE_X1 = 42, 349 - SLTB_SPECIAL_0_OPCODE_X0 = 73, 350 - SLTB_SPECIAL_0_OPCODE_X1 = 43, 351 - SLTB_U_SPECIAL_0_OPCODE_X0 = 74, 352 - SLTB_U_SPECIAL_0_OPCODE_X1 = 44, 353 - SLTEB_SPECIAL_0_OPCODE_X0 = 75, 354 - SLTEB_SPECIAL_0_OPCODE_X1 = 45, 355 - SLTEB_U_SPECIAL_0_OPCODE_X0 = 76, 356 - SLTEB_U_SPECIAL_0_OPCODE_X1 = 46, 357 - SLTEH_SPECIAL_0_OPCODE_X0 = 77, 358 - SLTEH_SPECIAL_0_OPCODE_X1 = 47, 359 - SLTEH_U_SPECIAL_0_OPCODE_X0 = 78, 360 - SLTEH_U_SPECIAL_0_OPCODE_X1 = 48, 361 - SLTE_SPECIAL_0_OPCODE_X0 = 79, 362 - SLTE_SPECIAL_0_OPCODE_X1 = 49, 363 - SLTE_SPECIAL_4_OPCODE_Y0 = 0, 364 - SLTE_SPECIAL_4_OPCODE_Y1 = 0, 365 - SLTE_U_SPECIAL_0_OPCODE_X0 = 80, 366 - SLTE_U_SPECIAL_0_OPCODE_X1 = 50, 367 - SLTE_U_SPECIAL_4_OPCODE_Y0 = 1, 368 - SLTE_U_SPECIAL_4_OPCODE_Y1 = 1, 369 - SLTH_SPECIAL_0_OPCODE_X0 = 81, 370 - SLTH_SPECIAL_0_OPCODE_X1 = 51, 371 - SLTH_U_SPECIAL_0_OPCODE_X0 = 82, 372 - SLTH_U_SPECIAL_0_OPCODE_X1 = 52, 373 - SLTIB_IMM_0_OPCODE_X0 = 12, 374 - SLTIB_IMM_0_OPCODE_X1 = 15, 375 - SLTIB_U_IMM_0_OPCODE_X0 = 13, 376 - SLTIB_U_IMM_0_OPCODE_X1 = 16, 377 - SLTIH_IMM_0_OPCODE_X0 = 14, 378 - SLTIH_IMM_0_OPCODE_X1 = 17, 379 - SLTIH_U_IMM_0_OPCODE_X0 = 15, 380 - SLTIH_U_IMM_0_OPCODE_X1 = 18, 381 - SLTI_IMM_0_OPCODE_X0 = 16, 382 - SLTI_IMM_0_OPCODE_X1 = 19, 383 - SLTI_OPCODE_Y0 = 14, 384 - SLTI_OPCODE_Y1 = 12, 385 - SLTI_U_IMM_0_OPCODE_X0 = 17, 386 - SLTI_U_IMM_0_OPCODE_X1 = 20, 387 - SLTI_U_OPCODE_Y0 = 15, 388 - SLTI_U_OPCODE_Y1 = 13, 389 - SLT_SPECIAL_0_OPCODE_X0 = 83, 390 - SLT_SPECIAL_0_OPCODE_X1 = 53, 391 - SLT_SPECIAL_4_OPCODE_Y0 = 2, 392 - SLT_SPECIAL_4_OPCODE_Y1 = 2, 393 - SLT_U_SPECIAL_0_OPCODE_X0 = 84, 394 - SLT_U_SPECIAL_0_OPCODE_X1 = 54, 395 - SLT_U_SPECIAL_4_OPCODE_Y0 = 3, 396 - SLT_U_SPECIAL_4_OPCODE_Y1 = 3, 397 - SNEB_SPECIAL_0_OPCODE_X0 = 85, 398 - SNEB_SPECIAL_0_OPCODE_X1 = 55, 399 - SNEH_SPECIAL_0_OPCODE_X0 = 86, 400 - SNEH_SPECIAL_0_OPCODE_X1 = 56, 401 - SNE_SPECIAL_0_OPCODE_X0 = 87, 402 - SNE_SPECIAL_0_OPCODE_X1 = 57, 403 - SNE_SPECIAL_5_OPCODE_Y0 = 3, 404 - SNE_SPECIAL_5_OPCODE_Y1 = 3, 405 - SPECIAL_0_OPCODE_X0 = 0, 406 - SPECIAL_0_OPCODE_X1 = 1, 407 - SPECIAL_0_OPCODE_Y0 = 1, 408 - SPECIAL_0_OPCODE_Y1 = 1, 409 - SPECIAL_1_OPCODE_Y0 = 2, 410 - SPECIAL_1_OPCODE_Y1 = 2, 411 - SPECIAL_2_OPCODE_Y0 = 3, 412 - SPECIAL_2_OPCODE_Y1 = 3, 413 - SPECIAL_3_OPCODE_Y0 = 4, 414 - SPECIAL_3_OPCODE_Y1 = 4, 415 - SPECIAL_4_OPCODE_Y0 = 5, 416 - SPECIAL_4_OPCODE_Y1 = 5, 417 - SPECIAL_5_OPCODE_Y0 = 6, 418 - SPECIAL_5_OPCODE_Y1 = 6, 419 - SPECIAL_6_OPCODE_Y0 = 7, 420 - SPECIAL_7_OPCODE_Y0 = 8, 421 - SRAB_SPECIAL_0_OPCODE_X0 = 88, 422 - SRAB_SPECIAL_0_OPCODE_X1 = 58, 423 - SRAH_SPECIAL_0_OPCODE_X0 = 89, 424 - SRAH_SPECIAL_0_OPCODE_X1 = 59, 425 - SRAIB_SHUN_0_OPCODE_X0 = 8, 426 - SRAIB_SHUN_0_OPCODE_X1 = 8, 427 - SRAIH_SHUN_0_OPCODE_X0 = 9, 428 - SRAIH_SHUN_0_OPCODE_X1 = 9, 429 - SRAI_SHUN_0_OPCODE_X0 = 10, 430 - SRAI_SHUN_0_OPCODE_X1 = 10, 431 - SRAI_SHUN_0_OPCODE_Y0 = 4, 432 - SRAI_SHUN_0_OPCODE_Y1 = 4, 433 - SRA_SPECIAL_0_OPCODE_X0 = 90, 434 - SRA_SPECIAL_0_OPCODE_X1 = 60, 435 - SRA_SPECIAL_3_OPCODE_Y0 = 3, 436 - SRA_SPECIAL_3_OPCODE_Y1 = 3, 437 - SUBBS_U_SPECIAL_0_OPCODE_X0 = 100, 438 - SUBBS_U_SPECIAL_0_OPCODE_X1 = 70, 439 - SUBB_SPECIAL_0_OPCODE_X0 = 91, 440 - SUBB_SPECIAL_0_OPCODE_X1 = 61, 441 - SUBHS_SPECIAL_0_OPCODE_X0 = 101, 442 - SUBHS_SPECIAL_0_OPCODE_X1 = 71, 443 - SUBH_SPECIAL_0_OPCODE_X0 = 92, 444 - SUBH_SPECIAL_0_OPCODE_X1 = 62, 445 - SUBS_SPECIAL_0_OPCODE_X0 = 97, 446 - SUBS_SPECIAL_0_OPCODE_X1 = 67, 447 - SUB_SPECIAL_0_OPCODE_X0 = 93, 448 - SUB_SPECIAL_0_OPCODE_X1 = 63, 449 - SUB_SPECIAL_0_OPCODE_Y0 = 3, 450 - SUB_SPECIAL_0_OPCODE_Y1 = 3, 451 - SWADD_IMM_0_OPCODE_X1 = 30, 452 - SWINT0_UN_0_SHUN_0_OPCODE_X1 = 18, 453 - SWINT1_UN_0_SHUN_0_OPCODE_X1 = 19, 454 - SWINT2_UN_0_SHUN_0_OPCODE_X1 = 20, 455 - SWINT3_UN_0_SHUN_0_OPCODE_X1 = 21, 456 - SW_OPCODE_Y2 = 7, 457 - SW_SPECIAL_0_OPCODE_X1 = 64, 458 - TBLIDXB0_UN_0_SHUN_0_OPCODE_X0 = 8, 459 - TBLIDXB0_UN_0_SHUN_0_OPCODE_Y0 = 8, 460 - TBLIDXB1_UN_0_SHUN_0_OPCODE_X0 = 9, 461 - TBLIDXB1_UN_0_SHUN_0_OPCODE_Y0 = 9, 462 - TBLIDXB2_UN_0_SHUN_0_OPCODE_X0 = 10, 463 - TBLIDXB2_UN_0_SHUN_0_OPCODE_Y0 = 10, 464 - TBLIDXB3_UN_0_SHUN_0_OPCODE_X0 = 11, 465 - TBLIDXB3_UN_0_SHUN_0_OPCODE_Y0 = 11, 466 - TNS_UN_0_SHUN_0_OPCODE_X1 = 22, 467 - UN_0_SHUN_0_OPCODE_X0 = 11, 468 - UN_0_SHUN_0_OPCODE_X1 = 11, 469 - UN_0_SHUN_0_OPCODE_Y0 = 5, 470 - UN_0_SHUN_0_OPCODE_Y1 = 5, 471 - WH64_UN_0_SHUN_0_OPCODE_X1 = 23, 472 - XORI_IMM_0_OPCODE_X0 = 2, 473 - XORI_IMM_0_OPCODE_X1 = 21, 474 - XOR_SPECIAL_0_OPCODE_X0 = 94, 475 - XOR_SPECIAL_0_OPCODE_X1 = 65, 476 - XOR_SPECIAL_2_OPCODE_Y0 = 3, 477 - XOR_SPECIAL_2_OPCODE_Y1 = 3 22 + ADDI_IMM8_OPCODE_X0 = 1, 23 + ADDI_IMM8_OPCODE_X1 = 1, 24 + ADDI_OPCODE_Y0 = 0, 25 + ADDI_OPCODE_Y1 = 1, 26 + ADDLI_OPCODE_X0 = 1, 27 + ADDLI_OPCODE_X1 = 0, 28 + ADDXI_IMM8_OPCODE_X0 = 2, 29 + ADDXI_IMM8_OPCODE_X1 = 2, 30 + ADDXI_OPCODE_Y0 = 1, 31 + ADDXI_OPCODE_Y1 = 2, 32 + ADDXLI_OPCODE_X0 = 2, 33 + ADDXLI_OPCODE_X1 = 1, 34 + ADDXSC_RRR_0_OPCODE_X0 = 1, 35 + ADDXSC_RRR_0_OPCODE_X1 = 1, 36 + ADDX_RRR_0_OPCODE_X0 = 2, 37 + ADDX_RRR_0_OPCODE_X1 = 2, 38 + ADDX_RRR_0_OPCODE_Y0 = 0, 39 + ADDX_SPECIAL_0_OPCODE_Y1 = 0, 40 + ADD_RRR_0_OPCODE_X0 = 3, 41 + ADD_RRR_0_OPCODE_X1 = 3, 42 + ADD_RRR_0_OPCODE_Y0 = 1, 43 + ADD_SPECIAL_0_OPCODE_Y1 = 1, 44 + ANDI_IMM8_OPCODE_X0 = 3, 45 + ANDI_IMM8_OPCODE_X1 = 3, 46 + ANDI_OPCODE_Y0 = 2, 47 + ANDI_OPCODE_Y1 = 3, 48 + AND_RRR_0_OPCODE_X0 = 4, 49 + AND_RRR_0_OPCODE_X1 = 4, 50 + AND_RRR_5_OPCODE_Y0 = 0, 51 + AND_RRR_5_OPCODE_Y1 = 0, 52 + BEQZT_BRANCH_OPCODE_X1 = 16, 53 + BEQZ_BRANCH_OPCODE_X1 = 17, 54 + BFEXTS_BF_OPCODE_X0 = 4, 55 + BFEXTU_BF_OPCODE_X0 = 5, 56 + BFINS_BF_OPCODE_X0 = 6, 57 + BF_OPCODE_X0 = 3, 58 + BGEZT_BRANCH_OPCODE_X1 = 18, 59 + BGEZ_BRANCH_OPCODE_X1 = 19, 60 + BGTZT_BRANCH_OPCODE_X1 = 20, 61 + BGTZ_BRANCH_OPCODE_X1 = 21, 62 + BLBCT_BRANCH_OPCODE_X1 = 22, 63 + BLBC_BRANCH_OPCODE_X1 = 23, 64 + BLBST_BRANCH_OPCODE_X1 = 24, 65 + BLBS_BRANCH_OPCODE_X1 = 25, 66 + BLEZT_BRANCH_OPCODE_X1 = 26, 67 + BLEZ_BRANCH_OPCODE_X1 = 27, 68 + BLTZT_BRANCH_OPCODE_X1 = 28, 69 + BLTZ_BRANCH_OPCODE_X1 = 29, 70 + BNEZT_BRANCH_OPCODE_X1 = 30, 71 + BNEZ_BRANCH_OPCODE_X1 = 31, 72 + BRANCH_OPCODE_X1 = 2, 73 + CMOVEQZ_RRR_0_OPCODE_X0 = 5, 74 + CMOVEQZ_RRR_4_OPCODE_Y0 = 0, 75 + CMOVNEZ_RRR_0_OPCODE_X0 = 6, 76 + CMOVNEZ_RRR_4_OPCODE_Y0 = 1, 77 + CMPEQI_IMM8_OPCODE_X0 = 4, 78 + CMPEQI_IMM8_OPCODE_X1 = 4, 79 + CMPEQI_OPCODE_Y0 = 3, 80 + CMPEQI_OPCODE_Y1 = 4, 81 + CMPEQ_RRR_0_OPCODE_X0 = 7, 82 + CMPEQ_RRR_0_OPCODE_X1 = 5, 83 + CMPEQ_RRR_3_OPCODE_Y0 = 0, 84 + CMPEQ_RRR_3_OPCODE_Y1 = 2, 85 + CMPEXCH4_RRR_0_OPCODE_X1 = 6, 86 + CMPEXCH_RRR_0_OPCODE_X1 = 7, 87 + CMPLES_RRR_0_OPCODE_X0 = 8, 88 + CMPLES_RRR_0_OPCODE_X1 = 8, 89 + CMPLES_RRR_2_OPCODE_Y0 = 0, 90 + CMPLES_RRR_2_OPCODE_Y1 = 0, 91 + CMPLEU_RRR_0_OPCODE_X0 = 9, 92 + CMPLEU_RRR_0_OPCODE_X1 = 9, 93 + CMPLEU_RRR_2_OPCODE_Y0 = 1, 94 + CMPLEU_RRR_2_OPCODE_Y1 = 1, 95 + CMPLTSI_IMM8_OPCODE_X0 = 5, 96 + CMPLTSI_IMM8_OPCODE_X1 = 5, 97 + CMPLTSI_OPCODE_Y0 = 4, 98 + CMPLTSI_OPCODE_Y1 = 5, 99 + CMPLTS_RRR_0_OPCODE_X0 = 10, 100 + CMPLTS_RRR_0_OPCODE_X1 = 10, 101 + CMPLTS_RRR_2_OPCODE_Y0 = 2, 102 + CMPLTS_RRR_2_OPCODE_Y1 = 2, 103 + CMPLTUI_IMM8_OPCODE_X0 = 6, 104 + CMPLTUI_IMM8_OPCODE_X1 = 6, 105 + CMPLTU_RRR_0_OPCODE_X0 = 11, 106 + CMPLTU_RRR_0_OPCODE_X1 = 11, 107 + CMPLTU_RRR_2_OPCODE_Y0 = 3, 108 + CMPLTU_RRR_2_OPCODE_Y1 = 3, 109 + CMPNE_RRR_0_OPCODE_X0 = 12, 110 + CMPNE_RRR_0_OPCODE_X1 = 12, 111 + CMPNE_RRR_3_OPCODE_Y0 = 1, 112 + CMPNE_RRR_3_OPCODE_Y1 = 3, 113 + CMULAF_RRR_0_OPCODE_X0 = 13, 114 + CMULA_RRR_0_OPCODE_X0 = 14, 115 + CMULFR_RRR_0_OPCODE_X0 = 15, 116 + CMULF_RRR_0_OPCODE_X0 = 16, 117 + CMULHR_RRR_0_OPCODE_X0 = 17, 118 + CMULH_RRR_0_OPCODE_X0 = 18, 119 + CMUL_RRR_0_OPCODE_X0 = 19, 120 + CNTLZ_UNARY_OPCODE_X0 = 1, 121 + CNTLZ_UNARY_OPCODE_Y0 = 1, 122 + CNTTZ_UNARY_OPCODE_X0 = 2, 123 + CNTTZ_UNARY_OPCODE_Y0 = 2, 124 + CRC32_32_RRR_0_OPCODE_X0 = 20, 125 + CRC32_8_RRR_0_OPCODE_X0 = 21, 126 + DBLALIGN2_RRR_0_OPCODE_X0 = 22, 127 + DBLALIGN2_RRR_0_OPCODE_X1 = 13, 128 + DBLALIGN4_RRR_0_OPCODE_X0 = 23, 129 + DBLALIGN4_RRR_0_OPCODE_X1 = 14, 130 + DBLALIGN6_RRR_0_OPCODE_X0 = 24, 131 + DBLALIGN6_RRR_0_OPCODE_X1 = 15, 132 + DBLALIGN_RRR_0_OPCODE_X0 = 25, 133 + DRAIN_UNARY_OPCODE_X1 = 1, 134 + DTLBPR_UNARY_OPCODE_X1 = 2, 135 + EXCH4_RRR_0_OPCODE_X1 = 16, 136 + EXCH_RRR_0_OPCODE_X1 = 17, 137 + FDOUBLE_ADDSUB_RRR_0_OPCODE_X0 = 26, 138 + FDOUBLE_ADD_FLAGS_RRR_0_OPCODE_X0 = 27, 139 + FDOUBLE_MUL_FLAGS_RRR_0_OPCODE_X0 = 28, 140 + FDOUBLE_PACK1_RRR_0_OPCODE_X0 = 29, 141 + FDOUBLE_PACK2_RRR_0_OPCODE_X0 = 30, 142 + FDOUBLE_SUB_FLAGS_RRR_0_OPCODE_X0 = 31, 143 + FDOUBLE_UNPACK_MAX_RRR_0_OPCODE_X0 = 32, 144 + FDOUBLE_UNPACK_MIN_RRR_0_OPCODE_X0 = 33, 145 + FETCHADD4_RRR_0_OPCODE_X1 = 18, 146 + FETCHADDGEZ4_RRR_0_OPCODE_X1 = 19, 147 + FETCHADDGEZ_RRR_0_OPCODE_X1 = 20, 148 + FETCHADD_RRR_0_OPCODE_X1 = 21, 149 + FETCHAND4_RRR_0_OPCODE_X1 = 22, 150 + FETCHAND_RRR_0_OPCODE_X1 = 23, 151 + FETCHOR4_RRR_0_OPCODE_X1 = 24, 152 + FETCHOR_RRR_0_OPCODE_X1 = 25, 153 + FINV_UNARY_OPCODE_X1 = 3, 154 + FLUSHWB_UNARY_OPCODE_X1 = 4, 155 + FLUSH_UNARY_OPCODE_X1 = 5, 156 + FNOP_UNARY_OPCODE_X0 = 3, 157 + FNOP_UNARY_OPCODE_X1 = 6, 158 + FNOP_UNARY_OPCODE_Y0 = 3, 159 + FNOP_UNARY_OPCODE_Y1 = 8, 160 + FSINGLE_ADD1_RRR_0_OPCODE_X0 = 34, 161 + FSINGLE_ADDSUB2_RRR_0_OPCODE_X0 = 35, 162 + FSINGLE_MUL1_RRR_0_OPCODE_X0 = 36, 163 + FSINGLE_MUL2_RRR_0_OPCODE_X0 = 37, 164 + FSINGLE_PACK1_UNARY_OPCODE_X0 = 4, 165 + FSINGLE_PACK1_UNARY_OPCODE_Y0 = 4, 166 + FSINGLE_PACK2_RRR_0_OPCODE_X0 = 38, 167 + FSINGLE_SUB1_RRR_0_OPCODE_X0 = 39, 168 + ICOH_UNARY_OPCODE_X1 = 7, 169 + ILL_UNARY_OPCODE_X1 = 8, 170 + ILL_UNARY_OPCODE_Y1 = 9, 171 + IMM8_OPCODE_X0 = 4, 172 + IMM8_OPCODE_X1 = 3, 173 + INV_UNARY_OPCODE_X1 = 9, 174 + IRET_UNARY_OPCODE_X1 = 10, 175 + JALRP_UNARY_OPCODE_X1 = 11, 176 + JALRP_UNARY_OPCODE_Y1 = 10, 177 + JALR_UNARY_OPCODE_X1 = 12, 178 + JALR_UNARY_OPCODE_Y1 = 11, 179 + JAL_JUMP_OPCODE_X1 = 0, 180 + JRP_UNARY_OPCODE_X1 = 13, 181 + JRP_UNARY_OPCODE_Y1 = 12, 182 + JR_UNARY_OPCODE_X1 = 14, 183 + JR_UNARY_OPCODE_Y1 = 13, 184 + JUMP_OPCODE_X1 = 4, 185 + J_JUMP_OPCODE_X1 = 1, 186 + LD1S_ADD_IMM8_OPCODE_X1 = 7, 187 + LD1S_OPCODE_Y2 = 0, 188 + LD1S_UNARY_OPCODE_X1 = 15, 189 + LD1U_ADD_IMM8_OPCODE_X1 = 8, 190 + LD1U_OPCODE_Y2 = 1, 191 + LD1U_UNARY_OPCODE_X1 = 16, 192 + LD2S_ADD_IMM8_OPCODE_X1 = 9, 193 + LD2S_OPCODE_Y2 = 2, 194 + LD2S_UNARY_OPCODE_X1 = 17, 195 + LD2U_ADD_IMM8_OPCODE_X1 = 10, 196 + LD2U_OPCODE_Y2 = 3, 197 + LD2U_UNARY_OPCODE_X1 = 18, 198 + LD4S_ADD_IMM8_OPCODE_X1 = 11, 199 + LD4S_OPCODE_Y2 = 1, 200 + LD4S_UNARY_OPCODE_X1 = 19, 201 + LD4U_ADD_IMM8_OPCODE_X1 = 12, 202 + LD4U_OPCODE_Y2 = 2, 203 + LD4U_UNARY_OPCODE_X1 = 20, 204 + LDNA_UNARY_OPCODE_X1 = 21, 205 + LDNT1S_ADD_IMM8_OPCODE_X1 = 13, 206 + LDNT1S_UNARY_OPCODE_X1 = 22, 207 + LDNT1U_ADD_IMM8_OPCODE_X1 = 14, 208 + LDNT1U_UNARY_OPCODE_X1 = 23, 209 + LDNT2S_ADD_IMM8_OPCODE_X1 = 15, 210 + LDNT2S_UNARY_OPCODE_X1 = 24, 211 + LDNT2U_ADD_IMM8_OPCODE_X1 = 16, 212 + LDNT2U_UNARY_OPCODE_X1 = 25, 213 + LDNT4S_ADD_IMM8_OPCODE_X1 = 17, 214 + LDNT4S_UNARY_OPCODE_X1 = 26, 215 + LDNT4U_ADD_IMM8_OPCODE_X1 = 18, 216 + LDNT4U_UNARY_OPCODE_X1 = 27, 217 + LDNT_ADD_IMM8_OPCODE_X1 = 19, 218 + LDNT_UNARY_OPCODE_X1 = 28, 219 + LD_ADD_IMM8_OPCODE_X1 = 20, 220 + LD_OPCODE_Y2 = 3, 221 + LD_UNARY_OPCODE_X1 = 29, 222 + LNK_UNARY_OPCODE_X1 = 30, 223 + LNK_UNARY_OPCODE_Y1 = 14, 224 + LWNA_ADD_IMM8_OPCODE_X1 = 21, 225 + MFSPR_IMM8_OPCODE_X1 = 22, 226 + MF_UNARY_OPCODE_X1 = 31, 227 + MM_BF_OPCODE_X0 = 7, 228 + MNZ_RRR_0_OPCODE_X0 = 40, 229 + MNZ_RRR_0_OPCODE_X1 = 26, 230 + MNZ_RRR_4_OPCODE_Y0 = 2, 231 + MNZ_RRR_4_OPCODE_Y1 = 2, 232 + MODE_OPCODE_YA2 = 1, 233 + MODE_OPCODE_YB2 = 2, 234 + MODE_OPCODE_YC2 = 3, 235 + MTSPR_IMM8_OPCODE_X1 = 23, 236 + MULAX_RRR_0_OPCODE_X0 = 41, 237 + MULAX_RRR_3_OPCODE_Y0 = 2, 238 + MULA_HS_HS_RRR_0_OPCODE_X0 = 42, 239 + MULA_HS_HS_RRR_9_OPCODE_Y0 = 0, 240 + MULA_HS_HU_RRR_0_OPCODE_X0 = 43, 241 + MULA_HS_LS_RRR_0_OPCODE_X0 = 44, 242 + MULA_HS_LU_RRR_0_OPCODE_X0 = 45, 243 + MULA_HU_HU_RRR_0_OPCODE_X0 = 46, 244 + MULA_HU_HU_RRR_9_OPCODE_Y0 = 1, 245 + MULA_HU_LS_RRR_0_OPCODE_X0 = 47, 246 + MULA_HU_LU_RRR_0_OPCODE_X0 = 48, 247 + MULA_LS_LS_RRR_0_OPCODE_X0 = 49, 248 + MULA_LS_LS_RRR_9_OPCODE_Y0 = 2, 249 + MULA_LS_LU_RRR_0_OPCODE_X0 = 50, 250 + MULA_LU_LU_RRR_0_OPCODE_X0 = 51, 251 + MULA_LU_LU_RRR_9_OPCODE_Y0 = 3, 252 + MULX_RRR_0_OPCODE_X0 = 52, 253 + MULX_RRR_3_OPCODE_Y0 = 3, 254 + MUL_HS_HS_RRR_0_OPCODE_X0 = 53, 255 + MUL_HS_HS_RRR_8_OPCODE_Y0 = 0, 256 + MUL_HS_HU_RRR_0_OPCODE_X0 = 54, 257 + MUL_HS_LS_RRR_0_OPCODE_X0 = 55, 258 + MUL_HS_LU_RRR_0_OPCODE_X0 = 56, 259 + MUL_HU_HU_RRR_0_OPCODE_X0 = 57, 260 + MUL_HU_HU_RRR_8_OPCODE_Y0 = 1, 261 + MUL_HU_LS_RRR_0_OPCODE_X0 = 58, 262 + MUL_HU_LU_RRR_0_OPCODE_X0 = 59, 263 + MUL_LS_LS_RRR_0_OPCODE_X0 = 60, 264 + MUL_LS_LS_RRR_8_OPCODE_Y0 = 2, 265 + MUL_LS_LU_RRR_0_OPCODE_X0 = 61, 266 + MUL_LU_LU_RRR_0_OPCODE_X0 = 62, 267 + MUL_LU_LU_RRR_8_OPCODE_Y0 = 3, 268 + MZ_RRR_0_OPCODE_X0 = 63, 269 + MZ_RRR_0_OPCODE_X1 = 27, 270 + MZ_RRR_4_OPCODE_Y0 = 3, 271 + MZ_RRR_4_OPCODE_Y1 = 3, 272 + NAP_UNARY_OPCODE_X1 = 32, 273 + NOP_UNARY_OPCODE_X0 = 5, 274 + NOP_UNARY_OPCODE_X1 = 33, 275 + NOP_UNARY_OPCODE_Y0 = 5, 276 + NOP_UNARY_OPCODE_Y1 = 15, 277 + NOR_RRR_0_OPCODE_X0 = 64, 278 + NOR_RRR_0_OPCODE_X1 = 28, 279 + NOR_RRR_5_OPCODE_Y0 = 1, 280 + NOR_RRR_5_OPCODE_Y1 = 1, 281 + ORI_IMM8_OPCODE_X0 = 7, 282 + ORI_IMM8_OPCODE_X1 = 24, 283 + OR_RRR_0_OPCODE_X0 = 65, 284 + OR_RRR_0_OPCODE_X1 = 29, 285 + OR_RRR_5_OPCODE_Y0 = 2, 286 + OR_RRR_5_OPCODE_Y1 = 2, 287 + PCNT_UNARY_OPCODE_X0 = 6, 288 + PCNT_UNARY_OPCODE_Y0 = 6, 289 + REVBITS_UNARY_OPCODE_X0 = 7, 290 + REVBITS_UNARY_OPCODE_Y0 = 7, 291 + REVBYTES_UNARY_OPCODE_X0 = 8, 292 + REVBYTES_UNARY_OPCODE_Y0 = 8, 293 + ROTLI_SHIFT_OPCODE_X0 = 1, 294 + ROTLI_SHIFT_OPCODE_X1 = 1, 295 + ROTLI_SHIFT_OPCODE_Y0 = 0, 296 + ROTLI_SHIFT_OPCODE_Y1 = 0, 297 + ROTL_RRR_0_OPCODE_X0 = 66, 298 + ROTL_RRR_0_OPCODE_X1 = 30, 299 + ROTL_RRR_6_OPCODE_Y0 = 0, 300 + ROTL_RRR_6_OPCODE_Y1 = 0, 301 + RRR_0_OPCODE_X0 = 5, 302 + RRR_0_OPCODE_X1 = 5, 303 + RRR_0_OPCODE_Y0 = 5, 304 + RRR_0_OPCODE_Y1 = 6, 305 + RRR_1_OPCODE_Y0 = 6, 306 + RRR_1_OPCODE_Y1 = 7, 307 + RRR_2_OPCODE_Y0 = 7, 308 + RRR_2_OPCODE_Y1 = 8, 309 + RRR_3_OPCODE_Y0 = 8, 310 + RRR_3_OPCODE_Y1 = 9, 311 + RRR_4_OPCODE_Y0 = 9, 312 + RRR_4_OPCODE_Y1 = 10, 313 + RRR_5_OPCODE_Y0 = 10, 314 + RRR_5_OPCODE_Y1 = 11, 315 + RRR_6_OPCODE_Y0 = 11, 316 + RRR_6_OPCODE_Y1 = 12, 317 + RRR_7_OPCODE_Y0 = 12, 318 + RRR_7_OPCODE_Y1 = 13, 319 + RRR_8_OPCODE_Y0 = 13, 320 + RRR_9_OPCODE_Y0 = 14, 321 + SHIFT_OPCODE_X0 = 6, 322 + SHIFT_OPCODE_X1 = 6, 323 + SHIFT_OPCODE_Y0 = 15, 324 + SHIFT_OPCODE_Y1 = 14, 325 + SHL16INSLI_OPCODE_X0 = 7, 326 + SHL16INSLI_OPCODE_X1 = 7, 327 + SHL1ADDX_RRR_0_OPCODE_X0 = 67, 328 + SHL1ADDX_RRR_0_OPCODE_X1 = 31, 329 + SHL1ADDX_RRR_7_OPCODE_Y0 = 1, 330 + SHL1ADDX_RRR_7_OPCODE_Y1 = 1, 331 + SHL1ADD_RRR_0_OPCODE_X0 = 68, 332 + SHL1ADD_RRR_0_OPCODE_X1 = 32, 333 + SHL1ADD_RRR_1_OPCODE_Y0 = 0, 334 + SHL1ADD_RRR_1_OPCODE_Y1 = 0, 335 + SHL2ADDX_RRR_0_OPCODE_X0 = 69, 336 + SHL2ADDX_RRR_0_OPCODE_X1 = 33, 337 + SHL2ADDX_RRR_7_OPCODE_Y0 = 2, 338 + SHL2ADDX_RRR_7_OPCODE_Y1 = 2, 339 + SHL2ADD_RRR_0_OPCODE_X0 = 70, 340 + SHL2ADD_RRR_0_OPCODE_X1 = 34, 341 + SHL2ADD_RRR_1_OPCODE_Y0 = 1, 342 + SHL2ADD_RRR_1_OPCODE_Y1 = 1, 343 + SHL3ADDX_RRR_0_OPCODE_X0 = 71, 344 + SHL3ADDX_RRR_0_OPCODE_X1 = 35, 345 + SHL3ADDX_RRR_7_OPCODE_Y0 = 3, 346 + SHL3ADDX_RRR_7_OPCODE_Y1 = 3, 347 + SHL3ADD_RRR_0_OPCODE_X0 = 72, 348 + SHL3ADD_RRR_0_OPCODE_X1 = 36, 349 + SHL3ADD_RRR_1_OPCODE_Y0 = 2, 350 + SHL3ADD_RRR_1_OPCODE_Y1 = 2, 351 + SHLI_SHIFT_OPCODE_X0 = 2, 352 + SHLI_SHIFT_OPCODE_X1 = 2, 353 + SHLI_SHIFT_OPCODE_Y0 = 1, 354 + SHLI_SHIFT_OPCODE_Y1 = 1, 355 + SHLXI_SHIFT_OPCODE_X0 = 3, 356 + SHLXI_SHIFT_OPCODE_X1 = 3, 357 + SHLX_RRR_0_OPCODE_X0 = 73, 358 + SHLX_RRR_0_OPCODE_X1 = 37, 359 + SHL_RRR_0_OPCODE_X0 = 74, 360 + SHL_RRR_0_OPCODE_X1 = 38, 361 + SHL_RRR_6_OPCODE_Y0 = 1, 362 + SHL_RRR_6_OPCODE_Y1 = 1, 363 + SHRSI_SHIFT_OPCODE_X0 = 4, 364 + SHRSI_SHIFT_OPCODE_X1 = 4, 365 + SHRSI_SHIFT_OPCODE_Y0 = 2, 366 + SHRSI_SHIFT_OPCODE_Y1 = 2, 367 + SHRS_RRR_0_OPCODE_X0 = 75, 368 + SHRS_RRR_0_OPCODE_X1 = 39, 369 + SHRS_RRR_6_OPCODE_Y0 = 2, 370 + SHRS_RRR_6_OPCODE_Y1 = 2, 371 + SHRUI_SHIFT_OPCODE_X0 = 5, 372 + SHRUI_SHIFT_OPCODE_X1 = 5, 373 + SHRUI_SHIFT_OPCODE_Y0 = 3, 374 + SHRUI_SHIFT_OPCODE_Y1 = 3, 375 + SHRUXI_SHIFT_OPCODE_X0 = 6, 376 + SHRUXI_SHIFT_OPCODE_X1 = 6, 377 + SHRUX_RRR_0_OPCODE_X0 = 76, 378 + SHRUX_RRR_0_OPCODE_X1 = 40, 379 + SHRU_RRR_0_OPCODE_X0 = 77, 380 + SHRU_RRR_0_OPCODE_X1 = 41, 381 + SHRU_RRR_6_OPCODE_Y0 = 3, 382 + SHRU_RRR_6_OPCODE_Y1 = 3, 383 + SHUFFLEBYTES_RRR_0_OPCODE_X0 = 78, 384 + ST1_ADD_IMM8_OPCODE_X1 = 25, 385 + ST1_OPCODE_Y2 = 0, 386 + ST1_RRR_0_OPCODE_X1 = 42, 387 + ST2_ADD_IMM8_OPCODE_X1 = 26, 388 + ST2_OPCODE_Y2 = 1, 389 + ST2_RRR_0_OPCODE_X1 = 43, 390 + ST4_ADD_IMM8_OPCODE_X1 = 27, 391 + ST4_OPCODE_Y2 = 2, 392 + ST4_RRR_0_OPCODE_X1 = 44, 393 + STNT1_ADD_IMM8_OPCODE_X1 = 28, 394 + STNT1_RRR_0_OPCODE_X1 = 45, 395 + STNT2_ADD_IMM8_OPCODE_X1 = 29, 396 + STNT2_RRR_0_OPCODE_X1 = 46, 397 + STNT4_ADD_IMM8_OPCODE_X1 = 30, 398 + STNT4_RRR_0_OPCODE_X1 = 47, 399 + STNT_ADD_IMM8_OPCODE_X1 = 31, 400 + STNT_RRR_0_OPCODE_X1 = 48, 401 + ST_ADD_IMM8_OPCODE_X1 = 32, 402 + ST_OPCODE_Y2 = 3, 403 + ST_RRR_0_OPCODE_X1 = 49, 404 + SUBXSC_RRR_0_OPCODE_X0 = 79, 405 + SUBXSC_RRR_0_OPCODE_X1 = 50, 406 + SUBX_RRR_0_OPCODE_X0 = 80, 407 + SUBX_RRR_0_OPCODE_X1 = 51, 408 + SUBX_RRR_0_OPCODE_Y0 = 2, 409 + SUBX_RRR_0_OPCODE_Y1 = 2, 410 + SUB_RRR_0_OPCODE_X0 = 81, 411 + SUB_RRR_0_OPCODE_X1 = 52, 412 + SUB_RRR_0_OPCODE_Y0 = 3, 413 + SUB_RRR_0_OPCODE_Y1 = 3, 414 + SWINT0_UNARY_OPCODE_X1 = 34, 415 + SWINT1_UNARY_OPCODE_X1 = 35, 416 + SWINT2_UNARY_OPCODE_X1 = 36, 417 + SWINT3_UNARY_OPCODE_X1 = 37, 418 + TBLIDXB0_UNARY_OPCODE_X0 = 9, 419 + TBLIDXB0_UNARY_OPCODE_Y0 = 9, 420 + TBLIDXB1_UNARY_OPCODE_X0 = 10, 421 + TBLIDXB1_UNARY_OPCODE_Y0 = 10, 422 + TBLIDXB2_UNARY_OPCODE_X0 = 11, 423 + TBLIDXB2_UNARY_OPCODE_Y0 = 11, 424 + TBLIDXB3_UNARY_OPCODE_X0 = 12, 425 + TBLIDXB3_UNARY_OPCODE_Y0 = 12, 426 + UNARY_RRR_0_OPCODE_X0 = 82, 427 + UNARY_RRR_0_OPCODE_X1 = 53, 428 + UNARY_RRR_1_OPCODE_Y0 = 3, 429 + UNARY_RRR_1_OPCODE_Y1 = 3, 430 + V1ADDI_IMM8_OPCODE_X0 = 8, 431 + V1ADDI_IMM8_OPCODE_X1 = 33, 432 + V1ADDUC_RRR_0_OPCODE_X0 = 83, 433 + V1ADDUC_RRR_0_OPCODE_X1 = 54, 434 + V1ADD_RRR_0_OPCODE_X0 = 84, 435 + V1ADD_RRR_0_OPCODE_X1 = 55, 436 + V1ADIFFU_RRR_0_OPCODE_X0 = 85, 437 + V1AVGU_RRR_0_OPCODE_X0 = 86, 438 + V1CMPEQI_IMM8_OPCODE_X0 = 9, 439 + V1CMPEQI_IMM8_OPCODE_X1 = 34, 440 + V1CMPEQ_RRR_0_OPCODE_X0 = 87, 441 + V1CMPEQ_RRR_0_OPCODE_X1 = 56, 442 + V1CMPLES_RRR_0_OPCODE_X0 = 88, 443 + V1CMPLES_RRR_0_OPCODE_X1 = 57, 444 + V1CMPLEU_RRR_0_OPCODE_X0 = 89, 445 + V1CMPLEU_RRR_0_OPCODE_X1 = 58, 446 + V1CMPLTSI_IMM8_OPCODE_X0 = 10, 447 + V1CMPLTSI_IMM8_OPCODE_X1 = 35, 448 + V1CMPLTS_RRR_0_OPCODE_X0 = 90, 449 + V1CMPLTS_RRR_0_OPCODE_X1 = 59, 450 + V1CMPLTUI_IMM8_OPCODE_X0 = 11, 451 + V1CMPLTUI_IMM8_OPCODE_X1 = 36, 452 + V1CMPLTU_RRR_0_OPCODE_X0 = 91, 453 + V1CMPLTU_RRR_0_OPCODE_X1 = 60, 454 + V1CMPNE_RRR_0_OPCODE_X0 = 92, 455 + V1CMPNE_RRR_0_OPCODE_X1 = 61, 456 + V1DDOTPUA_RRR_0_OPCODE_X0 = 161, 457 + V1DDOTPUSA_RRR_0_OPCODE_X0 = 93, 458 + V1DDOTPUS_RRR_0_OPCODE_X0 = 94, 459 + V1DDOTPU_RRR_0_OPCODE_X0 = 162, 460 + V1DOTPA_RRR_0_OPCODE_X0 = 95, 461 + V1DOTPUA_RRR_0_OPCODE_X0 = 163, 462 + V1DOTPUSA_RRR_0_OPCODE_X0 = 96, 463 + V1DOTPUS_RRR_0_OPCODE_X0 = 97, 464 + V1DOTPU_RRR_0_OPCODE_X0 = 164, 465 + V1DOTP_RRR_0_OPCODE_X0 = 98, 466 + V1INT_H_RRR_0_OPCODE_X0 = 99, 467 + V1INT_H_RRR_0_OPCODE_X1 = 62, 468 + V1INT_L_RRR_0_OPCODE_X0 = 100, 469 + V1INT_L_RRR_0_OPCODE_X1 = 63, 470 + V1MAXUI_IMM8_OPCODE_X0 = 12, 471 + V1MAXUI_IMM8_OPCODE_X1 = 37, 472 + V1MAXU_RRR_0_OPCODE_X0 = 101, 473 + V1MAXU_RRR_0_OPCODE_X1 = 64, 474 + V1MINUI_IMM8_OPCODE_X0 = 13, 475 + V1MINUI_IMM8_OPCODE_X1 = 38, 476 + V1MINU_RRR_0_OPCODE_X0 = 102, 477 + V1MINU_RRR_0_OPCODE_X1 = 65, 478 + V1MNZ_RRR_0_OPCODE_X0 = 103, 479 + V1MNZ_RRR_0_OPCODE_X1 = 66, 480 + V1MULTU_RRR_0_OPCODE_X0 = 104, 481 + V1MULUS_RRR_0_OPCODE_X0 = 105, 482 + V1MULU_RRR_0_OPCODE_X0 = 106, 483 + V1MZ_RRR_0_OPCODE_X0 = 107, 484 + V1MZ_RRR_0_OPCODE_X1 = 67, 485 + V1SADAU_RRR_0_OPCODE_X0 = 108, 486 + V1SADU_RRR_0_OPCODE_X0 = 109, 487 + V1SHLI_SHIFT_OPCODE_X0 = 7, 488 + V1SHLI_SHIFT_OPCODE_X1 = 7, 489 + V1SHL_RRR_0_OPCODE_X0 = 110, 490 + V1SHL_RRR_0_OPCODE_X1 = 68, 491 + V1SHRSI_SHIFT_OPCODE_X0 = 8, 492 + V1SHRSI_SHIFT_OPCODE_X1 = 8, 493 + V1SHRS_RRR_0_OPCODE_X0 = 111, 494 + V1SHRS_RRR_0_OPCODE_X1 = 69, 495 + V1SHRUI_SHIFT_OPCODE_X0 = 9, 496 + V1SHRUI_SHIFT_OPCODE_X1 = 9, 497 + V1SHRU_RRR_0_OPCODE_X0 = 112, 498 + V1SHRU_RRR_0_OPCODE_X1 = 70, 499 + V1SUBUC_RRR_0_OPCODE_X0 = 113, 500 + V1SUBUC_RRR_0_OPCODE_X1 = 71, 501 + V1SUB_RRR_0_OPCODE_X0 = 114, 502 + V1SUB_RRR_0_OPCODE_X1 = 72, 503 + V2ADDI_IMM8_OPCODE_X0 = 14, 504 + V2ADDI_IMM8_OPCODE_X1 = 39, 505 + V2ADDSC_RRR_0_OPCODE_X0 = 115, 506 + V2ADDSC_RRR_0_OPCODE_X1 = 73, 507 + V2ADD_RRR_0_OPCODE_X0 = 116, 508 + V2ADD_RRR_0_OPCODE_X1 = 74, 509 + V2ADIFFS_RRR_0_OPCODE_X0 = 117, 510 + V2AVGS_RRR_0_OPCODE_X0 = 118, 511 + V2CMPEQI_IMM8_OPCODE_X0 = 15, 512 + V2CMPEQI_IMM8_OPCODE_X1 = 40, 513 + V2CMPEQ_RRR_0_OPCODE_X0 = 119, 514 + V2CMPEQ_RRR_0_OPCODE_X1 = 75, 515 + V2CMPLES_RRR_0_OPCODE_X0 = 120, 516 + V2CMPLES_RRR_0_OPCODE_X1 = 76, 517 + V2CMPLEU_RRR_0_OPCODE_X0 = 121, 518 + V2CMPLEU_RRR_0_OPCODE_X1 = 77, 519 + V2CMPLTSI_IMM8_OPCODE_X0 = 16, 520 + V2CMPLTSI_IMM8_OPCODE_X1 = 41, 521 + V2CMPLTS_RRR_0_OPCODE_X0 = 122, 522 + V2CMPLTS_RRR_0_OPCODE_X1 = 78, 523 + V2CMPLTUI_IMM8_OPCODE_X0 = 17, 524 + V2CMPLTUI_IMM8_OPCODE_X1 = 42, 525 + V2CMPLTU_RRR_0_OPCODE_X0 = 123, 526 + V2CMPLTU_RRR_0_OPCODE_X1 = 79, 527 + V2CMPNE_RRR_0_OPCODE_X0 = 124, 528 + V2CMPNE_RRR_0_OPCODE_X1 = 80, 529 + V2DOTPA_RRR_0_OPCODE_X0 = 125, 530 + V2DOTP_RRR_0_OPCODE_X0 = 126, 531 + V2INT_H_RRR_0_OPCODE_X0 = 127, 532 + V2INT_H_RRR_0_OPCODE_X1 = 81, 533 + V2INT_L_RRR_0_OPCODE_X0 = 128, 534 + V2INT_L_RRR_0_OPCODE_X1 = 82, 535 + V2MAXSI_IMM8_OPCODE_X0 = 18, 536 + V2MAXSI_IMM8_OPCODE_X1 = 43, 537 + V2MAXS_RRR_0_OPCODE_X0 = 129, 538 + V2MAXS_RRR_0_OPCODE_X1 = 83, 539 + V2MINSI_IMM8_OPCODE_X0 = 19, 540 + V2MINSI_IMM8_OPCODE_X1 = 44, 541 + V2MINS_RRR_0_OPCODE_X0 = 130, 542 + V2MINS_RRR_0_OPCODE_X1 = 84, 543 + V2MNZ_RRR_0_OPCODE_X0 = 131, 544 + V2MNZ_RRR_0_OPCODE_X1 = 85, 545 + V2MULFSC_RRR_0_OPCODE_X0 = 132, 546 + V2MULS_RRR_0_OPCODE_X0 = 133, 547 + V2MULTS_RRR_0_OPCODE_X0 = 134, 548 + V2MZ_RRR_0_OPCODE_X0 = 135, 549 + V2MZ_RRR_0_OPCODE_X1 = 86, 550 + V2PACKH_RRR_0_OPCODE_X0 = 136, 551 + V2PACKH_RRR_0_OPCODE_X1 = 87, 552 + V2PACKL_RRR_0_OPCODE_X0 = 137, 553 + V2PACKL_RRR_0_OPCODE_X1 = 88, 554 + V2PACKUC_RRR_0_OPCODE_X0 = 138, 555 + V2PACKUC_RRR_0_OPCODE_X1 = 89, 556 + V2SADAS_RRR_0_OPCODE_X0 = 139, 557 + V2SADAU_RRR_0_OPCODE_X0 = 140, 558 + V2SADS_RRR_0_OPCODE_X0 = 141, 559 + V2SADU_RRR_0_OPCODE_X0 = 142, 560 + V2SHLI_SHIFT_OPCODE_X0 = 10, 561 + V2SHLI_SHIFT_OPCODE_X1 = 10, 562 + V2SHLSC_RRR_0_OPCODE_X0 = 143, 563 + V2SHLSC_RRR_0_OPCODE_X1 = 90, 564 + V2SHL_RRR_0_OPCODE_X0 = 144, 565 + V2SHL_RRR_0_OPCODE_X1 = 91, 566 + V2SHRSI_SHIFT_OPCODE_X0 = 11, 567 + V2SHRSI_SHIFT_OPCODE_X1 = 11, 568 + V2SHRS_RRR_0_OPCODE_X0 = 145, 569 + V2SHRS_RRR_0_OPCODE_X1 = 92, 570 + V2SHRUI_SHIFT_OPCODE_X0 = 12, 571 + V2SHRUI_SHIFT_OPCODE_X1 = 12, 572 + V2SHRU_RRR_0_OPCODE_X0 = 146, 573 + V2SHRU_RRR_0_OPCODE_X1 = 93, 574 + V2SUBSC_RRR_0_OPCODE_X0 = 147, 575 + V2SUBSC_RRR_0_OPCODE_X1 = 94, 576 + V2SUB_RRR_0_OPCODE_X0 = 148, 577 + V2SUB_RRR_0_OPCODE_X1 = 95, 578 + V4ADDSC_RRR_0_OPCODE_X0 = 149, 579 + V4ADDSC_RRR_0_OPCODE_X1 = 96, 580 + V4ADD_RRR_0_OPCODE_X0 = 150, 581 + V4ADD_RRR_0_OPCODE_X1 = 97, 582 + V4INT_H_RRR_0_OPCODE_X0 = 151, 583 + V4INT_H_RRR_0_OPCODE_X1 = 98, 584 + V4INT_L_RRR_0_OPCODE_X0 = 152, 585 + V4INT_L_RRR_0_OPCODE_X1 = 99, 586 + V4PACKSC_RRR_0_OPCODE_X0 = 153, 587 + V4PACKSC_RRR_0_OPCODE_X1 = 100, 588 + V4SHLSC_RRR_0_OPCODE_X0 = 154, 589 + V4SHLSC_RRR_0_OPCODE_X1 = 101, 590 + V4SHL_RRR_0_OPCODE_X0 = 155, 591 + V4SHL_RRR_0_OPCODE_X1 = 102, 592 + V4SHRS_RRR_0_OPCODE_X0 = 156, 593 + V4SHRS_RRR_0_OPCODE_X1 = 103, 594 + V4SHRU_RRR_0_OPCODE_X0 = 157, 595 + V4SHRU_RRR_0_OPCODE_X1 = 104, 596 + V4SUBSC_RRR_0_OPCODE_X0 = 158, 597 + V4SUBSC_RRR_0_OPCODE_X1 = 105, 598 + V4SUB_RRR_0_OPCODE_X0 = 159, 599 + V4SUB_RRR_0_OPCODE_X1 = 106, 600 + WH64_UNARY_OPCODE_X1 = 38, 601 + XORI_IMM8_OPCODE_X0 = 20, 602 + XORI_IMM8_OPCODE_X1 = 45, 603 + XOR_RRR_0_OPCODE_X0 = 160, 604 + XOR_RRR_0_OPCODE_X1 = 107, 605 + XOR_RRR_5_OPCODE_Y0 = 3, 606 + XOR_RRR_5_OPCODE_Y1 = 3 478 607 }; 479 608 480 609 #endif /* !_TILE_OPCODE_CONSTANTS_H */
+9 -9
arch/tile/include/asm/page.h
··· 16 16 #define _ASM_TILE_PAGE_H 17 17 18 18 #include <linux/const.h> 19 - #include <hv/pagesize.h> 19 + #include <hv/hypervisor.h> 20 + #include <arch/chip.h> 20 21 21 22 /* PAGE_SHIFT and HPAGE_SHIFT determine the page sizes. */ 22 23 #define PAGE_SHIFT HV_LOG2_PAGE_SIZE_SMALL ··· 29 28 #define PAGE_MASK (~(PAGE_SIZE - 1)) 30 29 #define HPAGE_MASK (~(HPAGE_SIZE - 1)) 31 30 32 - #ifdef __KERNEL__ 33 - 34 31 /* 35 32 * If the Kconfig doesn't specify, set a maximum zone order that 36 33 * is enough so that we can create huge pages from small pages given ··· 37 38 #ifndef CONFIG_FORCE_MAX_ZONEORDER 38 39 #define CONFIG_FORCE_MAX_ZONEORDER (HPAGE_SHIFT - PAGE_SHIFT + 1) 39 40 #endif 40 - 41 - #include <hv/hypervisor.h> 42 - #include <arch/chip.h> 43 41 44 42 #ifndef __ASSEMBLY__ 45 43 ··· 87 91 /* Must be a macro since it is used to create constants. */ 88 92 #define __pgprot(val) hv_pte(val) 89 93 94 + /* Rarely-used initializers, typically with a "zero" value. */ 95 + #define __pte(x) hv_pte(x) 96 + #define __pgd(x) hv_pte(x) 97 + 90 98 static inline u64 pgprot_val(pgprot_t pgprot) 91 99 { 92 100 return hv_pte_val(pgprot); ··· 109 109 #ifdef __tilegx__ 110 110 111 111 typedef HV_PTE pmd_t; 112 + 113 + #define __pmd(x) hv_pte(x) 112 114 113 115 static inline u64 pmd_val(pmd_t pmd) 114 116 { ··· 320 318 321 319 /* Provide as macros since these require some other headers included. */ 322 320 #define page_to_pa(page) ((phys_addr_t)(page_to_pfn(page)) << PAGE_SHIFT) 323 - #define virt_to_page(kaddr) pfn_to_page(kaddr_to_pfn(kaddr)) 321 + #define virt_to_page(kaddr) pfn_to_page(kaddr_to_pfn((void *)(kaddr))) 324 322 #define page_to_virt(page) pfn_to_kaddr(page_to_pfn(page)) 325 323 326 324 struct mm_struct; ··· 332 330 (VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 333 331 334 332 #include <asm-generic/memory_model.h> 335 - 336 - #endif /* __KERNEL__ */ 337 333 338 334 #endif /* _ASM_TILE_PAGE_H */
+1
arch/tile/include/asm/parport.h
··· 1 + #include <asm-generic/parport.h>
+2 -1
arch/tile/include/asm/pci.h
··· 46 46 */ 47 47 #define PCI_DMA_BUS_IS_PHYS 1 48 48 49 - int __init tile_pci_init(void); 49 + int __devinit tile_pci_init(void); 50 + int __devinit pcibios_init(void); 50 51 51 52 void __iomem *pci_iomap(struct pci_dev *dev, int bar, unsigned long max); 52 53 static inline void pci_iounmap(struct pci_dev *dev, void __iomem *addr) {}
+175
arch/tile/include/asm/pgtable_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + */ 15 + 16 + #ifndef _ASM_TILE_PGTABLE_64_H 17 + #define _ASM_TILE_PGTABLE_64_H 18 + 19 + /* The level-0 page table breaks the address space into 32-bit chunks. */ 20 + #define PGDIR_SHIFT HV_LOG2_L1_SPAN 21 + #define PGDIR_SIZE HV_L1_SPAN 22 + #define PGDIR_MASK (~(PGDIR_SIZE-1)) 23 + #define PTRS_PER_PGD HV_L0_ENTRIES 24 + #define SIZEOF_PGD (PTRS_PER_PGD * sizeof(pgd_t)) 25 + 26 + /* 27 + * The level-1 index is defined by the huge page size. A PMD is composed 28 + * of PTRS_PER_PMD pgd_t's and is the middle level of the page table. 29 + */ 30 + #define PMD_SHIFT HV_LOG2_PAGE_SIZE_LARGE 31 + #define PMD_SIZE HV_PAGE_SIZE_LARGE 32 + #define PMD_MASK (~(PMD_SIZE-1)) 33 + #define PTRS_PER_PMD (1 << (PGDIR_SHIFT - PMD_SHIFT)) 34 + #define SIZEOF_PMD (PTRS_PER_PMD * sizeof(pmd_t)) 35 + 36 + /* 37 + * The level-2 index is defined by the difference between the huge 38 + * page size and the normal page size. A PTE is composed of 39 + * PTRS_PER_PTE pte_t's and is the bottom level of the page table. 40 + * Note that the hypervisor docs use PTE for what we call pte_t, so 41 + * this nomenclature is somewhat confusing. 42 + */ 43 + #define PTRS_PER_PTE (1 << (HV_LOG2_PAGE_SIZE_LARGE - HV_LOG2_PAGE_SIZE_SMALL)) 44 + #define SIZEOF_PTE (PTRS_PER_PTE * sizeof(pte_t)) 45 + 46 + /* 47 + * Align the vmalloc area to an L2 page table, and leave a guard page 48 + * at the beginning and end. The vmalloc code also puts in an internal 49 + * guard page between each allocation. 50 + */ 51 + #define _VMALLOC_END HUGE_VMAP_BASE 52 + #define VMALLOC_END (_VMALLOC_END - PAGE_SIZE) 53 + #define VMALLOC_START (_VMALLOC_START + PAGE_SIZE) 54 + 55 + #define HUGE_VMAP_END (HUGE_VMAP_BASE + PGDIR_SIZE) 56 + 57 + #ifndef __ASSEMBLY__ 58 + 59 + /* We have no pud since we are a three-level page table. */ 60 + #include <asm-generic/pgtable-nopud.h> 61 + 62 + static inline int pud_none(pud_t pud) 63 + { 64 + return pud_val(pud) == 0; 65 + } 66 + 67 + static inline int pud_present(pud_t pud) 68 + { 69 + return pud_val(pud) & _PAGE_PRESENT; 70 + } 71 + 72 + #define pmd_ERROR(e) \ 73 + pr_err("%s:%d: bad pmd 0x%016llx.\n", __FILE__, __LINE__, pmd_val(e)) 74 + 75 + static inline void pud_clear(pud_t *pudp) 76 + { 77 + __pte_clear(&pudp->pgd); 78 + } 79 + 80 + static inline int pud_bad(pud_t pud) 81 + { 82 + return ((pud_val(pud) & _PAGE_ALL) != _PAGE_TABLE); 83 + } 84 + 85 + /* Return the page-table frame number (ptfn) that a pud_t points at. */ 86 + #define pud_ptfn(pud) hv_pte_get_ptfn((pud).pgd) 87 + 88 + /* 89 + * A given kernel pud_t maps to a kernel pmd_t table at a specific 90 + * virtual address. Since kernel pmd_t tables can be aligned at 91 + * sub-page granularity, this macro can return non-page-aligned 92 + * pointers, despite its name. 93 + */ 94 + #define pud_page_vaddr(pud) \ 95 + (__va((phys_addr_t)pud_ptfn(pud) << HV_LOG2_PAGE_TABLE_ALIGN)) 96 + 97 + /* 98 + * A pud_t points to a pmd_t array. Since we can have multiple per 99 + * page, we don't have a one-to-one mapping of pud_t's to pages. 100 + */ 101 + #define pud_page(pud) pfn_to_page(HV_PTFN_TO_PFN(pud_ptfn(pud))) 102 + 103 + static inline unsigned long pud_index(unsigned long address) 104 + { 105 + return (address >> PUD_SHIFT) & (PTRS_PER_PUD - 1); 106 + } 107 + 108 + #define pmd_offset(pud, address) \ 109 + ((pmd_t *)pud_page_vaddr(*(pud)) + pmd_index(address)) 110 + 111 + static inline void __set_pmd(pmd_t *pmdp, pmd_t pmdval) 112 + { 113 + set_pte(pmdp, pmdval); 114 + } 115 + 116 + /* Create a pmd from a PTFN and pgprot. */ 117 + static inline pmd_t ptfn_pmd(unsigned long ptfn, pgprot_t prot) 118 + { 119 + return hv_pte_set_ptfn(prot, ptfn); 120 + } 121 + 122 + /* Return the page-table frame number (ptfn) that a pmd_t points at. */ 123 + static inline unsigned long pmd_ptfn(pmd_t pmd) 124 + { 125 + return hv_pte_get_ptfn(pmd); 126 + } 127 + 128 + static inline void pmd_clear(pmd_t *pmdp) 129 + { 130 + __pte_clear(pmdp); 131 + } 132 + 133 + /* Normalize an address to having the correct high bits set. */ 134 + #define pgd_addr_normalize pgd_addr_normalize 135 + static inline unsigned long pgd_addr_normalize(unsigned long addr) 136 + { 137 + return ((long)addr << (CHIP_WORD_SIZE() - CHIP_VA_WIDTH())) >> 138 + (CHIP_WORD_SIZE() - CHIP_VA_WIDTH()); 139 + } 140 + 141 + /* We don't define any pgds for these addresses. */ 142 + static inline int pgd_addr_invalid(unsigned long addr) 143 + { 144 + return addr >= MEM_HV_START || 145 + (addr > MEM_LOW_END && addr < MEM_HIGH_START); 146 + } 147 + 148 + /* 149 + * Use atomic instructions to provide atomicity against the hypervisor. 150 + */ 151 + #define __HAVE_ARCH_PTEP_TEST_AND_CLEAR_YOUNG 152 + static inline int ptep_test_and_clear_young(struct vm_area_struct *vma, 153 + unsigned long addr, pte_t *ptep) 154 + { 155 + return (__insn_fetchand(&ptep->val, ~HV_PTE_ACCESSED) >> 156 + HV_PTE_INDEX_ACCESSED) & 0x1; 157 + } 158 + 159 + #define __HAVE_ARCH_PTEP_SET_WRPROTECT 160 + static inline void ptep_set_wrprotect(struct mm_struct *mm, 161 + unsigned long addr, pte_t *ptep) 162 + { 163 + __insn_fetchand(&ptep->val, ~HV_PTE_WRITABLE); 164 + } 165 + 166 + #define __HAVE_ARCH_PTEP_GET_AND_CLEAR 167 + static inline pte_t ptep_get_and_clear(struct mm_struct *mm, 168 + unsigned long addr, pte_t *ptep) 169 + { 170 + return hv_pte(__insn_exch(&ptep->val, 0UL)); 171 + } 172 + 173 + #endif /* __ASSEMBLY__ */ 174 + 175 + #endif /* _ASM_TILE_PGTABLE_64_H */
+2 -7
arch/tile/include/asm/processor.h
··· 215 215 216 216 extern int kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); 217 217 218 + extern int do_work_pending(struct pt_regs *regs, u32 flags); 219 + 218 220 219 221 /* 220 222 * Return saved (kernel) PC of a blocked thread. ··· 257 255 barrier(); 258 256 } 259 257 260 - struct siginfo; 261 - extern void arch_coredump_signal(struct siginfo *, struct pt_regs *); 262 - #define arch_coredump_signal arch_coredump_signal 263 - 264 258 /* Info on this processor (see fs/proc/cpuinfo.c) */ 265 259 struct seq_operations; 266 260 extern const struct seq_operations cpuinfo_op; ··· 266 268 267 269 /* Data on which physical memory controller corresponds to which NUMA node. */ 268 270 extern int node_controller[]; 269 - 270 - /* Do we dump information to the console when a user application crashes? */ 271 - extern int show_crashinfo; 272 271 273 272 #if CHIP_HAS_CBOX_HOME_MAP() 274 273 /* Does the heap allocator return hash-for-home pages by default? */
+1
arch/tile/include/asm/serial.h
··· 1 + #include <asm-generic/serial.h>
+4
arch/tile/include/asm/signal.h
··· 28 28 int restore_sigcontext(struct pt_regs *, struct sigcontext __user *); 29 29 int setup_sigcontext(struct sigcontext __user *, struct pt_regs *); 30 30 void do_signal(struct pt_regs *regs); 31 + void signal_fault(const char *type, struct pt_regs *, 32 + void __user *frame, int sig); 33 + void trace_unhandled_signal(const char *type, struct pt_regs *regs, 34 + unsigned long address, int signo); 31 35 #endif 32 36 33 37 #endif /* _ASM_TILE_SIGNAL_H */
+161
arch/tile/include/asm/spinlock_64.h
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * 64-bit SMP ticket spinlocks, allowing only a single CPU anywhere 15 + * (the type definitions are in asm/spinlock_types.h) 16 + */ 17 + 18 + #ifndef _ASM_TILE_SPINLOCK_64_H 19 + #define _ASM_TILE_SPINLOCK_64_H 20 + 21 + /* Shifts and masks for the various fields in "lock". */ 22 + #define __ARCH_SPIN_CURRENT_SHIFT 17 23 + #define __ARCH_SPIN_NEXT_MASK 0x7fff 24 + #define __ARCH_SPIN_NEXT_OVERFLOW 0x8000 25 + 26 + /* 27 + * Return the "current" portion of a ticket lock value, 28 + * i.e. the number that currently owns the lock. 29 + */ 30 + static inline int arch_spin_current(u32 val) 31 + { 32 + return val >> __ARCH_SPIN_CURRENT_SHIFT; 33 + } 34 + 35 + /* 36 + * Return the "next" portion of a ticket lock value, 37 + * i.e. the number that the next task to try to acquire the lock will get. 38 + */ 39 + static inline int arch_spin_next(u32 val) 40 + { 41 + return val & __ARCH_SPIN_NEXT_MASK; 42 + } 43 + 44 + /* The lock is locked if a task would have to wait to get it. */ 45 + static inline int arch_spin_is_locked(arch_spinlock_t *lock) 46 + { 47 + u32 val = lock->lock; 48 + return arch_spin_current(val) != arch_spin_next(val); 49 + } 50 + 51 + /* Bump the current ticket so the next task owns the lock. */ 52 + static inline void arch_spin_unlock(arch_spinlock_t *lock) 53 + { 54 + wmb(); /* guarantee anything modified under the lock is visible */ 55 + __insn_fetchadd4(&lock->lock, 1U << __ARCH_SPIN_CURRENT_SHIFT); 56 + } 57 + 58 + void arch_spin_unlock_wait(arch_spinlock_t *lock); 59 + 60 + void arch_spin_lock_slow(arch_spinlock_t *lock, u32 val); 61 + 62 + /* Grab the "next" ticket number and bump it atomically. 63 + * If the current ticket is not ours, go to the slow path. 64 + * We also take the slow path if the "next" value overflows. 65 + */ 66 + static inline void arch_spin_lock(arch_spinlock_t *lock) 67 + { 68 + u32 val = __insn_fetchadd4(&lock->lock, 1); 69 + u32 ticket = val & (__ARCH_SPIN_NEXT_MASK | __ARCH_SPIN_NEXT_OVERFLOW); 70 + if (unlikely(arch_spin_current(val) != ticket)) 71 + arch_spin_lock_slow(lock, ticket); 72 + } 73 + 74 + /* Try to get the lock, and return whether we succeeded. */ 75 + int arch_spin_trylock(arch_spinlock_t *lock); 76 + 77 + /* We cannot take an interrupt after getting a ticket, so don't enable them. */ 78 + #define arch_spin_lock_flags(lock, flags) arch_spin_lock(lock) 79 + 80 + /* 81 + * Read-write spinlocks, allowing multiple readers 82 + * but only one writer. 83 + * 84 + * We use fetchadd() for readers, and fetchor() with the sign bit 85 + * for writers. 86 + */ 87 + 88 + #define __WRITE_LOCK_BIT (1 << 31) 89 + 90 + static inline int arch_write_val_locked(int val) 91 + { 92 + return val < 0; /* Optimize "val & __WRITE_LOCK_BIT". */ 93 + } 94 + 95 + /** 96 + * read_can_lock - would read_trylock() succeed? 97 + * @lock: the rwlock in question. 98 + */ 99 + static inline int arch_read_can_lock(arch_rwlock_t *rw) 100 + { 101 + return !arch_write_val_locked(rw->lock); 102 + } 103 + 104 + /** 105 + * write_can_lock - would write_trylock() succeed? 106 + * @lock: the rwlock in question. 107 + */ 108 + static inline int arch_write_can_lock(arch_rwlock_t *rw) 109 + { 110 + return rw->lock == 0; 111 + } 112 + 113 + extern void __read_lock_failed(arch_rwlock_t *rw); 114 + 115 + static inline void arch_read_lock(arch_rwlock_t *rw) 116 + { 117 + u32 val = __insn_fetchaddgez4(&rw->lock, 1); 118 + if (unlikely(arch_write_val_locked(val))) 119 + __read_lock_failed(rw); 120 + } 121 + 122 + extern void __write_lock_failed(arch_rwlock_t *rw, u32 val); 123 + 124 + static inline void arch_write_lock(arch_rwlock_t *rw) 125 + { 126 + u32 val = __insn_fetchor4(&rw->lock, __WRITE_LOCK_BIT); 127 + if (unlikely(val != 0)) 128 + __write_lock_failed(rw, val); 129 + } 130 + 131 + static inline void arch_read_unlock(arch_rwlock_t *rw) 132 + { 133 + __insn_mf(); 134 + __insn_fetchadd4(&rw->lock, -1); 135 + } 136 + 137 + static inline void arch_write_unlock(arch_rwlock_t *rw) 138 + { 139 + __insn_mf(); 140 + rw->lock = 0; 141 + } 142 + 143 + static inline int arch_read_trylock(arch_rwlock_t *rw) 144 + { 145 + return !arch_write_val_locked(__insn_fetchaddgez4(&rw->lock, 1)); 146 + } 147 + 148 + static inline int arch_write_trylock(arch_rwlock_t *rw) 149 + { 150 + u32 val = __insn_fetchor4(&rw->lock, __WRITE_LOCK_BIT); 151 + if (likely(val == 0)) 152 + return 1; 153 + if (!arch_write_val_locked(val)) 154 + __insn_fetchand4(&rw->lock, ~__WRITE_LOCK_BIT); 155 + return 0; 156 + } 157 + 158 + #define arch_read_lock_flags(lock, flags) arch_read_lock(lock) 159 + #define arch_write_lock_flags(lock, flags) arch_write_lock(lock) 160 + 161 + #endif /* _ASM_TILE_SPINLOCK_64_H */
+1 -1
arch/tile/include/asm/stat.h
··· 1 - #ifdef CONFIG_COMPAT 1 + #if defined(__KERNEL__) && defined(CONFIG_COMPAT) 2 2 #define __ARCH_WANT_STAT64 /* Used for compat_sys_stat64() etc. */ 3 3 #endif 4 4 #include <asm-generic/stat.h>
-6
arch/tile/include/asm/swab.h
··· 18 18 /* Tile gcc is always >= 4.3.0, so we use __builtin_bswap. */ 19 19 #define __arch_swab32(x) __builtin_bswap32(x) 20 20 #define __arch_swab64(x) __builtin_bswap64(x) 21 - 22 - /* Use the variant that is natural for the wordsize. */ 23 - #ifdef CONFIG_64BIT 24 - #define __arch_swab16(x) (__builtin_bswap64(x) >> 48) 25 - #else 26 21 #define __arch_swab16(x) (__builtin_bswap32(x) >> 16) 27 - #endif 28 22 29 23 #endif /* _ASM_TILE_SWAB_H */
+4 -1
arch/tile/include/asm/thread_info.h
··· 125 125 #define TIF_SYSCALL_AUDIT 5 /* syscall auditing active */ 126 126 #define TIF_SECCOMP 6 /* secure computing */ 127 127 #define TIF_MEMDIE 7 /* OOM killer at work */ 128 + #define TIF_NOTIFY_RESUME 8 /* callback before returning to user */ 128 129 129 130 #define _TIF_SIGPENDING (1<<TIF_SIGPENDING) 130 131 #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) ··· 135 134 #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) 136 135 #define _TIF_SECCOMP (1<<TIF_SECCOMP) 137 136 #define _TIF_MEMDIE (1<<TIF_MEMDIE) 137 + #define _TIF_NOTIFY_RESUME (1<<TIF_NOTIFY_RESUME) 138 138 139 139 /* Work to do on any return to user space. */ 140 140 #define _TIF_ALLWORK_MASK \ 141 - (_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SINGLESTEP|_TIF_ASYNC_TLB) 141 + (_TIF_SIGPENDING|_TIF_NEED_RESCHED|_TIF_SINGLESTEP|\ 142 + _TIF_ASYNC_TLB|_TIF_NOTIFY_RESUME) 142 143 143 144 /* 144 145 * Thread-synchronous status.
+57 -18
arch/tile/include/asm/topology.h
··· 44 44 /* For now, use numa node -1 for global allocation. */ 45 45 #define pcibus_to_node(bus) ((void)(bus), -1) 46 46 47 + /* 48 + * TILE architecture has many cores integrated in one processor, so we need 49 + * setup bigger balance_interval for both CPU/NODE scheduling domains to 50 + * reduce process scheduling costs. 51 + */ 52 + 53 + /* sched_domains SD_CPU_INIT for TILE architecture */ 54 + #define SD_CPU_INIT (struct sched_domain) { \ 55 + .min_interval = 4, \ 56 + .max_interval = 128, \ 57 + .busy_factor = 64, \ 58 + .imbalance_pct = 125, \ 59 + .cache_nice_tries = 1, \ 60 + .busy_idx = 2, \ 61 + .idle_idx = 1, \ 62 + .newidle_idx = 0, \ 63 + .wake_idx = 0, \ 64 + .forkexec_idx = 0, \ 65 + \ 66 + .flags = 1*SD_LOAD_BALANCE \ 67 + | 1*SD_BALANCE_NEWIDLE \ 68 + | 1*SD_BALANCE_EXEC \ 69 + | 1*SD_BALANCE_FORK \ 70 + | 0*SD_BALANCE_WAKE \ 71 + | 0*SD_WAKE_AFFINE \ 72 + | 0*SD_PREFER_LOCAL \ 73 + | 0*SD_SHARE_CPUPOWER \ 74 + | 0*SD_SHARE_PKG_RESOURCES \ 75 + | 0*SD_SERIALIZE \ 76 + , \ 77 + .last_balance = jiffies, \ 78 + .balance_interval = 32, \ 79 + } 80 + 47 81 /* sched_domains SD_NODE_INIT for TILE architecture */ 48 - #define SD_NODE_INIT (struct sched_domain) { \ 49 - .min_interval = 8, \ 50 - .max_interval = 32, \ 51 - .busy_factor = 32, \ 52 - .imbalance_pct = 125, \ 53 - .cache_nice_tries = 1, \ 54 - .busy_idx = 3, \ 55 - .idle_idx = 1, \ 56 - .newidle_idx = 2, \ 57 - .wake_idx = 1, \ 58 - .flags = SD_LOAD_BALANCE \ 59 - | SD_BALANCE_NEWIDLE \ 60 - | SD_BALANCE_EXEC \ 61 - | SD_BALANCE_FORK \ 62 - | SD_WAKE_AFFINE \ 63 - | SD_SERIALIZE, \ 64 - .last_balance = jiffies, \ 65 - .balance_interval = 1, \ 82 + #define SD_NODE_INIT (struct sched_domain) { \ 83 + .min_interval = 16, \ 84 + .max_interval = 512, \ 85 + .busy_factor = 32, \ 86 + .imbalance_pct = 125, \ 87 + .cache_nice_tries = 1, \ 88 + .busy_idx = 3, \ 89 + .idle_idx = 1, \ 90 + .newidle_idx = 2, \ 91 + .wake_idx = 1, \ 92 + .flags = 1*SD_LOAD_BALANCE \ 93 + | 1*SD_BALANCE_NEWIDLE \ 94 + | 1*SD_BALANCE_EXEC \ 95 + | 1*SD_BALANCE_FORK \ 96 + | 0*SD_BALANCE_WAKE \ 97 + | 0*SD_WAKE_AFFINE \ 98 + | 0*SD_PREFER_LOCAL \ 99 + | 0*SD_SHARE_CPUPOWER \ 100 + | 0*SD_SHARE_PKG_RESOURCES \ 101 + | 1*SD_SERIALIZE \ 102 + , \ 103 + .last_balance = jiffies, \ 104 + .balance_interval = 128, \ 66 105 } 67 106 68 107 /* By definition, we create nodes based on online memory. */
+4
arch/tile/include/asm/traps.h
··· 15 15 #ifndef _ASM_TILE_TRAPS_H 16 16 #define _ASM_TILE_TRAPS_H 17 17 18 + #include <arch/chip.h> 19 + 18 20 /* mm/fault.c */ 19 21 void do_page_fault(struct pt_regs *, int fault_num, 20 22 unsigned long address, unsigned long write); 23 + #if CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC() 21 24 void do_async_page_fault(struct pt_regs *); 25 + #endif 22 26 23 27 #ifndef __tilegx__ 24 28 /*
+1 -1
arch/tile/include/asm/unistd.h
··· 15 15 #if !defined(_ASM_TILE_UNISTD_H) || defined(__SYSCALL) 16 16 #define _ASM_TILE_UNISTD_H 17 17 18 - #ifndef __LP64__ 18 + #if !defined(__LP64__) || defined(__SYSCALL_COMPAT) 19 19 /* Use the flavor of this syscall that matches the 32-bit API better. */ 20 20 #define __ARCH_WANT_SYNC_FILE_RANGE2 21 21 #endif
+10 -2
arch/tile/include/hv/hypervisor.h
··· 22 22 23 23 #include <arch/chip.h> 24 24 25 - #include <hv/pagesize.h> 26 - 27 25 /* Linux builds want unsigned long constants, but assembler wants numbers */ 28 26 #ifdef __ASSEMBLER__ 29 27 /** One, for assembler */ ··· 42 44 */ 43 45 #define HV_L1_SPAN (__HV_SIZE_ONE << HV_LOG2_L1_SPAN) 44 46 47 + /** The log2 of the size of small pages, in bytes. This value should 48 + * be verified at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_SMALL). 49 + */ 50 + #define HV_LOG2_PAGE_SIZE_SMALL 16 51 + 45 52 /** The size of small pages, in bytes. This value should be verified 46 53 * at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_SMALL). 47 54 */ 48 55 #define HV_PAGE_SIZE_SMALL (__HV_SIZE_ONE << HV_LOG2_PAGE_SIZE_SMALL) 56 + 57 + /** The log2 of the size of large pages, in bytes. This value should be 58 + * verified at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_LARGE). 59 + */ 60 + #define HV_LOG2_PAGE_SIZE_LARGE 24 49 61 50 62 /** The size of large pages, in bytes. This value should be verified 51 63 * at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_LARGE).
+21 -14
arch/tile/include/hv/pagesize.h arch/tile/include/asm/vga.h
··· 10 10 * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 11 * NON INFRINGEMENT. See the GNU General Public License for 12 12 * more details. 13 + * 14 + * Access to VGA videoram. 13 15 */ 14 16 15 - /** 16 - * @file pagesize.h 17 - */ 17 + #ifndef _ASM_TILE_VGA_H 18 + #define _ASM_TILE_VGA_H 18 19 19 - #ifndef _HV_PAGESIZE_H 20 - #define _HV_PAGESIZE_H 20 + #include <asm/io.h> 21 21 22 - /** The log2 of the size of small pages, in bytes. This value should 23 - * be verified at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_SMALL). 24 - */ 25 - #define HV_LOG2_PAGE_SIZE_SMALL 16 22 + #define VT_BUF_HAVE_RW 26 23 27 - /** The log2 of the size of large pages, in bytes. This value should be 28 - * verified at runtime by calling hv_sysconf(HV_SYSCONF_PAGE_SIZE_LARGE). 29 - */ 30 - #define HV_LOG2_PAGE_SIZE_LARGE 24 24 + static inline void scr_writew(u16 val, volatile u16 *addr) 25 + { 26 + __raw_writew(val, (volatile u16 __iomem *) addr); 27 + } 31 28 32 - #endif /* _HV_PAGESIZE_H */ 29 + static inline u16 scr_readw(volatile const u16 *addr) 30 + { 31 + return __raw_readw((volatile const u16 __iomem *) addr); 32 + } 33 + 34 + #define vga_readb(a) readb((u8 __iomem *)(a)) 35 + #define vga_writeb(v,a) writeb(v, (u8 __iomem *)(a)) 36 + 37 + #define VGA_MAP_MEM(x,s) ((unsigned long) ioremap(x, s)) 38 + 39 + #endif
+43 -60
arch/tile/kernel/backtrace.c
··· 14 14 15 15 #include <linux/kernel.h> 16 16 #include <linux/string.h> 17 - 18 17 #include <asm/backtrace.h> 19 - 20 - #include <arch/chip.h> 21 - 22 18 #include <asm/opcode-tile.h> 19 + #include <arch/abi.h> 23 20 24 - 25 - #define TREG_SP 54 26 - #define TREG_LR 55 27 - 28 - 29 - #if TILE_CHIP >= 10 21 + #ifdef __tilegx__ 30 22 #define tile_bundle_bits tilegx_bundle_bits 31 23 #define TILE_MAX_INSTRUCTIONS_PER_BUNDLE TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE 32 24 #define TILE_BUNDLE_ALIGNMENT_IN_BYTES TILEGX_BUNDLE_ALIGNMENT_IN_BYTES ··· 39 47 typedef int bt_int_reg_t; 40 48 #endif 41 49 42 - /** A decoded bundle used for backtracer analysis. */ 50 + /* A decoded bundle used for backtracer analysis. */ 43 51 struct BacktraceBundle { 44 52 tile_bundle_bits bits; 45 53 int num_insns; ··· 48 56 }; 49 57 50 58 51 - /* This implementation only makes sense for native tools. */ 52 - /** Default function to read memory. */ 53 - static bool bt_read_memory(void *result, VirtualAddress addr, 54 - unsigned int size, void *extra) 55 - { 56 - /* FIXME: this should do some horrible signal stuff to catch 57 - * SEGV cleanly and fail. 58 - * 59 - * Or else the caller should do the setjmp for efficiency. 60 - */ 61 - 62 - memcpy(result, (const void *)addr, size); 63 - return true; 64 - } 65 - 66 - 67 - /** Locates an instruction inside the given bundle that 59 + /* Locates an instruction inside the given bundle that 68 60 * has the specified mnemonic, and whose first 'num_operands_to_match' 69 61 * operands exactly match those in 'operand_values'. 70 62 */ ··· 83 107 return NULL; 84 108 } 85 109 86 - /** Does this bundle contain an 'iret' instruction? */ 110 + /* Does this bundle contain an 'iret' instruction? */ 87 111 static inline bool bt_has_iret(const struct BacktraceBundle *bundle) 88 112 { 89 113 return find_matching_insn(bundle, TILE_OPC_IRET, NULL, 0) != NULL; 90 114 } 91 115 92 - /** Does this bundle contain an 'addi sp, sp, OFFSET' or 116 + /* Does this bundle contain an 'addi sp, sp, OFFSET' or 93 117 * 'addli sp, sp, OFFSET' instruction, and if so, what is OFFSET? 94 118 */ 95 119 static bool bt_has_addi_sp(const struct BacktraceBundle *bundle, int *adjust) ··· 100 124 find_matching_insn(bundle, TILE_OPC_ADDI, vals, 2); 101 125 if (insn == NULL) 102 126 insn = find_matching_insn(bundle, TILE_OPC_ADDLI, vals, 2); 103 - #if TILE_CHIP >= 10 127 + #ifdef __tilegx__ 104 128 if (insn == NULL) 105 129 insn = find_matching_insn(bundle, TILEGX_OPC_ADDXLI, vals, 2); 106 130 if (insn == NULL) ··· 113 137 return true; 114 138 } 115 139 116 - /** Does this bundle contain any 'info OP' or 'infol OP' 140 + /* Does this bundle contain any 'info OP' or 'infol OP' 117 141 * instruction, and if so, what are their OP? Note that OP is interpreted 118 142 * as an unsigned value by this code since that's what the caller wants. 119 143 * Returns the number of info ops found. ··· 137 161 return num_ops; 138 162 } 139 163 140 - /** Does this bundle contain a jrp instruction, and if so, to which 164 + /* Does this bundle contain a jrp instruction, and if so, to which 141 165 * register is it jumping? 142 166 */ 143 167 static bool bt_has_jrp(const struct BacktraceBundle *bundle, int *target_reg) ··· 151 175 return true; 152 176 } 153 177 154 - /** Does this bundle modify the specified register in any way? */ 178 + /* Does this bundle modify the specified register in any way? */ 155 179 static bool bt_modifies_reg(const struct BacktraceBundle *bundle, int reg) 156 180 { 157 181 int i, j; ··· 171 195 return false; 172 196 } 173 197 174 - /** Does this bundle modify sp? */ 198 + /* Does this bundle modify sp? */ 175 199 static inline bool bt_modifies_sp(const struct BacktraceBundle *bundle) 176 200 { 177 201 return bt_modifies_reg(bundle, TREG_SP); 178 202 } 179 203 180 - /** Does this bundle modify lr? */ 204 + /* Does this bundle modify lr? */ 181 205 static inline bool bt_modifies_lr(const struct BacktraceBundle *bundle) 182 206 { 183 207 return bt_modifies_reg(bundle, TREG_LR); 184 208 } 185 209 186 - /** Does this bundle contain the instruction 'move fp, sp'? */ 210 + /* Does this bundle contain the instruction 'move fp, sp'? */ 187 211 static inline bool bt_has_move_r52_sp(const struct BacktraceBundle *bundle) 188 212 { 189 213 static const int vals[2] = { 52, TREG_SP }; 190 214 return find_matching_insn(bundle, TILE_OPC_MOVE, vals, 2) != NULL; 191 215 } 192 216 193 - /** Does this bundle contain a store of lr to sp? */ 217 + /* Does this bundle contain a store of lr to sp? */ 194 218 static inline bool bt_has_sw_sp_lr(const struct BacktraceBundle *bundle) 195 219 { 196 220 static const int vals[2] = { TREG_SP, TREG_LR }; 197 221 return find_matching_insn(bundle, OPCODE_STORE, vals, 2) != NULL; 198 222 } 199 223 200 - #if TILE_CHIP >= 10 201 - /** Track moveli values placed into registers. */ 224 + #ifdef __tilegx__ 225 + /* Track moveli values placed into registers. */ 202 226 static inline void bt_update_moveli(const struct BacktraceBundle *bundle, 203 227 int moveli_args[]) 204 228 { ··· 214 238 } 215 239 } 216 240 217 - /** Does this bundle contain an 'add sp, sp, reg' instruction 241 + /* Does this bundle contain an 'add sp, sp, reg' instruction 218 242 * from a register that we saw a moveli into, and if so, what 219 243 * is the value in the register? 220 244 */ ··· 236 260 } 237 261 #endif 238 262 239 - /** Locates the caller's PC and SP for a program starting at the 263 + /* Locates the caller's PC and SP for a program starting at the 240 264 * given address. 241 265 */ 242 266 static void find_caller_pc_and_caller_sp(CallerLocation *location, 243 - const VirtualAddress start_pc, 267 + const unsigned long start_pc, 244 268 BacktraceMemoryReader read_memory_func, 245 269 void *read_memory_func_extra) 246 270 { ··· 264 288 tile_bundle_bits prefetched_bundles[32]; 265 289 int num_bundles_prefetched = 0; 266 290 int next_bundle = 0; 267 - VirtualAddress pc; 291 + unsigned long pc; 268 292 269 - #if TILE_CHIP >= 10 293 + #ifdef __tilegx__ 270 294 /* Naively try to track moveli values to support addx for -m32. */ 271 295 int moveli_args[TILEGX_NUM_REGISTERS] = { 0 }; 272 296 #endif ··· 343 367 int info_operand = info_operands[i]; 344 368 if (info_operand < CALLER_UNKNOWN_BASE) { 345 369 /* Weird; reserved value, ignore it. */ 346 - continue; 347 - } 348 - if (info_operand & ENTRY_POINT_INFO_OP) { 349 - /* This info op is ignored by the backtracer. */ 350 370 continue; 351 371 } 352 372 ··· 425 453 if (!sp_determined) { 426 454 int adjust; 427 455 if (bt_has_addi_sp(&bundle, &adjust) 428 - #if TILE_CHIP >= 10 456 + #ifdef __tilegx__ 429 457 || bt_has_add_sp(&bundle, &adjust, moveli_args) 430 458 #endif 431 459 ) { ··· 476 504 } 477 505 } 478 506 479 - #if TILE_CHIP >= 10 507 + #ifdef __tilegx__ 480 508 /* Track moveli arguments for -m32 mode. */ 481 509 bt_update_moveli(&bundle, moveli_args); 482 510 #endif ··· 518 546 } 519 547 } 520 548 549 + /* Initializes a backtracer to start from the given location. 550 + * 551 + * If the frame pointer cannot be determined it is set to -1. 552 + * 553 + * state: The state to be filled in. 554 + * read_memory_func: A callback that reads memory. 555 + * read_memory_func_extra: An arbitrary argument to read_memory_func. 556 + * pc: The current PC. 557 + * lr: The current value of the 'lr' register. 558 + * sp: The current value of the 'sp' register. 559 + * r52: The current value of the 'r52' register. 560 + */ 521 561 void backtrace_init(BacktraceIterator *state, 522 562 BacktraceMemoryReader read_memory_func, 523 563 void *read_memory_func_extra, 524 - VirtualAddress pc, VirtualAddress lr, 525 - VirtualAddress sp, VirtualAddress r52) 564 + unsigned long pc, unsigned long lr, 565 + unsigned long sp, unsigned long r52) 526 566 { 527 567 CallerLocation location; 528 - VirtualAddress fp, initial_frame_caller_pc; 529 - 530 - if (read_memory_func == NULL) { 531 - read_memory_func = bt_read_memory; 532 - } 568 + unsigned long fp, initial_frame_caller_pc; 533 569 534 570 /* Find out where we are in the initial frame. */ 535 571 find_caller_pc_and_caller_sp(&location, pc, ··· 610 630 /* Handle the case where the register holds more bits than the VA. */ 611 631 static bool valid_addr_reg(bt_int_reg_t reg) 612 632 { 613 - return ((VirtualAddress)reg == reg); 633 + return ((unsigned long)reg == reg); 614 634 } 615 635 636 + /* Advances the backtracing state to the calling frame, returning 637 + * true iff successful. 638 + */ 616 639 bool backtrace_next(BacktraceIterator *state) 617 640 { 618 - VirtualAddress next_fp, next_pc; 641 + unsigned long next_fp, next_pc; 619 642 bt_int_reg_t next_frame[2]; 620 643 621 644 if (state->fp == -1) {
+1 -12
arch/tile/kernel/compat.c
··· 135 135 136 136 /* Provide the compat syscall number to call mapping. */ 137 137 #undef __SYSCALL 138 - #define __SYSCALL(nr, call) [nr] = (compat_##call), 138 + #define __SYSCALL(nr, call) [nr] = (call), 139 139 140 140 /* The generic versions of these don't work for Tile. */ 141 141 #define compat_sys_msgrcv tile_compat_sys_msgrcv 142 142 #define compat_sys_msgsnd tile_compat_sys_msgsnd 143 143 144 144 /* See comments in sys.c */ 145 - #define compat_sys_fadvise64 sys32_fadvise64 146 145 #define compat_sys_fadvise64_64 sys32_fadvise64_64 147 146 #define compat_sys_readahead sys32_readahead 148 - #define compat_sys_sync_file_range compat_sys_sync_file_range2 149 - 150 - /* We leverage the "struct stat64" type for 32-bit time_t/nsec. */ 151 - #define compat_sys_stat64 sys_stat64 152 - #define compat_sys_lstat64 sys_lstat64 153 - #define compat_sys_fstat64 sys_fstat64 154 - #define compat_sys_fstatat64 sys_fstatat64 155 - 156 - /* The native sys_ptrace dynamically handles compat binaries. */ 157 - #define compat_sys_ptrace sys_ptrace 158 147 159 148 /* Call the trampolines to manage pt_regs where necessary. */ 160 149 #define compat_sys_execve _compat_sys_execve
+2 -2
arch/tile/kernel/compat_signal.c
··· 317 317 return 0; 318 318 319 319 badframe: 320 - force_sig(SIGSEGV, current); 320 + signal_fault("bad sigreturn frame", regs, frame, 0); 321 321 return 0; 322 322 } 323 323 ··· 431 431 return 0; 432 432 433 433 give_sigsegv: 434 - force_sigsegv(sig, current); 434 + signal_fault("bad setup frame", regs, frame, sig); 435 435 return -EFAULT; 436 436 }
+55
arch/tile/kernel/futex_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * Atomically access user memory, but use MMU to avoid propagating 15 + * kernel exceptions. 16 + */ 17 + 18 + #include <linux/linkage.h> 19 + #include <asm/errno.h> 20 + #include <asm/futex.h> 21 + #include <asm/page.h> 22 + #include <asm/processor.h> 23 + 24 + /* 25 + * Provide a set of atomic memory operations supporting <asm/futex.h>. 26 + * 27 + * r0: user address to manipulate 28 + * r1: new value to write, or for cmpxchg, old value to compare against 29 + * r2: (cmpxchg only) new value to write 30 + * 31 + * Return __get_user struct, r0 with value, r1 with error. 32 + */ 33 + #define FUTEX_OP(name, ...) \ 34 + STD_ENTRY(futex_##name) \ 35 + __VA_ARGS__; \ 36 + { \ 37 + move r1, zero; \ 38 + jrp lr \ 39 + }; \ 40 + STD_ENDPROC(futex_##name); \ 41 + .pushsection __ex_table,"a"; \ 42 + .quad 1b, get_user_fault; \ 43 + .popsection 44 + 45 + .pushsection .fixup,"ax" 46 + get_user_fault: 47 + { movei r1, -EFAULT; jrp lr } 48 + ENDPROC(get_user_fault) 49 + .popsection 50 + 51 + FUTEX_OP(cmpxchg, mtspr CMPEXCH_VALUE, r1; 1: cmpexch4 r0, r0, r2) 52 + FUTEX_OP(set, 1: exch4 r0, r0, r1) 53 + FUTEX_OP(add, 1: fetchadd4 r0, r0, r1) 54 + FUTEX_OP(or, 1: fetchor4 r0, r0, r1) 55 + FUTEX_OP(andn, nor r1, r1, zero; 1: fetchand4 r0, r0, r1)
+2 -4
arch/tile/kernel/hardwall.c
··· 268 268 found_processes = 0; 269 269 list_for_each_entry(p, &rect->task_head, thread.hardwall_list) { 270 270 BUG_ON(p->thread.hardwall != rect); 271 - if (p->sighand) { 271 + if (!(p->flags & PF_EXITING)) { 272 272 found_processes = 1; 273 273 pr_notice("hardwall: killing %d\n", p->pid); 274 - spin_lock(&p->sighand->siglock); 275 - __group_send_sig_info(info.si_signo, &info, p); 276 - spin_unlock(&p->sighand->siglock); 274 + do_send_sig_info(info.si_signo, &info, p, false); 277 275 } 278 276 } 279 277 if (!found_processes)
+269
arch/tile/kernel/head_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * TILE startup code. 15 + */ 16 + 17 + #include <linux/linkage.h> 18 + #include <linux/init.h> 19 + #include <asm/page.h> 20 + #include <asm/pgtable.h> 21 + #include <asm/thread_info.h> 22 + #include <asm/processor.h> 23 + #include <asm/asm-offsets.h> 24 + #include <hv/hypervisor.h> 25 + #include <arch/chip.h> 26 + #include <arch/spr_def.h> 27 + 28 + /* 29 + * This module contains the entry code for kernel images. It performs the 30 + * minimal setup needed to call the generic C routines. 31 + */ 32 + 33 + __HEAD 34 + ENTRY(_start) 35 + /* Notify the hypervisor of what version of the API we want */ 36 + { 37 + movei r1, TILE_CHIP 38 + movei r2, TILE_CHIP_REV 39 + } 40 + { 41 + moveli r0, _HV_VERSION 42 + jal hv_init 43 + } 44 + /* Get a reasonable default ASID in r0 */ 45 + { 46 + move r0, zero 47 + jal hv_inquire_asid 48 + } 49 + 50 + /* 51 + * Install the default page table. The relocation required to 52 + * statically define the table is a bit too complex, so we have 53 + * to plug in the pointer from the L0 to the L1 table by hand. 54 + * We only do this on the first cpu to boot, though, since the 55 + * other CPUs should see a properly-constructed page table. 56 + */ 57 + { 58 + v4int_l r2, zero, r0 /* ASID for hv_install_context */ 59 + moveli r4, hw1_last(swapper_pgprot - PAGE_OFFSET) 60 + } 61 + { 62 + shl16insli r4, r4, hw0(swapper_pgprot - PAGE_OFFSET) 63 + } 64 + { 65 + ld r1, r4 /* access_pte for hv_install_context */ 66 + } 67 + { 68 + moveli r0, hw1_last(.Lsv_data_pmd - PAGE_OFFSET) 69 + moveli r6, hw1_last(temp_data_pmd - PAGE_OFFSET) 70 + } 71 + { 72 + /* After initializing swapper_pgprot, HV_PTE_GLOBAL is set. */ 73 + bfextu r7, r1, HV_PTE_INDEX_GLOBAL, HV_PTE_INDEX_GLOBAL 74 + inv r4 75 + } 76 + bnez r7, .Lno_write 77 + { 78 + shl16insli r0, r0, hw0(.Lsv_data_pmd - PAGE_OFFSET) 79 + shl16insli r6, r6, hw0(temp_data_pmd - PAGE_OFFSET) 80 + } 81 + { 82 + /* Cut off the low bits of the PT address. */ 83 + shrui r6, r6, HV_LOG2_PAGE_TABLE_ALIGN 84 + /* Start with our access pte. */ 85 + move r5, r1 86 + } 87 + { 88 + /* Stuff the address into the page table pointer slot of the PTE. */ 89 + bfins r5, r6, HV_PTE_INDEX_PTFN, \ 90 + HV_PTE_INDEX_PTFN + HV_PTE_PTFN_BITS - 1 91 + } 92 + { 93 + /* Store the L0 data PTE. */ 94 + st r0, r5 95 + addli r6, r6, (temp_code_pmd - temp_data_pmd) >> \ 96 + HV_LOG2_PAGE_TABLE_ALIGN 97 + } 98 + { 99 + addli r0, r0, .Lsv_code_pmd - .Lsv_data_pmd 100 + bfins r5, r6, HV_PTE_INDEX_PTFN, \ 101 + HV_PTE_INDEX_PTFN + HV_PTE_PTFN_BITS - 1 102 + } 103 + /* Store the L0 code PTE. */ 104 + st r0, r5 105 + 106 + .Lno_write: 107 + moveli lr, hw2_last(1f) 108 + { 109 + shl16insli lr, lr, hw1(1f) 110 + moveli r0, hw1_last(swapper_pg_dir - PAGE_OFFSET) 111 + } 112 + { 113 + shl16insli lr, lr, hw0(1f) 114 + shl16insli r0, r0, hw0(swapper_pg_dir - PAGE_OFFSET) 115 + } 116 + { 117 + move r3, zero 118 + j hv_install_context 119 + } 120 + 1: 121 + 122 + /* Install the interrupt base. */ 123 + moveli r0, hw2_last(MEM_SV_START) 124 + shl16insli r0, r0, hw1(MEM_SV_START) 125 + shl16insli r0, r0, hw0(MEM_SV_START) 126 + mtspr SPR_INTERRUPT_VECTOR_BASE_K, r0 127 + 128 + /* 129 + * Get our processor number and save it away in SAVE_K_0. 130 + * Extract stuff from the topology structure: r4 = y, r6 = x, 131 + * r5 = width. FIXME: consider whether we want to just make these 132 + * 64-bit values (and if so fix smp_topology write below, too). 133 + */ 134 + jal hv_inquire_topology 135 + { 136 + v4int_l r5, zero, r1 /* r5 = width */ 137 + shrui r4, r0, 32 /* r4 = y */ 138 + } 139 + { 140 + v4int_l r6, zero, r0 /* r6 = x */ 141 + mul_lu_lu r4, r4, r5 142 + } 143 + { 144 + add r4, r4, r6 /* r4 == cpu == y*width + x */ 145 + } 146 + 147 + #ifdef CONFIG_SMP 148 + /* 149 + * Load up our per-cpu offset. When the first (master) tile 150 + * boots, this value is still zero, so we will load boot_pc 151 + * with start_kernel, and boot_sp with init_stack + THREAD_SIZE. 152 + * The master tile initializes the per-cpu offset array, so that 153 + * when subsequent (secondary) tiles boot, they will instead load 154 + * from their per-cpu versions of boot_sp and boot_pc. 155 + */ 156 + moveli r5, hw2_last(__per_cpu_offset) 157 + shl16insli r5, r5, hw1(__per_cpu_offset) 158 + shl16insli r5, r5, hw0(__per_cpu_offset) 159 + shl3add r5, r4, r5 160 + ld r5, r5 161 + bnez r5, 1f 162 + 163 + /* 164 + * Save the width and height to the smp_topology variable 165 + * for later use. 166 + */ 167 + moveli r0, hw2_last(smp_topology + HV_TOPOLOGY_WIDTH_OFFSET) 168 + shl16insli r0, r0, hw1(smp_topology + HV_TOPOLOGY_WIDTH_OFFSET) 169 + shl16insli r0, r0, hw0(smp_topology + HV_TOPOLOGY_WIDTH_OFFSET) 170 + st r0, r1 171 + 1: 172 + #else 173 + move r5, zero 174 + #endif 175 + 176 + /* Load and go with the correct pc and sp. */ 177 + { 178 + moveli r1, hw2_last(boot_sp) 179 + moveli r0, hw2_last(boot_pc) 180 + } 181 + { 182 + shl16insli r1, r1, hw1(boot_sp) 183 + shl16insli r0, r0, hw1(boot_pc) 184 + } 185 + { 186 + shl16insli r1, r1, hw0(boot_sp) 187 + shl16insli r0, r0, hw0(boot_pc) 188 + } 189 + { 190 + add r1, r1, r5 191 + add r0, r0, r5 192 + } 193 + ld r0, r0 194 + ld sp, r1 195 + or r4, sp, r4 196 + mtspr SPR_SYSTEM_SAVE_K_0, r4 /* save ksp0 + cpu */ 197 + addi sp, sp, -STACK_TOP_DELTA 198 + { 199 + move lr, zero /* stop backtraces in the called function */ 200 + jr r0 201 + } 202 + ENDPROC(_start) 203 + 204 + __PAGE_ALIGNED_BSS 205 + .align PAGE_SIZE 206 + ENTRY(empty_zero_page) 207 + .fill PAGE_SIZE,1,0 208 + END(empty_zero_page) 209 + 210 + .macro PTE cpa, bits1 211 + .quad HV_PTE_PAGE | HV_PTE_DIRTY | HV_PTE_PRESENT | HV_PTE_ACCESSED |\ 212 + HV_PTE_GLOBAL | (HV_PTE_MODE_CACHE_NO_L3 << HV_PTE_INDEX_MODE) |\ 213 + (\bits1) | (HV_CPA_TO_PFN(\cpa) << HV_PTE_INDEX_PFN) 214 + .endm 215 + 216 + __PAGE_ALIGNED_DATA 217 + .align PAGE_SIZE 218 + ENTRY(swapper_pg_dir) 219 + .org swapper_pg_dir + HV_L0_INDEX(PAGE_OFFSET) * HV_PTE_SIZE 220 + .Lsv_data_pmd: 221 + .quad 0 /* PTE temp_data_pmd - PAGE_OFFSET, 0 */ 222 + .org swapper_pg_dir + HV_L0_INDEX(MEM_SV_START) * HV_PTE_SIZE 223 + .Lsv_code_pmd: 224 + .quad 0 /* PTE temp_code_pmd - PAGE_OFFSET, 0 */ 225 + .org swapper_pg_dir + HV_L0_SIZE 226 + END(swapper_pg_dir) 227 + 228 + .align HV_PAGE_TABLE_ALIGN 229 + ENTRY(temp_data_pmd) 230 + /* 231 + * We fill the PAGE_OFFSET pmd with huge pages with 232 + * VA = PA + PAGE_OFFSET. We remap things with more precise access 233 + * permissions later. 234 + */ 235 + .set addr, 0 236 + .rept HV_L1_ENTRIES 237 + PTE addr, HV_PTE_READABLE | HV_PTE_WRITABLE 238 + .set addr, addr + HV_PAGE_SIZE_LARGE 239 + .endr 240 + .org temp_data_pmd + HV_L1_SIZE 241 + END(temp_data_pmd) 242 + 243 + .align HV_PAGE_TABLE_ALIGN 244 + ENTRY(temp_code_pmd) 245 + /* 246 + * We fill the MEM_SV_START pmd with huge pages with 247 + * VA = PA + PAGE_OFFSET. We remap things with more precise access 248 + * permissions later. 249 + */ 250 + .set addr, 0 251 + .rept HV_L1_ENTRIES 252 + PTE addr, HV_PTE_READABLE | HV_PTE_EXECUTABLE 253 + .set addr, addr + HV_PAGE_SIZE_LARGE 254 + .endr 255 + .org temp_code_pmd + HV_L1_SIZE 256 + END(temp_code_pmd) 257 + 258 + /* 259 + * Isolate swapper_pgprot to its own cache line, since each cpu 260 + * starting up will read it using VA-is-PA and local homing. 261 + * This would otherwise likely conflict with other data on the cache 262 + * line, once we have set its permanent home in the page tables. 263 + */ 264 + __INITDATA 265 + .align CHIP_L2_LINE_SIZE() 266 + ENTRY(swapper_pgprot) 267 + .quad HV_PTE_PRESENT | (HV_PTE_MODE_CACHE_NO_L3 << HV_PTE_INDEX_MODE) 268 + .align CHIP_L2_LINE_SIZE() 269 + END(swapper_pgprot)
+43 -132
arch/tile/kernel/intvec_32.S
··· 851 851 /* Check to see if there is any work to do before returning to user. */ 852 852 { 853 853 addi r29, r32, THREAD_INFO_FLAGS_OFFSET 854 - moveli r28, lo16(_TIF_ALLWORK_MASK) 854 + moveli r1, lo16(_TIF_ALLWORK_MASK) 855 855 } 856 856 { 857 857 lw r29, r29 858 - auli r28, r28, ha16(_TIF_ALLWORK_MASK) 858 + auli r1, r1, ha16(_TIF_ALLWORK_MASK) 859 859 } 860 - and r28, r29, r28 861 - bnz r28, .Lwork_pending 860 + and r1, r29, r1 861 + bzt r1, .Lrestore_all 862 + 863 + /* 864 + * Make sure we have all the registers saved for signal 865 + * handling or single-step. Call out to C code to figure out 866 + * exactly what we need to do for each flag bit, then if 867 + * necessary, reload the flags and recheck. 868 + */ 869 + push_extra_callee_saves r0 870 + { 871 + PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 872 + jal do_work_pending 873 + } 874 + bnz r0, .Lresume_userspace 862 875 863 876 /* 864 877 * In the NMI case we ··· 1112 1099 pop_reg r50 1113 1100 pop_reg r51, sp, PTREGS_OFFSET_REG(29) - PTREGS_OFFSET_REG(51) 1114 1101 j .Lcontinue_restore_regs 1115 - 1116 - .Lwork_pending: 1117 - /* Mask the reschedule flag */ 1118 - andi r28, r29, _TIF_NEED_RESCHED 1119 - 1120 - { 1121 - /* 1122 - * If the NEED_RESCHED flag is called, we call schedule(), which 1123 - * may drop this context right here and go do something else. 1124 - * On return, jump back to .Lresume_userspace and recheck. 1125 - */ 1126 - bz r28, .Lasync_tlb 1127 - 1128 - /* Mask the async-tlb flag */ 1129 - andi r28, r29, _TIF_ASYNC_TLB 1130 - } 1131 - 1132 - jal schedule 1133 - FEEDBACK_REENTER(interrupt_return) 1134 - 1135 - /* Reload the flags and check again */ 1136 - j .Lresume_userspace 1137 - 1138 - .Lasync_tlb: 1139 - { 1140 - bz r28, .Lneed_sigpending 1141 - 1142 - /* Mask the sigpending flag */ 1143 - andi r28, r29, _TIF_SIGPENDING 1144 - } 1145 - 1146 - PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 1147 - jal do_async_page_fault 1148 - FEEDBACK_REENTER(interrupt_return) 1149 - 1150 - /* 1151 - * Go restart the "resume userspace" process. We may have 1152 - * fired a signal, and we need to disable interrupts again. 1153 - */ 1154 - j .Lresume_userspace 1155 - 1156 - .Lneed_sigpending: 1157 - /* 1158 - * At this point we are either doing signal handling or single-step, 1159 - * so either way make sure we have all the registers saved. 1160 - */ 1161 - push_extra_callee_saves r0 1162 - 1163 - { 1164 - /* If no signal pending, skip to singlestep check */ 1165 - bz r28, .Lneed_singlestep 1166 - 1167 - /* Mask the singlestep flag */ 1168 - andi r28, r29, _TIF_SINGLESTEP 1169 - } 1170 - 1171 - jal do_signal 1172 - FEEDBACK_REENTER(interrupt_return) 1173 - 1174 - /* Reload the flags and check again */ 1175 - j .Lresume_userspace 1176 - 1177 - .Lneed_singlestep: 1178 - { 1179 - /* Get a pointer to the EX1 field */ 1180 - PTREGS_PTR(r29, PTREGS_OFFSET_EX1) 1181 - 1182 - /* If we get here, our bit must be set. */ 1183 - bz r28, .Lwork_confusion 1184 - } 1185 - /* If we are in priv mode, don't single step */ 1186 - lw r28, r29 1187 - andi r28, r28, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */ 1188 - bnz r28, .Lrestore_all 1189 - 1190 - /* Allow interrupts within the single step code */ 1191 - TRACE_IRQS_ON /* Note: clobbers registers r0-r29 */ 1192 - IRQ_ENABLE(r20, r21) 1193 - 1194 - /* try to single-step the current instruction */ 1195 - PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 1196 - jal single_step_once 1197 - FEEDBACK_REENTER(interrupt_return) 1198 - 1199 - /* Re-disable interrupts. TRACE_IRQS_OFF in .Lrestore_all. */ 1200 - IRQ_DISABLE(r20,r21) 1201 - 1202 - j .Lrestore_all 1203 - 1204 - .Lwork_confusion: 1205 - move r0, r28 1206 - panic "thread_info allwork flags unhandled on userspace resume: %#x" 1207 - 1208 1102 STD_ENDPROC(interrupt_return) 1209 1103 1210 1104 /* ··· 1470 1550 * We place it in the __HEAD section to ensure it is relatively 1471 1551 * near to the intvec_SWINT_1 code (reachable by a conditional branch). 1472 1552 * 1473 - * Must match register usage in do_page_fault(). 1553 + * Our use of ATOMIC_LOCK_REG here must match do_page_fault_ics(). 1554 + * 1555 + * As we do in lib/atomic_asm_32.S, we bypass a store if the value we 1556 + * would store is the same as the value we just loaded. 1474 1557 */ 1475 1558 __HEAD 1476 1559 .align 64 ··· 1534 1611 { 1535 1612 shri r20, r25, 32 - ATOMIC_HASH_L1_SHIFT 1536 1613 slt_u r23, r0, r23 1537 - 1538 - /* 1539 - * Ensure that the TLB is loaded before we take out the lock. 1540 - * On TILEPro, this will start fetching the value all the way 1541 - * into our L1 as well (and if it gets modified before we 1542 - * grab the lock, it will be invalidated from our cache 1543 - * before we reload it). On tile64, we'll start fetching it 1544 - * into our L1 if we're the home, and if we're not, we'll 1545 - * still at least start fetching it into the home's L2. 1546 - */ 1547 - lw r26, r0 1614 + lw r26, r0 /* see comment in the "#else" for the "lw r26". */ 1548 1615 } 1549 1616 { 1550 1617 s2a r21, r20, r21 ··· 1550 1637 bbs r23, .Lcmpxchg64 1551 1638 andi r23, r0, 7 /* Precompute alignment for cmpxchg64. */ 1552 1639 } 1553 - 1554 1640 { 1555 - /* 1556 - * We very carefully align the code that actually runs with 1557 - * the lock held (nine bundles) so that we know it is all in 1558 - * the icache when we start. This instruction (the jump) is 1559 - * at the start of the first cache line, address zero mod 64; 1560 - * we jump to somewhere in the second cache line to issue the 1561 - * tns, then jump back to finish up. 1562 - */ 1563 1641 s2a ATOMIC_LOCK_REG_NAME, r25, r21 1564 - j .Lcmpxchg32_tns 1642 + j .Lcmpxchg32_tns /* see comment in the #else for the jump. */ 1565 1643 } 1566 1644 1567 1645 #else /* ATOMIC_LOCKS_FOUND_VIA_TABLE() */ ··· 1617 1713 { 1618 1714 /* 1619 1715 * We very carefully align the code that actually runs with 1620 - * the lock held (nine bundles) so that we know it is all in 1716 + * the lock held (twelve bundles) so that we know it is all in 1621 1717 * the icache when we start. This instruction (the jump) is 1622 1718 * at the start of the first cache line, address zero mod 64; 1623 - * we jump to somewhere in the second cache line to issue the 1624 - * tns, then jump back to finish up. 1719 + * we jump to the very end of the second cache line to get that 1720 + * line loaded in the icache, then fall through to issue the tns 1721 + * in the third cache line, at which point it's all cached. 1722 + * Note that is for performance, not correctness. 1625 1723 */ 1626 1724 j .Lcmpxchg32_tns 1627 1725 } 1628 1726 1629 1727 #endif /* ATOMIC_LOCKS_FOUND_VIA_TABLE() */ 1630 1728 1631 - ENTRY(__sys_cmpxchg_grab_lock) 1729 + /* Symbol for do_page_fault_ics() to use to compare against the PC. */ 1730 + .global __sys_cmpxchg_grab_lock 1731 + __sys_cmpxchg_grab_lock: 1632 1732 1633 1733 /* 1634 1734 * Perform the actual cmpxchg or atomic_update. 1635 - * Note that the system <arch/atomic.h> header relies on 1636 - * atomic_update() to always perform an "mf", so don't make 1637 - * it optional or conditional without modifying that code. 1638 1735 */ 1639 1736 .Ldo_cmpxchg32: 1640 1737 { ··· 1653 1748 } 1654 1749 { 1655 1750 mvnz r24, r23, r25 /* Use atomic_update value if appropriate. */ 1656 - bbns r22, .Lcmpxchg32_mismatch 1751 + bbns r22, .Lcmpxchg32_nostore 1657 1752 } 1753 + seq r22, r24, r21 /* Are we storing the value we loaded? */ 1754 + bbs r22, .Lcmpxchg32_nostore 1658 1755 sw r0, r24 1659 1756 1757 + /* The following instruction is the start of the second cache line. */ 1660 1758 /* Do slow mtspr here so the following "mf" waits less. */ 1661 1759 { 1662 1760 move sp, r27 ··· 1667 1759 } 1668 1760 mf 1669 1761 1670 - /* The following instruction is the start of the second cache line. */ 1671 1762 { 1672 1763 move r0, r21 1673 1764 sw ATOMIC_LOCK_REG_NAME, zero ··· 1674 1767 iret 1675 1768 1676 1769 /* Duplicated code here in the case where we don't overlap "mf" */ 1677 - .Lcmpxchg32_mismatch: 1770 + .Lcmpxchg32_nostore: 1678 1771 { 1679 1772 move r0, r21 1680 1773 sw ATOMIC_LOCK_REG_NAME, zero ··· 1690 1783 * and for 64-bit cmpxchg. We provide it as a macro and put 1691 1784 * it into both versions. We can't share the code literally 1692 1785 * since it depends on having the right branch-back address. 1693 - * Note that the first few instructions should share the cache 1694 - * line with the second half of the actual locked code. 1695 1786 */ 1696 1787 .macro cmpxchg_lock, bitwidth 1697 1788 ··· 1715 1810 } 1716 1811 /* 1717 1812 * The preceding instruction is the last thing that must be 1718 - * on the second cache line. 1813 + * hot in the icache before we do the "tns" above. 1719 1814 */ 1720 1815 1721 1816 #ifdef CONFIG_SMP ··· 1746 1841 .endm 1747 1842 1748 1843 .Lcmpxchg32_tns: 1844 + /* 1845 + * This is the last instruction on the second cache line. 1846 + * The nop here loads the second line, then we fall through 1847 + * to the tns to load the third line before we take the lock. 1848 + */ 1849 + nop 1749 1850 cmpxchg_lock 32 1750 1851 1751 1852 /*
+1231
arch/tile/kernel/intvec_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * Linux interrupt vectors. 15 + */ 16 + 17 + #include <linux/linkage.h> 18 + #include <linux/errno.h> 19 + #include <linux/unistd.h> 20 + #include <asm/ptrace.h> 21 + #include <asm/thread_info.h> 22 + #include <asm/irqflags.h> 23 + #include <asm/asm-offsets.h> 24 + #include <asm/types.h> 25 + #include <hv/hypervisor.h> 26 + #include <arch/abi.h> 27 + #include <arch/interrupts.h> 28 + #include <arch/spr_def.h> 29 + 30 + #ifdef CONFIG_PREEMPT 31 + # error "No support for kernel preemption currently" 32 + #endif 33 + 34 + #define PTREGS_PTR(reg, ptreg) addli reg, sp, C_ABI_SAVE_AREA_SIZE + (ptreg) 35 + 36 + #define PTREGS_OFFSET_SYSCALL PTREGS_OFFSET_REG(TREG_SYSCALL_NR) 37 + 38 + 39 + .macro push_reg reg, ptr=sp, delta=-8 40 + { 41 + st \ptr, \reg 42 + addli \ptr, \ptr, \delta 43 + } 44 + .endm 45 + 46 + .macro pop_reg reg, ptr=sp, delta=8 47 + { 48 + ld \reg, \ptr 49 + addli \ptr, \ptr, \delta 50 + } 51 + .endm 52 + 53 + .macro pop_reg_zero reg, zreg, ptr=sp, delta=8 54 + { 55 + move \zreg, zero 56 + ld \reg, \ptr 57 + addi \ptr, \ptr, \delta 58 + } 59 + .endm 60 + 61 + .macro push_extra_callee_saves reg 62 + PTREGS_PTR(\reg, PTREGS_OFFSET_REG(51)) 63 + push_reg r51, \reg 64 + push_reg r50, \reg 65 + push_reg r49, \reg 66 + push_reg r48, \reg 67 + push_reg r47, \reg 68 + push_reg r46, \reg 69 + push_reg r45, \reg 70 + push_reg r44, \reg 71 + push_reg r43, \reg 72 + push_reg r42, \reg 73 + push_reg r41, \reg 74 + push_reg r40, \reg 75 + push_reg r39, \reg 76 + push_reg r38, \reg 77 + push_reg r37, \reg 78 + push_reg r36, \reg 79 + push_reg r35, \reg 80 + push_reg r34, \reg, PTREGS_OFFSET_BASE - PTREGS_OFFSET_REG(34) 81 + .endm 82 + 83 + .macro panic str 84 + .pushsection .rodata, "a" 85 + 1: 86 + .asciz "\str" 87 + .popsection 88 + { 89 + moveli r0, hw2_last(1b) 90 + } 91 + { 92 + shl16insli r0, r0, hw1(1b) 93 + } 94 + { 95 + shl16insli r0, r0, hw0(1b) 96 + jal panic 97 + } 98 + .endm 99 + 100 + 101 + #ifdef __COLLECT_LINKER_FEEDBACK__ 102 + .pushsection .text.intvec_feedback,"ax" 103 + intvec_feedback: 104 + .popsection 105 + #endif 106 + 107 + /* 108 + * Default interrupt handler. 109 + * 110 + * vecnum is where we'll put this code. 111 + * c_routine is the C routine we'll call. 112 + * 113 + * The C routine is passed two arguments: 114 + * - A pointer to the pt_regs state. 115 + * - The interrupt vector number. 116 + * 117 + * The "processing" argument specifies the code for processing 118 + * the interrupt. Defaults to "handle_interrupt". 119 + */ 120 + .macro int_hand vecnum, vecname, c_routine, processing=handle_interrupt 121 + .org (\vecnum << 8) 122 + intvec_\vecname: 123 + /* Temporarily save a register so we have somewhere to work. */ 124 + 125 + mtspr SPR_SYSTEM_SAVE_K_1, r0 126 + mfspr r0, SPR_EX_CONTEXT_K_1 127 + 128 + andi r0, r0, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */ 129 + 130 + .ifc \vecnum, INT_DOUBLE_FAULT 131 + /* 132 + * For double-faults from user-space, fall through to the normal 133 + * register save and stack setup path. Otherwise, it's the 134 + * hypervisor giving us one last chance to dump diagnostics, and we 135 + * branch to the kernel_double_fault routine to do so. 136 + */ 137 + beqz r0, 1f 138 + j _kernel_double_fault 139 + 1: 140 + .else 141 + /* 142 + * If we're coming from user-space, then set sp to the top of 143 + * the kernel stack. Otherwise, assume sp is already valid. 144 + */ 145 + { 146 + bnez r0, 0f 147 + move r0, sp 148 + } 149 + .endif 150 + 151 + .ifc \c_routine, do_page_fault 152 + /* 153 + * The page_fault handler may be downcalled directly by the 154 + * hypervisor even when Linux is running and has ICS set. 155 + * 156 + * In this case the contents of EX_CONTEXT_K_1 reflect the 157 + * previous fault and can't be relied on to choose whether or 158 + * not to reinitialize the stack pointer. So we add a test 159 + * to see whether SYSTEM_SAVE_K_2 has the high bit set, 160 + * and if so we don't reinitialize sp, since we must be coming 161 + * from Linux. (In fact the precise case is !(val & ~1), 162 + * but any Linux PC has to have the high bit set.) 163 + * 164 + * Note that the hypervisor *always* sets SYSTEM_SAVE_K_2 for 165 + * any path that turns into a downcall to one of our TLB handlers. 166 + * 167 + * FIXME: if we end up never using this path, perhaps we should 168 + * prevent the hypervisor from generating downcalls in this case. 169 + * The advantage of getting a downcall is we can panic in Linux. 170 + */ 171 + mfspr r0, SPR_SYSTEM_SAVE_K_2 172 + { 173 + bltz r0, 0f /* high bit in S_S_1_2 is for a PC to use */ 174 + move r0, sp 175 + } 176 + .endif 177 + 178 + 179 + /* 180 + * SYSTEM_SAVE_K_0 holds the cpu number in the low bits, and 181 + * the current stack top in the higher bits. So we recover 182 + * our stack top by just masking off the low bits, then 183 + * point sp at the top aligned address on the actual stack page. 184 + */ 185 + mfspr r0, SPR_SYSTEM_SAVE_K_0 186 + mm r0, zero, LOG2_THREAD_SIZE, 63 187 + 188 + 0: 189 + /* 190 + * Align the stack mod 64 so we can properly predict what 191 + * cache lines we need to write-hint to reduce memory fetch 192 + * latency as we enter the kernel. The layout of memory is 193 + * as follows, with cache line 0 at the lowest VA, and cache 194 + * line 8 just below the r0 value this "andi" computes. 195 + * Note that we never write to cache line 8, and we skip 196 + * cache lines 1-3 for syscalls. 197 + * 198 + * cache line 8: ptregs padding (two words) 199 + * cache line 7: sp, lr, pc, ex1, faultnum, orig_r0, flags, cmpexch 200 + * cache line 6: r46...r53 (tp) 201 + * cache line 5: r38...r45 202 + * cache line 4: r30...r37 203 + * cache line 3: r22...r29 204 + * cache line 2: r14...r21 205 + * cache line 1: r6...r13 206 + * cache line 0: 2 x frame, r0..r5 207 + */ 208 + andi r0, r0, -64 209 + 210 + /* 211 + * Push the first four registers on the stack, so that we can set 212 + * them to vector-unique values before we jump to the common code. 213 + * 214 + * Registers are pushed on the stack as a struct pt_regs, 215 + * with the sp initially just above the struct, and when we're 216 + * done, sp points to the base of the struct, minus 217 + * C_ABI_SAVE_AREA_SIZE, so we can directly jal to C code. 218 + * 219 + * This routine saves just the first four registers, plus the 220 + * stack context so we can do proper backtracing right away, 221 + * and defers to handle_interrupt to save the rest. 222 + * The backtracer needs pc, ex1, lr, sp, r52, and faultnum. 223 + */ 224 + addli r0, r0, PTREGS_OFFSET_LR - (PTREGS_SIZE + KSTK_PTREGS_GAP) 225 + wh64 r0 /* cache line 7 */ 226 + { 227 + st r0, lr 228 + addli r0, r0, PTREGS_OFFSET_SP - PTREGS_OFFSET_LR 229 + } 230 + { 231 + st r0, sp 232 + addli sp, r0, PTREGS_OFFSET_REG(52) - PTREGS_OFFSET_SP 233 + } 234 + wh64 sp /* cache line 6 */ 235 + { 236 + st sp, r52 237 + addli sp, sp, PTREGS_OFFSET_REG(1) - PTREGS_OFFSET_REG(52) 238 + } 239 + wh64 sp /* cache line 0 */ 240 + { 241 + st sp, r1 242 + addli sp, sp, PTREGS_OFFSET_REG(2) - PTREGS_OFFSET_REG(1) 243 + } 244 + { 245 + st sp, r2 246 + addli sp, sp, PTREGS_OFFSET_REG(3) - PTREGS_OFFSET_REG(2) 247 + } 248 + { 249 + st sp, r3 250 + addli sp, sp, PTREGS_OFFSET_PC - PTREGS_OFFSET_REG(3) 251 + } 252 + mfspr r0, SPR_EX_CONTEXT_K_0 253 + .ifc \processing,handle_syscall 254 + /* 255 + * Bump the saved PC by one bundle so that when we return, we won't 256 + * execute the same swint instruction again. We need to do this while 257 + * we're in the critical section. 258 + */ 259 + addi r0, r0, 8 260 + .endif 261 + { 262 + st sp, r0 263 + addli sp, sp, PTREGS_OFFSET_EX1 - PTREGS_OFFSET_PC 264 + } 265 + mfspr r0, SPR_EX_CONTEXT_K_1 266 + { 267 + st sp, r0 268 + addi sp, sp, PTREGS_OFFSET_FAULTNUM - PTREGS_OFFSET_EX1 269 + /* 270 + * Use r0 for syscalls so it's a temporary; use r1 for interrupts 271 + * so that it gets passed through unchanged to the handler routine. 272 + * Note that the .if conditional confusingly spans bundles. 273 + */ 274 + .ifc \processing,handle_syscall 275 + movei r0, \vecnum 276 + } 277 + { 278 + st sp, r0 279 + .else 280 + movei r1, \vecnum 281 + } 282 + { 283 + st sp, r1 284 + .endif 285 + addli sp, sp, PTREGS_OFFSET_REG(0) - PTREGS_OFFSET_FAULTNUM 286 + } 287 + mfspr r0, SPR_SYSTEM_SAVE_K_1 /* Original r0 */ 288 + { 289 + st sp, r0 290 + addi sp, sp, -PTREGS_OFFSET_REG(0) - 8 291 + } 292 + { 293 + st sp, zero /* write zero into "Next SP" frame pointer */ 294 + addi sp, sp, -8 /* leave SP pointing at bottom of frame */ 295 + } 296 + .ifc \processing,handle_syscall 297 + j handle_syscall 298 + .else 299 + /* Capture per-interrupt SPR context to registers. */ 300 + .ifc \c_routine, do_page_fault 301 + mfspr r2, SPR_SYSTEM_SAVE_K_3 /* address of page fault */ 302 + mfspr r3, SPR_SYSTEM_SAVE_K_2 /* info about page fault */ 303 + .else 304 + .ifc \vecnum, INT_ILL_TRANS 305 + mfspr r2, ILL_TRANS_REASON 306 + .else 307 + .ifc \vecnum, INT_DOUBLE_FAULT 308 + mfspr r2, SPR_SYSTEM_SAVE_K_2 /* double fault info from HV */ 309 + .else 310 + .ifc \c_routine, do_trap 311 + mfspr r2, GPV_REASON 312 + .else 313 + .ifc \c_routine, op_handle_perf_interrupt 314 + mfspr r2, PERF_COUNT_STS 315 + #if CHIP_HAS_AUX_PERF_COUNTERS() 316 + .else 317 + .ifc \c_routine, op_handle_aux_perf_interrupt 318 + mfspr r2, AUX_PERF_COUNT_STS 319 + .endif 320 + #endif 321 + .endif 322 + .endif 323 + .endif 324 + .endif 325 + .endif 326 + /* Put function pointer in r0 */ 327 + moveli r0, hw2_last(\c_routine) 328 + shl16insli r0, r0, hw1(\c_routine) 329 + { 330 + shl16insli r0, r0, hw0(\c_routine) 331 + j \processing 332 + } 333 + .endif 334 + ENDPROC(intvec_\vecname) 335 + 336 + #ifdef __COLLECT_LINKER_FEEDBACK__ 337 + .pushsection .text.intvec_feedback,"ax" 338 + .org (\vecnum << 5) 339 + FEEDBACK_ENTER_EXPLICIT(intvec_\vecname, .intrpt1, 1 << 8) 340 + jrp lr 341 + .popsection 342 + #endif 343 + 344 + .endm 345 + 346 + 347 + /* 348 + * Save the rest of the registers that we didn't save in the actual 349 + * vector itself. We can't use r0-r10 inclusive here. 350 + */ 351 + .macro finish_interrupt_save, function 352 + 353 + /* If it's a syscall, save a proper orig_r0, otherwise just zero. */ 354 + PTREGS_PTR(r52, PTREGS_OFFSET_ORIG_R0) 355 + { 356 + .ifc \function,handle_syscall 357 + st r52, r0 358 + .else 359 + st r52, zero 360 + .endif 361 + PTREGS_PTR(r52, PTREGS_OFFSET_TP) 362 + } 363 + st r52, tp 364 + { 365 + mfspr tp, CMPEXCH_VALUE 366 + PTREGS_PTR(r52, PTREGS_OFFSET_CMPEXCH) 367 + } 368 + 369 + /* 370 + * For ordinary syscalls, we save neither caller- nor callee- 371 + * save registers, since the syscall invoker doesn't expect the 372 + * caller-saves to be saved, and the called kernel functions will 373 + * take care of saving the callee-saves for us. 374 + * 375 + * For interrupts we save just the caller-save registers. Saving 376 + * them is required (since the "caller" can't save them). Again, 377 + * the called kernel functions will restore the callee-save 378 + * registers for us appropriately. 379 + * 380 + * On return, we normally restore nothing special for syscalls, 381 + * and just the caller-save registers for interrupts. 382 + * 383 + * However, there are some important caveats to all this: 384 + * 385 + * - We always save a few callee-save registers to give us 386 + * some scratchpad registers to carry across function calls. 387 + * 388 + * - fork/vfork/etc require us to save all the callee-save 389 + * registers, which we do in PTREGS_SYSCALL_ALL_REGS, below. 390 + * 391 + * - We always save r0..r5 and r10 for syscalls, since we need 392 + * to reload them a bit later for the actual kernel call, and 393 + * since we might need them for -ERESTARTNOINTR, etc. 394 + * 395 + * - Before invoking a signal handler, we save the unsaved 396 + * callee-save registers so they are visible to the 397 + * signal handler or any ptracer. 398 + * 399 + * - If the unsaved callee-save registers are modified, we set 400 + * a bit in pt_regs so we know to reload them from pt_regs 401 + * and not just rely on the kernel function unwinding. 402 + * (Done for ptrace register writes and SA_SIGINFO handler.) 403 + */ 404 + { 405 + st r52, tp 406 + PTREGS_PTR(r52, PTREGS_OFFSET_REG(33)) 407 + } 408 + wh64 r52 /* cache line 4 */ 409 + push_reg r33, r52 410 + push_reg r32, r52 411 + push_reg r31, r52 412 + .ifc \function,handle_syscall 413 + push_reg r30, r52, PTREGS_OFFSET_SYSCALL - PTREGS_OFFSET_REG(30) 414 + push_reg TREG_SYSCALL_NR_NAME, r52, \ 415 + PTREGS_OFFSET_REG(5) - PTREGS_OFFSET_SYSCALL 416 + .else 417 + 418 + push_reg r30, r52, PTREGS_OFFSET_REG(29) - PTREGS_OFFSET_REG(30) 419 + wh64 r52 /* cache line 3 */ 420 + push_reg r29, r52 421 + push_reg r28, r52 422 + push_reg r27, r52 423 + push_reg r26, r52 424 + push_reg r25, r52 425 + push_reg r24, r52 426 + push_reg r23, r52 427 + push_reg r22, r52 428 + wh64 r52 /* cache line 2 */ 429 + push_reg r21, r52 430 + push_reg r20, r52 431 + push_reg r19, r52 432 + push_reg r18, r52 433 + push_reg r17, r52 434 + push_reg r16, r52 435 + push_reg r15, r52 436 + push_reg r14, r52 437 + wh64 r52 /* cache line 1 */ 438 + push_reg r13, r52 439 + push_reg r12, r52 440 + push_reg r11, r52 441 + push_reg r10, r52 442 + push_reg r9, r52 443 + push_reg r8, r52 444 + push_reg r7, r52 445 + push_reg r6, r52 446 + 447 + .endif 448 + 449 + push_reg r5, r52 450 + st r52, r4 451 + 452 + /* Load tp with our per-cpu offset. */ 453 + #ifdef CONFIG_SMP 454 + { 455 + mfspr r20, SPR_SYSTEM_SAVE_K_0 456 + moveli r21, hw2_last(__per_cpu_offset) 457 + } 458 + { 459 + shl16insli r21, r21, hw1(__per_cpu_offset) 460 + bfextu r20, r20, 0, LOG2_THREAD_SIZE-1 461 + } 462 + shl16insli r21, r21, hw0(__per_cpu_offset) 463 + shl3add r20, r20, r21 464 + ld tp, r20 465 + #else 466 + move tp, zero 467 + #endif 468 + 469 + /* 470 + * If we will be returning to the kernel, we will need to 471 + * reset the interrupt masks to the state they had before. 472 + * Set DISABLE_IRQ in flags iff we came from PL1 with irqs disabled. 473 + */ 474 + mfspr r32, SPR_EX_CONTEXT_K_1 475 + { 476 + andi r32, r32, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */ 477 + PTREGS_PTR(r21, PTREGS_OFFSET_FLAGS) 478 + } 479 + beqzt r32, 1f /* zero if from user space */ 480 + IRQS_DISABLED(r32) /* zero if irqs enabled */ 481 + #if PT_FLAGS_DISABLE_IRQ != 1 482 + # error Value of IRQS_DISABLED used to set PT_FLAGS_DISABLE_IRQ; fix 483 + #endif 484 + 1: 485 + .ifnc \function,handle_syscall 486 + /* Record the fact that we saved the caller-save registers above. */ 487 + ori r32, r32, PT_FLAGS_CALLER_SAVES 488 + .endif 489 + st r21, r32 490 + 491 + #ifdef __COLLECT_LINKER_FEEDBACK__ 492 + /* 493 + * Notify the feedback routines that we were in the 494 + * appropriate fixed interrupt vector area. Note that we 495 + * still have ICS set at this point, so we can't invoke any 496 + * atomic operations or we will panic. The feedback 497 + * routines internally preserve r0..r10 and r30 up. 498 + */ 499 + .ifnc \function,handle_syscall 500 + shli r20, r1, 5 501 + .else 502 + moveli r20, INT_SWINT_1 << 5 503 + .endif 504 + moveli r21, hw2_last(intvec_feedback) 505 + shl16insli r21, r21, hw1(intvec_feedback) 506 + shl16insli r21, r21, hw0(intvec_feedback) 507 + add r20, r20, r21 508 + jalr r20 509 + 510 + /* And now notify the feedback routines that we are here. */ 511 + FEEDBACK_ENTER(\function) 512 + #endif 513 + 514 + /* 515 + * we've captured enough state to the stack (including in 516 + * particular our EX_CONTEXT state) that we can now release 517 + * the interrupt critical section and replace it with our 518 + * standard "interrupts disabled" mask value. This allows 519 + * synchronous interrupts (and profile interrupts) to punch 520 + * through from this point onwards. 521 + */ 522 + .ifc \function,handle_nmi 523 + IRQ_DISABLE_ALL(r20) 524 + .else 525 + IRQ_DISABLE(r20, r21) 526 + .endif 527 + mtspr INTERRUPT_CRITICAL_SECTION, zero 528 + 529 + /* 530 + * Prepare the first 256 stack bytes to be rapidly accessible 531 + * without having to fetch the background data. 532 + */ 533 + addi r52, sp, -64 534 + { 535 + wh64 r52 536 + addi r52, r52, -64 537 + } 538 + { 539 + wh64 r52 540 + addi r52, r52, -64 541 + } 542 + { 543 + wh64 r52 544 + addi r52, r52, -64 545 + } 546 + wh64 r52 547 + 548 + #ifdef CONFIG_TRACE_IRQFLAGS 549 + .ifnc \function,handle_nmi 550 + /* 551 + * We finally have enough state set up to notify the irq 552 + * tracing code that irqs were disabled on entry to the handler. 553 + * The TRACE_IRQS_OFF call clobbers registers r0-r29. 554 + * For syscalls, we already have the register state saved away 555 + * on the stack, so we don't bother to do any register saves here, 556 + * and later we pop the registers back off the kernel stack. 557 + * For interrupt handlers, save r0-r3 in callee-saved registers. 558 + */ 559 + .ifnc \function,handle_syscall 560 + { move r30, r0; move r31, r1 } 561 + { move r32, r2; move r33, r3 } 562 + .endif 563 + TRACE_IRQS_OFF 564 + .ifnc \function,handle_syscall 565 + { move r0, r30; move r1, r31 } 566 + { move r2, r32; move r3, r33 } 567 + .endif 568 + .endif 569 + #endif 570 + 571 + .endm 572 + 573 + /* 574 + * Redispatch a downcall. 575 + */ 576 + .macro dc_dispatch vecnum, vecname 577 + .org (\vecnum << 8) 578 + intvec_\vecname: 579 + j hv_downcall_dispatch 580 + ENDPROC(intvec_\vecname) 581 + .endm 582 + 583 + /* 584 + * Common code for most interrupts. The C function we're eventually 585 + * going to is in r0, and the faultnum is in r1; the original 586 + * values for those registers are on the stack. 587 + */ 588 + .pushsection .text.handle_interrupt,"ax" 589 + handle_interrupt: 590 + finish_interrupt_save handle_interrupt 591 + 592 + /* Jump to the C routine; it should enable irqs as soon as possible. */ 593 + { 594 + jalr r0 595 + PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 596 + } 597 + FEEDBACK_REENTER(handle_interrupt) 598 + { 599 + movei r30, 0 /* not an NMI */ 600 + j interrupt_return 601 + } 602 + STD_ENDPROC(handle_interrupt) 603 + 604 + /* 605 + * This routine takes a boolean in r30 indicating if this is an NMI. 606 + * If so, we also expect a boolean in r31 indicating whether to 607 + * re-enable the oprofile interrupts. 608 + */ 609 + STD_ENTRY(interrupt_return) 610 + /* If we're resuming to kernel space, don't check thread flags. */ 611 + { 612 + bnez r30, .Lrestore_all /* NMIs don't special-case user-space */ 613 + PTREGS_PTR(r29, PTREGS_OFFSET_EX1) 614 + } 615 + ld r29, r29 616 + andi r29, r29, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */ 617 + { 618 + beqzt r29, .Lresume_userspace 619 + PTREGS_PTR(r29, PTREGS_OFFSET_PC) 620 + } 621 + 622 + /* If we're resuming to _cpu_idle_nap, bump PC forward by 8. */ 623 + moveli r27, hw2_last(_cpu_idle_nap) 624 + { 625 + ld r28, r29 626 + shl16insli r27, r27, hw1(_cpu_idle_nap) 627 + } 628 + { 629 + shl16insli r27, r27, hw0(_cpu_idle_nap) 630 + } 631 + { 632 + cmpeq r27, r27, r28 633 + } 634 + { 635 + blbc r27, .Lrestore_all 636 + addi r28, r28, 8 637 + } 638 + st r29, r28 639 + j .Lrestore_all 640 + 641 + .Lresume_userspace: 642 + FEEDBACK_REENTER(interrupt_return) 643 + 644 + /* 645 + * Disable interrupts so as to make sure we don't 646 + * miss an interrupt that sets any of the thread flags (like 647 + * need_resched or sigpending) between sampling and the iret. 648 + * Routines like schedule() or do_signal() may re-enable 649 + * interrupts before returning. 650 + */ 651 + IRQ_DISABLE(r20, r21) 652 + TRACE_IRQS_OFF /* Note: clobbers registers r0-r29 */ 653 + 654 + /* Get base of stack in r32; note r30/31 are used as arguments here. */ 655 + GET_THREAD_INFO(r32) 656 + 657 + 658 + /* Check to see if there is any work to do before returning to user. */ 659 + { 660 + addi r29, r32, THREAD_INFO_FLAGS_OFFSET 661 + moveli r1, hw1_last(_TIF_ALLWORK_MASK) 662 + } 663 + { 664 + ld r29, r29 665 + shl16insli r1, r1, hw0(_TIF_ALLWORK_MASK) 666 + } 667 + and r1, r29, r1 668 + beqzt r1, .Lrestore_all 669 + 670 + /* 671 + * Make sure we have all the registers saved for signal 672 + * handling or single-step. Call out to C code to figure out 673 + * exactly what we need to do for each flag bit, then if 674 + * necessary, reload the flags and recheck. 675 + */ 676 + push_extra_callee_saves r0 677 + { 678 + PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 679 + jal do_work_pending 680 + } 681 + bnez r0, .Lresume_userspace 682 + 683 + /* 684 + * In the NMI case we 685 + * omit the call to single_process_check_nohz, which normally checks 686 + * to see if we should start or stop the scheduler tick, because 687 + * we can't call arbitrary Linux code from an NMI context. 688 + * We always call the homecache TLB deferral code to re-trigger 689 + * the deferral mechanism. 690 + * 691 + * The other chunk of responsibility this code has is to reset the 692 + * interrupt masks appropriately to reset irqs and NMIs. We have 693 + * to call TRACE_IRQS_OFF and TRACE_IRQS_ON to support all the 694 + * lockdep-type stuff, but we can't set ICS until afterwards, since 695 + * ICS can only be used in very tight chunks of code to avoid 696 + * tripping over various assertions that it is off. 697 + */ 698 + .Lrestore_all: 699 + PTREGS_PTR(r0, PTREGS_OFFSET_EX1) 700 + { 701 + ld r0, r0 702 + PTREGS_PTR(r32, PTREGS_OFFSET_FLAGS) 703 + } 704 + { 705 + andi r0, r0, SPR_EX_CONTEXT_1_1__PL_MASK 706 + ld r32, r32 707 + } 708 + bnez r0, 1f 709 + j 2f 710 + #if PT_FLAGS_DISABLE_IRQ != 1 711 + # error Assuming PT_FLAGS_DISABLE_IRQ == 1 so we can use blbct below 712 + #endif 713 + 1: blbct r32, 2f 714 + IRQ_DISABLE(r20,r21) 715 + TRACE_IRQS_OFF 716 + movei r0, 1 717 + mtspr INTERRUPT_CRITICAL_SECTION, r0 718 + beqzt r30, .Lrestore_regs 719 + j 3f 720 + 2: TRACE_IRQS_ON 721 + movei r0, 1 722 + mtspr INTERRUPT_CRITICAL_SECTION, r0 723 + IRQ_ENABLE(r20, r21) 724 + beqzt r30, .Lrestore_regs 725 + 3: 726 + 727 + 728 + /* 729 + * We now commit to returning from this interrupt, since we will be 730 + * doing things like setting EX_CONTEXT SPRs and unwinding the stack 731 + * frame. No calls should be made to any other code after this point. 732 + * This code should only be entered with ICS set. 733 + * r32 must still be set to ptregs.flags. 734 + * We launch loads to each cache line separately first, so we can 735 + * get some parallelism out of the memory subsystem. 736 + * We start zeroing caller-saved registers throughout, since 737 + * that will save some cycles if this turns out to be a syscall. 738 + */ 739 + .Lrestore_regs: 740 + FEEDBACK_REENTER(interrupt_return) /* called from elsewhere */ 741 + 742 + /* 743 + * Rotate so we have one high bit and one low bit to test. 744 + * - low bit says whether to restore all the callee-saved registers, 745 + * or just r30-r33, and r52 up. 746 + * - high bit (i.e. sign bit) says whether to restore all the 747 + * caller-saved registers, or just r0. 748 + */ 749 + #if PT_FLAGS_CALLER_SAVES != 2 || PT_FLAGS_RESTORE_REGS != 4 750 + # error Rotate trick does not work :-) 751 + #endif 752 + { 753 + rotli r20, r32, 62 754 + PTREGS_PTR(sp, PTREGS_OFFSET_REG(0)) 755 + } 756 + 757 + /* 758 + * Load cache lines 0, 4, 6 and 7, in that order, then use 759 + * the last loaded value, which makes it likely that the other 760 + * cache lines have also loaded, at which point we should be 761 + * able to safely read all the remaining words on those cache 762 + * lines without waiting for the memory subsystem. 763 + */ 764 + pop_reg r0, sp, PTREGS_OFFSET_REG(30) - PTREGS_OFFSET_REG(0) 765 + pop_reg r30, sp, PTREGS_OFFSET_REG(52) - PTREGS_OFFSET_REG(30) 766 + pop_reg_zero r52, r3, sp, PTREGS_OFFSET_CMPEXCH - PTREGS_OFFSET_REG(52) 767 + pop_reg_zero r21, r27, sp, PTREGS_OFFSET_EX1 - PTREGS_OFFSET_CMPEXCH 768 + pop_reg_zero lr, r2, sp, PTREGS_OFFSET_PC - PTREGS_OFFSET_EX1 769 + { 770 + mtspr CMPEXCH_VALUE, r21 771 + move r4, zero 772 + } 773 + pop_reg r21, sp, PTREGS_OFFSET_REG(31) - PTREGS_OFFSET_PC 774 + { 775 + mtspr SPR_EX_CONTEXT_K_1, lr 776 + andi lr, lr, SPR_EX_CONTEXT_1_1__PL_MASK /* mask off ICS */ 777 + } 778 + { 779 + mtspr SPR_EX_CONTEXT_K_0, r21 780 + move r5, zero 781 + } 782 + 783 + /* Restore callee-saveds that we actually use. */ 784 + pop_reg_zero r31, r6 785 + pop_reg_zero r32, r7 786 + pop_reg_zero r33, r8, sp, PTREGS_OFFSET_REG(29) - PTREGS_OFFSET_REG(33) 787 + 788 + /* 789 + * If we modified other callee-saveds, restore them now. 790 + * This is rare, but could be via ptrace or signal handler. 791 + */ 792 + { 793 + move r9, zero 794 + blbs r20, .Lrestore_callees 795 + } 796 + .Lcontinue_restore_regs: 797 + 798 + /* Check if we're returning from a syscall. */ 799 + { 800 + move r10, zero 801 + bltzt r20, 1f /* no, so go restore callee-save registers */ 802 + } 803 + 804 + /* 805 + * Check if we're returning to userspace. 806 + * Note that if we're not, we don't worry about zeroing everything. 807 + */ 808 + { 809 + addli sp, sp, PTREGS_OFFSET_LR - PTREGS_OFFSET_REG(29) 810 + bnez lr, .Lkernel_return 811 + } 812 + 813 + /* 814 + * On return from syscall, we've restored r0 from pt_regs, but we 815 + * clear the remainder of the caller-saved registers. We could 816 + * restore the syscall arguments, but there's not much point, 817 + * and it ensures user programs aren't trying to use the 818 + * caller-saves if we clear them, as well as avoiding leaking 819 + * kernel pointers into userspace. 820 + */ 821 + pop_reg_zero lr, r11, sp, PTREGS_OFFSET_TP - PTREGS_OFFSET_LR 822 + pop_reg_zero tp, r12, sp, PTREGS_OFFSET_SP - PTREGS_OFFSET_TP 823 + { 824 + ld sp, sp 825 + move r13, zero 826 + move r14, zero 827 + } 828 + { move r15, zero; move r16, zero } 829 + { move r17, zero; move r18, zero } 830 + { move r19, zero; move r20, zero } 831 + { move r21, zero; move r22, zero } 832 + { move r23, zero; move r24, zero } 833 + { move r25, zero; move r26, zero } 834 + 835 + /* Set r1 to errno if we are returning an error, otherwise zero. */ 836 + { 837 + moveli r29, 4096 838 + sub r1, zero, r0 839 + } 840 + { 841 + move r28, zero 842 + cmpltu r29, r1, r29 843 + } 844 + { 845 + mnz r1, r29, r1 846 + move r29, zero 847 + } 848 + iret 849 + 850 + /* 851 + * Not a syscall, so restore caller-saved registers. 852 + * First kick off loads for cache lines 1-3, which we're touching 853 + * for the first time here. 854 + */ 855 + .align 64 856 + 1: pop_reg r29, sp, PTREGS_OFFSET_REG(21) - PTREGS_OFFSET_REG(29) 857 + pop_reg r21, sp, PTREGS_OFFSET_REG(13) - PTREGS_OFFSET_REG(21) 858 + pop_reg r13, sp, PTREGS_OFFSET_REG(1) - PTREGS_OFFSET_REG(13) 859 + pop_reg r1 860 + pop_reg r2 861 + pop_reg r3 862 + pop_reg r4 863 + pop_reg r5 864 + pop_reg r6 865 + pop_reg r7 866 + pop_reg r8 867 + pop_reg r9 868 + pop_reg r10 869 + pop_reg r11 870 + pop_reg r12, sp, 16 871 + /* r13 already restored above */ 872 + pop_reg r14 873 + pop_reg r15 874 + pop_reg r16 875 + pop_reg r17 876 + pop_reg r18 877 + pop_reg r19 878 + pop_reg r20, sp, 16 879 + /* r21 already restored above */ 880 + pop_reg r22 881 + pop_reg r23 882 + pop_reg r24 883 + pop_reg r25 884 + pop_reg r26 885 + pop_reg r27 886 + pop_reg r28, sp, PTREGS_OFFSET_LR - PTREGS_OFFSET_REG(28) 887 + /* r29 already restored above */ 888 + bnez lr, .Lkernel_return 889 + pop_reg lr, sp, PTREGS_OFFSET_TP - PTREGS_OFFSET_LR 890 + pop_reg tp, sp, PTREGS_OFFSET_SP - PTREGS_OFFSET_TP 891 + ld sp, sp 892 + iret 893 + 894 + /* 895 + * We can't restore tp when in kernel mode, since a thread might 896 + * have migrated from another cpu and brought a stale tp value. 897 + */ 898 + .Lkernel_return: 899 + pop_reg lr, sp, PTREGS_OFFSET_SP - PTREGS_OFFSET_LR 900 + ld sp, sp 901 + iret 902 + 903 + /* Restore callee-saved registers from r34 to r51. */ 904 + .Lrestore_callees: 905 + addli sp, sp, PTREGS_OFFSET_REG(34) - PTREGS_OFFSET_REG(29) 906 + pop_reg r34 907 + pop_reg r35 908 + pop_reg r36 909 + pop_reg r37 910 + pop_reg r38 911 + pop_reg r39 912 + pop_reg r40 913 + pop_reg r41 914 + pop_reg r42 915 + pop_reg r43 916 + pop_reg r44 917 + pop_reg r45 918 + pop_reg r46 919 + pop_reg r47 920 + pop_reg r48 921 + pop_reg r49 922 + pop_reg r50 923 + pop_reg r51, sp, PTREGS_OFFSET_REG(29) - PTREGS_OFFSET_REG(51) 924 + j .Lcontinue_restore_regs 925 + STD_ENDPROC(interrupt_return) 926 + 927 + /* 928 + * "NMI" interrupts mask ALL interrupts before calling the 929 + * handler, and don't check thread flags, etc., on the way 930 + * back out. In general, the only things we do here for NMIs 931 + * are register save/restore and dataplane kernel-TLB management. 932 + * We don't (for example) deal with start/stop of the sched tick. 933 + */ 934 + .pushsection .text.handle_nmi,"ax" 935 + handle_nmi: 936 + finish_interrupt_save handle_nmi 937 + { 938 + jalr r0 939 + PTREGS_PTR(r0, PTREGS_OFFSET_BASE) 940 + } 941 + FEEDBACK_REENTER(handle_nmi) 942 + { 943 + movei r30, 1 944 + move r31, r0 945 + } 946 + j interrupt_return 947 + STD_ENDPROC(handle_nmi) 948 + 949 + /* 950 + * Parallel code for syscalls to handle_interrupt. 951 + */ 952 + .pushsection .text.handle_syscall,"ax" 953 + handle_syscall: 954 + finish_interrupt_save handle_syscall 955 + 956 + /* Enable irqs. */ 957 + TRACE_IRQS_ON 958 + IRQ_ENABLE(r20, r21) 959 + 960 + /* Bump the counter for syscalls made on this tile. */ 961 + moveli r20, hw2_last(irq_stat + IRQ_CPUSTAT_SYSCALL_COUNT_OFFSET) 962 + shl16insli r20, r20, hw1(irq_stat + IRQ_CPUSTAT_SYSCALL_COUNT_OFFSET) 963 + shl16insli r20, r20, hw0(irq_stat + IRQ_CPUSTAT_SYSCALL_COUNT_OFFSET) 964 + add r20, r20, tp 965 + ld4s r21, r20 966 + addi r21, r21, 1 967 + st4 r20, r21 968 + 969 + /* Trace syscalls, if requested. */ 970 + GET_THREAD_INFO(r31) 971 + addi r31, r31, THREAD_INFO_FLAGS_OFFSET 972 + ld r30, r31 973 + andi r30, r30, _TIF_SYSCALL_TRACE 974 + { 975 + addi r30, r31, THREAD_INFO_STATUS_OFFSET - THREAD_INFO_FLAGS_OFFSET 976 + beqzt r30, .Lrestore_syscall_regs 977 + } 978 + jal do_syscall_trace 979 + FEEDBACK_REENTER(handle_syscall) 980 + 981 + /* 982 + * We always reload our registers from the stack at this 983 + * point. They might be valid, if we didn't build with 984 + * TRACE_IRQFLAGS, and this isn't a dataplane tile, and we're not 985 + * doing syscall tracing, but there are enough cases now that it 986 + * seems simplest just to do the reload unconditionally. 987 + */ 988 + .Lrestore_syscall_regs: 989 + { 990 + ld r30, r30 991 + PTREGS_PTR(r11, PTREGS_OFFSET_REG(0)) 992 + } 993 + pop_reg r0, r11 994 + pop_reg r1, r11 995 + pop_reg r2, r11 996 + pop_reg r3, r11 997 + pop_reg r4, r11 998 + pop_reg r5, r11, PTREGS_OFFSET_SYSCALL - PTREGS_OFFSET_REG(5) 999 + { 1000 + ld TREG_SYSCALL_NR_NAME, r11 1001 + moveli r21, __NR_syscalls 1002 + } 1003 + 1004 + /* Ensure that the syscall number is within the legal range. */ 1005 + { 1006 + moveli r20, hw2(sys_call_table) 1007 + blbs r30, .Lcompat_syscall 1008 + } 1009 + { 1010 + cmpltu r21, TREG_SYSCALL_NR_NAME, r21 1011 + shl16insli r20, r20, hw1(sys_call_table) 1012 + } 1013 + { 1014 + blbc r21, .Linvalid_syscall 1015 + shl16insli r20, r20, hw0(sys_call_table) 1016 + } 1017 + .Lload_syscall_pointer: 1018 + shl3add r20, TREG_SYSCALL_NR_NAME, r20 1019 + ld r20, r20 1020 + 1021 + /* Jump to syscall handler. */ 1022 + jalr r20 1023 + .Lhandle_syscall_link: /* value of "lr" after "jalr r20" above */ 1024 + 1025 + /* 1026 + * Write our r0 onto the stack so it gets restored instead 1027 + * of whatever the user had there before. 1028 + * In compat mode, sign-extend r0 before storing it. 1029 + */ 1030 + { 1031 + PTREGS_PTR(r29, PTREGS_OFFSET_REG(0)) 1032 + blbct r30, 1f 1033 + } 1034 + addxi r0, r0, 0 1035 + 1: st r29, r0 1036 + 1037 + .Lsyscall_sigreturn_skip: 1038 + FEEDBACK_REENTER(handle_syscall) 1039 + 1040 + /* Do syscall trace again, if requested. */ 1041 + ld r30, r31 1042 + andi r30, r30, _TIF_SYSCALL_TRACE 1043 + beqzt r30, 1f 1044 + jal do_syscall_trace 1045 + FEEDBACK_REENTER(handle_syscall) 1046 + 1: j .Lresume_userspace /* jump into middle of interrupt_return */ 1047 + 1048 + .Lcompat_syscall: 1049 + /* 1050 + * Load the base of the compat syscall table in r20, and 1051 + * range-check the syscall number (duplicated from 64-bit path). 1052 + * Sign-extend all the user's passed arguments to make them consistent. 1053 + * Also save the original "r(n)" values away in "r(11+n)" in 1054 + * case the syscall table entry wants to validate them. 1055 + */ 1056 + moveli r20, hw2(compat_sys_call_table) 1057 + { 1058 + cmpltu r21, TREG_SYSCALL_NR_NAME, r21 1059 + shl16insli r20, r20, hw1(compat_sys_call_table) 1060 + } 1061 + { 1062 + blbc r21, .Linvalid_syscall 1063 + shl16insli r20, r20, hw0(compat_sys_call_table) 1064 + } 1065 + { move r11, r0; addxi r0, r0, 0 } 1066 + { move r12, r1; addxi r1, r1, 0 } 1067 + { move r13, r2; addxi r2, r2, 0 } 1068 + { move r14, r3; addxi r3, r3, 0 } 1069 + { move r15, r4; addxi r4, r4, 0 } 1070 + { move r16, r5; addxi r5, r5, 0 } 1071 + j .Lload_syscall_pointer 1072 + 1073 + .Linvalid_syscall: 1074 + /* Report an invalid syscall back to the user program */ 1075 + { 1076 + PTREGS_PTR(r29, PTREGS_OFFSET_REG(0)) 1077 + movei r28, -ENOSYS 1078 + } 1079 + st r29, r28 1080 + j .Lresume_userspace /* jump into middle of interrupt_return */ 1081 + STD_ENDPROC(handle_syscall) 1082 + 1083 + /* Return the address for oprofile to suppress in backtraces. */ 1084 + STD_ENTRY_SECTION(handle_syscall_link_address, .text.handle_syscall) 1085 + lnk r0 1086 + { 1087 + addli r0, r0, .Lhandle_syscall_link - . 1088 + jrp lr 1089 + } 1090 + STD_ENDPROC(handle_syscall_link_address) 1091 + 1092 + STD_ENTRY(ret_from_fork) 1093 + jal sim_notify_fork 1094 + jal schedule_tail 1095 + FEEDBACK_REENTER(ret_from_fork) 1096 + j .Lresume_userspace 1097 + STD_ENDPROC(ret_from_fork) 1098 + 1099 + /* Various stub interrupt handlers and syscall handlers */ 1100 + 1101 + STD_ENTRY_LOCAL(_kernel_double_fault) 1102 + mfspr r1, SPR_EX_CONTEXT_K_0 1103 + move r2, lr 1104 + move r3, sp 1105 + move r4, r52 1106 + addi sp, sp, -C_ABI_SAVE_AREA_SIZE 1107 + j kernel_double_fault 1108 + STD_ENDPROC(_kernel_double_fault) 1109 + 1110 + STD_ENTRY_LOCAL(bad_intr) 1111 + mfspr r2, SPR_EX_CONTEXT_K_0 1112 + panic "Unhandled interrupt %#x: PC %#lx" 1113 + STD_ENDPROC(bad_intr) 1114 + 1115 + /* Put address of pt_regs in reg and jump. */ 1116 + #define PTREGS_SYSCALL(x, reg) \ 1117 + STD_ENTRY(_##x); \ 1118 + { \ 1119 + PTREGS_PTR(reg, PTREGS_OFFSET_BASE); \ 1120 + j x \ 1121 + }; \ 1122 + STD_ENDPROC(_##x) 1123 + 1124 + /* 1125 + * Special-case sigreturn to not write r0 to the stack on return. 1126 + * This is technically more efficient, but it also avoids difficulties 1127 + * in the 64-bit OS when handling 32-bit compat code, since we must not 1128 + * sign-extend r0 for the sigreturn return-value case. 1129 + */ 1130 + #define PTREGS_SYSCALL_SIGRETURN(x, reg) \ 1131 + STD_ENTRY(_##x); \ 1132 + addli lr, lr, .Lsyscall_sigreturn_skip - .Lhandle_syscall_link; \ 1133 + { \ 1134 + PTREGS_PTR(reg, PTREGS_OFFSET_BASE); \ 1135 + j x \ 1136 + }; \ 1137 + STD_ENDPROC(_##x) 1138 + 1139 + PTREGS_SYSCALL(sys_execve, r3) 1140 + PTREGS_SYSCALL(sys_sigaltstack, r2) 1141 + PTREGS_SYSCALL_SIGRETURN(sys_rt_sigreturn, r0) 1142 + #ifdef CONFIG_COMPAT 1143 + PTREGS_SYSCALL(compat_sys_execve, r3) 1144 + PTREGS_SYSCALL(compat_sys_sigaltstack, r2) 1145 + PTREGS_SYSCALL_SIGRETURN(compat_sys_rt_sigreturn, r0) 1146 + #endif 1147 + 1148 + /* Save additional callee-saves to pt_regs, put address in r4 and jump. */ 1149 + STD_ENTRY(_sys_clone) 1150 + push_extra_callee_saves r4 1151 + j sys_clone 1152 + STD_ENDPROC(_sys_clone) 1153 + 1154 + /* The single-step support may need to read all the registers. */ 1155 + int_unalign: 1156 + push_extra_callee_saves r0 1157 + j do_trap 1158 + 1159 + /* Include .intrpt1 array of interrupt vectors */ 1160 + .section ".intrpt1", "ax" 1161 + 1162 + #define op_handle_perf_interrupt bad_intr 1163 + #define op_handle_aux_perf_interrupt bad_intr 1164 + 1165 + #ifndef CONFIG_HARDWALL 1166 + #define do_hardwall_trap bad_intr 1167 + #endif 1168 + 1169 + int_hand INT_MEM_ERROR, MEM_ERROR, bad_intr 1170 + int_hand INT_SINGLE_STEP_3, SINGLE_STEP_3, bad_intr 1171 + #if CONFIG_KERNEL_PL == 2 1172 + int_hand INT_SINGLE_STEP_2, SINGLE_STEP_2, gx_singlestep_handle 1173 + int_hand INT_SINGLE_STEP_1, SINGLE_STEP_1, bad_intr 1174 + #else 1175 + int_hand INT_SINGLE_STEP_2, SINGLE_STEP_2, bad_intr 1176 + int_hand INT_SINGLE_STEP_1, SINGLE_STEP_1, gx_singlestep_handle 1177 + #endif 1178 + int_hand INT_SINGLE_STEP_0, SINGLE_STEP_0, bad_intr 1179 + int_hand INT_IDN_COMPLETE, IDN_COMPLETE, bad_intr 1180 + int_hand INT_UDN_COMPLETE, UDN_COMPLETE, bad_intr 1181 + int_hand INT_ITLB_MISS, ITLB_MISS, do_page_fault 1182 + int_hand INT_ILL, ILL, do_trap 1183 + int_hand INT_GPV, GPV, do_trap 1184 + int_hand INT_IDN_ACCESS, IDN_ACCESS, do_trap 1185 + int_hand INT_UDN_ACCESS, UDN_ACCESS, do_trap 1186 + int_hand INT_SWINT_3, SWINT_3, do_trap 1187 + int_hand INT_SWINT_2, SWINT_2, do_trap 1188 + int_hand INT_SWINT_1, SWINT_1, SYSCALL, handle_syscall 1189 + int_hand INT_SWINT_0, SWINT_0, do_trap 1190 + int_hand INT_ILL_TRANS, ILL_TRANS, do_trap 1191 + int_hand INT_UNALIGN_DATA, UNALIGN_DATA, int_unalign 1192 + int_hand INT_DTLB_MISS, DTLB_MISS, do_page_fault 1193 + int_hand INT_DTLB_ACCESS, DTLB_ACCESS, do_page_fault 1194 + int_hand INT_IDN_FIREWALL, IDN_FIREWALL, bad_intr 1195 + int_hand INT_UDN_FIREWALL, UDN_FIREWALL, do_hardwall_trap 1196 + int_hand INT_TILE_TIMER, TILE_TIMER, do_timer_interrupt 1197 + int_hand INT_IDN_TIMER, IDN_TIMER, bad_intr 1198 + int_hand INT_UDN_TIMER, UDN_TIMER, bad_intr 1199 + int_hand INT_IDN_AVAIL, IDN_AVAIL, bad_intr 1200 + int_hand INT_UDN_AVAIL, UDN_AVAIL, bad_intr 1201 + int_hand INT_IPI_3, IPI_3, bad_intr 1202 + #if CONFIG_KERNEL_PL == 2 1203 + int_hand INT_IPI_2, IPI_2, tile_dev_intr 1204 + int_hand INT_IPI_1, IPI_1, bad_intr 1205 + #else 1206 + int_hand INT_IPI_2, IPI_2, bad_intr 1207 + int_hand INT_IPI_1, IPI_1, tile_dev_intr 1208 + #endif 1209 + int_hand INT_IPI_0, IPI_0, bad_intr 1210 + int_hand INT_PERF_COUNT, PERF_COUNT, \ 1211 + op_handle_perf_interrupt, handle_nmi 1212 + int_hand INT_AUX_PERF_COUNT, AUX_PERF_COUNT, \ 1213 + op_handle_perf_interrupt, handle_nmi 1214 + int_hand INT_INTCTRL_3, INTCTRL_3, bad_intr 1215 + #if CONFIG_KERNEL_PL == 2 1216 + dc_dispatch INT_INTCTRL_2, INTCTRL_2 1217 + int_hand INT_INTCTRL_1, INTCTRL_1, bad_intr 1218 + #else 1219 + int_hand INT_INTCTRL_2, INTCTRL_2, bad_intr 1220 + dc_dispatch INT_INTCTRL_1, INTCTRL_1 1221 + #endif 1222 + int_hand INT_INTCTRL_0, INTCTRL_0, bad_intr 1223 + int_hand INT_MESSAGE_RCV_DWNCL, MESSAGE_RCV_DWNCL, \ 1224 + hv_message_intr 1225 + int_hand INT_DEV_INTR_DWNCL, DEV_INTR_DWNCL, bad_intr 1226 + int_hand INT_I_ASID, I_ASID, bad_intr 1227 + int_hand INT_D_ASID, D_ASID, bad_intr 1228 + int_hand INT_DOUBLE_FAULT, DOUBLE_FAULT, do_trap 1229 + 1230 + /* Synthetic interrupt delivered only by the simulator */ 1231 + int_hand INT_BREAKPOINT, BREAKPOINT, do_breakpoint
+7 -1
arch/tile/kernel/module.c
··· 22 22 #include <linux/kernel.h> 23 23 #include <asm/opcode-tile.h> 24 24 #include <asm/pgtable.h> 25 + #include <asm/homecache.h> 25 26 26 27 #ifdef __tilegx__ 27 28 # define Elf_Rela Elf64_Rela ··· 87 86 void module_free(struct module *mod, void *module_region) 88 87 { 89 88 vfree(module_region); 89 + 90 + /* Globally flush the L1 icache. */ 91 + flush_remote(0, HV_FLUSH_EVICT_L1I, cpu_online_mask, 92 + 0, 0, 0, NULL, NULL, 0); 93 + 90 94 /* 91 - * FIXME: If module_region == mod->init_region, trim exception 95 + * FIXME: If module_region == mod->module_init, trim exception 92 96 * table entries. 93 97 */ 94 98 }
+1 -1
arch/tile/kernel/pci-dma.c
··· 244 244 * dma_alloc_noncoherent() returns non-cacheable memory, so there's no 245 245 * need to do any flushing here. 246 246 */ 247 - void dma_cache_sync(void *vaddr, size_t size, 247 + void dma_cache_sync(struct device *dev, void *vaddr, size_t size, 248 248 enum dma_data_direction direction) 249 249 { 250 250 }
+118 -92
arch/tile/kernel/pci.c
··· 1 1 /* 2 - * Copyright 2010 Tilera Corporation. All Rights Reserved. 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 3 * 4 4 * This program is free software; you can redistribute it and/or 5 5 * modify it under the terms of the GNU General Public License ··· 59 59 60 60 static struct pci_controller controllers[TILE_NUM_PCIE]; 61 61 static int num_controllers; 62 + static int pci_scan_flags[TILE_NUM_PCIE]; 62 63 63 64 static struct pci_ops tile_cfg_ops; 64 65 ··· 80 79 * controller_id is the controller number, config type is 0 or 1 for 81 80 * config0 or config1 operations. 82 81 */ 83 - static int __init tile_pcie_open(int controller_id, int config_type) 82 + static int __devinit tile_pcie_open(int controller_id, int config_type) 84 83 { 85 84 char filename[32]; 86 85 int fd; ··· 96 95 /* 97 96 * Get the IRQ numbers from the HV and set up the handlers for them. 98 97 */ 99 - static int __init tile_init_irqs(int controller_id, 98 + static int __devinit tile_init_irqs(int controller_id, 100 99 struct pci_controller *controller) 101 100 { 102 101 char filename[32]; ··· 140 139 * 141 140 * Returns the number of controllers discovered. 142 141 */ 143 - int __init tile_pci_init(void) 142 + int __devinit tile_pci_init(void) 144 143 { 145 144 int i; 146 145 147 146 pr_info("PCI: Searching for controllers...\n"); 148 147 148 + /* Re-init number of PCIe controllers to support hot-plug feature. */ 149 + num_controllers = 0; 150 + 149 151 /* Do any configuration we need before using the PCIe */ 150 152 151 153 for (i = 0; i < TILE_NUM_PCIE; i++) { 152 - int hv_cfg_fd0 = -1; 153 - int hv_cfg_fd1 = -1; 154 - int hv_mem_fd = -1; 155 - char name[32]; 156 - struct pci_controller *controller; 157 - 158 154 /* 159 - * Open the fd to the HV. If it fails then this 160 - * device doesn't exist. 155 + * To see whether we need a real config op based on 156 + * the results of pcibios_init(), to support PCIe hot-plug. 161 157 */ 162 - hv_cfg_fd0 = tile_pcie_open(i, 0); 163 - if (hv_cfg_fd0 < 0) 158 + if (pci_scan_flags[i] == 0) { 159 + int hv_cfg_fd0 = -1; 160 + int hv_cfg_fd1 = -1; 161 + int hv_mem_fd = -1; 162 + char name[32]; 163 + struct pci_controller *controller; 164 + 165 + /* 166 + * Open the fd to the HV. If it fails then this 167 + * device doesn't exist. 168 + */ 169 + hv_cfg_fd0 = tile_pcie_open(i, 0); 170 + if (hv_cfg_fd0 < 0) 171 + continue; 172 + hv_cfg_fd1 = tile_pcie_open(i, 1); 173 + if (hv_cfg_fd1 < 0) { 174 + pr_err("PCI: Couldn't open config fd to HV " 175 + "for controller %d\n", i); 176 + goto err_cont; 177 + } 178 + 179 + sprintf(name, "pcie/%d/mem", i); 180 + hv_mem_fd = hv_dev_open((HV_VirtAddr)name, 0); 181 + if (hv_mem_fd < 0) { 182 + pr_err("PCI: Could not open mem fd to HV!\n"); 183 + goto err_cont; 184 + } 185 + 186 + pr_info("PCI: Found PCI controller #%d\n", i); 187 + 188 + controller = &controllers[i]; 189 + 190 + controller->index = i; 191 + controller->hv_cfg_fd[0] = hv_cfg_fd0; 192 + controller->hv_cfg_fd[1] = hv_cfg_fd1; 193 + controller->hv_mem_fd = hv_mem_fd; 194 + controller->first_busno = 0; 195 + controller->last_busno = 0xff; 196 + controller->ops = &tile_cfg_ops; 197 + 198 + num_controllers++; 164 199 continue; 165 - hv_cfg_fd1 = tile_pcie_open(i, 1); 166 - if (hv_cfg_fd1 < 0) { 167 - pr_err("PCI: Couldn't open config fd to HV " 168 - "for controller %d\n", i); 169 - goto err_cont; 170 - } 171 - 172 - sprintf(name, "pcie/%d/mem", i); 173 - hv_mem_fd = hv_dev_open((HV_VirtAddr)name, 0); 174 - if (hv_mem_fd < 0) { 175 - pr_err("PCI: Could not open mem fd to HV!\n"); 176 - goto err_cont; 177 - } 178 - 179 - pr_info("PCI: Found PCI controller #%d\n", i); 180 - 181 - controller = &controllers[num_controllers]; 182 - 183 - if (tile_init_irqs(i, controller)) { 184 - pr_err("PCI: Could not initialize " 185 - "IRQs, aborting.\n"); 186 - goto err_cont; 187 - } 188 - 189 - controller->index = num_controllers; 190 - controller->hv_cfg_fd[0] = hv_cfg_fd0; 191 - controller->hv_cfg_fd[1] = hv_cfg_fd1; 192 - controller->hv_mem_fd = hv_mem_fd; 193 - controller->first_busno = 0; 194 - controller->last_busno = 0xff; 195 - controller->ops = &tile_cfg_ops; 196 - 197 - num_controllers++; 198 - continue; 199 200 200 201 err_cont: 201 - if (hv_cfg_fd0 >= 0) 202 - hv_dev_close(hv_cfg_fd0); 203 - if (hv_cfg_fd1 >= 0) 204 - hv_dev_close(hv_cfg_fd1); 205 - if (hv_mem_fd >= 0) 206 - hv_dev_close(hv_mem_fd); 207 - continue; 202 + if (hv_cfg_fd0 >= 0) 203 + hv_dev_close(hv_cfg_fd0); 204 + if (hv_cfg_fd1 >= 0) 205 + hv_dev_close(hv_cfg_fd1); 206 + if (hv_mem_fd >= 0) 207 + hv_dev_close(hv_mem_fd); 208 + continue; 209 + } 208 210 } 209 211 210 212 /* ··· 236 232 } 237 233 238 234 239 - static void __init fixup_read_and_payload_sizes(void) 235 + static void __devinit fixup_read_and_payload_sizes(void) 240 236 { 241 237 struct pci_dev *dev = NULL; 242 238 int smallest_max_payload = 0x1; /* Tile maxes out at 256 bytes. */ ··· 286 282 * The controllers have been set up by the time we get here, by a call to 287 283 * tile_pci_init. 288 284 */ 289 - static int __init pcibios_init(void) 285 + int __devinit pcibios_init(void) 290 286 { 291 287 int i; 292 288 ··· 300 296 mdelay(250); 301 297 302 298 /* Scan all of the recorded PCI controllers. */ 303 - for (i = 0; i < num_controllers; i++) { 304 - struct pci_controller *controller = &controllers[i]; 305 - struct pci_bus *bus; 306 - 307 - pr_info("PCI: initializing controller #%d\n", i); 308 - 299 + for (i = 0; i < TILE_NUM_PCIE; i++) { 309 300 /* 310 - * This comes from the generic Linux PCI driver. 311 - * 312 - * It reads the PCI tree for this bus into the Linux 313 - * data structures. 314 - * 315 - * This is inlined in linux/pci.h and calls into 316 - * pci_scan_bus_parented() in probe.c. 301 + * Do real pcibios init ops if the controller is initialized 302 + * by tile_pci_init() successfully and not initialized by 303 + * pcibios_init() yet to support PCIe hot-plug. 317 304 */ 318 - bus = pci_scan_bus(0, controller->ops, controller); 319 - controller->root_bus = bus; 320 - controller->last_busno = bus->subordinate; 305 + if (pci_scan_flags[i] == 0 && controllers[i].ops != NULL) { 306 + struct pci_controller *controller = &controllers[i]; 307 + struct pci_bus *bus; 321 308 309 + if (tile_init_irqs(i, controller)) { 310 + pr_err("PCI: Could not initialize IRQs\n"); 311 + continue; 312 + } 313 + 314 + pr_info("PCI: initializing controller #%d\n", i); 315 + 316 + /* 317 + * This comes from the generic Linux PCI driver. 318 + * 319 + * It reads the PCI tree for this bus into the Linux 320 + * data structures. 321 + * 322 + * This is inlined in linux/pci.h and calls into 323 + * pci_scan_bus_parented() in probe.c. 324 + */ 325 + bus = pci_scan_bus(0, controller->ops, controller); 326 + controller->root_bus = bus; 327 + controller->last_busno = bus->subordinate; 328 + } 322 329 } 323 330 324 331 /* Do machine dependent PCI interrupt routing */ ··· 341 326 * It allocates all of the resources (I/O memory, etc) 342 327 * associated with the devices read in above. 343 328 */ 344 - 345 329 pci_assign_unassigned_resources(); 346 330 347 331 /* Configure the max_read_size and max_payload_size values. */ 348 332 fixup_read_and_payload_sizes(); 349 333 350 334 /* Record the I/O resources in the PCI controller structure. */ 351 - for (i = 0; i < num_controllers; i++) { 352 - struct pci_bus *root_bus = controllers[i].root_bus; 353 - struct pci_bus *next_bus; 354 - struct pci_dev *dev; 335 + for (i = 0; i < TILE_NUM_PCIE; i++) { 336 + /* 337 + * Do real pcibios init ops if the controller is initialized 338 + * by tile_pci_init() successfully and not initialized by 339 + * pcibios_init() yet to support PCIe hot-plug. 340 + */ 341 + if (pci_scan_flags[i] == 0 && controllers[i].ops != NULL) { 342 + struct pci_bus *root_bus = controllers[i].root_bus; 343 + struct pci_bus *next_bus; 344 + struct pci_dev *dev; 355 345 356 - list_for_each_entry(dev, &root_bus->devices, bus_list) { 357 - /* Find the PCI host controller, ie. the 1st bridge. */ 358 - if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && 359 - (PCI_SLOT(dev->devfn) == 0)) { 360 - next_bus = dev->subordinate; 361 - controllers[i].mem_resources[0] = 362 - *next_bus->resource[0]; 363 - controllers[i].mem_resources[1] = 364 - *next_bus->resource[1]; 365 - controllers[i].mem_resources[2] = 366 - *next_bus->resource[2]; 346 + list_for_each_entry(dev, &root_bus->devices, bus_list) { 347 + /* 348 + * Find the PCI host controller, ie. the 1st 349 + * bridge. 350 + */ 351 + if ((dev->class >> 8) == PCI_CLASS_BRIDGE_PCI && 352 + (PCI_SLOT(dev->devfn) == 0)) { 353 + next_bus = dev->subordinate; 354 + controllers[i].mem_resources[0] = 355 + *next_bus->resource[0]; 356 + controllers[i].mem_resources[1] = 357 + *next_bus->resource[1]; 358 + controllers[i].mem_resources[2] = 359 + *next_bus->resource[2]; 367 360 368 - break; 361 + /* Setup flags. */ 362 + pci_scan_flags[i] = 1; 363 + 364 + break; 365 + } 369 366 } 370 367 } 371 - 372 368 } 373 369 374 370 return 0; ··· 407 381 /* 408 382 * This is called from the generic Linux layer. 409 383 */ 410 - void __init pcibios_update_irq(struct pci_dev *dev, int irq) 384 + void __devinit pcibios_update_irq(struct pci_dev *dev, int irq) 411 385 { 412 386 pci_write_config_byte(dev, PCI_INTERRUPT_LINE, irq); 413 387 }
+50 -2
arch/tile/kernel/process.c
··· 25 25 #include <linux/hardirq.h> 26 26 #include <linux/syscalls.h> 27 27 #include <linux/kernel.h> 28 + #include <linux/tracehook.h> 29 + #include <linux/signal.h> 28 30 #include <asm/system.h> 29 31 #include <asm/stack.h> 30 32 #include <asm/homecache.h> 31 33 #include <asm/syscalls.h> 34 + #include <asm/traps.h> 32 35 #ifdef CONFIG_HARDWALL 33 36 #include <asm/hardwall.h> 34 37 #endif ··· 549 546 return __switch_to(prev, next, next_current_ksp0(next)); 550 547 } 551 548 549 + /* 550 + * This routine is called on return from interrupt if any of the 551 + * TIF_WORK_MASK flags are set in thread_info->flags. It is 552 + * entered with interrupts disabled so we don't miss an event 553 + * that modified the thread_info flags. If any flag is set, we 554 + * handle it and return, and the calling assembly code will 555 + * re-disable interrupts, reload the thread flags, and call back 556 + * if more flags need to be handled. 557 + * 558 + * We return whether we need to check the thread_info flags again 559 + * or not. Note that we don't clear TIF_SINGLESTEP here, so it's 560 + * important that it be tested last, and then claim that we don't 561 + * need to recheck the flags. 562 + */ 563 + int do_work_pending(struct pt_regs *regs, u32 thread_info_flags) 564 + { 565 + if (thread_info_flags & _TIF_NEED_RESCHED) { 566 + schedule(); 567 + return 1; 568 + } 569 + #if CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC() 570 + if (thread_info_flags & _TIF_ASYNC_TLB) { 571 + do_async_page_fault(regs); 572 + return 1; 573 + } 574 + #endif 575 + if (thread_info_flags & _TIF_SIGPENDING) { 576 + do_signal(regs); 577 + return 1; 578 + } 579 + if (thread_info_flags & _TIF_NOTIFY_RESUME) { 580 + clear_thread_flag(TIF_NOTIFY_RESUME); 581 + tracehook_notify_resume(regs); 582 + if (current->replacement_session_keyring) 583 + key_replace_session_keyring(); 584 + return 1; 585 + } 586 + if (thread_info_flags & _TIF_SINGLESTEP) { 587 + if ((regs->ex1 & SPR_EX_CONTEXT_1_1__PL_MASK) == 0) 588 + single_step_once(regs); 589 + return 0; 590 + } 591 + panic("work_pending: bad flags %#x\n", thread_info_flags); 592 + } 593 + 552 594 /* Note there is an implicit fifth argument if (clone_flags & CLONE_SETTLS). */ 553 595 SYSCALL_DEFINE5(clone, unsigned long, clone_flags, unsigned long, newsp, 554 596 void __user *, parent_tidptr, void __user *, child_tidptr, ··· 630 582 631 583 #ifdef CONFIG_COMPAT 632 584 long compat_sys_execve(const char __user *path, 633 - const compat_uptr_t __user *argv, 634 - const compat_uptr_t __user *envp, 585 + compat_uptr_t __user *argv, 586 + compat_uptr_t __user *envp, 635 587 struct pt_regs *regs) 636 588 { 637 589 long error;
+145
arch/tile/kernel/regs_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/linkage.h> 16 + #include <asm/system.h> 17 + #include <asm/ptrace.h> 18 + #include <asm/asm-offsets.h> 19 + #include <arch/spr_def.h> 20 + #include <asm/processor.h> 21 + 22 + /* 23 + * See <asm/system.h>; called with prev and next task_struct pointers. 24 + * "prev" is returned in r0 for _switch_to and also for ret_from_fork. 25 + * 26 + * We want to save pc/sp in "prev", and get the new pc/sp from "next". 27 + * We also need to save all the callee-saved registers on the stack. 28 + * 29 + * Intel enables/disables access to the hardware cycle counter in 30 + * seccomp (secure computing) environments if necessary, based on 31 + * has_secure_computing(). We might want to do this at some point, 32 + * though it would require virtualizing the other SPRs under WORLD_ACCESS. 33 + * 34 + * Since we're saving to the stack, we omit sp from this list. 35 + * And for parallels with other architectures, we save lr separately, 36 + * in the thread_struct itself (as the "pc" field). 37 + * 38 + * This code also needs to be aligned with process.c copy_thread() 39 + */ 40 + 41 + #if CALLEE_SAVED_REGS_COUNT != 24 42 + # error Mismatch between <asm/system.h> and kernel/entry.S 43 + #endif 44 + #define FRAME_SIZE ((2 + CALLEE_SAVED_REGS_COUNT) * 8) 45 + 46 + #define SAVE_REG(r) { st r12, r; addi r12, r12, 8 } 47 + #define LOAD_REG(r) { ld r, r12; addi r12, r12, 8 } 48 + #define FOR_EACH_CALLEE_SAVED_REG(f) \ 49 + f(r30); f(r31); \ 50 + f(r32); f(r33); f(r34); f(r35); f(r36); f(r37); f(r38); f(r39); \ 51 + f(r40); f(r41); f(r42); f(r43); f(r44); f(r45); f(r46); f(r47); \ 52 + f(r48); f(r49); f(r50); f(r51); f(r52); 53 + 54 + STD_ENTRY_SECTION(__switch_to, .sched.text) 55 + { 56 + move r10, sp 57 + st sp, lr 58 + } 59 + { 60 + addli r11, sp, -FRAME_SIZE + 8 61 + addli sp, sp, -FRAME_SIZE 62 + } 63 + { 64 + st r11, r10 65 + addli r4, r1, TASK_STRUCT_THREAD_KSP_OFFSET 66 + } 67 + { 68 + ld r13, r4 /* Load new sp to a temp register early. */ 69 + addi r12, sp, 16 70 + } 71 + FOR_EACH_CALLEE_SAVED_REG(SAVE_REG) 72 + addli r3, r0, TASK_STRUCT_THREAD_KSP_OFFSET 73 + { 74 + st r3, sp 75 + addli r3, r0, TASK_STRUCT_THREAD_PC_OFFSET 76 + } 77 + { 78 + st r3, lr 79 + addli r4, r1, TASK_STRUCT_THREAD_PC_OFFSET 80 + } 81 + { 82 + ld lr, r4 83 + addi r12, r13, 16 84 + } 85 + { 86 + /* Update sp and ksp0 simultaneously to avoid backtracer warnings. */ 87 + move sp, r13 88 + mtspr SPR_SYSTEM_SAVE_K_0, r2 89 + } 90 + FOR_EACH_CALLEE_SAVED_REG(LOAD_REG) 91 + .L__switch_to_pc: 92 + { 93 + addli sp, sp, FRAME_SIZE 94 + jrp lr /* r0 is still valid here, so return it */ 95 + } 96 + STD_ENDPROC(__switch_to) 97 + 98 + /* Return a suitable address for the backtracer for suspended threads */ 99 + STD_ENTRY_SECTION(get_switch_to_pc, .sched.text) 100 + lnk r0 101 + { 102 + addli r0, r0, .L__switch_to_pc - . 103 + jrp lr 104 + } 105 + STD_ENDPROC(get_switch_to_pc) 106 + 107 + STD_ENTRY(get_pt_regs) 108 + .irp reg, r0, r1, r2, r3, r4, r5, r6, r7, \ 109 + r8, r9, r10, r11, r12, r13, r14, r15, \ 110 + r16, r17, r18, r19, r20, r21, r22, r23, \ 111 + r24, r25, r26, r27, r28, r29, r30, r31, \ 112 + r32, r33, r34, r35, r36, r37, r38, r39, \ 113 + r40, r41, r42, r43, r44, r45, r46, r47, \ 114 + r48, r49, r50, r51, r52, tp, sp 115 + { 116 + st r0, \reg 117 + addi r0, r0, 8 118 + } 119 + .endr 120 + { 121 + st r0, lr 122 + addi r0, r0, PTREGS_OFFSET_PC - PTREGS_OFFSET_LR 123 + } 124 + lnk r1 125 + { 126 + st r0, r1 127 + addi r0, r0, PTREGS_OFFSET_EX1 - PTREGS_OFFSET_PC 128 + } 129 + mfspr r1, INTERRUPT_CRITICAL_SECTION 130 + shli r1, r1, SPR_EX_CONTEXT_1_1__ICS_SHIFT 131 + ori r1, r1, KERNEL_PL 132 + { 133 + st r0, r1 134 + addi r0, r0, PTREGS_OFFSET_FAULTNUM - PTREGS_OFFSET_EX1 135 + } 136 + { 137 + st r0, zero /* clear faultnum */ 138 + addi r0, r0, PTREGS_OFFSET_ORIG_R0 - PTREGS_OFFSET_FAULTNUM 139 + } 140 + { 141 + st r0, zero /* clear orig_r0 */ 142 + addli r0, r0, -PTREGS_OFFSET_ORIG_R0 /* restore r0 to base */ 143 + } 144 + jrp lr 145 + STD_ENDPROC(get_pt_regs)
+6
arch/tile/kernel/setup.c
··· 912 912 #endif 913 913 } 914 914 915 + #ifdef CONFIG_BLK_DEV_INITRD 916 + 915 917 static int __initdata set_initramfs_file; 916 918 static char __initdata initramfs_file[128] = "initramfs.cpio.gz"; 917 919 ··· 970 968 { 971 969 free_bootmem(__pa(begin), end - begin); 972 970 } 971 + 972 + #else 973 + static inline void load_hv_initrd(void) {} 974 + #endif /* CONFIG_BLK_DEV_INITRD */ 973 975 974 976 static void __init validate_hv(void) 975 977 {
+124 -4
arch/tile/kernel/signal.c
··· 39 39 40 40 #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) 41 41 42 - 43 42 SYSCALL_DEFINE3(sigaltstack, const stack_t __user *, uss, 44 43 stack_t __user *, uoss, struct pt_regs *, regs) 45 44 { ··· 77 78 return err; 78 79 } 79 80 81 + void signal_fault(const char *type, struct pt_regs *regs, 82 + void __user *frame, int sig) 83 + { 84 + trace_unhandled_signal(type, regs, (unsigned long)frame, SIGSEGV); 85 + force_sigsegv(sig, current); 86 + } 87 + 80 88 /* The assembly shim for this function arranges to ignore the return value. */ 81 89 SYSCALL_DEFINE1(rt_sigreturn, struct pt_regs *, regs) 82 90 { ··· 111 105 return 0; 112 106 113 107 badframe: 114 - force_sig(SIGSEGV, current); 108 + signal_fault("bad sigreturn frame", regs, frame, 0); 115 109 return 0; 116 110 } 117 111 ··· 237 231 return 0; 238 232 239 233 give_sigsegv: 240 - force_sigsegv(sig, current); 234 + signal_fault("bad setup frame", regs, frame, sig); 241 235 return -EFAULT; 242 236 } 243 237 ··· 250 244 struct pt_regs *regs) 251 245 { 252 246 int ret; 253 - 254 247 255 248 /* Are we from a system call? */ 256 249 if (regs->faultnum == INT_SWINT_1) { ··· 367 362 done: 368 363 /* Avoid double syscall restart if there are nested signals. */ 369 364 regs->faultnum = INT_SWINT_1_SIGRETURN; 365 + } 366 + 367 + int show_unhandled_signals = 1; 368 + 369 + static int __init crashinfo(char *str) 370 + { 371 + unsigned long val; 372 + const char *word; 373 + 374 + if (*str == '\0') 375 + val = 2; 376 + else if (*str != '=' || strict_strtoul(++str, 0, &val) != 0) 377 + return 0; 378 + show_unhandled_signals = val; 379 + switch (show_unhandled_signals) { 380 + case 0: 381 + word = "No"; 382 + break; 383 + case 1: 384 + word = "One-line"; 385 + break; 386 + default: 387 + word = "Detailed"; 388 + break; 389 + } 390 + pr_info("%s crash reports will be generated on the console\n", word); 391 + return 1; 392 + } 393 + __setup("crashinfo", crashinfo); 394 + 395 + static void dump_mem(void __user *address) 396 + { 397 + void __user *addr; 398 + enum { region_size = 256, bytes_per_line = 16 }; 399 + int i, j, k; 400 + int found_readable_mem = 0; 401 + 402 + pr_err("\n"); 403 + if (!access_ok(VERIFY_READ, address, 1)) { 404 + pr_err("Not dumping at address 0x%lx (kernel address)\n", 405 + (unsigned long)address); 406 + return; 407 + } 408 + 409 + addr = (void __user *) 410 + (((unsigned long)address & -bytes_per_line) - region_size/2); 411 + if (addr > address) 412 + addr = NULL; 413 + for (i = 0; i < region_size; 414 + addr += bytes_per_line, i += bytes_per_line) { 415 + unsigned char buf[bytes_per_line]; 416 + char line[100]; 417 + if (copy_from_user(buf, addr, bytes_per_line)) 418 + continue; 419 + if (!found_readable_mem) { 420 + pr_err("Dumping memory around address 0x%lx:\n", 421 + (unsigned long)address); 422 + found_readable_mem = 1; 423 + } 424 + j = sprintf(line, REGFMT":", (unsigned long)addr); 425 + for (k = 0; k < bytes_per_line; ++k) 426 + j += sprintf(&line[j], " %02x", buf[k]); 427 + pr_err("%s\n", line); 428 + } 429 + if (!found_readable_mem) 430 + pr_err("No readable memory around address 0x%lx\n", 431 + (unsigned long)address); 432 + } 433 + 434 + void trace_unhandled_signal(const char *type, struct pt_regs *regs, 435 + unsigned long address, int sig) 436 + { 437 + struct task_struct *tsk = current; 438 + 439 + if (show_unhandled_signals == 0) 440 + return; 441 + 442 + /* If the signal is handled, don't show it here. */ 443 + if (!is_global_init(tsk)) { 444 + void __user *handler = 445 + tsk->sighand->action[sig-1].sa.sa_handler; 446 + if (handler != SIG_IGN && handler != SIG_DFL) 447 + return; 448 + } 449 + 450 + /* Rate-limit the one-line output, not the detailed output. */ 451 + if (show_unhandled_signals <= 1 && !printk_ratelimit()) 452 + return; 453 + 454 + printk("%s%s[%d]: %s at %lx pc "REGFMT" signal %d", 455 + task_pid_nr(tsk) > 1 ? KERN_INFO : KERN_EMERG, 456 + tsk->comm, task_pid_nr(tsk), type, address, regs->pc, sig); 457 + 458 + print_vma_addr(KERN_CONT " in ", regs->pc); 459 + 460 + printk(KERN_CONT "\n"); 461 + 462 + if (show_unhandled_signals > 1) { 463 + switch (sig) { 464 + case SIGILL: 465 + case SIGFPE: 466 + case SIGSEGV: 467 + case SIGBUS: 468 + pr_err("User crash: signal %d," 469 + " trap %ld, address 0x%lx\n", 470 + sig, regs->faultnum, address); 471 + show_regs(regs); 472 + dump_mem((void __user *)address); 473 + break; 474 + default: 475 + pr_err("User crash: signal %d, trap %ld\n", 476 + sig, regs->faultnum); 477 + break; 478 + } 479 + } 370 480 }
+12
arch/tile/kernel/single_step.c
··· 186 186 .si_code = SEGV_MAPERR, 187 187 .si_addr = addr 188 188 }; 189 + trace_unhandled_signal("segfault", regs, 190 + (unsigned long)addr, SIGSEGV); 189 191 force_sig_info(info.si_signo, &info, current); 190 192 return (tile_bundle_bits) 0; 191 193 } ··· 198 196 .si_code = BUS_ADRALN, 199 197 .si_addr = addr 200 198 }; 199 + trace_unhandled_signal("unaligned trap", regs, 200 + (unsigned long)addr, SIGBUS); 201 201 force_sig_info(info.si_signo, &info, current); 202 202 return (tile_bundle_bits) 0; 203 203 } ··· 321 317 " j .\n" 322 318 " .popsection\n" 323 319 ); 320 + 321 + /* 322 + * Enable interrupts here to allow touching userspace and the like. 323 + * The callers expect this: do_trap() already has interrupts 324 + * enabled, and do_work_pending() handles functions that enable 325 + * interrupts internally. 326 + */ 327 + local_irq_enable(); 324 328 325 329 if (state == NULL) { 326 330 /* allocate a page of writable, executable memory */
+7 -7
arch/tile/kernel/stack.c
··· 36 36 #define KBT_LOOP 3 /* Backtrace entered a loop */ 37 37 38 38 /* Is address on the specified kernel stack? */ 39 - static int in_kernel_stack(struct KBacktraceIterator *kbt, VirtualAddress sp) 39 + static int in_kernel_stack(struct KBacktraceIterator *kbt, unsigned long sp) 40 40 { 41 41 ulong kstack_base = (ulong) kbt->task->stack; 42 42 if (kstack_base == 0) /* corrupt task pointer; just follow stack... */ ··· 45 45 } 46 46 47 47 /* Is address valid for reading? */ 48 - static int valid_address(struct KBacktraceIterator *kbt, VirtualAddress address) 48 + static int valid_address(struct KBacktraceIterator *kbt, unsigned long address) 49 49 { 50 50 HV_PTE *l1_pgtable = kbt->pgtable; 51 51 HV_PTE *l2_pgtable; ··· 97 97 } 98 98 99 99 /* Callback for backtracer; basically a glorified memcpy */ 100 - static bool read_memory_func(void *result, VirtualAddress address, 100 + static bool read_memory_func(void *result, unsigned long address, 101 101 unsigned int size, void *vkbt) 102 102 { 103 103 int retval; ··· 124 124 { 125 125 const char *fault = NULL; /* happy compiler */ 126 126 char fault_buf[64]; 127 - VirtualAddress sp = kbt->it.sp; 127 + unsigned long sp = kbt->it.sp; 128 128 struct pt_regs *p; 129 129 130 130 if (!in_kernel_stack(kbt, sp)) ··· 163 163 } 164 164 165 165 /* Is the pc pointing to a sigreturn trampoline? */ 166 - static int is_sigreturn(VirtualAddress pc) 166 + static int is_sigreturn(unsigned long pc) 167 167 { 168 168 return (pc == VDSO_BASE); 169 169 } ··· 260 260 void KBacktraceIterator_init(struct KBacktraceIterator *kbt, 261 261 struct task_struct *t, struct pt_regs *regs) 262 262 { 263 - VirtualAddress pc, lr, sp, r52; 263 + unsigned long pc, lr, sp, r52; 264 264 int is_current; 265 265 266 266 /* ··· 331 331 332 332 void KBacktraceIterator_next(struct KBacktraceIterator *kbt) 333 333 { 334 - VirtualAddress old_pc = kbt->it.pc, old_sp = kbt->it.sp; 334 + unsigned long old_pc = kbt->it.pc, old_sp = kbt->it.sp; 335 335 kbt->new_context = 0; 336 336 if (!backtrace_next(&kbt->it) && !KBacktraceIterator_restart(kbt)) { 337 337 kbt->end = KBT_DONE;
-9
arch/tile/kernel/sys.c
··· 56 56 return sys_readahead(fd, ((loff_t)offset_hi << 32) | offset_lo, count); 57 57 } 58 58 59 - long sys32_fadvise64(int fd, u32 offset_lo, u32 offset_hi, 60 - u32 len, int advice) 61 - { 62 - return sys_fadvise64_64(fd, ((loff_t)offset_hi << 32) | offset_lo, 63 - len, advice); 64 - } 65 - 66 59 int sys32_fadvise64_64(int fd, u32 offset_lo, u32 offset_hi, 67 60 u32 len_lo, u32 len_hi, int advice) 68 61 { ··· 96 103 97 104 #ifndef __tilegx__ 98 105 /* See comments at the top of the file. */ 99 - #define sys_fadvise64 sys32_fadvise64 100 106 #define sys_fadvise64_64 sys32_fadvise64_64 101 107 #define sys_readahead sys32_readahead 102 - #define sys_sync_file_range sys_sync_file_range2 103 108 #endif 104 109 105 110 /* Call the trampolines to manage pt_regs where necessary. */
+6 -5
arch/tile/kernel/tile-desc_32.c
··· 2413 2413 2414 2414 2415 2415 2416 - /* Given a set of bundle bits and the lookup FSM for a specific pipe, 2417 - * returns which instruction the bundle contains in that pipe. 2416 + /* Given a set of bundle bits and a specific pipe, returns which 2417 + * instruction the bundle contains in that pipe. 2418 2418 */ 2419 - static const struct tile_opcode * 2420 - find_opcode(tile_bundle_bits bits, const unsigned short *table) 2419 + const struct tile_opcode * 2420 + find_opcode(tile_bundle_bits bits, tile_pipeline pipe) 2421 2421 { 2422 + const unsigned short *table = tile_bundle_decoder_fsms[pipe]; 2422 2423 int index = 0; 2423 2424 2424 2425 while (1) ··· 2466 2465 int i; 2467 2466 2468 2467 d = &decoded[num_instructions++]; 2469 - opc = find_opcode (bits, tile_bundle_decoder_fsms[pipe]); 2468 + opc = find_opcode (bits, (tile_pipeline)pipe); 2470 2469 d->opcode = opc; 2471 2470 2472 2471 /* Decode each operand, sign extending, etc. as appropriate. */
+2200
arch/tile/kernel/tile-desc_64.c
··· 1 + /* This define is BFD_RELOC_##x for real bfd, or -1 for everyone else. */ 2 + #define BFD_RELOC(x) -1 3 + 4 + /* Special registers. */ 5 + #define TREG_LR 55 6 + #define TREG_SN 56 7 + #define TREG_ZERO 63 8 + 9 + /* FIXME: Rename this. */ 10 + #include <asm/opcode-tile_64.h> 11 + 12 + #include <linux/stddef.h> 13 + 14 + const struct tilegx_opcode tilegx_opcodes[334] = 15 + { 16 + { "bpt", TILEGX_OPC_BPT, 0x2, 0, TREG_ZERO, 0, 17 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 18 + }, 19 + { "info", TILEGX_OPC_INFO, 0xf, 1, TREG_ZERO, 1, 20 + { { 0 }, { 1 }, { 2 }, { 3 }, { 0, } }, 21 + }, 22 + { "infol", TILEGX_OPC_INFOL, 0x3, 1, TREG_ZERO, 1, 23 + { { 4 }, { 5 }, { 0, }, { 0, }, { 0, } }, 24 + }, 25 + { "move", TILEGX_OPC_MOVE, 0xf, 2, TREG_ZERO, 1, 26 + { { 6, 7 }, { 8, 9 }, { 10, 11 }, { 12, 13 }, { 0, } }, 27 + }, 28 + { "movei", TILEGX_OPC_MOVEI, 0xf, 2, TREG_ZERO, 1, 29 + { { 6, 0 }, { 8, 1 }, { 10, 2 }, { 12, 3 }, { 0, } }, 30 + }, 31 + { "moveli", TILEGX_OPC_MOVELI, 0x3, 2, TREG_ZERO, 1, 32 + { { 6, 4 }, { 8, 5 }, { 0, }, { 0, }, { 0, } }, 33 + }, 34 + { "prefetch", TILEGX_OPC_PREFETCH, 0x12, 1, TREG_ZERO, 1, 35 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 36 + }, 37 + { "prefetch_add_l1", TILEGX_OPC_PREFETCH_ADD_L1, 0x2, 2, TREG_ZERO, 1, 38 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 39 + }, 40 + { "prefetch_add_l1_fault", TILEGX_OPC_PREFETCH_ADD_L1_FAULT, 0x2, 2, TREG_ZERO, 1, 41 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 42 + }, 43 + { "prefetch_add_l2", TILEGX_OPC_PREFETCH_ADD_L2, 0x2, 2, TREG_ZERO, 1, 44 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 45 + }, 46 + { "prefetch_add_l2_fault", TILEGX_OPC_PREFETCH_ADD_L2_FAULT, 0x2, 2, TREG_ZERO, 1, 47 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 48 + }, 49 + { "prefetch_add_l3", TILEGX_OPC_PREFETCH_ADD_L3, 0x2, 2, TREG_ZERO, 1, 50 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 51 + }, 52 + { "prefetch_add_l3_fault", TILEGX_OPC_PREFETCH_ADD_L3_FAULT, 0x2, 2, TREG_ZERO, 1, 53 + { { 0, }, { 15, 1 }, { 0, }, { 0, }, { 0, } }, 54 + }, 55 + { "prefetch_l1", TILEGX_OPC_PREFETCH_L1, 0x12, 1, TREG_ZERO, 1, 56 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 57 + }, 58 + { "prefetch_l1_fault", TILEGX_OPC_PREFETCH_L1_FAULT, 0x12, 1, TREG_ZERO, 1, 59 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 60 + }, 61 + { "prefetch_l2", TILEGX_OPC_PREFETCH_L2, 0x12, 1, TREG_ZERO, 1, 62 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 63 + }, 64 + { "prefetch_l2_fault", TILEGX_OPC_PREFETCH_L2_FAULT, 0x12, 1, TREG_ZERO, 1, 65 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 66 + }, 67 + { "prefetch_l3", TILEGX_OPC_PREFETCH_L3, 0x12, 1, TREG_ZERO, 1, 68 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 69 + }, 70 + { "prefetch_l3_fault", TILEGX_OPC_PREFETCH_L3_FAULT, 0x12, 1, TREG_ZERO, 1, 71 + { { 0, }, { 9 }, { 0, }, { 0, }, { 14 } }, 72 + }, 73 + { "raise", TILEGX_OPC_RAISE, 0x2, 0, TREG_ZERO, 1, 74 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 75 + }, 76 + { "add", TILEGX_OPC_ADD, 0xf, 3, TREG_ZERO, 1, 77 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 78 + }, 79 + { "addi", TILEGX_OPC_ADDI, 0xf, 3, TREG_ZERO, 1, 80 + { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } }, 81 + }, 82 + { "addli", TILEGX_OPC_ADDLI, 0x3, 3, TREG_ZERO, 1, 83 + { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } }, 84 + }, 85 + { "addx", TILEGX_OPC_ADDX, 0xf, 3, TREG_ZERO, 1, 86 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 87 + }, 88 + { "addxi", TILEGX_OPC_ADDXI, 0xf, 3, TREG_ZERO, 1, 89 + { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } }, 90 + }, 91 + { "addxli", TILEGX_OPC_ADDXLI, 0x3, 3, TREG_ZERO, 1, 92 + { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } }, 93 + }, 94 + { "addxsc", TILEGX_OPC_ADDXSC, 0x3, 3, TREG_ZERO, 1, 95 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 96 + }, 97 + { "and", TILEGX_OPC_AND, 0xf, 3, TREG_ZERO, 1, 98 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 99 + }, 100 + { "andi", TILEGX_OPC_ANDI, 0xf, 3, TREG_ZERO, 1, 101 + { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } }, 102 + }, 103 + { "beqz", TILEGX_OPC_BEQZ, 0x2, 2, TREG_ZERO, 1, 104 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 105 + }, 106 + { "beqzt", TILEGX_OPC_BEQZT, 0x2, 2, TREG_ZERO, 1, 107 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 108 + }, 109 + { "bfexts", TILEGX_OPC_BFEXTS, 0x1, 4, TREG_ZERO, 1, 110 + { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } }, 111 + }, 112 + { "bfextu", TILEGX_OPC_BFEXTU, 0x1, 4, TREG_ZERO, 1, 113 + { { 6, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } }, 114 + }, 115 + { "bfins", TILEGX_OPC_BFINS, 0x1, 4, TREG_ZERO, 1, 116 + { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } }, 117 + }, 118 + { "bgez", TILEGX_OPC_BGEZ, 0x2, 2, TREG_ZERO, 1, 119 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 120 + }, 121 + { "bgezt", TILEGX_OPC_BGEZT, 0x2, 2, TREG_ZERO, 1, 122 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 123 + }, 124 + { "bgtz", TILEGX_OPC_BGTZ, 0x2, 2, TREG_ZERO, 1, 125 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 126 + }, 127 + { "bgtzt", TILEGX_OPC_BGTZT, 0x2, 2, TREG_ZERO, 1, 128 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 129 + }, 130 + { "blbc", TILEGX_OPC_BLBC, 0x2, 2, TREG_ZERO, 1, 131 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 132 + }, 133 + { "blbct", TILEGX_OPC_BLBCT, 0x2, 2, TREG_ZERO, 1, 134 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 135 + }, 136 + { "blbs", TILEGX_OPC_BLBS, 0x2, 2, TREG_ZERO, 1, 137 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 138 + }, 139 + { "blbst", TILEGX_OPC_BLBST, 0x2, 2, TREG_ZERO, 1, 140 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 141 + }, 142 + { "blez", TILEGX_OPC_BLEZ, 0x2, 2, TREG_ZERO, 1, 143 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 144 + }, 145 + { "blezt", TILEGX_OPC_BLEZT, 0x2, 2, TREG_ZERO, 1, 146 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 147 + }, 148 + { "bltz", TILEGX_OPC_BLTZ, 0x2, 2, TREG_ZERO, 1, 149 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 150 + }, 151 + { "bltzt", TILEGX_OPC_BLTZT, 0x2, 2, TREG_ZERO, 1, 152 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 153 + }, 154 + { "bnez", TILEGX_OPC_BNEZ, 0x2, 2, TREG_ZERO, 1, 155 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 156 + }, 157 + { "bnezt", TILEGX_OPC_BNEZT, 0x2, 2, TREG_ZERO, 1, 158 + { { 0, }, { 9, 20 }, { 0, }, { 0, }, { 0, } }, 159 + }, 160 + { "clz", TILEGX_OPC_CLZ, 0x5, 2, TREG_ZERO, 1, 161 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 162 + }, 163 + { "cmoveqz", TILEGX_OPC_CMOVEQZ, 0x5, 3, TREG_ZERO, 1, 164 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 165 + }, 166 + { "cmovnez", TILEGX_OPC_CMOVNEZ, 0x5, 3, TREG_ZERO, 1, 167 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 168 + }, 169 + { "cmpeq", TILEGX_OPC_CMPEQ, 0xf, 3, TREG_ZERO, 1, 170 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 171 + }, 172 + { "cmpeqi", TILEGX_OPC_CMPEQI, 0xf, 3, TREG_ZERO, 1, 173 + { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } }, 174 + }, 175 + { "cmpexch", TILEGX_OPC_CMPEXCH, 0x2, 3, TREG_ZERO, 1, 176 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 177 + }, 178 + { "cmpexch4", TILEGX_OPC_CMPEXCH4, 0x2, 3, TREG_ZERO, 1, 179 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 180 + }, 181 + { "cmples", TILEGX_OPC_CMPLES, 0xf, 3, TREG_ZERO, 1, 182 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 183 + }, 184 + { "cmpleu", TILEGX_OPC_CMPLEU, 0xf, 3, TREG_ZERO, 1, 185 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 186 + }, 187 + { "cmplts", TILEGX_OPC_CMPLTS, 0xf, 3, TREG_ZERO, 1, 188 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 189 + }, 190 + { "cmpltsi", TILEGX_OPC_CMPLTSI, 0xf, 3, TREG_ZERO, 1, 191 + { { 6, 7, 0 }, { 8, 9, 1 }, { 10, 11, 2 }, { 12, 13, 3 }, { 0, } }, 192 + }, 193 + { "cmpltu", TILEGX_OPC_CMPLTU, 0xf, 3, TREG_ZERO, 1, 194 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 195 + }, 196 + { "cmpltui", TILEGX_OPC_CMPLTUI, 0x3, 3, TREG_ZERO, 1, 197 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 198 + }, 199 + { "cmpne", TILEGX_OPC_CMPNE, 0xf, 3, TREG_ZERO, 1, 200 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 201 + }, 202 + { "cmul", TILEGX_OPC_CMUL, 0x1, 3, TREG_ZERO, 1, 203 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 204 + }, 205 + { "cmula", TILEGX_OPC_CMULA, 0x1, 3, TREG_ZERO, 1, 206 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 207 + }, 208 + { "cmulaf", TILEGX_OPC_CMULAF, 0x1, 3, TREG_ZERO, 1, 209 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 210 + }, 211 + { "cmulf", TILEGX_OPC_CMULF, 0x1, 3, TREG_ZERO, 1, 212 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 213 + }, 214 + { "cmulfr", TILEGX_OPC_CMULFR, 0x1, 3, TREG_ZERO, 1, 215 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 216 + }, 217 + { "cmulh", TILEGX_OPC_CMULH, 0x1, 3, TREG_ZERO, 1, 218 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 219 + }, 220 + { "cmulhr", TILEGX_OPC_CMULHR, 0x1, 3, TREG_ZERO, 1, 221 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 222 + }, 223 + { "crc32_32", TILEGX_OPC_CRC32_32, 0x1, 3, TREG_ZERO, 1, 224 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 225 + }, 226 + { "crc32_8", TILEGX_OPC_CRC32_8, 0x1, 3, TREG_ZERO, 1, 227 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 228 + }, 229 + { "ctz", TILEGX_OPC_CTZ, 0x5, 2, TREG_ZERO, 1, 230 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 231 + }, 232 + { "dblalign", TILEGX_OPC_DBLALIGN, 0x1, 3, TREG_ZERO, 1, 233 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 234 + }, 235 + { "dblalign2", TILEGX_OPC_DBLALIGN2, 0x3, 3, TREG_ZERO, 1, 236 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 237 + }, 238 + { "dblalign4", TILEGX_OPC_DBLALIGN4, 0x3, 3, TREG_ZERO, 1, 239 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 240 + }, 241 + { "dblalign6", TILEGX_OPC_DBLALIGN6, 0x3, 3, TREG_ZERO, 1, 242 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 243 + }, 244 + { "drain", TILEGX_OPC_DRAIN, 0x2, 0, TREG_ZERO, 0, 245 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 246 + }, 247 + { "dtlbpr", TILEGX_OPC_DTLBPR, 0x2, 1, TREG_ZERO, 1, 248 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 249 + }, 250 + { "exch", TILEGX_OPC_EXCH, 0x2, 3, TREG_ZERO, 1, 251 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 252 + }, 253 + { "exch4", TILEGX_OPC_EXCH4, 0x2, 3, TREG_ZERO, 1, 254 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 255 + }, 256 + { "fdouble_add_flags", TILEGX_OPC_FDOUBLE_ADD_FLAGS, 0x1, 3, TREG_ZERO, 1, 257 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 258 + }, 259 + { "fdouble_addsub", TILEGX_OPC_FDOUBLE_ADDSUB, 0x1, 3, TREG_ZERO, 1, 260 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 261 + }, 262 + { "fdouble_mul_flags", TILEGX_OPC_FDOUBLE_MUL_FLAGS, 0x1, 3, TREG_ZERO, 1, 263 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 264 + }, 265 + { "fdouble_pack1", TILEGX_OPC_FDOUBLE_PACK1, 0x1, 3, TREG_ZERO, 1, 266 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 267 + }, 268 + { "fdouble_pack2", TILEGX_OPC_FDOUBLE_PACK2, 0x1, 3, TREG_ZERO, 1, 269 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 270 + }, 271 + { "fdouble_sub_flags", TILEGX_OPC_FDOUBLE_SUB_FLAGS, 0x1, 3, TREG_ZERO, 1, 272 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 273 + }, 274 + { "fdouble_unpack_max", TILEGX_OPC_FDOUBLE_UNPACK_MAX, 0x1, 3, TREG_ZERO, 1, 275 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 276 + }, 277 + { "fdouble_unpack_min", TILEGX_OPC_FDOUBLE_UNPACK_MIN, 0x1, 3, TREG_ZERO, 1, 278 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 279 + }, 280 + { "fetchadd", TILEGX_OPC_FETCHADD, 0x2, 3, TREG_ZERO, 1, 281 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 282 + }, 283 + { "fetchadd4", TILEGX_OPC_FETCHADD4, 0x2, 3, TREG_ZERO, 1, 284 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 285 + }, 286 + { "fetchaddgez", TILEGX_OPC_FETCHADDGEZ, 0x2, 3, TREG_ZERO, 1, 287 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 288 + }, 289 + { "fetchaddgez4", TILEGX_OPC_FETCHADDGEZ4, 0x2, 3, TREG_ZERO, 1, 290 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 291 + }, 292 + { "fetchand", TILEGX_OPC_FETCHAND, 0x2, 3, TREG_ZERO, 1, 293 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 294 + }, 295 + { "fetchand4", TILEGX_OPC_FETCHAND4, 0x2, 3, TREG_ZERO, 1, 296 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 297 + }, 298 + { "fetchor", TILEGX_OPC_FETCHOR, 0x2, 3, TREG_ZERO, 1, 299 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 300 + }, 301 + { "fetchor4", TILEGX_OPC_FETCHOR4, 0x2, 3, TREG_ZERO, 1, 302 + { { 0, }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 303 + }, 304 + { "finv", TILEGX_OPC_FINV, 0x2, 1, TREG_ZERO, 1, 305 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 306 + }, 307 + { "flush", TILEGX_OPC_FLUSH, 0x2, 1, TREG_ZERO, 1, 308 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 309 + }, 310 + { "flushwb", TILEGX_OPC_FLUSHWB, 0x2, 0, TREG_ZERO, 1, 311 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 312 + }, 313 + { "fnop", TILEGX_OPC_FNOP, 0xf, 0, TREG_ZERO, 1, 314 + { { }, { }, { }, { }, { 0, } }, 315 + }, 316 + { "fsingle_add1", TILEGX_OPC_FSINGLE_ADD1, 0x1, 3, TREG_ZERO, 1, 317 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 318 + }, 319 + { "fsingle_addsub2", TILEGX_OPC_FSINGLE_ADDSUB2, 0x1, 3, TREG_ZERO, 1, 320 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 321 + }, 322 + { "fsingle_mul1", TILEGX_OPC_FSINGLE_MUL1, 0x1, 3, TREG_ZERO, 1, 323 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 324 + }, 325 + { "fsingle_mul2", TILEGX_OPC_FSINGLE_MUL2, 0x1, 3, TREG_ZERO, 1, 326 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 327 + }, 328 + { "fsingle_pack1", TILEGX_OPC_FSINGLE_PACK1, 0x5, 2, TREG_ZERO, 1, 329 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 330 + }, 331 + { "fsingle_pack2", TILEGX_OPC_FSINGLE_PACK2, 0x1, 3, TREG_ZERO, 1, 332 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 333 + }, 334 + { "fsingle_sub1", TILEGX_OPC_FSINGLE_SUB1, 0x1, 3, TREG_ZERO, 1, 335 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 336 + }, 337 + { "icoh", TILEGX_OPC_ICOH, 0x2, 1, TREG_ZERO, 1, 338 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 339 + }, 340 + { "ill", TILEGX_OPC_ILL, 0xa, 0, TREG_ZERO, 1, 341 + { { 0, }, { }, { 0, }, { }, { 0, } }, 342 + }, 343 + { "inv", TILEGX_OPC_INV, 0x2, 1, TREG_ZERO, 1, 344 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 345 + }, 346 + { "iret", TILEGX_OPC_IRET, 0x2, 0, TREG_ZERO, 1, 347 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 348 + }, 349 + { "j", TILEGX_OPC_J, 0x2, 1, TREG_ZERO, 1, 350 + { { 0, }, { 25 }, { 0, }, { 0, }, { 0, } }, 351 + }, 352 + { "jal", TILEGX_OPC_JAL, 0x2, 1, TREG_LR, 1, 353 + { { 0, }, { 25 }, { 0, }, { 0, }, { 0, } }, 354 + }, 355 + { "jalr", TILEGX_OPC_JALR, 0xa, 1, TREG_LR, 1, 356 + { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } }, 357 + }, 358 + { "jalrp", TILEGX_OPC_JALRP, 0xa, 1, TREG_LR, 1, 359 + { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } }, 360 + }, 361 + { "jr", TILEGX_OPC_JR, 0xa, 1, TREG_ZERO, 1, 362 + { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } }, 363 + }, 364 + { "jrp", TILEGX_OPC_JRP, 0xa, 1, TREG_ZERO, 1, 365 + { { 0, }, { 9 }, { 0, }, { 13 }, { 0, } }, 366 + }, 367 + { "ld", TILEGX_OPC_LD, 0x12, 2, TREG_ZERO, 1, 368 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 369 + }, 370 + { "ld1s", TILEGX_OPC_LD1S, 0x12, 2, TREG_ZERO, 1, 371 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 372 + }, 373 + { "ld1s_add", TILEGX_OPC_LD1S_ADD, 0x2, 3, TREG_ZERO, 1, 374 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 375 + }, 376 + { "ld1u", TILEGX_OPC_LD1U, 0x12, 2, TREG_ZERO, 1, 377 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 378 + }, 379 + { "ld1u_add", TILEGX_OPC_LD1U_ADD, 0x2, 3, TREG_ZERO, 1, 380 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 381 + }, 382 + { "ld2s", TILEGX_OPC_LD2S, 0x12, 2, TREG_ZERO, 1, 383 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 384 + }, 385 + { "ld2s_add", TILEGX_OPC_LD2S_ADD, 0x2, 3, TREG_ZERO, 1, 386 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 387 + }, 388 + { "ld2u", TILEGX_OPC_LD2U, 0x12, 2, TREG_ZERO, 1, 389 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 390 + }, 391 + { "ld2u_add", TILEGX_OPC_LD2U_ADD, 0x2, 3, TREG_ZERO, 1, 392 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 393 + }, 394 + { "ld4s", TILEGX_OPC_LD4S, 0x12, 2, TREG_ZERO, 1, 395 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 396 + }, 397 + { "ld4s_add", TILEGX_OPC_LD4S_ADD, 0x2, 3, TREG_ZERO, 1, 398 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 399 + }, 400 + { "ld4u", TILEGX_OPC_LD4U, 0x12, 2, TREG_ZERO, 1, 401 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 26, 14 } }, 402 + }, 403 + { "ld4u_add", TILEGX_OPC_LD4U_ADD, 0x2, 3, TREG_ZERO, 1, 404 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 405 + }, 406 + { "ld_add", TILEGX_OPC_LD_ADD, 0x2, 3, TREG_ZERO, 1, 407 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 408 + }, 409 + { "ldna", TILEGX_OPC_LDNA, 0x2, 2, TREG_ZERO, 1, 410 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 411 + }, 412 + { "ldna_add", TILEGX_OPC_LDNA_ADD, 0x2, 3, TREG_ZERO, 1, 413 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 414 + }, 415 + { "ldnt", TILEGX_OPC_LDNT, 0x2, 2, TREG_ZERO, 1, 416 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 417 + }, 418 + { "ldnt1s", TILEGX_OPC_LDNT1S, 0x2, 2, TREG_ZERO, 1, 419 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 420 + }, 421 + { "ldnt1s_add", TILEGX_OPC_LDNT1S_ADD, 0x2, 3, TREG_ZERO, 1, 422 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 423 + }, 424 + { "ldnt1u", TILEGX_OPC_LDNT1U, 0x2, 2, TREG_ZERO, 1, 425 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 426 + }, 427 + { "ldnt1u_add", TILEGX_OPC_LDNT1U_ADD, 0x2, 3, TREG_ZERO, 1, 428 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 429 + }, 430 + { "ldnt2s", TILEGX_OPC_LDNT2S, 0x2, 2, TREG_ZERO, 1, 431 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 432 + }, 433 + { "ldnt2s_add", TILEGX_OPC_LDNT2S_ADD, 0x2, 3, TREG_ZERO, 1, 434 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 435 + }, 436 + { "ldnt2u", TILEGX_OPC_LDNT2U, 0x2, 2, TREG_ZERO, 1, 437 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 438 + }, 439 + { "ldnt2u_add", TILEGX_OPC_LDNT2U_ADD, 0x2, 3, TREG_ZERO, 1, 440 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 441 + }, 442 + { "ldnt4s", TILEGX_OPC_LDNT4S, 0x2, 2, TREG_ZERO, 1, 443 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 444 + }, 445 + { "ldnt4s_add", TILEGX_OPC_LDNT4S_ADD, 0x2, 3, TREG_ZERO, 1, 446 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 447 + }, 448 + { "ldnt4u", TILEGX_OPC_LDNT4U, 0x2, 2, TREG_ZERO, 1, 449 + { { 0, }, { 8, 9 }, { 0, }, { 0, }, { 0, } }, 450 + }, 451 + { "ldnt4u_add", TILEGX_OPC_LDNT4U_ADD, 0x2, 3, TREG_ZERO, 1, 452 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 453 + }, 454 + { "ldnt_add", TILEGX_OPC_LDNT_ADD, 0x2, 3, TREG_ZERO, 1, 455 + { { 0, }, { 8, 15, 1 }, { 0, }, { 0, }, { 0, } }, 456 + }, 457 + { "lnk", TILEGX_OPC_LNK, 0xa, 1, TREG_ZERO, 1, 458 + { { 0, }, { 8 }, { 0, }, { 12 }, { 0, } }, 459 + }, 460 + { "mf", TILEGX_OPC_MF, 0x2, 0, TREG_ZERO, 1, 461 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 462 + }, 463 + { "mfspr", TILEGX_OPC_MFSPR, 0x2, 2, TREG_ZERO, 1, 464 + { { 0, }, { 8, 27 }, { 0, }, { 0, }, { 0, } }, 465 + }, 466 + { "mm", TILEGX_OPC_MM, 0x1, 4, TREG_ZERO, 1, 467 + { { 23, 7, 21, 22 }, { 0, }, { 0, }, { 0, }, { 0, } }, 468 + }, 469 + { "mnz", TILEGX_OPC_MNZ, 0xf, 3, TREG_ZERO, 1, 470 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 471 + }, 472 + { "mtspr", TILEGX_OPC_MTSPR, 0x2, 2, TREG_ZERO, 1, 473 + { { 0, }, { 28, 9 }, { 0, }, { 0, }, { 0, } }, 474 + }, 475 + { "mul_hs_hs", TILEGX_OPC_MUL_HS_HS, 0x5, 3, TREG_ZERO, 1, 476 + { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } }, 477 + }, 478 + { "mul_hs_hu", TILEGX_OPC_MUL_HS_HU, 0x1, 3, TREG_ZERO, 1, 479 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 480 + }, 481 + { "mul_hs_ls", TILEGX_OPC_MUL_HS_LS, 0x1, 3, TREG_ZERO, 1, 482 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 483 + }, 484 + { "mul_hs_lu", TILEGX_OPC_MUL_HS_LU, 0x1, 3, TREG_ZERO, 1, 485 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 486 + }, 487 + { "mul_hu_hu", TILEGX_OPC_MUL_HU_HU, 0x5, 3, TREG_ZERO, 1, 488 + { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } }, 489 + }, 490 + { "mul_hu_ls", TILEGX_OPC_MUL_HU_LS, 0x1, 3, TREG_ZERO, 1, 491 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 492 + }, 493 + { "mul_hu_lu", TILEGX_OPC_MUL_HU_LU, 0x1, 3, TREG_ZERO, 1, 494 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 495 + }, 496 + { "mul_ls_ls", TILEGX_OPC_MUL_LS_LS, 0x5, 3, TREG_ZERO, 1, 497 + { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } }, 498 + }, 499 + { "mul_ls_lu", TILEGX_OPC_MUL_LS_LU, 0x1, 3, TREG_ZERO, 1, 500 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 501 + }, 502 + { "mul_lu_lu", TILEGX_OPC_MUL_LU_LU, 0x5, 3, TREG_ZERO, 1, 503 + { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } }, 504 + }, 505 + { "mula_hs_hs", TILEGX_OPC_MULA_HS_HS, 0x5, 3, TREG_ZERO, 1, 506 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 507 + }, 508 + { "mula_hs_hu", TILEGX_OPC_MULA_HS_HU, 0x1, 3, TREG_ZERO, 1, 509 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 510 + }, 511 + { "mula_hs_ls", TILEGX_OPC_MULA_HS_LS, 0x1, 3, TREG_ZERO, 1, 512 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 513 + }, 514 + { "mula_hs_lu", TILEGX_OPC_MULA_HS_LU, 0x1, 3, TREG_ZERO, 1, 515 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 516 + }, 517 + { "mula_hu_hu", TILEGX_OPC_MULA_HU_HU, 0x5, 3, TREG_ZERO, 1, 518 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 519 + }, 520 + { "mula_hu_ls", TILEGX_OPC_MULA_HU_LS, 0x1, 3, TREG_ZERO, 1, 521 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 522 + }, 523 + { "mula_hu_lu", TILEGX_OPC_MULA_HU_LU, 0x1, 3, TREG_ZERO, 1, 524 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 525 + }, 526 + { "mula_ls_ls", TILEGX_OPC_MULA_LS_LS, 0x5, 3, TREG_ZERO, 1, 527 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 528 + }, 529 + { "mula_ls_lu", TILEGX_OPC_MULA_LS_LU, 0x1, 3, TREG_ZERO, 1, 530 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 531 + }, 532 + { "mula_lu_lu", TILEGX_OPC_MULA_LU_LU, 0x5, 3, TREG_ZERO, 1, 533 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 534 + }, 535 + { "mulax", TILEGX_OPC_MULAX, 0x5, 3, TREG_ZERO, 1, 536 + { { 23, 7, 16 }, { 0, }, { 24, 11, 18 }, { 0, }, { 0, } }, 537 + }, 538 + { "mulx", TILEGX_OPC_MULX, 0x5, 3, TREG_ZERO, 1, 539 + { { 6, 7, 16 }, { 0, }, { 10, 11, 18 }, { 0, }, { 0, } }, 540 + }, 541 + { "mz", TILEGX_OPC_MZ, 0xf, 3, TREG_ZERO, 1, 542 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 543 + }, 544 + { "nap", TILEGX_OPC_NAP, 0x2, 0, TREG_ZERO, 0, 545 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 546 + }, 547 + { "nop", TILEGX_OPC_NOP, 0xf, 0, TREG_ZERO, 1, 548 + { { }, { }, { }, { }, { 0, } }, 549 + }, 550 + { "nor", TILEGX_OPC_NOR, 0xf, 3, TREG_ZERO, 1, 551 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 552 + }, 553 + { "or", TILEGX_OPC_OR, 0xf, 3, TREG_ZERO, 1, 554 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 555 + }, 556 + { "ori", TILEGX_OPC_ORI, 0x3, 3, TREG_ZERO, 1, 557 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 558 + }, 559 + { "pcnt", TILEGX_OPC_PCNT, 0x5, 2, TREG_ZERO, 1, 560 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 561 + }, 562 + { "revbits", TILEGX_OPC_REVBITS, 0x5, 2, TREG_ZERO, 1, 563 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 564 + }, 565 + { "revbytes", TILEGX_OPC_REVBYTES, 0x5, 2, TREG_ZERO, 1, 566 + { { 6, 7 }, { 0, }, { 10, 11 }, { 0, }, { 0, } }, 567 + }, 568 + { "rotl", TILEGX_OPC_ROTL, 0xf, 3, TREG_ZERO, 1, 569 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 570 + }, 571 + { "rotli", TILEGX_OPC_ROTLI, 0xf, 3, TREG_ZERO, 1, 572 + { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } }, 573 + }, 574 + { "shl", TILEGX_OPC_SHL, 0xf, 3, TREG_ZERO, 1, 575 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 576 + }, 577 + { "shl16insli", TILEGX_OPC_SHL16INSLI, 0x3, 3, TREG_ZERO, 1, 578 + { { 6, 7, 4 }, { 8, 9, 5 }, { 0, }, { 0, }, { 0, } }, 579 + }, 580 + { "shl1add", TILEGX_OPC_SHL1ADD, 0xf, 3, TREG_ZERO, 1, 581 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 582 + }, 583 + { "shl1addx", TILEGX_OPC_SHL1ADDX, 0xf, 3, TREG_ZERO, 1, 584 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 585 + }, 586 + { "shl2add", TILEGX_OPC_SHL2ADD, 0xf, 3, TREG_ZERO, 1, 587 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 588 + }, 589 + { "shl2addx", TILEGX_OPC_SHL2ADDX, 0xf, 3, TREG_ZERO, 1, 590 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 591 + }, 592 + { "shl3add", TILEGX_OPC_SHL3ADD, 0xf, 3, TREG_ZERO, 1, 593 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 594 + }, 595 + { "shl3addx", TILEGX_OPC_SHL3ADDX, 0xf, 3, TREG_ZERO, 1, 596 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 597 + }, 598 + { "shli", TILEGX_OPC_SHLI, 0xf, 3, TREG_ZERO, 1, 599 + { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } }, 600 + }, 601 + { "shlx", TILEGX_OPC_SHLX, 0x3, 3, TREG_ZERO, 1, 602 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 603 + }, 604 + { "shlxi", TILEGX_OPC_SHLXI, 0x3, 3, TREG_ZERO, 1, 605 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 606 + }, 607 + { "shrs", TILEGX_OPC_SHRS, 0xf, 3, TREG_ZERO, 1, 608 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 609 + }, 610 + { "shrsi", TILEGX_OPC_SHRSI, 0xf, 3, TREG_ZERO, 1, 611 + { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } }, 612 + }, 613 + { "shru", TILEGX_OPC_SHRU, 0xf, 3, TREG_ZERO, 1, 614 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 615 + }, 616 + { "shrui", TILEGX_OPC_SHRUI, 0xf, 3, TREG_ZERO, 1, 617 + { { 6, 7, 29 }, { 8, 9, 30 }, { 10, 11, 31 }, { 12, 13, 32 }, { 0, } }, 618 + }, 619 + { "shrux", TILEGX_OPC_SHRUX, 0x3, 3, TREG_ZERO, 1, 620 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 621 + }, 622 + { "shruxi", TILEGX_OPC_SHRUXI, 0x3, 3, TREG_ZERO, 1, 623 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 624 + }, 625 + { "shufflebytes", TILEGX_OPC_SHUFFLEBYTES, 0x1, 3, TREG_ZERO, 1, 626 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 627 + }, 628 + { "st", TILEGX_OPC_ST, 0x12, 2, TREG_ZERO, 1, 629 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } }, 630 + }, 631 + { "st1", TILEGX_OPC_ST1, 0x12, 2, TREG_ZERO, 1, 632 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } }, 633 + }, 634 + { "st1_add", TILEGX_OPC_ST1_ADD, 0x2, 3, TREG_ZERO, 1, 635 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 636 + }, 637 + { "st2", TILEGX_OPC_ST2, 0x12, 2, TREG_ZERO, 1, 638 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } }, 639 + }, 640 + { "st2_add", TILEGX_OPC_ST2_ADD, 0x2, 3, TREG_ZERO, 1, 641 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 642 + }, 643 + { "st4", TILEGX_OPC_ST4, 0x12, 2, TREG_ZERO, 1, 644 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 14, 33 } }, 645 + }, 646 + { "st4_add", TILEGX_OPC_ST4_ADD, 0x2, 3, TREG_ZERO, 1, 647 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 648 + }, 649 + { "st_add", TILEGX_OPC_ST_ADD, 0x2, 3, TREG_ZERO, 1, 650 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 651 + }, 652 + { "stnt", TILEGX_OPC_STNT, 0x2, 2, TREG_ZERO, 1, 653 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } }, 654 + }, 655 + { "stnt1", TILEGX_OPC_STNT1, 0x2, 2, TREG_ZERO, 1, 656 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } }, 657 + }, 658 + { "stnt1_add", TILEGX_OPC_STNT1_ADD, 0x2, 3, TREG_ZERO, 1, 659 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 660 + }, 661 + { "stnt2", TILEGX_OPC_STNT2, 0x2, 2, TREG_ZERO, 1, 662 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } }, 663 + }, 664 + { "stnt2_add", TILEGX_OPC_STNT2_ADD, 0x2, 3, TREG_ZERO, 1, 665 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 666 + }, 667 + { "stnt4", TILEGX_OPC_STNT4, 0x2, 2, TREG_ZERO, 1, 668 + { { 0, }, { 9, 17 }, { 0, }, { 0, }, { 0, } }, 669 + }, 670 + { "stnt4_add", TILEGX_OPC_STNT4_ADD, 0x2, 3, TREG_ZERO, 1, 671 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 672 + }, 673 + { "stnt_add", TILEGX_OPC_STNT_ADD, 0x2, 3, TREG_ZERO, 1, 674 + { { 0, }, { 15, 17, 34 }, { 0, }, { 0, }, { 0, } }, 675 + }, 676 + { "sub", TILEGX_OPC_SUB, 0xf, 3, TREG_ZERO, 1, 677 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 678 + }, 679 + { "subx", TILEGX_OPC_SUBX, 0xf, 3, TREG_ZERO, 1, 680 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 681 + }, 682 + { "subxsc", TILEGX_OPC_SUBXSC, 0x3, 3, TREG_ZERO, 1, 683 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 684 + }, 685 + { "swint0", TILEGX_OPC_SWINT0, 0x2, 0, TREG_ZERO, 0, 686 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 687 + }, 688 + { "swint1", TILEGX_OPC_SWINT1, 0x2, 0, TREG_ZERO, 0, 689 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 690 + }, 691 + { "swint2", TILEGX_OPC_SWINT2, 0x2, 0, TREG_ZERO, 0, 692 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 693 + }, 694 + { "swint3", TILEGX_OPC_SWINT3, 0x2, 0, TREG_ZERO, 0, 695 + { { 0, }, { }, { 0, }, { 0, }, { 0, } }, 696 + }, 697 + { "tblidxb0", TILEGX_OPC_TBLIDXB0, 0x5, 2, TREG_ZERO, 1, 698 + { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } }, 699 + }, 700 + { "tblidxb1", TILEGX_OPC_TBLIDXB1, 0x5, 2, TREG_ZERO, 1, 701 + { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } }, 702 + }, 703 + { "tblidxb2", TILEGX_OPC_TBLIDXB2, 0x5, 2, TREG_ZERO, 1, 704 + { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } }, 705 + }, 706 + { "tblidxb3", TILEGX_OPC_TBLIDXB3, 0x5, 2, TREG_ZERO, 1, 707 + { { 23, 7 }, { 0, }, { 24, 11 }, { 0, }, { 0, } }, 708 + }, 709 + { "v1add", TILEGX_OPC_V1ADD, 0x3, 3, TREG_ZERO, 1, 710 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 711 + }, 712 + { "v1addi", TILEGX_OPC_V1ADDI, 0x3, 3, TREG_ZERO, 1, 713 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 714 + }, 715 + { "v1adduc", TILEGX_OPC_V1ADDUC, 0x3, 3, TREG_ZERO, 1, 716 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 717 + }, 718 + { "v1adiffu", TILEGX_OPC_V1ADIFFU, 0x1, 3, TREG_ZERO, 1, 719 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 720 + }, 721 + { "v1avgu", TILEGX_OPC_V1AVGU, 0x1, 3, TREG_ZERO, 1, 722 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 723 + }, 724 + { "v1cmpeq", TILEGX_OPC_V1CMPEQ, 0x3, 3, TREG_ZERO, 1, 725 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 726 + }, 727 + { "v1cmpeqi", TILEGX_OPC_V1CMPEQI, 0x3, 3, TREG_ZERO, 1, 728 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 729 + }, 730 + { "v1cmples", TILEGX_OPC_V1CMPLES, 0x3, 3, TREG_ZERO, 1, 731 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 732 + }, 733 + { "v1cmpleu", TILEGX_OPC_V1CMPLEU, 0x3, 3, TREG_ZERO, 1, 734 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 735 + }, 736 + { "v1cmplts", TILEGX_OPC_V1CMPLTS, 0x3, 3, TREG_ZERO, 1, 737 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 738 + }, 739 + { "v1cmpltsi", TILEGX_OPC_V1CMPLTSI, 0x3, 3, TREG_ZERO, 1, 740 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 741 + }, 742 + { "v1cmpltu", TILEGX_OPC_V1CMPLTU, 0x3, 3, TREG_ZERO, 1, 743 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 744 + }, 745 + { "v1cmpltui", TILEGX_OPC_V1CMPLTUI, 0x3, 3, TREG_ZERO, 1, 746 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 747 + }, 748 + { "v1cmpne", TILEGX_OPC_V1CMPNE, 0x3, 3, TREG_ZERO, 1, 749 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 750 + }, 751 + { "v1ddotpu", TILEGX_OPC_V1DDOTPU, 0x1, 3, TREG_ZERO, 1, 752 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 753 + }, 754 + { "v1ddotpua", TILEGX_OPC_V1DDOTPUA, 0x1, 3, TREG_ZERO, 1, 755 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 756 + }, 757 + { "v1ddotpus", TILEGX_OPC_V1DDOTPUS, 0x1, 3, TREG_ZERO, 1, 758 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 759 + }, 760 + { "v1ddotpusa", TILEGX_OPC_V1DDOTPUSA, 0x1, 3, TREG_ZERO, 1, 761 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 762 + }, 763 + { "v1dotp", TILEGX_OPC_V1DOTP, 0x1, 3, TREG_ZERO, 1, 764 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 765 + }, 766 + { "v1dotpa", TILEGX_OPC_V1DOTPA, 0x1, 3, TREG_ZERO, 1, 767 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 768 + }, 769 + { "v1dotpu", TILEGX_OPC_V1DOTPU, 0x1, 3, TREG_ZERO, 1, 770 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 771 + }, 772 + { "v1dotpua", TILEGX_OPC_V1DOTPUA, 0x1, 3, TREG_ZERO, 1, 773 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 774 + }, 775 + { "v1dotpus", TILEGX_OPC_V1DOTPUS, 0x1, 3, TREG_ZERO, 1, 776 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 777 + }, 778 + { "v1dotpusa", TILEGX_OPC_V1DOTPUSA, 0x1, 3, TREG_ZERO, 1, 779 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 780 + }, 781 + { "v1int_h", TILEGX_OPC_V1INT_H, 0x3, 3, TREG_ZERO, 1, 782 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 783 + }, 784 + { "v1int_l", TILEGX_OPC_V1INT_L, 0x3, 3, TREG_ZERO, 1, 785 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 786 + }, 787 + { "v1maxu", TILEGX_OPC_V1MAXU, 0x3, 3, TREG_ZERO, 1, 788 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 789 + }, 790 + { "v1maxui", TILEGX_OPC_V1MAXUI, 0x3, 3, TREG_ZERO, 1, 791 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 792 + }, 793 + { "v1minu", TILEGX_OPC_V1MINU, 0x3, 3, TREG_ZERO, 1, 794 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 795 + }, 796 + { "v1minui", TILEGX_OPC_V1MINUI, 0x3, 3, TREG_ZERO, 1, 797 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 798 + }, 799 + { "v1mnz", TILEGX_OPC_V1MNZ, 0x3, 3, TREG_ZERO, 1, 800 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 801 + }, 802 + { "v1multu", TILEGX_OPC_V1MULTU, 0x1, 3, TREG_ZERO, 1, 803 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 804 + }, 805 + { "v1mulu", TILEGX_OPC_V1MULU, 0x1, 3, TREG_ZERO, 1, 806 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 807 + }, 808 + { "v1mulus", TILEGX_OPC_V1MULUS, 0x1, 3, TREG_ZERO, 1, 809 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 810 + }, 811 + { "v1mz", TILEGX_OPC_V1MZ, 0x3, 3, TREG_ZERO, 1, 812 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 813 + }, 814 + { "v1sadau", TILEGX_OPC_V1SADAU, 0x1, 3, TREG_ZERO, 1, 815 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 816 + }, 817 + { "v1sadu", TILEGX_OPC_V1SADU, 0x1, 3, TREG_ZERO, 1, 818 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 819 + }, 820 + { "v1shl", TILEGX_OPC_V1SHL, 0x3, 3, TREG_ZERO, 1, 821 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 822 + }, 823 + { "v1shli", TILEGX_OPC_V1SHLI, 0x3, 3, TREG_ZERO, 1, 824 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 825 + }, 826 + { "v1shrs", TILEGX_OPC_V1SHRS, 0x3, 3, TREG_ZERO, 1, 827 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 828 + }, 829 + { "v1shrsi", TILEGX_OPC_V1SHRSI, 0x3, 3, TREG_ZERO, 1, 830 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 831 + }, 832 + { "v1shru", TILEGX_OPC_V1SHRU, 0x3, 3, TREG_ZERO, 1, 833 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 834 + }, 835 + { "v1shrui", TILEGX_OPC_V1SHRUI, 0x3, 3, TREG_ZERO, 1, 836 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 837 + }, 838 + { "v1sub", TILEGX_OPC_V1SUB, 0x3, 3, TREG_ZERO, 1, 839 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 840 + }, 841 + { "v1subuc", TILEGX_OPC_V1SUBUC, 0x3, 3, TREG_ZERO, 1, 842 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 843 + }, 844 + { "v2add", TILEGX_OPC_V2ADD, 0x3, 3, TREG_ZERO, 1, 845 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 846 + }, 847 + { "v2addi", TILEGX_OPC_V2ADDI, 0x3, 3, TREG_ZERO, 1, 848 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 849 + }, 850 + { "v2addsc", TILEGX_OPC_V2ADDSC, 0x3, 3, TREG_ZERO, 1, 851 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 852 + }, 853 + { "v2adiffs", TILEGX_OPC_V2ADIFFS, 0x1, 3, TREG_ZERO, 1, 854 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 855 + }, 856 + { "v2avgs", TILEGX_OPC_V2AVGS, 0x1, 3, TREG_ZERO, 1, 857 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 858 + }, 859 + { "v2cmpeq", TILEGX_OPC_V2CMPEQ, 0x3, 3, TREG_ZERO, 1, 860 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 861 + }, 862 + { "v2cmpeqi", TILEGX_OPC_V2CMPEQI, 0x3, 3, TREG_ZERO, 1, 863 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 864 + }, 865 + { "v2cmples", TILEGX_OPC_V2CMPLES, 0x3, 3, TREG_ZERO, 1, 866 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 867 + }, 868 + { "v2cmpleu", TILEGX_OPC_V2CMPLEU, 0x3, 3, TREG_ZERO, 1, 869 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 870 + }, 871 + { "v2cmplts", TILEGX_OPC_V2CMPLTS, 0x3, 3, TREG_ZERO, 1, 872 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 873 + }, 874 + { "v2cmpltsi", TILEGX_OPC_V2CMPLTSI, 0x3, 3, TREG_ZERO, 1, 875 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 876 + }, 877 + { "v2cmpltu", TILEGX_OPC_V2CMPLTU, 0x3, 3, TREG_ZERO, 1, 878 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 879 + }, 880 + { "v2cmpltui", TILEGX_OPC_V2CMPLTUI, 0x3, 3, TREG_ZERO, 1, 881 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 882 + }, 883 + { "v2cmpne", TILEGX_OPC_V2CMPNE, 0x3, 3, TREG_ZERO, 1, 884 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 885 + }, 886 + { "v2dotp", TILEGX_OPC_V2DOTP, 0x1, 3, TREG_ZERO, 1, 887 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 888 + }, 889 + { "v2dotpa", TILEGX_OPC_V2DOTPA, 0x1, 3, TREG_ZERO, 1, 890 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 891 + }, 892 + { "v2int_h", TILEGX_OPC_V2INT_H, 0x3, 3, TREG_ZERO, 1, 893 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 894 + }, 895 + { "v2int_l", TILEGX_OPC_V2INT_L, 0x3, 3, TREG_ZERO, 1, 896 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 897 + }, 898 + { "v2maxs", TILEGX_OPC_V2MAXS, 0x3, 3, TREG_ZERO, 1, 899 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 900 + }, 901 + { "v2maxsi", TILEGX_OPC_V2MAXSI, 0x3, 3, TREG_ZERO, 1, 902 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 903 + }, 904 + { "v2mins", TILEGX_OPC_V2MINS, 0x3, 3, TREG_ZERO, 1, 905 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 906 + }, 907 + { "v2minsi", TILEGX_OPC_V2MINSI, 0x3, 3, TREG_ZERO, 1, 908 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 909 + }, 910 + { "v2mnz", TILEGX_OPC_V2MNZ, 0x3, 3, TREG_ZERO, 1, 911 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 912 + }, 913 + { "v2mulfsc", TILEGX_OPC_V2MULFSC, 0x1, 3, TREG_ZERO, 1, 914 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 915 + }, 916 + { "v2muls", TILEGX_OPC_V2MULS, 0x1, 3, TREG_ZERO, 1, 917 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 918 + }, 919 + { "v2mults", TILEGX_OPC_V2MULTS, 0x1, 3, TREG_ZERO, 1, 920 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 921 + }, 922 + { "v2mz", TILEGX_OPC_V2MZ, 0x3, 3, TREG_ZERO, 1, 923 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 924 + }, 925 + { "v2packh", TILEGX_OPC_V2PACKH, 0x3, 3, TREG_ZERO, 1, 926 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 927 + }, 928 + { "v2packl", TILEGX_OPC_V2PACKL, 0x3, 3, TREG_ZERO, 1, 929 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 930 + }, 931 + { "v2packuc", TILEGX_OPC_V2PACKUC, 0x3, 3, TREG_ZERO, 1, 932 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 933 + }, 934 + { "v2sadas", TILEGX_OPC_V2SADAS, 0x1, 3, TREG_ZERO, 1, 935 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 936 + }, 937 + { "v2sadau", TILEGX_OPC_V2SADAU, 0x1, 3, TREG_ZERO, 1, 938 + { { 23, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 939 + }, 940 + { "v2sads", TILEGX_OPC_V2SADS, 0x1, 3, TREG_ZERO, 1, 941 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 942 + }, 943 + { "v2sadu", TILEGX_OPC_V2SADU, 0x1, 3, TREG_ZERO, 1, 944 + { { 6, 7, 16 }, { 0, }, { 0, }, { 0, }, { 0, } }, 945 + }, 946 + { "v2shl", TILEGX_OPC_V2SHL, 0x3, 3, TREG_ZERO, 1, 947 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 948 + }, 949 + { "v2shli", TILEGX_OPC_V2SHLI, 0x3, 3, TREG_ZERO, 1, 950 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 951 + }, 952 + { "v2shlsc", TILEGX_OPC_V2SHLSC, 0x3, 3, TREG_ZERO, 1, 953 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 954 + }, 955 + { "v2shrs", TILEGX_OPC_V2SHRS, 0x3, 3, TREG_ZERO, 1, 956 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 957 + }, 958 + { "v2shrsi", TILEGX_OPC_V2SHRSI, 0x3, 3, TREG_ZERO, 1, 959 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 960 + }, 961 + { "v2shru", TILEGX_OPC_V2SHRU, 0x3, 3, TREG_ZERO, 1, 962 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 963 + }, 964 + { "v2shrui", TILEGX_OPC_V2SHRUI, 0x3, 3, TREG_ZERO, 1, 965 + { { 6, 7, 29 }, { 8, 9, 30 }, { 0, }, { 0, }, { 0, } }, 966 + }, 967 + { "v2sub", TILEGX_OPC_V2SUB, 0x3, 3, TREG_ZERO, 1, 968 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 969 + }, 970 + { "v2subsc", TILEGX_OPC_V2SUBSC, 0x3, 3, TREG_ZERO, 1, 971 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 972 + }, 973 + { "v4add", TILEGX_OPC_V4ADD, 0x3, 3, TREG_ZERO, 1, 974 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 975 + }, 976 + { "v4addsc", TILEGX_OPC_V4ADDSC, 0x3, 3, TREG_ZERO, 1, 977 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 978 + }, 979 + { "v4int_h", TILEGX_OPC_V4INT_H, 0x3, 3, TREG_ZERO, 1, 980 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 981 + }, 982 + { "v4int_l", TILEGX_OPC_V4INT_L, 0x3, 3, TREG_ZERO, 1, 983 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 984 + }, 985 + { "v4packsc", TILEGX_OPC_V4PACKSC, 0x3, 3, TREG_ZERO, 1, 986 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 987 + }, 988 + { "v4shl", TILEGX_OPC_V4SHL, 0x3, 3, TREG_ZERO, 1, 989 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 990 + }, 991 + { "v4shlsc", TILEGX_OPC_V4SHLSC, 0x3, 3, TREG_ZERO, 1, 992 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 993 + }, 994 + { "v4shrs", TILEGX_OPC_V4SHRS, 0x3, 3, TREG_ZERO, 1, 995 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 996 + }, 997 + { "v4shru", TILEGX_OPC_V4SHRU, 0x3, 3, TREG_ZERO, 1, 998 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 999 + }, 1000 + { "v4sub", TILEGX_OPC_V4SUB, 0x3, 3, TREG_ZERO, 1, 1001 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 1002 + }, 1003 + { "v4subsc", TILEGX_OPC_V4SUBSC, 0x3, 3, TREG_ZERO, 1, 1004 + { { 6, 7, 16 }, { 8, 9, 17 }, { 0, }, { 0, }, { 0, } }, 1005 + }, 1006 + { "wh64", TILEGX_OPC_WH64, 0x2, 1, TREG_ZERO, 1, 1007 + { { 0, }, { 9 }, { 0, }, { 0, }, { 0, } }, 1008 + }, 1009 + { "xor", TILEGX_OPC_XOR, 0xf, 3, TREG_ZERO, 1, 1010 + { { 6, 7, 16 }, { 8, 9, 17 }, { 10, 11, 18 }, { 12, 13, 19 }, { 0, } }, 1011 + }, 1012 + { "xori", TILEGX_OPC_XORI, 0x3, 3, TREG_ZERO, 1, 1013 + { { 6, 7, 0 }, { 8, 9, 1 }, { 0, }, { 0, }, { 0, } }, 1014 + }, 1015 + { NULL, TILEGX_OPC_NONE, 0, 0, TREG_ZERO, 0, { { 0, } }, 1016 + } 1017 + }; 1018 + #define BITFIELD(start, size) ((start) | (((1 << (size)) - 1) << 6)) 1019 + #define CHILD(array_index) (TILEGX_OPC_NONE + (array_index)) 1020 + 1021 + static const unsigned short decode_X0_fsm[936] = 1022 + { 1023 + BITFIELD(22, 9) /* index 0 */, 1024 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1025 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1026 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1027 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1028 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1029 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1030 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1031 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1032 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1033 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1034 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1035 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1036 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1037 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1038 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1039 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1040 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1041 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1042 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1043 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1044 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1045 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1046 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1047 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1048 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1049 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1050 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), TILEGX_OPC_ADDXLI, 1051 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1052 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1053 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1054 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1055 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1056 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1057 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1058 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1059 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1060 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1061 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1062 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1063 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1064 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1065 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1066 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_NONE, 1067 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1068 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1069 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1070 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_BFEXTS, 1071 + TILEGX_OPC_BFEXTS, TILEGX_OPC_BFEXTS, TILEGX_OPC_BFEXTS, TILEGX_OPC_BFEXTU, 1072 + TILEGX_OPC_BFEXTU, TILEGX_OPC_BFEXTU, TILEGX_OPC_BFEXTU, TILEGX_OPC_BFINS, 1073 + TILEGX_OPC_BFINS, TILEGX_OPC_BFINS, TILEGX_OPC_BFINS, TILEGX_OPC_MM, 1074 + TILEGX_OPC_MM, TILEGX_OPC_MM, TILEGX_OPC_MM, TILEGX_OPC_NONE, 1075 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1076 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1077 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1078 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1079 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1080 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1081 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1082 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(528), CHILD(578), 1083 + CHILD(583), CHILD(588), CHILD(593), CHILD(598), TILEGX_OPC_NONE, 1084 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1085 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1086 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1087 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1088 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1089 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1090 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1091 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1092 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1093 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1094 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1095 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1096 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1097 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1098 + TILEGX_OPC_NONE, CHILD(603), CHILD(620), CHILD(637), CHILD(654), CHILD(671), 1099 + CHILD(703), CHILD(797), CHILD(814), CHILD(831), CHILD(848), CHILD(865), 1100 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1101 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1102 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1103 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1104 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1105 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1106 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1107 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1108 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1109 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1110 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1111 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1112 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1113 + TILEGX_OPC_NONE, CHILD(889), TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1114 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1115 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1116 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1117 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1118 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1119 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1120 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1121 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1122 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1123 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1124 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1125 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1126 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1127 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1128 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1129 + TILEGX_OPC_NONE, CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1130 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1131 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1132 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1133 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1134 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1135 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1136 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1137 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1138 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1139 + CHILD(906), CHILD(906), CHILD(906), CHILD(906), CHILD(906), 1140 + BITFIELD(6, 2) /* index 513 */, 1141 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(518), 1142 + BITFIELD(8, 2) /* index 518 */, 1143 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(523), 1144 + BITFIELD(10, 2) /* index 523 */, 1145 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_MOVELI, 1146 + BITFIELD(20, 2) /* index 528 */, 1147 + TILEGX_OPC_NONE, CHILD(533), TILEGX_OPC_ADDXI, CHILD(548), 1148 + BITFIELD(6, 2) /* index 533 */, 1149 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(538), 1150 + BITFIELD(8, 2) /* index 538 */, 1151 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(543), 1152 + BITFIELD(10, 2) /* index 543 */, 1153 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_MOVEI, 1154 + BITFIELD(0, 2) /* index 548 */, 1155 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(553), 1156 + BITFIELD(2, 2) /* index 553 */, 1157 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(558), 1158 + BITFIELD(4, 2) /* index 558 */, 1159 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(563), 1160 + BITFIELD(6, 2) /* index 563 */, 1161 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(568), 1162 + BITFIELD(8, 2) /* index 568 */, 1163 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(573), 1164 + BITFIELD(10, 2) /* index 573 */, 1165 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_INFO, 1166 + BITFIELD(20, 2) /* index 578 */, 1167 + TILEGX_OPC_CMPEQI, TILEGX_OPC_CMPLTSI, TILEGX_OPC_CMPLTUI, TILEGX_OPC_ORI, 1168 + BITFIELD(20, 2) /* index 583 */, 1169 + TILEGX_OPC_V1ADDI, TILEGX_OPC_V1CMPEQI, TILEGX_OPC_V1CMPLTSI, 1170 + TILEGX_OPC_V1CMPLTUI, 1171 + BITFIELD(20, 2) /* index 588 */, 1172 + TILEGX_OPC_V1MAXUI, TILEGX_OPC_V1MINUI, TILEGX_OPC_V2ADDI, 1173 + TILEGX_OPC_V2CMPEQI, 1174 + BITFIELD(20, 2) /* index 593 */, 1175 + TILEGX_OPC_V2CMPLTSI, TILEGX_OPC_V2CMPLTUI, TILEGX_OPC_V2MAXSI, 1176 + TILEGX_OPC_V2MINSI, 1177 + BITFIELD(20, 2) /* index 598 */, 1178 + TILEGX_OPC_XORI, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1179 + BITFIELD(18, 4) /* index 603 */, 1180 + TILEGX_OPC_NONE, TILEGX_OPC_ADDXSC, TILEGX_OPC_ADDX, TILEGX_OPC_ADD, 1181 + TILEGX_OPC_AND, TILEGX_OPC_CMOVEQZ, TILEGX_OPC_CMOVNEZ, TILEGX_OPC_CMPEQ, 1182 + TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU, 1183 + TILEGX_OPC_CMPNE, TILEGX_OPC_CMULAF, TILEGX_OPC_CMULA, TILEGX_OPC_CMULFR, 1184 + BITFIELD(18, 4) /* index 620 */, 1185 + TILEGX_OPC_CMULF, TILEGX_OPC_CMULHR, TILEGX_OPC_CMULH, TILEGX_OPC_CMUL, 1186 + TILEGX_OPC_CRC32_32, TILEGX_OPC_CRC32_8, TILEGX_OPC_DBLALIGN2, 1187 + TILEGX_OPC_DBLALIGN4, TILEGX_OPC_DBLALIGN6, TILEGX_OPC_DBLALIGN, 1188 + TILEGX_OPC_FDOUBLE_ADDSUB, TILEGX_OPC_FDOUBLE_ADD_FLAGS, 1189 + TILEGX_OPC_FDOUBLE_MUL_FLAGS, TILEGX_OPC_FDOUBLE_PACK1, 1190 + TILEGX_OPC_FDOUBLE_PACK2, TILEGX_OPC_FDOUBLE_SUB_FLAGS, 1191 + BITFIELD(18, 4) /* index 637 */, 1192 + TILEGX_OPC_FDOUBLE_UNPACK_MAX, TILEGX_OPC_FDOUBLE_UNPACK_MIN, 1193 + TILEGX_OPC_FSINGLE_ADD1, TILEGX_OPC_FSINGLE_ADDSUB2, 1194 + TILEGX_OPC_FSINGLE_MUL1, TILEGX_OPC_FSINGLE_MUL2, TILEGX_OPC_FSINGLE_PACK2, 1195 + TILEGX_OPC_FSINGLE_SUB1, TILEGX_OPC_MNZ, TILEGX_OPC_MULAX, 1196 + TILEGX_OPC_MULA_HS_HS, TILEGX_OPC_MULA_HS_HU, TILEGX_OPC_MULA_HS_LS, 1197 + TILEGX_OPC_MULA_HS_LU, TILEGX_OPC_MULA_HU_HU, TILEGX_OPC_MULA_HU_LS, 1198 + BITFIELD(18, 4) /* index 654 */, 1199 + TILEGX_OPC_MULA_HU_LU, TILEGX_OPC_MULA_LS_LS, TILEGX_OPC_MULA_LS_LU, 1200 + TILEGX_OPC_MULA_LU_LU, TILEGX_OPC_MULX, TILEGX_OPC_MUL_HS_HS, 1201 + TILEGX_OPC_MUL_HS_HU, TILEGX_OPC_MUL_HS_LS, TILEGX_OPC_MUL_HS_LU, 1202 + TILEGX_OPC_MUL_HU_HU, TILEGX_OPC_MUL_HU_LS, TILEGX_OPC_MUL_HU_LU, 1203 + TILEGX_OPC_MUL_LS_LS, TILEGX_OPC_MUL_LS_LU, TILEGX_OPC_MUL_LU_LU, 1204 + TILEGX_OPC_MZ, 1205 + BITFIELD(18, 4) /* index 671 */, 1206 + TILEGX_OPC_NOR, CHILD(688), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX, 1207 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADDX, TILEGX_OPC_SHL2ADD, 1208 + TILEGX_OPC_SHL3ADDX, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHLX, TILEGX_OPC_SHL, 1209 + TILEGX_OPC_SHRS, TILEGX_OPC_SHRUX, TILEGX_OPC_SHRU, TILEGX_OPC_SHUFFLEBYTES, 1210 + TILEGX_OPC_SUBXSC, 1211 + BITFIELD(12, 2) /* index 688 */, 1212 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(693), 1213 + BITFIELD(14, 2) /* index 693 */, 1214 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(698), 1215 + BITFIELD(16, 2) /* index 698 */, 1216 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE, 1217 + BITFIELD(18, 4) /* index 703 */, 1218 + TILEGX_OPC_SUBX, TILEGX_OPC_SUB, CHILD(720), TILEGX_OPC_V1ADDUC, 1219 + TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADIFFU, TILEGX_OPC_V1AVGU, 1220 + TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLEU, 1221 + TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPNE, 1222 + TILEGX_OPC_V1DDOTPUSA, TILEGX_OPC_V1DDOTPUS, TILEGX_OPC_V1DOTPA, 1223 + BITFIELD(12, 4) /* index 720 */, 1224 + TILEGX_OPC_NONE, CHILD(737), CHILD(742), CHILD(747), CHILD(752), CHILD(757), 1225 + CHILD(762), CHILD(767), CHILD(772), CHILD(777), CHILD(782), CHILD(787), 1226 + CHILD(792), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1227 + BITFIELD(16, 2) /* index 737 */, 1228 + TILEGX_OPC_CLZ, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1229 + BITFIELD(16, 2) /* index 742 */, 1230 + TILEGX_OPC_CTZ, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1231 + BITFIELD(16, 2) /* index 747 */, 1232 + TILEGX_OPC_FNOP, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1233 + BITFIELD(16, 2) /* index 752 */, 1234 + TILEGX_OPC_FSINGLE_PACK1, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1235 + BITFIELD(16, 2) /* index 757 */, 1236 + TILEGX_OPC_NOP, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1237 + BITFIELD(16, 2) /* index 762 */, 1238 + TILEGX_OPC_PCNT, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1239 + BITFIELD(16, 2) /* index 767 */, 1240 + TILEGX_OPC_REVBITS, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1241 + BITFIELD(16, 2) /* index 772 */, 1242 + TILEGX_OPC_REVBYTES, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1243 + BITFIELD(16, 2) /* index 777 */, 1244 + TILEGX_OPC_TBLIDXB0, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1245 + BITFIELD(16, 2) /* index 782 */, 1246 + TILEGX_OPC_TBLIDXB1, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1247 + BITFIELD(16, 2) /* index 787 */, 1248 + TILEGX_OPC_TBLIDXB2, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1249 + BITFIELD(16, 2) /* index 792 */, 1250 + TILEGX_OPC_TBLIDXB3, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1251 + BITFIELD(18, 4) /* index 797 */, 1252 + TILEGX_OPC_V1DOTPUSA, TILEGX_OPC_V1DOTPUS, TILEGX_OPC_V1DOTP, 1253 + TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1MAXU, 1254 + TILEGX_OPC_V1MINU, TILEGX_OPC_V1MNZ, TILEGX_OPC_V1MULTU, TILEGX_OPC_V1MULUS, 1255 + TILEGX_OPC_V1MULU, TILEGX_OPC_V1MZ, TILEGX_OPC_V1SADAU, TILEGX_OPC_V1SADU, 1256 + TILEGX_OPC_V1SHL, TILEGX_OPC_V1SHRS, 1257 + BITFIELD(18, 4) /* index 814 */, 1258 + TILEGX_OPC_V1SHRU, TILEGX_OPC_V1SUBUC, TILEGX_OPC_V1SUB, TILEGX_OPC_V2ADDSC, 1259 + TILEGX_OPC_V2ADD, TILEGX_OPC_V2ADIFFS, TILEGX_OPC_V2AVGS, 1260 + TILEGX_OPC_V2CMPEQ, TILEGX_OPC_V2CMPLES, TILEGX_OPC_V2CMPLEU, 1261 + TILEGX_OPC_V2CMPLTS, TILEGX_OPC_V2CMPLTU, TILEGX_OPC_V2CMPNE, 1262 + TILEGX_OPC_V2DOTPA, TILEGX_OPC_V2DOTP, TILEGX_OPC_V2INT_H, 1263 + BITFIELD(18, 4) /* index 831 */, 1264 + TILEGX_OPC_V2INT_L, TILEGX_OPC_V2MAXS, TILEGX_OPC_V2MINS, TILEGX_OPC_V2MNZ, 1265 + TILEGX_OPC_V2MULFSC, TILEGX_OPC_V2MULS, TILEGX_OPC_V2MULTS, TILEGX_OPC_V2MZ, 1266 + TILEGX_OPC_V2PACKH, TILEGX_OPC_V2PACKL, TILEGX_OPC_V2PACKUC, 1267 + TILEGX_OPC_V2SADAS, TILEGX_OPC_V2SADAU, TILEGX_OPC_V2SADS, 1268 + TILEGX_OPC_V2SADU, TILEGX_OPC_V2SHLSC, 1269 + BITFIELD(18, 4) /* index 848 */, 1270 + TILEGX_OPC_V2SHL, TILEGX_OPC_V2SHRS, TILEGX_OPC_V2SHRU, TILEGX_OPC_V2SUBSC, 1271 + TILEGX_OPC_V2SUB, TILEGX_OPC_V4ADDSC, TILEGX_OPC_V4ADD, TILEGX_OPC_V4INT_H, 1272 + TILEGX_OPC_V4INT_L, TILEGX_OPC_V4PACKSC, TILEGX_OPC_V4SHLSC, 1273 + TILEGX_OPC_V4SHL, TILEGX_OPC_V4SHRS, TILEGX_OPC_V4SHRU, TILEGX_OPC_V4SUBSC, 1274 + TILEGX_OPC_V4SUB, 1275 + BITFIELD(18, 3) /* index 865 */, 1276 + CHILD(874), CHILD(877), CHILD(880), CHILD(883), CHILD(886), TILEGX_OPC_NONE, 1277 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1278 + BITFIELD(21, 1) /* index 874 */, 1279 + TILEGX_OPC_XOR, TILEGX_OPC_NONE, 1280 + BITFIELD(21, 1) /* index 877 */, 1281 + TILEGX_OPC_V1DDOTPUA, TILEGX_OPC_NONE, 1282 + BITFIELD(21, 1) /* index 880 */, 1283 + TILEGX_OPC_V1DDOTPU, TILEGX_OPC_NONE, 1284 + BITFIELD(21, 1) /* index 883 */, 1285 + TILEGX_OPC_V1DOTPUA, TILEGX_OPC_NONE, 1286 + BITFIELD(21, 1) /* index 886 */, 1287 + TILEGX_OPC_V1DOTPU, TILEGX_OPC_NONE, 1288 + BITFIELD(18, 4) /* index 889 */, 1289 + TILEGX_OPC_NONE, TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHLXI, 1290 + TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, TILEGX_OPC_SHRUXI, TILEGX_OPC_V1SHLI, 1291 + TILEGX_OPC_V1SHRSI, TILEGX_OPC_V1SHRUI, TILEGX_OPC_V2SHLI, 1292 + TILEGX_OPC_V2SHRSI, TILEGX_OPC_V2SHRUI, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1293 + TILEGX_OPC_NONE, 1294 + BITFIELD(0, 2) /* index 906 */, 1295 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1296 + CHILD(911), 1297 + BITFIELD(2, 2) /* index 911 */, 1298 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1299 + CHILD(916), 1300 + BITFIELD(4, 2) /* index 916 */, 1301 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1302 + CHILD(921), 1303 + BITFIELD(6, 2) /* index 921 */, 1304 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1305 + CHILD(926), 1306 + BITFIELD(8, 2) /* index 926 */, 1307 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1308 + CHILD(931), 1309 + BITFIELD(10, 2) /* index 931 */, 1310 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1311 + TILEGX_OPC_INFOL, 1312 + }; 1313 + 1314 + static const unsigned short decode_X1_fsm[1206] = 1315 + { 1316 + BITFIELD(53, 9) /* index 0 */, 1317 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1318 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1319 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1320 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1321 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1322 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1323 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1324 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1325 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1326 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), CHILD(513), 1327 + CHILD(513), CHILD(513), CHILD(513), CHILD(513), TILEGX_OPC_ADDXLI, 1328 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1329 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1330 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1331 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1332 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1333 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1334 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1335 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1336 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1337 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1338 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1339 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1340 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1341 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1342 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, 1343 + TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_ADDXLI, TILEGX_OPC_NONE, 1344 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1345 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1346 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1347 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1348 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1349 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1350 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1351 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_BEQZT, 1352 + TILEGX_OPC_BEQZT, TILEGX_OPC_BEQZ, TILEGX_OPC_BEQZ, TILEGX_OPC_BGEZT, 1353 + TILEGX_OPC_BGEZT, TILEGX_OPC_BGEZ, TILEGX_OPC_BGEZ, TILEGX_OPC_BGTZT, 1354 + TILEGX_OPC_BGTZT, TILEGX_OPC_BGTZ, TILEGX_OPC_BGTZ, TILEGX_OPC_BLBCT, 1355 + TILEGX_OPC_BLBCT, TILEGX_OPC_BLBC, TILEGX_OPC_BLBC, TILEGX_OPC_BLBST, 1356 + TILEGX_OPC_BLBST, TILEGX_OPC_BLBS, TILEGX_OPC_BLBS, TILEGX_OPC_BLEZT, 1357 + TILEGX_OPC_BLEZT, TILEGX_OPC_BLEZ, TILEGX_OPC_BLEZ, TILEGX_OPC_BLTZT, 1358 + TILEGX_OPC_BLTZT, TILEGX_OPC_BLTZ, TILEGX_OPC_BLTZ, TILEGX_OPC_BNEZT, 1359 + TILEGX_OPC_BNEZT, TILEGX_OPC_BNEZ, TILEGX_OPC_BNEZ, CHILD(528), CHILD(578), 1360 + CHILD(598), CHILD(663), CHILD(683), CHILD(688), CHILD(693), CHILD(698), 1361 + CHILD(703), CHILD(708), CHILD(713), CHILD(718), TILEGX_OPC_NONE, 1362 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1363 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1364 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1365 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1366 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1367 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1368 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1369 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1370 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1371 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1372 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1373 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1374 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_JAL, 1375 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1376 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1377 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1378 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1379 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1380 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1381 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, 1382 + TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_JAL, TILEGX_OPC_J, TILEGX_OPC_J, 1383 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1384 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1385 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1386 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1387 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1388 + TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, TILEGX_OPC_J, 1389 + CHILD(723), CHILD(740), CHILD(772), CHILD(789), CHILD(1108), CHILD(1125), 1390 + CHILD(1142), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1391 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1392 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1393 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1394 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1395 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1396 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1397 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1398 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1399 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1400 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1401 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1402 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1403 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1404 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1159), TILEGX_OPC_NONE, 1405 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1406 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1407 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1408 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1409 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1410 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1411 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1412 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1413 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1414 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1415 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1416 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1417 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1418 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1419 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1420 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, CHILD(1176), CHILD(1176), CHILD(1176), 1421 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1422 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1423 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1424 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1425 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1426 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1427 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1428 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1429 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1430 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1431 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1432 + CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), CHILD(1176), 1433 + CHILD(1176), 1434 + BITFIELD(37, 2) /* index 513 */, 1435 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(518), 1436 + BITFIELD(39, 2) /* index 518 */, 1437 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, CHILD(523), 1438 + BITFIELD(41, 2) /* index 523 */, 1439 + TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_ADDLI, TILEGX_OPC_MOVELI, 1440 + BITFIELD(51, 2) /* index 528 */, 1441 + TILEGX_OPC_NONE, CHILD(533), TILEGX_OPC_ADDXI, CHILD(548), 1442 + BITFIELD(37, 2) /* index 533 */, 1443 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(538), 1444 + BITFIELD(39, 2) /* index 538 */, 1445 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(543), 1446 + BITFIELD(41, 2) /* index 543 */, 1447 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_MOVEI, 1448 + BITFIELD(31, 2) /* index 548 */, 1449 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(553), 1450 + BITFIELD(33, 2) /* index 553 */, 1451 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(558), 1452 + BITFIELD(35, 2) /* index 558 */, 1453 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(563), 1454 + BITFIELD(37, 2) /* index 563 */, 1455 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(568), 1456 + BITFIELD(39, 2) /* index 568 */, 1457 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(573), 1458 + BITFIELD(41, 2) /* index 573 */, 1459 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_INFO, 1460 + BITFIELD(51, 2) /* index 578 */, 1461 + TILEGX_OPC_CMPEQI, TILEGX_OPC_CMPLTSI, TILEGX_OPC_CMPLTUI, CHILD(583), 1462 + BITFIELD(31, 2) /* index 583 */, 1463 + TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, CHILD(588), 1464 + BITFIELD(33, 2) /* index 588 */, 1465 + TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, CHILD(593), 1466 + BITFIELD(35, 2) /* index 593 */, 1467 + TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, TILEGX_OPC_LD1S_ADD, 1468 + TILEGX_OPC_PREFETCH_ADD_L1_FAULT, 1469 + BITFIELD(51, 2) /* index 598 */, 1470 + CHILD(603), CHILD(618), CHILD(633), CHILD(648), 1471 + BITFIELD(31, 2) /* index 603 */, 1472 + TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, CHILD(608), 1473 + BITFIELD(33, 2) /* index 608 */, 1474 + TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, CHILD(613), 1475 + BITFIELD(35, 2) /* index 613 */, 1476 + TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, TILEGX_OPC_LD1U_ADD, 1477 + TILEGX_OPC_PREFETCH_ADD_L1, 1478 + BITFIELD(31, 2) /* index 618 */, 1479 + TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, CHILD(623), 1480 + BITFIELD(33, 2) /* index 623 */, 1481 + TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, CHILD(628), 1482 + BITFIELD(35, 2) /* index 628 */, 1483 + TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, TILEGX_OPC_LD2S_ADD, 1484 + TILEGX_OPC_PREFETCH_ADD_L2_FAULT, 1485 + BITFIELD(31, 2) /* index 633 */, 1486 + TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, CHILD(638), 1487 + BITFIELD(33, 2) /* index 638 */, 1488 + TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, CHILD(643), 1489 + BITFIELD(35, 2) /* index 643 */, 1490 + TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, TILEGX_OPC_LD2U_ADD, 1491 + TILEGX_OPC_PREFETCH_ADD_L2, 1492 + BITFIELD(31, 2) /* index 648 */, 1493 + TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(653), 1494 + BITFIELD(33, 2) /* index 653 */, 1495 + TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, CHILD(658), 1496 + BITFIELD(35, 2) /* index 658 */, 1497 + TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, TILEGX_OPC_LD4S_ADD, 1498 + TILEGX_OPC_PREFETCH_ADD_L3_FAULT, 1499 + BITFIELD(51, 2) /* index 663 */, 1500 + CHILD(668), TILEGX_OPC_LDNT1S_ADD, TILEGX_OPC_LDNT1U_ADD, 1501 + TILEGX_OPC_LDNT2S_ADD, 1502 + BITFIELD(31, 2) /* index 668 */, 1503 + TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(673), 1504 + BITFIELD(33, 2) /* index 673 */, 1505 + TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, CHILD(678), 1506 + BITFIELD(35, 2) /* index 678 */, 1507 + TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, TILEGX_OPC_LD4U_ADD, 1508 + TILEGX_OPC_PREFETCH_ADD_L3, 1509 + BITFIELD(51, 2) /* index 683 */, 1510 + TILEGX_OPC_LDNT2U_ADD, TILEGX_OPC_LDNT4S_ADD, TILEGX_OPC_LDNT4U_ADD, 1511 + TILEGX_OPC_LDNT_ADD, 1512 + BITFIELD(51, 2) /* index 688 */, 1513 + TILEGX_OPC_LD_ADD, TILEGX_OPC_LDNA_ADD, TILEGX_OPC_MFSPR, TILEGX_OPC_MTSPR, 1514 + BITFIELD(51, 2) /* index 693 */, 1515 + TILEGX_OPC_ORI, TILEGX_OPC_ST1_ADD, TILEGX_OPC_ST2_ADD, TILEGX_OPC_ST4_ADD, 1516 + BITFIELD(51, 2) /* index 698 */, 1517 + TILEGX_OPC_STNT1_ADD, TILEGX_OPC_STNT2_ADD, TILEGX_OPC_STNT4_ADD, 1518 + TILEGX_OPC_STNT_ADD, 1519 + BITFIELD(51, 2) /* index 703 */, 1520 + TILEGX_OPC_ST_ADD, TILEGX_OPC_V1ADDI, TILEGX_OPC_V1CMPEQI, 1521 + TILEGX_OPC_V1CMPLTSI, 1522 + BITFIELD(51, 2) /* index 708 */, 1523 + TILEGX_OPC_V1CMPLTUI, TILEGX_OPC_V1MAXUI, TILEGX_OPC_V1MINUI, 1524 + TILEGX_OPC_V2ADDI, 1525 + BITFIELD(51, 2) /* index 713 */, 1526 + TILEGX_OPC_V2CMPEQI, TILEGX_OPC_V2CMPLTSI, TILEGX_OPC_V2CMPLTUI, 1527 + TILEGX_OPC_V2MAXSI, 1528 + BITFIELD(51, 2) /* index 718 */, 1529 + TILEGX_OPC_V2MINSI, TILEGX_OPC_XORI, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1530 + BITFIELD(49, 4) /* index 723 */, 1531 + TILEGX_OPC_NONE, TILEGX_OPC_ADDXSC, TILEGX_OPC_ADDX, TILEGX_OPC_ADD, 1532 + TILEGX_OPC_AND, TILEGX_OPC_CMPEQ, TILEGX_OPC_CMPEXCH4, TILEGX_OPC_CMPEXCH, 1533 + TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU, 1534 + TILEGX_OPC_CMPNE, TILEGX_OPC_DBLALIGN2, TILEGX_OPC_DBLALIGN4, 1535 + TILEGX_OPC_DBLALIGN6, 1536 + BITFIELD(49, 4) /* index 740 */, 1537 + TILEGX_OPC_EXCH4, TILEGX_OPC_EXCH, TILEGX_OPC_FETCHADD4, 1538 + TILEGX_OPC_FETCHADDGEZ4, TILEGX_OPC_FETCHADDGEZ, TILEGX_OPC_FETCHADD, 1539 + TILEGX_OPC_FETCHAND4, TILEGX_OPC_FETCHAND, TILEGX_OPC_FETCHOR4, 1540 + TILEGX_OPC_FETCHOR, TILEGX_OPC_MNZ, TILEGX_OPC_MZ, TILEGX_OPC_NOR, 1541 + CHILD(757), TILEGX_OPC_ROTL, TILEGX_OPC_SHL1ADDX, 1542 + BITFIELD(43, 2) /* index 757 */, 1543 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(762), 1544 + BITFIELD(45, 2) /* index 762 */, 1545 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(767), 1546 + BITFIELD(47, 2) /* index 767 */, 1547 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE, 1548 + BITFIELD(49, 4) /* index 772 */, 1549 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADDX, TILEGX_OPC_SHL2ADD, 1550 + TILEGX_OPC_SHL3ADDX, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHLX, TILEGX_OPC_SHL, 1551 + TILEGX_OPC_SHRS, TILEGX_OPC_SHRUX, TILEGX_OPC_SHRU, TILEGX_OPC_ST1, 1552 + TILEGX_OPC_ST2, TILEGX_OPC_ST4, TILEGX_OPC_STNT1, TILEGX_OPC_STNT2, 1553 + TILEGX_OPC_STNT4, 1554 + BITFIELD(46, 7) /* index 789 */, 1555 + TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, 1556 + TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, TILEGX_OPC_STNT, 1557 + TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, 1558 + TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_ST, TILEGX_OPC_SUBXSC, 1559 + TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBXSC, 1560 + TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBXSC, TILEGX_OPC_SUBX, 1561 + TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, 1562 + TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUBX, TILEGX_OPC_SUB, 1563 + TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, 1564 + TILEGX_OPC_SUB, TILEGX_OPC_SUB, TILEGX_OPC_SUB, CHILD(918), CHILD(927), 1565 + CHILD(1006), CHILD(1090), CHILD(1099), TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1566 + TILEGX_OPC_NONE, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, 1567 + TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, 1568 + TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADDUC, TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD, 1569 + TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD, 1570 + TILEGX_OPC_V1ADD, TILEGX_OPC_V1ADD, TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPEQ, 1571 + TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPEQ, 1572 + TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPEQ, TILEGX_OPC_V1CMPEQ, 1573 + TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLES, 1574 + TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLES, 1575 + TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLES, TILEGX_OPC_V1CMPLEU, 1576 + TILEGX_OPC_V1CMPLEU, TILEGX_OPC_V1CMPLEU, TILEGX_OPC_V1CMPLEU, 1577 + TILEGX_OPC_V1CMPLEU, TILEGX_OPC_V1CMPLEU, TILEGX_OPC_V1CMPLEU, 1578 + TILEGX_OPC_V1CMPLEU, TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTS, 1579 + TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTS, 1580 + TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTS, TILEGX_OPC_V1CMPLTS, 1581 + TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPLTU, 1582 + TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPLTU, 1583 + TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPLTU, TILEGX_OPC_V1CMPNE, 1584 + TILEGX_OPC_V1CMPNE, TILEGX_OPC_V1CMPNE, TILEGX_OPC_V1CMPNE, 1585 + TILEGX_OPC_V1CMPNE, TILEGX_OPC_V1CMPNE, TILEGX_OPC_V1CMPNE, 1586 + TILEGX_OPC_V1CMPNE, TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_H, 1587 + TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_H, 1588 + TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_H, TILEGX_OPC_V1INT_H, 1589 + TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, 1590 + TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, 1591 + TILEGX_OPC_V1INT_L, TILEGX_OPC_V1INT_L, 1592 + BITFIELD(43, 3) /* index 918 */, 1593 + TILEGX_OPC_NONE, TILEGX_OPC_DRAIN, TILEGX_OPC_DTLBPR, TILEGX_OPC_FINV, 1594 + TILEGX_OPC_FLUSHWB, TILEGX_OPC_FLUSH, TILEGX_OPC_FNOP, TILEGX_OPC_ICOH, 1595 + BITFIELD(43, 3) /* index 927 */, 1596 + CHILD(936), TILEGX_OPC_INV, TILEGX_OPC_IRET, TILEGX_OPC_JALRP, 1597 + TILEGX_OPC_JALR, TILEGX_OPC_JRP, TILEGX_OPC_JR, CHILD(991), 1598 + BITFIELD(31, 2) /* index 936 */, 1599 + CHILD(941), CHILD(966), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1600 + BITFIELD(33, 2) /* index 941 */, 1601 + TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(946), 1602 + BITFIELD(35, 2) /* index 946 */, 1603 + TILEGX_OPC_ILL, CHILD(951), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1604 + BITFIELD(37, 2) /* index 951 */, 1605 + TILEGX_OPC_ILL, CHILD(956), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1606 + BITFIELD(39, 2) /* index 956 */, 1607 + TILEGX_OPC_ILL, CHILD(961), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1608 + BITFIELD(41, 2) /* index 961 */, 1609 + TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_BPT, TILEGX_OPC_ILL, 1610 + BITFIELD(33, 2) /* index 966 */, 1611 + TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_ILL, CHILD(971), 1612 + BITFIELD(35, 2) /* index 971 */, 1613 + TILEGX_OPC_ILL, CHILD(976), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1614 + BITFIELD(37, 2) /* index 976 */, 1615 + TILEGX_OPC_ILL, CHILD(981), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1616 + BITFIELD(39, 2) /* index 981 */, 1617 + TILEGX_OPC_ILL, CHILD(986), TILEGX_OPC_ILL, TILEGX_OPC_ILL, 1618 + BITFIELD(41, 2) /* index 986 */, 1619 + TILEGX_OPC_ILL, TILEGX_OPC_ILL, TILEGX_OPC_RAISE, TILEGX_OPC_ILL, 1620 + BITFIELD(31, 2) /* index 991 */, 1621 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(996), 1622 + BITFIELD(33, 2) /* index 996 */, 1623 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(1001), 1624 + BITFIELD(35, 2) /* index 1001 */, 1625 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, 1626 + TILEGX_OPC_PREFETCH_L1_FAULT, 1627 + BITFIELD(43, 3) /* index 1006 */, 1628 + CHILD(1015), CHILD(1030), CHILD(1045), CHILD(1060), CHILD(1075), 1629 + TILEGX_OPC_LDNA, TILEGX_OPC_LDNT1S, TILEGX_OPC_LDNT1U, 1630 + BITFIELD(31, 2) /* index 1015 */, 1631 + TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1020), 1632 + BITFIELD(33, 2) /* index 1020 */, 1633 + TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(1025), 1634 + BITFIELD(35, 2) /* index 1025 */, 1635 + TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_PREFETCH, 1636 + BITFIELD(31, 2) /* index 1030 */, 1637 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1035), 1638 + BITFIELD(33, 2) /* index 1035 */, 1639 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(1040), 1640 + BITFIELD(35, 2) /* index 1040 */, 1641 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, 1642 + TILEGX_OPC_PREFETCH_L2_FAULT, 1643 + BITFIELD(31, 2) /* index 1045 */, 1644 + TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1050), 1645 + BITFIELD(33, 2) /* index 1050 */, 1646 + TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(1055), 1647 + BITFIELD(35, 2) /* index 1055 */, 1648 + TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_PREFETCH_L2, 1649 + BITFIELD(31, 2) /* index 1060 */, 1650 + TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1065), 1651 + BITFIELD(33, 2) /* index 1065 */, 1652 + TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(1070), 1653 + BITFIELD(35, 2) /* index 1070 */, 1654 + TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, 1655 + TILEGX_OPC_PREFETCH_L3_FAULT, 1656 + BITFIELD(31, 2) /* index 1075 */, 1657 + TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1080), 1658 + BITFIELD(33, 2) /* index 1080 */, 1659 + TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(1085), 1660 + BITFIELD(35, 2) /* index 1085 */, 1661 + TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_PREFETCH_L3, 1662 + BITFIELD(43, 3) /* index 1090 */, 1663 + TILEGX_OPC_LDNT2S, TILEGX_OPC_LDNT2U, TILEGX_OPC_LDNT4S, TILEGX_OPC_LDNT4U, 1664 + TILEGX_OPC_LDNT, TILEGX_OPC_LD, TILEGX_OPC_LNK, TILEGX_OPC_MF, 1665 + BITFIELD(43, 3) /* index 1099 */, 1666 + TILEGX_OPC_NAP, TILEGX_OPC_NOP, TILEGX_OPC_SWINT0, TILEGX_OPC_SWINT1, 1667 + TILEGX_OPC_SWINT2, TILEGX_OPC_SWINT3, TILEGX_OPC_WH64, TILEGX_OPC_NONE, 1668 + BITFIELD(49, 4) /* index 1108 */, 1669 + TILEGX_OPC_V1MAXU, TILEGX_OPC_V1MINU, TILEGX_OPC_V1MNZ, TILEGX_OPC_V1MZ, 1670 + TILEGX_OPC_V1SHL, TILEGX_OPC_V1SHRS, TILEGX_OPC_V1SHRU, TILEGX_OPC_V1SUBUC, 1671 + TILEGX_OPC_V1SUB, TILEGX_OPC_V2ADDSC, TILEGX_OPC_V2ADD, TILEGX_OPC_V2CMPEQ, 1672 + TILEGX_OPC_V2CMPLES, TILEGX_OPC_V2CMPLEU, TILEGX_OPC_V2CMPLTS, 1673 + TILEGX_OPC_V2CMPLTU, 1674 + BITFIELD(49, 4) /* index 1125 */, 1675 + TILEGX_OPC_V2CMPNE, TILEGX_OPC_V2INT_H, TILEGX_OPC_V2INT_L, 1676 + TILEGX_OPC_V2MAXS, TILEGX_OPC_V2MINS, TILEGX_OPC_V2MNZ, TILEGX_OPC_V2MZ, 1677 + TILEGX_OPC_V2PACKH, TILEGX_OPC_V2PACKL, TILEGX_OPC_V2PACKUC, 1678 + TILEGX_OPC_V2SHLSC, TILEGX_OPC_V2SHL, TILEGX_OPC_V2SHRS, TILEGX_OPC_V2SHRU, 1679 + TILEGX_OPC_V2SUBSC, TILEGX_OPC_V2SUB, 1680 + BITFIELD(49, 4) /* index 1142 */, 1681 + TILEGX_OPC_V4ADDSC, TILEGX_OPC_V4ADD, TILEGX_OPC_V4INT_H, 1682 + TILEGX_OPC_V4INT_L, TILEGX_OPC_V4PACKSC, TILEGX_OPC_V4SHLSC, 1683 + TILEGX_OPC_V4SHL, TILEGX_OPC_V4SHRS, TILEGX_OPC_V4SHRU, TILEGX_OPC_V4SUBSC, 1684 + TILEGX_OPC_V4SUB, TILEGX_OPC_XOR, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1685 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1686 + BITFIELD(49, 4) /* index 1159 */, 1687 + TILEGX_OPC_NONE, TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHLXI, 1688 + TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, TILEGX_OPC_SHRUXI, TILEGX_OPC_V1SHLI, 1689 + TILEGX_OPC_V1SHRSI, TILEGX_OPC_V1SHRUI, TILEGX_OPC_V2SHLI, 1690 + TILEGX_OPC_V2SHRSI, TILEGX_OPC_V2SHRUI, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1691 + TILEGX_OPC_NONE, 1692 + BITFIELD(31, 2) /* index 1176 */, 1693 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1694 + CHILD(1181), 1695 + BITFIELD(33, 2) /* index 1181 */, 1696 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1697 + CHILD(1186), 1698 + BITFIELD(35, 2) /* index 1186 */, 1699 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1700 + CHILD(1191), 1701 + BITFIELD(37, 2) /* index 1191 */, 1702 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1703 + CHILD(1196), 1704 + BITFIELD(39, 2) /* index 1196 */, 1705 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1706 + CHILD(1201), 1707 + BITFIELD(41, 2) /* index 1201 */, 1708 + TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, TILEGX_OPC_SHL16INSLI, 1709 + TILEGX_OPC_INFOL, 1710 + }; 1711 + 1712 + static const unsigned short decode_Y0_fsm[178] = 1713 + { 1714 + BITFIELD(27, 4) /* index 0 */, 1715 + CHILD(17), TILEGX_OPC_ADDXI, CHILD(32), TILEGX_OPC_CMPEQI, 1716 + TILEGX_OPC_CMPLTSI, CHILD(62), CHILD(67), CHILD(118), CHILD(123), 1717 + CHILD(128), CHILD(133), CHILD(153), CHILD(158), CHILD(163), CHILD(168), 1718 + CHILD(173), 1719 + BITFIELD(6, 2) /* index 17 */, 1720 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(22), 1721 + BITFIELD(8, 2) /* index 22 */, 1722 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(27), 1723 + BITFIELD(10, 2) /* index 27 */, 1724 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_MOVEI, 1725 + BITFIELD(0, 2) /* index 32 */, 1726 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(37), 1727 + BITFIELD(2, 2) /* index 37 */, 1728 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(42), 1729 + BITFIELD(4, 2) /* index 42 */, 1730 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(47), 1731 + BITFIELD(6, 2) /* index 47 */, 1732 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(52), 1733 + BITFIELD(8, 2) /* index 52 */, 1734 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(57), 1735 + BITFIELD(10, 2) /* index 57 */, 1736 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_INFO, 1737 + BITFIELD(18, 2) /* index 62 */, 1738 + TILEGX_OPC_ADDX, TILEGX_OPC_ADD, TILEGX_OPC_SUBX, TILEGX_OPC_SUB, 1739 + BITFIELD(15, 5) /* index 67 */, 1740 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, 1741 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, 1742 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADD, 1743 + TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, 1744 + TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, 1745 + TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, 1746 + TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, 1747 + TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, CHILD(100), 1748 + CHILD(109), TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1749 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1750 + BITFIELD(12, 3) /* index 100 */, 1751 + TILEGX_OPC_NONE, TILEGX_OPC_CLZ, TILEGX_OPC_CTZ, TILEGX_OPC_FNOP, 1752 + TILEGX_OPC_FSINGLE_PACK1, TILEGX_OPC_NOP, TILEGX_OPC_PCNT, 1753 + TILEGX_OPC_REVBITS, 1754 + BITFIELD(12, 3) /* index 109 */, 1755 + TILEGX_OPC_REVBYTES, TILEGX_OPC_TBLIDXB0, TILEGX_OPC_TBLIDXB1, 1756 + TILEGX_OPC_TBLIDXB2, TILEGX_OPC_TBLIDXB3, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1757 + TILEGX_OPC_NONE, 1758 + BITFIELD(18, 2) /* index 118 */, 1759 + TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU, 1760 + BITFIELD(18, 2) /* index 123 */, 1761 + TILEGX_OPC_CMPEQ, TILEGX_OPC_CMPNE, TILEGX_OPC_MULAX, TILEGX_OPC_MULX, 1762 + BITFIELD(18, 2) /* index 128 */, 1763 + TILEGX_OPC_CMOVEQZ, TILEGX_OPC_CMOVNEZ, TILEGX_OPC_MNZ, TILEGX_OPC_MZ, 1764 + BITFIELD(18, 2) /* index 133 */, 1765 + TILEGX_OPC_AND, TILEGX_OPC_NOR, CHILD(138), TILEGX_OPC_XOR, 1766 + BITFIELD(12, 2) /* index 138 */, 1767 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(143), 1768 + BITFIELD(14, 2) /* index 143 */, 1769 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(148), 1770 + BITFIELD(16, 2) /* index 148 */, 1771 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE, 1772 + BITFIELD(18, 2) /* index 153 */, 1773 + TILEGX_OPC_ROTL, TILEGX_OPC_SHL, TILEGX_OPC_SHRS, TILEGX_OPC_SHRU, 1774 + BITFIELD(18, 2) /* index 158 */, 1775 + TILEGX_OPC_NONE, TILEGX_OPC_SHL1ADDX, TILEGX_OPC_SHL2ADDX, 1776 + TILEGX_OPC_SHL3ADDX, 1777 + BITFIELD(18, 2) /* index 163 */, 1778 + TILEGX_OPC_MUL_HS_HS, TILEGX_OPC_MUL_HU_HU, TILEGX_OPC_MUL_LS_LS, 1779 + TILEGX_OPC_MUL_LU_LU, 1780 + BITFIELD(18, 2) /* index 168 */, 1781 + TILEGX_OPC_MULA_HS_HS, TILEGX_OPC_MULA_HU_HU, TILEGX_OPC_MULA_LS_LS, 1782 + TILEGX_OPC_MULA_LU_LU, 1783 + BITFIELD(18, 2) /* index 173 */, 1784 + TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, 1785 + }; 1786 + 1787 + static const unsigned short decode_Y1_fsm[167] = 1788 + { 1789 + BITFIELD(58, 4) /* index 0 */, 1790 + TILEGX_OPC_NONE, CHILD(17), TILEGX_OPC_ADDXI, CHILD(32), TILEGX_OPC_CMPEQI, 1791 + TILEGX_OPC_CMPLTSI, CHILD(62), CHILD(67), CHILD(117), CHILD(122), 1792 + CHILD(127), CHILD(132), CHILD(152), CHILD(157), CHILD(162), TILEGX_OPC_NONE, 1793 + BITFIELD(37, 2) /* index 17 */, 1794 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(22), 1795 + BITFIELD(39, 2) /* index 22 */, 1796 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, CHILD(27), 1797 + BITFIELD(41, 2) /* index 27 */, 1798 + TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_ADDI, TILEGX_OPC_MOVEI, 1799 + BITFIELD(31, 2) /* index 32 */, 1800 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(37), 1801 + BITFIELD(33, 2) /* index 37 */, 1802 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(42), 1803 + BITFIELD(35, 2) /* index 42 */, 1804 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(47), 1805 + BITFIELD(37, 2) /* index 47 */, 1806 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(52), 1807 + BITFIELD(39, 2) /* index 52 */, 1808 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, CHILD(57), 1809 + BITFIELD(41, 2) /* index 57 */, 1810 + TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_ANDI, TILEGX_OPC_INFO, 1811 + BITFIELD(49, 2) /* index 62 */, 1812 + TILEGX_OPC_ADDX, TILEGX_OPC_ADD, TILEGX_OPC_SUBX, TILEGX_OPC_SUB, 1813 + BITFIELD(47, 4) /* index 67 */, 1814 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL1ADD, 1815 + TILEGX_OPC_SHL1ADD, TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, 1816 + TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL2ADD, TILEGX_OPC_SHL3ADD, 1817 + TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, TILEGX_OPC_SHL3ADD, CHILD(84), 1818 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_NONE, 1819 + BITFIELD(43, 3) /* index 84 */, 1820 + CHILD(93), CHILD(96), CHILD(99), CHILD(102), CHILD(105), CHILD(108), 1821 + CHILD(111), CHILD(114), 1822 + BITFIELD(46, 1) /* index 93 */, 1823 + TILEGX_OPC_NONE, TILEGX_OPC_FNOP, 1824 + BITFIELD(46, 1) /* index 96 */, 1825 + TILEGX_OPC_NONE, TILEGX_OPC_ILL, 1826 + BITFIELD(46, 1) /* index 99 */, 1827 + TILEGX_OPC_NONE, TILEGX_OPC_JALRP, 1828 + BITFIELD(46, 1) /* index 102 */, 1829 + TILEGX_OPC_NONE, TILEGX_OPC_JALR, 1830 + BITFIELD(46, 1) /* index 105 */, 1831 + TILEGX_OPC_NONE, TILEGX_OPC_JRP, 1832 + BITFIELD(46, 1) /* index 108 */, 1833 + TILEGX_OPC_NONE, TILEGX_OPC_JR, 1834 + BITFIELD(46, 1) /* index 111 */, 1835 + TILEGX_OPC_NONE, TILEGX_OPC_LNK, 1836 + BITFIELD(46, 1) /* index 114 */, 1837 + TILEGX_OPC_NONE, TILEGX_OPC_NOP, 1838 + BITFIELD(49, 2) /* index 117 */, 1839 + TILEGX_OPC_CMPLES, TILEGX_OPC_CMPLEU, TILEGX_OPC_CMPLTS, TILEGX_OPC_CMPLTU, 1840 + BITFIELD(49, 2) /* index 122 */, 1841 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_CMPEQ, TILEGX_OPC_CMPNE, 1842 + BITFIELD(49, 2) /* index 127 */, 1843 + TILEGX_OPC_NONE, TILEGX_OPC_NONE, TILEGX_OPC_MNZ, TILEGX_OPC_MZ, 1844 + BITFIELD(49, 2) /* index 132 */, 1845 + TILEGX_OPC_AND, TILEGX_OPC_NOR, CHILD(137), TILEGX_OPC_XOR, 1846 + BITFIELD(43, 2) /* index 137 */, 1847 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(142), 1848 + BITFIELD(45, 2) /* index 142 */, 1849 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, CHILD(147), 1850 + BITFIELD(47, 2) /* index 147 */, 1851 + TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_OR, TILEGX_OPC_MOVE, 1852 + BITFIELD(49, 2) /* index 152 */, 1853 + TILEGX_OPC_ROTL, TILEGX_OPC_SHL, TILEGX_OPC_SHRS, TILEGX_OPC_SHRU, 1854 + BITFIELD(49, 2) /* index 157 */, 1855 + TILEGX_OPC_NONE, TILEGX_OPC_SHL1ADDX, TILEGX_OPC_SHL2ADDX, 1856 + TILEGX_OPC_SHL3ADDX, 1857 + BITFIELD(49, 2) /* index 162 */, 1858 + TILEGX_OPC_ROTLI, TILEGX_OPC_SHLI, TILEGX_OPC_SHRSI, TILEGX_OPC_SHRUI, 1859 + }; 1860 + 1861 + static const unsigned short decode_Y2_fsm[118] = 1862 + { 1863 + BITFIELD(62, 2) /* index 0 */, 1864 + TILEGX_OPC_NONE, CHILD(5), CHILD(66), CHILD(109), 1865 + BITFIELD(55, 3) /* index 5 */, 1866 + CHILD(14), CHILD(14), CHILD(14), CHILD(17), CHILD(40), CHILD(40), CHILD(40), 1867 + CHILD(43), 1868 + BITFIELD(26, 1) /* index 14 */, 1869 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1U, 1870 + BITFIELD(26, 1) /* index 17 */, 1871 + CHILD(20), CHILD(30), 1872 + BITFIELD(51, 2) /* index 20 */, 1873 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, CHILD(25), 1874 + BITFIELD(53, 2) /* index 25 */, 1875 + TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, TILEGX_OPC_LD1S, 1876 + TILEGX_OPC_PREFETCH_L1_FAULT, 1877 + BITFIELD(51, 2) /* index 30 */, 1878 + TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, CHILD(35), 1879 + BITFIELD(53, 2) /* index 35 */, 1880 + TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_LD1U, TILEGX_OPC_PREFETCH, 1881 + BITFIELD(26, 1) /* index 40 */, 1882 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2U, 1883 + BITFIELD(26, 1) /* index 43 */, 1884 + CHILD(46), CHILD(56), 1885 + BITFIELD(51, 2) /* index 46 */, 1886 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, CHILD(51), 1887 + BITFIELD(53, 2) /* index 51 */, 1888 + TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, TILEGX_OPC_LD2S, 1889 + TILEGX_OPC_PREFETCH_L2_FAULT, 1890 + BITFIELD(51, 2) /* index 56 */, 1891 + TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, CHILD(61), 1892 + BITFIELD(53, 2) /* index 61 */, 1893 + TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_LD2U, TILEGX_OPC_PREFETCH_L2, 1894 + BITFIELD(56, 2) /* index 66 */, 1895 + CHILD(71), CHILD(74), CHILD(90), CHILD(93), 1896 + BITFIELD(26, 1) /* index 71 */, 1897 + TILEGX_OPC_NONE, TILEGX_OPC_LD4S, 1898 + BITFIELD(26, 1) /* index 74 */, 1899 + TILEGX_OPC_NONE, CHILD(77), 1900 + BITFIELD(51, 2) /* index 77 */, 1901 + TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(82), 1902 + BITFIELD(53, 2) /* index 82 */, 1903 + TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, TILEGX_OPC_LD4S, CHILD(87), 1904 + BITFIELD(55, 1) /* index 87 */, 1905 + TILEGX_OPC_LD4S, TILEGX_OPC_PREFETCH_L3_FAULT, 1906 + BITFIELD(26, 1) /* index 90 */, 1907 + TILEGX_OPC_LD4U, TILEGX_OPC_LD, 1908 + BITFIELD(26, 1) /* index 93 */, 1909 + CHILD(96), TILEGX_OPC_LD, 1910 + BITFIELD(51, 2) /* index 96 */, 1911 + TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(101), 1912 + BITFIELD(53, 2) /* index 101 */, 1913 + TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, TILEGX_OPC_LD4U, CHILD(106), 1914 + BITFIELD(55, 1) /* index 106 */, 1915 + TILEGX_OPC_LD4U, TILEGX_OPC_PREFETCH_L3, 1916 + BITFIELD(26, 1) /* index 109 */, 1917 + CHILD(112), CHILD(115), 1918 + BITFIELD(57, 1) /* index 112 */, 1919 + TILEGX_OPC_ST1, TILEGX_OPC_ST4, 1920 + BITFIELD(57, 1) /* index 115 */, 1921 + TILEGX_OPC_ST2, TILEGX_OPC_ST, 1922 + }; 1923 + 1924 + #undef BITFIELD 1925 + #undef CHILD 1926 + const unsigned short * const 1927 + tilegx_bundle_decoder_fsms[TILEGX_NUM_PIPELINE_ENCODINGS] = 1928 + { 1929 + decode_X0_fsm, 1930 + decode_X1_fsm, 1931 + decode_Y0_fsm, 1932 + decode_Y1_fsm, 1933 + decode_Y2_fsm 1934 + }; 1935 + const struct tilegx_operand tilegx_operands[35] = 1936 + { 1937 + { 1938 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM8_X0), 1939 + 8, 1, 0, 0, 0, 0, 1940 + create_Imm8_X0, get_Imm8_X0 1941 + }, 1942 + { 1943 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM8_X1), 1944 + 8, 1, 0, 0, 0, 0, 1945 + create_Imm8_X1, get_Imm8_X1 1946 + }, 1947 + { 1948 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM8_Y0), 1949 + 8, 1, 0, 0, 0, 0, 1950 + create_Imm8_Y0, get_Imm8_Y0 1951 + }, 1952 + { 1953 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM8_Y1), 1954 + 8, 1, 0, 0, 0, 0, 1955 + create_Imm8_Y1, get_Imm8_Y1 1956 + }, 1957 + { 1958 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM16_X0_HW0_LAST), 1959 + 16, 1, 0, 0, 0, 0, 1960 + create_Imm16_X0, get_Imm16_X0 1961 + }, 1962 + { 1963 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_IMM16_X1_HW0_LAST), 1964 + 16, 1, 0, 0, 0, 0, 1965 + create_Imm16_X1, get_Imm16_X1 1966 + }, 1967 + { 1968 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1969 + 6, 0, 0, 1, 0, 0, 1970 + create_Dest_X0, get_Dest_X0 1971 + }, 1972 + { 1973 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1974 + 6, 0, 1, 0, 0, 0, 1975 + create_SrcA_X0, get_SrcA_X0 1976 + }, 1977 + { 1978 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1979 + 6, 0, 0, 1, 0, 0, 1980 + create_Dest_X1, get_Dest_X1 1981 + }, 1982 + { 1983 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1984 + 6, 0, 1, 0, 0, 0, 1985 + create_SrcA_X1, get_SrcA_X1 1986 + }, 1987 + { 1988 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1989 + 6, 0, 0, 1, 0, 0, 1990 + create_Dest_Y0, get_Dest_Y0 1991 + }, 1992 + { 1993 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1994 + 6, 0, 1, 0, 0, 0, 1995 + create_SrcA_Y0, get_SrcA_Y0 1996 + }, 1997 + { 1998 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 1999 + 6, 0, 0, 1, 0, 0, 2000 + create_Dest_Y1, get_Dest_Y1 2001 + }, 2002 + { 2003 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2004 + 6, 0, 1, 0, 0, 0, 2005 + create_SrcA_Y1, get_SrcA_Y1 2006 + }, 2007 + { 2008 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2009 + 6, 0, 1, 0, 0, 0, 2010 + create_SrcA_Y2, get_SrcA_Y2 2011 + }, 2012 + { 2013 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2014 + 6, 0, 1, 1, 0, 0, 2015 + create_SrcA_X1, get_SrcA_X1 2016 + }, 2017 + { 2018 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2019 + 6, 0, 1, 0, 0, 0, 2020 + create_SrcB_X0, get_SrcB_X0 2021 + }, 2022 + { 2023 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2024 + 6, 0, 1, 0, 0, 0, 2025 + create_SrcB_X1, get_SrcB_X1 2026 + }, 2027 + { 2028 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2029 + 6, 0, 1, 0, 0, 0, 2030 + create_SrcB_Y0, get_SrcB_Y0 2031 + }, 2032 + { 2033 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2034 + 6, 0, 1, 0, 0, 0, 2035 + create_SrcB_Y1, get_SrcB_Y1 2036 + }, 2037 + { 2038 + TILEGX_OP_TYPE_ADDRESS, BFD_RELOC(TILEGX_BROFF_X1), 2039 + 17, 1, 0, 0, 1, TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, 2040 + create_BrOff_X1, get_BrOff_X1 2041 + }, 2042 + { 2043 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(NONE), 2044 + 6, 0, 0, 0, 0, 0, 2045 + create_BFStart_X0, get_BFStart_X0 2046 + }, 2047 + { 2048 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(NONE), 2049 + 6, 0, 0, 0, 0, 0, 2050 + create_BFEnd_X0, get_BFEnd_X0 2051 + }, 2052 + { 2053 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2054 + 6, 0, 1, 1, 0, 0, 2055 + create_Dest_X0, get_Dest_X0 2056 + }, 2057 + { 2058 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2059 + 6, 0, 1, 1, 0, 0, 2060 + create_Dest_Y0, get_Dest_Y0 2061 + }, 2062 + { 2063 + TILEGX_OP_TYPE_ADDRESS, BFD_RELOC(TILEGX_JUMPOFF_X1), 2064 + 27, 1, 0, 0, 1, TILEGX_LOG2_BUNDLE_ALIGNMENT_IN_BYTES, 2065 + create_JumpOff_X1, get_JumpOff_X1 2066 + }, 2067 + { 2068 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2069 + 6, 0, 0, 1, 0, 0, 2070 + create_SrcBDest_Y2, get_SrcBDest_Y2 2071 + }, 2072 + { 2073 + TILEGX_OP_TYPE_SPR, BFD_RELOC(TILEGX_MF_IMM14_X1), 2074 + 14, 0, 0, 0, 0, 0, 2075 + create_MF_Imm14_X1, get_MF_Imm14_X1 2076 + }, 2077 + { 2078 + TILEGX_OP_TYPE_SPR, BFD_RELOC(TILEGX_MT_IMM14_X1), 2079 + 14, 0, 0, 0, 0, 0, 2080 + create_MT_Imm14_X1, get_MT_Imm14_X1 2081 + }, 2082 + { 2083 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_SHAMT_X0), 2084 + 6, 0, 0, 0, 0, 0, 2085 + create_ShAmt_X0, get_ShAmt_X0 2086 + }, 2087 + { 2088 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_SHAMT_X1), 2089 + 6, 0, 0, 0, 0, 0, 2090 + create_ShAmt_X1, get_ShAmt_X1 2091 + }, 2092 + { 2093 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_SHAMT_Y0), 2094 + 6, 0, 0, 0, 0, 0, 2095 + create_ShAmt_Y0, get_ShAmt_Y0 2096 + }, 2097 + { 2098 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_SHAMT_Y1), 2099 + 6, 0, 0, 0, 0, 0, 2100 + create_ShAmt_Y1, get_ShAmt_Y1 2101 + }, 2102 + { 2103 + TILEGX_OP_TYPE_REGISTER, BFD_RELOC(NONE), 2104 + 6, 0, 1, 0, 0, 0, 2105 + create_SrcBDest_Y2, get_SrcBDest_Y2 2106 + }, 2107 + { 2108 + TILEGX_OP_TYPE_IMMEDIATE, BFD_RELOC(TILEGX_DEST_IMM8_X1), 2109 + 8, 1, 0, 0, 0, 0, 2110 + create_Dest_Imm8_X1, get_Dest_Imm8_X1 2111 + } 2112 + }; 2113 + 2114 + 2115 + 2116 + 2117 + /* Given a set of bundle bits and the lookup FSM for a specific pipe, 2118 + * returns which instruction the bundle contains in that pipe. 2119 + */ 2120 + static const struct tilegx_opcode * 2121 + find_opcode(tilegx_bundle_bits bits, const unsigned short *table) 2122 + { 2123 + int index = 0; 2124 + 2125 + while (1) 2126 + { 2127 + unsigned short bitspec = table[index]; 2128 + unsigned int bitfield = 2129 + ((unsigned int)(bits >> (bitspec & 63))) & (bitspec >> 6); 2130 + 2131 + unsigned short next = table[index + 1 + bitfield]; 2132 + if (next <= TILEGX_OPC_NONE) 2133 + return &tilegx_opcodes[next]; 2134 + 2135 + index = next - TILEGX_OPC_NONE; 2136 + } 2137 + } 2138 + 2139 + 2140 + int 2141 + parse_insn_tilegx(tilegx_bundle_bits bits, 2142 + unsigned long long pc, 2143 + struct tilegx_decoded_instruction 2144 + decoded[TILEGX_MAX_INSTRUCTIONS_PER_BUNDLE]) 2145 + { 2146 + int num_instructions = 0; 2147 + int pipe; 2148 + 2149 + int min_pipe, max_pipe; 2150 + if ((bits & TILEGX_BUNDLE_MODE_MASK) == 0) 2151 + { 2152 + min_pipe = TILEGX_PIPELINE_X0; 2153 + max_pipe = TILEGX_PIPELINE_X1; 2154 + } 2155 + else 2156 + { 2157 + min_pipe = TILEGX_PIPELINE_Y0; 2158 + max_pipe = TILEGX_PIPELINE_Y2; 2159 + } 2160 + 2161 + /* For each pipe, find an instruction that fits. */ 2162 + for (pipe = min_pipe; pipe <= max_pipe; pipe++) 2163 + { 2164 + const struct tilegx_opcode *opc; 2165 + struct tilegx_decoded_instruction *d; 2166 + int i; 2167 + 2168 + d = &decoded[num_instructions++]; 2169 + opc = find_opcode (bits, tilegx_bundle_decoder_fsms[pipe]); 2170 + d->opcode = opc; 2171 + 2172 + /* Decode each operand, sign extending, etc. as appropriate. */ 2173 + for (i = 0; i < opc->num_operands; i++) 2174 + { 2175 + const struct tilegx_operand *op = 2176 + &tilegx_operands[opc->operands[pipe][i]]; 2177 + int raw_opval = op->extract (bits); 2178 + long long opval; 2179 + 2180 + if (op->is_signed) 2181 + { 2182 + /* Sign-extend the operand. */ 2183 + int shift = (int)((sizeof(int) * 8) - op->num_bits); 2184 + raw_opval = (raw_opval << shift) >> shift; 2185 + } 2186 + 2187 + /* Adjust PC-relative scaled branch offsets. */ 2188 + if (op->type == TILEGX_OP_TYPE_ADDRESS) 2189 + opval = (raw_opval * TILEGX_BUNDLE_SIZE_IN_BYTES) + pc; 2190 + else 2191 + opval = raw_opval; 2192 + 2193 + /* Record the final value. */ 2194 + d->operands[i] = op; 2195 + d->operand_values[i] = opval; 2196 + } 2197 + } 2198 + 2199 + return num_instructions; 2200 + }
+2
arch/tile/kernel/time.c
··· 22 22 #include <linux/sched.h> 23 23 #include <linux/smp.h> 24 24 #include <linux/delay.h> 25 + #include <linux/module.h> 25 26 #include <asm/irq_regs.h> 26 27 #include <asm/traps.h> 27 28 #include <hv/hypervisor.h> ··· 57 56 58 57 return (((cycles_t)high) << 32) | low; 59 58 } 59 + EXPORT_SYMBOL(get_cycles); 60 60 #endif 61 61 62 62 /*
+6 -6
arch/tile/kernel/tlb.c
··· 34 34 { 35 35 HV_Remote_ASID asids[NR_CPUS]; 36 36 int i = 0, cpu; 37 - for_each_cpu(cpu, &mm->cpu_vm_mask) { 37 + for_each_cpu(cpu, mm_cpumask(mm)) { 38 38 HV_Remote_ASID *asid = &asids[i++]; 39 39 asid->y = cpu / smp_topology.width; 40 40 asid->x = cpu % smp_topology.width; 41 41 asid->asid = per_cpu(current_asid, cpu); 42 42 } 43 - flush_remote(0, HV_FLUSH_EVICT_L1I, &mm->cpu_vm_mask, 43 + flush_remote(0, HV_FLUSH_EVICT_L1I, mm_cpumask(mm), 44 44 0, 0, 0, NULL, asids, i); 45 45 } 46 46 ··· 54 54 { 55 55 unsigned long size = hv_page_size(vma); 56 56 int cache = (vma->vm_flags & VM_EXEC) ? HV_FLUSH_EVICT_L1I : 0; 57 - flush_remote(0, cache, &mm->cpu_vm_mask, 58 - va, size, size, &mm->cpu_vm_mask, NULL, 0); 57 + flush_remote(0, cache, mm_cpumask(mm), 58 + va, size, size, mm_cpumask(mm), NULL, 0); 59 59 } 60 60 61 61 void flush_tlb_page(const struct vm_area_struct *vma, unsigned long va) ··· 70 70 unsigned long size = hv_page_size(vma); 71 71 struct mm_struct *mm = vma->vm_mm; 72 72 int cache = (vma->vm_flags & VM_EXEC) ? HV_FLUSH_EVICT_L1I : 0; 73 - flush_remote(0, cache, &mm->cpu_vm_mask, start, end - start, size, 74 - &mm->cpu_vm_mask, NULL, 0); 73 + flush_remote(0, cache, mm_cpumask(mm), start, end - start, size, 74 + mm_cpumask(mm), NULL, 0); 75 75 } 76 76 77 77 void flush_tlb_all(void)
+1
arch/tile/kernel/traps.c
··· 308 308 info.si_addr = (void __user *)address; 309 309 if (signo == SIGILL) 310 310 info.si_trapno = fault_num; 311 + trace_unhandled_signal("trap", regs, address, signo); 311 312 force_sig_info(signo, &info, current); 312 313 } 313 314
+1 -1
arch/tile/lib/atomic_asm_32.S
··· 59 59 * bad kernel addresses). 60 60 * 61 61 * Note that if the value we would store is the same as what we 62 - * loaded, we bypass the load. Other platforms with true atomics can 62 + * loaded, we bypass the store. Other platforms with true atomics can 63 63 * make the guarantee that a non-atomic __clear_bit(), for example, 64 64 * can safely race with an atomic test_and_set_bit(); this example is 65 65 * from bit_spinlock.h in slub_lock() / slub_unlock(). We can't do
+18
arch/tile/lib/cacheflush.c
··· 15 15 #include <asm/page.h> 16 16 #include <asm/cacheflush.h> 17 17 #include <arch/icache.h> 18 + #include <arch/spr_def.h> 18 19 19 20 20 21 void __flush_icache_range(unsigned long start, unsigned long end) ··· 40 39 char *p, *base; 41 40 size_t step_size, load_count; 42 41 const unsigned long STRIPE_WIDTH = 8192; 42 + #ifdef __tilegx__ 43 + /* 44 + * On TILE-Gx, we must disable the dstream prefetcher before doing 45 + * a cache flush; otherwise, we could end up with data in the cache 46 + * that we don't want there. Note that normally we'd do an mf 47 + * after the SPR write to disabling the prefetcher, but we do one 48 + * below, before any further loads, so there's no need to do it 49 + * here. 50 + */ 51 + uint_reg_t old_dstream_pf = __insn_mfspr(SPR_DSTREAM_PF); 52 + __insn_mtspr(SPR_DSTREAM_PF, 0); 53 + #endif 43 54 44 55 /* 45 56 * Flush and invalidate the buffer out of the local L1/L2 ··· 135 122 136 123 /* Wait for the load+inv's (and thus finvs) to have completed. */ 137 124 __insn_mf(); 125 + 126 + #ifdef __tilegx__ 127 + /* Reenable the prefetcher. */ 128 + __insn_mtspr(SPR_DSTREAM_PF, old_dstream_pf); 129 + #endif 138 130 }
+71
arch/tile/lib/memchr_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/types.h> 16 + #include <linux/string.h> 17 + #include <linux/module.h> 18 + 19 + void *memchr(const void *s, int c, size_t n) 20 + { 21 + const uint64_t *last_word_ptr; 22 + const uint64_t *p; 23 + const char *last_byte_ptr; 24 + uintptr_t s_int; 25 + uint64_t goal, before_mask, v, bits; 26 + char *ret; 27 + 28 + if (__builtin_expect(n == 0, 0)) { 29 + /* Don't dereference any memory if the array is empty. */ 30 + return NULL; 31 + } 32 + 33 + /* Get an aligned pointer. */ 34 + s_int = (uintptr_t) s; 35 + p = (const uint64_t *)(s_int & -8); 36 + 37 + /* Create eight copies of the byte for which we are looking. */ 38 + goal = 0x0101010101010101ULL * (uint8_t) c; 39 + 40 + /* Read the first word, but munge it so that bytes before the array 41 + * will not match goal. 42 + * 43 + * Note that this shift count expression works because we know 44 + * shift counts are taken mod 64. 45 + */ 46 + before_mask = (1ULL << (s_int << 3)) - 1; 47 + v = (*p | before_mask) ^ (goal & before_mask); 48 + 49 + /* Compute the address of the last byte. */ 50 + last_byte_ptr = (const char *)s + n - 1; 51 + 52 + /* Compute the address of the word containing the last byte. */ 53 + last_word_ptr = (const uint64_t *)((uintptr_t) last_byte_ptr & -8); 54 + 55 + while ((bits = __insn_v1cmpeq(v, goal)) == 0) { 56 + if (__builtin_expect(p == last_word_ptr, 0)) { 57 + /* We already read the last word in the array, 58 + * so give up. 59 + */ 60 + return NULL; 61 + } 62 + v = *++p; 63 + } 64 + 65 + /* We found a match, but it might be in a byte past the end 66 + * of the array. 67 + */ 68 + ret = ((char *)p) + (__insn_ctz(bits) >> 3); 69 + return (ret <= last_byte_ptr) ? ret : NULL; 70 + } 71 + EXPORT_SYMBOL(memchr);
+220
arch/tile/lib/memcpy_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/types.h> 16 + #include <linux/string.h> 17 + #include <linux/module.h> 18 + #define __memcpy memcpy 19 + /* EXPORT_SYMBOL() is in arch/tile/lib/exports.c since this should be asm. */ 20 + 21 + /* Must be 8 bytes in size. */ 22 + #define word_t uint64_t 23 + 24 + #if CHIP_L2_LINE_SIZE() != 64 && CHIP_L2_LINE_SIZE() != 128 25 + #error "Assumes 64 or 128 byte line size" 26 + #endif 27 + 28 + /* How many cache lines ahead should we prefetch? */ 29 + #define PREFETCH_LINES_AHEAD 3 30 + 31 + /* 32 + * Provide "base versions" of load and store for the normal code path. 33 + * The kernel provides other versions for userspace copies. 34 + */ 35 + #define ST(p, v) (*(p) = (v)) 36 + #define LD(p) (*(p)) 37 + 38 + #ifndef USERCOPY_FUNC 39 + #define ST1 ST 40 + #define ST2 ST 41 + #define ST4 ST 42 + #define ST8 ST 43 + #define LD1 LD 44 + #define LD2 LD 45 + #define LD4 LD 46 + #define LD8 LD 47 + #define RETVAL dstv 48 + void *memcpy(void *__restrict dstv, const void *__restrict srcv, size_t n) 49 + #else 50 + /* 51 + * Special kernel version will provide implementation of the LDn/STn 52 + * macros to return a count of uncopied bytes due to mm fault. 53 + */ 54 + #define RETVAL 0 55 + int USERCOPY_FUNC(void *__restrict dstv, const void *__restrict srcv, size_t n) 56 + #endif 57 + { 58 + char *__restrict dst1 = (char *)dstv; 59 + const char *__restrict src1 = (const char *)srcv; 60 + const char *__restrict src1_end; 61 + const char *__restrict prefetch; 62 + word_t *__restrict dst8; /* 8-byte pointer to destination memory. */ 63 + word_t final; /* Final bytes to write to trailing word, if any */ 64 + long i; 65 + 66 + if (n < 16) { 67 + for (; n; n--) 68 + ST1(dst1++, LD1(src1++)); 69 + return RETVAL; 70 + } 71 + 72 + /* 73 + * Locate the end of source memory we will copy. Don't 74 + * prefetch past this. 75 + */ 76 + src1_end = src1 + n - 1; 77 + 78 + /* Prefetch ahead a few cache lines, but not past the end. */ 79 + prefetch = src1; 80 + for (i = 0; i < PREFETCH_LINES_AHEAD; i++) { 81 + __insn_prefetch(prefetch); 82 + prefetch += CHIP_L2_LINE_SIZE(); 83 + prefetch = (prefetch > src1_end) ? prefetch : src1; 84 + } 85 + 86 + /* Copy bytes until dst is word-aligned. */ 87 + for (; (uintptr_t)dst1 & (sizeof(word_t) - 1); n--) 88 + ST1(dst1++, LD1(src1++)); 89 + 90 + /* 8-byte pointer to destination memory. */ 91 + dst8 = (word_t *)dst1; 92 + 93 + if (__builtin_expect((uintptr_t)src1 & (sizeof(word_t) - 1), 0)) { 94 + /* 95 + * Misaligned copy. Copy 8 bytes at a time, but don't 96 + * bother with other fanciness. 97 + * 98 + * TODO: Consider prefetching and using wh64 as well. 99 + */ 100 + 101 + /* Create an aligned src8. */ 102 + const word_t *__restrict src8 = 103 + (const word_t *)((uintptr_t)src1 & -sizeof(word_t)); 104 + word_t b; 105 + 106 + word_t a = LD8(src8++); 107 + for (; n >= sizeof(word_t); n -= sizeof(word_t)) { 108 + b = LD8(src8++); 109 + a = __insn_dblalign(a, b, src1); 110 + ST8(dst8++, a); 111 + a = b; 112 + } 113 + 114 + if (n == 0) 115 + return RETVAL; 116 + 117 + b = ((const char *)src8 <= src1_end) ? *src8 : 0; 118 + 119 + /* 120 + * Final source bytes to write to trailing partial 121 + * word, if any. 122 + */ 123 + final = __insn_dblalign(a, b, src1); 124 + } else { 125 + /* Aligned copy. */ 126 + 127 + const word_t* __restrict src8 = (const word_t *)src1; 128 + 129 + /* src8 and dst8 are both word-aligned. */ 130 + if (n >= CHIP_L2_LINE_SIZE()) { 131 + /* Copy until 'dst' is cache-line-aligned. */ 132 + for (; (uintptr_t)dst8 & (CHIP_L2_LINE_SIZE() - 1); 133 + n -= sizeof(word_t)) 134 + ST8(dst8++, LD8(src8++)); 135 + 136 + for (; n >= CHIP_L2_LINE_SIZE(); ) { 137 + __insn_wh64(dst8); 138 + 139 + /* 140 + * Prefetch and advance to next line 141 + * to prefetch, but don't go past the end 142 + */ 143 + __insn_prefetch(prefetch); 144 + prefetch += CHIP_L2_LINE_SIZE(); 145 + prefetch = (prefetch > src1_end) ? prefetch : 146 + (const char *)src8; 147 + 148 + /* 149 + * Copy an entire cache line. Manually 150 + * unrolled to avoid idiosyncracies of 151 + * compiler unrolling. 152 + */ 153 + #define COPY_WORD(offset) ({ ST8(dst8+offset, LD8(src8+offset)); n -= 8; }) 154 + COPY_WORD(0); 155 + COPY_WORD(1); 156 + COPY_WORD(2); 157 + COPY_WORD(3); 158 + COPY_WORD(4); 159 + COPY_WORD(5); 160 + COPY_WORD(6); 161 + COPY_WORD(7); 162 + #if CHIP_L2_LINE_SIZE() == 128 163 + COPY_WORD(8); 164 + COPY_WORD(9); 165 + COPY_WORD(10); 166 + COPY_WORD(11); 167 + COPY_WORD(12); 168 + COPY_WORD(13); 169 + COPY_WORD(14); 170 + COPY_WORD(15); 171 + #elif CHIP_L2_LINE_SIZE() != 64 172 + # error Fix code that assumes particular L2 cache line sizes 173 + #endif 174 + 175 + dst8 += CHIP_L2_LINE_SIZE() / sizeof(word_t); 176 + src8 += CHIP_L2_LINE_SIZE() / sizeof(word_t); 177 + } 178 + } 179 + 180 + for (; n >= sizeof(word_t); n -= sizeof(word_t)) 181 + ST8(dst8++, LD8(src8++)); 182 + 183 + if (__builtin_expect(n == 0, 1)) 184 + return RETVAL; 185 + 186 + final = LD8(src8); 187 + } 188 + 189 + /* n != 0 if we get here. Write out any trailing bytes. */ 190 + dst1 = (char *)dst8; 191 + if (n & 4) { 192 + ST4((uint32_t *)dst1, final); 193 + dst1 += 4; 194 + final >>= 32; 195 + n &= 3; 196 + } 197 + if (n & 2) { 198 + ST2((uint16_t *)dst1, final); 199 + dst1 += 2; 200 + final >>= 16; 201 + n &= 1; 202 + } 203 + if (n) 204 + ST1((uint8_t *)dst1, final); 205 + 206 + return RETVAL; 207 + } 208 + 209 + 210 + #ifdef USERCOPY_FUNC 211 + #undef ST1 212 + #undef ST2 213 + #undef ST4 214 + #undef ST8 215 + #undef LD1 216 + #undef LD2 217 + #undef LD4 218 + #undef LD8 219 + #undef USERCOPY_FUNC 220 + #endif
+86
arch/tile/lib/memcpy_user_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * Do memcpy(), but trap and return "n" when a load or store faults. 15 + * 16 + * Note: this idiom only works when memcpy() compiles to a leaf function. 17 + * If "sp" is updated during memcpy, the "jrp lr" will be incorrect. 18 + * 19 + * Also note that we are capturing "n" from the containing scope here. 20 + */ 21 + 22 + #define _ST(p, inst, v) \ 23 + ({ \ 24 + asm("1: " #inst " %0, %1;" \ 25 + ".pushsection .coldtext.memcpy,\"ax\";" \ 26 + "2: { move r0, %2; jrp lr };" \ 27 + ".section __ex_table,\"a\";" \ 28 + ".quad 1b, 2b;" \ 29 + ".popsection" \ 30 + : "=m" (*(p)) : "r" (v), "r" (n)); \ 31 + }) 32 + 33 + #define _LD(p, inst) \ 34 + ({ \ 35 + unsigned long __v; \ 36 + asm("1: " #inst " %0, %1;" \ 37 + ".pushsection .coldtext.memcpy,\"ax\";" \ 38 + "2: { move r0, %2; jrp lr };" \ 39 + ".section __ex_table,\"a\";" \ 40 + ".quad 1b, 2b;" \ 41 + ".popsection" \ 42 + : "=r" (__v) : "m" (*(p)), "r" (n)); \ 43 + __v; \ 44 + }) 45 + 46 + #define USERCOPY_FUNC __copy_to_user_inatomic 47 + #define ST1(p, v) _ST((p), st1, (v)) 48 + #define ST2(p, v) _ST((p), st2, (v)) 49 + #define ST4(p, v) _ST((p), st4, (v)) 50 + #define ST8(p, v) _ST((p), st, (v)) 51 + #define LD1 LD 52 + #define LD2 LD 53 + #define LD4 LD 54 + #define LD8 LD 55 + #include "memcpy_64.c" 56 + 57 + #define USERCOPY_FUNC __copy_from_user_inatomic 58 + #define ST1 ST 59 + #define ST2 ST 60 + #define ST4 ST 61 + #define ST8 ST 62 + #define LD1(p) _LD((p), ld1u) 63 + #define LD2(p) _LD((p), ld2u) 64 + #define LD4(p) _LD((p), ld4u) 65 + #define LD8(p) _LD((p), ld) 66 + #include "memcpy_64.c" 67 + 68 + #define USERCOPY_FUNC __copy_in_user_inatomic 69 + #define ST1(p, v) _ST((p), st1, (v)) 70 + #define ST2(p, v) _ST((p), st2, (v)) 71 + #define ST4(p, v) _ST((p), st4, (v)) 72 + #define ST8(p, v) _ST((p), st, (v)) 73 + #define LD1(p) _LD((p), ld1u) 74 + #define LD2(p) _LD((p), ld2u) 75 + #define LD4(p) _LD((p), ld4u) 76 + #define LD8(p) _LD((p), ld) 77 + #include "memcpy_64.c" 78 + 79 + unsigned long __copy_from_user_zeroing(void *to, const void __user *from, 80 + unsigned long n) 81 + { 82 + unsigned long rc = __copy_from_user_inatomic(to, from, n); 83 + if (unlikely(rc)) 84 + memset(to + n - rc, 0, rc); 85 + return rc; 86 + }
+145
arch/tile/lib/memset_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <arch/chip.h> 16 + 17 + #include <linux/types.h> 18 + #include <linux/string.h> 19 + #include <linux/module.h> 20 + 21 + #undef memset 22 + 23 + void *memset(void *s, int c, size_t n) 24 + { 25 + uint64_t *out64; 26 + int n64, to_align64; 27 + uint64_t v64; 28 + uint8_t *out8 = s; 29 + 30 + /* Experimentation shows that a trivial tight loop is a win up until 31 + * around a size of 20, where writing a word at a time starts to win. 32 + */ 33 + #define BYTE_CUTOFF 20 34 + 35 + #if BYTE_CUTOFF < 7 36 + /* This must be at least at least this big, or some code later 37 + * on doesn't work. 38 + */ 39 + #error "BYTE_CUTOFF is too small" 40 + #endif 41 + 42 + if (n < BYTE_CUTOFF) { 43 + /* Strangely, this turns out to be the tightest way to 44 + * write this loop. 45 + */ 46 + if (n != 0) { 47 + do { 48 + /* Strangely, combining these into one line 49 + * performs worse. 50 + */ 51 + *out8 = c; 52 + out8++; 53 + } while (--n != 0); 54 + } 55 + 56 + return s; 57 + } 58 + 59 + /* Align 'out8'. We know n >= 7 so this won't write past the end. */ 60 + while (((uintptr_t) out8 & 7) != 0) { 61 + *out8++ = c; 62 + --n; 63 + } 64 + 65 + /* Align 'n'. */ 66 + while (n & 7) 67 + out8[--n] = c; 68 + 69 + out64 = (uint64_t *) out8; 70 + n64 = n >> 3; 71 + 72 + /* Tile input byte out to 64 bits. */ 73 + /* KLUDGE */ 74 + v64 = 0x0101010101010101ULL * (uint8_t)c; 75 + 76 + /* This must be at least 8 or the following loop doesn't work. */ 77 + #define CACHE_LINE_SIZE_IN_DOUBLEWORDS (CHIP_L2_LINE_SIZE() / 8) 78 + 79 + /* Determine how many words we need to emit before the 'out32' 80 + * pointer becomes aligned modulo the cache line size. 81 + */ 82 + to_align64 = (-((uintptr_t)out64 >> 3)) & 83 + (CACHE_LINE_SIZE_IN_DOUBLEWORDS - 1); 84 + 85 + /* Only bother aligning and using wh64 if there is at least 86 + * one full cache line to process. This check also prevents 87 + * overrunning the end of the buffer with alignment words. 88 + */ 89 + if (to_align64 <= n64 - CACHE_LINE_SIZE_IN_DOUBLEWORDS) { 90 + int lines_left; 91 + 92 + /* Align out64 mod the cache line size so we can use wh64. */ 93 + n64 -= to_align64; 94 + for (; to_align64 != 0; to_align64--) { 95 + *out64 = v64; 96 + out64++; 97 + } 98 + 99 + /* Use unsigned divide to turn this into a right shift. */ 100 + lines_left = (unsigned)n64 / CACHE_LINE_SIZE_IN_DOUBLEWORDS; 101 + 102 + do { 103 + /* Only wh64 a few lines at a time, so we don't 104 + * exceed the maximum number of victim lines. 105 + */ 106 + int x = ((lines_left < CHIP_MAX_OUTSTANDING_VICTIMS()) 107 + ? lines_left 108 + : CHIP_MAX_OUTSTANDING_VICTIMS()); 109 + uint64_t *wh = out64; 110 + int i = x; 111 + int j; 112 + 113 + lines_left -= x; 114 + 115 + do { 116 + __insn_wh64(wh); 117 + wh += CACHE_LINE_SIZE_IN_DOUBLEWORDS; 118 + } while (--i); 119 + 120 + for (j = x * (CACHE_LINE_SIZE_IN_DOUBLEWORDS / 4); 121 + j != 0; j--) { 122 + *out64++ = v64; 123 + *out64++ = v64; 124 + *out64++ = v64; 125 + *out64++ = v64; 126 + } 127 + } while (lines_left != 0); 128 + 129 + /* We processed all full lines above, so only this many 130 + * words remain to be processed. 131 + */ 132 + n64 &= CACHE_LINE_SIZE_IN_DOUBLEWORDS - 1; 133 + } 134 + 135 + /* Now handle any leftover values. */ 136 + if (n64 != 0) { 137 + do { 138 + *out64 = v64; 139 + out64++; 140 + } while (--n64 != 0); 141 + } 142 + 143 + return s; 144 + } 145 + EXPORT_SYMBOL(memset);
+104
arch/tile/lib/spinlock_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/spinlock.h> 16 + #include <linux/module.h> 17 + #include <asm/processor.h> 18 + 19 + #include "spinlock_common.h" 20 + 21 + /* 22 + * Read the spinlock value without allocating in our cache and without 23 + * causing an invalidation to another cpu with a copy of the cacheline. 24 + * This is important when we are spinning waiting for the lock. 25 + */ 26 + static inline u32 arch_spin_read_noalloc(void *lock) 27 + { 28 + return atomic_cmpxchg((atomic_t *)lock, -1, -1); 29 + } 30 + 31 + /* 32 + * Wait until the high bits (current) match my ticket. 33 + * If we notice the overflow bit set on entry, we clear it. 34 + */ 35 + void arch_spin_lock_slow(arch_spinlock_t *lock, u32 my_ticket) 36 + { 37 + if (unlikely(my_ticket & __ARCH_SPIN_NEXT_OVERFLOW)) { 38 + __insn_fetchand4(&lock->lock, ~__ARCH_SPIN_NEXT_OVERFLOW); 39 + my_ticket &= ~__ARCH_SPIN_NEXT_OVERFLOW; 40 + } 41 + 42 + for (;;) { 43 + u32 val = arch_spin_read_noalloc(lock); 44 + u32 delta = my_ticket - arch_spin_current(val); 45 + if (delta == 0) 46 + return; 47 + relax((128 / CYCLES_PER_RELAX_LOOP) * delta); 48 + } 49 + } 50 + EXPORT_SYMBOL(arch_spin_lock_slow); 51 + 52 + /* 53 + * Check the lock to see if it is plausible, and try to get it with cmpxchg(). 54 + */ 55 + int arch_spin_trylock(arch_spinlock_t *lock) 56 + { 57 + u32 val = arch_spin_read_noalloc(lock); 58 + if (unlikely(arch_spin_current(val) != arch_spin_next(val))) 59 + return 0; 60 + return cmpxchg(&lock->lock, val, (val + 1) & ~__ARCH_SPIN_NEXT_OVERFLOW) 61 + == val; 62 + } 63 + EXPORT_SYMBOL(arch_spin_trylock); 64 + 65 + void arch_spin_unlock_wait(arch_spinlock_t *lock) 66 + { 67 + u32 iterations = 0; 68 + while (arch_spin_is_locked(lock)) 69 + delay_backoff(iterations++); 70 + } 71 + EXPORT_SYMBOL(arch_spin_unlock_wait); 72 + 73 + /* 74 + * If the read lock fails due to a writer, we retry periodically 75 + * until the value is positive and we write our incremented reader count. 76 + */ 77 + void __read_lock_failed(arch_rwlock_t *rw) 78 + { 79 + u32 val; 80 + int iterations = 0; 81 + do { 82 + delay_backoff(iterations++); 83 + val = __insn_fetchaddgez4(&rw->lock, 1); 84 + } while (unlikely(arch_write_val_locked(val))); 85 + } 86 + EXPORT_SYMBOL(__read_lock_failed); 87 + 88 + /* 89 + * If we failed because there were readers, clear the "writer" bit 90 + * so we don't block additional readers. Otherwise, there was another 91 + * writer anyway, so our "fetchor" made no difference. Then wait, 92 + * issuing periodic fetchor instructions, till we get the lock. 93 + */ 94 + void __write_lock_failed(arch_rwlock_t *rw, u32 val) 95 + { 96 + int iterations = 0; 97 + do { 98 + if (!arch_write_val_locked(val)) 99 + val = __insn_fetchand4(&rw->lock, ~__WRITE_LOCK_BIT); 100 + delay_backoff(iterations++); 101 + val = __insn_fetchor4(&rw->lock, __WRITE_LOCK_BIT); 102 + } while (val != 0); 103 + } 104 + EXPORT_SYMBOL(__write_lock_failed);
+67
arch/tile/lib/strchr_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/types.h> 16 + #include <linux/string.h> 17 + #include <linux/module.h> 18 + 19 + #undef strchr 20 + 21 + char *strchr(const char *s, int c) 22 + { 23 + int z, g; 24 + 25 + /* Get an aligned pointer. */ 26 + const uintptr_t s_int = (uintptr_t) s; 27 + const uint64_t *p = (const uint64_t *)(s_int & -8); 28 + 29 + /* Create eight copies of the byte for which we are looking. */ 30 + const uint64_t goal = 0x0101010101010101ULL * (uint8_t) c; 31 + 32 + /* Read the first aligned word, but force bytes before the string to 33 + * match neither zero nor goal (we make sure the high bit of each 34 + * byte is 1, and the low 7 bits are all the opposite of the goal 35 + * byte). 36 + * 37 + * Note that this shift count expression works because we know shift 38 + * counts are taken mod 64. 39 + */ 40 + const uint64_t before_mask = (1ULL << (s_int << 3)) - 1; 41 + uint64_t v = (*p | before_mask) ^ 42 + (goal & __insn_v1shrsi(before_mask, 1)); 43 + 44 + uint64_t zero_matches, goal_matches; 45 + while (1) { 46 + /* Look for a terminating '\0'. */ 47 + zero_matches = __insn_v1cmpeqi(v, 0); 48 + 49 + /* Look for the goal byte. */ 50 + goal_matches = __insn_v1cmpeq(v, goal); 51 + 52 + if (__builtin_expect((zero_matches | goal_matches) != 0, 0)) 53 + break; 54 + 55 + v = *++p; 56 + } 57 + 58 + z = __insn_ctz(zero_matches); 59 + g = __insn_ctz(goal_matches); 60 + 61 + /* If we found c before '\0' we got a match. Note that if c == '\0' 62 + * then g == z, and we correctly return the address of the '\0' 63 + * rather than NULL. 64 + */ 65 + return (g <= z) ? ((char *)p) + (g >> 3) : NULL; 66 + } 67 + EXPORT_SYMBOL(strchr);
+38
arch/tile/lib/strlen_64.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/types.h> 16 + #include <linux/string.h> 17 + #include <linux/module.h> 18 + 19 + #undef strlen 20 + 21 + size_t strlen(const char *s) 22 + { 23 + /* Get an aligned pointer. */ 24 + const uintptr_t s_int = (uintptr_t) s; 25 + const uint64_t *p = (const uint64_t *)(s_int & -8); 26 + 27 + /* Read the first word, but force bytes before the string to be nonzero. 28 + * This expression works because we know shift counts are taken mod 64. 29 + */ 30 + uint64_t v = *p | ((1ULL << (s_int << 3)) - 1); 31 + 32 + uint64_t bits; 33 + while ((bits = __insn_v1cmpeqi(v, 0)) == 0) 34 + v = *++p; 35 + 36 + return ((const char *)p) + (__insn_ctz(bits) >> 3) - s; 37 + } 38 + EXPORT_SYMBOL(strlen);
+196
arch/tile/lib/usercopy_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + */ 14 + 15 + #include <linux/linkage.h> 16 + #include <asm/errno.h> 17 + #include <asm/cache.h> 18 + #include <arch/chip.h> 19 + 20 + /* Access user memory, but use MMU to avoid propagating kernel exceptions. */ 21 + 22 + .pushsection .fixup,"ax" 23 + 24 + get_user_fault: 25 + { movei r1, -EFAULT; move r0, zero } 26 + jrp lr 27 + ENDPROC(get_user_fault) 28 + 29 + put_user_fault: 30 + { movei r0, -EFAULT; jrp lr } 31 + ENDPROC(put_user_fault) 32 + 33 + .popsection 34 + 35 + /* 36 + * __get_user_N functions take a pointer in r0, and return 0 in r1 37 + * on success, with the value in r0; or else -EFAULT in r1. 38 + */ 39 + #define __get_user_N(bytes, LOAD) \ 40 + STD_ENTRY(__get_user_##bytes); \ 41 + 1: { LOAD r0, r0; move r1, zero }; \ 42 + jrp lr; \ 43 + STD_ENDPROC(__get_user_##bytes); \ 44 + .pushsection __ex_table,"a"; \ 45 + .quad 1b, get_user_fault; \ 46 + .popsection 47 + 48 + __get_user_N(1, ld1u) 49 + __get_user_N(2, ld2u) 50 + __get_user_N(4, ld4u) 51 + __get_user_N(8, ld) 52 + 53 + /* 54 + * __put_user_N functions take a value in r0 and a pointer in r1, 55 + * and return 0 in r0 on success or -EFAULT on failure. 56 + */ 57 + #define __put_user_N(bytes, STORE) \ 58 + STD_ENTRY(__put_user_##bytes); \ 59 + 1: { STORE r1, r0; move r0, zero }; \ 60 + jrp lr; \ 61 + STD_ENDPROC(__put_user_##bytes); \ 62 + .pushsection __ex_table,"a"; \ 63 + .quad 1b, put_user_fault; \ 64 + .popsection 65 + 66 + __put_user_N(1, st1) 67 + __put_user_N(2, st2) 68 + __put_user_N(4, st4) 69 + __put_user_N(8, st) 70 + 71 + /* 72 + * strnlen_user_asm takes the pointer in r0, and the length bound in r1. 73 + * It returns the length, including the terminating NUL, or zero on exception. 74 + * If length is greater than the bound, returns one plus the bound. 75 + */ 76 + STD_ENTRY(strnlen_user_asm) 77 + { beqz r1, 2f; addi r3, r0, -1 } /* bias down to include NUL */ 78 + 1: { ld1u r4, r0; addi r1, r1, -1 } 79 + beqz r4, 2f 80 + { bnezt r1, 1b; addi r0, r0, 1 } 81 + 2: { sub r0, r0, r3; jrp lr } 82 + STD_ENDPROC(strnlen_user_asm) 83 + .pushsection .fixup,"ax" 84 + strnlen_user_fault: 85 + { move r0, zero; jrp lr } 86 + ENDPROC(strnlen_user_fault) 87 + .section __ex_table,"a" 88 + .quad 1b, strnlen_user_fault 89 + .popsection 90 + 91 + /* 92 + * strncpy_from_user_asm takes the kernel target pointer in r0, 93 + * the userspace source pointer in r1, and the length bound (including 94 + * the trailing NUL) in r2. On success, it returns the string length 95 + * (not including the trailing NUL), or -EFAULT on failure. 96 + */ 97 + STD_ENTRY(strncpy_from_user_asm) 98 + { beqz r2, 2f; move r3, r0 } 99 + 1: { ld1u r4, r1; addi r1, r1, 1; addi r2, r2, -1 } 100 + { st1 r0, r4; addi r0, r0, 1 } 101 + beqz r2, 2f 102 + bnezt r4, 1b 103 + addi r0, r0, -1 /* don't count the trailing NUL */ 104 + 2: { sub r0, r0, r3; jrp lr } 105 + STD_ENDPROC(strncpy_from_user_asm) 106 + .pushsection .fixup,"ax" 107 + strncpy_from_user_fault: 108 + { movei r0, -EFAULT; jrp lr } 109 + ENDPROC(strncpy_from_user_fault) 110 + .section __ex_table,"a" 111 + .quad 1b, strncpy_from_user_fault 112 + .popsection 113 + 114 + /* 115 + * clear_user_asm takes the user target address in r0 and the 116 + * number of bytes to zero in r1. 117 + * It returns the number of uncopiable bytes (hopefully zero) in r0. 118 + * Note that we don't use a separate .fixup section here since we fall 119 + * through into the "fixup" code as the last straight-line bundle anyway. 120 + */ 121 + STD_ENTRY(clear_user_asm) 122 + { beqz r1, 2f; or r2, r0, r1 } 123 + andi r2, r2, 7 124 + beqzt r2, .Lclear_aligned_user_asm 125 + 1: { st1 r0, zero; addi r0, r0, 1; addi r1, r1, -1 } 126 + bnezt r1, 1b 127 + 2: { move r0, r1; jrp lr } 128 + .pushsection __ex_table,"a" 129 + .quad 1b, 2b 130 + .popsection 131 + 132 + .Lclear_aligned_user_asm: 133 + 1: { st r0, zero; addi r0, r0, 8; addi r1, r1, -8 } 134 + bnezt r1, 1b 135 + 2: { move r0, r1; jrp lr } 136 + STD_ENDPROC(clear_user_asm) 137 + .pushsection __ex_table,"a" 138 + .quad 1b, 2b 139 + .popsection 140 + 141 + /* 142 + * flush_user_asm takes the user target address in r0 and the 143 + * number of bytes to flush in r1. 144 + * It returns the number of unflushable bytes (hopefully zero) in r0. 145 + */ 146 + STD_ENTRY(flush_user_asm) 147 + beqz r1, 2f 148 + { movei r2, L2_CACHE_BYTES; add r1, r0, r1 } 149 + { sub r2, zero, r2; addi r1, r1, L2_CACHE_BYTES-1 } 150 + { and r0, r0, r2; and r1, r1, r2 } 151 + { sub r1, r1, r0 } 152 + 1: { flush r0; addi r1, r1, -CHIP_FLUSH_STRIDE() } 153 + { addi r0, r0, CHIP_FLUSH_STRIDE(); bnezt r1, 1b } 154 + 2: { move r0, r1; jrp lr } 155 + STD_ENDPROC(flush_user_asm) 156 + .pushsection __ex_table,"a" 157 + .quad 1b, 2b 158 + .popsection 159 + 160 + /* 161 + * inv_user_asm takes the user target address in r0 and the 162 + * number of bytes to invalidate in r1. 163 + * It returns the number of not inv'able bytes (hopefully zero) in r0. 164 + */ 165 + STD_ENTRY(inv_user_asm) 166 + beqz r1, 2f 167 + { movei r2, L2_CACHE_BYTES; add r1, r0, r1 } 168 + { sub r2, zero, r2; addi r1, r1, L2_CACHE_BYTES-1 } 169 + { and r0, r0, r2; and r1, r1, r2 } 170 + { sub r1, r1, r0 } 171 + 1: { inv r0; addi r1, r1, -CHIP_INV_STRIDE() } 172 + { addi r0, r0, CHIP_INV_STRIDE(); bnezt r1, 1b } 173 + 2: { move r0, r1; jrp lr } 174 + STD_ENDPROC(inv_user_asm) 175 + .pushsection __ex_table,"a" 176 + .quad 1b, 2b 177 + .popsection 178 + 179 + /* 180 + * finv_user_asm takes the user target address in r0 and the 181 + * number of bytes to flush-invalidate in r1. 182 + * It returns the number of not finv'able bytes (hopefully zero) in r0. 183 + */ 184 + STD_ENTRY(finv_user_asm) 185 + beqz r1, 2f 186 + { movei r2, L2_CACHE_BYTES; add r1, r0, r1 } 187 + { sub r2, zero, r2; addi r1, r1, L2_CACHE_BYTES-1 } 188 + { and r0, r0, r2; and r1, r1, r2 } 189 + { sub r1, r1, r0 } 190 + 1: { finv r0; addi r1, r1, -CHIP_FINV_STRIDE() } 191 + { addi r0, r0, CHIP_FINV_STRIDE(); bnezt r1, 1b } 192 + 2: { move r0, r1; jrp lr } 193 + STD_ENDPROC(finv_user_asm) 194 + .pushsection __ex_table,"a" 195 + .quad 1b, 2b 196 + .popsection
+19 -11
arch/tile/mm/fault.c
··· 43 43 44 44 #include <arch/interrupts.h> 45 45 46 - static noinline void force_sig_info_fault(int si_signo, int si_code, 47 - unsigned long address, int fault_num, struct task_struct *tsk) 46 + static noinline void force_sig_info_fault(const char *type, int si_signo, 47 + int si_code, unsigned long address, 48 + int fault_num, 49 + struct task_struct *tsk, 50 + struct pt_regs *regs) 48 51 { 49 52 siginfo_t info; 50 53 ··· 62 59 info.si_code = si_code; 63 60 info.si_addr = (void __user *)address; 64 61 info.si_trapno = fault_num; 62 + trace_unhandled_signal(type, regs, address, si_signo); 65 63 force_sig_info(si_signo, &info, tsk); 66 64 } 67 65 ··· 75 71 struct pt_regs *, regs) 76 72 { 77 73 if (address >= PAGE_OFFSET) 78 - force_sig_info_fault(SIGSEGV, SEGV_MAPERR, address, 79 - INT_DTLB_MISS, current); 74 + force_sig_info_fault("atomic segfault", SIGSEGV, SEGV_MAPERR, 75 + address, INT_DTLB_MISS, current, regs); 80 76 else 81 - force_sig_info_fault(SIGBUS, BUS_ADRALN, address, 82 - INT_UNALIGN_DATA, current); 77 + force_sig_info_fault("atomic alignment fault", SIGBUS, 78 + BUS_ADRALN, address, 79 + INT_UNALIGN_DATA, current, regs); 83 80 84 81 /* 85 82 * Adjust pc to point at the actual instruction, which is unusual ··· 476 471 */ 477 472 local_irq_enable(); 478 473 479 - force_sig_info_fault(SIGSEGV, si_code, address, 480 - fault_num, tsk); 474 + force_sig_info_fault("segfault", SIGSEGV, si_code, address, 475 + fault_num, tsk, regs); 481 476 return 0; 482 477 } 483 478 ··· 552 547 if (is_kernel_mode) 553 548 goto no_context; 554 549 555 - force_sig_info_fault(SIGBUS, BUS_ADRERR, address, fault_num, tsk); 550 + force_sig_info_fault("bus error", SIGBUS, BUS_ADRERR, address, 551 + fault_num, tsk, regs); 556 552 return 0; 557 553 } 558 554 ··· 738 732 panic("Bad fault number %d in do_page_fault", fault_num); 739 733 } 740 734 735 + #if CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC() 741 736 if (EX1_PL(regs->ex1) != USER_PL) { 742 737 struct async_tlb *async; 743 738 switch (fault_num) { ··· 782 775 return; 783 776 } 784 777 } 778 + #endif 785 779 786 780 handle_page_fault(regs, fault_num, is_page_fault, address, write); 787 781 } ··· 809 801 async->address, async->is_write); 810 802 } 811 803 } 812 - #endif /* CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC() */ 813 - 814 804 815 805 /* 816 806 * This routine effectively re-issues asynchronous page faults ··· 830 824 handle_async_page_fault(regs, &current->thread.sn_async_tlb); 831 825 #endif 832 826 } 827 + #endif /* CHIP_HAS_TILE_DMA() || CHIP_HAS_SN_PROC() */ 828 + 833 829 834 830 void vmalloc_sync_all(void) 835 831 {
+187
arch/tile/mm/migrate_64.S
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * This routine is a helper for migrating the home of a set of pages to 15 + * a new cpu. See the documentation in homecache.c for more information. 16 + */ 17 + 18 + #include <linux/linkage.h> 19 + #include <linux/threads.h> 20 + #include <asm/page.h> 21 + #include <asm/thread_info.h> 22 + #include <asm/types.h> 23 + #include <asm/asm-offsets.h> 24 + #include <hv/hypervisor.h> 25 + 26 + .text 27 + 28 + /* 29 + * First, some definitions that apply to all the code in the file. 30 + */ 31 + 32 + /* Locals (caller-save) */ 33 + #define r_tmp r10 34 + #define r_save_sp r11 35 + 36 + /* What we save where in the stack frame; must include all callee-saves. */ 37 + #define FRAME_SP 8 38 + #define FRAME_R30 16 39 + #define FRAME_R31 24 40 + #define FRAME_R32 32 41 + #define FRAME_R33 40 42 + #define FRAME_SIZE 48 43 + 44 + 45 + 46 + 47 + /* 48 + * On entry: 49 + * 50 + * r0 the new context PA to install (moved to r_context) 51 + * r1 PTE to use for context access (moved to r_access) 52 + * r2 ASID to use for new context (moved to r_asid) 53 + * r3 pointer to cpumask with just this cpu set in it (r_my_cpumask) 54 + */ 55 + 56 + /* Arguments (caller-save) */ 57 + #define r_context_in r0 58 + #define r_access_in r1 59 + #define r_asid_in r2 60 + #define r_my_cpumask r3 61 + 62 + /* Locals (callee-save); must not be more than FRAME_xxx above. */ 63 + #define r_save_ics r30 64 + #define r_context r31 65 + #define r_access r32 66 + #define r_asid r33 67 + 68 + /* 69 + * Caller-save locals and frame constants are the same as 70 + * for homecache_migrate_stack_and_flush. 71 + */ 72 + 73 + STD_ENTRY(flush_and_install_context) 74 + /* 75 + * Create a stack frame; we can't touch it once we flush the 76 + * cache until we install the new page table and flush the TLB. 77 + */ 78 + { 79 + move r_save_sp, sp 80 + st sp, lr 81 + addi sp, sp, -FRAME_SIZE 82 + } 83 + addi r_tmp, sp, FRAME_SP 84 + { 85 + st r_tmp, r_save_sp 86 + addi r_tmp, sp, FRAME_R30 87 + } 88 + { 89 + st r_tmp, r30 90 + addi r_tmp, sp, FRAME_R31 91 + } 92 + { 93 + st r_tmp, r31 94 + addi r_tmp, sp, FRAME_R32 95 + } 96 + { 97 + st r_tmp, r32 98 + addi r_tmp, sp, FRAME_R33 99 + } 100 + st r_tmp, r33 101 + 102 + /* Move some arguments to callee-save registers. */ 103 + { 104 + move r_context, r_context_in 105 + move r_access, r_access_in 106 + } 107 + move r_asid, r_asid_in 108 + 109 + /* Disable interrupts, since we can't use our stack. */ 110 + { 111 + mfspr r_save_ics, INTERRUPT_CRITICAL_SECTION 112 + movei r_tmp, 1 113 + } 114 + mtspr INTERRUPT_CRITICAL_SECTION, r_tmp 115 + 116 + /* First, flush our L2 cache. */ 117 + { 118 + move r0, zero /* cache_pa */ 119 + moveli r1, hw2_last(HV_FLUSH_EVICT_L2) /* cache_control */ 120 + } 121 + { 122 + shl16insli r1, r1, hw1(HV_FLUSH_EVICT_L2) 123 + move r2, r_my_cpumask /* cache_cpumask */ 124 + } 125 + { 126 + shl16insli r1, r1, hw0(HV_FLUSH_EVICT_L2) 127 + move r3, zero /* tlb_va */ 128 + } 129 + { 130 + move r4, zero /* tlb_length */ 131 + move r5, zero /* tlb_pgsize */ 132 + } 133 + { 134 + move r6, zero /* tlb_cpumask */ 135 + move r7, zero /* asids */ 136 + } 137 + { 138 + move r8, zero /* asidcount */ 139 + jal hv_flush_remote 140 + } 141 + bnez r0, 1f 142 + 143 + /* Now install the new page table. */ 144 + { 145 + move r0, r_context 146 + move r1, r_access 147 + } 148 + { 149 + move r2, r_asid 150 + movei r3, HV_CTX_DIRECTIO 151 + } 152 + jal hv_install_context 153 + bnez r0, 1f 154 + 155 + /* Finally, flush the TLB. */ 156 + { 157 + movei r0, 0 /* preserve_global */ 158 + jal hv_flush_all 159 + } 160 + 161 + 1: /* Reset interrupts back how they were before. */ 162 + mtspr INTERRUPT_CRITICAL_SECTION, r_save_ics 163 + 164 + /* Restore the callee-saved registers and return. */ 165 + addli lr, sp, FRAME_SIZE 166 + { 167 + ld lr, lr 168 + addli r_tmp, sp, FRAME_R30 169 + } 170 + { 171 + ld r30, r_tmp 172 + addli r_tmp, sp, FRAME_R31 173 + } 174 + { 175 + ld r31, r_tmp 176 + addli r_tmp, sp, FRAME_R32 177 + } 178 + { 179 + ld r32, r_tmp 180 + addli r_tmp, sp, FRAME_R33 181 + } 182 + { 183 + ld r33, r_tmp 184 + addi sp, sp, FRAME_SIZE 185 + } 186 + jrp lr 187 + STD_ENDPROC(flush_and_install_context)
+1 -1
drivers/input/input-compat.h
··· 19 19 20 20 /* Note to the author of this code: did it ever occur to 21 21 you why the ifdefs are needed? Think about it again. -AK */ 22 - #ifdef CONFIG_X86_64 22 + #if defined(CONFIG_X86_64) || defined(CONFIG_TILE) 23 23 # define INPUT_COMPAT_TEST is_compat_task() 24 24 #elif defined(CONFIG_S390) 25 25 # define INPUT_COMPAT_TEST test_thread_flag(TIF_31BIT)
+3 -5
drivers/net/tile/tilepro.c
··· 1658 1658 while (tile_net_lepp_free_comps(dev, true)) 1659 1659 /* loop */; 1660 1660 1661 - /* Wipe the EPP queue. */ 1661 + /* Wipe the EPP queue, and wait till the stores hit the EPP. */ 1662 1662 memset(priv->eq, 0, sizeof(lepp_queue_t)); 1663 - 1664 - /* Evict the EPP queue. */ 1665 - finv_buffer(priv->eq, EQ_SIZE); 1663 + mb(); 1666 1664 1667 1665 return 0; 1668 1666 } ··· 2396 2398 struct net_device *dev = tile_net_devs[i]; 2397 2399 struct tile_net_priv *priv = netdev_priv(dev); 2398 2400 unregister_netdev(dev); 2399 - finv_buffer(priv->eq, EQ_SIZE); 2401 + finv_buffer_remote(priv->eq, EQ_SIZE, 0); 2400 2402 __free_pages(priv->eq_pages, EQ_ORDER); 2401 2403 free_netdev(dev); 2402 2404 }
+7
drivers/rtc/Kconfig
··· 992 992 This drive can also be built as a module. If so, the module 993 993 will be called rtc-tegra. 994 994 995 + config RTC_DRV_TILE 996 + tristate "Tilera hypervisor RTC support" 997 + depends on TILE 998 + help 999 + Enable support for the Linux driver side of the Tilera 1000 + hypervisor's real-time clock interface. 1001 + 995 1002 endif # RTC_CLASS
+1
drivers/rtc/Makefile
··· 93 93 obj-$(CONFIG_RTC_DRV_SUN4V) += rtc-sun4v.o 94 94 obj-$(CONFIG_RTC_DRV_TEGRA) += rtc-tegra.o 95 95 obj-$(CONFIG_RTC_DRV_TEST) += rtc-test.o 96 + obj-$(CONFIG_RTC_DRV_TILE) += rtc-tile.o 96 97 obj-$(CONFIG_RTC_DRV_TWL4030) += rtc-twl.o 97 98 obj-$(CONFIG_RTC_DRV_TX4939) += rtc-tx4939.o 98 99 obj-$(CONFIG_RTC_DRV_V3020) += rtc-v3020.o
+162
drivers/rtc/rtc-tile.c
··· 1 + /* 2 + * Copyright 2011 Tilera Corporation. All Rights Reserved. 3 + * 4 + * This program is free software; you can redistribute it and/or 5 + * modify it under the terms of the GNU General Public License 6 + * as published by the Free Software Foundation, version 2. 7 + * 8 + * This program is distributed in the hope that it will be useful, but 9 + * WITHOUT ANY WARRANTY; without even the implied warranty of 10 + * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or 11 + * NON INFRINGEMENT. See the GNU General Public License for 12 + * more details. 13 + * 14 + * Tilera-specific RTC driver. 15 + */ 16 + 17 + #include <linux/module.h> 18 + #include <linux/device.h> 19 + #include <linux/rtc.h> 20 + #include <linux/platform_device.h> 21 + 22 + /* Platform device pointer. */ 23 + static struct platform_device *tile_rtc_platform_device; 24 + 25 + /* 26 + * RTC read routine. Gets time info from RTC chip via hypervisor syscall. 27 + */ 28 + static int read_rtc_time(struct device *dev, struct rtc_time *tm) 29 + { 30 + HV_RTCTime hvtm = hv_get_rtc(); 31 + 32 + tm->tm_sec = hvtm.tm_sec; 33 + tm->tm_min = hvtm.tm_min; 34 + tm->tm_hour = hvtm.tm_hour; 35 + tm->tm_mday = hvtm.tm_mday; 36 + tm->tm_mon = hvtm.tm_mon; 37 + tm->tm_year = hvtm.tm_year; 38 + tm->tm_wday = 0; 39 + tm->tm_yday = 0; 40 + tm->tm_isdst = 0; 41 + 42 + if (rtc_valid_tm(tm) < 0) 43 + dev_warn(dev, "Read invalid date/time from RTC\n"); 44 + 45 + return 0; 46 + } 47 + 48 + /* 49 + * RTC write routine. Sends time info to hypervisor via syscall, to be 50 + * written to RTC chip. 51 + */ 52 + static int set_rtc_time(struct device *dev, struct rtc_time *tm) 53 + { 54 + HV_RTCTime hvtm; 55 + 56 + hvtm.tm_sec = tm->tm_sec; 57 + hvtm.tm_min = tm->tm_min; 58 + hvtm.tm_hour = tm->tm_hour; 59 + hvtm.tm_mday = tm->tm_mday; 60 + hvtm.tm_mon = tm->tm_mon; 61 + hvtm.tm_year = tm->tm_year; 62 + 63 + hv_set_rtc(hvtm); 64 + 65 + return 0; 66 + } 67 + 68 + /* 69 + * RTC read/write ops. 70 + */ 71 + static const struct rtc_class_ops tile_rtc_ops = { 72 + .read_time = read_rtc_time, 73 + .set_time = set_rtc_time, 74 + }; 75 + 76 + /* 77 + * Device probe routine. 78 + */ 79 + static int __devinit tile_rtc_probe(struct platform_device *dev) 80 + { 81 + struct rtc_device *rtc; 82 + 83 + rtc = rtc_device_register("tile", 84 + &dev->dev, &tile_rtc_ops, THIS_MODULE); 85 + 86 + if (IS_ERR(rtc)) 87 + return PTR_ERR(rtc); 88 + 89 + platform_set_drvdata(dev, rtc); 90 + 91 + return 0; 92 + } 93 + 94 + /* 95 + * Device cleanup routine. 96 + */ 97 + static int __devexit tile_rtc_remove(struct platform_device *dev) 98 + { 99 + struct rtc_device *rtc = platform_get_drvdata(dev); 100 + 101 + if (rtc) 102 + rtc_device_unregister(rtc); 103 + 104 + platform_set_drvdata(dev, NULL); 105 + 106 + return 0; 107 + } 108 + 109 + static struct platform_driver tile_rtc_platform_driver = { 110 + .driver = { 111 + .name = "rtc-tile", 112 + .owner = THIS_MODULE, 113 + }, 114 + .probe = tile_rtc_probe, 115 + .remove = __devexit_p(tile_rtc_remove), 116 + }; 117 + 118 + /* 119 + * Driver init routine. 120 + */ 121 + static int __init tile_rtc_driver_init(void) 122 + { 123 + int err; 124 + 125 + err = platform_driver_register(&tile_rtc_platform_driver); 126 + if (err) 127 + return err; 128 + 129 + tile_rtc_platform_device = platform_device_alloc("rtc-tile", 0); 130 + if (tile_rtc_platform_device == NULL) { 131 + err = -ENOMEM; 132 + goto exit_driver_unregister; 133 + } 134 + 135 + err = platform_device_add(tile_rtc_platform_device); 136 + if (err) 137 + goto exit_device_put; 138 + 139 + return 0; 140 + 141 + exit_device_put: 142 + platform_device_put(tile_rtc_platform_device); 143 + 144 + exit_driver_unregister: 145 + platform_driver_unregister(&tile_rtc_platform_driver); 146 + return err; 147 + } 148 + 149 + /* 150 + * Driver cleanup routine. 151 + */ 152 + static void __exit tile_rtc_driver_exit(void) 153 + { 154 + platform_driver_unregister(&tile_rtc_platform_driver); 155 + } 156 + 157 + module_init(tile_rtc_driver_init); 158 + module_exit(tile_rtc_driver_exit); 159 + 160 + MODULE_DESCRIPTION("Tilera-specific Real Time Clock Driver"); 161 + MODULE_LICENSE("GPL"); 162 + MODULE_ALIAS("platform:rtc-tile");
+4
include/asm-generic/audit_change_attr.h
··· 1 + #ifdef __NR_chmod 1 2 __NR_chmod, 3 + #endif 2 4 __NR_fchmod, 3 5 #ifdef __NR_chown 4 6 __NR_chown, ··· 22 20 __NR_fchown32, 23 21 __NR_lchown32, 24 22 #endif 23 + #ifdef __NR_link 25 24 __NR_link, 25 + #endif 26 26 #ifdef __NR_linkat 27 27 __NR_linkat, 28 28 #endif
+14
include/asm-generic/audit_dir_write.h
··· 1 + #ifdef __NR_rename 1 2 __NR_rename, 3 + #endif 4 + #ifdef __NR_mkdir 2 5 __NR_mkdir, 6 + #endif 7 + #ifdef __NR_rmdir 3 8 __NR_rmdir, 9 + #endif 4 10 #ifdef __NR_creat 5 11 __NR_creat, 6 12 #endif 13 + #ifdef __NR_link 7 14 __NR_link, 15 + #endif 16 + #ifdef __NR_unlink 8 17 __NR_unlink, 18 + #endif 19 + #ifdef __NR_symlink 9 20 __NR_symlink, 21 + #endif 22 + #ifdef __NR_mknod 10 23 __NR_mknod, 24 + #endif 11 25 #ifdef __NR_mkdirat 12 26 __NR_mkdirat, 13 27 __NR_mknodat,
+5
include/asm-generic/audit_read.h
··· 1 + #ifdef __NR_readlink 1 2 __NR_readlink, 3 + #endif 2 4 __NR_quotactl, 3 5 __NR_listxattr, 4 6 __NR_llistxattr, ··· 8 6 __NR_getxattr, 9 7 __NR_lgetxattr, 10 8 __NR_fgetxattr, 9 + #ifdef __NR_readlinkat 10 + __NR_readlinkat, 11 + #endif
+2
include/asm-generic/audit_write.h
··· 4 4 __NR_swapon, 5 5 #endif 6 6 __NR_quotactl, 7 + #ifdef __NR_truncate 7 8 __NR_truncate, 9 + #endif 8 10 #ifdef __NR_truncate64 9 11 __NR_truncate64, 10 12 #endif
+124 -97
include/asm-generic/unistd.h
··· 24 24 #define __SC_3264(_nr, _32, _64) __SYSCALL(_nr, _64) 25 25 #endif 26 26 27 + #ifdef __SYSCALL_COMPAT 28 + #define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _comp) 29 + #define __SC_COMP_3264(_nr, _32, _64, _comp) __SYSCALL(_nr, _comp) 30 + #else 31 + #define __SC_COMP(_nr, _sys, _comp) __SYSCALL(_nr, _sys) 32 + #define __SC_COMP_3264(_nr, _32, _64, _comp) __SC_3264(_nr, _32, _64) 33 + #endif 34 + 27 35 #define __NR_io_setup 0 28 - __SYSCALL(__NR_io_setup, sys_io_setup) 36 + __SC_COMP(__NR_io_setup, sys_io_setup, compat_sys_io_setup) 29 37 #define __NR_io_destroy 1 30 38 __SYSCALL(__NR_io_destroy, sys_io_destroy) 31 39 #define __NR_io_submit 2 32 - __SYSCALL(__NR_io_submit, sys_io_submit) 40 + __SC_COMP(__NR_io_submit, sys_io_submit, compat_sys_io_submit) 33 41 #define __NR_io_cancel 3 34 42 __SYSCALL(__NR_io_cancel, sys_io_cancel) 35 43 #define __NR_io_getevents 4 36 - __SYSCALL(__NR_io_getevents, sys_io_getevents) 44 + __SC_COMP(__NR_io_getevents, sys_io_getevents, compat_sys_io_getevents) 37 45 38 46 /* fs/xattr.c */ 39 47 #define __NR_setxattr 5 ··· 75 67 76 68 /* fs/cookies.c */ 77 69 #define __NR_lookup_dcookie 18 78 - __SYSCALL(__NR_lookup_dcookie, sys_lookup_dcookie) 70 + __SC_COMP(__NR_lookup_dcookie, sys_lookup_dcookie, compat_sys_lookup_dcookie) 79 71 80 72 /* fs/eventfd.c */ 81 73 #define __NR_eventfd2 19 ··· 87 79 #define __NR_epoll_ctl 21 88 80 __SYSCALL(__NR_epoll_ctl, sys_epoll_ctl) 89 81 #define __NR_epoll_pwait 22 90 - __SYSCALL(__NR_epoll_pwait, sys_epoll_pwait) 82 + __SC_COMP(__NR_epoll_pwait, sys_epoll_pwait, compat_sys_epoll_pwait) 91 83 92 84 /* fs/fcntl.c */ 93 85 #define __NR_dup 23 ··· 95 87 #define __NR_dup3 24 96 88 __SYSCALL(__NR_dup3, sys_dup3) 97 89 #define __NR3264_fcntl 25 98 - __SC_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl) 90 + __SC_COMP_3264(__NR3264_fcntl, sys_fcntl64, sys_fcntl, compat_sys_fcntl64) 99 91 100 92 /* fs/inotify_user.c */ 101 93 #define __NR_inotify_init1 26 ··· 107 99 108 100 /* fs/ioctl.c */ 109 101 #define __NR_ioctl 29 110 - __SYSCALL(__NR_ioctl, sys_ioctl) 102 + __SC_COMP(__NR_ioctl, sys_ioctl, compat_sys_ioctl) 111 103 112 104 /* fs/ioprio.c */ 113 105 #define __NR_ioprio_set 30 ··· 137 129 #define __NR_umount2 39 138 130 __SYSCALL(__NR_umount2, sys_umount) 139 131 #define __NR_mount 40 140 - __SYSCALL(__NR_mount, sys_mount) 132 + __SC_COMP(__NR_mount, sys_mount, compat_sys_mount) 141 133 #define __NR_pivot_root 41 142 134 __SYSCALL(__NR_pivot_root, sys_pivot_root) 143 135 144 136 /* fs/nfsctl.c */ 145 137 #define __NR_nfsservctl 42 146 - __SYSCALL(__NR_nfsservctl, sys_nfsservctl) 138 + __SC_COMP(__NR_nfsservctl, sys_nfsservctl, compat_sys_nfsservctl) 147 139 148 140 /* fs/open.c */ 149 141 #define __NR3264_statfs 43 150 - __SC_3264(__NR3264_statfs, sys_statfs64, sys_statfs) 142 + __SC_COMP_3264(__NR3264_statfs, sys_statfs64, sys_statfs, \ 143 + compat_sys_statfs64) 151 144 #define __NR3264_fstatfs 44 152 - __SC_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs) 145 + __SC_COMP_3264(__NR3264_fstatfs, sys_fstatfs64, sys_fstatfs, \ 146 + compat_sys_fstatfs64) 153 147 #define __NR3264_truncate 45 154 - __SC_3264(__NR3264_truncate, sys_truncate64, sys_truncate) 148 + __SC_COMP_3264(__NR3264_truncate, sys_truncate64, sys_truncate, \ 149 + compat_sys_truncate64) 155 150 #define __NR3264_ftruncate 46 156 - __SC_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate) 151 + __SC_COMP_3264(__NR3264_ftruncate, sys_ftruncate64, sys_ftruncate, \ 152 + compat_sys_ftruncate64) 157 153 158 154 #define __NR_fallocate 47 159 - __SYSCALL(__NR_fallocate, sys_fallocate) 155 + __SC_COMP(__NR_fallocate, sys_fallocate, compat_sys_fallocate) 160 156 #define __NR_faccessat 48 161 157 __SYSCALL(__NR_faccessat, sys_faccessat) 162 158 #define __NR_chdir 49 ··· 178 166 #define __NR_fchown 55 179 167 __SYSCALL(__NR_fchown, sys_fchown) 180 168 #define __NR_openat 56 181 - __SYSCALL(__NR_openat, sys_openat) 169 + __SC_COMP(__NR_openat, sys_openat, compat_sys_openat) 182 170 #define __NR_close 57 183 171 __SYSCALL(__NR_close, sys_close) 184 172 #define __NR_vhangup 58 ··· 194 182 195 183 /* fs/readdir.c */ 196 184 #define __NR_getdents64 61 197 - __SYSCALL(__NR_getdents64, sys_getdents64) 185 + __SC_COMP(__NR_getdents64, sys_getdents64, compat_sys_getdents64) 198 186 199 187 /* fs/read_write.c */ 200 188 #define __NR3264_lseek 62 ··· 204 192 #define __NR_write 64 205 193 __SYSCALL(__NR_write, sys_write) 206 194 #define __NR_readv 65 207 - __SYSCALL(__NR_readv, sys_readv) 195 + __SC_COMP(__NR_readv, sys_readv, compat_sys_readv) 208 196 #define __NR_writev 66 209 - __SYSCALL(__NR_writev, sys_writev) 197 + __SC_COMP(__NR_writev, sys_writev, compat_sys_writev) 210 198 #define __NR_pread64 67 211 - __SYSCALL(__NR_pread64, sys_pread64) 199 + __SC_COMP(__NR_pread64, sys_pread64, compat_sys_pread64) 212 200 #define __NR_pwrite64 68 213 - __SYSCALL(__NR_pwrite64, sys_pwrite64) 201 + __SC_COMP(__NR_pwrite64, sys_pwrite64, compat_sys_pwrite64) 214 202 #define __NR_preadv 69 215 - __SYSCALL(__NR_preadv, sys_preadv) 203 + __SC_COMP(__NR_preadv, sys_preadv, compat_sys_preadv) 216 204 #define __NR_pwritev 70 217 - __SYSCALL(__NR_pwritev, sys_pwritev) 205 + __SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev) 218 206 219 207 /* fs/sendfile.c */ 220 208 #define __NR3264_sendfile 71 ··· 222 210 223 211 /* fs/select.c */ 224 212 #define __NR_pselect6 72 225 - __SYSCALL(__NR_pselect6, sys_pselect6) 213 + __SC_COMP(__NR_pselect6, sys_pselect6, compat_sys_pselect6) 226 214 #define __NR_ppoll 73 227 - __SYSCALL(__NR_ppoll, sys_ppoll) 215 + __SC_COMP(__NR_ppoll, sys_ppoll, compat_sys_ppoll) 228 216 229 217 /* fs/signalfd.c */ 230 218 #define __NR_signalfd4 74 231 - __SYSCALL(__NR_signalfd4, sys_signalfd4) 219 + __SC_COMP(__NR_signalfd4, sys_signalfd4, compat_sys_signalfd4) 232 220 233 221 /* fs/splice.c */ 234 222 #define __NR_vmsplice 75 235 - __SYSCALL(__NR_vmsplice, sys_vmsplice) 223 + __SC_COMP(__NR_vmsplice, sys_vmsplice, compat_sys_vmsplice) 236 224 #define __NR_splice 76 237 225 __SYSCALL(__NR_splice, sys_splice) 238 226 #define __NR_tee 77 ··· 255 243 __SYSCALL(__NR_fdatasync, sys_fdatasync) 256 244 #ifdef __ARCH_WANT_SYNC_FILE_RANGE2 257 245 #define __NR_sync_file_range2 84 258 - __SYSCALL(__NR_sync_file_range2, sys_sync_file_range2) 246 + __SC_COMP(__NR_sync_file_range2, sys_sync_file_range2, \ 247 + compat_sys_sync_file_range2) 259 248 #else 260 249 #define __NR_sync_file_range 84 261 - __SYSCALL(__NR_sync_file_range, sys_sync_file_range) 250 + __SC_COMP(__NR_sync_file_range, sys_sync_file_range, \ 251 + compat_sys_sync_file_range) 262 252 #endif 263 253 264 254 /* fs/timerfd.c */ 265 255 #define __NR_timerfd_create 85 266 256 __SYSCALL(__NR_timerfd_create, sys_timerfd_create) 267 257 #define __NR_timerfd_settime 86 268 - __SYSCALL(__NR_timerfd_settime, sys_timerfd_settime) 258 + __SC_COMP(__NR_timerfd_settime, sys_timerfd_settime, \ 259 + compat_sys_timerfd_settime) 269 260 #define __NR_timerfd_gettime 87 270 - __SYSCALL(__NR_timerfd_gettime, sys_timerfd_gettime) 261 + __SC_COMP(__NR_timerfd_gettime, sys_timerfd_gettime, \ 262 + compat_sys_timerfd_gettime) 271 263 272 264 /* fs/utimes.c */ 273 265 #define __NR_utimensat 88 274 - __SYSCALL(__NR_utimensat, sys_utimensat) 266 + __SC_COMP(__NR_utimensat, sys_utimensat, compat_sys_utimensat) 275 267 276 268 /* kernel/acct.c */ 277 269 #define __NR_acct 89 ··· 297 281 #define __NR_exit_group 94 298 282 __SYSCALL(__NR_exit_group, sys_exit_group) 299 283 #define __NR_waitid 95 300 - __SYSCALL(__NR_waitid, sys_waitid) 284 + __SC_COMP(__NR_waitid, sys_waitid, compat_sys_waitid) 301 285 302 286 /* kernel/fork.c */ 303 287 #define __NR_set_tid_address 96 ··· 307 291 308 292 /* kernel/futex.c */ 309 293 #define __NR_futex 98 310 - __SYSCALL(__NR_futex, sys_futex) 294 + __SC_COMP(__NR_futex, sys_futex, compat_sys_futex) 311 295 #define __NR_set_robust_list 99 312 - __SYSCALL(__NR_set_robust_list, sys_set_robust_list) 296 + __SC_COMP(__NR_set_robust_list, sys_set_robust_list, \ 297 + compat_sys_set_robust_list) 313 298 #define __NR_get_robust_list 100 314 - __SYSCALL(__NR_get_robust_list, sys_get_robust_list) 299 + __SC_COMP(__NR_get_robust_list, sys_get_robust_list, \ 300 + compat_sys_get_robust_list) 315 301 316 302 /* kernel/hrtimer.c */ 317 303 #define __NR_nanosleep 101 318 - __SYSCALL(__NR_nanosleep, sys_nanosleep) 304 + __SC_COMP(__NR_nanosleep, sys_nanosleep, compat_sys_nanosleep) 319 305 320 306 /* kernel/itimer.c */ 321 307 #define __NR_getitimer 102 322 - __SYSCALL(__NR_getitimer, sys_getitimer) 308 + __SC_COMP(__NR_getitimer, sys_getitimer, compat_sys_getitimer) 323 309 #define __NR_setitimer 103 324 - __SYSCALL(__NR_setitimer, sys_setitimer) 310 + __SC_COMP(__NR_setitimer, sys_setitimer, compat_sys_setitimer) 325 311 326 312 /* kernel/kexec.c */ 327 313 #define __NR_kexec_load 104 328 - __SYSCALL(__NR_kexec_load, sys_kexec_load) 314 + __SC_COMP(__NR_kexec_load, sys_kexec_load, compat_sys_kexec_load) 329 315 330 316 /* kernel/module.c */ 331 317 #define __NR_init_module 105 ··· 337 319 338 320 /* kernel/posix-timers.c */ 339 321 #define __NR_timer_create 107 340 - __SYSCALL(__NR_timer_create, sys_timer_create) 322 + __SC_COMP(__NR_timer_create, sys_timer_create, compat_sys_timer_create) 341 323 #define __NR_timer_gettime 108 342 - __SYSCALL(__NR_timer_gettime, sys_timer_gettime) 324 + __SC_COMP(__NR_timer_gettime, sys_timer_gettime, compat_sys_timer_gettime) 343 325 #define __NR_timer_getoverrun 109 344 326 __SYSCALL(__NR_timer_getoverrun, sys_timer_getoverrun) 345 327 #define __NR_timer_settime 110 346 - __SYSCALL(__NR_timer_settime, sys_timer_settime) 328 + __SC_COMP(__NR_timer_settime, sys_timer_settime, compat_sys_timer_settime) 347 329 #define __NR_timer_delete 111 348 330 __SYSCALL(__NR_timer_delete, sys_timer_delete) 349 331 #define __NR_clock_settime 112 350 - __SYSCALL(__NR_clock_settime, sys_clock_settime) 332 + __SC_COMP(__NR_clock_settime, sys_clock_settime, compat_sys_clock_settime) 351 333 #define __NR_clock_gettime 113 352 - __SYSCALL(__NR_clock_gettime, sys_clock_gettime) 334 + __SC_COMP(__NR_clock_gettime, sys_clock_gettime, compat_sys_clock_gettime) 353 335 #define __NR_clock_getres 114 354 - __SYSCALL(__NR_clock_getres, sys_clock_getres) 336 + __SC_COMP(__NR_clock_getres, sys_clock_getres, compat_sys_clock_getres) 355 337 #define __NR_clock_nanosleep 115 356 - __SYSCALL(__NR_clock_nanosleep, sys_clock_nanosleep) 338 + __SC_COMP(__NR_clock_nanosleep, sys_clock_nanosleep, \ 339 + compat_sys_clock_nanosleep) 357 340 358 341 /* kernel/printk.c */ 359 342 #define __NR_syslog 116 ··· 374 355 #define __NR_sched_getparam 121 375 356 __SYSCALL(__NR_sched_getparam, sys_sched_getparam) 376 357 #define __NR_sched_setaffinity 122 377 - __SYSCALL(__NR_sched_setaffinity, sys_sched_setaffinity) 358 + __SC_COMP(__NR_sched_setaffinity, sys_sched_setaffinity, \ 359 + compat_sys_sched_setaffinity) 378 360 #define __NR_sched_getaffinity 123 379 - __SYSCALL(__NR_sched_getaffinity, sys_sched_getaffinity) 361 + __SC_COMP(__NR_sched_getaffinity, sys_sched_getaffinity, \ 362 + compat_sys_sched_getaffinity) 380 363 #define __NR_sched_yield 124 381 364 __SYSCALL(__NR_sched_yield, sys_sched_yield) 382 365 #define __NR_sched_get_priority_max 125 ··· 386 365 #define __NR_sched_get_priority_min 126 387 366 __SYSCALL(__NR_sched_get_priority_min, sys_sched_get_priority_min) 388 367 #define __NR_sched_rr_get_interval 127 389 - __SYSCALL(__NR_sched_rr_get_interval, sys_sched_rr_get_interval) 368 + __SC_COMP(__NR_sched_rr_get_interval, sys_sched_rr_get_interval, \ 369 + compat_sys_sched_rr_get_interval) 390 370 391 371 /* kernel/signal.c */ 392 372 #define __NR_restart_syscall 128 ··· 399 377 #define __NR_tgkill 131 400 378 __SYSCALL(__NR_tgkill, sys_tgkill) 401 379 #define __NR_sigaltstack 132 402 - __SYSCALL(__NR_sigaltstack, sys_sigaltstack) 380 + __SC_COMP(__NR_sigaltstack, sys_sigaltstack, compat_sys_sigaltstack) 403 381 #define __NR_rt_sigsuspend 133 404 - __SYSCALL(__NR_rt_sigsuspend, sys_rt_sigsuspend) /* __ARCH_WANT_SYS_RT_SIGSUSPEND */ 382 + __SC_COMP(__NR_rt_sigsuspend, sys_rt_sigsuspend, compat_sys_rt_sigsuspend) 405 383 #define __NR_rt_sigaction 134 406 - __SYSCALL(__NR_rt_sigaction, sys_rt_sigaction) /* __ARCH_WANT_SYS_RT_SIGACTION */ 384 + __SC_COMP(__NR_rt_sigaction, sys_rt_sigaction, compat_sys_rt_sigaction) 407 385 #define __NR_rt_sigprocmask 135 408 386 __SYSCALL(__NR_rt_sigprocmask, sys_rt_sigprocmask) 409 387 #define __NR_rt_sigpending 136 410 388 __SYSCALL(__NR_rt_sigpending, sys_rt_sigpending) 411 389 #define __NR_rt_sigtimedwait 137 412 - __SYSCALL(__NR_rt_sigtimedwait, sys_rt_sigtimedwait) 390 + __SC_COMP(__NR_rt_sigtimedwait, sys_rt_sigtimedwait, \ 391 + compat_sys_rt_sigtimedwait) 413 392 #define __NR_rt_sigqueueinfo 138 414 - __SYSCALL(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo) 393 + __SC_COMP(__NR_rt_sigqueueinfo, sys_rt_sigqueueinfo, \ 394 + compat_sys_rt_sigqueueinfo) 415 395 #define __NR_rt_sigreturn 139 416 - __SYSCALL(__NR_rt_sigreturn, sys_rt_sigreturn) /* sys_rt_sigreturn_wrapper, */ 396 + __SC_COMP(__NR_rt_sigreturn, sys_rt_sigreturn, compat_sys_rt_sigreturn) 417 397 418 398 /* kernel/sys.c */ 419 399 #define __NR_setpriority 140 ··· 445 421 #define __NR_setfsgid 152 446 422 __SYSCALL(__NR_setfsgid, sys_setfsgid) 447 423 #define __NR_times 153 448 - __SYSCALL(__NR_times, sys_times) 424 + __SC_COMP(__NR_times, sys_times, compat_sys_times) 449 425 #define __NR_setpgid 154 450 426 __SYSCALL(__NR_setpgid, sys_setpgid) 451 427 #define __NR_getpgid 155 ··· 465 441 #define __NR_setdomainname 162 466 442 __SYSCALL(__NR_setdomainname, sys_setdomainname) 467 443 #define __NR_getrlimit 163 468 - __SYSCALL(__NR_getrlimit, sys_getrlimit) 444 + __SC_COMP(__NR_getrlimit, sys_getrlimit, compat_sys_getrlimit) 469 445 #define __NR_setrlimit 164 470 - __SYSCALL(__NR_setrlimit, sys_setrlimit) 446 + __SC_COMP(__NR_setrlimit, sys_setrlimit, compat_sys_setrlimit) 471 447 #define __NR_getrusage 165 472 - __SYSCALL(__NR_getrusage, sys_getrusage) 448 + __SC_COMP(__NR_getrusage, sys_getrusage, compat_sys_getrusage) 473 449 #define __NR_umask 166 474 450 __SYSCALL(__NR_umask, sys_umask) 475 451 #define __NR_prctl 167 ··· 479 455 480 456 /* kernel/time.c */ 481 457 #define __NR_gettimeofday 169 482 - __SYSCALL(__NR_gettimeofday, sys_gettimeofday) 458 + __SC_COMP(__NR_gettimeofday, sys_gettimeofday, compat_sys_gettimeofday) 483 459 #define __NR_settimeofday 170 484 - __SYSCALL(__NR_settimeofday, sys_settimeofday) 460 + __SC_COMP(__NR_settimeofday, sys_settimeofday, compat_sys_settimeofday) 485 461 #define __NR_adjtimex 171 486 - __SYSCALL(__NR_adjtimex, sys_adjtimex) 462 + __SC_COMP(__NR_adjtimex, sys_adjtimex, compat_sys_adjtimex) 487 463 488 464 /* kernel/timer.c */ 489 465 #define __NR_getpid 172 ··· 501 477 #define __NR_gettid 178 502 478 __SYSCALL(__NR_gettid, sys_gettid) 503 479 #define __NR_sysinfo 179 504 - __SYSCALL(__NR_sysinfo, sys_sysinfo) 480 + __SC_COMP(__NR_sysinfo, sys_sysinfo, compat_sys_sysinfo) 505 481 506 482 /* ipc/mqueue.c */ 507 483 #define __NR_mq_open 180 508 - __SYSCALL(__NR_mq_open, sys_mq_open) 484 + __SC_COMP(__NR_mq_open, sys_mq_open, compat_sys_mq_open) 509 485 #define __NR_mq_unlink 181 510 486 __SYSCALL(__NR_mq_unlink, sys_mq_unlink) 511 487 #define __NR_mq_timedsend 182 512 - __SYSCALL(__NR_mq_timedsend, sys_mq_timedsend) 488 + __SC_COMP(__NR_mq_timedsend, sys_mq_timedsend, compat_sys_mq_timedsend) 513 489 #define __NR_mq_timedreceive 183 514 - __SYSCALL(__NR_mq_timedreceive, sys_mq_timedreceive) 490 + __SC_COMP(__NR_mq_timedreceive, sys_mq_timedreceive, \ 491 + compat_sys_mq_timedreceive) 515 492 #define __NR_mq_notify 184 516 - __SYSCALL(__NR_mq_notify, sys_mq_notify) 493 + __SC_COMP(__NR_mq_notify, sys_mq_notify, compat_sys_mq_notify) 517 494 #define __NR_mq_getsetattr 185 518 - __SYSCALL(__NR_mq_getsetattr, sys_mq_getsetattr) 495 + __SC_COMP(__NR_mq_getsetattr, sys_mq_getsetattr, compat_sys_mq_getsetattr) 519 496 520 497 /* ipc/msg.c */ 521 498 #define __NR_msgget 186 522 499 __SYSCALL(__NR_msgget, sys_msgget) 523 500 #define __NR_msgctl 187 524 - __SYSCALL(__NR_msgctl, sys_msgctl) 501 + __SC_COMP(__NR_msgctl, sys_msgctl, compat_sys_msgctl) 525 502 #define __NR_msgrcv 188 526 - __SYSCALL(__NR_msgrcv, sys_msgrcv) 503 + __SC_COMP(__NR_msgrcv, sys_msgrcv, compat_sys_msgrcv) 527 504 #define __NR_msgsnd 189 528 - __SYSCALL(__NR_msgsnd, sys_msgsnd) 505 + __SC_COMP(__NR_msgsnd, sys_msgsnd, compat_sys_msgsnd) 529 506 530 507 /* ipc/sem.c */ 531 508 #define __NR_semget 190 532 509 __SYSCALL(__NR_semget, sys_semget) 533 510 #define __NR_semctl 191 534 - __SYSCALL(__NR_semctl, sys_semctl) 511 + __SC_COMP(__NR_semctl, sys_semctl, compat_sys_semctl) 535 512 #define __NR_semtimedop 192 536 - __SYSCALL(__NR_semtimedop, sys_semtimedop) 513 + __SC_COMP(__NR_semtimedop, sys_semtimedop, compat_sys_semtimedop) 537 514 #define __NR_semop 193 538 515 __SYSCALL(__NR_semop, sys_semop) 539 516 ··· 542 517 #define __NR_shmget 194 543 518 __SYSCALL(__NR_shmget, sys_shmget) 544 519 #define __NR_shmctl 195 545 - __SYSCALL(__NR_shmctl, sys_shmctl) 520 + __SC_COMP(__NR_shmctl, sys_shmctl, compat_sys_shmctl) 546 521 #define __NR_shmat 196 547 - __SYSCALL(__NR_shmat, sys_shmat) 522 + __SC_COMP(__NR_shmat, sys_shmat, compat_sys_shmat) 548 523 #define __NR_shmdt 197 549 524 __SYSCALL(__NR_shmdt, sys_shmdt) 550 525 ··· 568 543 #define __NR_sendto 206 569 544 __SYSCALL(__NR_sendto, sys_sendto) 570 545 #define __NR_recvfrom 207 571 - __SYSCALL(__NR_recvfrom, sys_recvfrom) 546 + __SC_COMP(__NR_recvfrom, sys_recvfrom, compat_sys_recvfrom) 572 547 #define __NR_setsockopt 208 573 - __SYSCALL(__NR_setsockopt, sys_setsockopt) 548 + __SC_COMP(__NR_setsockopt, sys_setsockopt, compat_sys_setsockopt) 574 549 #define __NR_getsockopt 209 575 - __SYSCALL(__NR_getsockopt, sys_getsockopt) 550 + __SC_COMP(__NR_getsockopt, sys_getsockopt, compat_sys_getsockopt) 576 551 #define __NR_shutdown 210 577 552 __SYSCALL(__NR_shutdown, sys_shutdown) 578 553 #define __NR_sendmsg 211 579 - __SYSCALL(__NR_sendmsg, sys_sendmsg) 554 + __SC_COMP(__NR_sendmsg, sys_sendmsg, compat_sys_sendmsg) 580 555 #define __NR_recvmsg 212 581 - __SYSCALL(__NR_recvmsg, sys_recvmsg) 556 + __SC_COMP(__NR_recvmsg, sys_recvmsg, compat_sys_recvmsg) 582 557 583 558 /* mm/filemap.c */ 584 559 #define __NR_readahead 213 585 - __SYSCALL(__NR_readahead, sys_readahead) 560 + __SC_COMP(__NR_readahead, sys_readahead, compat_sys_readahead) 586 561 587 562 /* mm/nommu.c, also with MMU */ 588 563 #define __NR_brk 214 ··· 598 573 #define __NR_request_key 218 599 574 __SYSCALL(__NR_request_key, sys_request_key) 600 575 #define __NR_keyctl 219 601 - __SYSCALL(__NR_keyctl, sys_keyctl) 576 + __SC_COMP(__NR_keyctl, sys_keyctl, compat_sys_keyctl) 602 577 603 578 /* arch/example/kernel/sys_example.c */ 604 579 #define __NR_clone 220 605 - __SYSCALL(__NR_clone, sys_clone) /* .long sys_clone_wrapper */ 580 + __SYSCALL(__NR_clone, sys_clone) 606 581 #define __NR_execve 221 607 - __SYSCALL(__NR_execve, sys_execve) /* .long sys_execve_wrapper */ 582 + __SC_COMP(__NR_execve, sys_execve, compat_sys_execve) 608 583 609 584 #define __NR3264_mmap 222 610 585 __SC_3264(__NR3264_mmap, sys_mmap2, sys_mmap) 611 586 /* mm/fadvise.c */ 612 587 #define __NR3264_fadvise64 223 613 - __SYSCALL(__NR3264_fadvise64, sys_fadvise64_64) 588 + __SC_COMP(__NR3264_fadvise64, sys_fadvise64_64, compat_sys_fadvise64_64) 614 589 615 590 /* mm/, CONFIG_MMU only */ 616 591 #ifndef __ARCH_NOMMU ··· 637 612 #define __NR_remap_file_pages 234 638 613 __SYSCALL(__NR_remap_file_pages, sys_remap_file_pages) 639 614 #define __NR_mbind 235 640 - __SYSCALL(__NR_mbind, sys_mbind) 615 + __SC_COMP(__NR_mbind, sys_mbind, compat_sys_mbind) 641 616 #define __NR_get_mempolicy 236 642 - __SYSCALL(__NR_get_mempolicy, sys_get_mempolicy) 617 + __SC_COMP(__NR_get_mempolicy, sys_get_mempolicy, compat_sys_get_mempolicy) 643 618 #define __NR_set_mempolicy 237 644 - __SYSCALL(__NR_set_mempolicy, sys_set_mempolicy) 619 + __SC_COMP(__NR_set_mempolicy, sys_set_mempolicy, compat_sys_set_mempolicy) 645 620 #define __NR_migrate_pages 238 646 - __SYSCALL(__NR_migrate_pages, sys_migrate_pages) 621 + __SC_COMP(__NR_migrate_pages, sys_migrate_pages, compat_sys_migrate_pages) 647 622 #define __NR_move_pages 239 648 - __SYSCALL(__NR_move_pages, sys_move_pages) 623 + __SC_COMP(__NR_move_pages, sys_move_pages, compat_sys_move_pages) 649 624 #endif 650 625 651 626 #define __NR_rt_tgsigqueueinfo 240 652 - __SYSCALL(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo) 627 + __SC_COMP(__NR_rt_tgsigqueueinfo, sys_rt_tgsigqueueinfo, \ 628 + compat_sys_rt_tgsigqueueinfo) 653 629 #define __NR_perf_event_open 241 654 630 __SYSCALL(__NR_perf_event_open, sys_perf_event_open) 655 631 #define __NR_accept4 242 656 632 __SYSCALL(__NR_accept4, sys_accept4) 657 633 #define __NR_recvmmsg 243 658 - __SYSCALL(__NR_recvmmsg, sys_recvmmsg) 634 + __SC_COMP(__NR_recvmmsg, sys_recvmmsg, compat_sys_recvmmsg) 659 635 660 636 /* 661 637 * Architectures may provide up to 16 syscalls of their own ··· 665 639 #define __NR_arch_specific_syscall 244 666 640 667 641 #define __NR_wait4 260 668 - __SYSCALL(__NR_wait4, sys_wait4) 642 + __SC_COMP(__NR_wait4, sys_wait4, compat_sys_wait4) 669 643 #define __NR_prlimit64 261 670 644 __SYSCALL(__NR_prlimit64, sys_prlimit64) 671 645 #define __NR_fanotify_init 262 672 646 __SYSCALL(__NR_fanotify_init, sys_fanotify_init) 673 647 #define __NR_fanotify_mark 263 674 648 __SYSCALL(__NR_fanotify_mark, sys_fanotify_mark) 675 - #define __NR_name_to_handle_at 264 649 + #define __NR_name_to_handle_at 264 676 650 __SYSCALL(__NR_name_to_handle_at, sys_name_to_handle_at) 677 - #define __NR_open_by_handle_at 265 678 - __SYSCALL(__NR_open_by_handle_at, sys_open_by_handle_at) 651 + #define __NR_open_by_handle_at 265 652 + __SC_COMP(__NR_open_by_handle_at, sys_open_by_handle_at, \ 653 + compat_sys_open_by_handle_at) 679 654 #define __NR_clock_adjtime 266 680 - __SYSCALL(__NR_clock_adjtime, sys_clock_adjtime) 655 + __SC_COMP(__NR_clock_adjtime, sys_clock_adjtime, compat_sys_clock_adjtime) 681 656 #define __NR_syncfs 267 682 657 __SYSCALL(__NR_syncfs, sys_syncfs) 683 658
+216 -20
include/linux/compat.h
··· 12 12 #include <linux/sem.h> 13 13 #include <linux/socket.h> 14 14 #include <linux/if.h> 15 + #include <linux/fs.h> 16 + #include <linux/aio_abi.h> /* for aio_context_t */ 15 17 16 18 #include <asm/compat.h> 17 19 #include <asm/siginfo.h> ··· 28 26 struct compat_sel_arg_struct; 29 27 struct rusage; 30 28 31 - struct compat_itimerspec { 29 + struct compat_itimerspec { 32 30 struct compat_timespec it_interval; 33 31 struct compat_timespec it_value; 34 32 }; ··· 72 70 compat_long_t stbcnt; 73 71 compat_int_t tai; 74 72 75 - compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; 76 - compat_int_t :32; compat_int_t :32; compat_int_t :32; compat_int_t :32; 77 - compat_int_t :32; compat_int_t :32; compat_int_t :32; 73 + compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; 74 + compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32; 75 + compat_int_t:32; compat_int_t:32; compat_int_t:32; 78 76 }; 79 77 80 78 #define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW) ··· 83 81 compat_sigset_word sig[_COMPAT_NSIG_WORDS]; 84 82 } compat_sigset_t; 85 83 86 - extern int get_compat_timespec(struct timespec *, const struct compat_timespec __user *); 87 - extern int put_compat_timespec(const struct timespec *, struct compat_timespec __user *); 84 + extern int get_compat_timespec(struct timespec *, 85 + const struct compat_timespec __user *); 86 + extern int put_compat_timespec(const struct timespec *, 87 + struct compat_timespec __user *); 88 88 89 89 struct compat_iovec { 90 90 compat_uptr_t iov_base; ··· 117 113 compat_long_t ru_nivcsw; 118 114 }; 119 115 120 - extern int put_compat_rusage(const struct rusage *, struct compat_rusage __user *); 116 + extern int put_compat_rusage(const struct rusage *, 117 + struct compat_rusage __user *); 121 118 122 119 struct compat_siginfo; 123 120 ··· 171 166 unsigned char port; 172 167 }; 173 168 174 - struct compat_if_settings 175 - { 169 + struct compat_if_settings { 176 170 unsigned int type; /* Type of physical device or protocol */ 177 171 unsigned int size; /* Size of the data allocated by the caller */ 178 172 compat_uptr_t ifs_ifsu; /* union of pointers */ ··· 199 195 }; 200 196 201 197 struct compat_ifconf { 202 - compat_int_t ifc_len; /* size of buffer */ 203 - compat_caddr_t ifcbuf; 198 + compat_int_t ifc_len; /* size of buffer */ 199 + compat_caddr_t ifcbuf; 204 200 }; 205 201 206 202 struct compat_robust_list { ··· 212 208 compat_long_t futex_offset; 213 209 compat_uptr_t list_op_pending; 214 210 }; 211 + 212 + struct compat_statfs; 213 + struct compat_statfs64; 214 + struct compat_old_linux_dirent; 215 + struct compat_linux_dirent; 216 + struct linux_dirent64; 217 + struct compat_msghdr; 218 + struct compat_mmsghdr; 219 + struct compat_sysinfo; 220 + struct compat_sysctl_args; 221 + struct compat_kexec_segment; 222 + struct compat_mq_attr; 215 223 216 224 extern void compat_exit_robust_list(struct task_struct *curr); 217 225 ··· 259 243 const struct compat_iovec __user *vec, 260 244 unsigned long vlen, u32 pos_low, u32 pos_high); 261 245 262 - int compat_do_execve(char * filename, compat_uptr_t __user *argv, 263 - compat_uptr_t __user *envp, struct pt_regs * regs); 246 + int compat_do_execve(char *filename, compat_uptr_t __user *argv, 247 + compat_uptr_t __user *envp, struct pt_regs *regs); 264 248 265 249 asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp, 266 250 compat_ulong_t __user *outp, compat_ulong_t __user *exp, ··· 347 331 const compat_sigset_t __user *sigmask, 348 332 compat_size_t sigsetsize); 349 333 350 - asmlinkage long compat_sys_utimensat(unsigned int dfd, const char __user *filename, 351 - struct compat_timespec __user *t, int flags); 334 + asmlinkage long compat_sys_utime(const char __user *filename, 335 + struct compat_utimbuf __user *t); 336 + asmlinkage long compat_sys_utimensat(unsigned int dfd, 337 + const char __user *filename, 338 + struct compat_timespec __user *t, 339 + int flags); 352 340 341 + asmlinkage long compat_sys_time(compat_time_t __user *tloc); 342 + asmlinkage long compat_sys_stime(compat_time_t __user *tptr); 353 343 asmlinkage long compat_sys_signalfd(int ufd, 354 - const compat_sigset_t __user *sigmask, 355 - compat_size_t sigsetsize); 344 + const compat_sigset_t __user *sigmask, 345 + compat_size_t sigsetsize); 356 346 asmlinkage long compat_sys_timerfd_settime(int ufd, int flags, 357 347 const struct compat_itimerspec __user *utmr, 358 348 struct compat_itimerspec __user *otmr); ··· 370 348 const int __user *nodes, 371 349 int __user *status, 372 350 int flags); 373 - asmlinkage long compat_sys_futimesat(unsigned int dfd, const char __user *filename, 351 + asmlinkage long compat_sys_futimesat(unsigned int dfd, 352 + const char __user *filename, 374 353 struct compat_timeval __user *t); 375 - asmlinkage long compat_sys_newfstatat(unsigned int dfd, const char __user * filename, 354 + asmlinkage long compat_sys_utimes(const char __user *filename, 355 + struct compat_timeval __user *t); 356 + asmlinkage long compat_sys_newstat(const char __user *filename, 357 + struct compat_stat __user *statbuf); 358 + asmlinkage long compat_sys_newlstat(const char __user *filename, 359 + struct compat_stat __user *statbuf); 360 + asmlinkage long compat_sys_newfstatat(unsigned int dfd, 361 + const char __user *filename, 376 362 struct compat_stat __user *statbuf, 377 363 int flag); 364 + asmlinkage long compat_sys_newfstat(unsigned int fd, 365 + struct compat_stat __user *statbuf); 366 + asmlinkage long compat_sys_statfs(const char __user *pathname, 367 + struct compat_statfs __user *buf); 368 + asmlinkage long compat_sys_fstatfs(unsigned int fd, 369 + struct compat_statfs __user *buf); 370 + asmlinkage long compat_sys_statfs64(const char __user *pathname, 371 + compat_size_t sz, 372 + struct compat_statfs64 __user *buf); 373 + asmlinkage long compat_sys_fstatfs64(unsigned int fd, compat_size_t sz, 374 + struct compat_statfs64 __user *buf); 375 + asmlinkage long compat_sys_fcntl64(unsigned int fd, unsigned int cmd, 376 + unsigned long arg); 377 + asmlinkage long compat_sys_fcntl(unsigned int fd, unsigned int cmd, 378 + unsigned long arg); 379 + asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p); 380 + asmlinkage long compat_sys_io_getevents(aio_context_t ctx_id, 381 + unsigned long min_nr, 382 + unsigned long nr, 383 + struct io_event __user *events, 384 + struct compat_timespec __user *timeout); 385 + asmlinkage long compat_sys_io_submit(aio_context_t ctx_id, int nr, 386 + u32 __user *iocb); 387 + asmlinkage long compat_sys_mount(const char __user *dev_name, 388 + const char __user *dir_name, 389 + const char __user *type, unsigned long flags, 390 + const void __user *data); 391 + asmlinkage long compat_sys_old_readdir(unsigned int fd, 392 + struct compat_old_linux_dirent __user *, 393 + unsigned int count); 394 + asmlinkage long compat_sys_getdents(unsigned int fd, 395 + struct compat_linux_dirent __user *dirent, 396 + unsigned int count); 397 + asmlinkage long compat_sys_getdents64(unsigned int fd, 398 + struct linux_dirent64 __user *dirent, 399 + unsigned int count); 400 + asmlinkage long compat_sys_vmsplice(int fd, const struct compat_iovec __user *, 401 + unsigned int nr_segs, unsigned int flags); 402 + asmlinkage long compat_sys_open(const char __user *filename, int flags, 403 + int mode); 378 404 asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, 379 405 int flags, int mode); 406 + asmlinkage long compat_sys_open_by_handle_at(int mountdirfd, 407 + struct file_handle __user *handle, 408 + int flags); 409 + asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, 410 + compat_ulong_t __user *outp, 411 + compat_ulong_t __user *exp, 412 + struct compat_timespec __user *tsp, 413 + void __user *sig); 414 + asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, 415 + unsigned int nfds, 416 + struct compat_timespec __user *tsp, 417 + const compat_sigset_t __user *sigmask, 418 + compat_size_t sigsetsize); 419 + #if (defined(CONFIG_NFSD) || defined(CONFIG_NFSD_MODULE)) && \ 420 + !defined(CONFIG_NFSD_DEPRECATED) 421 + union compat_nfsctl_res; 422 + struct compat_nfsctl_arg; 423 + asmlinkage long compat_sys_nfsservctl(int cmd, 424 + struct compat_nfsctl_arg __user *arg, 425 + union compat_nfsctl_res __user *res); 426 + #else 427 + asmlinkage long compat_sys_nfsservctl(int cmd, void *notused, void *notused2); 428 + #endif 429 + asmlinkage long compat_sys_signalfd4(int ufd, 430 + const compat_sigset_t __user *sigmask, 431 + compat_size_t sigsetsize, int flags); 432 + asmlinkage long compat_sys_get_mempolicy(int __user *policy, 433 + compat_ulong_t __user *nmask, 434 + compat_ulong_t maxnode, 435 + compat_ulong_t addr, 436 + compat_ulong_t flags); 437 + asmlinkage long compat_sys_set_mempolicy(int mode, compat_ulong_t __user *nmask, 438 + compat_ulong_t maxnode); 439 + asmlinkage long compat_sys_mbind(compat_ulong_t start, compat_ulong_t len, 440 + compat_ulong_t mode, 441 + compat_ulong_t __user *nmask, 442 + compat_ulong_t maxnode, compat_ulong_t flags); 443 + 444 + asmlinkage long compat_sys_setsockopt(int fd, int level, int optname, 445 + char __user *optval, unsigned int optlen); 446 + asmlinkage long compat_sys_sendmsg(int fd, struct compat_msghdr __user *msg, 447 + unsigned flags); 448 + asmlinkage long compat_sys_recvmsg(int fd, struct compat_msghdr __user *msg, 449 + unsigned int flags); 450 + asmlinkage long compat_sys_recv(int fd, void __user *buf, size_t len, 451 + unsigned flags); 452 + asmlinkage long compat_sys_recvfrom(int fd, void __user *buf, size_t len, 453 + unsigned flags, struct sockaddr __user *addr, 454 + int __user *addrlen); 455 + asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg, 456 + unsigned vlen, unsigned int flags, 457 + struct compat_timespec __user *timeout); 458 + asmlinkage long compat_sys_nanosleep(struct compat_timespec __user *rqtp, 459 + struct compat_timespec __user *rmtp); 460 + asmlinkage long compat_sys_getitimer(int which, 461 + struct compat_itimerval __user *it); 462 + asmlinkage long compat_sys_setitimer(int which, 463 + struct compat_itimerval __user *in, 464 + struct compat_itimerval __user *out); 465 + asmlinkage long compat_sys_times(struct compat_tms __user *tbuf); 466 + asmlinkage long compat_sys_setrlimit(unsigned int resource, 467 + struct compat_rlimit __user *rlim); 468 + asmlinkage long compat_sys_getrlimit(unsigned int resource, 469 + struct compat_rlimit __user *rlim); 470 + asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru); 471 + asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid, 472 + unsigned int len, 473 + compat_ulong_t __user *user_mask_ptr); 474 + asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid, 475 + unsigned int len, 476 + compat_ulong_t __user *user_mask_ptr); 477 + asmlinkage long compat_sys_timer_create(clockid_t which_clock, 478 + struct compat_sigevent __user *timer_event_spec, 479 + timer_t __user *created_timer_id); 480 + asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags, 481 + struct compat_itimerspec __user *new, 482 + struct compat_itimerspec __user *old); 483 + asmlinkage long compat_sys_timer_gettime(timer_t timer_id, 484 + struct compat_itimerspec __user *setting); 485 + asmlinkage long compat_sys_clock_settime(clockid_t which_clock, 486 + struct compat_timespec __user *tp); 487 + asmlinkage long compat_sys_clock_gettime(clockid_t which_clock, 488 + struct compat_timespec __user *tp); 489 + asmlinkage long compat_sys_clock_adjtime(clockid_t which_clock, 490 + struct compat_timex __user *tp); 491 + asmlinkage long compat_sys_clock_getres(clockid_t which_clock, 492 + struct compat_timespec __user *tp); 493 + asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags, 494 + struct compat_timespec __user *rqtp, 495 + struct compat_timespec __user *rmtp); 496 + asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese, 497 + struct compat_siginfo __user *uinfo, 498 + struct compat_timespec __user *uts, compat_size_t sigsetsize); 499 + asmlinkage long compat_sys_rt_sigsuspend(compat_sigset_t __user *unewset, 500 + compat_size_t sigsetsize); 501 + asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info); 502 + asmlinkage long compat_sys_ioctl(unsigned int fd, unsigned int cmd, 503 + unsigned long arg); 504 + asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val, 505 + struct compat_timespec __user *utime, u32 __user *uaddr2, 506 + u32 val3); 507 + asmlinkage long compat_sys_getsockopt(int fd, int level, int optname, 508 + char __user *optval, int __user *optlen); 509 + asmlinkage long compat_sys_kexec_load(unsigned long entry, 510 + unsigned long nr_segments, 511 + struct compat_kexec_segment __user *, 512 + unsigned long flags); 513 + asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes, 514 + const struct compat_mq_attr __user *u_mqstat, 515 + struct compat_mq_attr __user *u_omqstat); 516 + asmlinkage long compat_sys_mq_notify(mqd_t mqdes, 517 + const struct compat_sigevent __user *u_notification); 518 + asmlinkage long compat_sys_mq_open(const char __user *u_name, 519 + int oflag, compat_mode_t mode, 520 + struct compat_mq_attr __user *u_attr); 521 + asmlinkage long compat_sys_mq_timedsend(mqd_t mqdes, 522 + const char __user *u_msg_ptr, 523 + size_t msg_len, unsigned int msg_prio, 524 + const struct compat_timespec __user *u_abs_timeout); 525 + asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes, 526 + char __user *u_msg_ptr, 527 + size_t msg_len, unsigned int __user *u_msg_prio, 528 + const struct compat_timespec __user *u_abs_timeout); 529 + asmlinkage long compat_sys_socketcall(int call, u32 __user *args); 530 + asmlinkage long compat_sys_sysctl(struct compat_sysctl_args __user *args); 380 531 381 532 extern ssize_t compat_rw_copy_check_uvector(int type, 382 - const struct compat_iovec __user *uvector, unsigned long nr_segs, 533 + const struct compat_iovec __user *uvector, 534 + unsigned long nr_segs, 383 535 unsigned long fast_segs, struct iovec *fast_pointer, 384 536 struct iovec **ret_pointer); 385 537
+8
kernel/compat.c
··· 293 293 return compat_jiffies_to_clock_t(jiffies); 294 294 } 295 295 296 + #ifdef __ARCH_WANT_SYS_SIGPENDING 297 + 296 298 /* 297 299 * Assumption: old_sigset_t and compat_old_sigset_t are both 298 300 * types that can be passed to put_user()/get_user(). ··· 313 311 ret = put_user(s, set); 314 312 return ret; 315 313 } 314 + 315 + #endif 316 + 317 + #ifdef __ARCH_WANT_SYS_SIGPROCMASK 316 318 317 319 asmlinkage long compat_sys_sigprocmask(int how, compat_old_sigset_t __user *set, 318 320 compat_old_sigset_t __user *oset) ··· 338 332 ret = put_user(s, oset); 339 333 return ret; 340 334 } 335 + 336 + #endif 341 337 342 338 asmlinkage long compat_sys_setrlimit(unsigned int resource, 343 339 struct compat_rlimit __user *rlim)
+1 -1
kernel/sysctl.c
··· 1506 1506 1507 1507 static struct ctl_table debug_table[] = { 1508 1508 #if defined(CONFIG_X86) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) || \ 1509 - defined(CONFIG_S390) 1509 + defined(CONFIG_S390) || defined(CONFIG_TILE) 1510 1510 { 1511 1511 .procname = "exception-trace", 1512 1512 .data = &show_unhandled_signals,
+2
lib/audit.c
··· 36 36 int audit_classify_syscall(int abi, unsigned syscall) 37 37 { 38 38 switch(syscall) { 39 + #ifdef __NR_open 39 40 case __NR_open: 40 41 return 2; 42 + #endif 41 43 #ifdef __NR_openat 42 44 case __NR_openat: 43 45 return 3;