From 836026dbba64793afc0d2591ffdb6fb39b696977 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sat, 21 May 2022 15:04:01 +0300 Subject: implement timers better --- include/apos/debug.h | 120 +++++++++++++++++++++++++++++++++++++++++++++++++ include/apos/sp_tree.h | 4 +- include/apos/vmem.h | 9 ++-- 3 files changed, 127 insertions(+), 6 deletions(-) (limited to 'include/apos') diff --git a/include/apos/debug.h b/include/apos/debug.h index d9d668c..25ea132 100644 --- a/include/apos/debug.h +++ b/include/apos/debug.h @@ -5,6 +5,126 @@ #include #include +#if _LP64 +/* approximate, but probably good enough */ +#define __PRI64_PREFIX "l" +#define __PRIPTR_PREFIX "l" +#else +#define __PRI64_PREFIX "ll" +#define __PRIPTR_PREFIX +#endif + +/* Decimal notation. */ +#define PRId8 "d" +#define PRId16 "d" +#define PRId32 "d" +#define PRId64 __PRI64_PREFIX "d" + +#define PRIdLEAST8 "d" +#define PRIdLEAST16 "d" +#define PRIdLEAST32 "d" +#define PRIdLEAST64 __PRI64_PREFIX "d" + +#define PRIdFAST8 "d" +#define PRIdFAST16 __PRIPTR_PREFIX "d" +#define PRIdFAST32 __PRIPTR_PREFIX "d" +#define PRIdFAST64 __PRI64_PREFIX "d" + +#define PRIi8 "i" +#define PRIi16 "i" +#define PRIi32 "i" +#define PRIi64 __PRI64_PREFIX "i" + +#define PRIiLEAST8 "i" +#define PRIiLEAST16 "i" +#define PRIiLEAST32 "i" +#define PRIiLEAST64 __PRI64_PREFIX "i" + +#define PRIiFAST8 "i" +#define PRIiFAST16 __PRIPTR_PREFIX "i" +#define PRIiFAST32 __PRIPTR_PREFIX "i" +#define PRIiFAST64 __PRI64_PREFIX "i" + +/* Octal notation. */ +#define PRIo8 "o" +#define PRIo16 "o" +#define PRIo32 "o" +#define PRIo64 __PRI64_PREFIX "o" + +#define PRIoLEAST8 "o" +#define PRIoLEAST16 "o" +#define PRIoLEAST32 "o" +#define PRIoLEAST64 __PRI64_PREFIX "o" + +#define PRIoFAST8 "o" +#define PRIoFAST16 __PRIPTR_PREFIX "o" +#define PRIoFAST32 __PRIPTR_PREFIX "o" +#define PRIoFAST64 __PRI64_PREFIX "o" + +/* Unsigned integers. */ +#define PRIu8 "u" +#define PRIu16 "u" +#define PRIu32 "u" +#define PRIu64 __PRI64_PREFIX "u" + +#define PRIuLEAST8 "u" +#define PRIuLEAST16 "u" +#define PRIuLEAST32 "u" +#define PRIuLEAST64 __PRI64_PREFIX "u" + +#define PRIuFAST8 "u" +#define PRIuFAST16 __PRIPTR_PREFIX "u" +#define PRIuFAST32 __PRIPTR_PREFIX "u" +#define PRIuFAST64 __PRI64_PREFIX "u" + +/* lowercase hexadecimal notation. */ +#define PRIx8 "x" +#define PRIx16 "x" +#define PRIx32 "x" +#define PRIx64 __PRI64_PREFIX "x" + +#define PRIxLEAST8 "x" +#define PRIxLEAST16 "x" +#define PRIxLEAST32 "x" +#define PRIxLEAST64 __PRI64_PREFIX "x" + +#define PRIxFAST8 "x" +#define PRIxFAST16 __PRIPTR_PREFIX "x" +#define PRIxFAST32 __PRIPTR_PREFIX "x" +#define PRIxFAST64 __PRI64_PREFIX "x" + +/* Binary notation */ +#define PRIX8 "X" +#define PRIX16 "X" +#define PRIX32 "X" +#define PRIX64 __PRI64_PREFIX "X" + +#define PRIXLEAST8 "X" +#define PRIXLEAST16 "X" +#define PRIXLEAST32 "X" +#define PRIXLEAST64 __PRI64_PREFIX "X" + +#define PRIXFAST8 "X" +#define PRIXFAST16 __PRIPTR_PREFIX "X" +#define PRIXFAST32 __PRIPTR_PREFIX "X" +#define PRIXFAST64 __PRI64_PREFIX "X" + +/* Macros for printing `intmax_t' and `uintmax_t'. */ +#define PRIdMAX __PRI64_PREFIX "d" +#define PRIiMAX __PRI64_PREFIX "i" +#define PRIoMAX __PRI64_PREFIX "o" +#define PRIuMAX __PRI64_PREFIX "u" +#define PRIxMAX __PRI64_PREFIX "x" +#define PRIXMAX __PRI64_PREFIX "X" + +/* Macros for printing `intptr_t' and `uintptr_t'. */ +#define PRIdPTR __PRIPTR_PREFIX "d" +#define PRIiPTR __PRIPTR_PREFIX "i" +#define PRIoPTR __PRIPTR_PREFIX "o" +#define PRIuPTR __PRIPTR_PREFIX "u" +#define PRIxPTR __PRIPTR_PREFIX "x" +#define PRIXPTR __PRIPTR_PREFIX "X" + #if defined(DEBUG) enum serial_dev { /* only the NS16550A and compatible at the moment */ diff --git a/include/apos/sp_tree.h b/include/apos/sp_tree.h index fe02e91..65e4e89 100644 --- a/include/apos/sp_tree.h +++ b/include/apos/sp_tree.h @@ -1,6 +1,8 @@ #ifndef SP_TREE_H #define SP_TREE_H +#include + #define sp_root(r) ((r)->sp_r) #define sp_left(n) ((n)->left) #define sp_right(n) ((n)->right) @@ -11,7 +13,7 @@ #define sp_has_gparen(n) (sp_paren(n) && sp_gparen(n)) struct sp_node { - short hint; + int_fast16_t hint; struct sp_node *left; struct sp_node *right; struct sp_node *parent; diff --git a/include/apos/vmem.h b/include/apos/vmem.h index 5b5037d..17f998d 100644 --- a/include/apos/vmem.h +++ b/include/apos/vmem.h @@ -8,8 +8,7 @@ vm_t alloc_uvmem(struct tcb *r, size_t size, vmflags_t flags); vm_t alloc_fixed_uvmem(struct tcb *r, vm_t start, size_t size, vmflags_t flags); -vm_t alloc_shared_uvmem(struct tcb *r, size_t size, - vmflags_t flags); +vm_t alloc_shared_uvmem(struct tcb *r, size_t size, vmflags_t flags); vm_t ref_shared_uvmem(struct tcb *r1, struct tcb *r2, vm_t va, vmflags_t flags); stat_t free_uvmem(struct tcb *r, vm_t a); @@ -18,17 +17,17 @@ stat_t init_uvmem(struct tcb *r, vm_t base, vm_t top); stat_t alloc_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order); stat_t alloc_shared_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, - vmflags_t flags, enum mm_order order); + vmflags_t flags, enum mm_order order); stat_t free_uvmem_wrapper(struct vm_branch *b, pm_t *offset, vm_t vaddr, vmflags_t flags, enum mm_order order); #define map_allocd_region(b, start, bytes, flags) \ map_fill_region(b, &alloc_uvmem_wrapper, 0, start, bytes, flags) -#define map_shared_region(b, start, bytes, flags)\ +#define map_shared_region(b, start, bytes, flags) \ map_fill_region(b, &alloc_shared_wrapper, 0, start, bytes, flags) -#define unmap_freed_region(b, start, bytes, flags) \ +#define unmap_freed_region(b, start, bytes, flags) \ map_fill_region(b, &free_uvmem_wrapper, 0, start, bytes, flags) #define vm_flags(x) ((x) & ~0xff) -- cgit v1.3