mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-25 09:57:32 +09:00
Update NSS to 3.36.4-RTM
This commit is contained in:
parent
099459dec0
commit
fe96962962
148 changed files with 5550 additions and 5825 deletions
|
|
@ -1,90 +0,0 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include "uint128.h"
|
||||
|
||||
/* helper functions */
|
||||
uint64_t
|
||||
mask51(uint128_t x)
|
||||
{
|
||||
return x.lo & MASK51;
|
||||
}
|
||||
|
||||
uint64_t
|
||||
mask_lower(uint128_t x)
|
||||
{
|
||||
return x.lo;
|
||||
}
|
||||
|
||||
uint128_t
|
||||
mask51full(uint128_t x)
|
||||
{
|
||||
uint128_t ret = { x.lo & MASK51, 0 };
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint128_t
|
||||
init128x(uint64_t x)
|
||||
{
|
||||
uint128_t ret = { x, 0 };
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define CONSTANT_TIME_CARRY(a, b) \
|
||||
((a ^ ((a ^ b) | ((a - b) ^ b))) >> (sizeof(a) * 8 - 1))
|
||||
|
||||
/* arithmetic */
|
||||
|
||||
uint128_t
|
||||
add128(uint128_t a, uint128_t b)
|
||||
{
|
||||
uint128_t ret;
|
||||
ret.lo = a.lo + b.lo;
|
||||
ret.hi = a.hi + b.hi + CONSTANT_TIME_CARRY(ret.lo, b.lo);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* out = 19 * a */
|
||||
uint128_t
|
||||
mul12819(uint128_t a)
|
||||
{
|
||||
uint128_t ret = lshift128(a, 4);
|
||||
ret = add128(ret, a);
|
||||
ret = add128(ret, a);
|
||||
ret = add128(ret, a);
|
||||
return ret;
|
||||
}
|
||||
|
||||
uint128_t
|
||||
mul6464(uint64_t a, uint64_t b)
|
||||
{
|
||||
uint128_t ret;
|
||||
uint64_t t0 = ((uint64_t)(uint32_t)a) * ((uint64_t)(uint32_t)b);
|
||||
uint64_t t1 = (a >> 32) * ((uint64_t)(uint32_t)b) + (t0 >> 32);
|
||||
uint64_t t2 = (b >> 32) * ((uint64_t)(uint32_t)a) + ((uint32_t)t1);
|
||||
ret.lo = (((uint64_t)((uint32_t)t2)) << 32) + ((uint32_t)t0);
|
||||
ret.hi = (a >> 32) * (b >> 32);
|
||||
ret.hi += (t2 >> 32) + (t1 >> 32);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* only defined for n < 64 */
|
||||
uint128_t
|
||||
rshift128(uint128_t x, uint8_t n)
|
||||
{
|
||||
uint128_t ret;
|
||||
ret.lo = (x.lo >> n) + (x.hi << (64 - n));
|
||||
ret.hi = x.hi >> n;
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* only defined for n < 64 */
|
||||
uint128_t
|
||||
lshift128(uint128_t x, uint8_t n)
|
||||
{
|
||||
uint128_t ret;
|
||||
ret.hi = (x.hi << n) + (x.lo >> (64 - n));
|
||||
ret.lo = x.lo << n;
|
||||
return ret;
|
||||
}
|
||||
|
|
@ -1,35 +0,0 @@
|
|||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define MASK51 0x7ffffffffffffULL
|
||||
|
||||
#ifdef HAVE_INT128_SUPPORT
|
||||
typedef unsigned __int128 uint128_t;
|
||||
#define add128(a, b) (a) + (b)
|
||||
#define mul6464(a, b) (uint128_t)(a) * (uint128_t)(b)
|
||||
#define mul12819(a) (uint128_t)(a) * 19
|
||||
#define rshift128(x, n) (x) >> (n)
|
||||
#define lshift128(x, n) (x) << (n)
|
||||
#define mask51(x) (x) & 0x7ffffffffffff
|
||||
#define mask_lower(x) (uint64_t)(x)
|
||||
#define mask51full(x) (x) & 0x7ffffffffffff
|
||||
#define init128x(x) (x)
|
||||
#else /* uint128_t for Windows and 32 bit intel systems */
|
||||
struct uint128_t_str {
|
||||
uint64_t lo;
|
||||
uint64_t hi;
|
||||
};
|
||||
typedef struct uint128_t_str uint128_t;
|
||||
uint128_t add128(uint128_t a, uint128_t b);
|
||||
uint128_t mul6464(uint64_t a, uint64_t b);
|
||||
uint128_t mul12819(uint128_t a);
|
||||
uint128_t rshift128(uint128_t x, uint8_t n);
|
||||
uint128_t lshift128(uint128_t x, uint8_t n);
|
||||
uint64_t mask51(uint128_t x);
|
||||
uint64_t mask_lower(uint128_t x);
|
||||
uint128_t mask51full(uint128_t x);
|
||||
uint128_t init128x(uint64_t x);
|
||||
#endif
|
||||
Loading…
Add table
Add a link
Reference in a new issue