Deleted Added
full compact
ScaledNumber.cpp (276479) ScaledNumber.cpp (280031)
1//==- lib/Support/ScaledNumber.cpp - Support for scaled numbers -*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Implementation of some scaled number algorithms.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Support/ScaledNumber.h"
1//==- lib/Support/ScaledNumber.cpp - Support for scaled numbers -*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// Implementation of some scaled number algorithms.
11//
12//===----------------------------------------------------------------------===//
13
14#include "llvm/Support/ScaledNumber.h"
15
16#include "llvm/ADT/APFloat.h"
17#include "llvm/Support/Debug.h"
18
19using namespace llvm;
20using namespace llvm::ScaledNumbers;
21
22std::pair<uint64_t, int16_t> ScaledNumbers::multiply64(uint64_t LHS,
23 uint64_t RHS) {

--- 140 unchanged lines hidden (view full) ---

164 assert(E <= ScaledNumbers::MaxScale);
165
166 // Find a new E, but don't let it increase past MaxScale.
167 int LeadingZeros = ScaledNumberBase::countLeadingZeros64(D);
168 int NewE = std::min(ScaledNumbers::MaxScale, E + 63 - LeadingZeros);
169 int Shift = 63 - (NewE - E);
170 assert(Shift <= LeadingZeros);
171 assert(Shift == LeadingZeros || NewE == ScaledNumbers::MaxScale);
15#include "llvm/ADT/APFloat.h"
16#include "llvm/Support/Debug.h"
17
18using namespace llvm;
19using namespace llvm::ScaledNumbers;
20
21std::pair<uint64_t, int16_t> ScaledNumbers::multiply64(uint64_t LHS,
22 uint64_t RHS) {

--- 140 unchanged lines hidden (view full) ---

163 assert(E <= ScaledNumbers::MaxScale);
164
165 // Find a new E, but don't let it increase past MaxScale.
166 int LeadingZeros = ScaledNumberBase::countLeadingZeros64(D);
167 int NewE = std::min(ScaledNumbers::MaxScale, E + 63 - LeadingZeros);
168 int Shift = 63 - (NewE - E);
169 assert(Shift <= LeadingZeros);
170 assert(Shift == LeadingZeros || NewE == ScaledNumbers::MaxScale);
171 assert(Shift >= 0 && Shift < 64 && "undefined behavior");
172 D <<= Shift;
173 E = NewE;
174
175 // Check for a denormal.
176 unsigned AdjustedE = E + 16383;
177 if (!(D >> 63)) {
178 assert(E == ScaledNumbers::MaxScale);
179 AdjustedE = 0;

--- 35 unchanged lines hidden (view full) ---

215 E -= Shift;
216
217 if (!E)
218 Above0 = D;
219 }
220 } else if (E > -64) {
221 Above0 = D >> -E;
222 Below0 = D << (64 + E);
172 D <<= Shift;
173 E = NewE;
174
175 // Check for a denormal.
176 unsigned AdjustedE = E + 16383;
177 if (!(D >> 63)) {
178 assert(E == ScaledNumbers::MaxScale);
179 AdjustedE = 0;

--- 35 unchanged lines hidden (view full) ---

215 E -= Shift;
216
217 if (!E)
218 Above0 = D;
219 }
220 } else if (E > -64) {
221 Above0 = D >> -E;
222 Below0 = D << (64 + E);
223 } else if (E == -64) {
224 // Special case: shift by 64 bits is undefined behavior.
225 Below0 = D;
223 } else if (E > -120) {
224 Below0 = D >> (-E - 64);
225 Extra = D << (128 + E);
226 ExtraShift = -64 - E;
227 }
228
229 // Fall back on APFloat for very small and very large numbers.
230 if (!Above0 && !Below0)

--- 89 unchanged lines hidden ---
226 } else if (E > -120) {
227 Below0 = D >> (-E - 64);
228 Extra = D << (128 + E);
229 ExtraShift = -64 - E;
230 }
231
232 // Fall back on APFloat for very small and very large numbers.
233 if (!Above0 && !Below0)

--- 89 unchanged lines hidden ---