File 0002-memory-auto.m4-Replace-as_echo-with-AS_ECHO.patch of Package tme
From 2d48eba823b38d0d1f5a4bd7f92cf4998850f7f4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Klaus=20K=C3=A4mpf?= <kkaempf@gmail.com>
Date: Thu, 3 Oct 2024 14:38:49 +0200
Subject: [PATCH 02/12] memory-auto.m4: Replace $as_echo with AS_ECHO[]
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Klaus Kämpf <kkaempf@gmail.com>
---
libtme/memory-auto.m4 | 1204 ++++++++++++++++++++---------------------
1 file changed, 602 insertions(+), 602 deletions(-)
diff --git a/libtme/memory-auto.m4 b/libtme/memory-auto.m4
index ff10bc0..e6799ad 100644
--- a/libtme/memory-auto.m4
+++ b/libtme/memory-auto.m4
@@ -153,8 +153,8 @@ for size in ${sizes}; do
if test ${size} = 8; then continue; fi
if test `expr ${size} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#ifdef TME_HAVE_INT${size}_T"
+ AS_ECHO([""])
+ AS_ECHO(["#ifdef TME_HAVE_INT${size}_T"])
fi
# emit the bus read and write slow functions:
@@ -180,25 +180,25 @@ for size in ${sizes}; do
# if we're making the header, just emit a prototype:
#
if $header; then
- $as_echo ""
- $as_echo "/* the bus ${size}-bit ${op} slow function: */"
- $as_echo "${op_return_type} tme_memory_bus_${op}${size} _TME_P((${op_const}tme_shared tme_uint${size}_t *${op_proto_operand}, tme_rwlock_t *, unsigned int, unsigned int));"
+ AS_ECHO([""])
+ AS_ECHO(["/* the bus ${size}-bit ${op} slow function: */"])
+ AS_ECHO(["${op_return_type} tme_memory_bus_${op}${size} _TME_P((${op_const}tme_shared tme_uint${size}_t *${op_proto_operand}, tme_rwlock_t *, unsigned int, unsigned int));"])
continue
fi
- $as_echo ""
- $as_echo "/* undefine the macro version of tme_memory_bus_${op}${size}: */"
- $as_echo "#undef tme_memory_bus_${op}${size}"
- $as_echo ""
- $as_echo "/* the bus ${size}-bit ${op} slow function: */"
- $as_echo ${op_return_type}
- $as_echo "tme_memory_bus_${op}${size}(${op_const}tme_shared tme_uint${size}_t *mem${op_operand}, tme_rwlock_t *rwlock, unsigned int align_min, unsigned int bus_boundary)"
- $as_echo "{"
- $as_echo " const unsigned int host_boundary = TME_MEMORY_BUS_BOUNDARY;"
- $as_echo " unsigned int size_skip;"
- $as_echo " unsigned int size_done;"
+ AS_ECHO([""])
+ AS_ECHO(["/* undefine the macro version of tme_memory_bus_${op}${size}: */"])
+ AS_ECHO(["#undef tme_memory_bus_${op}${size}"])
+ AS_ECHO([""])
+ AS_ECHO(["/* the bus ${size}-bit ${op} slow function: */"])
+ AS_ECHO([${op_return_type}])
+ AS_ECHO(["tme_memory_bus_${op}${size}(${op_const}tme_shared tme_uint${size}_t *mem${op_operand}, tme_rwlock_t *rwlock, unsigned int align_min, unsigned int bus_boundary)"])
+ AS_ECHO(["{"])
+ AS_ECHO([" const unsigned int host_boundary = TME_MEMORY_BUS_BOUNDARY;"])
+ AS_ECHO([" unsigned int size_skip;"])
+ AS_ECHO([" unsigned int size_done;"])
if test ${op} = read; then
- $as_echo " tme_uint${size}_t x;"
+ AS_ECHO([" tme_uint${size}_t x;"])
fi
# emit the locals for the possible host boundaries:
@@ -206,20 +206,20 @@ for size in ${sizes}; do
host_boundary=${host_boundary_largest}
while test ${host_boundary} != 4; do
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo "#ifdef TME_HAVE_INT${host_boundary}_T"
+ AS_ECHO(["#ifdef TME_HAVE_INT${host_boundary}_T"])
fi
- $as_echo " ${op_const}tme_shared tme_uint${host_boundary}_t *parts${host_boundary};"
- $as_echo " tme_uint${host_boundary}_t part${host_boundary};"
+ AS_ECHO([" ${op_const}tme_shared tme_uint${host_boundary}_t *parts${host_boundary};"])
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary};"])
if test ${op} = write; then
- $as_echo " tme_uint${host_boundary}_t part${host_boundary}_cmp;"
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary}_cmp;"])
fi
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo "#endif /* TME_HAVE_INT${host_boundary}_T */"
+ AS_ECHO(["#endif /* TME_HAVE_INT${host_boundary}_T */"])
fi
host_boundary=`expr ${host_boundary} / 2`
done
- $as_echo ""
- $as_echo_n " assert (bus_boundary != 0 && bus_boundary <= host_boundary);"
+ AS_ECHO([""])
+ AS_ECHO_N([" assert (bus_boundary != 0 && bus_boundary <= host_boundary);"])
# loop over the possible host boundaries:
#
@@ -237,24 +237,24 @@ for size in ${sizes}; do
#
if test ${host_boundary} != 8; then
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo ""
- $as_echo "#ifdef TME_HAVE_INT${host_boundary}_T"
- $as_echo ""
- $as_echo_n " "
+ AS_ECHO([""])
+ AS_ECHO([""])
+ AS_ECHO(["#ifdef TME_HAVE_INT${host_boundary}_T"])
+ AS_ECHO([""])
+ AS_ECHO_N([" "])
fi
- $as_echo_n " if (host_boundary == sizeof(tme_uint${host_boundary}_t))"
+ AS_ECHO_N([" if (host_boundary == sizeof(tme_uint${host_boundary}_t))"])
fi
- $as_echo " {"
+ AS_ECHO([" {"])
- $as_echo ""
- $as_echo " /* prepare to ${op} the first ${host_boundary}-bit part of the memory: */"
- $as_echo " parts${host_boundary} = (${op_const}tme_shared tme_uint${host_boundary}_t *) (((tme_uintptr_t) mem) & (((tme_uintptr_t) 0) - (${host_boundary} / 8)));"
- $as_echo " size_skip = (((unsigned int) (tme_uintptr_t) mem) % (${host_boundary} / 8)) * 8;"
- $as_echo " size_done = 0;"
+ AS_ECHO([""])
+ AS_ECHO([" /* prepare to ${op} the first ${host_boundary}-bit part of the memory: */"])
+ AS_ECHO([" parts${host_boundary} = (${op_const}tme_shared tme_uint${host_boundary}_t *) (((tme_uintptr_t) mem) & (((tme_uintptr_t) 0) - (${host_boundary} / 8)));"])
+ AS_ECHO([" size_skip = (((unsigned int) (tme_uintptr_t) mem) % (${host_boundary} / 8)) * 8;"])
+ AS_ECHO([" size_done = 0;"])
- $as_echo ""
- $as_echo " /* ${op} the first ${host_boundary}-bit part of the memory: */"
+ AS_ECHO([""])
+ AS_ECHO([" /* ${op} the first ${host_boundary}-bit part of the memory: */"])
# emit two accesses. if the worst number of boundaries
# that this access could cross is one, the second access
@@ -268,37 +268,37 @@ for size in ${sizes}; do
# read this memory part:
#
- $as_echo "${indent0} part${host_boundary} = tme_memory_atomic_read${host_boundary}(parts${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"
+ AS_ECHO(["${indent0} part${host_boundary} = tme_memory_atomic_read${host_boundary}(parts${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"])
# if this is a read:
#
if test ${op} = read; then
- $as_echo ""
- $as_echo "${indent0} /* on a little-endian host, we shift off the skip"
- $as_echo "${indent0} data on the right, and shift the remaining data"
- $as_echo "${indent0} up into position in the result: */"
- $as_echo "${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"
- $as_echo "${indent0} x ${access_or}= (((tme_uint${size}_t) (part${host_boundary} >> ${size_skip})) << ${size_done});"
- $as_echo "${indent0} }"
- $as_echo ""
- $as_echo "${indent0} /* on a big-endian host, we shift off the skip data"
- $as_echo "${indent0} on the left, and shift the remaining data down"
- $as_echo "${indent0} into position in the result: */"
+ AS_ECHO([""])
+ AS_ECHO(["${indent0} /* on a little-endian host, we shift off the skip"])
+ AS_ECHO(["${indent0} data on the right, and shift the remaining data"])
+ AS_ECHO(["${indent0} up into position in the result: */"])
+ AS_ECHO(["${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"])
+ AS_ECHO(["${indent0} x ${access_or}= (((tme_uint${size}_t) (part${host_boundary} >> ${size_skip})) << ${size_done});"])
+ AS_ECHO(["${indent0} }"])
+ AS_ECHO([""])
+ AS_ECHO(["${indent0} /* on a big-endian host, we shift off the skip data"])
+ AS_ECHO(["${indent0} on the left, and shift the remaining data down"])
+ AS_ECHO(["${indent0} into position in the result: */"])
#
# NB: on a big-endian host, because the skip data
# is on the left, the type of what we shift
# depends on how this host boundary size compares
# to the access size:
#
- $as_echo "${indent0} else {"
- $as_echo_n "${indent0} x ${access_or}= "
+ AS_ECHO(["${indent0} else {"])
+ AS_ECHO_N(["${indent0} x ${access_or}= "])
if test `expr ${host_boundary} \> ${size}` = 1; then
- $as_echo "((part${host_boundary} << ${size_skip}) >> ((${host_boundary} - ${size}) + ${size_done}));"
+ AS_ECHO(["((part${host_boundary} << ${size_skip}) >> ((${host_boundary} - ${size}) + ${size_done}));"])
else
- $as_echo "((((tme_uint${size}_t) part${host_boundary}) << ((${size} - ${host_boundary}) + ${size_skip})) >> ${size_done});"
+ AS_ECHO(["((((tme_uint${size}_t) part${host_boundary}) << ((${size} - ${host_boundary}) + ${size_skip})) >> ${size_done});"])
fi
- $as_echo "${indent0} }"
+ AS_ECHO(["${indent0} }"])
# otherwise, this is a write:
#
@@ -306,46 +306,46 @@ for size in ${sizes}; do
# start the compare-and-exchange do loop:
#
- $as_echo "${indent0} do {"
- $as_echo "${indent0} part${host_boundary}_cmp = part${host_boundary};"
- $as_echo ""
- $as_echo "${indent0} /* on a little-endian host, we clear with zeroes"
- $as_echo "${indent0} shifted up past the skip data, and then we"
- $as_echo "${indent0} insert the data shifted up past the skip data: */"
- $as_echo "${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"
- $as_echo "${indent0} part${host_boundary} &= (_tme_memory_type_mask(tme_uint${host_boundary}_t, + 0) ^ (((tme_uint${host_boundary}_t) _tme_memory_type_mask(tme_uint${size}_t, << ${size_done})) << ${size_skip}));"
- $as_echo "${indent0} part${host_boundary} |= (((tme_uint${host_boundary}_t) x) << ${size_skip});"
- $as_echo "${indent0} }"
- $as_echo ""
- $as_echo "${indent0} /* on a big-endian host, we clear with zeroes"
- $as_echo "${indent0} shifted down past the skip data, and then we"
- $as_echo "${indent0} insert the data shifted down past the skip data: */"
+ AS_ECHO(["${indent0} do {"])
+ AS_ECHO(["${indent0} part${host_boundary}_cmp = part${host_boundary};"])
+ AS_ECHO([""])
+ AS_ECHO(["${indent0} /* on a little-endian host, we clear with zeroes"])
+ AS_ECHO(["${indent0} shifted up past the skip data, and then we"])
+ AS_ECHO(["${indent0} insert the data shifted up past the skip data: */"])
+ AS_ECHO(["${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"])
+ AS_ECHO(["${indent0} part${host_boundary} &= (_tme_memory_type_mask(tme_uint${host_boundary}_t, + 0) ^ (((tme_uint${host_boundary}_t) _tme_memory_type_mask(tme_uint${size}_t, << ${size_done})) << ${size_skip}));"])
+ AS_ECHO(["${indent0} part${host_boundary} |= (((tme_uint${host_boundary}_t) x) << ${size_skip});"])
+ AS_ECHO(["${indent0} }"])
+ AS_ECHO([""])
+ AS_ECHO(["${indent0} /* on a big-endian host, we clear with zeroes"])
+ AS_ECHO(["${indent0} shifted down past the skip data, and then we"])
+ AS_ECHO(["${indent0} insert the data shifted down past the skip data: */"])
#
# NB: on a big-endian host, because the skip data
# is on the left, exactly how we shift depends on
# how this host boundary size compares to the
# access size:
#
- $as_echo "${indent0} else {"
+ AS_ECHO(["${indent0} else {"])
if test `expr ${host_boundary} \> ${size}` = 1; then
- $as_echo "${indent0} part${host_boundary} &= ~((((tme_uint${host_boundary}_t) _tme_memory_type_mask(tme_uint${size}_t, + 0)) << ((${host_boundary} - ${size}) + ${size_done})) >> ${size_skip});"
- $as_echo "${indent0} part${host_boundary} |= ((((tme_uint${host_boundary}_t) x) << (${host_boundary} - ${size})) >> ${size_skip});"
+ AS_ECHO(["${indent0} part${host_boundary} &= ~((((tme_uint${host_boundary}_t) _tme_memory_type_mask(tme_uint${size}_t, + 0)) << ((${host_boundary} - ${size}) + ${size_done})) >> ${size_skip});"])
+ AS_ECHO(["${indent0} part${host_boundary} |= ((((tme_uint${host_boundary}_t) x) << (${host_boundary} - ${size})) >> ${size_skip});"])
else
- $as_echo "${indent0} part${host_boundary} &= ~(_tme_memory_type_mask(tme_uint${host_boundary}_t, << ${size_done}) >> ${size_skip});"
- $as_echo "${indent0} part${host_boundary} |= (x >> ((${size} - ${host_boundary}) + ${size_skip}));"
+ AS_ECHO(["${indent0} part${host_boundary} &= ~(_tme_memory_type_mask(tme_uint${host_boundary}_t, << ${size_done}) >> ${size_skip});"])
+ AS_ECHO(["${indent0} part${host_boundary} |= (x >> ((${size} - ${host_boundary}) + ${size_skip}));"])
fi
- $as_echo "${indent0} }"
- $as_echo ""
- $as_echo "${indent0} /* loop until we can atomically update this part: */"
- $as_echo "${indent0} part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"
- $as_echo "${indent0} } while (part${host_boundary} != part${host_boundary}_cmp);"
+ AS_ECHO(["${indent0} }"])
+ AS_ECHO([""])
+ AS_ECHO(["${indent0} /* loop until we can atomically update this part: */"])
+ AS_ECHO(["${indent0} part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"])
+ AS_ECHO(["${indent0} } while (part${host_boundary} != part${host_boundary}_cmp);"])
if test ${host_boundaries_worst} != 1 || test ${size_skip} != 0; then
- $as_echo "${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"
- $as_echo "${indent0} x >>= (${host_boundary} - ${size_skip});"
- $as_echo "${indent0} }"
- $as_echo "${indent0} else {"
- $as_echo "${indent0} x <<= (${host_boundary} - ${size_skip});"
- $as_echo "${indent0} }"
+ AS_ECHO(["${indent0} if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"])
+ AS_ECHO(["${indent0} x >>= (${host_boundary} - ${size_skip});"])
+ AS_ECHO(["${indent0} }"])
+ AS_ECHO(["${indent0} else {"])
+ AS_ECHO(["${indent0} x <<= (${host_boundary} - ${size_skip});"])
+ AS_ECHO(["${indent0} }"])
fi
fi
@@ -353,7 +353,7 @@ for size in ${sizes}; do
#
if test ${size_done} = 0; then
- $as_echo " size_done = ${host_boundary} - size_skip;"
+ AS_ECHO([" size_done = ${host_boundary} - size_skip;"])
size_done=size_done
size_skip=0
access_or='|'
@@ -373,77 +373,77 @@ for size in ${sizes}; do
#
if test ${op} = write; then
if test `expr ${host_boundary} \< ${size}` = 1; then
- $as_echo ""
+ AS_ECHO([""])
if test ${host_boundaries_worst} = 2; then
- $as_echo " /* try to write one full ${host_boundary}-bit part of memory: */"
- $as_echo_n " if (__tme_predict_true(size_done <= (${size} - ${host_boundary})))"
+ AS_ECHO([" /* try to write one full ${host_boundary}-bit part of memory: */"])
+ AS_ECHO_N([" if (__tme_predict_true(size_done <= (${size} - ${host_boundary})))"])
else
- $as_echo " /* write as many full ${host_boundary}-bit parts of the memory as we can: */"
- $as_echo_n " for (; size_done <= (${size} - ${host_boundary}); )"
+ AS_ECHO([" /* write as many full ${host_boundary}-bit parts of the memory as we can: */"])
+ AS_ECHO_N([" for (; size_done <= (${size} - ${host_boundary}); )"])
fi
- $as_echo " {"
- $as_echo ""
- $as_echo " /* make a boundary: */"
- $as_echo " tme_memory_barrier(mem, (${size} / 8), TME_MEMORY_BARRIER_${op_cap}_BEFORE_${op_cap});"
- $as_echo ""
- $as_echo " /* write a full ${host_boundary}-bit part of memory: */"
- $as_echo " part${host_boundary} = (x >> ((TME_ENDIAN_NATIVE == TME_ENDIAN_BIG) * (${size} - ${host_boundary})));"
- $as_echo " parts${host_boundary}++;"
- $as_echo " tme_memory_atomic_write${host_boundary}(parts${host_boundary}, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"
- $as_echo " size_done += ${host_boundary};"
- $as_echo " if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"
- $as_echo " x >>= ${host_boundary};"
- $as_echo " }"
- $as_echo " else {"
- $as_echo " x <<= ${host_boundary};"
- $as_echo " }"
- $as_echo " }"
+ AS_ECHO([" {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* make a boundary: */"])
+ AS_ECHO([" tme_memory_barrier(mem, (${size} / 8), TME_MEMORY_BARRIER_${op_cap}_BEFORE_${op_cap});"])
+ AS_ECHO([""])
+ AS_ECHO([" /* write a full ${host_boundary}-bit part of memory: */"])
+ AS_ECHO([" part${host_boundary} = (x >> ((TME_ENDIAN_NATIVE == TME_ENDIAN_BIG) * (${size} - ${host_boundary})));"])
+ AS_ECHO([" parts${host_boundary}++;"])
+ AS_ECHO([" tme_memory_atomic_write${host_boundary}(parts${host_boundary}, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"])
+ AS_ECHO([" size_done += ${host_boundary};"])
+ AS_ECHO([" if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"])
+ AS_ECHO([" x >>= ${host_boundary};"])
+ AS_ECHO([" }"])
+ AS_ECHO([" else {"])
+ AS_ECHO([" x <<= ${host_boundary};"])
+ AS_ECHO([" }"])
+ AS_ECHO([" }"])
access_if=true
fi
fi
fi
- $as_echo ""
+ AS_ECHO([""])
if $access_if; then
- $as_echo " /* ${op} at most one remaining ${host_boundary}-bit part of the memory: */"
- $as_echo_n " if (__tme_predict_false(size_done < ${size}))"
+ AS_ECHO([" /* ${op} at most one remaining ${host_boundary}-bit part of the memory: */"])
+ AS_ECHO_N([" if (__tme_predict_false(size_done < ${size}))"])
else
- $as_echo " /* ${op} any remaining ${host_boundary}-bit parts of the memory: */"
- $as_echo_n " for (; size_done < ${size}; size_done += ${host_boundary})"
+ AS_ECHO([" /* ${op} any remaining ${host_boundary}-bit parts of the memory: */"])
+ AS_ECHO_N([" for (; size_done < ${size}; size_done += ${host_boundary})"])
fi
- $as_echo " {"
-
- $as_echo ""
- $as_echo " /* make a boundary: */"
- $as_echo " tme_memory_barrier(mem, (${size} / 8), TME_MEMORY_BARRIER_${op_cap}_BEFORE_${op_cap});"
- $as_echo ""
- $as_echo " /* ${op} the next ${host_boundary}-bit part of the memory: */"
- $as_echo " parts${host_boundary}++;"
+ AS_ECHO([" {"])
+
+ AS_ECHO([""])
+ AS_ECHO([" /* make a boundary: */"])
+ AS_ECHO([" tme_memory_barrier(mem, (${size} / 8), TME_MEMORY_BARRIER_${op_cap}_BEFORE_${op_cap});"])
+ AS_ECHO([""])
+ AS_ECHO([" /* ${op} the next ${host_boundary}-bit part of the memory: */"])
+ AS_ECHO([" parts${host_boundary}++;"])
indent0=" "
# otherwise, this was the loop or second access:
#
else
- $as_echo " }"
+ AS_ECHO([" }"])
break
fi
done
- $as_echo " }"
+ AS_ECHO([" }"])
# close this host boundary:
#
if test ${host_boundary} != 8; then
- $as_echo ""
- $as_echo_n " else"
+ AS_ECHO([""])
+ AS_ECHO_N([" else"])
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo ""
- $as_echo_n "#endif /* TME_HAVE_INT${host_boundary}_T */"
+ AS_ECHO([""])
+ AS_ECHO([""])
+ AS_ECHO_N(["#endif /* TME_HAVE_INT${host_boundary}_T */"])
if test ${host_boundary} = ${size_ifdef}; then
- $as_echo ""
- $as_echo ""
- $as_echo_n " "
+ AS_ECHO([""])
+ AS_ECHO([""])
+ AS_ECHO_N([" "])
fi
fi
fi
@@ -453,16 +453,16 @@ for size in ${sizes}; do
host_boundary=`expr ${host_boundary} / 2`
done
if test ${op} = read; then
- $as_echo ""
- $as_echo " /* return the value read: */"
- $as_echo " return (x);"
+ AS_ECHO([""])
+ AS_ECHO([" /* return the value read: */"])
+ AS_ECHO([" return (x);"])
fi
- $as_echo "}"
+ AS_ECHO(["}"])
done
if test `expr ${size} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#endif /* TME_HAVE_INT${size}_T */"
+ AS_ECHO([""])
+ AS_ECHO(["#endif /* TME_HAVE_INT${size}_T */"])
fi
done
@@ -497,86 +497,86 @@ for op in read write; do
#
if $header; then
- $as_echo ""
- $as_echo "/* the bus ${op} buffer function and default macro implementation: */"
+ AS_ECHO([""])
+ AS_ECHO(["/* the bus ${op} buffer function and default macro implementation: */"])
# emit the prototype:
#
- $as_echo "void tme_memory_bus_${op}_buffer _TME_P((${op_const_mem}tme_shared tme_uint8_t *, ${op_const_buffer}tme_uint8_t *, unsigned long, tme_rwlock_t *, unsigned int, unsigned int));"
+ AS_ECHO(["void tme_memory_bus_${op}_buffer _TME_P((${op_const_mem}tme_shared tme_uint8_t *, ${op_const_buffer}tme_uint8_t *, unsigned long, tme_rwlock_t *, unsigned int, unsigned int));"])
# emit the default macro definition:
#
- $as_echo "#define tme_memory_bus_${op}_buffer(mem, buffer, count, rwlock, align_min, bus_boundary) \\"
- $as_echo " do { \\"
- $as_echo " if (tme_thread_cooperative()) { \\"
- $as_echo " memcpy(${op_memcpy}, (count)); \\"
- $as_echo " } \\"
- $as_echo " else { \\"
- $as_echo " tme_memory_bus_${op}_buffer(((${op_const_mem}tme_shared tme_uint8_t *) ${op_audit_mem}(mem)), ((${op_const_buffer}tme_uint8_t *) ${op_audit_buffer}(buffer)), (count), (rwlock), (align_min), (bus_boundary)); \\"
- $as_echo " } \\"
- $as_echo " } while (/* CONSTCOND */ 0)"
+ AS_ECHO(["#define tme_memory_bus_${op}_buffer(mem, buffer, count, rwlock, align_min, bus_boundary) \\"])
+ AS_ECHO([" do { \\"])
+ AS_ECHO([" if (tme_thread_cooperative()) { \\"])
+ AS_ECHO([" memcpy(${op_memcpy}, (count)); \\"])
+ AS_ECHO([" } \\"])
+ AS_ECHO([" else { \\"])
+ AS_ECHO([" tme_memory_bus_${op}_buffer(((${op_const_mem}tme_shared tme_uint8_t *) ${op_audit_mem}(mem)), ((${op_const_buffer}tme_uint8_t *) ${op_audit_buffer}(buffer)), (count), (rwlock), (align_min), (bus_boundary)); \\"])
+ AS_ECHO([" } \\"])
+ AS_ECHO([" } while (/* CONSTCOND */ 0)"])
continue
fi
# start the function:
#
- $as_echo ""
- $as_echo "/* undefine the macro version of tme_memory_bus_${op}_buffer: */"
- $as_echo "#undef tme_memory_bus_${op}_buffer"
- $as_echo ""
- $as_echo "/* the bus ${op} buffer function: */"
- $as_echo "void"
- $as_echo "tme_memory_bus_${op}_buffer(${op_const_mem}tme_shared tme_uint8_t *mem, ${op_const_buffer}tme_uint8_t *buffer, unsigned long count, tme_rwlock_t *rwlock, unsigned int align_min, unsigned int bus_boundary)"
- $as_echo "{"
- $as_echo " const unsigned int host_boundary = TME_MEMORY_BUS_BOUNDARY;"
- $as_echo " ${op_const_mem}tme_uint8_t *part_buffer;"
- $as_echo " unsigned int count_done;"
- $as_echo " unsigned int count_misaligned;"
- $as_echo " unsigned int bits_misaligned;"
+ AS_ECHO([""])
+ AS_ECHO(["/* undefine the macro version of tme_memory_bus_${op}_buffer: */"])
+ AS_ECHO(["#undef tme_memory_bus_${op}_buffer"])
+ AS_ECHO([""])
+ AS_ECHO(["/* the bus ${op} buffer function: */"])
+ AS_ECHO(["void"])
+ AS_ECHO(["tme_memory_bus_${op}_buffer(${op_const_mem}tme_shared tme_uint8_t *mem, ${op_const_buffer}tme_uint8_t *buffer, unsigned long count, tme_rwlock_t *rwlock, unsigned int align_min, unsigned int bus_boundary)"])
+ AS_ECHO(["{"])
+ AS_ECHO([" const unsigned int host_boundary = TME_MEMORY_BUS_BOUNDARY;"])
+ AS_ECHO([" ${op_const_mem}tme_uint8_t *part_buffer;"])
+ AS_ECHO([" unsigned int count_done;"])
+ AS_ECHO([" unsigned int count_misaligned;"])
+ AS_ECHO([" unsigned int bits_misaligned;"])
# emit the locals for the possible host boundaries:
#
host_boundary=${host_boundary_largest}
while test ${host_boundary} != 4; do
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo "#ifdef TME_HAVE_INT${host_boundary}_T"
+ AS_ECHO(["#ifdef TME_HAVE_INT${host_boundary}_T"])
fi
- $as_echo " ${op_const_mem}tme_shared tme_uint${host_boundary}_t *parts${host_boundary};"
- $as_echo " tme_uint${host_boundary}_t part${host_boundary}_buffer;"
- $as_echo " tme_uint${host_boundary}_t part${host_boundary};"
- $as_echo " tme_uint${host_boundary}_t part${host_boundary}_next;"
+ AS_ECHO([" ${op_const_mem}tme_shared tme_uint${host_boundary}_t *parts${host_boundary};"])
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary}_buffer;"])
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary};"])
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary}_next;"])
if test ${op} = write; then
- $as_echo " tme_uint${host_boundary}_t part${host_boundary}_mask;"
- $as_echo " tme_uint${host_boundary}_t part${host_boundary}_cmp;"
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary}_mask;"])
+ AS_ECHO([" tme_uint${host_boundary}_t part${host_boundary}_cmp;"])
fi
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo "#endif /* TME_HAVE_INT${host_boundary}_T */"
+ AS_ECHO(["#endif /* TME_HAVE_INT${host_boundary}_T */"])
fi
host_boundary=`expr ${host_boundary} / 2`
done
- $as_echo ""
- $as_echo " assert (count != 0);"
- $as_echo " assert (bus_boundary != 0);"
+ AS_ECHO([""])
+ AS_ECHO([" assert (count != 0);"])
+ AS_ECHO([" assert (bus_boundary != 0);"])
- $as_echo ""
- $as_echo " /* if we are locking for all memory accesses, lock memory"
- $as_echo " around a memcpy: */"
- $as_echo " if (TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0) {"
- $as_echo " tme_rwlock_${op_rwlock}lock(rwlock);"
- $as_echo " memcpy(${op_memcpy}, (count));"
- $as_echo " tme_rwlock_${op_rwlock}unlock(rwlock);"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* otherwise, if the emulated bus boundary is greater than the"
- $as_echo " host's bus boundary, we are forced to stop all other threads"
- $as_echo " around a memcpy: */"
- $as_echo " else if (__tme_predict_false(bus_boundary == 0"
- $as_echo " || bus_boundary > host_boundary)) {"
- $as_echo " tme_thread_suspend_others();"
- $as_echo " memcpy(${op_memcpy}, (count) + (0 && align_min));"
- $as_echo " tme_thread_resume_others();"
- $as_echo " }"
+ AS_ECHO([""])
+ AS_ECHO([" /* if we are locking for all memory accesses, lock memory"])
+ AS_ECHO([" around a memcpy: */"])
+ AS_ECHO([" if (TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0) {"])
+ AS_ECHO([" tme_rwlock_${op_rwlock}lock(rwlock);"])
+ AS_ECHO([" memcpy(${op_memcpy}, (count));"])
+ AS_ECHO([" tme_rwlock_${op_rwlock}unlock(rwlock);"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* otherwise, if the emulated bus boundary is greater than the"])
+ AS_ECHO([" host's bus boundary, we are forced to stop all other threads"])
+ AS_ECHO([" around a memcpy: */"])
+ AS_ECHO([" else if (__tme_predict_false(bus_boundary == 0"])
+ AS_ECHO([" || bus_boundary > host_boundary)) {"])
+ AS_ECHO([" tme_thread_suspend_others();"])
+ AS_ECHO([" memcpy(${op_memcpy}, (count) + (0 && align_min));"])
+ AS_ECHO([" tme_thread_resume_others();"])
+ AS_ECHO([" }"])
# loop over the possible host boundaries:
#
@@ -587,15 +587,15 @@ for op in read write; do
# open this host boundary:
#
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#ifdef TME_HAVE_INT${host_boundary}_T"
+ AS_ECHO([""])
+ AS_ECHO(["#ifdef TME_HAVE_INT${host_boundary}_T"])
fi
- $as_echo ""
- $as_echo_n " else"
+ AS_ECHO([""])
+ AS_ECHO_N([" else"])
if test ${host_boundary} != 8; then
- $as_echo_n " if (host_boundary == sizeof(tme_uint${host_boundary}_t))"
+ AS_ECHO_N([" if (host_boundary == sizeof(tme_uint${host_boundary}_t))"])
fi
- $as_echo " {"
+ AS_ECHO([" {"])
if test ${op} = write; then
op_part_read="tme_memory_read${host_boundary}((const tme_uint${host_boundary}_t *) buffer, sizeof(tme_uint${host_boundary}_t))"
@@ -605,249 +605,249 @@ for op in read write; do
op_part_write="tme_memory_write${host_boundary}((tme_uint${host_boundary}_t *) buffer, part${host_boundary}, sizeof(tme_uint${host_boundary}_t))"
fi
- $as_echo ""
- $as_echo " /* make a ${host_boundary}-bit pointer to the memory: */"
- $as_echo " parts${host_boundary} = (${op_const_mem}tme_shared tme_uint${host_boundary}_t *) mem;"
- $as_echo ""
- $as_echo " /* if this pointer is not ${host_boundary}-bit aligned: */"
- $as_echo " if (__tme_predict_false((((tme_uintptr_t) parts${host_boundary}) % sizeof(tme_uint${host_boundary}_t)) != 0)) {"
- $as_echo ""
- $as_echo " /* get the misalignment from the previous ${host_boundary}-bit boundary: */"
- $as_echo " count_misaligned = ((tme_uintptr_t) parts${host_boundary}) % sizeof(tme_uint${host_boundary}_t);"
- $as_echo ""
- $as_echo " /* truncate this pointer to the previous ${host_boundary}-bit boundary: */"
- $as_echo " parts${host_boundary} = (${op_const_mem}tme_shared tme_uint${host_boundary}_t *) (((tme_uintptr_t) parts${host_boundary}) & (((tme_uintptr_t) 0) - sizeof(tme_uint${host_boundary}_t)));"
- $as_echo ""
- $as_echo " /* get the number of bytes to ${op} in the first ${host_boundary}-bit memory part: */"
- $as_echo " count_done = sizeof(tme_uint${host_boundary}_t) - count_misaligned;"
- $as_echo " if (__tme_predict_false(count_done > count)) {"
- $as_echo " count_done = count;"
- $as_echo " }"
+ AS_ECHO([""])
+ AS_ECHO([" /* make a ${host_boundary}-bit pointer to the memory: */"])
+ AS_ECHO([" parts${host_boundary} = (${op_const_mem}tme_shared tme_uint${host_boundary}_t *) mem;"])
+ AS_ECHO([""])
+ AS_ECHO([" /* if this pointer is not ${host_boundary}-bit aligned: */"])
+ AS_ECHO([" if (__tme_predict_false((((tme_uintptr_t) parts${host_boundary}) % sizeof(tme_uint${host_boundary}_t)) != 0)) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* get the misalignment from the previous ${host_boundary}-bit boundary: */"])
+ AS_ECHO([" count_misaligned = ((tme_uintptr_t) parts${host_boundary}) % sizeof(tme_uint${host_boundary}_t);"])
+ AS_ECHO([""])
+ AS_ECHO([" /* truncate this pointer to the previous ${host_boundary}-bit boundary: */"])
+ AS_ECHO([" parts${host_boundary} = (${op_const_mem}tme_shared tme_uint${host_boundary}_t *) (((tme_uintptr_t) parts${host_boundary}) & (((tme_uintptr_t) 0) - sizeof(tme_uint${host_boundary}_t)));"])
+ AS_ECHO([""])
+ AS_ECHO([" /* get the number of bytes to ${op} in the first ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" count_done = sizeof(tme_uint${host_boundary}_t) - count_misaligned;"])
+ AS_ECHO([" if (__tme_predict_false(count_done > count)) {"])
+ AS_ECHO([" count_done = count;"])
+ AS_ECHO([" }"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* make a mask that clears for the data to write in the"
- $as_echo " first ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_mask = 1;"
- $as_echo " part${host_boundary}_mask = (part${host_boundary}_mask << (count_done * 8)) - 1;"
- $as_echo " part${host_boundary}_mask"
- $as_echo " <<= (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"
- $as_echo " ? (count_misaligned * 8)"
- $as_echo " : (${host_boundary} - ((count_misaligned + count_done) * 8)));"
- $as_echo " part${host_boundary}_mask = ~part${host_boundary}_mask;"
- $as_echo ""
- $as_echo " /* copy from the buffer the bytes to write in the first"
- $as_echo " ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_buffer = 0;"
+ AS_ECHO([""])
+ AS_ECHO([" /* make a mask that clears for the data to write in the"])
+ AS_ECHO([" first ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_mask = 1;"])
+ AS_ECHO([" part${host_boundary}_mask = (part${host_boundary}_mask << (count_done * 8)) - 1;"])
+ AS_ECHO([" part${host_boundary}_mask"])
+ AS_ECHO([" <<= (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"])
+ AS_ECHO([" ? (count_misaligned * 8)"])
+ AS_ECHO([" : (${host_boundary} - ((count_misaligned + count_done) * 8)));"])
+ AS_ECHO([" part${host_boundary}_mask = ~part${host_boundary}_mask;"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy from the buffer the bytes to write in the first"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_buffer = 0;"])
else
- $as_echo ""
- $as_echo " /* read the first ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_buffer = ${op_part_read};"
- $as_echo " parts${host_boundary}++;"
- $as_echo ""
- $as_echo " /* copy to the buffer the bytes to read in the first"
- $as_echo " ${host_boundary}-bit memory part: */"
+ AS_ECHO([""])
+ AS_ECHO([" /* read the first ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_buffer = ${op_part_read};"])
+ AS_ECHO([" parts${host_boundary}++;"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy to the buffer the bytes to read in the first"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
fi
- $as_echo " part_buffer = ((tme_uint8_t *) &part${host_boundary}_buffer) + count_misaligned;"
- $as_echo " count -= count_done;"
- $as_echo " do {"
- $as_echo " ${op_copy};"
- $as_echo " part_buffer++;"
- $as_echo " buffer++;"
- $as_echo " } while (--count_done != 0);"
+ AS_ECHO([" part_buffer = ((tme_uint8_t *) &part${host_boundary}_buffer) + count_misaligned;"])
+ AS_ECHO([" count -= count_done;"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" ${op_copy};"])
+ AS_ECHO([" part_buffer++;"])
+ AS_ECHO([" buffer++;"])
+ AS_ECHO([" } while (--count_done != 0);"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* compare-and-exchange the first ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary} = ${op_part_read};"
- $as_echo " do {"
- $as_echo " part${host_boundary}_cmp = part${host_boundary};"
- $as_echo " part${host_boundary} = (part${host_boundary} & part${host_boundary}_mask) | part${host_boundary}_buffer;"
- $as_echo " part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"
- $as_echo " } while (part${host_boundary} != part${host_boundary}_cmp);"
- $as_echo " parts${host_boundary}++;"
+ AS_ECHO([""])
+ AS_ECHO([" /* compare-and-exchange the first ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary} = ${op_part_read};"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" part${host_boundary}_cmp = part${host_boundary};"])
+ AS_ECHO([" part${host_boundary} = (part${host_boundary} & part${host_boundary}_mask) | part${host_boundary}_buffer;"])
+ AS_ECHO([" part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"])
+ AS_ECHO([" } while (part${host_boundary} != part${host_boundary}_cmp);"])
+ AS_ECHO([" parts${host_boundary}++;"])
fi
- $as_echo " }"
-
- $as_echo ""
- $as_echo " /* if we have full ${host_boundary}-bit parts to ${op}: */"
- $as_echo " if (__tme_predict_true(count >= sizeof(tme_uint${host_boundary}_t))) {"
- $as_echo ""
- $as_echo " /* if the buffer is ${host_boundary}-bit aligned: */"
- $as_echo " if (__tme_predict_true((((tme_uintptr_t) buffer) % sizeof(tme_uint${host_boundary}_t)) == 0)) {"
- $as_echo ""
- $as_echo " /* ${op} full ${host_boundary}-bit parts without shifting: */"
- $as_echo " do {"
- $as_echo " part${host_boundary} = ${op_part_read};"
- $as_echo " ${op_part_write};"
- $as_echo ""
- $as_echo " /* advance: */"
- $as_echo " parts${host_boundary}++;"
- $as_echo " buffer += sizeof(tme_uint${host_boundary}_t);"
- $as_echo " count -= sizeof(tme_uint${host_boundary}_t);"
- $as_echo " } while (count >= sizeof(tme_uint${host_boundary}_t));"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* otherwise, the buffer is not ${host_boundary}-bit aligned: */"
- $as_echo " else {"
- $as_echo ""
- $as_echo " /* get the misalignment to the next ${host_boundary}-bit boundary: */"
- $as_echo " count_misaligned = (sizeof(tme_uint${host_boundary}_t) - ((unsigned int) (tme_uintptr_t) buffer)) % sizeof(tme_uint${host_boundary}_t);"
+ AS_ECHO([" }"])
+
+ AS_ECHO([""])
+ AS_ECHO([" /* if we have full ${host_boundary}-bit parts to ${op}: */"])
+ AS_ECHO([" if (__tme_predict_true(count >= sizeof(tme_uint${host_boundary}_t))) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* if the buffer is ${host_boundary}-bit aligned: */"])
+ AS_ECHO([" if (__tme_predict_true((((tme_uintptr_t) buffer) % sizeof(tme_uint${host_boundary}_t)) == 0)) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* ${op} full ${host_boundary}-bit parts without shifting: */"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" part${host_boundary} = ${op_part_read};"])
+ AS_ECHO([" ${op_part_write};"])
+ AS_ECHO([""])
+ AS_ECHO([" /* advance: */"])
+ AS_ECHO([" parts${host_boundary}++;"])
+ AS_ECHO([" buffer += sizeof(tme_uint${host_boundary}_t);"])
+ AS_ECHO([" count -= sizeof(tme_uint${host_boundary}_t);"])
+ AS_ECHO([" } while (count >= sizeof(tme_uint${host_boundary}_t));"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* otherwise, the buffer is not ${host_boundary}-bit aligned: */"])
+ AS_ECHO([" else {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* get the misalignment to the next ${host_boundary}-bit boundary: */"])
+ AS_ECHO([" count_misaligned = (sizeof(tme_uint${host_boundary}_t) - ((unsigned int) (tme_uintptr_t) buffer)) % sizeof(tme_uint${host_boundary}_t);"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* copy from the buffer until it is aligned: */"
- $as_echo " part${host_boundary}_buffer = 0;"
+ AS_ECHO([""])
+ AS_ECHO([" /* copy from the buffer until it is aligned: */"])
+ AS_ECHO([" part${host_boundary}_buffer = 0;"])
else
- $as_echo ""
- $as_echo " /* read the next ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_buffer = ${op_part_read};"
- $as_echo " parts${host_boundary}++;"
- $as_echo ""
- $as_echo " /* copy to the buffer until it is aligned: */"
+ AS_ECHO([""])
+ AS_ECHO([" /* read the next ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_buffer = ${op_part_read};"])
+ AS_ECHO([" parts${host_boundary}++;"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy to the buffer until it is aligned: */"])
fi
- $as_echo " part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"
- $as_echo " count_done = count_misaligned;"
- $as_echo " count -= count_misaligned;"
- $as_echo " do {"
- $as_echo " ${op_copy};"
- $as_echo " part_buffer++;"
- $as_echo " buffer++;"
- $as_echo " } while (--count_done != 0);"
-
- $as_echo ""
- $as_echo " /* ${op} full ${host_boundary}-bit words with shifting: */"
- $as_echo " bits_misaligned = count_misaligned * 8;"
+ AS_ECHO([" part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"])
+ AS_ECHO([" count_done = count_misaligned;"])
+ AS_ECHO([" count -= count_misaligned;"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" ${op_copy};"])
+ AS_ECHO([" part_buffer++;"])
+ AS_ECHO([" buffer++;"])
+ AS_ECHO([" } while (--count_done != 0);"])
+
+ AS_ECHO([""])
+ AS_ECHO([" /* ${op} full ${host_boundary}-bit words with shifting: */"])
+ AS_ECHO([" bits_misaligned = count_misaligned * 8;"])
if test ${op} = write; then
op_shift=bits_misaligned
op_shift_next="(${host_boundary} - bits_misaligned)"
- $as_echo " part${host_boundary} = part${host_boundary}_buffer;"
+ AS_ECHO([" part${host_boundary} = part${host_boundary}_buffer;"])
else
op_shift="(${host_boundary} - bits_misaligned)"
op_shift_next=bits_misaligned
- $as_echo " part${host_boundary}"
- $as_echo " = (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"
- $as_echo " ? (part${host_boundary}_buffer >> ${op_shift_next})"
- $as_echo " : (part${host_boundary}_buffer << ${op_shift_next}));"
+ AS_ECHO([" part${host_boundary}"])
+ AS_ECHO([" = (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"])
+ AS_ECHO([" ? (part${host_boundary}_buffer >> ${op_shift_next})"])
+ AS_ECHO([" : (part${host_boundary}_buffer << ${op_shift_next}));"])
fi
- $as_echo " for (; count >= sizeof(tme_uint${host_boundary}_t); ) {"
- $as_echo " part${host_boundary}_next = ${op_part_read};"
- $as_echo " if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"
- $as_echo " part${host_boundary} |= (part${host_boundary}_next << ${op_shift});"
- $as_echo " ${op_part_write};"
- $as_echo " part${host_boundary} = (part${host_boundary}_next >> ${op_shift_next});"
- $as_echo " }"
- $as_echo " else {"
- $as_echo " part${host_boundary} |= (part${host_boundary}_next >> ${op_shift});"
- $as_echo " ${op_part_write};"
- $as_echo " part${host_boundary} = (part${host_boundary}_next << ${op_shift_next});"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* advance: */"
- $as_echo " parts${host_boundary}++;"
- $as_echo " buffer += sizeof(tme_uint${host_boundary}_t);"
- $as_echo " count -= sizeof(tme_uint${host_boundary}_t);"
- $as_echo " }"
-
- $as_echo ""
- $as_echo " /* calculate how many more bytes there are to ${op} in this"
- $as_echo " ${host_boundary}-bit memory part: */"
- $as_echo " count_done = sizeof(tme_uint${host_boundary}_t) - count_misaligned;"
- $as_echo " part${host_boundary}_buffer = part${host_boundary};"
+ AS_ECHO([" for (; count >= sizeof(tme_uint${host_boundary}_t); ) {"])
+ AS_ECHO([" part${host_boundary}_next = ${op_part_read};"])
+ AS_ECHO([" if (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE) {"])
+ AS_ECHO([" part${host_boundary} |= (part${host_boundary}_next << ${op_shift});"])
+ AS_ECHO([" ${op_part_write};"])
+ AS_ECHO([" part${host_boundary} = (part${host_boundary}_next >> ${op_shift_next});"])
+ AS_ECHO([" }"])
+ AS_ECHO([" else {"])
+ AS_ECHO([" part${host_boundary} |= (part${host_boundary}_next >> ${op_shift});"])
+ AS_ECHO([" ${op_part_write};"])
+ AS_ECHO([" part${host_boundary} = (part${host_boundary}_next << ${op_shift_next});"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* advance: */"])
+ AS_ECHO([" parts${host_boundary}++;"])
+ AS_ECHO([" buffer += sizeof(tme_uint${host_boundary}_t);"])
+ AS_ECHO([" count -= sizeof(tme_uint${host_boundary}_t);"])
+ AS_ECHO([" }"])
+
+ AS_ECHO([""])
+ AS_ECHO([" /* calculate how many more bytes there are to ${op} in this"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" count_done = sizeof(tme_uint${host_boundary}_t) - count_misaligned;"])
+ AS_ECHO([" part${host_boundary}_buffer = part${host_boundary};"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* if we can't write one more full ${host_boundary}-bit memory part: */"
- $as_echo " if (count_done > count) {"
- $as_echo ""
- $as_echo " /* we will reread this data to write below: */"
- $as_echo " buffer -= count_misaligned;"
- $as_echo " count += count_misaligned;"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* otherwise, we can write one more full ${host_boundary}-bit memory part: */"
- $as_echo " else {"
- $as_echo ""
- $as_echo " /* copy from the buffer until we have the full ${host_boundary}-bit part: */"
- $as_echo " part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer) + count_misaligned;"
- $as_echo " count -= count_done;"
- $as_echo " do {"
- $as_echo " ${op_copy};"
- $as_echo " part_buffer++;"
- $as_echo " buffer++;"
- $as_echo " } while (--count_done != 0);"
- $as_echo ""
- $as_echo " /* write the last full ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary} = part${host_boundary}_buffer;"
- $as_echo " ${op_part_write};"
- $as_echo " }"
+ AS_ECHO([""])
+ AS_ECHO([" /* if we can't write one more full ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" if (count_done > count) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* we will reread this data to write below: */"])
+ AS_ECHO([" buffer -= count_misaligned;"])
+ AS_ECHO([" count += count_misaligned;"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* otherwise, we can write one more full ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" else {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy from the buffer until we have the full ${host_boundary}-bit part: */"])
+ AS_ECHO([" part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer) + count_misaligned;"])
+ AS_ECHO([" count -= count_done;"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" ${op_copy};"])
+ AS_ECHO([" part_buffer++;"])
+ AS_ECHO([" buffer++;"])
+ AS_ECHO([" } while (--count_done != 0);"])
+ AS_ECHO([""])
+ AS_ECHO([" /* write the last full ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary} = part${host_boundary}_buffer;"])
+ AS_ECHO([" ${op_part_write};"])
+ AS_ECHO([" }"])
else
- $as_echo ""
- $as_echo " /* copy to the buffer the remaining bytes in this ${host_boundary}-bit part: */"
- $as_echo " if (count_done > count) {"
- $as_echo " count_done = count;"
- $as_echo " }"
- $as_echo " part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"
- $as_echo " count -= count_done;"
- $as_echo " do {"
- $as_echo " ${op_copy};"
- $as_echo " part_buffer++;"
- $as_echo " buffer++;"
- $as_echo " } while (--count_done != 0);"
+ AS_ECHO([""])
+ AS_ECHO([" /* copy to the buffer the remaining bytes in this ${host_boundary}-bit part: */"])
+ AS_ECHO([" if (count_done > count) {"])
+ AS_ECHO([" count_done = count;"])
+ AS_ECHO([" }"])
+ AS_ECHO([" part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"])
+ AS_ECHO([" count -= count_done;"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" ${op_copy};"])
+ AS_ECHO([" part_buffer++;"])
+ AS_ECHO([" buffer++;"])
+ AS_ECHO([" } while (--count_done != 0);"])
fi
- $as_echo " }"
- $as_echo " }"
-
- $as_echo ""
- $as_echo " /* if we still have bytes to ${op}: */"
- $as_echo " if (__tme_predict_false(count > 0)) {"
- $as_echo ""
- $as_echo " /* we must have less than a full ${host_boundary}-bit part to ${op}: */"
- $as_echo " assert (count < sizeof(tme_uint${host_boundary}_t));"
+ AS_ECHO([" }"])
+ AS_ECHO([" }"])
+
+ AS_ECHO([""])
+ AS_ECHO([" /* if we still have bytes to ${op}: */"])
+ AS_ECHO([" if (__tme_predict_false(count > 0)) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* we must have less than a full ${host_boundary}-bit part to ${op}: */"])
+ AS_ECHO([" assert (count < sizeof(tme_uint${host_boundary}_t));"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* make a mask that clears for the data to write in the last"
- $as_echo " ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_mask"
- $as_echo " = (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"
- $as_echo " ? _tme_memory_type_mask(tme_uint${host_boundary}_t, << (count * 8))"
- $as_echo " : _tme_memory_type_mask(tme_uint${host_boundary}_t, >> (count * 8)));"
- $as_echo ""
- $as_echo " /* copy from the buffer the bytes to write in the last"
- $as_echo " ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_buffer = 0;"
+ AS_ECHO([""])
+ AS_ECHO([" /* make a mask that clears for the data to write in the last"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_mask"])
+ AS_ECHO([" = (TME_ENDIAN_NATIVE == TME_ENDIAN_LITTLE"])
+ AS_ECHO([" ? _tme_memory_type_mask(tme_uint${host_boundary}_t, << (count * 8))"])
+ AS_ECHO([" : _tme_memory_type_mask(tme_uint${host_boundary}_t, >> (count * 8)));"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy from the buffer the bytes to write in the last"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_buffer = 0;"])
else
- $as_echo ""
- $as_echo " /* read the last ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary}_buffer = ${op_part_read};"
- $as_echo ""
- $as_echo " /* copy to the buffer the bytes to read in the first"
- $as_echo " ${host_boundary}-bit memory part: */"
+ AS_ECHO([""])
+ AS_ECHO([" /* read the last ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary}_buffer = ${op_part_read};"])
+ AS_ECHO([""])
+ AS_ECHO([" /* copy to the buffer the bytes to read in the first"])
+ AS_ECHO([" ${host_boundary}-bit memory part: */"])
fi
- $as_echo " part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"
- $as_echo " count_done = count;"
- $as_echo " do {"
- $as_echo " ${op_copy};"
- $as_echo " part_buffer++;"
- $as_echo " buffer++;"
- $as_echo " } while (--count_done != 0);"
+ AS_ECHO([" part_buffer = ((${op_const_mem}tme_uint8_t *) &part${host_boundary}_buffer);"])
+ AS_ECHO([" count_done = count;"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" ${op_copy};"])
+ AS_ECHO([" part_buffer++;"])
+ AS_ECHO([" buffer++;"])
+ AS_ECHO([" } while (--count_done != 0);"])
if test ${op} = write; then
- $as_echo ""
- $as_echo " /* compare-and-exchange the last ${host_boundary}-bit memory part: */"
- $as_echo " part${host_boundary} = ${op_part_read};"
- $as_echo " do {"
- $as_echo " part${host_boundary}_cmp = part${host_boundary};"
- $as_echo " part${host_boundary} = (part${host_boundary} & part${host_boundary}_mask) | part${host_boundary}_buffer;"
- $as_echo " part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"
- $as_echo " } while (part${host_boundary} != part${host_boundary}_cmp);"
+ AS_ECHO([""])
+ AS_ECHO([" /* compare-and-exchange the last ${host_boundary}-bit memory part: */"])
+ AS_ECHO([" part${host_boundary} = ${op_part_read};"])
+ AS_ECHO([" do {"])
+ AS_ECHO([" part${host_boundary}_cmp = part${host_boundary};"])
+ AS_ECHO([" part${host_boundary} = (part${host_boundary} & part${host_boundary}_mask) | part${host_boundary}_buffer;"])
+ AS_ECHO([" part${host_boundary} = tme_memory_atomic_cx${host_boundary}(parts${host_boundary}, part${host_boundary}_cmp, part${host_boundary}, rwlock, sizeof(tme_uint${host_boundary}_t));"])
+ AS_ECHO([" } while (part${host_boundary} != part${host_boundary}_cmp);"])
fi
- $as_echo " }"
+ AS_ECHO([" }"])
# close this host boundary:
#
- $as_echo ""
- $as_echo " }"
+ AS_ECHO([""])
+ AS_ECHO([" }"])
if test `expr ${host_boundary} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#endif /* TME_HAVE_INT${host_boundary}_T */"
+ AS_ECHO([""])
+ AS_ECHO(["#endif /* TME_HAVE_INT${host_boundary}_T */"])
fi
# advance:
@@ -855,7 +855,7 @@ for op in read write; do
host_boundary=`expr ${host_boundary} / 2`
done
- $as_echo "}"
+ AS_ECHO(["}"])
done
# permute for the different sizes:
@@ -863,8 +863,8 @@ done
for size in ${sizes}; do
if test `expr ${size} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#ifdef TME_HAVE_INT${size}_T"
+ AS_ECHO([""])
+ AS_ECHO(["#ifdef TME_HAVE_INT${size}_T"])
fi
# permute for the different types of memory read and write macros.
@@ -936,29 +936,29 @@ for size in ${sizes}; do
# start the macro:
#
- $as_echo ""
- $as_echo "/* the default ${size}-bit memory ${type_user} ${op} macro: */"
- $as_echo "#define tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min${type_bus_boundary}) \\"
- $as_echo "${op_open}" | tr '@' '\n'
+ AS_ECHO([""])
+ AS_ECHO(["/* the default ${size}-bit memory ${type_user} ${op} macro: */"])
+ AS_ECHO(["#define tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min${type_bus_boundary}) \\"])
+ AS_ECHO(["${op_open}"]) | tr '@' '\n'
# dispatch on the macro type:
#
case ${type_user} in
plain)
- $as_echo "${op_indent0}/* if we know at compile time that the memory is aligned \\"
- $as_echo "${op_indent0} enough to ${op} directly, do the single direct ${op}. \\"
- $as_echo "${op_indent0}\\"
- $as_echo "${op_indent0} otherwise, if we know at compile time that the memory \\"
- $as_echo "${op_indent0} is less aligned than the smallest acceptable parts size, \\"
- $as_echo "${op_indent0} test if the memory is aligned enough to ${op} directly, \\"
- $as_echo "${op_indent0} and do the single direct ${op} if it is: */ \\"
- $as_echo "${op_indent0}(__tme_predict_true((_TME_ALIGNOF_INT${size}_T == 1 \\"
- $as_echo "${op_indent0} || (align_min) >= _TME_ALIGNOF_INT${size}_T) \\"
- $as_echo "${op_indent0} || ((align_min) < TME_MEMORY_ALIGNMENT_ACCEPT(tme_uint${size}_t) \\"
- $as_echo "${op_indent0} && _tme_memory_address_test(mem, _TME_ALIGNOF_INT${size}_T - 1, align_min) == 0))) \\"
- $as_echo "${op_then}"
- $as_echo "${op_indent2}_tme_memory_${op}(tme_uint${size}_t, tme_uint${size}_t, mem, 0${op_x})${op_semi} \\"
+ AS_ECHO(["${op_indent0}/* if we know at compile time that the memory is aligned \\"])
+ AS_ECHO(["${op_indent0} enough to ${op} directly, do the single direct ${op}. \\"])
+ AS_ECHO(["${op_indent0}\\"])
+ AS_ECHO(["${op_indent0} otherwise, if we know at compile time that the memory \\"])
+ AS_ECHO(["${op_indent0} is less aligned than the smallest acceptable parts size, \\"])
+ AS_ECHO(["${op_indent0} test if the memory is aligned enough to ${op} directly, \\"])
+ AS_ECHO(["${op_indent0} and do the single direct ${op} if it is: */ \\"])
+ AS_ECHO(["${op_indent0}(__tme_predict_true((_TME_ALIGNOF_INT${size}_T == 1 \\"])
+ AS_ECHO(["${op_indent0} || (align_min) >= _TME_ALIGNOF_INT${size}_T) \\"])
+ AS_ECHO(["${op_indent0} || ((align_min) < TME_MEMORY_ALIGNMENT_ACCEPT(tme_uint${size}_t) \\"])
+ AS_ECHO(["${op_indent0} && _tme_memory_address_test(mem, _TME_ALIGNOF_INT${size}_T - 1, align_min) == 0))) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO(["${op_indent2}_tme_memory_${op}(tme_uint${size}_t, tme_uint${size}_t, mem, 0${op_x})${op_semi} \\"])
# loop over the possible part sizes:
#
@@ -975,7 +975,7 @@ for size in ${sizes}; do
# we will just access all parts of this size:
#
- $as_echo "${op_else}" | tr '@' '\n'
+ AS_ECHO(["${op_else}"]) | tr '@' '\n'
# otherwise, this is not the last possible part
# size:
@@ -989,10 +989,10 @@ for size in ${sizes}; do
# size, we will just access all parts of this
# size:
#
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}((TME_MEMORY_ALIGNMENT_ACCEPT(tme_uint${size}_t) <= sizeof(tme_uint${size_part}_t)) \\"
- $as_echo "${op_indent1} && ((align_min) <= sizeof(tme_uint${size_part}_t))) \\"
- $as_echo "${op_then}"
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}((TME_MEMORY_ALIGNMENT_ACCEPT(tme_uint${size}_t) <= sizeof(tme_uint${size_part}_t)) \\"])
+ AS_ECHO(["${op_indent1} && ((align_min) <= sizeof(tme_uint${size_part}_t))) \\"])
+ AS_ECHO(["${op_then}"])
fi
# we always emit one set of partial accesses, all
@@ -1013,13 +1013,13 @@ for size in ${sizes}; do
# emit one partial transfer:
#
- $as_echo_n "${op_indent2}"
+ AS_ECHO_N(["${op_indent2}"])
op_delim=${op_semi}
if test ${op} = read; then
- if test ${size_done} = 0; then $as_echo_n '('; else $as_echo_n ' | '; fi
+ if test ${size_done} = 0; then AS_ECHO_N(['(']); else AS_ECHO_N([' | ']); fi
if test `expr ${size_done} + ${size_now}` = ${size}; then op_delim=')'; fi
fi
- $as_echo "_tme_memory${type}_${op}(tme_uint${size}_t, tme_uint${size_now}_t, mem, (${size_done} / 8)${op_x})${op_delim} \\"
+ AS_ECHO(["_tme_memory${type}_${op}(tme_uint${size}_t, tme_uint${size_now}_t, mem, (${size_done} / 8)${op_x})${op_delim} \\"])
# advance:
#
@@ -1045,112 +1045,112 @@ for size in ${sizes}; do
if test ${size_part} = ${size}; then
break
fi
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}(_tme_memory_address_test(mem, sizeof(tme_uint${size_now}_t), align_min) != 0) \\"
- $as_echo "${op_then}"
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}(_tme_memory_address_test(mem, sizeof(tme_uint${size_now}_t), align_min) != 0) \\"])
+ AS_ECHO(["${op_then}"])
done
done
;;
atomic)
- $as_echo "${op_indent0}/* if threads are cooperative, do a plain ${op}: */ \\"
- $as_echo "${op_indent0}(tme_thread_cooperative()) \\"
- $as_echo "${op_then}"
- $as_echo_n "${op_indent2}tme_memory_${op}${size}("
+ AS_ECHO(["${op_indent0}/* if threads are cooperative, do a plain ${op}: */ \\"])
+ AS_ECHO(["${op_indent0}(tme_thread_cooperative()) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO_N(["${op_indent2}tme_memory_${op}${size}("])
# this strips off the tme_shared qualifier:
#
if test ${op} = read; then
- $as_echo_n "(_tme_const tme_uint${size}_t *) _tme_audit_type(mem, tme_uint${size}_t *)"
+ AS_ECHO_N(["(_tme_const tme_uint${size}_t *) _tme_audit_type(mem, tme_uint${size}_t *)"])
else
- $as_echo_n "(tme_uint${size}_t *) _tme_cast_pointer_shared(tme_uint${size}_t *, tme_uint${size}_t *, mem)"
+ AS_ECHO_N(["(tme_uint${size}_t *) _tme_cast_pointer_shared(tme_uint${size}_t *, tme_uint${size}_t *, mem)"])
fi
- $as_echo "${op_x}, align_min)${op_semi} \\"
-
- $as_echo "${op_indent1}/* otherwise, if we aren't locking for all memory accesses, and we can \\"
- $as_echo "${op_indent1} make direct ${size}-bit accesses, and this memory is aligned \\"
- $as_echo "${op_indent1} enough to make a single direct atomic access, do the single \\"
- $as_echo "${op_indent1} direct atomic ${op}: */ \\"
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}(__tme_predict_true(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) != 0 \\"
- $as_echo "${op_indent1} && TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) != 0 \\"
- $as_echo "${op_indent1} && _tme_memory_address_test(mem, TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) - 1, align_min) == 0)) \\"
- $as_echo "${op_then}"
- $as_echo "${op_indent2}(*_tme_audit_type(mem, tme_uint${size}_t *)) \\"
+ AS_ECHO(["${op_x}, align_min)${op_semi} \\"])
+
+ AS_ECHO(["${op_indent1}/* otherwise, if we aren't locking for all memory accesses, and we can \\"])
+ AS_ECHO(["${op_indent1} make direct ${size}-bit accesses, and this memory is aligned \\"])
+ AS_ECHO(["${op_indent1} enough to make a single direct atomic access, do the single \\"])
+ AS_ECHO(["${op_indent1} direct atomic ${op}: */ \\"])
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}(__tme_predict_true(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) != 0 \\"])
+ AS_ECHO(["${op_indent1} && TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) != 0 \\"])
+ AS_ECHO(["${op_indent1} && _tme_memory_address_test(mem, TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) - 1, align_min) == 0)) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO(["${op_indent2}(*_tme_audit_type(mem, tme_uint${size}_t *)) \\"])
if test ${op} = write; then
- $as_echo "${op_indent2} = (x); \\"
+ AS_ECHO(["${op_indent2} = (x); \\"])
fi
- $as_echo "${op_indent1}/* otherwise, we must do a slow indirect atomic ${op}: */ \\"
- $as_echo "${op_else}" | tr '@' '\n'
- $as_echo "${op_indent2}tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min)${op_semi} \\"
+ AS_ECHO(["${op_indent1}/* otherwise, we must do a slow indirect atomic ${op}: */ \\"])
+ AS_ECHO(["${op_else}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent2}tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min)${op_semi} \\"])
;;
bus)
- $as_echo "${op_indent0}/* if threads are cooperative, do a plain ${op}: */ \\"
- $as_echo "${op_indent0}(tme_thread_cooperative()) \\"
- $as_echo "${op_then}"
- $as_echo_n "${op_indent2}tme_memory_${op}${size}("
+ AS_ECHO(["${op_indent0}/* if threads are cooperative, do a plain ${op}: */ \\"])
+ AS_ECHO(["${op_indent0}(tme_thread_cooperative()) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO_N(["${op_indent2}tme_memory_${op}${size}("])
# this strips off the tme_shared qualifier:
#
if test ${op} = read; then
- $as_echo_n "(_tme_const tme_uint${size}_t *) _tme_audit_type(mem, tme_uint${size}_t *)"
+ AS_ECHO_N(["(_tme_const tme_uint${size}_t *) _tme_audit_type(mem, tme_uint${size}_t *)"])
else
- $as_echo_n "(tme_uint${size}_t *) _tme_cast_pointer_shared(tme_uint${size}_t *, tme_uint${size}_t *, mem)"
+ AS_ECHO_N(["(tme_uint${size}_t *) _tme_cast_pointer_shared(tme_uint${size}_t *, tme_uint${size}_t *, mem)"])
fi
- $as_echo "${op_x}, align_min)${op_semi} \\"
-
- $as_echo "${op_indent1}/* otherwise, if we aren't locking for all memory accesses, the \\"
- $as_echo "${op_indent1} host supports misaligned ${size}-bit accesses, the host's bus \\"
- $as_echo "${op_indent1} boundary is greater than or equal to the emulated bus \\"
- $as_echo "${op_indent1} boundary, and this memory is aligned enough, do a single \\"
- $as_echo "${op_indent1} direct bus ${op}: */ \\"
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}(__tme_predict_true(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) != 0 \\"
- $as_echo "${op_indent1} && _TME_ALIGNOF_INT${size}_T < sizeof(tme_uint${size}_t) \\"
- $as_echo "${op_indent1} && TME_MEMORY_BUS_BOUNDARY >= (bus_boundary) \\"
- $as_echo "${op_indent1} && _tme_memory_address_test(mem, _TME_ALIGNOF_INT${size}_T - 1, align_min) == 0)) \\"
- $as_echo "${op_then}"
- $as_echo "${op_indent2}(*_tme_audit_type(mem, tme_uint${size}_t *)) \\"
+ AS_ECHO(["${op_x}, align_min)${op_semi} \\"])
+
+ AS_ECHO(["${op_indent1}/* otherwise, if we aren't locking for all memory accesses, the \\"])
+ AS_ECHO(["${op_indent1} host supports misaligned ${size}-bit accesses, the host's bus \\"])
+ AS_ECHO(["${op_indent1} boundary is greater than or equal to the emulated bus \\"])
+ AS_ECHO(["${op_indent1} boundary, and this memory is aligned enough, do a single \\"])
+ AS_ECHO(["${op_indent1} direct bus ${op}: */ \\"])
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}(__tme_predict_true(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) != 0 \\"])
+ AS_ECHO(["${op_indent1} && _TME_ALIGNOF_INT${size}_T < sizeof(tme_uint${size}_t) \\"])
+ AS_ECHO(["${op_indent1} && TME_MEMORY_BUS_BOUNDARY >= (bus_boundary) \\"])
+ AS_ECHO(["${op_indent1} && _tme_memory_address_test(mem, _TME_ALIGNOF_INT${size}_T - 1, align_min) == 0)) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO(["${op_indent2}(*_tme_audit_type(mem, tme_uint${size}_t *)) \\"])
if test ${op} = write; then
- $as_echo "${op_indent2} = (x); \\"
+ AS_ECHO(["${op_indent2} = (x); \\"])
fi
- $as_echo "${op_indent1}/* otherwise, if we're locking for all memory accesses, or \\"
- $as_echo "${op_indent1} if this memory must cross at least one host bus boundary \\"
- $as_echo "${op_indent1} and the host bus boundary is less than the emulated bus \\"
- $as_echo "${op_indent1} boundary, do a slow indirect atomic ${op}: */ \\"
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}(__tme_predict_false(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0 \\"
- $as_echo "${op_indent1} || (sizeof(tme_uint${size}_t) > TME_MEMORY_BUS_BOUNDARY \\"
- $as_echo "${op_indent1} && TME_MEMORY_BUS_BOUNDARY < (bus_boundary)))) \\"
- $as_echo "${op_then}"
- $as_echo "${op_indent2}tme_memory_atomic_${op}${size}(mem${op_x}, lock, align_min)${op_semi} \\"
-
- $as_echo "${op_indent1}/* otherwise, if the memory is not larger than the emulated \\"
- $as_echo "${op_indent1} bus boundary, or if size-alignment would mean an atomic \\"
- $as_echo "${op_indent1} host access and it is size-aligned, do a single atomic \\"
- $as_echo "${op_indent1} ${op}, which may be direct or slow: */ \\"
- $as_echo "${op_else_if}" | tr '@' '\n'
- $as_echo "${op_indent1}(__tme_predict_true((sizeof(tme_uint${size}_t) <= (bus_boundary) \\"
- $as_echo "${op_indent1} || (TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) != 0 \\"
- $as_echo "${op_indent1} && TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) <= sizeof(tme_uint${size}_t))) \\"
- $as_echo "${op_indent1} && _tme_memory_address_test(mem, sizeof(tme_uint${size}_t) - 1, align_min) == 0)) \\"
- $as_echo "${op_then}"
- $as_echo "${op_indent2}tme_memory_atomic_${op}${size}(mem${op_x}, lock, sizeof(tme_uint${size}_t))${op_semi} \\"
- $as_echo "${op_indent1}/* otherwise, we must do a slow bus ${op}: */ \\"
- $as_echo "${op_else}" | tr '@' '\n'
- $as_echo "${op_indent2}tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min, bus_boundary)${op_semi} \\"
+ AS_ECHO(["${op_indent1}/* otherwise, if we're locking for all memory accesses, or \\"])
+ AS_ECHO(["${op_indent1} if this memory must cross at least one host bus boundary \\"])
+ AS_ECHO(["${op_indent1} and the host bus boundary is less than the emulated bus \\"])
+ AS_ECHO(["${op_indent1} boundary, do a slow indirect atomic ${op}: */ \\"])
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}(__tme_predict_false(TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0 \\"])
+ AS_ECHO(["${op_indent1} || (sizeof(tme_uint${size}_t) > TME_MEMORY_BUS_BOUNDARY \\"])
+ AS_ECHO(["${op_indent1} && TME_MEMORY_BUS_BOUNDARY < (bus_boundary)))) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO(["${op_indent2}tme_memory_atomic_${op}${size}(mem${op_x}, lock, align_min)${op_semi} \\"])
+
+ AS_ECHO(["${op_indent1}/* otherwise, if the memory is not larger than the emulated \\"])
+ AS_ECHO(["${op_indent1} bus boundary, or if size-alignment would mean an atomic \\"])
+ AS_ECHO(["${op_indent1} host access and it is size-aligned, do a single atomic \\"])
+ AS_ECHO(["${op_indent1} ${op}, which may be direct or slow: */ \\"])
+ AS_ECHO(["${op_else_if}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent1}(__tme_predict_true((sizeof(tme_uint${size}_t) <= (bus_boundary) \\"])
+ AS_ECHO(["${op_indent1} || (TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) != 0 \\"])
+ AS_ECHO(["${op_indent1} && TME_MEMORY_ALIGNMENT_ATOMIC(tme_uint${size}_t) <= sizeof(tme_uint${size}_t))) \\"])
+ AS_ECHO(["${op_indent1} && _tme_memory_address_test(mem, sizeof(tme_uint${size}_t) - 1, align_min) == 0)) \\"])
+ AS_ECHO(["${op_then}"])
+ AS_ECHO(["${op_indent2}tme_memory_atomic_${op}${size}(mem${op_x}, lock, sizeof(tme_uint${size}_t))${op_semi} \\"])
+ AS_ECHO(["${op_indent1}/* otherwise, we must do a slow bus ${op}: */ \\"])
+ AS_ECHO(["${op_else}"]) | tr '@' '\n'
+ AS_ECHO(["${op_indent2}tme_memory${type}_${op}${size}(mem${op_x}${type_lock}, align_min, bus_boundary)${op_semi} \\"])
;;
esac
# close this macro:
#
- $as_echo "${op_close}" | tr '@' '\n'
+ AS_ECHO(["${op_close}"]) | tr '@' '\n'
done
done
- $as_echo ""
- $as_echo "/* the ${size}-bit atomic operations: */"
+ AS_ECHO([""])
+ AS_ECHO(["/* the ${size}-bit atomic operations: */"])
# the atomic operations. NB that cx, read, and write are
# deliberately at the end and in that order, to allow all earlier
@@ -1205,142 +1205,142 @@ for size in ${sizes}; do
# if we're making the header, just emit a prototype:
#
if $header; then
- $as_echo "${op_rval} tme_memory_atomic_${op}${size} _TME_P((${op_const}tme_shared tme_uint${size}_t *${op_proto_operand}, tme_rwlock_t *, unsigned int));"
+ AS_ECHO(["${op_rval} tme_memory_atomic_${op}${size} _TME_P((${op_const}tme_shared tme_uint${size}_t *${op_proto_operand}, tme_rwlock_t *, unsigned int));"])
continue
fi
- $as_echo ""
- $as_echo "/* undefine any macro version of tme_memory_atomic_${op}${size}: */"
- $as_echo "#undef tme_memory_atomic_${op}${size}"
- $as_echo ""
- $as_echo "/* the ${size}-bit atomic ${op} function: */"
- $as_echo "${op_rval}"
- $as_echo "tme_memory_atomic_${op}${size}(${op_const}tme_shared tme_uint${size}_t *memory,"
+ AS_ECHO([""])
+ AS_ECHO(["/* undefine any macro version of tme_memory_atomic_${op}${size}: */"])
+ AS_ECHO(["#undef tme_memory_atomic_${op}${size}"])
+ AS_ECHO([""])
+ AS_ECHO(["/* the ${size}-bit atomic ${op} function: */"])
+ AS_ECHO(["${op_rval}"])
+ AS_ECHO(["tme_memory_atomic_${op}${size}(${op_const}tme_shared tme_uint${size}_t *memory,"])
if test ${op} = cx; then
- $as_echo " tme_uint${size}_t value_cmp,"
+ AS_ECHO([" tme_uint${size}_t value_cmp,"])
fi
if test "x${op_proto_operand}" != x; then
- $as_echo " tme_uint${size}_t ${op_operand},"
+ AS_ECHO([" tme_uint${size}_t ${op_operand},"])
fi
- $as_echo " tme_rwlock_t *rwlock,"
- $as_echo " unsigned int align_min)"
- $as_echo "{"
+ AS_ECHO([" tme_rwlock_t *rwlock,"])
+ AS_ECHO([" unsigned int align_min)"])
+ AS_ECHO(["{"])
if test ${op} != write; then
- $as_echo " tme_uint${size}_t value_read;"
+ AS_ECHO([" tme_uint${size}_t value_read;"])
fi
if test "x${op_operation}" != x; then
- $as_echo " tme_uint${size}_t value_written;"
+ AS_ECHO([" tme_uint${size}_t value_written;"])
fi
if test ${op} = read || test ${op} = write || test ${op} = cx; then :; else
- $as_echo " tme_uint${size}_t value_read_verify;"
+ AS_ECHO([" tme_uint${size}_t value_read_verify;"])
fi
- $as_echo ""
- $as_echo " /* if we can't make direct accesses at all, all atomic"
- $as_echo " accesses must be done under lock. (when threads are"
- $as_echo " cooperative the actual locking isn't needed): */"
- $as_echo " if (TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0) {"
- $as_echo " if (!tme_thread_cooperative()) {"
+ AS_ECHO([""])
+ AS_ECHO([" /* if we can't make direct accesses at all, all atomic"])
+ AS_ECHO([" accesses must be done under lock. (when threads are"])
+ AS_ECHO([" cooperative the actual locking isn't needed): */"])
+ AS_ECHO([" if (TME_MEMORY_ALIGNMENT_ATOMIC(TME_MEMORY_TYPE_COMMON) == 0) {"])
+ AS_ECHO([" if (!tme_thread_cooperative()) {"])
if test ${op} = read; then
- $as_echo " tme_rwlock_rdlock(rwlock);"
+ AS_ECHO([" tme_rwlock_rdlock(rwlock);"])
else
- $as_echo " tme_rwlock_wrlock(rwlock);"
+ AS_ECHO([" tme_rwlock_wrlock(rwlock);"])
fi
- $as_echo " }"
+ AS_ECHO([" }"])
if test ${op} != write; then
- $as_echo " value_read = tme_memory_read${size}((_tme_const tme_uint${size}_t *) memory, align_min);"
+ AS_ECHO([" value_read = tme_memory_read${size}((_tme_const tme_uint${size}_t *) memory, align_min);"])
fi
if test ${op} = cx; then
- $as_echo " if (value_read == value_cmp) {"
+ AS_ECHO([" if (value_read == value_cmp) {"])
fi
if test "x${op_operation}" != x; then
- $as_echo " value_written = ${op_operation};"
+ AS_ECHO([" value_written = ${op_operation};"])
fi
if test ${op} != read; then
- $as_echo "${op_indent} tme_memory_write${size}((tme_uint${size}_t *) memory, value_written, align_min);"
+ AS_ECHO(["${op_indent} tme_memory_write${size}((tme_uint${size}_t *) memory, value_written, align_min);"])
fi
if test "x${op_indent}" != x; then
- $as_echo " }"
+ AS_ECHO([" }"])
fi
- $as_echo " if (!tme_thread_cooperative()) {"
+ AS_ECHO([" if (!tme_thread_cooperative()) {"])
if test ${op} = read; then
- $as_echo " tme_rwlock_rdunlock(rwlock);"
+ AS_ECHO([" tme_rwlock_rdunlock(rwlock);"])
else
- $as_echo " tme_rwlock_wrunlock(rwlock);"
+ AS_ECHO([" tme_rwlock_wrunlock(rwlock);"])
fi
- $as_echo " }"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* otherwise, threads are not cooperative and this host CPU"
- $as_echo " can make atomic accesses to at least the most common memory"
- $as_echo " size."
- $as_echo ""
- $as_echo " in that case, the only reason this function should get"
- $as_echo " called is if the host CPU can't do an atomic ${size}-bit"
- $as_echo " ${op} at all, or if it can't do it at this alignment."
+ AS_ECHO([" }"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* otherwise, threads are not cooperative and this host CPU"])
+ AS_ECHO([" can make atomic accesses to at least the most common memory"])
+ AS_ECHO([" size."])
+ AS_ECHO([""])
+ AS_ECHO([" in that case, the only reason this function should get"])
+ AS_ECHO([" called is if the host CPU can't do an atomic ${size}-bit"])
+ AS_ECHO([" ${op} at all, or if it can't do it at this alignment."])
if test ${op} = read || test ${op} = write || test ${op} = cx; then
- $as_echo ""
- $as_echo " we assume that these problematic atomic ${op}s are rare,"
- $as_echo " and to emulate them we simply stop all other threads while"
- $as_echo " doing the ${op}: */"
- $as_echo " else {"
- $as_echo " tme_thread_suspend_others();"
+ AS_ECHO([""])
+ AS_ECHO([" we assume that these problematic atomic ${op}s are rare,"])
+ AS_ECHO([" and to emulate them we simply stop all other threads while"])
+ AS_ECHO([" doing the ${op}: */"])
+ AS_ECHO([" else {"])
+ AS_ECHO([" tme_thread_suspend_others();"])
if test ${op} != write; then
- $as_echo " value_read = tme_memory_read${size}((_tme_const tme_uint${size}_t *) memory, align_min);"
+ AS_ECHO([" value_read = tme_memory_read${size}((_tme_const tme_uint${size}_t *) memory, align_min);"])
fi
if test ${op} = cx; then
- $as_echo " if (value_read == value_cmp) {"
+ AS_ECHO([" if (value_read == value_cmp) {"])
fi
if test ${op} != read; then
- $as_echo "${op_indent} tme_memory_write${size}((tme_uint${size}_t *) memory, value_written, align_min);"
+ AS_ECHO(["${op_indent} tme_memory_write${size}((tme_uint${size}_t *) memory, value_written, align_min);"])
fi
if test "x${op_indent}" != x; then
- $as_echo " }"
+ AS_ECHO([" }"])
fi
- $as_echo " tme_thread_resume_others();"
- $as_echo " }"
+ AS_ECHO([" tme_thread_resume_others();"])
+ AS_ECHO([" }"])
else
- $as_echo ""
- $as_echo " we emulate the atomic ${size}-bit ${op} with a compare-and-exchange: */"
- $as_echo " else {"
- $as_echo ""
- $as_echo " /* do an atomic read of the memory: */"
- $as_echo " value_read = tme_memory_atomic_read${size}(memory, rwlock, align_min);"
- $as_echo ""
- $as_echo " /* spin the ${op} in a compare-and-exchange loop: */"
- $as_echo " for (;;) {"
+ AS_ECHO([""])
+ AS_ECHO([" we emulate the atomic ${size}-bit ${op} with a compare-and-exchange: */"])
+ AS_ECHO([" else {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* do an atomic read of the memory: */"])
+ AS_ECHO([" value_read = tme_memory_atomic_read${size}(memory, rwlock, align_min);"])
+ AS_ECHO([""])
+ AS_ECHO([" /* spin the ${op} in a compare-and-exchange loop: */"])
+ AS_ECHO([" for (;;) {"])
if test "x${op_operation}" != x; then
- $as_echo ""
- $as_echo " /* make the value to write: */"
- $as_echo " value_written = ${op_operation};"
+ AS_ECHO([""])
+ AS_ECHO([" /* make the value to write: */"])
+ AS_ECHO([" value_written = ${op_operation};"])
fi
- $as_echo ""
- $as_echo " /* try the compare-and-exchange: */"
- $as_echo " value_read_verify = tme_memory_atomic_cx${size}(memory, value_read, value_written, rwlock, align_min);"
- $as_echo ""
- $as_echo " /* if the compare-and-exchange failed: */"
- $as_echo " if (__tme_predict_false(value_read_verify != value_read)) {"
- $as_echo ""
- $as_echo " /* loop with the new value read from the memory: */"
- $as_echo " value_read = value_read_verify;"
- $as_echo " continue;"
- $as_echo " }"
- $as_echo ""
- $as_echo " /* stop now: */"
- $as_echo " break;"
- $as_echo " }"
- $as_echo " }"
+ AS_ECHO([""])
+ AS_ECHO([" /* try the compare-and-exchange: */"])
+ AS_ECHO([" value_read_verify = tme_memory_atomic_cx${size}(memory, value_read, value_written, rwlock, align_min);"])
+ AS_ECHO([""])
+ AS_ECHO([" /* if the compare-and-exchange failed: */"])
+ AS_ECHO([" if (__tme_predict_false(value_read_verify != value_read)) {"])
+ AS_ECHO([""])
+ AS_ECHO([" /* loop with the new value read from the memory: */"])
+ AS_ECHO([" value_read = value_read_verify;"])
+ AS_ECHO([" continue;"])
+ AS_ECHO([" }"])
+ AS_ECHO([""])
+ AS_ECHO([" /* stop now: */"])
+ AS_ECHO([" break;"])
+ AS_ECHO([" }"])
+ AS_ECHO([" }"])
fi
if test ${op} != write; then
- $as_echo ""
- $as_echo " /* return the value read: */"
- $as_echo " return (value_read);"
+ AS_ECHO([""])
+ AS_ECHO([" /* return the value read: */"])
+ AS_ECHO([" return (value_read);"])
fi
- $as_echo "}"
+ AS_ECHO(["}"])
done
if test `expr ${size} \>= ${size_ifdef}` = 1; then
- $as_echo ""
- $as_echo "#endif /* TME_HAVE_INT${size}_T */"
+ AS_ECHO([""])
+ AS_ECHO(["#endif /* TME_HAVE_INT${size}_T */"])
fi
done
--
2.47.0