misc: Update several macros
This commit is contained in:
parent
16c5e98120
commit
65671d73c7
@ -74,7 +74,7 @@ struct volume *volume_get_by_bios_drive(int drive);
|
|||||||
|
|
||||||
bool volume_read(struct volume *part, void *buffer, uint64_t loc, uint64_t count);
|
bool volume_read(struct volume *part, void *buffer, uint64_t loc, uint64_t count);
|
||||||
|
|
||||||
#define volume_iterate_parts(_VOLUME_, _BODY_) ({ \
|
#define volume_iterate_parts(_VOLUME_, _BODY_) do { \
|
||||||
struct volume *_VOLUME = _VOLUME_; \
|
struct volume *_VOLUME = _VOLUME_; \
|
||||||
if (_VOLUME->pxe) { \
|
if (_VOLUME->pxe) { \
|
||||||
do { \
|
do { \
|
||||||
@ -101,6 +101,6 @@ bool volume_read(struct volume *part, void *buffer, uint64_t loc, uint64_t count
|
|||||||
_BODY_ \
|
_BODY_ \
|
||||||
} \
|
} \
|
||||||
} \
|
} \
|
||||||
})
|
} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -9,6 +9,8 @@ extern bool verbose;
|
|||||||
void print(const char *fmt, ...);
|
void print(const char *fmt, ...);
|
||||||
void vprint(const char *fmt, va_list args);
|
void vprint(const char *fmt, va_list args);
|
||||||
|
|
||||||
#define printv(FMT, ...) ({ if (verbose) print(FMT, ##__VA_ARGS__); })
|
#define printv(FMT, ...) do { \
|
||||||
|
if (verbose) print(FMT, ##__VA_ARGS__); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -59,7 +59,9 @@ static size_t get_multiboot2_info_size(
|
|||||||
ALIGN_UP(sizeof(struct multiboot_tag), MULTIBOOT_TAG_ALIGN); // end
|
ALIGN_UP(sizeof(struct multiboot_tag), MULTIBOOT_TAG_ALIGN); // end
|
||||||
}
|
}
|
||||||
|
|
||||||
#define append_tag(P, TAG) ({ (P) += ALIGN_UP((TAG)->size, MULTIBOOT_TAG_ALIGN); })
|
#define append_tag(P, TAG) do { \
|
||||||
|
(P) += ALIGN_UP((TAG)->size, MULTIBOOT_TAG_ALIGN); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
noreturn void multiboot2_load(char *config, char* cmdline) {
|
noreturn void multiboot2_load(char *config, char* cmdline) {
|
||||||
struct file_handle *kernel_file;
|
struct file_handle *kernel_file;
|
||||||
|
@ -167,58 +167,57 @@ inline void delay(uint64_t cycles) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define rdrand(type) ({ \
|
#define rdrand(type) ({ \
|
||||||
type ret; \
|
type rdrand__ret; \
|
||||||
asm volatile ( \
|
asm volatile ( \
|
||||||
"1: " \
|
"1: " \
|
||||||
"rdrand %0;" \
|
"rdrand %0;" \
|
||||||
"jnc 1b;" \
|
"jnc 1b;" \
|
||||||
: "=r" (ret) \
|
: "=r" (rdrand__ret) \
|
||||||
); \
|
); \
|
||||||
ret; \
|
rdrand__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define rdseed(type) ({ \
|
#define rdseed(type) ({ \
|
||||||
type ret; \
|
type rdseed__ret; \
|
||||||
asm volatile ( \
|
asm volatile ( \
|
||||||
"1: " \
|
"1: " \
|
||||||
"rdseed %0;" \
|
"rdseed %0;" \
|
||||||
"jnc 1b;" \
|
"jnc 1b;" \
|
||||||
: "=r" (ret) \
|
: "=r" (rdseed__ret) \
|
||||||
); \
|
); \
|
||||||
ret; \
|
rdseed__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define write_cr(reg, val) ({ \
|
#define write_cr(reg, val) do { \
|
||||||
asm volatile ("mov %0, %%cr" reg :: "r" (val) : "memory"); \
|
asm volatile ("mov %0, %%cr" reg :: "r" (val) : "memory"); \
|
||||||
})
|
} while (0)
|
||||||
|
|
||||||
#define read_cr(reg) ({ \
|
#define read_cr(reg) ({ \
|
||||||
size_t cr; \
|
size_t read_cr__cr; \
|
||||||
asm volatile ("mov %%cr" reg ", %0" : "=r" (cr) :: "memory"); \
|
asm volatile ("mov %%cr" reg ", %0" : "=r" (read_cr__cr) :: "memory"); \
|
||||||
cr; \
|
read_cr__cr; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define locked_read(var) ({ \
|
#define locked_read(var) ({ \
|
||||||
typeof(*var) ret = 0; \
|
typeof(*var) locked_read__ret = 0; \
|
||||||
asm volatile ( \
|
asm volatile ( \
|
||||||
"lock xadd %0, %1" \
|
"lock xadd %0, %1" \
|
||||||
: "+r" (ret) \
|
: "+r" (locked_read__ret) \
|
||||||
: "m" (*(var)) \
|
: "m" (*(var)) \
|
||||||
: "memory" \
|
: "memory" \
|
||||||
); \
|
); \
|
||||||
ret; \
|
locked_read__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
#define locked_write(var, val) ({ \
|
#define locked_write(var, val) do { \
|
||||||
typeof(*var) ret = val; \
|
__auto_type locked_write__ret = val; \
|
||||||
asm volatile ( \
|
asm volatile ( \
|
||||||
"lock xchg %0, %1" \
|
"lock xchg %0, %1" \
|
||||||
: "+r" ((ret)) \
|
: "+r" ((locked_write__ret)) \
|
||||||
: "m" (*(var)) \
|
: "m" (*(var)) \
|
||||||
: "memory" \
|
: "memory" \
|
||||||
); \
|
); \
|
||||||
ret; \
|
} while (0)
|
||||||
})
|
|
||||||
|
|
||||||
#elif defined (__aarch64__)
|
#elif defined (__aarch64__)
|
||||||
|
|
||||||
@ -229,14 +228,14 @@ inline uint64_t rdtsc(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define locked_read(var) ({ \
|
#define locked_read(var) ({ \
|
||||||
typeof(*var) ret = 0; \
|
typeof(*var) locked_read__ret = 0; \
|
||||||
asm volatile ( \
|
asm volatile ( \
|
||||||
"ldar %0, %1" \
|
"ldar %0, %1" \
|
||||||
: "=r" (ret) \
|
: "=r" (locked_read__ret) \
|
||||||
: "m" (*(var)) \
|
: "m" (*(var)) \
|
||||||
: "memory" \
|
: "memory" \
|
||||||
); \
|
); \
|
||||||
ret; \
|
locked_read__ret; \
|
||||||
})
|
})
|
||||||
|
|
||||||
inline size_t icache_line_size(void) {
|
inline size_t icache_line_size(void) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user