This commit is contained in:
2025-12-08 16:02:36 -06:00
parent d6f3266154
commit 2994837ebc
3 changed files with 225 additions and 15 deletions

39
lib.h
View File

@@ -9,14 +9,6 @@
#define STDOUT_FILENO 1
__attribute__((always_inline))
void *memchr(const void *s, int c, size_t n) {
uint64_t dispose;
void *d;
asm("repnz scasb":"=D"(d),"=c"(dispose):"D"(s),"c"(n),"a"(c):"memory","cc");
return d;
}
static
void write(uint64_t fileno, void *buffer, size_t len) {
uint64_t a,d;
@@ -45,6 +37,36 @@ typedef uint64_t bcdint;
typedef uint64_t num;
typedef unsigned char ch;
__attribute__((always_inline)) inline
ch *findc(const ch *s, ch c, size_t n) {
uint64_t dispose;
void *d;
asm("repnz scasb":"=D"(d),"=c"(dispose):"D"(s),"c"(n),"a"(c):"memory","cc");
return d;
}
__attribute__((always_inline)) inline
num *findnum(const num *s, num c, size_t n) {
uint64_t dispose;
void *d;
asm("repnz scasq":"=D"(d),"=c"(dispose):"D"(s),"c"(n),"a"(c):"memory","cc");
return d;
}
__attribute__((always_inline)) inline
num *findnotnum(const num *s, num c, size_t n) {
uint64_t dispose;
void *d;
asm("repz scasq":"=D"(d),"=c"(dispose):"D"(s),"c"(n),"a"(c):"memory","cc");
return d;
}
static inline num alignnum(num v, num align) {
num extra = v % align;
num adjust = (align - extra) % align;
return v + adjust;
}
static
void printns(size_t len, unsigned char chars[len]) {
write(STDOUT_FILENO, chars, len);
@@ -72,6 +94,7 @@ void print_many_char(size_t len, char chars[len]) {
}
#define print(string) print_many_char(sizeof(string)-1, string)
#define pnl() print("\n")
static
void printd(unsigned long v) {