libc: add _uv2d()/uv2f() and _vas*d() functions to vlrt.c
on 32 bit archs, implement 64 bit vasop with floatingpoint right hand side. also added is uvlong->double conversion function.
This commit is contained in:
parent
9124e491e5
commit
d2af6b40af
11 changed files with 486 additions and 22 deletions
|
@ -89,7 +89,6 @@ _d2v(Vlong *y, double d)
|
|||
void
|
||||
_f2v(Vlong *y, float f)
|
||||
{
|
||||
|
||||
_d2v(y, f);
|
||||
}
|
||||
|
||||
|
@ -113,6 +112,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
ulong _div64by32(Vlong, ulong, ulong*);
|
||||
void _mul64by32(Vlong*, Vlong, ulong);
|
||||
|
||||
|
|
|
@ -128,6 +128,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
/* too many of these are also needed by profiler; leave them out */
|
||||
#pragma profile off
|
||||
|
||||
|
|
|
@ -117,7 +117,6 @@ _d2v(Vlong *y, double d)
|
|||
void
|
||||
_f2v(Vlong *y, float f)
|
||||
{
|
||||
|
||||
_d2v(y, f);
|
||||
}
|
||||
|
||||
|
@ -141,6 +140,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
static void
|
||||
dodiv(Vlong num, Vlong den, Vlong *qp, Vlong *rp)
|
||||
{
|
||||
|
|
|
@ -99,6 +99,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
void
|
||||
_divvu(Vlong *q, Vlong n, Vlong d)
|
||||
{
|
||||
|
|
|
@ -141,6 +141,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
static void
|
||||
dodiv(Vlong num, Vlong den, Vlong *q, Vlong *r)
|
||||
{
|
||||
|
|
|
@ -117,7 +117,6 @@ _d2v(Vlong *y, double d)
|
|||
void
|
||||
_f2v(Vlong *y, float f)
|
||||
{
|
||||
|
||||
_d2v(y, f);
|
||||
}
|
||||
|
||||
|
@ -141,6 +140,43 @@ _v2f(Vlong x)
|
|||
return _v2d(x);
|
||||
}
|
||||
|
||||
double
|
||||
_uv2d(Vlong x)
|
||||
{
|
||||
return x.hi*4294967296. + x.lo;
|
||||
}
|
||||
|
||||
float
|
||||
_uv2f(Vlong x)
|
||||
{
|
||||
return _uv2d(x);
|
||||
}
|
||||
|
||||
void
|
||||
_vasaddd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)+rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vassubd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)-rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasmuld(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)*rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
void
|
||||
_vasdivd(Vlong *ret, Vlong *lv, double v2d(Vlong), double rv)
|
||||
{
|
||||
_d2v(lv, v2d(*lv)/rv);
|
||||
*ret = *lv;
|
||||
}
|
||||
|
||||
static void
|
||||
dodiv(Vlong num, Vlong den, Vlong *qp, Vlong *rp)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue