day 7
This commit is contained in:
39
lib.h
39
lib.h
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user