llvm-6502/lib/Support
Lang Hames a46dd583d6 [APFloat][ADT] Fix sign handling logic for FMA results that truncate to zero.
This patch adds a check for underflow when truncating results back to lower
precision at the end of an FMA. The additional sign handling logic in
APFloat::fusedMultiplyAdd should only be performed when the result of the
addition step of the FMA (in full precision) is exactly zero, not when the
result underflows to zero.

Unit tests for this case and related signed zero FMA results are included.

Fixes <rdar://problem/18925551>.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@225123 91177308-0d34-0410-b5e6-96231b3b80d8
2015-01-04 01:20:55 +00:00
..
Unix Remove unnecessary StringRef->std::string conversion. 2014-12-29 20:59:02 +00:00
Windows Remove the last unnecessary member variable of mapped_file_region. NFC. 2014-12-16 03:10:29 +00:00
Allocator.cpp
APFloat.cpp [APFloat][ADT] Fix sign handling logic for FMA results that truncate to zero. 2015-01-04 01:20:55 +00:00
APInt.cpp APInt: udivrem should use machine instructions for single-word APInts 2014-12-14 09:41:56 +00:00
APSInt.cpp
ARMBuildAttrs.cpp
ARMWinEH.cpp
Atomic.cpp
BlockFrequency.cpp
BranchProbability.cpp
circular_raw_ostream.cpp
CMakeLists.txt Merge StreamableMemoryObject into MemoryObject. 2014-11-12 03:55:46 +00:00
CommandLine.cpp Silence static analyzer warnings in LLVMSupport. 2014-12-11 19:46:38 +00:00
Compression.cpp [msan] Annotate zlib functions for MemorySanitizer. 2014-11-25 15:24:07 +00:00
ConvertUTF.c
ConvertUTFWrapper.cpp
COPYRIGHT.regex
CrashRecoveryContext.cpp
DAGDeltaAlgorithm.cpp
DataExtractor.cpp
DataStream.cpp Merge StreamableMemoryObject into MemoryObject. 2014-11-12 03:55:46 +00:00
Debug.cpp Allow multiple -debug-only args 2014-11-21 18:06:09 +00:00
DeltaAlgorithm.cpp
Dwarf.cpp Modernize doxygen comments in Support/Dwarf.h 2014-10-23 04:08:38 +00:00
DynamicLibrary.cpp
Errno.cpp Silence warning: variable 'buffer' set but not used. 2014-12-04 21:36:38 +00:00
ErrorHandling.cpp Converting the ErrorHandlerMutex to a ManagedStatic to avoid the static constructor and destructor. 2014-10-03 22:03:12 +00:00
FileOutputBuffer.cpp Move the resize file feature from mapped_file_region to the only user. 2014-12-12 18:13:23 +00:00
FileUtilities.cpp
FoldingSet.cpp
FormattedStream.cpp
GraphWriter.cpp Fix style. 2014-11-07 21:30:36 +00:00
Hashing.cpp
Host.cpp Remove a debugging assert. 2014-12-17 03:38:04 +00:00
IntEqClasses.cpp
IntervalMap.cpp
IntrusiveRefCntPtr.cpp
IsInf.cpp
IsNAN.cpp
LEB128.cpp
LineIterator.cpp Add CRLF support to LineIterator. 2014-11-03 14:09:47 +00:00
LLVMBuild.txt
Locale.cpp
LockFileManager.cpp Misc cleanups to the FileSytem api. 2014-09-11 20:30:02 +00:00
Makefile
ManagedStatic.cpp Revert 220932. 2014-11-05 04:44:31 +00:00
MathExtras.cpp Fix llvm::huge_valf multiple initializations with Visual C++. 2014-09-27 14:41:29 +00:00
MD5.cpp Make the MD5 result name consistent between functions, header and source. 2014-10-06 13:48:07 +00:00
Memory.cpp
MemoryBuffer.cpp Pass EC by reference to MemoryBufferMMapFile to return error code. 2014-12-12 22:27:53 +00:00
MemoryObject.cpp Make readBytes pure virtual. Every real implementation has it. 2014-11-12 02:30:38 +00:00
Mutex.cpp
Options.cpp Defining a new API for debug options that doesn't rely on static global cl::opts. 2014-10-15 21:54:35 +00:00
Path.cpp Add missing implementation of 'sys::path::is_other' to the support library. 2014-12-18 18:19:47 +00:00
PluginLoader.cpp
PrettyStackTrace.cpp
Process.cpp Remove dead code. NFC. 2014-12-04 16:59:36 +00:00
Program.cpp
RandomNumberGenerator.cpp Random Number Generator Refactoring (removing from Module) 2014-12-17 18:12:10 +00:00
raw_os_ostream.cpp
raw_ostream.cpp Clean up static analyzer warnings. 2014-12-12 21:48:03 +00:00
README.txt.system
regcclass.h
regcname.h
regcomp.c
regengine.inc
regerror.c
regex2.h
regex_impl.h
Regex.cpp
regexec.c
regfree.c
regstrlcpy.c
regutils.h
RWMutex.cpp
ScaledNumber.cpp Clean up static analyzer warnings. 2014-12-12 21:48:03 +00:00
SearchForAddressOfSpecialSymbol.cpp
Signals.cpp
SmallPtrSet.cpp Update SetVector to rely on the underlying set's insert to return a pair<iterator, bool> 2014-11-19 07:49:26 +00:00
SmallVector.cpp
SourceMgr.cpp Remove unnecessary .c_str() when implicitly converting to Twine 2014-11-06 01:13:27 +00:00
SpecialCaseList.cpp Remove support for undocumented SpecialCaseList entries. 2014-11-20 01:27:19 +00:00
Statistic.cpp
StreamingMemoryObject.cpp Fixing -Wtype-limits warnings with the asserts (the expression would always evaluate to true). Also fixing a -Wcast-qual warning, where the cast expression isn't required. 2014-11-13 13:55:13 +00:00
StringExtras.cpp
StringMap.cpp
StringPool.cpp
StringRef.cpp
SystemUtils.cpp
TargetRegistry.cpp
Threading.cpp Revert 220932. 2014-11-05 04:44:31 +00:00
ThreadLocal.cpp ThreadLocal: Move Unix-specific code out of Support/ThreadLocal.cpp 2014-12-15 01:19:53 +00:00
Timer.cpp
TimeValue.cpp
ToolOutputFile.cpp
Triple.cpp Triple: Add AMDHSA operating system type 2014-12-02 16:45:47 +00:00
Twine.cpp
Unicode.cpp
Valgrind.cpp
Watchdog.cpp
YAMLParser.cpp
YAMLTraits.cpp Fix memory leak in error paths in YAMLTraits by using unique_ptr 2014-09-15 18:39:24 +00:00

Design Of lib/System
====================

The software in this directory is designed to completely shield LLVM from any
and all operating system specific functionality. It is not intended to be a
complete operating system wrapper (such as ACE), but only to provide the
functionality necessary to support LLVM.

The software located here, of necessity, has very specific and stringent design
rules. Violation of these rules means that cracks in the shield could form and
the primary goal of the library is defeated. By consistently using this library,
LLVM becomes more easily ported to new platforms since the only thing requiring
porting is this library.

Complete documentation for the library can be found in the file:
  llvm/docs/SystemLibrary.html
or at this URL:
  http://llvm.org/docs/SystemLibrary.html

While we recommend that you read the more detailed documentation, for the
impatient, here's a high level summary of the library's requirements.

 1. No system header files are to be exposed through the interface.
 2. Std C++ and Std C header files are okay to be exposed through the interface.
 3. No exposed system-specific functions.
 4. No exposed system-specific data.
 5. Data in lib/System classes must use only simple C++ intrinsic types.
 6. Errors are handled by returning "true" and setting an optional std::string
 7. Library must not throw any exceptions, period.
 8. Interface functions must not have throw() specifications.
 9. No duplicate function impementations are permitted within an operating
    system class.

To accomplish these requirements, the library has numerous design criteria that
must be satisfied. Here's a high level summary of the library's design criteria:

 1. No unused functionality (only what LLVM needs)
 2. High-Level Interfaces
 3. Use Opaque Classes
 4. Common Implementations
 5. Multiple Implementations
 6. Minimize Memory Allocation
 7. No Virtual Methods