22. Platforms

22.1. Platform codes

The MPS uses a six-character platform code to express a combination of operating system, CPU architecture, and compiler toolchain. Each six-character code breaks down into three pairs of characters: OSARCT. The first pair of characters names the operating system:

OS

Operating system

Constant

fr

FreeBSD

MPS_OS_FR

li

Linux

MPS_OS_LI

w3

Windows

MPS_OS_W3

xc

macOS

MPS_OS_XC

The second pair of characters names the processor architecture:

AR

Processor architecture

Constant

i3

Intel/AMD IA-32

MPS_ARCH_I3

i6

Intel/AMD x86-64

MPS_ARCH_I6

The third pair of characters names the compiler toolchain:

CT

Compiler toolchain

Constant

gc

GNU Compiler collection

MPS_BUILD_GC

ll

Clang/LLVM

MPS_BUILD_LL

mv

Microsoft Visual C/C++

MPS_BUILD_MV

In each case the aspect of the platform can be tested by checking whether the preprocessor constant in the third column in the table is defined, and the full platform can be tested by checking whether the corresponding MPS_PF_ preprocessor constant is defined. For example, “xci6ll” platform corresponds to the MPS_PF_XCI6LL preprocessor constant.

Not all combinations of operating system, processor architecture, and compiler are supported.

22.2. Platform interface

#include "mpstd.h"
MPS_ARCH_I3

A C preprocessor macro that indicates, if defined, that the target processor architecture of the compilation is a member of the IA-32 Intel/AMD family of 32-bit processors.

MPS_ARCH_I6

A C preprocessor macro that indicates, if defined, that the target processor architecture of the compilation is a member of the x86-64 Intel/AMD family of 64-bit processors.

Note

The MPS is not supported on IA-64 (Itanium).

MPS_BUILD_GC

A C preprocessor macro that indicates, if defined, that the MPS was compiled by the C compiler from the GNU Compiler Collection (GCC).

MPS_BUILD_LL

A C preprocessor macro that indicates, if defined, that the MPS was compiled by Clang, the C compiler from the LLVM (Low Level Virtual Machine) system.

MPS_BUILD_MV

A C preprocessor macro that indicates, if defined, that the MPS was compiled by the C compiler from Microsoft Visual Studio.

MPS_OS_FR

A C preprocessor macro that indicates, if defined, that the MPS was compiled on a FreeBSD operating system.

MPS_OS_LI

A C preprocessor macro that indicates, if defined, that the MPS was compiled on a Linux operating system.

MPS_OS_W3

A C preprocessor macro that indicates, if defined, that the MPS was compiled on a Windows operating system.

MPS_OS_XC

A C preprocessor macro that indicates, if defined, that the MPS was compiled on an macOS operating system.

MPS_PF_ALIGN

A C preprocessor macro that expands to an integer giving the natural alignment of the platform.

MPS_PF_FRI3GC

A C preprocessor macro that indicates, if defined, that the platform consists of the FreeBSD operating system, the IA-32 processor architecture, and the GCC compiler.

MPS_PF_FRI3LL

A C preprocessor macro that indicates, if defined, that the platform consists of the FreeBSD operating system, the IA-32 processor architecture, and the Clang/LLVM compiler.

MPS_PF_FRI6GC

A C preprocessor macro that indicates, if defined, that the platform consists of the FreeBSD operating system, the x86-64 processor architecture, and the GCC compiler.

MPS_PF_FRI6LL

A C preprocessor macro that indicates, if defined, that the platform consists of the FreeBSD operating system, the x86-64 processor architecture, and the Clang/LLVM compiler.

MPS_PF_LII3GC

A C preprocessor macro that indicates, if defined, that the platform consists of the Linux operating system, the IA-32 processor architecture, and the GCC compiler.

MPS_PF_LII6GC

A C preprocessor macro that indicates, if defined, that the platform consists of the Linux operating system, the x86-64 processor architecture, and the GCC compiler.

MPS_PF_LII6LL

A C preprocessor macro that indicates, if defined, that the platform consists of the Linux operating system, the x86-64 processor architecture, and the Clang/LLVM compiler.

MPS_PF_STRING

A C preprocessor macro that names the platform for which the MPS was built.

MPS_PF_W3I3MV

A C preprocessor macro that indicates, if defined, that the platform consists of the Windows operating system, the IA-32 processor architecture, and the Microsoft Visual C/C++ compiler.

MPS_PF_W3I6MV

A C preprocessor macro that indicates, if defined, that the platform consists of the Windows operating system, the x86-64 processor architecture, and the Microsoft Visual C/C++ compiler.

MPS_PF_XCI3GC

A C preprocessor macro that indicates, if defined, that the platform consists of the macOS operating system, the IA-32 processor architecture, and the GCC compiler.

MPS_PF_XCI3LL

A C preprocessor macro that indicates, if defined, that the platform consists of the macOS operating system, the IA-32 processor architecture, and the Clang/LLVM compiler.

MPS_PF_XCI6GC

A C preprocessor macro that indicates, if defined, that the platform consists of the macOS operating system, the x86-64 processor architecture, and the GCC compiler.

MPS_PF_XCI6LL

A C preprocessor macro that indicates, if defined, that the platform consists of the macOS operating system, the x86-64 processor architecture, and the Clang/LLVM compiler.

MPS_T_ULONGEST

A C preprocessor macro that expands to the name of the largest unsigned integral type.

The exact identity of this type is platform-dependent. Typical identities are unsigned long and unsigned __int_64.

MPS_T_WORD

A C preprocessor macro that expands to the name of an unsigned integral type that is the same size as an object pointer, so that sizeof(MPS_T_WORD) == sizeof(void*).

The exact identity of this type is platform-dependent. Typical identities are unsigned long and unsigned __int_64.

MPS_WORD_SHIFT

A C preprocessor macro that expands to the logarithm to base 2 of the constant MPS_WORD_WIDTH, so that 1 << MPS_WORD_SHIFT == MPS_WORD_WIDTH.

The value is platform-dependent. Typical values are 5 and 6.

MPS_WORD_WIDTH

A C preprocessor macro that expands to the width in bits of the type MPS_T_WORD, so that MPS_WORD_WIDTH == sizeof(MPS_T_WORD) * CHAR_BIT.

This value is platform-dependent. It is always a power of 2: typical values are 32 and 64.

22.3. Historical platform codes

The platform codes in the tables below were in use in older versions of the Memory Pool System, but are not currently supported.

Formerly supported operating systems:

OS

Operating system

Constant

i5

Irix 5 or 6 (old ABI)

MPS_OS_I5

ia

Irix 6 (new ABI)

MPS_OS_IA

o1

OSF/1 aka Tru64

MPS_OS_O1

s7

Macintosh System 7, 8, or 9

MPS_OS_S7

so

Solaris

MPS_OS_SO

su

SunOS

MPS_OS_SU

Formerly supported processor architectures:

AR

Processor architecture

Constant

i4

Intel/AMD IA-32 1

MPS_ARCH_I4

al

Digital Alpha

MPS_ARCH_AL

m2

MIPS R2000

MPS_ARCH_M2

m4

MIPS R4000

MPS_ARCH_M4

m6

Motorola 68000

MPS_ARCH_M6

pp

PowerPC

MPS_ARCH_PP

s8

SPARC V8

MPS_ARCH_S8

s9

SPARC V9 (32-bit)

MPS_ARCH_S9

Formerly supported compiler toolchains:

CT

Compiler toolchain

Constant

ac

Macintosh Programmer’s Workshop C/C++

MPS_BUILD_AC

cc

The “native” C compiler 2

MPS_BUILD_CC

cx

SunPro C CXREF tool

MPS_BUILD_CX

eg

Experimental GNU Compiler System (EGCS)

MPS_BUILD_EG

gp

GCC with profiling

MPS_BUILD_GP

lc

LCC

MPS_BUILD_LC

mw

Metrowerks CodeWarrior

MPS_BUILD_MW

pc

Pelles C

MPS_BUILD_PC

sc

SunPro C

MPS_BUILD_SC

Notes

1

Obsolete: the MPS used to make a distinction between the 80386 and 80486 processor architectures.

2

This was the MIPSpro C compiler on IRIX; and the Digital C Compiler on OSF/1.

22.4. Historical platform list

This is the full list of platforms that have ever been supported by the Memory Pool System, with their current status.

Platform

Status

fri3gc

Supported

fri3ll

Supported

fri4gc

Corrected to fri3gc

fri6gc

Supported

fri6ll

Supported

i5m2cc

Not supported

iam4cc

Not supported

lii3eg

Not supported

lii3gc

Supported

lii4gc

Corrected to lii3gc

lii6gc

Supported

lii6ll

Supported

lippgc

Not supported

o1alcc

Not supported

o1algc

Not supported

s7m6mw

Not supported

s7ppac

Not supported

s7ppmw

Not supported

sos8cx

Not supported

sos8gc

Not supported

sos8gp

Not supported

sos9sc

Not supported

sus8gc

Not supported

w3almv

Not supported

w3i3m9

Not supported

w3i3mv

Supported

w3i3pc

Not supported

w3i6mv

Supported

w3i6pc

Not supported

w3ppmv

Not supported

xci3gc

Not supported

xci3ll

Supported

xci6gc

Not supported

xci6ll

Supported

xcppgc

Not supported