Skip to content

Commit

Permalink
fold bsqrt_stop into bsqrt; from kshe; ok tom@
Browse files Browse the repository at this point in the history
  • Loading branch information
omoerbeek committed Nov 29, 2017
1 parent 2d34f09 commit 726f05d
Showing 1 changed file with 12 additions and 27 deletions.
39 changes: 12 additions & 27 deletions usr.bin/dc/bcode.c
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* $OpenBSD: bcode.c,v 1.55 2017/11/28 17:43:45 otto Exp $ */
/* $OpenBSD: bcode.c,v 1.56 2017/11/29 19:13:31 otto Exp $ */

/*
* Copyright (c) 2003, Otto Moerbeek <otto@drijf.net>
Expand Down Expand Up @@ -95,7 +95,6 @@ static void bdiv(void);
static void bmod(void);
static void bdivmod(void);
static void bexp(void);
static bool bsqrt_stop(const BIGNUM *, const BIGNUM *, u_int *);
static void bsqrt(void);
static void not(void);
static void equal_numbers(void);
Expand Down Expand Up @@ -1268,28 +1267,12 @@ bexp(void)
free_number(p);
}

static bool
bsqrt_stop(const BIGNUM *x, const BIGNUM *y, u_int *onecount)
{
BIGNUM *r;
bool ret;

r = BN_new();
bn_checkp(r);
bn_check(BN_sub(r, x, y));
if (BN_is_one(r))
(*onecount)++;
ret = BN_is_zero(r);
BN_free(r);
return ret || *onecount > 1;
}

static void
bsqrt(void)
{
struct number *n;
struct number *r;
BIGNUM *x, *y;
BIGNUM *x, *y, *t;
u_int scale, onecount;
BN_CTX *ctx;

Expand All @@ -1312,14 +1295,16 @@ bsqrt(void)
bn_checkp(y);
ctx = BN_CTX_new();
bn_checkp(ctx);
for (;;) {
bn_checkp(BN_copy(y, x));
bn_check(BN_div(x, NULL, n->number, x, ctx));
bn_check(BN_add(x, x, y));
bn_check(BN_rshift1(x, x));
if (bsqrt_stop(x, y, &onecount))
break;
}
do {
bn_check(BN_div(y, NULL, n->number, x, ctx));
bn_check(BN_add(y, x, y));
bn_check(BN_rshift1(y, y));
bn_check(BN_sub(x, y, x));
t = x;
x = y;
y = t;
} while (!BN_is_zero(y) && (onecount += BN_is_one(y)) < 2);
bn_check(BN_sub(y, x, y));
r = bmalloc(sizeof(*r));
r->scale = scale;
r->number = y;
Expand Down

0 comments on commit 726f05d

Please sign in to comment.