libctru v2.5.0
Loading...
Searching...
No Matches
types.h
Go to the documentation of this file.
1/**
2 * @file types.h
3 * @brief Various system types.
4 */
5#pragma once
6
7#include <stdint.h>
8#include <stdbool.h>
9#include <stddef.h>
10
11/// The maximum value of a u64.
12#define U64_MAX UINT64_MAX
13
14/// would be nice if newlib had this already
15#ifndef SSIZE_MAX
16#ifdef SIZE_MAX
17#define SSIZE_MAX ((SIZE_MAX) >> 1)
18#endif
19#endif
20
21typedef uint8_t u8; ///< 8-bit unsigned integer
22typedef uint16_t u16; ///< 16-bit unsigned integer
23typedef uint32_t u32; ///< 32-bit unsigned integer
24typedef uint64_t u64; ///< 64-bit unsigned integer
25
26typedef int8_t s8; ///< 8-bit signed integer
27typedef int16_t s16; ///< 16-bit signed integer
28typedef int32_t s32; ///< 32-bit signed integer
29typedef int64_t s64; ///< 64-bit signed integer
30
31typedef volatile u8 vu8; ///< 8-bit volatile unsigned integer.
32typedef volatile u16 vu16; ///< 16-bit volatile unsigned integer.
33typedef volatile u32 vu32; ///< 32-bit volatile unsigned integer.
34typedef volatile u64 vu64; ///< 64-bit volatile unsigned integer.
35
36typedef volatile s8 vs8; ///< 8-bit volatile signed integer.
37typedef volatile s16 vs16; ///< 16-bit volatile signed integer.
38typedef volatile s32 vs32; ///< 32-bit volatile signed integer.
39typedef volatile s64 vs64; ///< 64-bit volatile signed integer.
40
41typedef u32 Handle; ///< Resource handle.
42typedef s32 Result; ///< Function result.
43typedef void (*ThreadFunc)(void *); ///< Thread entrypoint function.
44typedef void (*voidfn)(void);
45
46/// Creates a bitmask from a bit number.
47#define BIT(n) (1U<<(n))
48
49/// Aligns a struct (and other types?) to m, making sure that the size of the struct is a multiple of m.
50#define CTR_ALIGN(m) __attribute__((aligned(m)))
51/// Packs a struct (and other types?) so it won't include padding bytes.
52#define CTR_PACKED __attribute__((packed))
53
54#ifndef CTR_NO_DEPRECATION
55/// Flags a function as deprecated.
56#define CTR_DEPRECATED __attribute__ ((deprecated))
57#else
58/// Flags a function as deprecated.
59#define CTR_DEPRECATED
60#endif
61
62/// Structure representing CPU registers
63typedef struct {
64 u32 r[13]; ///< r0-r12.
65 u32 sp; ///< sp.
66 u32 lr; ///< lr.
67 u32 pc; ///< pc. May need to be adjusted.
68 u32 cpsr; ///< cpsr.
70
71/// Structure representing FPU registers
72typedef struct {
73 union {
74 struct CTR_PACKED { double d[16]; }; ///< d0-d15.
75 float s[32]; ///< s0-s31.
76 };
77 u32 fpscr; ///< fpscr.
78 u32 fpexc; ///< fpexc.
Structure representing CPU registers.
Definition types.h:63
u32 sp
sp.
Definition types.h:65
u32 pc
pc. May need to be adjusted.
Definition types.h:67
u32 cpsr
cpsr.
Definition types.h:68
u32 lr
lr.
Definition types.h:66
Structure representing FPU registers.
Definition types.h:72
u32 fpexc
fpexc.
Definition types.h:78
u32 fpscr
fpscr.
Definition types.h:77
volatile s8 vs8
8-bit volatile signed integer.
Definition types.h:36
volatile u8 vu8
8-bit volatile unsigned integer.
Definition types.h:31
int64_t s64
64-bit signed integer
Definition types.h:29
uint64_t u64
64-bit unsigned integer
Definition types.h:24
#define CTR_PACKED
Packs a struct (and other types?) so it won't include padding bytes.
Definition types.h:52
volatile s64 vs64
64-bit volatile signed integer.
Definition types.h:39
volatile u16 vu16
16-bit volatile unsigned integer.
Definition types.h:32
volatile s32 vs32
32-bit volatile signed integer.
Definition types.h:38
volatile s16 vs16
16-bit volatile signed integer.
Definition types.h:37
void(* ThreadFunc)(void *)
Thread entrypoint function.
Definition types.h:43
uint8_t u8
would be nice if newlib had this already
Definition types.h:21
int8_t s8
8-bit signed integer
Definition types.h:26
int16_t s16
16-bit signed integer
Definition types.h:27
u32 Handle
Resource handle.
Definition types.h:41
volatile u32 vu32
32-bit volatile unsigned integer.
Definition types.h:33
s32 Result
Function result.
Definition types.h:42
volatile u64 vu64
64-bit volatile unsigned integer.
Definition types.h:34
uint16_t u16
16-bit unsigned integer
Definition types.h:22
int32_t s32
32-bit signed integer
Definition types.h:28
uint32_t u32
32-bit unsigned integer
Definition types.h:23