chiark
/
gitweb
/
~mdw
/
mLib
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
d04c0e0
)
@@@ tvec buffer align power-of-two
author
Mark Wooding
<mdw@distorted.org.uk>
Tue, 9 Jul 2024 17:07:01 +0000
(18:07 +0100)
committer
Mark Wooding
<mdw@distorted.org.uk>
Tue, 9 Jul 2024 17:07:01 +0000
(18:07 +0100)
test/tvec-types.c
patch
|
blob
|
blame
|
history
diff --git
a/test/tvec-types.c
b/test/tvec-types.c
index 27381b5865ffb158c86586b93dcf32bc29509269..9e7a35fe5f76b07f35b319a6a39e50613aea89e2 100644
(file)
--- a/
test/tvec-types.c
+++ b/
test/tvec-types.c
@@
-3976,17
+3976,18
@@
void tvec_initbuffer(union tvec_regval *rv,
void tvec_allocbuffer(union tvec_regval *rv)
{
unsigned char *p; size_t n;
void tvec_allocbuffer(union tvec_regval *rv)
{
unsigned char *p; size_t n;
+ size_t m = rv->buf.m, a = rv->buf.a, off;
if (rv->buf.p) free(rv->buf.p - rv->buf.off);
if (rv->buf.p) free(rv->buf.p - rv->buf.off);
- if (
rv->buf.
m < 2) {
-
rv->buf.p = x_alloc(&arena_stdlib, rv->buf.sz); rv->buf.
off = 0;
+ if (m < 2) {
+
p = x_alloc(&arena_stdlib, rv->buf.sz);
off = 0;
} else {
} else {
- p = x_alloc(&arena_stdlib, rv->buf.sz + rv->buf.m - 1);
- n = (size_t)p%rv->buf.m;
- rv->buf.off = (rv->buf.a - n + rv->buf.m)%rv->buf.m;
- rv->buf.p = p + rv->buf.off;
+ p = x_alloc(&arena_stdlib, rv->buf.sz + m - 1);
+ if (!(m&(m - 1))) off = (a - (size_t)p)&(m - 1);
+ else off = (a + m - (size_t)p%m)%m;
}
}
+ rv->buf.p = p + off; rv->buf.off = off;
memset(rv->buf.p, '?', rv->buf.sz);
}
memset(rv->buf.p, '?', rv->buf.sz);
}