| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code cleanup/bug fix
Description:
Hoist function call out of inner loop of type conversion by retrieving
source & destination precisions once, outside the loop.
There's still some overhead because this information is stored in
variables set at run-time, when it's really constant for the particular
machine. Further work to set compiler macros would allow this code to be
optimized better by the compiler with dead code removal. We'll continue
to work on this area...
Also, made new internal H5T_compiler_conv routine static instead of of
private, until we need to reference it from another source code module.
Platforms tested:
h5committest
FreeBSD 4.11 (sleipnir)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: H5T_register() replaces any existing data conversion path
with a new path.
Solution: Added a parameter to H5T_register() and H5T_path_find() to
signal the library whether the new conversion path is from API function
H5Tregister() or from private function like H5T_init_interface(). If it
is from H5Tregister(), replace existing path. If it's from H5T_init_interface()
and the library is trying to register default hard conversion functions,
don't replace existing path because the path is registered by the library.
For example, the library registered H5T_conv_int_float() and is trying to
register H5T_conv_long_float(). The size of long is equal to int. There's
no need to replace the path H5T_conv_int_float().
Platforms tested: h5committest and fuss.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Quincey added the condition branch (else if (*((ST*)S) != (ST)((DT)(*((ST*)S)))))
in the definition of the macro H5T_CONV_Fx_CORE. It handles a special situation
when the source is "float" and assigned the value of "INT_MAX". Compilers do roundup
making this value "INT_MAX+1". This branch is to check that situation and return
exception for some compilers, mainly GCC.
The branch if (*((ST*)S) > (DT)(D_MAX) || (S_PREC < D_PREC && *((ST*)S) ==
(DT)(D_MAX))) is for some compilers like Sun, HP, IBM, and SGI where under
the same situation the "int" doesn't overflow.
A test was added to dt_arith.c to check 2 conversions, from float to int where the
float is INT_MAX, and from double to signed char where the double is SCHAR_MAX.
Platforms tested: h5committest and fuss.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug fix & code cleanup
Description:
Fix problem with detecting precision overflows in a more portable way.
(I was depending on the compiler not removing some temporary variables, which
was a bad bet... :-)
Also, hoist the checking for the exception handling routine out of the
inner conversion loop, which should speed up conversions which don't have an
exception handling routine defined.
Platforms tested:
FreeBSD 4.11 (sleipnir)
h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug fix & code cleanup
Description:
Address most of datatype conversion exception handling bug that Ed
Hartnett reported. (He's reported a different problem now, but we're closer
at least).
Also, condense exception handling #ifdef's into one location instead of
spread out in so many places.
Platforms tested:
FreeBSD 4.11 (sleipnir)
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
| |
Description: Changed the names of macros defined in H5Tpkg.h from
H5T_CONV_INTERIM_XXX_XXX to H5T_CONV_INTERNAL_XXX_XXX to be more
descriptive.
Platforms tested: fuss - simple change
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Changed the names of the interim macros for data conversion
checked in yesterday from the SOURCE_DESTINATION style (like FP_FP or
LDOUBLE_LLONG) to the H5T_CONV_INTERIM_SOURCE_DESTINATION style (like
H5T_CONV_INTERIM_FP_FP OR H5T_CONV_INTERIM_LDOUBLE_LLONG), to be more
descriptive. These macros are defined in H5Tpkg.h and used in H5Tconv.c
and H5T.c for interim purpose.
Platforms tested: fuss - simple change.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Added 2 new configure options, --enable-exception and --enable-accuracy.
--enable-exception lets the library check whether user's exception handling
functions are present during compiler data conversions and use them if they are.
When it's disabled, this step is skipped to improve conversion speed. This
step isn't implemented yet for soft conversions because there would be little
gain in speed.
--enable-accuracy guarantees data accuracy during data conversions. It means
the library will choose compiler conversions only if the accurate data is
secured. Otherwise, the library will go for the library's own conversions. If
this option is disabled, the library uses compiler conversions in favor of
their speed as long as they work even if data can be incorrect.
Platforms tested: h5committest and fuss. Some systems may fail after this
checkin.
|
|
|
|
|
|
|
|
|
|
| |
Description: In some macro definition, some constant values like D_MIN and D_MAX were
not casted to the destination type. They may cause problems for some system like
TFLOPS.
Solution: Cast them to destination type.
Platforms tested: fuss - very simple changes.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code cleanup
Description:
Trim trailing whitespace, which is making 'diff'ing the two branches
difficult.
Solution:
Ran this script in each directory:
foreach f (*.[ch] *.cpp)
sed 's/[[:blank:]]*$//' $f > sed.out && mv sed.out $f
end
Platforms tested:
FreeBSD 4.11 (sleipnir)
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
| |
Description: In the macro H5T_CONV_Xx_CORE definition, one line said
"} else if (*((ST*)S) < (D_MIN)) {". It caused problem on TFLOPS because
it defines LLONG_MIN as a hexadecimal value instead of decimal value.
Solution: Changed the line to "} else if (*((ST*)S) < (DT)(D_MIN)) {" to
avoid the problem. (Need to change other similar places when time permits.)
Platforms tested: fuss - simple change.
|
|
|
|
|
|
|
|
|
|
|
| |
New port
Description:
Elena asked me to check in her NEC SX-6 work, so here it is! :-)
Platforms tested:
FreeBSD 4.11 (sleipnir)
NEC SX-6 (by Elena)
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description:
For the definition of the macro H5T_CONV_Xx_CORE, added a condition branch
(else if (*((ST*)S) == (DT)(D_MAX))) which seems redundant.
It handles a special situation when the source is "float" and assigned the value
of "INT_MAX". A compiler may do roundup making this value "INT_MAX+1". However,
when do comparison "if (*((ST*)S) > (DT)(D_MAX))", the compiler may consider them
equal.
Platforms tested: fuss - simple change.
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Data conversion function H5T_conv_i32le_f64le() was unused.
Because we have new conversion functions for integers and floating numbers,
this old function is taken out.
Platforms tested: fuss - simple change.
Misc. update:
|
|
|
|
|
|
|
|
| |
Description: Fix the codes of last checkin(Bug #341). Some failures happened
in daily test from last checkin. Try to fix them in this checkin.
Platforms tested: modi4, mir, and tg-login2.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Feature
Description:
Added "support" for UTF-8 character encoding.
Solution:
Wrote tests to check that UTF-8 can be used in a number of places in
HDF5 (object names, data, etc.). These tests live in test/tunicode.c.
Added a new UTF-8 character encoding for datatypes.
Platforms tested:
mir, modi4, heping
Misc. update:
|
|
|
|
|
|
|
|
|
| |
Description: A user reported conversion of floating-point numbers returned some wrong value. It turned
out a variable in H5T_conv_f_f() wasn't reset after being used for each element. See bug #356 for details.
Solution: Simple reset it.
Platforms tested: fuss; also tested with the program user provided. Very simple change.
|
|
|
|
|
|
|
|
|
|
| |
Description: During last change, part of the code wasn't updated in
copy and paste accordingly. It was in the exception handling of NaN
in H5T_conv_f_f().
Solution: Corrected.
Platforms tested: No test needed - trivial.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
integers.
Description: The 6th step of changing conversion test. This checkin is
only for conversion of special values from floating-points to integers.
Solution: This test is seperated from regular value conversion. It reuses
the same function test_conv_int_float() in test/dtypes.c. The source buffer
of floating-point type is filled up with 8 special values, +/-0, +/-infinity,
+/-QNaN, +/-SNaN.
Also added 3 new conversion exception values H5T_CONV_EXCEPT_PINF, H5T_CONV_EXCEPT_NINF,
H5T_CONV_EXCEPT_NAN, for floating-point special values positive infinity, negative
infinity, and NaN. These values are for conversion exception callback function defined
through H5Pset_type_conv_cb(). (Remember to update the document!)
Platforms tested: h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
types.
Description: The 5th step of changing conversion test. This checkin is only for conversion
of special values between floating-point types.
Solution: This test is seperated from regular value conversion. It reuse the same function
test_conv_flt_1() in test/dtypes.c. The source buffer of floating-point type is filled up
with 8 special values, +/-0, +/-infinity, +/-QNaN, +/-SNaN.
Platforms tested: h5committest, fuss, and modi4.
|
|
|
|
|
|
|
|
|
|
| |
Description: The recent change of conversion between floating-point and floating-point types in dtypes.c have
detected some bugs in H5T_conv_f_f in H5Tconv.c.
Solution: This checkin is to fix these bugs. They happened in a few places in H5T_conv_f_f causing incorrect
rounding, denormalization, etc.
Platforms tested: h5committest and modi4
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Condition check of macro H5_ULLONG_TO_FP_CAST_WORKS was accidentally
taken out in last revision. This macro is defined for Windows because Windows
doesn't support conversion from "unsigned long long" to any floating-point type.
Solution: Added it back to H5T_conv_ullong_xxx() functions(xxx is any of "float",
"double", or "long double").
Platforms tested: tested on Windows.
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Somehow, the hardware conversions between "long double" and other native floating-point
types were left out.
Solution: Added the hardware conversion functions in H5Tconv.c and test cases in dtypes.c.
Platforms tested: h5committest and fuss.
Misc. update: updated MANIFEST to replace bin/reconfigure.sh with bin/reconfigure
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: When hardware conversion between "long double" and integers was added to the
library, the "double" used in H5T_CONV_Fx and H5T_CONV_xF for alignment wasn't big enough for
"long double". New macros H5T_CONV_Lx and H5T_CONV_xL were added to use "long double" for
alignment. But later it's found out the new macros were not necessary.
Solution: Took out the new macros H5T_CONV_Lx and H5T_CONV_xL; change the "double" to "long
double" for alignment in H5T_CONV_Fx and H5T_CONV_xF.
Platforms tested: h5committest
|
|
|
|
|
|
|
|
|
| |
Description: At line 3564, the command H5T_bit_set(s, src.u.f.mpos, 1, FALSE)
has unclear intention to me. Before I figure it out, move it to line 3590,
where I think it should be. This did fix some data conversion.
Platforms tested: fuss - already test it for v1.6.
|
|
|
|
|
|
|
|
|
|
| |
Description: Added support of hardware conversion between "long double" and integers(mainly
in H5Tconv.c) and some test cases(mainly in test/dtypes.c).
Platforms tested: h5committest and fuss.
Misc. update: RELEASE.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Removed PABLO from the source
Solution:
Platforms tested: arabica with 64-bit, copper with parallel,
heping with GNU C and C++ and PGI fortran (but
I disabled hl, there is some weird problem only
on heping: F9XMODFLAG is not
propagated to the Makefile files
Misc. update:
|
|
|
|
|
|
|
|
|
| |
Description: Test conversion from native integer to derived floating-point type and convert back;
test conversion from derived floating-point to derived floating-point types and convert back. Fixed
a few minor bugs related to type conversion in the library.
Platforms tested: h5committest and fuss
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Description: Start to support software conversion between long double and
all integers.
Solution: No major changes to the algorithm. Changes to configure is to
exclude SGI for long double to integers test because there're too many problems
in their compiler.
Platforms tested: h5committest, modi4, fuss, Teragrid, arabica
Misc. update: RELEASE.txt
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug Fix/Code Cleanup/Doc Cleanup/Optimization/Branch Sync :-)
Description:
Generally speaking, this is the "signed->unsigned" change to selections.
However, in the process of merging code back, things got stickier and stickier
until I ended up doing a big "sync the two branches up" operation. So... I
brought back all the "infrastructure" fixes from the development branch to the
release branch (which I think were actually making some improvement in
performance) as well as fixed several bugs which had been fixed in one branch,
but not the other.
I've also tagged the repository before making this checkin with the label
"before_signed_unsigned_changes".
Platforms tested:
FreeBSD 4.10 (sleipnir) w/parallel & fphdf5
FreeBSD 4.10 (sleipnir) w/threadsafe
FreeBSD 4.10 (sleipnir) w/backward compatibility
Solaris 2.7 (arabica) w/"purify options"
Solaris 2.8 (sol) w/FORTRAN & C++
AIX 5.x (copper) w/parallel & FORTRAN
IRIX64 6.5 (modi4) w/FORTRAN
Linux 2.4 (heping) w/FORTRAN & C++
Misc. update:
|
|
|
|
|
|
|
|
|
|
|
| |
Description: "char" was considered as always "signed char" in data type conversion. However, ISO C leaves
the definition of "char" to individual implementation. i.e. for IBM AIX C compiler, it's treated as "unsigned
char".
Solution: Changed all "char" to "signed char". Don't even do "char" anymore because its definition is up
to each vendor.
Platforms tested: h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Purpose:
Feature
Description:
Datatypes and groups now use H5FO "file object" code that was previously
only used by datasets. These objects will hold a file open if the file
is closed but they have not yet been closed. If these objects are unlinked
then relinked, they will not be destroyed. If they are opened twice (even
by two different names), both IDs will "see" changes made to the object
using the other ID.
When an object is opened using two different names (e.g., if a dataset was
opened under one name, then mounted and opened under its new name), calling
H5Iget_name() on a given hid_t will return the name used to open that hid_t,
not the current name of the object (this is a feature, and a change from the
previous behavior of datasets).
Solution:
Used H5FO code that was already in place for datasets. Broke H5D_t's, H5T_t's,
and H5G_t's into a "shared" struct and a private struct. The shared structs
(H5D_shared_t, etc.) hold the object's information and are used by all IDs
that point to a given object in the file. The private structs are pointed
to by the hid_t and contain the object's group entry information (including its
name) and a pointer to the shared struct for that object.
This changed the naming of structs throughout the library (e.g., datatype->size
is now datatype->shared->size). I added an updated H5Tinit.c to windows.zip.
Platforms tested:
Visual Studio 7, sleipnir, arabica, verbena
Misc. update:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug fix
Description:
Correct possible core dump when a datatype conversion function is
registered with the library after a compound datatype has been converted
(having it's type conversion information cached by the library). The compound
datatype must have been created by inserting the fields in non-increasing
offset order to see the bug.
Solution:
Re-sort the fields in the compound datatypes before recalculating the
cached information when performing the conversion on them.
Platforms tested:
FreeBSD 4.10 (sleipnir)
h5committested
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Eliminate duplicated call to H5T_detect_class()
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Purpose:
Bug Fix
Description:
If an HDF5 file grows larger than its address space, it dies and is unable to
write any data. This is more likely to happen since users are able to change
the number of bytes used to store addresses in the file.
Solution:
HDF5 now throws an error instead of dying. In addition, it "reserves" address
space for the local heap and for object headers (which do not allocate space
immediately). This ensures that after the error occurs, there is enough address
space left to flush the entire file to disk, so no data is lost.
A more complete explanation is at /doc/html/TechNotes/ReservedFileSpace.html
Platforms tested:
sleipnir, copper (parallel), verbena, arabica, Windows (Visual Studio 7)
Solution:
Platforms tested:
Misc. update:
|
|
|
|
|
|
|
|
|
|
|
| |
Code cleanup
Description:
Clean up almost all warnings from Windows builds.
Platforms tested:
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code cleanup & minor optimization
Description:
Re-work the way interface initialization routines are specified in the
library to avoid the overhead of checking for them in routines where there is
no interface initialization routine. This cleans up warnings with gcc 3.4,
reduces the library binary size a bit (about 2-3%) and should speedup the
library's execution slightly.
Platforms tested:
FreeBSD 4.10 (sleipnir) w/gcc34
h5committest
|
|
|
|
|
|
|
|
|
|
| |
Description: This is an enhancement after a user reported data writing failure
for array datatype of compound type with variable-length type in the v1.6 branch.
Solution: Added new test and ran with Purify. Fixed memory errors and leaks in
H5Tconv.c.
Platforms tested: h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Avoid making copy of default vlen allocation info when default DXPL is
used. Just retarget pointer to point to default info directly.
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Use 'size_t' instead of 'hsize_t' to track the number of elements in
memory buffers, especially for type conversion.
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Avoid a memory copy by directly reading from the variable-length sequence
buffer when there is no type conversion on the way to disk.
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Avoid running conversion routine when it's a noop.
Also, pick a minimum size for the variable-sized sequence conversion
buffer, instead of allocating lots of small buffers.
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Restructure conversion loop of variable-length objects to avoid walking
through memory backwards and allocating as many temporary buffers. (This uses
the optimized method used in the atomic type conversions)
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code optimization
Description:
Eliminate redundant memory allocation for type conversion of variable-length
sequences.
Platforms tested:
Solaris 2.7 (arabica)
FreeBSD 4.10 (sleipnir) w/parallel
Too minor to require h5committest
|
|
|
|
|
|
|
|
|
| |
Description: H5T_reverse_order was declared as private function.
Solution: Change it to static local function in H5Tconv.c since it's not
used by any function in other file.
Platforms tested: RH 8(fuss)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug fix (sorta)
Description:
Add hack to allow the MS Visual Studio 6 compiler to build the library.
It cannot cast unsigned long long values to float or double values. So, add
another configuration macro to disable this conversion in the library. Just
the "hardware" conversion is disabled, so the library will still correctly
convert unsigned long long to float and double values, it will just happen
more slowly with the "software" conversion routine.
Platforms tested:
FreeBSD 4.9 (sleipnir) with "Windows" setting faked
inappropriate for h5committest
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Bug fix (sorta)
Description:
The SGI machines have problems accurately (and consistently) converting
unsigned long values to float and double values, so put in a bit of a hack in
the datatype conversion test code to allow them to get "close enough". This
hack is enabled at configure time by a flag which should only be set on machines
with this problem.
Platforms tested:
FreeBSD 4.9 (sleipnir)
h5committest
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Code cleanup
Description:
Clean up lots of warnings based on those reported from the SGI compilers
as well as gcc.
Platforms tested:
SGI O3900, IRIX64 6.5 (Cheryl's SGI machine)
FreeBSD 4.9 (sleipnir) w/ & w/o parallel
h5committest
|