1e6c0d5c3SKonstantin Belousov.\" Copyright (c) 2016-2017 The FreeBSD Foundation. All rights reserved. 2df9330b5SEd Maste.\" 3df9330b5SEd Maste.\" This documentation was created by Ed Maste under sponsorship of 4df9330b5SEd Maste.\" The FreeBSD Foundation. 5df9330b5SEd Maste.\" 6df9330b5SEd Maste.\" Redistribution and use in source and binary forms, with or without 7df9330b5SEd Maste.\" modification, are permitted provided that the following conditions 8df9330b5SEd Maste.\" are met: 9df9330b5SEd Maste.\" 1. Redistributions of source code must retain the above copyright 10df9330b5SEd Maste.\" notice, this list of conditions and the following disclaimer. 11df9330b5SEd Maste.\" 2. Redistributions in binary form must reproduce the above copyright 12df9330b5SEd Maste.\" notice, this list of conditions and the following disclaimer in the 13df9330b5SEd Maste.\" documentation and/or other materials provided with the distribution. 14df9330b5SEd Maste.\" 15df9330b5SEd Maste.\" THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND 16df9330b5SEd Maste.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17df9330b5SEd Maste.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18df9330b5SEd Maste.\" ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE 19df9330b5SEd Maste.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20df9330b5SEd Maste.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21df9330b5SEd Maste.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22df9330b5SEd Maste.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23df9330b5SEd Maste.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24df9330b5SEd Maste.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25df9330b5SEd Maste.\" SUCH DAMAGE. 26df9330b5SEd Maste.\" 27df9330b5SEd Maste.\" $FreeBSD$ 28df9330b5SEd Maste.\" 291bdb1aa4SBrandon Bergren.Dd September 22, 2020 30df9330b5SEd Maste.Dt ARCH 7 31df9330b5SEd Maste.Os 32df9330b5SEd Maste.Sh NAME 33df9330b5SEd Maste.Nm arch 34df9330b5SEd Maste.Nd Architecture-specific details 35df9330b5SEd Maste.Sh DESCRIPTION 36df9330b5SEd MasteDifferences between CPU architectures and platforms supported by 37df9330b5SEd Maste.Fx . 38de6fc272SKonstantin Belousov.Ss Introduction 3925b526e6SKonstantin BelousovThis document is a quick reference of key ABI details of 4025b526e6SKonstantin Belousov.Fx 4125b526e6SKonstantin Belousovarchitecture ports. 4225b526e6SKonstantin BelousovFor full details consult the processor-specific ABI supplement 4325b526e6SKonstantin Belousovdocumentation. 4425b526e6SKonstantin Belousov.Pp 45dddb1576SKonstantin BelousovIf not explicitly mentioned, sizes are in bytes. 4645801499SEd MasteThe architecture details in this document apply to 478b3c5418SEd Maste.Fx 11.0 4845801499SEd Masteand later, unless otherwise noted. 49de6fc272SKonstantin Belousov.Pp 50e6c0d5c3SKonstantin Belousov.Fx 517748ab43SKonstantin Belousovuses a flat address space. 527748ab43SKonstantin BelousovVariables of types 53e6c0d5c3SKonstantin Belousov.Vt unsigned long , 54e6c0d5c3SKonstantin Belousov.Vt uintptr_t , 55de6fc272SKonstantin Belousovand 56de6fc272SKonstantin Belousov.Vt size_t 577748ab43SKonstantin Belousovand pointers all have the same representation. 58de6fc272SKonstantin Belousov.Pp 59de6fc272SKonstantin BelousovIn order to maximize compatibility with future pointer integrity mechanisms, 60de6fc272SKonstantin Belousovmanipulations of pointers as integers should be performed via 61de6fc272SKonstantin Belousov.Vt uintptr_t 62de6fc272SKonstantin Belousovor 63de6fc272SKonstantin Belousov.Vt intptr_t 64de6fc272SKonstantin Belousovand no other types. 65de6fc272SKonstantin BelousovIn particular, 66de6fc272SKonstantin Belousov.Vt long 67de6fc272SKonstantin Belousovand 68de6fc272SKonstantin Belousov.Vt ptrdiff_t 69de6fc272SKonstantin Belousovshould be avoided. 70de6fc272SKonstantin Belousov.Pp 71098150fbSWarner LoshOn some architectures, e.g., 72de6fc272SKonstantin Belousov.Dv powerpc 73de6fc272SKonstantin Belousovand AIM variants of 74de6fc272SKonstantin Belousov.Dv powerpc64 , 75de6fc272SKonstantin Belousovthe kernel uses a separate address space. 76de6fc272SKonstantin BelousovOn other architectures, kernel and a user mode process share a 77de6fc272SKonstantin Belousovsingle address space. 78de6fc272SKonstantin BelousovThe kernel is located at the highest addresses. 79de6fc272SKonstantin Belousov.Pp 80de6fc272SKonstantin BelousovOn each architecture, the main user mode thread's stack starts near 81de6fc272SKonstantin Belousovthe highest user address and grows down. 8245801499SEd Maste.Pp 8345801499SEd Maste.Fx 8445801499SEd Mastearchitecture support varies by release. 8545801499SEd MasteThis table shows the first 8645801499SEd Maste.Fx 8745801499SEd Masterelease to support each architecture, and, for discontinued 8845801499SEd Mastearchitectures, the final release. 89ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Initial Release" "Final Release" 9045801499SEd Maste.It Sy Architecture Ta Sy Initial Release Ta Sy Final Release 91f38b2297SIan Lepore.It aarch64 Ta 11.0 9204794d24SJohn Baldwin.It alpha Ta 3.2 Ta 6.4 9345801499SEd Maste.It amd64 Ta 5.1 942fe25d16SEd Maste.It arm Ta 6.0 Ta 12.x 95*4f954864SEd Maste.It armeb Ta 8.0 Ta 11.4 9645801499SEd Maste.It armv6 Ta 10.0 9713368c38SWarner Losh.It armv7 Ta 12.0 981f3de6dcSEd Maste.It ia64 Ta 5.0 Ta 10.4 9945801499SEd Maste.It i386 Ta 1.0 10045801499SEd Maste.It mips Ta 8.0 10145801499SEd Maste.It mipsel Ta 9.0 10245801499SEd Maste.It mipselhf Ta 12.0 10345801499SEd Maste.It mipshf Ta 12.0 10445801499SEd Maste.It mipsn32 Ta 9.0 10545801499SEd Maste.It mips64 Ta 9.0 10645801499SEd Maste.It mips64el Ta 9.0 10745801499SEd Maste.It mips64elhf Ta 12.0 10845801499SEd Maste.It mips64hf Ta 12.0 109*4f954864SEd Maste.It pc98 Ta 2.2 Ta 11.4 11045801499SEd Maste.It powerpc Ta 6.0 11145801499SEd Maste.It powerpcspe Ta 12.0 11245801499SEd Maste.It powerpc64 Ta 6.0 1131bdb1aa4SBrandon Bergren.It powerpc64le Ta 13.0 11445801499SEd Maste.It riscv64 Ta 12.0 11545801499SEd Maste.It riscv64sf Ta 12.0 1164940bf26SEd Maste.It sparc64 Ta 5.0 Ta 12.x 11745801499SEd Maste.El 118df9330b5SEd Maste.Ss Type sizes 119e6c0d5c3SKonstantin BelousovAll 120e6c0d5c3SKonstantin Belousov.Fx 121e6c0d5c3SKonstantin Belousovarchitectures use some variant of the ELF (see 122de6fc272SKonstantin Belousov.Xr elf 5 ) 123de6fc272SKonstantin Belousov.Sy Application Binary Interface 124de6fc272SKonstantin Belousov(ABI) for the machine processor. 125de6fc272SKonstantin BelousovAll supported ABIs can be divided into two groups: 126de6fc272SKonstantin Belousov.Bl -tag -width "Dv ILP32" 127de6fc272SKonstantin Belousov.It Dv ILP32 128de6fc272SKonstantin Belousov.Vt int , 129de6fc272SKonstantin Belousov.Vt long , 130de6fc272SKonstantin Belousov.Vt void * 131de6fc272SKonstantin Belousovtypes machine representations all have 4-byte size. 132de6fc272SKonstantin Belousov.It Dv LP64 133de6fc272SKonstantin Belousov.Vt int 134de6fc272SKonstantin Belousovtype machine representation uses 4 bytes, 135de6fc272SKonstantin Belousovwhile 136de6fc272SKonstantin Belousov.Vt long 137de6fc272SKonstantin Belousovand 138de6fc272SKonstantin Belousov.Vt void * 139de6fc272SKonstantin Belousovare 8 bytes. 140de6fc272SKonstantin Belousov.El 14115d641f0SJohn Baldwin.Pp 142fcfe2d66SIan LeporeSome machines support more than one 143e6c0d5c3SKonstantin Belousov.Fx 144e6c0d5c3SKonstantin BelousovABI. 145de6fc272SKonstantin BelousovTypically these are 64-bit machines, where the 146de6fc272SKonstantin Belousov.Dq native 147de6fc272SKonstantin Belousov.Dv LP64 148de6fc272SKonstantin Belousovexecution environment is accompanied by the 149de6fc272SKonstantin Belousov.Dq legacy 150de6fc272SKonstantin Belousov.Dv ILP32 151fcfe2d66SIan Leporeenvironment, which was the historical 32-bit predecessor for 64-bit evolution. 152de6fc272SKonstantin BelousovExamples are: 153ddc9d6e5SEd Maste.Bl -column -offset indent "powerpc64" "ILP32 counterpart" 154de6fc272SKonstantin Belousov.It Sy LP64 Ta Sy ILP32 counterpart 155de6fc272SKonstantin Belousov.It Dv amd64 Ta Dv i386 156de6fc272SKonstantin Belousov.It Dv powerpc64 Ta Dv powerpc 157de6fc272SKonstantin Belousov.It Dv mips64* Ta Dv mips* 15814601230SOlivier Houchard.It Dv aarch64 Ta Dv armv6/armv7 159de6fc272SKonstantin Belousov.El 16015d641f0SJohn Baldwin.Pp 161f38b2297SIan Lepore.Dv aarch64 16214601230SOlivier Houchardwill support execution of 163de6fc272SKonstantin Belousov.Dv armv6 16413368c38SWarner Loshor 16513368c38SWarner Losh.Dv armv7 16614601230SOlivier Houchardbinaries if the CPU implements 167de6fc272SKonstantin Belousov.Dv AArch32 16814601230SOlivier Houchardexecution state, however 16914601230SOlivier Houchard.Dv armv5 17014601230SOlivier Houchardbinaries aren't supported. 171de6fc272SKonstantin Belousov.Pp 172dddb1576SKonstantin BelousovOn all supported architectures: 173df9330b5SEd Maste.Bl -column -offset -indent "long long" "Size" 174df9330b5SEd Maste.It Sy Type Ta Sy Size 175df9330b5SEd Maste.It short Ta 2 176df9330b5SEd Maste.It int Ta 4 177df9330b5SEd Maste.It long Ta sizeof(void*) 178df9330b5SEd Maste.It long long Ta 8 179df9330b5SEd Maste.It float Ta 4 180df9330b5SEd Maste.It double Ta 8 181df9330b5SEd Maste.El 18215d641f0SJohn Baldwin.Pp 1837748ab43SKonstantin BelousovIntegers are represented in two's complement. 184de6fc272SKonstantin BelousovAlignment of integer and pointer types is natural, that is, 185e6c0d5c3SKonstantin Belousovthe address of the variable must be congruent to zero modulo the type size. 186e6c0d5c3SKonstantin BelousovMost ILP32 ABIs, except 187e6c0d5c3SKonstantin Belousov.Dv arm , 188e6c0d5c3SKonstantin Belousovrequire only 4-byte alignment for 64-bit integers. 189dddb1576SKonstantin Belousov.Pp 190dddb1576SKonstantin BelousovMachine-dependent type sizes: 191ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "void *" "long double" "time_t" 192dddb1576SKonstantin Belousov.It Sy Architecture Ta Sy void * Ta Sy long double Ta Sy time_t 193f38b2297SIan Lepore.It aarch64 Ta 8 Ta 16 Ta 8 1946554316cSKonstantin Belousov.It amd64 Ta 8 Ta 16 Ta 8 1956554316cSKonstantin Belousov.It armv6 Ta 4 Ta 8 Ta 8 196bad7e1e8SWarner Losh.It armv7 Ta 4 Ta 8 Ta 8 1976554316cSKonstantin Belousov.It i386 Ta 4 Ta 12 Ta 4 1986554316cSKonstantin Belousov.It mips Ta 4 Ta 8 Ta 8 1996554316cSKonstantin Belousov.It mipsel Ta 4 Ta 8 Ta 8 2006554316cSKonstantin Belousov.It mipselhf Ta 4 Ta 8 Ta 8 2016554316cSKonstantin Belousov.It mipshf Ta 4 Ta 8 Ta 8 2026554316cSKonstantin Belousov.It mipsn32 Ta 4 Ta 8 Ta 8 2036554316cSKonstantin Belousov.It mips64 Ta 8 Ta 8 Ta 8 2046554316cSKonstantin Belousov.It mips64el Ta 8 Ta 8 Ta 8 2056554316cSKonstantin Belousov.It mips64elhf Ta 8 Ta 8 Ta 8 2066554316cSKonstantin Belousov.It mips64hf Ta 8 Ta 8 Ta 8 207fbcf7bcdSJustin Hibbits.It powerpc Ta 4 Ta 8 Ta 8 208fbcf7bcdSJustin Hibbits.It powerpcspe Ta 4 Ta 8 Ta 8 2096554316cSKonstantin Belousov.It powerpc64 Ta 8 Ta 8 Ta 8 2101bdb1aa4SBrandon Bergren.It powerpc64le Ta 8 Ta 8 Ta 8 2114dd67957SJohn Baldwin.It riscv64 Ta 8 Ta 16 Ta 8 2124dd67957SJohn Baldwin.It riscv64sf Ta 8 Ta 16 Ta 8 213df9330b5SEd Maste.El 214dddb1576SKonstantin Belousov.Pp 215dddb1576SKonstantin Belousov.Sy time_t 21649ccd3feSEd Masteis 8 bytes on all supported architectures except i386. 217df9330b5SEd Maste.Ss Endianness and Char Signedness 218ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Endianness" "char Signedness" 219df9330b5SEd Maste.It Sy Architecture Ta Sy Endianness Ta Sy char Signedness 220f38b2297SIan Lepore.It aarch64 Ta little Ta unsigned 221df9330b5SEd Maste.It amd64 Ta little Ta signed 222df9330b5SEd Maste.It armv6 Ta little Ta unsigned 22313368c38SWarner Losh.It armv7 Ta little Ta unsigned 224df9330b5SEd Maste.It i386 Ta little Ta signed 2258395cdc1SEd Maste.It mips Ta big Ta signed 2268395cdc1SEd Maste.It mipsel Ta little Ta signed 2275bca2215SRuslan Bukin.It mipselhf Ta little Ta signed 2285bca2215SRuslan Bukin.It mipshf Ta big Ta signed 2298395cdc1SEd Maste.It mipsn32 Ta big Ta signed 2308395cdc1SEd Maste.It mips64 Ta big Ta signed 231df9330b5SEd Maste.It mips64el Ta little Ta signed 2325bca2215SRuslan Bukin.It mips64elhf Ta little Ta signed 2335bca2215SRuslan Bukin.It mips64hf Ta big Ta signed 234df9330b5SEd Maste.It powerpc Ta big Ta unsigned 235002cc1f9SJustin Hibbits.It powerpcspe Ta big Ta unsigned 236df9330b5SEd Maste.It powerpc64 Ta big Ta unsigned 2371bdb1aa4SBrandon Bergren.It powerpc64le Ta little Ta unsigned 2384dd67957SJohn Baldwin.It riscv64 Ta little Ta signed 2394dd67957SJohn Baldwin.It riscv64sf Ta little Ta signed 240df9330b5SEd Maste.El 241df9330b5SEd Maste.Ss Page Size 242ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Page Sizes" 243df9330b5SEd Maste.It Sy Architecture Ta Sy Page Sizes 244f38b2297SIan Lepore.It aarch64 Ta 4K, 2M, 1G 245df9330b5SEd Maste.It amd64 Ta 4K, 2M, 1G 246780586e8SEd Maste.It armv6 Ta 4K, 1M 24713368c38SWarner Losh.It armv7 Ta 4K, 1M 248df9330b5SEd Maste.It i386 Ta 4K, 2M (PAE), 4M 249df9330b5SEd Maste.It mips Ta 4K 250df9330b5SEd Maste.It mipsel Ta 4K 2515bca2215SRuslan Bukin.It mipselhf Ta 4K 2525bca2215SRuslan Bukin.It mipshf Ta 4K 253df9330b5SEd Maste.It mipsn32 Ta 4K 254df9330b5SEd Maste.It mips64 Ta 4K 255df9330b5SEd Maste.It mips64el Ta 4K 2565bca2215SRuslan Bukin.It mips64elhf Ta 4K 2575bca2215SRuslan Bukin.It mips64hf Ta 4K 258df9330b5SEd Maste.It powerpc Ta 4K 259002cc1f9SJustin Hibbits.It powerpcspe Ta 4K 260df9330b5SEd Maste.It powerpc64 Ta 4K 2611bdb1aa4SBrandon Bergren.It powerpc64le Ta 4K 262c4ef7cdbSMitchell Horne.It riscv64 Ta 4K, 2M, 1G 263c4ef7cdbSMitchell Horne.It riscv64sf Ta 4K, 2M, 1G 264df9330b5SEd Maste.El 265df9330b5SEd Maste.Ss Floating Point 266ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "float, double" "long double" 267df9330b5SEd Maste.It Sy Architecture Ta Sy float, double Ta Sy long double 268f38b2297SIan Lepore.It aarch64 Ta hard Ta soft, quad precision 269df9330b5SEd Maste.It amd64 Ta hard Ta hard, 80 bit 2708b3c5418SEd Maste.It armv6 Ta hard Ta hard, double precision 2718b3c5418SEd Maste.It armv7 Ta hard Ta hard, double precision 272df9330b5SEd Maste.It i386 Ta hard Ta hard, 80 bit 273df9330b5SEd Maste.It mips Ta soft Ta identical to double 274df9330b5SEd Maste.It mipsel Ta soft Ta identical to double 2755bca2215SRuslan Bukin.It mipselhf Ta hard Ta identical to double 2765bca2215SRuslan Bukin.It mipshf Ta hard Ta identical to double 277df9330b5SEd Maste.It mipsn32 Ta soft Ta identical to double 278df9330b5SEd Maste.It mips64 Ta soft Ta identical to double 279df9330b5SEd Maste.It mips64el Ta soft Ta identical to double 2805bca2215SRuslan Bukin.It mips64elhf Ta hard Ta identical to double 2815bca2215SRuslan Bukin.It mips64hf Ta hard Ta identical to double 282df9330b5SEd Maste.It powerpc Ta hard Ta hard, double precision 283002cc1f9SJustin Hibbits.It powerpcspe Ta hard Ta hard, double precision 284df9330b5SEd Maste.It powerpc64 Ta hard Ta hard, double precision 2851bdb1aa4SBrandon Bergren.It powerpc64le Ta hard Ta hard, double precision 286c4ef7cdbSMitchell Horne.It riscv64 Ta hard Ta hard, quad precision 287c4ef7cdbSMitchell Horne.It riscv64sf Ta soft Ta soft, quad precision 288df9330b5SEd Maste.El 2894ef28065SEd Maste.Ss Default Tool Chain 290ce0d5fb4SEd Maste.Fx 291ce0d5fb4SEd Masteuses 2924715c31eSEd Maste.Xr clang 1 293ce0d5fb4SEd Masteas the default compiler on all supported CPU architectures, 294e6f6c36cSEd MasteLLVM's 295e6f6c36cSEd Maste.Xr ld.lld 1 296e6f6c36cSEd Masteas the default linker, and 297e6f6c36cSEd MasteELF Tool Chain binary utilities such as 298ce0d5fb4SEd Maste.Xr objcopy 1 2994715c31eSEd Masteand 300ce0d5fb4SEd Maste.Xr readelf 1 . 301c81e4a69SWarner Losh.Ss MACHINE_ARCH vs MACHINE_CPUARCH vs MACHINE 3027b692b8eSWarner Losh.Dv MACHINE_CPUARCH 3037b692b8eSWarner Loshshould be preferred in Makefiles when the generic 3047b692b8eSWarner Losharchitecture is being tested. 3057b692b8eSWarner Losh.Dv MACHINE_ARCH 3067b692b8eSWarner Loshshould be preferred when there is something specific to a particular type of 3077b692b8eSWarner Losharchitecture where there is a choice of many, or could be a choice of many. 308c81e4a69SWarner LoshUse 309c81e4a69SWarner Losh.Dv MACHINE 310c81e4a69SWarner Loshwhen referring to the kernel, interfaces dependent on a specific type of kernel 311c81e4a69SWarner Loshor similar things like boot sequences. 3127b692b8eSWarner Losh.Bl -column -offset indent "Dv MACHINE" "Dv MACHINE_CPUARCH" "Dv MACHINE_ARCH" 3137b692b8eSWarner Losh.It Dv MACHINE Ta Dv MACHINE_CPUARCH Ta Dv MACHINE_ARCH 3147b692b8eSWarner Losh.It arm64 Ta aarch64 Ta aarch64 3157b692b8eSWarner Losh.It amd64 Ta amd64 Ta amd64 316bad7e1e8SWarner Losh.It arm Ta arm Ta armv6, armv7 3177b692b8eSWarner Losh.It i386 Ta i386 Ta i386 3187b692b8eSWarner Losh.It mips Ta mips Ta mips, mipsel, mips64, mips64el, mipshf, mipselhf, mips64elhf, mipsn32 3191bdb1aa4SBrandon Bergren.It powerpc Ta powerpc Ta powerpc, powerpcspe, powerpc64, powerpc64le 3207b692b8eSWarner Losh.It riscv Ta riscv Ta riscv64, riscv64sf 3217b692b8eSWarner Losh.El 322df9330b5SEd Maste.Ss Predefined Macros 323df9330b5SEd MasteThe compiler provides a number of predefined macros. 324df9330b5SEd MasteSome of these provide architecture-specific details and are explained below. 325df9330b5SEd MasteOther macros, including those required by the language standard, are not 326df9330b5SEd Masteincluded here. 327df9330b5SEd Maste.Pp 328df9330b5SEd MasteThe full set of predefined macros can be obtained with this command: 329df9330b5SEd Maste.Bd -literal -offset indent 3308e71e112SEd Mastecc -x c -dM -E /dev/null 331df9330b5SEd Maste.Ed 332df9330b5SEd Maste.Pp 333df9330b5SEd MasteCommon type size and endianness macros: 334ddc9d6e5SEd Maste.Bl -column -offset indent "BYTE_ORDER" "Meaning" 335df9330b5SEd Maste.It Sy Macro Ta Sy Meaning 336df9330b5SEd Maste.It Dv __LP64__ Ta 64-bit (8-byte) long and pointer, 32-bit (4-byte) int 337df9330b5SEd Maste.It Dv __ILP32__ Ta 32-bit (4-byte) int, long and pointer 338df9330b5SEd Maste.It Dv BYTE_ORDER Ta Either Dv BIG_ENDIAN or Dv LITTLE_ENDIAN . 3391859c867SKonstantin Belousov.Dv PDP11_ENDIAN 3401859c867SKonstantin Belousovis not used on 3411859c867SKonstantin Belousov.Fx . 342df9330b5SEd Maste.El 343df9330b5SEd Maste.Pp 344df9330b5SEd MasteArchitecture-specific macros: 345ddc9d6e5SEd Maste.Bl -column -offset indent "Architecture" "Predefined macros" 346df9330b5SEd Maste.It Sy Architecture Ta Sy Predefined macros 347f38b2297SIan Lepore.It aarch64 Ta Dv __aarch64__ 348df9330b5SEd Maste.It amd64 Ta Dv __amd64__ , Dv __x86_64__ 349df9330b5SEd Maste.It armv6 Ta Dv __arm__ , Dv __ARM_ARCH >= 6 35013368c38SWarner Losh.It armv7 Ta Dv __arm__ , Dv __ARM_ARCH >= 7 351df9330b5SEd Maste.It i386 Ta Dv __i386__ 352df9330b5SEd Maste.It mips Ta Dv __mips__ , Dv __MIPSEB__ , Dv __mips_o32 353df9330b5SEd Maste.It mipsel Ta Dv __mips__ , Dv __mips_o32 3545bca2215SRuslan Bukin.It mipselhf Ta Dv __mips__ , Dv __mips_o32 3555bca2215SRuslan Bukin.It mipshf Ta Dv __mips__ , Dv __MIPSEB__ , Dv __mips_o32 356df9330b5SEd Maste.It mipsn32 Ta Dv __mips__ , Dv __MIPSEB__ , Dv __mips_n32 357df9330b5SEd Maste.It mips64 Ta Dv __mips__ , Dv __MIPSEB__ , Dv __mips_n64 358df9330b5SEd Maste.It mips64el Ta Dv __mips__ , Dv __mips_n64 3595bca2215SRuslan Bukin.It mips64elhf Ta Dv __mips__ , Dv __mips_n64 3605bca2215SRuslan Bukin.It mips64hf Ta Dv __mips__ , Dv __MIPSEB__ , Dv __mips_n64 361df9330b5SEd Maste.It powerpc Ta Dv __powerpc__ 362002cc1f9SJustin Hibbits.It powerpcspe Ta Dv __powerpc__ , Dv __SPE__ 363df9330b5SEd Maste.It powerpc64 Ta Dv __powerpc__ , Dv __powerpc64__ 3641bdb1aa4SBrandon Bergren.It powerpc64le Ta Dv __powerpc__ , Dv __powerpc64__ 365ca20f8ecSRuslan Bukin.It riscv64 Ta Dv __riscv , Dv __riscv_xlen == 64 366c4ef7cdbSMitchell Horne.It riscv64sf Ta Dv __riscv , Dv __riscv_xlen == 64 , Dv __riscv_float_abi_soft 367df9330b5SEd Maste.El 368f84d8f0cSEd Maste.Pp 369f84d8f0cSEd MasteCompilers may define additional variants of architecture-specific macros. 370f84d8f0cSEd MasteThe macros above are preferred for use in 371f84d8f0cSEd Maste.Fx . 372691e6ea8SWarner Losh.Ss Important Xr make 1 variables 373691e6ea8SWarner LoshMost of the externally settable variables are defined in the 374691e6ea8SWarner Losh.Xr build 7 375691e6ea8SWarner Loshman page. 376691e6ea8SWarner LoshThese variables are not otherwise documented and are used extensively 377691e6ea8SWarner Loshin the build system. 37815d641f0SJohn Baldwin.Bl -tag -width "MACHINE_CPUARCH" 37915d641f0SJohn Baldwin.It Dv MACHINE 3802e4b206fSJohn BaldwinRepresents the hardware platform. 381691e6ea8SWarner LoshThis is the same as the native platform's 382691e6ea8SWarner Losh.Xr uname 1 383691e6ea8SWarner Losh.Fl m 384691e6ea8SWarner Loshoutput. 385691e6ea8SWarner LoshIt defines both the userland / kernel interface, as well as the 386691e6ea8SWarner Loshbootloader / kernel interface. 387691e6ea8SWarner LoshIt should only be used in these contexts. 388691e6ea8SWarner LoshEach CPU architecture may have multiple hardware platforms it supports 389691e6ea8SWarner Loshwhere 390691e6ea8SWarner Losh.Dv MACHINE 391691e6ea8SWarner Loshdiffers among them. 392691e6ea8SWarner LoshIt is used to collect together all the files from 393691e6ea8SWarner Losh.Xr config 8 394691e6ea8SWarner Loshto build the kernel. 395691e6ea8SWarner LoshIt is often the same as 396691e6ea8SWarner Losh.Dv MACHINE_ARCH 397691e6ea8SWarner Loshjust as one CPU architecture can be implemented by many different 398691e6ea8SWarner Loshhardware platforms, one hardware platform may support multiple CPU 399691e6ea8SWarner Losharchitecture family members, though with different binaries. 400691e6ea8SWarner LoshFor example, 401691e6ea8SWarner Losh.Dv MACHINE 402691e6ea8SWarner Loshof i386 supported the IBM-AT hardware platform while the 403691e6ea8SWarner Losh.Dv MACHINE 404691e6ea8SWarner Loshof pc98 supported the Japanese company NEC's PC-9801 and PC-9821 405691e6ea8SWarner Loshhardware platforms. 406691e6ea8SWarner LoshBoth of these hardware platforms supported only the 407691e6ea8SWarner Losh.Dv MACHINE_ARCH 408691e6ea8SWarner Loshof i386 where they shared a common ABI, except for certain kernel / 409691e6ea8SWarner Loshuserland interfaces relating to underlying hardware platform 410691e6ea8SWarner Loshdifferences in bus architecture, device enumeration and boot interface. 411ffab3cb6SWarner LoshGenerally, 412ffab3cb6SWarner Losh.Dv MACHINE 413ffab3cb6SWarner Loshshould only be used in src/sys and src/stand or in system imagers or 414ffab3cb6SWarner Loshinstallers. 41515d641f0SJohn Baldwin.It Dv MACHINE_ARCH 41615d641f0SJohn BaldwinRepresents the CPU processor architecture. 417691e6ea8SWarner LoshThis is the same as the native platforms 418691e6ea8SWarner Losh.Xr uname 1 419691e6ea8SWarner Losh.Fl p 420691e6ea8SWarner Loshoutput. 421691e6ea8SWarner LoshIt defines the CPU instruction family supported. 422691e6ea8SWarner LoshIt may also encode a variation in the byte ordering of multi-byte 423691e6ea8SWarner Loshintegers (endian). 424691e6ea8SWarner LoshIt may also encode a variation in the size of the integer or pointer. 425691e6ea8SWarner LoshIt may also encode a ISA revision. 426691e6ea8SWarner LoshIt may also encode hard versus soft floating point ABI and usage. 427320bd864SWarner LoshIt may also encode a variant ABI when the other factors do not 428320bd864SWarner Loshuniquely define the ABI (e.g., MIPS' n32 ABI). 429691e6ea8SWarner LoshIt, along with 430320bd864SWarner Losh.Dv MACHINE , 431320bd864SWarner Loshdefines the ABI used by the system. 432691e6ea8SWarner LoshFor example, the MIPS CPU processor family supports 9 different 433098150fbSWarner Loshcombinations encoding pointer size, endian and hard versus soft float (for 434691e6ea8SWarner Losh8 combinations) as well as N32 (which only ever had one variation of 435691e6ea8SWarner Loshall these). 436691e6ea8SWarner LoshGenerally, the plain CPU name specifies the most common (or at least 437691e6ea8SWarner Loshfirst) variant of the CPU. 438bad7e1e8SWarner LoshThis is why mips and mips64 imply 'big endian' while 'armv6' and 'armv7' 439691e6ea8SWarner Loshimply little endian. 440691e6ea8SWarner LoshIf we ever were to support the so-called x32 ABI (using 32-bit 441691e6ea8SWarner Loshpointers on the amd64 architecture), it would most likely be encoded 442691e6ea8SWarner Loshas amd64-x32. 443d56b465cSJohn BaldwinIt is unfortunate that amd64 specifies the 64-bit evolution of the x86 444691e6ea8SWarner Loshplatform (it matches the 'first rule') as everybody else uses x86_64. 445691e6ea8SWarner LoshThere is no standard name for the processor: each OS selects its own 446691e6ea8SWarner Loshconventions. 44715d641f0SJohn Baldwin.It Dv MACHINE_CPUARCH 44815d641f0SJohn BaldwinRepresents the source location for a given 449ffab3cb6SWarner Losh.Dv MACHINE_ARCH . 4507b692b8eSWarner LoshIt is generally the common prefix for all the MACHINE_ARCH that 4517b692b8eSWarner Loshshare the same implementation, though 'riscv' breaks this rule. 452ffab3cb6SWarner LoshFor example, 453ffab3cb6SWarner Losh.Dv MACHINE_CPUARCH 454ffab3cb6SWarner Loshis defined to be mips for all the flavors of mips that we support 455ffab3cb6SWarner Loshsince we support them all with a shared set of sources. 456bf1dea9bSWarner LoshWhile amd64 and i386 are closely related, MACHINE_CPUARCH is not x86 457bf1dea9bSWarner Loshfor them. 45855ed6718SBenedict ReuschlingThe 45955ed6718SBenedict Reuschling.Fx 46055ed6718SBenedict Reuschlingsource base supports amd64 and i386 with two 461bf1dea9bSWarner Loshdistinct source bases living in subdirectories named amd64 and i386 462bf1dea9bSWarner Losh(though behind the scenes there's some sharing that fits into this 463bf1dea9bSWarner Loshframework). 46415d641f0SJohn Baldwin.It Dv CPUTYPE 46515d641f0SJohn BaldwinSets the flavor of 466691e6ea8SWarner Losh.Dv MACHINE_ARCH 467691e6ea8SWarner Loshto build. 468691e6ea8SWarner LoshIt is used to optimize the build for a specific CPU / core that the 469691e6ea8SWarner Loshbinaries run on. 470098150fbSWarner LoshGenerally, this does not change the ABI, though it can be a fine line 471691e6ea8SWarner Loshbetween optimization for specific cases. 47215d641f0SJohn Baldwin.It Dv TARGET 47315d641f0SJohn BaldwinUsed to set 474098150fbSWarner Losh.Dv MACHINE 475098150fbSWarner Loshin the top level Makefile for cross building. 476691e6ea8SWarner LoshUnused outside of that scope. 477691e6ea8SWarner LoshIt is not passed down to the rest of the build. 478098150fbSWarner LoshMakefiles outside of the top level should not use it at all (though 479691e6ea8SWarner Loshsome have their own private copy for hysterical raisons). 48015d641f0SJohn Baldwin.It Dv TARGET_ARCH 48115d641f0SJohn BaldwinUsed to set 482098150fbSWarner Losh.Dv MACHINE_ARCH 483098150fbSWarner Loshby the top level Makefile for cross building. 484691e6ea8SWarner LoshLike 48515d641f0SJohn Baldwin.Dv TARGET , 48615d641f0SJohn Baldwinit is unused outside of that scope. 487691e6ea8SWarner Losh.El 488df9330b5SEd Maste.Sh SEE ALSO 489df9330b5SEd Maste.Xr src.conf 5 , 490df9330b5SEd Maste.Xr build 7 491df9330b5SEd Maste.Sh HISTORY 492df9330b5SEd MasteAn 493df9330b5SEd Maste.Nm 494df9330b5SEd Mastemanual page appeared in 4952af3ea6bSEd Maste.Fx 11.1 . 496