Function cTypeBitSize [src]

Prototype

pub fn cTypeBitSize(target: Target, c_type: CType) u16

Parameters

target: Targetc_type: CType

Source

pub fn cTypeBitSize(target: Target, c_type: CType) u16 { switch (target.os.tag) { .freestanding, .other => switch (target.cpu.arch) { .msp430 => switch (c_type) { .char => return 8, .short, .ushort, .int, .uint => return 16, .float, .long, .ulong => return 32, .longlong, .ulonglong, .double, .longdouble => return 64, }, .avr => switch (c_type) { .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float, .double, .longdouble => return 32, .longlong, .ulonglong => return 64, }, .mips64, .mips64el => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { .gnuabin32, .muslabin32 => return 32, else => return 64, }, .longlong, .ulonglong, .double => return 64, .longdouble => return 128, }, .x86_64 => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { .gnux32, .muslx32 => return 32, else => return 64, }, .longlong, .ulonglong, .double => return 64, .longdouble => return 80, }, else => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return target.ptrBitWidth(), .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.cpu.arch) { .x86 => switch (target.abi) { .android => return 64, else => return 80, }, .powerpc, .powerpcle, .powerpc64, .powerpc64le, => switch (target.abi) { .musl, .muslabin32, .muslabi64, .musleabi, .musleabihf, .muslx32, => return 64, else => return 128, }, .riscv32, .riscv64, .aarch64, .aarch64_be, .s390x, .sparc64, .wasm32, .wasm64, .loongarch32, .loongarch64, .ve, => return 128, else => return 64, }, }, }, .elfiamcu, .fuchsia, .hermit, .aix, .haiku, .hurd, .linux, .plan9, .rtems, .serenity, .zos, .freebsd, .dragonfly, .netbsd, .openbsd, .illumos, .solaris, .wasi, .emscripten, => switch (target.cpu.arch) { .msp430 => switch (c_type) { .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float => return 32, .longlong, .ulonglong, .double, .longdouble => return 64, }, .avr => switch (c_type) { .char => return 8, .short, .ushort, .int, .uint => return 16, .long, .ulong, .float, .double, .longdouble => return 32, .longlong, .ulonglong => return 64, }, .mips64, .mips64el => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { .gnuabin32, .muslabin32 => return 32, else => return 64, }, .longlong, .ulonglong, .double => return 64, .longdouble => if (target.os.tag == .freebsd) return 64 else return 128, }, .x86_64 => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { .gnux32, .muslx32 => return 32, else => return 64, }, .longlong, .ulonglong, .double => return 64, .longdouble => return 80, }, else => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return target.ptrBitWidth(), .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.cpu.arch) { .x86 => switch (target.abi) { .android => return 64, else => switch (target.os.tag) { .elfiamcu => return 64, else => return 80, }, }, .powerpc, .powerpcle, => switch (target.abi) { .musl, .muslabin32, .muslabi64, .musleabi, .musleabihf, .muslx32, => return 64, else => switch (target.os.tag) { .aix, .freebsd, .netbsd, .openbsd => return 64, else => return 128, }, }, .powerpc64, .powerpc64le, => switch (target.abi) { .musl, .muslabin32, .muslabi64, .musleabi, .musleabihf, .muslx32, => return 64, else => switch (target.os.tag) { .aix, .freebsd, .openbsd => return 64, else => return 128, }, }, .riscv32, .riscv64, .aarch64, .aarch64_be, .s390x, .mips64, .mips64el, .sparc64, .wasm32, .wasm64, .loongarch32, .loongarch64, .ve, => return 128, else => return 64, }, }, }, .windows, .uefi => switch (target.cpu.arch) { .x86 => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return 32, .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.abi) { .gnu, .gnuilp32, .ilp32, .cygnus => return 80, else => return 64, }, }, .x86_64 => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.abi) { .cygnus => return 64, else => return 32, }, .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.abi) { .gnu, .gnuilp32, .ilp32, .cygnus => return 80, else => return 64, }, }, else => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return 32, .longlong, .ulonglong, .double => return 64, .longdouble => return 64, }, }, .driverkit, .ios, .macos, .tvos, .visionos, .watchos, => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.cpu.arch) { .x86_64 => return 64, else => switch (target.abi) { .ilp32 => return 32, else => return 64, }, }, .longlong, .ulonglong, .double => return 64, .longdouble => switch (target.cpu.arch) { .x86_64 => return 80, else => return 64, }, }, .nvcl, .cuda => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => switch (target.cpu.arch) { .nvptx => return 32, .nvptx64 => return 64, else => return 64, }, .longlong, .ulonglong, .double => return 64, .longdouble => return 64, }, .amdhsa, .amdpal, .mesa3d => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong, .longlong, .ulonglong, .double => return 64, .longdouble => return 128, }, .opencl, .vulkan => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong, .double => return 64, .longlong, .ulonglong => return 128, // Note: The OpenCL specification does not guarantee a particular size for long double, // but clang uses 128 bits. .longdouble => return 128, }, .ps4, .ps5 => switch (c_type) { .char => return 8, .short, .ushort => return 16, .int, .uint, .float => return 32, .long, .ulong => return 64, .longlong, .ulonglong, .double => return 64, .longdouble => return 80, }, .ps3, .contiki, .opengl, => @panic("specify the C integer and float type sizes for this OS"), } }