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:
cinap_lenrek 2015-10-04 19:49:02 +02:00
parent 9124e491e5
commit d2af6b40af
11 changed files with 486 additions and 22 deletions

View file

@ -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);

View file

@ -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

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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)
{

View file

@ -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)
{